За последние 24 часа нас посетили 18836 программистов и 1628 роботов. Сейчас ищут 977 программистов ...

Защищенность поиска.

Тема в разделе "PHP для новичков", создана пользователем svkarasev, 16 дек 2011.

  1. svkarasev

    svkarasev Активный пользователь

    С нами с:
    4 ноя 2011
    Сообщения:
    43
    Симпатии:
    1
    Всем доброго времени суток.
    Пожалуйста, скажите, защищен ли мой поиск, покажите пожалуйста, если есть, ошибки.

    PHP:
    1. <?php
    2. require_once('php/connect.php');
    3. //получаем данные через $_POST
    4. $post =$_REQUEST['search'];
    5.  
    6.  
    7.   if (isset( $post)) {
    8.     // подключаемся к базе
    9.     $db = new db();
    10.   {
    11.     $post = addslashes($post);
    12.   }
    13.     // Строим запрос
    14.     if (empty($post) or strlen($post) <3) {
    15.     echo'Поле не может быть пустым';exit();}
    16.     $post=trim(htmlspecialchars($post,  ENT_QUOTES));
    17.     $sql = "SELECT * FROM planes WHERE name LIKE '%" . addcslashes(mysql_real_escape_string($post), '%_\\\'') . "%' ORDER BY dt_create DESC LIMIT 9";
    18.     // Получаем результаты
    19.     $row = $db->select_list($sql);
    20.     if(count($row)) {
    21.     foreach($row as $r) {
    22.    
    23.             echo '<li class="grid_4"><a href="'. $r[7].'"><img src="'. $r[11].'" alt="'. $r[1].'" width="300" height="100"/></a>';
    24.  echo '<h3><a href="'. $r[7].'">'. $r[1].'</a></h3>';
    25.  echo '<span class="price"><strong>'. $r[4].'</strong> </span>';
    26.  echo '<p align="justify">'. $r[5].'</p>';      
    27.  echo '<div><span><a href="#">Оф. сайт</a></span>';
    28.  echo '<span class="stars"></span>';
    29.  echo '<span><a href="'. $r[7].'">Подробнее..</a></span></div></li>';
    30.  
    31.         }
    32.         echo $end_result;
    33.     } else {
    34.         echo '<h2 style="padding-bottom: 350px;">По вашему запросу ничего не найдено</h2>';
    35.     }
    36. }
    37. ?>
    38.  
    connect .php
    PHP:
    1. <?php
    2.  
    3. function plus_slash($a){
    4.     $b=chr(92);
    5.     $a=str_replace($b,$b.$b,$a);
    6.     return $a;
    7. }
    8.   class db {
    9.  
    10.  
    11.     function __construct()
    12.     {
    13.         global $dbh;
    14.         if (!is_null($dbh)) return;
    15.         $dbh = mysql_pconnect('localhost', 'dddddddd', 'dddddddddddddddd');
    16.         mysql_select_db('airblog_info');
    17.         mysql_query('SET NAMES utf8');
    18.        
    19.     }
    20.  
    21.     function select_list($query)
    22.     {
    23.         $q = mysql_query($query);
    24.         if (!$q) return null;
    25.         $ret = array();
    26.         while ($row = mysql_fetch_row($q, MYSQL_BOTH)) {
    27.             array_push($ret, $row);
    28.         }
    29.  
    30.         mysql_free_result($q);
    31.         return $ret;
    32.     }
    33.      
    34.   }
    35. ?>
    36.  
    Да и еще, если оставлять поле поиска пустым, то в результате пишет, что "поле не должно быть пустым" и половины страницы нет (если что-то нашел, то вторая половина появляется)
    Заранее всем огромное спасибо =)
     
  2. NeoXidant

    NeoXidant Активный пользователь

    С нами с:
    8 фев 2010
    Сообщения:
    121
    Симпатии:
    1
    если по вашей задумке так быть не должно, то уберите "exit();" из кода, а остальную часть обрабатывать после else
    PHP:
    1. <?php
    2. if (empty($post) or strlen($post) <3) {
    3.      echo'Поле не может быть пустым';
    4. } else {
    5.      $post=trim(htmlspecialchars($post,  ENT_QUOTES));
     
  3. svkarasev

    svkarasev Активный пользователь

    С нами с:
    4 ноя 2011
    Сообщения:
    43
    Симпатии:
    1
    Спасибо большое =)