درس : كيفية برمجة خاصية البحث في اي سكربت بلغة php
السلام عليكم ورحمة الله وبركاته
اخواني واخواتي اليوم درسنا بحكي عن الطريقة الافضل لبرمجة خاصية البحث … هذه البرمجية ملائمة لأي سكربت مبرمج بواسطة لغة php وقد حاولت جاهدا ان يكون الشرط مبسط ومفهوم لكي تعم الفائدة اكبر عدد ممكن …
هذا الدرس للمستوى المتوسط وفيه سنعطي امثلة وشرح لكيفية بناء فورم البحث ومن ثم ادخال المعاملات والمتغيرات له لفحصها داخل قاعدة بيانات السكربت وهذه الخاصية مهمة جدا لتسهيل المعلومة للباحث عنها في موقعك او في اي مشروع تريد برمجته مستقبلا بلغة php .
نبدأ بسم الله …
بداية نحتاج في هذه البرمجية صفحتين على النحو التالي :
1- صفحة index.html تحوي كود فورم البحث والذي سيرسل النص المراد البحث عنه لصفحة php لكي تعالج النص وتخرج لنا النتيجة .
2- صفحة search.php وهي تحوي كود الـ php البرمجي الذي سيستقبل متغير نص البحث ويقوم بالبحث عنه في قاعدة البيانات .
نبدأ بصفحة فورم البحث index.html وتحوي الكود التالي :
Code :
<form name=”searchf” method=”post” action=”search.php”>
<input type=”text” value=”Search” name=”search” />
<input type=”submit” value=”بحث” name=”dosearch” />
</form>
كما تروح في كود الـ html هذا فانه عبارة عن فورم form يتيح لنا كتابة نص البحث والذي يمكن ان يحوي اكثر من كلمة وعند الضغط على زر ” بحث ” يقوم هذا الفورم بارسال نص البحث الذي قمنا بادخاله اذا صفحة search.php لكي تتم معالجته حسب المعطيات .
ننتقل الان لصفحة search.php والتي تحوي كود الـ php البرمجي الذي سيقوم بمعالجة النص الذي جلبناه من الفورم في صفحة index.php ومن ثم يخرج لنا البيانات من القاعدة .
نبدأ استقبال البيانات ونكتب كود للتحقق انه تم ارسال بيانات الفورم بالفعل :
Code :
<?
if(isset($_POST['dosearch'])){
ومن ثم نكتب الكود التالي للتاكد من صحة الحقل وانه غير خالي :
Code :
$search = mysql_real_escape_string($_POST['search']);
if(isset($search)){
ثم نكتب استعلام sql في الجدول ونبحث في حق العنوان باسخدام الخاصية like والعلامة % وهى تعنى ان كل الكلام الذي بعد $search وقبلة ايضا :
Code :
$sql = mysql_query(”SELECT * FROM `articles` WHERE `title` LIKE ‘%$search%’”)or die(mysql_error());
وسنخدم هذة الدالة لعد كل نتائج الاستعلام :
Code :
$num = mysql_num_rows($sql);
if($num == 0){
echo “عذرا … لم يتم الحصول على نتائج لبحثك”;
}
ثم نعمل حلقة تكرار لتقوم باستخراج النتائجة من قاعدة البيانات في حال كان عدد نتائج الكود السابق اكبر من صفر وعندما نستعلم من القاعدة يكون لنا نتائج كثير ومنها نتائج قد تحوي كلمات غير معرفة وغير مرغوب فيها وهنا الفكرة انو نعمل مثل فلتر او تصفية للنتائج … نفرض انو طلع عنا 20 نتيجة بنيجي بنفحص عنوان اول نتيجة : بنقسم العنوان الى كلمات وبعدها نقوم بعمل حلقة نفحص فيها كل كلمة في العنوان … نمرر كلمات العنوان جميعها على الحلقة لنفحص اذا كانت هناك كلمة في العنوان مشابهة تماما لكلمة نص البحث فاذا تحقق هذا الشرط قام البرنامج بطبع النتيجة والا فلم يطبعها وهذا الامر يحدث لجميع النتائج المستخرجة من القاعدة … وهيك اذا كانت العناوين لا تحوي كلمة البحث ككلمة مستقلة فان البرنامج لن يطبع النتيجة ثم نقوم بتمرير كلمات العنوان واحدة تلو الاخرى ونفحص اذا ما كانت الكلمة مشابهة لكلمة البحث فاذا تحقق الشرط نقوم بادخال الكلمة الى المصفوفة SimWords ومن ثم نعمل شرط اخر وهو اذا كانت الكلمة الاولى في المصفوفة تساوي كلمة البحث فسيقوم البرنامج بطباعة النتيجة وهكذا سنتجنب التكرار مهما كانت عدد الكلمات المكررة بنفس العنوان :
Code :
else{
while($r = mysql_fetch_object($sql)){
$Id = $r -> id;
$Title = $r -> title;
$word = explode(’ ‘,$Title);
$SimWords = Array();
foreach ($word as $sword) {
if ($sword == $search) {
$SimWords[] = ($sword);
}
}
if $SimWords[0] == $search) {
echo’<a href=”articles.php?id=$Id”>$Title</a><br /><br />’;
}
}
نتائج الشروط البرمجية التي قمنا بكتابتها اول الكود بحالة لم تتحقق :
Code :
}else{
echo”الرجاء التاكد من انك قمت بادخال قيمة منطقية لنص البحث”;
}
}else{
echo”الرجاء التاكد من ان النموذج قد ارسل البيانات بالفعل”;
}
?>
كود الصفحة search.php كاملا :
Code :
<?
if(isset($_POST['dosearch'])){
$search = mysql_real_escape_string($_POST['search']);
if(isset($search)){
$sql = mysql_query(”SELECT * FROM `articles` WHERE `title` LIKE ‘%$search%’”)or die(mysql_error());
$num = mysql_num_rows($sql);
if($num == 0){
echo “عذرا … لم يتم الحصول على نتائج لبحثك”;
}else{
while($r = mysql_fetch_object($sql)){
$Id = $r -> id;
$Title = $r -> title;
$word = explode(’ ‘,$Title);
$SimWords = Array();
foreach ($word as $sword) {
if ($sword == $search) {
$SimWords[] = ($sword);
}
}
if $SimWords[0] == $search) {
echo’<a href=”article.php?id=$Id”>$Title</a><br /><br />’;
}
}
}
}else{
echo”الرجاء التاكد من انك قمت بادخال قيمة منطقية لنص البحث”;
}
}else{
echo”الرجاء التاكد من ان النموذج قد ارسل البيانات بالفعل”;
}
?>
اتمنى ان الجميع قد استفادوا من هذا الدرس الغير صعب نسبيا … الرجاء عدد التردد بكتابة اي استفسار او سؤال وسنقوم بالرد عليه باقرب وقت ممكن .
مع احترام : اخوكم EbNCaNa
سلامات