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

مشكلة في البحث

مغلق
بدأه Eman في 17 فبراير 2003 · 4 رد · 688 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تعليمات PHP التالية تقوم بالبحث في جدول معين في قاعدة البيانات :

                  if ($name == "")
                      {$name = '%';}

                   if ($country == "")
                      {$country = '%';}

                   if ($cat == "")
                      {$cat = '%';}
$query =  ("SELECT * FROM $table WHERE aname LIKE '$name%' AND ename LIKE '$name%' AND acountry LIKE '$country%' AND ecountry LIKE '$country%' AND acat LIKE '$cat%' AND ecat LIKE '$cat%'");

والمفروض إذا كان أي حقل من الحقول فارغ .. فإنه سيبحث عن '%%' أي كل النتائج .. ولقد قمت بتجربته عن طريق الـ PHP My Admin .. وكانت النتائج تظهر بشكل ممتاز .. ولكن في الصفحة .. لا تظهر أي نتيجة إذا تركت أحد الحقول فارغ .. أما إذا قمت بملء كل الحقول تظهر النتائج بشكل سليم .. فما هي المشكلة ؟؟؟ ... وهل هناك طريقة أفضل لكتابة جملة ال SQL .. للبحث في عدد من الحقول ؟؟؟

#2

جرب هذا الكود

if (empty($name))
#3

لا أدري كيف يتم تمرير البيانات حتى تصل إلى هذه المرحلة حيث قد تكون بعض الحقول تبدو فارغة في حين أن بها فراغات أو ماشابه، عموماً ربما لو استخدمتِ هذه الطريقة ستعمل بشكل أفضل:

if (!trim($name)) $name='%%'; else $name.='%';
if (!trim($country)) $country='%%'; else $country.='%';
if (!trim($cat)) $cat='%%'; else $cat.='%';
$query =  "SELECT * FROM $table WHERE aname LIKE '$name' AND ename LIKE '$name' AND acountry LIKE '$country' AND ecountry LIKE '$country' AND acat LIKE '$cat' AND ecat LIKE '$cat'";

بغض النظر عن صحة الاستعلام نفسه (حيث أن أتعجب من طلب المقارنة في حقلين في نفس الوقت هل يحملان نفس القيمة؟ أقصد مثلاً aname و ename)

#4

شكراً للأخ JP3003 والمشرف الفاضل صلاح

الحمد لله لقد تم حل المشكلة .. أما بخصوص سؤال الأخ صلاح .. فإن الـ ename هو الاسم باللغة الانجليزية .. والـ aname هو الاسم باللغة العربية .. على فرض أن الشخص يمكنه الدخول إلى الصفحة العربية والبحث عن طريق كتابة الاسم باللغة الانجليزية والعكس .. لذا كان يجب أن يتم البحث عن الاسمين .. العربي والانجليزي في نفس الوقت

وكان حل المشكلة بسيط جدا وهو

                 
                   if ($name == "")
                      {$name = '%';}

                   if ($country == "")
                      {$country = '%';}

                   if ($cat == "")
                      {$cat = '%';}
$query =  ("SELECT * FROM $table WHERE (aname LIKE '$name%' OR ename LIKE '$name%') AND (acountry LIKE '$country%' OR ecountry LIKE '$country%') AND (acat LIKE '$cat%' OR ecat LIKE '$cat%')");

ولكم جزيل شكري وتحياتي

#5

هذا ما توقعته، واستعجبت استخدامك لعبارة AND عند مقارنة كل من aname و ename.

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

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