За последние 24 часа нас посетили 18818 программистов и 1627 роботов. Сейчас ищут 947 программистов ...

Помогите пожалуйста с поиском

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

  1. svkarasev

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

    С нами с:
    4 ноя 2011
    Сообщения:
    43
    Симпатии:
    1
    И меется php код вывода результатов поиска. Все Работает, [/b]НО если не находит результаты, то почему-то не пишет что по вашему... Пожалуйста скажите, где у меня ошибка.
    Заранее всем спасибо =)

    PHP:
    1.      <?php
    2.      // Сколько записей показывать на странице
    3.      $perPage = 5;
    4.      // получаем данные через $_POST
    5.      if(isset($_REQUEST['search'])) {
    6.          // подключаемся к базе
    7.          include('php/connect.php');
    8.          $db = new db();
    9.          // никогда не доверяйте входящим данным! Фильтруйте всё!
    10.          $word = mysql_real_escape_string($_REQUEST['search']);
    11.          // Определим, сколько всего записей соответствуют запросу
    12.          $sql = "SELECT COUNT(*) AS `total` FROM `planes` WHERE `name` LIKE '%{$word}%'";
    13.          $row = $db->select_list($sql);
    14.          $row = each($row);
    15.          $total = $row['value']['total'];
    16.          // Всего страниц
    17.          $pages = ceil($total / $perPage);
    18.          // Запрошенная страница
    19.          $page = isset($_REQUEST['page']) ? (int) $_REQUEST['page'] : 1;
    20.          // Если такой страницы нет - значит кто-то балуется.
    21.          if($page < 1 or $page > $pages) {
    22.              header('HTTP/1.1 404 Not Found');
    23.              exit;
    24.          }
    25.          // Посчитаем с какой записи начать выборку
    26.          $start = ($page - 1) * $perPage;
    27.          // Получим соответствующие записи
    28.          $sql = "SELECT * FROM `planes` WHERE `name` LIKE '%" . $word . "%' ORDER BY `dt_create` LIMIT {$start}, {$perPage}";
    29.          $row = $db->select_list($sql);
    30.          if(count($row)) {
    31.              $end_result = '';
    32.              foreach($row as $r) {
    33.                  // Выводим записи
    34.                  $end_result .= '<li class="grid_4"><a href="'. $r['link'].'"><img src="'. $r['mini_img'].'" alt="'. $r['name'].'" width="300" height="100"/></a>';
    35. $end_result .= '<h3><a href="'. $r['link'].'">'. $r['name'].'</a></h3>';
    36. $end_result .= '<span class="price"><strong>'. $r['dt_create'].'</strong> </span>';
    37. $end_result .= '<p align="justify">'. $r['decription'].'</p>';     
    38. $end_result .= '<div><span><a href="#">Оф. сайт</a></span>';
    39. $end_result .= '<span class="stars"></span>';
    40. $end_result .= '<span><a href="'. $r['link'].'">Подробнее..</a></span></div></li>';
    41.              }
    42.              // Ссылки на страницы (если всего одна страница, то ссылки показывать незачем)
    43.              if($pages > 1) {
    44.                  $end_result .= '<div class="pages">';
    45.                  for($i = 1; $i <= $pages; $i++)
    46.                      $end_result .= '<a href="?search=' . urldecode(stripslashes($word)) . '&amp;page=' . $i . '">' . $i . '</a>   ';
    47.                  $end_result .= '</div>';
    48.              }
    49.              echo $end_result;
    50.          } else {
    51.              echo '<h2>По вашему запросу ничего не найдено</h2>';
    52.          }
    53.      }
    54.      ?>
     
  2. svkarasev

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

    С нами с:
    4 ноя 2011
    Сообщения:
    43
    Симпатии:
    1
    Даже половина страницы исчезла
     
  3. turrel

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

    С нами с:
    12 июн 2011
    Сообщения:
    65
    Симпатии:
    0
    Так, возможно я чего-то принципиально недопёр, но этот код должен быть вдвое короче. Как минимум. Иначе это говнокод (без обид).

    Схема должна быть такая:
    1. Получение гет-пост переменных, фильтрация их во избежание инъекций, прочая обработка переменных.
    2. Подключение к БД средствами php.
    3. Нахождение результата через $query - $result.
    4. Подсчет количества строк через mysql_num_rows()
    5. Если строк 0, то сообщение об ошибке, если 1 или более строк, выводим их через цикл с использованием, например, mysql_fetch_row.

    Вуаля.

    Автору покурить: mysql_fetch_row
     
  4. svkarasev

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

    С нами с:
    4 ноя 2011
    Сообщения:
    43
    Симпатии:
    1
    turrel
    я в php чайник, наверное по етому у меня и говнокод склеился =)
    Подскажи пожалуйста что поменять надобно?
     
  5. svkarasev

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

    С нами с:
    4 ноя 2011
    Сообщения:
    43
    Симпатии:
    1
    где вообще можно почитать статью с кодом полноценным поиском и зашитой?
     
  6. Mamont

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

    С нами с:
    5 дек 2010
    Сообщения:
    183
    Симпатии:
    0
    PHP:
    1. <?php
    2. if($page < 1 or $page > $pages) {
    3.     header('HTTP/1.1 404 Not Found');
    4.     exit;
    5. }
    Если записи не найдены, то $pages=0. А $page меньше единицы у тебя не может быть.
     
  7. turrel

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

    С нами с:
    12 июн 2011
    Сообщения:
    65
    Симпатии:
    0
    Отписался подробно в личку.