الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث عن الباسوورد الموجود بنفس السجل لاسم المستخدم

بدأه neo1115 في 2 أكتوبر 2008 · 9 رد · 1,377 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

هذه أول مشاركة لي وأرجو الافادة

********

كيف يمكن لي أن أجعل البحث عن الباسورد للمستخدم في البرنامج ان يرجع لي قيمة الباسورد المخصصة فقط لهذا المستخدم فقط علما بأنني قمت بتخزين اسماء المستخدمين وكلمة السر في جدول مخصص لذلك

وعندما وضعت هذا الكود قام بالبحث عن الاسم وكلمة السر ولكن ثمة اختراق كبير في هذا الكود

procedure Tinter.bt1Click(Sender: TObject);
begin
if dm.sec1.Locate ('usern',c1.Text,[]) 
then
if  dm.sec1.Locate  ('passw',e2.Text,[])  then
begin
showmessage ('الي العمل ...'+c1.text+'أهـــلاً  و  ســــهلاً  يا');
inter.Hide;
star.Show
else
showmessage ('الاسم أو الباسوورد خطأ...يرجي التاكد');
else;

مبديا ان هذا الكود يعمل بشكل صحيح ولكن عند التدقيق في العمل سنجد انه سيقبل اية باسورد اخري موجودة في الجدول لنفس المستخدم والعكس صحيح

أرجو منكم الافادة والتعديل

تم تعديل هذه المشاركة بواسطة Swift في 2 أكتوبر 2008 في 21:45 — السبب: تنبيه : خط كبير / تنسيق كود

إجعل أدني طموحك أن تمسك النجوم ...حتي تصل الي ما تريد

#2
procedure TLoginF.Button2Click(Sender: TObject);
begin
  if ADOTable1.Locate('Name',Edit1.Text,[locaseinsensitive]) then
	begin
	if ADOTable1.FieldByName('Password').AsString=Edit2.Text then
				begin
				LoginF.Visible := false;
				MainF.Visible := True;
 END
 else
showmessage ('Sorry! Wrong Password');
 END
 else
showmessage ('sorry! No Name Found');
end;

اقتباس
مبديا ان هذا الكود يعمل بشكل صحيح ولكن عند التدقيق في العمل سنجد انه سيقبل اية باسورد اخري موجودة في الجدول لنفس المستخدم والعكس صحيح

عفواً .. ماذا تقصد بانة يقبل اى باسوورد اخرى لنفس المستخدم

قمت بكتابة كود بالأعلى اختبرة

Comming Soon

#3

يا اخي الله يهديك لما الكتابة بخط كبير جدا فهو مزعج...

d4baa0.gif
#4

بدلاً من إستخدام locate للبحث مرتين يمكن ذلك مرة واحدة مباشرة

if  dm.sec1.Locate  ('usern;passw',[c1.Text,e2.Text],[])  then
begin
showmessage ('الي العمل ...'+c1.text+'أهـــلاً  و  ســــهلاً  يا');
inter.Hide;
star.Show
else
showmessage ('الاسم أو الباسوورد خطأ...يرجي التاكد');
else;

ويمكن اضافة اي حدد من الحقول للبحث والفصل بينهم بفاصلة منقوطة.

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#5

مشكور جدا يا أخ سويف علي الكود قمت بتجريبه وأوفي بالغرض

اقتباس
عفواً .. ماذا تقصد بانة يقبل اى باسوورد اخرى لنفس المستخدم

لربما يا اخ سويف لا يتسع المقام هنا للشرح النظري للمقصد ولكن عموما علي فرض انك ستجرب ان تكتب الكود الخاص بي عندك للتجربة ومن ثم قم بادخال اكثر من باسوورد المخزنة بالجدول ليوزرنيم واحد فقط و المخزنة ايضا بنفس الجدول وستري بنفسك

ارجو ان تخبرني علي ما حصلت....... عموما لقد تم حل المشكلة الخاص بي مشكور مرة اخري

اقتباس

يا اخي الله يهديك لما الكتابة بخط كبير جدا فهو مزعج...

هههههه ... صدقني يا اخ محمد لم اقصد هذا الازعاج فحاولت ان اتدارك الامر ولكن بعد فوات الاوان :blush:

إجعل أدني طموحك أن تمسك النجوم ...حتي تصل الي ما تريد

#6

لم أنتبه إلى الكود الذي كتبه كان خطأ

عليك تغير السطر الاول الى

if  dm.sec1.Locate  ('usern;passw',VarArrayOf([c1.Text,e2.Text]),[])  then

اي اضافة VarArrayOf الى البارامتير الثاني حيث نقوم بالبحث عن طريق أكثر من حقل وبحاجة الى اعطاء القيم كمصفوفة من نوع Variant

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#7

مشكور ايضا يا محمد نسمان علي الكود فلقد قمت بتجريبه واوفي بالغرض ايضا

لقد استغربت من الكود السابق لانه لم يعمل معي نهائيا لانني اعرفك علي مستوي قطاع غزة ذو خبرة عالية بالبرمجة بشكل عام والدلفي علي وجه الخصوص

ولتكون منك الافادة اكثر ... اريد ان اعرف لماذا عندما وضعنا كلمة VarArrayOf قام بعمل المطلوب لنني بصراحة ليس من هواة نسخ الاكواد فقط اريد ان اعرف لماذا بالتحديد ؟ وهل لهذه الكلمة مسارات اخري يمكن الاستفادة منها؟؟؟ ارجو الافادة

إجعل أدني طموحك أن تمسك النجوم ...حتي تصل الي ما تريد

#8

دالة Locate تقوم بالبحث عن أول سجل يقوم بمطابقة شرط البحث، وشرط البحث يتكون من ثلاث معاملات الأول الحقل المطلوب البحث به والثاني البيانات المطلوب البحث عنها ويأخذ المعامل الثاني نوع البيانات على أنه Variant، حيث تلاحظ سواء استخدمت حقل نصي او رقمي ومررت قيم نصية او رقمية في المعامل الثاني سوف تعمل الدالة بدون الحاجة لدوال التحويل بين أنواع المتغيرات

هذا هو النوع الشائع من البحث وهو البحث في حقل واحد عن قيمة واحدة

لكن الكثير لا يعلمون أنه يمكن استخدام Locate للبحث عن أكثر من حقل وتمرير أكثر من قيمة وهو المثال الذي ذكرته سابقاً، ويتم في المعامل الأول اعطاء الحقول المطلوب البحث عنها ويفصل بينها فاصلة منقوطة، ولكن نحن بحاجة لأكثر من قيمة للبحث لذا نمرر جميع القيم المراد البحث عنها ضمن الحقول المحددة ك Array of Variant، لذا نستخدم دالة VarArrayOf ومن ثم نعطيها مجموعة من القيم بعدد الحقول المراد البحث عنها وسوف تقوم بتحويلهم ل array of variant ويتم تمرير كل تكل القيم كقيمة واحد للمعامل الثاني

أتمنى أن أكون أوضحت الصورة قليلا

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#9
محمد نسمان كتب:
دالة Locate تقوم بالبحث عن أول سجل يقوم بمطابقة شرط البحث، وشرط البحث يتكون من ثلاث معاملات الأول الحقل المطلوب البحث به والثاني البيانات المطلوب البحث عنها ويأخذ المعامل الثاني نوع البيانات على أنه Variant، حيث تلاحظ سواء استخدمت حقل نصي او رقمي ومررت قيم نصية او رقمية في المعامل الثاني سوف تعمل الدالة بدون الحاجة لدوال التحويل بين أنواع المتغيرات

هذا هو النوع الشائع من البحث وهو البحث في حقل واحد عن قيمة واحدة

لكن الكثير لا يعلمون أنه يمكن استخدام Locate للبحث عن أكثر من حقل وتمرير أكثر من قيمة وهو المثال الذي ذكرته سابقاً، ويتم في المعامل الأول اعطاء الحقول المطلوب البحث عنها ويفصل بينها فاصلة منقوطة، ولكن نحن بحاجة لأكثر من قيمة للبحث لذا نمرر جميع القيم المراد البحث عنها ضمن الحقول المحددة ك Array of Variant، لذا نستخدم دالة VarArrayOf ومن ثم نعطيها مجموعة من القيم بعدد الحقول المراد البحث عنها وسوف تقوم بتحويلهم ل array of variant ويتم تمرير كل تكل القيم كقيمة واحد للمعامل الثاني

أتمنى أن أكون أوضحت الصورة قليلا

شكرا يا اخ محمد لاهتمامك والتوضيح واريد ان استفسر شئ اخر وهو المعاملات الثلاث فانا اعرف المعامل الاول والثاني كما ذكر ولكن المعامل الثالت ما فائدته وهل تمرير قيمة بداخله والي اي معامل ستعود هذه القيمة ساعطي مثال

dm.sec.locate ('user';'pass',e.text,e2.text,[ماذا يمكن ان نضع داخل هذه الاقواس ولماذا تترك فارغة احيانا]);

ارجو ان لا اكون قد اثقلت عليكم

إجعل أدني طموحك أن تمسك النجوم ...حتي تصل الي ما تريد

#10

نضع فيها خيارات البحث:

1 - lopartialkey: للمطابقة الجزئية

2- فارغ: للمطابقة الكاملة

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…