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

ما هي كيفية عمل دالة php قوية للبحث في mysql؟

مغلق
بدأه Logic#7 في 25 يوليو 2005 · 19 رد · 3,349 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

إخواني أعضاء الفريق العربي...

عندي جدول به أسماء طلبة...

وعندي مربع بحث عن الطلبة في صفحة php...

عند البحث عن الإسم بالضبط يتم إظهار النتائج.. ولكن المشكلة في كيفية تلافي أخطاء المستخدم...

فالأمثلة التالية لا تظهر نتائج للبحث:

1) كتابة أو عدم كتابة الهمزة في موضعها كما هي مخزنة في الجدول.

2) كتابة الهاء أو التاء المربوطة.

3) كتابة إسم مثلاً مثل "عبدالله".. المفروض "عبد الله" أي عدم وجود مسافة

كيف أستطيع التغلب عن طريق الكود على مثل هذه المشكلة...

#2

صراحة لم أجرب اللغة العربية فى البحث .. كذلك لا أعرف إن كانت حروفها تقبل الاستبدال :)

ولكن على حسب ما رأيت فى مواقع حكومية كثيرة أنها تعطى تنويه واضح تحت خانة البحث كالتالى:

عزيزى المستخدم اتبع هذه التعليمات لتحصل على نتائج صحيحه:

اكتب "احمد" بدلا من "أحمد" حيث لا توجد همزة قطع.

اكتب "رشدي" بدلا من رشدى"

وهكذا :)

لا تستغرب فالمواقع التى تكتب هذا مواقع كبيرة وتعتمد على asp.net!!

#3

حسناً أنا كنت سأفعل ذلك بالفعل حيث أنها أقصر طريقة...

ولكني منذ يومين حصلت على موقع نتائج طلاب كلية الهندسة لجامعة القاهرة...

الموقع ليس قوي كتصميم...

لكن البحث فيه ما شاء الله... وهو يستخدم ال asp...

أدخل وجرب مثلاُ "أحمدمحمد" و شاهد النتائج...

أتمنى أن تكون هذه الدالة دالة غير جاهزة في ال asp...

لأنها ستكون إحدى نقاط الضعف في ال php... :wacko:

#4

ذلك ليس عيبا فى لغة البيشو :)

إنما فى الدماغ (دماغى) التى لم تستخدمها فى العربى ...

وإن كان على الدوال فأعتقد لا توجد لغة أخرى استطاعت تقديم دوال مثلها ...

وتستطيع أن تعمل دالة جديدة براحتك :)

----

حسنا اتركنى دقائق أجرب الاستبدال العربى

#5

تفضل الكود :)

<?

$wrong=array("أحمد","رشدى");
$right=array("Roshdi","Ahmed");
$txt=str_replace($wrong,$right,$txt);

echo $txt;

?>

خزن الكود فى ملف اسمه ara.php مثلا

وفى المتصفح اعمله كالتالى

http://localhost/ara.php?txt=رشدى

أو بأى طريقة تعجبك، المهم أنك تدخل متغير باسم رشدى مثلا وستجده حولها إلى

Ahmed

أى خدمه :)

طبعا من خلال الدالة str_replace

تقدر تعمل مصفوفه بالحروف المراد تغييرها إلى مصفوفه بالحروف المسموحه ..

هل الكود مفهوم؟

#6

أخي أنوريكا..

جزاك الله خيراً.. الكود بالفعل بذلك سيكون قادراً على تلافي الخطأ الأول والثاني...

ولكن المشكلة الأكبر هي في الخطأ الثالث..

فماذا إذا أدخل المستخدم "أحمدرشدي".. (وهي من الأخطاء الشائعة عند الكثير من المبتدئين)...

أعتقد أن حلها سيكون بإستخدام for... بالخوارزمية الآتية:

1) إذاكانت عدد نتائج البحث صفر سيدخل الكود في حلقة for...

2) إذا كانت عدد نتائج البحث لأول حرف تساوي أكبر من صفر يأخذ الحرف الأول والثاني.

3) يأخذ الحرف الثالث ثم الرابع إلى أن تصبح نتائج البحث في لحظة تساوي صفر.

4) يتم حذف آخر حرف وإستبداله بمسافة..

5) يتم وضع الحرف الذي أستبدل... إذا كانت النتائج أكبر من صفر يعيد من 2 إلى 4..

6) إذا إنتهى البحث بأن عدد النتائج تساوي صفر سيظهر أنه لا توجد نتائج للبحث.

7) إذا كانت النتائج تساوي أكثر من صفر سيتم إظهارها...

المشكلة إني أوشكت على الجنان من هذه الخوارزمية المعقدة... :wacko: المشكلة أيضاً أن ال php ليس به وسيلة قوية لتتبع الكود مثل الفيجوال بيسيك مثلاُ..

ما رأيك كيف أستطيع عمل ذلك..

#7
Logic#7 كتب:
أخي أنوريكا..

جزاك الله خيراً.. الكود بالفعل بذلك سيكون قادراً على تلافي الخطأ الأول والثاني...

ولكن المشكلة الأكبر هي في الخطأ الثالث..

فماذا إذا أدخل المستخدم "أحمدرشدي".. (وهي من الأخطاء الشائعة عند الكثير من المبتدئين)...

أعتقد أن حلها سيكون بإستخدام for... بالخوارزمية الآتية:

1) إذاكانت عدد نتائج البحث صفر سيدخل الكود في حلقة for...

2) إذا كانت عدد نتائج البحث لأول حرف تساوي أكبر من صفر يأخذ الحرف الأول والثاني.

3) يأخذ الحرف الثالث ثم الرابع إلى أن تصبح نتائج البحث في لحظة تساوي صفر.

4) يتم حذف آخر حرف وإستبداله بمسافة..

5) يتم وضع الحرف الذي أستبدل... إذا كانت النتائج أكبر من صفر يعيد من 2 إلى 4..

6) إذا إنتهى البحث بأن عدد النتائج تساوي صفر سيظهر أنه لا توجد نتائج للبحث.

7) إذا كانت النتائج تساوي أكثر من صفر سيتم إظهارها...

المشكلة إني أوشكت على الجنان من هذه الخوارزمية المعقدة... :wacko:  المشكلة أيضاً أن ال php ليس به وسيلة قوية لتتبع الكود مثل الفيجوال بيسيك مثلاُ..

ما رأيك كيف أستطيع عمل ذلك..

اسف فقد الرد بسبب خطأ :(

المهم تلخيص الرد:(

لا توجد مشكله، كل ما يفعلوه أنها رسالة ثابته لأن عدد الحروف المدخلة كبير .. وبشكل آخر فإن وجودوا فى الاستعلام عدد أكبر من 20 نتيجة مثلا يعطوك نفس الرساله ..

ولا مقارنة بين الفيبى والبيشو :)

تم تعديل هذه المشاركة بواسطة anwarica في 25 يوليو 2005 في 23:44

#8
اقتباس
اسف فقد الرد بسبب خطأ

المهم تلخيص الرد

لا توجد مشكله، كل ما يفعلوه أنها رسالة ثابته لأن عدد الحروف المدخلة كبير .. وبشكل آخر فإن وجودوا فى الاستعلام عدد أكبر من 20 نتيجة مثلا يعطوك نفس الرساله ..

ولا مقارنة بين الفيبى والبيشو

أنا لم أفهم ردك هذه المشاركة على الإطلاق..

آسف على ماذا..

وماذا تقصد بأنها رسالة ثابتة؟؟؟

ماعلاقة هذا بآخر مشاركة مني؟

#9
Logic#7 كتب:
أنا لم أفهم ردك هذه المشاركة على الإطلاق..

آسف على ماذا..

وماذا تقصد بأنها رسالة ثابتة؟؟؟

ماعلاقة هذا بآخر مشاركة مني؟

معاك حق :)

يمكن لأنى مانمتش من فتره طويله :wacko:

الحكاية أنى كتبت رد، ثم ضاع بسبب خطأ فى السيرفر :)

فعدلت المشاركة .. وكسلت أكتب الرد بالتفصيل :D

قصدى برساله ثابته .. أنها رساله تظهر لأى أسم موجود أكثر من 20 مرة على سبيل المثال ..

وهذه ليست مشكله فى التنفيذ :)

وعذرا لو كان هناك شئ غامض لأن لى جفن غامض :D

الشعر هيشتغل أهوه :wacko:

#10

انا مجربتش موضوع الـ spell checking عملى قبل كدة

بس اعرف ان فى مكتبة الـ aspell و فيها مجموعة من الدوال الى بتساعد فى عمل حلول بالشكل دة

ممكن تشوف الروابط دى و حتلاقى فيها الى اقصده

manual.pspell

Zend.spell checking

lib.aspell

إن شاء الله اكون ساعدتك شوية :rolleyes:

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#11

يا باشا ألف شكر على الدالة الحلوة دي...

وأنا هحاول أوظفها في المشكلة دي... وإدعيلي إنها تنجح..

#12
Logic#7 كتب:
يا باشا ألف شكر على الدالة الحلوة دي...

وأنا هحاول أوظفها في المشكلة دي... وإدعيلي إنها تنجح..

حلوه يا شريف والله :)

تعرف أنى بعمل قاموس برمجى علشان محرك البحث .. بعمله مثل اقتراحات جوجل .. ربما اصدر المشروع يوما ما :)

#13

ربنا يوفقكم إن شاء الله

anwarica كتب:
حلوه يا شريف والله :)

تعرف أنى بعمل قاموس برمجى علشان محرك البحث .. بعمله مثل اقتراحات جوجل .. ربما اصدر المشروع يوما ما :)

اعتقادى انك عايز تعمل مكتبة باللغة العربية إن شاء الله بحيث انها مش متوافرة :)

و كنت عايز احط روابط لمكتبات باللغة الأنجليزية بس اعزرونى مش متذكر اسم الموقع

بس من حيث اننا بنتكلم فى search engines فهنا لقيت مجموعة منها مفتوحة المصدر و مختلفة فى الأستخدامات

FSF.Search Engines :rolleyes:

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#14
a_shref كتب:
ربنا يوفقكم إن شاء الله

اعتقادى انك عايز تعمل مكتبة باللغة العربية إن شاء الله بحيث انها مش متوافرة  :)

و كنت عايز احط روابط لمكتبات باللغة الأنجليزية بس اعزرونى مش متذكر اسم الموقع

بس من حيث اننا بنتكلم فى search engines  فهنا لقيت مجموعة منها مفتوحة المصدر و مختلفة فى الأستخدامات

  FSF.Search Engines  :rolleyes:

لا مش مكتبه عربية :)

دى فكرة مثل google suggest هى بتحتاج dhtml بالتعاون مع أى لغة سيرفريه (بيشاويه :D )

===

وصلات محركات البحث تعرفت على phpdig فقط حيث رأيته من قبل بس عيبه أنه بطئ شويه :rolleyes:

وجزاك الله خيرا ;)

#15
اقتباس
حلوه يا شريف والله

تعرف أنى بعمل قاموس برمجى علشان محرك البحث .. بعمله مثل اقتراحات جوجل .. ربما اصدر المشروع يوما ما

إيه رأيك يا أنوريكا لو أشتركنا معاك في الموضوع ده...

لو عايز تعمله إنت لوحدك مفيش مشاكل بش يكون opensource طبعاً :)

وأنا شايف إن شريف ما شاء الله عنده خلفية عن الموضوع ده...

بس أنا ليا سؤال؟؟

البحث اللي في المنتدى ده مثلاً.. مالوش source؟؟؟

أنا شايف إنه كويس... B)

إيه رأيكو فيه؟

#16
Logic#7 كتب:
إيه رأيك يا أنوريكا لو أشتركنا معاك في الموضوع ده...

لو عايز تعمله إنت لوحدك  مفيش مشاكل بش يكون opensource طبعاً  :)

وأنا شايف إن شريف ما شاء الله عنده خلفية عن الموضوع ده...

بس أنا ليا سؤال؟؟

البحث اللي في المنتدى ده مثلاً.. مالوش source؟؟؟

أنا شايف إنه كويس... B)

إيه رأيكو فيه؟

فهمت فكرتك يا anwarica :)

logic#7 , بخصوص نظام البحث الى فى المنتدى هنا مش بيدعم الى انت اتكلمت عليه فى اول الموضوع

مش زى دة كدة مثلا SchGoogle.shref

انا بحثت عن كلمة shref و هو بالتالى طلعلى النتايج المشابهة ليها

بس تحتها كتبلى :

اقتباس
Did you mean to search for: sherif 

دة فيه فوايد كتير للمستخدم اكيد بحيث انه مثلا مش فاكر ترتيب الحروف الصحيح للكلمة ;)

ملحوظة : مش لازم تصدق google لمة يقولك ان shref هو sherif :D

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#17

يا جماعة

السلام عليكم

هل يتمكن أحد من مساعدتي

فأنا عندي جدول يحتوي على مليون ونصف record

ما هو الحل برأيكم لعملية البحث في عدة كلمات على شرط تواجدهم في نفس الـ record

حيث انني تعتب قوي في العملية ديه كثيرا ومازال البحث بطيئا على الجهاز بتاعي فما بالكم حيث يكون اون لاين؟؟؟!!

الرجاء المساعدة باحسن طريقة للخروج من المأزق

وشكرا على هذا المنتدى الرائع

#18
اقتباس
ما هو الحل برأيكم لعملية البحث في عدة كلمات على شرط تواجدهم في نفس الـ record

كلهم فى recorde واحد :blink:

على فكرة الـ server الحقيقى بيكون اسرع من الى عندك ( localhost ) مش العكس

نقول مثلا انت حتبحث عن [ anwarica doctor php ]

و عايز لازم يكونوا الـ 3 فى record واحد

بالتالى انا اخترعت الكود دة دلوقتى الساعة 3:07 ص و متسألنيش عملته ازاى :wacko:

$words = explode($q);

$wordsNumber = count($words);

$sql = 'select .... from .... where col_Name like \'%'.$words[1].'\'';

$result = mysql_query('CREATE TEMPORARY TABLE tempQuery_0 '. $sql);

$TNo = '';

for ($i=1; $i < $wordsNumber;$i++)
   {
    $sql = 'select .... from tempQuery_'.--$i.' where col_Name like \'%'.$words[$i].'\'';
    
	$result = mysql_query('CREATE TEMPORARY TABLE tempQuery_'.$i.' '. $sql);
    
	mysql_query('DROP TABLE tempQuery_'.--$i);
    
	$TNo = $i;
   }
   
   while($row = mysql_fetch_assoc($result))
       {
     //do what ever you want 
    } 
	mysql_query('DROP TABLE tempQuery_'.$TNo);

انا مجربتهوش لأنى مش شايف قدامى دلوقتى فانت جرب و قولى إن شاء الله

بس ربنا يكون فى عون الـ server

قبل منسى كنت عايز اعرف البحث عن كلمة واحدة و كلمتين و 3 كلمات كل منهم بياخد وقت كام ثانية ؟

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#19

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in f:\AppServ\www\se\searchsherf.php on line 26

وبطيئ جدا جدا

عايز اعمل معك شات على ماسنجر ممكن؟؟

#20

اسف استخدم دى لأن الى فاتت متنفعش لمواقع الـ web عشان بتحتاج موارد كبيرة وانا مراجعتهاش لسة

$words = explode($q);

$wordsNumber = count($words);

$sql = 'select * from table_Name where col like \'%.'.$words[0].'\'';

for ($i=1; $i < $wordsNumber; $i++)
    {

     $sql .= ' AND col like \'%.'.$words[$i].'\'';

    }

$result = mysql_query($sql);

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

هذا الموضوع مغلق.

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