النتائج 1 إلى 9 من 9

الموضوع: [ سؤالين ] في خطورة الإستعلام و منع البحث إلا بالحروف العربيه.

  1. #1
    عضو فعال
    تاريخ التسجيل
    Aug 2007
    المشاركات
    1,431

    [ سؤالين ] في خطورة الإستعلام و منع البحث إلا بالحروف العربيه.



    السلام عليكم ورحمة الله وبركاته

    اخواني لدي صفحة بحث , search.php , ولدي صفحة بحث متطور نوعاً ما ,
    اقوم بعمل $_POST للقسم المراد البحث فيه , وكذلك النوع , وأيضاً نجوم التقييم .


    ولدي هذا الإستعلام :
    كود PHP:
    // إحضار نص البحث ...
    $T trim($_POST['text']);
    // تخطي الأكواد
    $T strip_tags($T);
    // إحضار رقم القسم
    $section strip_tags($_POST['section_id']);
    // إحضار نوع الخدمات
    $type strip_tags($_POST['type']);
    // إحضار النجوم
    $stars strip_tags(($_POST['stars']);
     

    if(
    $section == 'all'){ $sec_include ""; } else { $sec_include "AND `section_id`='".intval($section)." '"; }
    if(
    $type == 'all') { $type_include ""; } else { $type_include "AND `type`='".addslashes($type)." '"; }
    if(
    $stars == 'all'){ $stars_include ""; } else { $srats_include=  "AND `stars`='".intval($stars)." '"; }
     
    $Query=@mysql_query("SELECT * FROM `trav_trav` WHERE `name` LIKE '%$text%' OR `desc` LIKE '%$text%' OR `text` LIKE '%$text%' OR `meta_open` LIKE '%$text%' "addslashes($sec_include)." "addslashes($type_include)." "addslashes($stars_include)." LIMIT $start,$max_results"); 
    هل قمت بتأمينه كفايةً ؟



    السؤال الثاني , لا أريد ان يتم البحث إلا بحروف عربيه , كيف ذلك :con2: على مااظن بالتعابير القياسيه , لم افهمها حتى الآن ...



    وشكراً.







  2. #2
    عضو فعال
    تاريخ التسجيل
    Aug 2007
    المشاركات
    1,431


    شكرا للـ 70 زياره ....
    تم حل المشكله بـالكود :
    كود PHP:

    // إحضار نص البحث ...
    $T trim($_POST['text']);
     
    // تخطي الأكواد
    $T strip_tags($T);
    // الحروف المسموح بها
    $chars = array('ا','أ','إ','ئ','ء','ب','ت','ث','ج','ح','خ','د','ذ','ر','ز','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ك','ل','م','ن','ه','و','ي','ـ',' ','ؤ','آ','لإ','ُ','َ','ِ','_','لأ','ى','ة','ظ','ر','ز','ه','خ','ح','ج','1','2','3','4','5','6','7','8','9','10','11','12','13','1000','0','2009','2010','1429','1430');
    // I Take It From Ashraf Alsmhorry , swalif.net
    if (preg_match('/[^'preg_quote(implode($chars)) .']/si'$T)) { 
             
    $MSG $lang['Bad_T'];
             
    $smarty->assign("MSG",$MSG);
             
    $show_header 1;
             include(
    "common_up.php");
           
    $smarty->display("search.htm");

    أخذتها من أحد ردود الأخ أشرف السمهوي , شكراً له .






  3. #3
    عضو سوبر نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    779


    السلام عليكم
    اخي العزيز ,, عندي ملاحظات بسيطه فقط
    1- عدد الشروط في الاستعلام كثيره ( خصوصا البحث في عدة حقول ) قد تاخذ الكثير من الوقت
    2- يجب تأمين البحث بدالة strlen و ذلك لحصر البحث للكلمات الاكثر من 3 احرف مثلا
    3- بما انك تبحث بالعربي فقط فاستخدم دالة mysql الخاصه بالرسم و هي Binary او استخدم
    REGEXP بدل LIKE

    اتمنى لك التوفيق






    __________________
    أهلا و سهلا بكم في :-
    موقع دار الأوائل
    تفضل معنا خدمات الاستضافة
    موقع العبقري لخدمات الاستضافة

  4. #4
    عضو فعال
    تاريخ التسجيل
    Aug 2007
    المشاركات
    1,431


    السلام عليكم
    وعليكم السلام ورحمة الله وبركاته

    اهلاً اخي عبقري العرب ...


    1- عدد الشروط في الاستعلام كثيره ( خصوصا البحث في عدة حقول ) قد تاخذ الكثير من الوقت
    لاأظن انه يبطئ لدرجة كبيره جداً , حيث اني جربته وكل شئ تمام ولله الحمد , صحيح انه قد يكون بطيئ كثيراً ... لكن مالمانع من الإنتظار , امزح , تستطيع ان تقول انه حل مؤقت .


    2- يجب تأمين البحث بدالة strlen و ذلك لحصر البحث للكلمات الاكثر من 3 احرف مثلا
    لقد وضعتها اخي , لكن الكود الذي بالأعلى , هو مجرد عدة سطور من الملف فقط..


    - بما انك تبحث بالعربي فقط فاستخدم دالة mysql الخاصه بالرسم و هي Binary او استخدم
    REGEXP بدل LIKE
    لم استعمل هذه الدوال من قبل بكل صراحه ... لكن عندي للأسف لم توضح الفرق بين Like و Binary و RegXP .,


    تمنى لك التوفيق

    الجميع إن شاء الله

    أسعدني ردك , شكراً لك , ومنتظر ردك على السؤال (Binary)

    :nice: .







    التعديل الأخير تم بواسطة ff5006 ; 15-10-2008 الساعة 04:14 AM

  5. #5
    عضو سوبر نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    779


    بالنسبه لـ regexp
    http://www.swalif.net/softs/swalif45/softs240101/

    بالنسبه ل Binary فهي تاخذ شكل الحرف و تفرق بين ا أ إ و كذلك ه ة





    __________________
    أهلا و سهلا بكم في :-
    موقع دار الأوائل
    تفضل معنا خدمات الاستضافة
    موقع العبقري لخدمات الاستضافة

  6. #6
    عضو فعال
    تاريخ التسجيل
    Aug 2007
    المشاركات
    1,431

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    444


    شكرا على طرحك السوال
    وشكرا الى الي اجابو

    استفدتك كثييير






  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    731


    بالنسبة للسماح بالحروف العربية فقط, بتواجهك مشكلة اختلاف الترميز

    هناك Extend رائع جداً للتعرف على ترميز النص ولغته ولكن يجب اضافته للـ PHP على السيرفر





    __________________
    Saudi Wanderer
    My Blog : SWanderer

  9. #9
    عضو فعال
    تاريخ التسجيل
    Aug 2007
    المشاركات
    1,431


    شكرا على طرحك السوال
    وشكرا الى الي اجابو

    استفدتك كثييير

    العفو ....


    بالنسبة للسماح بالحروف العربية فقط, بتواجهك مشكلة اختلاف الترميز

    هناك Extend رائع جداً للتعرف على ترميز النص ولغته ولكن يجب اضافته للـ PHP على السيرفر
    مشكله
    لكن انا احظر كلمة البحث بواسطة $_GET
    كود PHP:
    urldecode($_GET['T']); 
    واستعمل الداله urlencode و urldecode ثم اقوم بالبحث ...
    إعتمدت على الطريقه بالرد الثاني , وحالياً اقوم بعمل تجارب واحاول اجد طريقة افضل إن شاء الله .

    كود PHP:
    // الحروف المسموح بها
    $chars = array('ا','أ','إ','ئ','ء','ب','ت','ث','ج','ح','خ','د','ذ','ر','ز','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ك','ل','م','ن','ه','و','ي','ـ',' ','ؤ','آ','لإ','ُ','َ','ِ','_','لأ','ى','ة','ظ','ر','ز','ه','خ','ح','ج','1','2','3','4','5','6','7','8','9','10','11','12','13','1000','0','2009','2010','1429','1430');

    // تخطي الأكواد
    $T strip_tags($T);// I Take It From Ashraf Alsmhorry , swalif.net
    if (preg_match('/[^'preg_quote(implode($chars)) .']/si'$T)) { 
             
    $MSG $lang['Bad_T'];
             
    $smarty->assign("MSG",$MSG);
             
    $show_header 1;
             include(
    "common_up.php");
           
    $smarty->display("search.htm");

    else
    {
    // إحضار رقم القسم
    $section strip_tags($_POST['section_id']);
    // إحضار نوع الخدمات
    $type strip_tags($_POST['type']);
    // إحضار النجوم
    $stars strip_tags($_POST['stars']);// التأكد من ان خانة البحث ليست فارغه , او اقل من 3 حروف
    if($T == "" OR strlen($T) < 3){
     
    $show_header 1;
    include(
    "common_up.php");
     
    $M $lang['under_3'];
     
    $smarty->assign("MSG",$M);
     
    $smarty->display("search.htm");
     }
     else
     {
    $smarty->assign("Num",$Num);
    $smarty->assign("T",urlencode($T));
    $smarty->assign("type",$type);
    $smarty->assign("C",$section);
    $smarty->assign("S",$stars);
    $smarty->display("search_wait.htm");echo"<meta http-equiv = refresh content=4;url=search.php?results=found&T=".urlencode($T)."&type=$type&C=$section&S=$stars&page=1>";}

    هذه صفحة التحويل بعد إدخال الكلمة في مربع البحث
    , يقوم بتحويلك لصفحه , تقوم هذه الصفحه بتحويل الحروف بواسطة الداله urlencode ثم يقوم بالبحث :
    كود PHP:
    // إحضار نص البحث
    $T trim($_GET['T']);
    $T strip_tags($T);
    $Tx addslashes($T);
    $T urldecode($Tx);
    $T_T urlencode($Tx);
    $text $T;
    // إحضار رقم القسم المراد البحث به
    $C trim($_GET['C']);
    $C strip_tags($C);
    $C addslashes($C);
    if(! 
    is_numeric($C)){ $C 'all'; }
    //إحضار نوع الخدمه
    $type trim(strip_tags($_GET['type']));
    $type addslashes($type);
    $type_array= array('hotel','apartemnt','em','other','all');
    if(! 
    in_array("$type",$type_array)){  $type 'all'; }
    // إحضار النجوم
    $stars trim(strip_tags($_GET['S']));
    $stars_array = array('1','2','3','4','5','all');
    if(! 
    in_array("$stars",$stars_array)) { $stars 'all'; }// I Take It From Ashraf Alsmhorry , swalif.net
    if (preg_match('/[^'preg_quote(implode($chars)) .']/si'$T)) { 
             
    $MSG $lang['Bad_T'];
             
    $smarty->assign("MSG",$MSG);
           
    $smarty->display("search.htm");

    else
    {if(
    $C != 'all'){ if(mysql_num_rows(mysql_query("SELECT `id` FROM `table_section` WHERE `id`='$C'")) == 0){ $C='all'; } }
    // إستخراج الأقسام
    $Sec mysql_query("SELECT `id`,`title` FROM `table_section` ORDER BY `level`");
    while (
    $row=mysql_fetch_array($Sec)){ $SEC[] = $row; }
    $smarty->assign("SectionList",$SEC);
    // التأكد من ان خانة البحث ليست فارغه , او اقل من 3 حروف
    if($T == "" OR strlen($T) < 3){
     
    $M $lang['under_3'];
     
    $smarty->assign("MSG",$M);
     
    $smarty->display("search.htm");
     }
     else
     {
    if(
    $C == 'all'){ $sec_include ""; } else { $sec_include "AND `section_id`='".intval($section)." '"; }
    if(
    $type == 'all') { $type_include ""; } else { $type_include "AND `type`='".addslashes($type)." '"; }
    if(
    $S == 'all'){ $stars_include ""; } else { $srats_include=  "AND `stars`='".intval($stars)." '"; }


    // إستعلام البحث
    $Query=@mysql_query("SELECT * FROM `table_table` WHERE `name` LIKE '%$text%' OR `desc` LIKE '%$text%' OR `text` LIKE '%$text%' OR `meta_open` LIKE '%$text%' "addslashes($sec_include)." "addslashes($type_include)." "addslashes($stars_include)." LIMIT $start,$max_results"); 
    طبعاً هذا بعض من الكود فقط ...


    شكراً لكم على ردودكم ... وجاري المحاولة :nice: بتطبيق كلام الأخ عبقري العرب .

    .










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

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