بإسم الله الرحمان الرحيم
زَعَمَ
الَّذِينَ كَفَرُوا أَن لَّن يُبْعَثُوا قُلْ بَلَى وَرَبِّي لَتُبْعَثُنَّ
ثُمَّ لَتُنَبَّؤُنَّ بِمَا عَمِلْتُمْ وَذَلِكَ عَلَى اللَّهِ يَسِيرٌسورة التغبن – الآية 7السلام عليكم و رحمة الله و بركاته
و بدون الإطالة في المقدمات ننتقل إلى الجزئ التاني من دورتنا .
عنوان هدا الدرس : البحث المتقدم في قاعدة البيانات
يمكن إجراء عملية البحت في قاعدة البيانات أو غيرها على تلاثة طرق أساسية :
1. البحت عن الجملة بالضبط
2. البحت عن أي كلمة
3. البحث عن جميع الكلماتيمكن كدلك تصنيف البحث حسب نطاقه
متلا:
البحث في العناوين فقط – البحث في مواضيع تتضمن ملف مرفق – مواضيع تم طرحها مند كدا يوم – البحث في قسم أو منتدى معين في موضوعنا هدا سنقتصر على التالي :
1. طرق البحث الثلاثة الآنفة الدكر
2. البحث في العناوين فقط أو البحت في كامل الموضوعو حتى يكون الدرس واضحا لابد من تمريره على أمثلة عملية
و قبل الشروع في البرمجة ينبغي كدلك أن تكون لدينا قاعدة بيانات للبحت فيها
لننشئ قاعدة البيانات أولا :
سنحتاج إلى جدول واحد فقط
و بما أن المشروع المزمع إنجازه تجريبي فلن نحتاج أكتر من ثلاث حقول / أعمدة
Id
رقم أو معرف الموضوع
Title
العنوان
Subject
الموضوع
إليك هده الصور لمساعدتك على تكوين الجدول
لابد أيضا من إدخال محتويات لقاعدة البيانات هده من أجل إختبار البحت إد لا يمكن البحت في مكان فارغ
ضع أي عنوان و أي موضوع فكل ما تقوم به الآن لإختبار البرمجة عليه لا أكتر
ملاحضة : لست في حاجة إلى تعيين قيمة الحقل id لكن ينبغي أن يكون auto_increment
__________________________________
لتحميل بنية القاعدة مع المحتويات الإفتراضية للبحث
http://up.x50.cc/?_&C7quبعد تجهيز القاعدة نمر إلى تصميم نمودج البحث
و لن نحتاج لأكتر من لغة html
لنعمل على أن يكون النمودج خاليا من الجافا و أي تعقيد و لنركز فقط على خيارات البحت المتقدم
و كما دكرت انفا : البحث على محورين اساسيين
طريقة البحث
مكان البحث
النمودج :
الحقل الأول لعبارة البحث
التاني لمكان أو نطاق البحث
الثالث لصنف البحث
و من هنا يمكنك الحصول على كود النمودج كاملا
http://up.x50.cc/?_&CgK6من المهم جدا تفحص الكود قبل الشروع في البرمجة و دلك لتكون على معرفة بأسماء الحقول و الخيارات
__________________________
لنأخد نفسا عميقا قبل الشروع في البرمجة
الإتصال بقاعدة البيانات أولا من خلال الدالتين
كود PHP:
mysql_connect('', '', '')or die("cannot connect");
mysql_select_db('')or die("cannot select DB");
المتغير الأول و الآتي من عبارة البحث
كود PHP:
$_POST['search_word']
لابد من ترشيحه عن طريق الدوال الأمنية
htmlspecialchars _ منع البحث في وسوم html
trim إزالة الفراغات في أول النص و اخره
كما سنحتاج لحدف الفراغات المتكررة لنحصل على جملة البحث بالشكل التالي
كود PHP:
$search_phrase=preg_replace('/[\s]{2,}/', ' ', htmlspecialchars(trim($_POST['search_word'])));
هناك دوال كثيرة قد تحتاجها و تختلف حسب برنامجك ( كتحديد عدد الحروف الأدنى لكلمة البحث _ عدد الكلمات القصوى للبحث )
المتغير $search_phrase هو جملة البحث
لكن سنحتاجه فقط إدا كان نوع البحث "عن الجملة بالضبط "
للحصول على مصفوفة بجميع كلمات البحث نستخدم دالة explode و طبعا هي دالة بسيطة و معروفة
كود PHP:
$search_words = explode(' ', $search_phrase);
تذكر :
$search_phrase : جملة البحث
$search_words : كلمات البحث
قبل المواصلة دعونا نلقي نظرة خاطفة على إستعلام البحث
كود PHP:
$do=mysql_query("select `id`,`title`,`subject` from `table_searche` where (`title` LIKE '%$search_phrase%') OR (`subject` LIKE '%$search_phrase%')");
هده صيغة إفتراضية فقط و ستختلف حسب نوع البحث و نطاقه
لدا دعونا نركز على الجزئ الأخير من الإستعلام مباشرة بعدة "where"
A1 : منطقة البحث في العنوان
A2 : منطقة البحث في الموضوع ( لا يتم تظمين هدا الجزء من الإستعلام عند إختيار "البحث في العناوين فقط" )
B1 : البحث عن الجملة ( إدا كان البحت عن جميع الكلمات تتكرر العبارة لكل كلمة و يفصل بين العبارات بــ AND )
B2 : نفس قصة b1 بخصوص البحت في الموضوع
هدا هو الإستعلام بشيئ من التفصيل
و على اساس هدا التفصيل سنكمل البرمجة
سيكون لدينا شرط ثلاتي :
1 الجملة بالضبط
2 جميع الكلمات
3 اي كلمة
كود PHP:
if($_POST['search_type']=='phrase'){
//__-1-__
}elseif($_POST['search_type']=='all_word'){
//__-2-__
}elseif($_POST['search_type']=='any_word'){
//__-3-__
}
لا تسألني عن المتغيرات الموجود في الكود
إرجع إلى نمودج البحث إدا لم تعرف من اين أتيت بها
_____________________
داخل هده الشروط سنبرمج الجزئ الاخير من الإستعلام الدي رأيناه موضحا في الصورة
بما أن الشروط الثلاثة لا تتطرق لمكان البحث يجب أن نتعامل مع حقل البحث على اساس أنه متغير
الآن ندخل منطقة الشرط الأول
و هي للجملة
كود PHP:
$search_f="`__-where-__` LIKE '%$search_phrase%'";
بالنسبة للشرط التاني
ستتكرر عبارة البحث حسب عدد الكلمات تم يجمع بينها بــ and
لهدا الغرض نستخدم الدالتين foreach و implode
الدالة foreach ستوزع كلمات البحث على الإستعلام
كود PHP:
foreach($search_words as $word){
$search_f[]="`__-where-__` LIKE '%$word%'";
}
الدالة implode ستصل أجزاء الإستعلام بعبارة and
كود PHP:
$search_f = implode(" and ", $search_f);
الشرط الثالت لا يختلف عن التاني إلا في عبارة and الممررة للدالة implode حيت سيحل محلها or
كود PHP:
foreach($search_words as $word){
$search_f[]="`__-where-__` LIKE '%$word%'";
}
$search_f = implode(" or ", $search_f);
_________________________________
مدا بخصوص مكان البحث؟؟؟
سهلة جدا
بالنسبة للبحث في العنوان فهده مسألة لا بد منها إد لا يمكن إغفال هدا الحقل من البحث
لدا نستبدل المتغير __-where-__ بــ title
كود PHP:
$search_sql=str_replace('__-where-__','title',"($search_f)");
أما الموضوع فسيشمله البحث في حال تم التأشير على خيار : كامل الموضوع
لدا سيوضع داخل حلقة الشرط
كود PHP:
if($_POST['where'] == 'full'){
$search_sql.=str_replace('__-where-__','subject'," or ($search_f)");
}
و سنخرج في النهاية بإستعلام واحد يمرر إليه المتغير الدي مر بالشروط السابقة
كود PHP:
$do=mysql_query("select `id`,`title`,`subject` from `table_searche` where $search_sql");
هدا هو الجزئ الأهم
بالنسبة لطريقة عرض النتائج فسأتركها لكم قبل أن أطرح السكربت للتحميل
أعتدر عن القصور في الشرح و على الـتاخير الخارج عن إرادتي و في أمان الله