За последние 24 часа нас посетили 64035 программистов и 1740 роботов. Сейчас ищут 908 программистов ...

Поиск на сайте

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

  1. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Надо сделать поиск. Все есть, вот только не знаю как сделать так что бы можно было выбрать все (в даном случае разделы).

    Вот форма:

    PHP:
    1.  
    2. <form id="form1" name="form1" method="post" action="search.php">
    3.   <table width="1011" border="0" cellspacing="0" cellpadding="0">
    4.     <tr>
    5.       <th width="472" scope="col"><?php
    6. include ("mysql.php");
    7. $query = mysql_query ("SELECT id, title FROM sections ORDER BY title");
    8. echo "<select name='section' id='section'>";
    9. while (list ($section_id, $title) = mysql_fetch_array ($query))
    10. echo "<option value=$section_id>$title</option>";
    11. echo "</select>";
    12. ?>&nbsp;</th>
    13.       <th width="140" scope="col"> <select name="type" id="type">
    14.           <option>Предложение</option>
    15.           <option>Спрос</option>
    16.           <option>Обмен</option>
    17.           <option>Сдам</option>
    18.           <option>Сниму</option>
    19.           <option>Разное</option>
    20.       </select></th>
    21.       <th width="332" scope="col"><label>
    22.         <input name="search" type="text" id="search" size="50" />
    23.       </label></th>
    24.       <th width="67" scope="col"><label>
    25.         <input type="submit" name="Submit" value="Искать" />
    26.       </label></th>
    27.     </tr>
    28.   </table>
    29. </form>
    30.  


    Вот скрипт который обрабатывает форму:

    PHP:
    1.  
    2. <?php
    3. include ("mysql.php");
    4. $search = $_POST ['search'];
    5. $query = mysql_query ("SELECT id, section, type, text, name, email, date FROM announcements WHERE section = '$section', type = '$type' text LIKE '%$search%'");
    6. while (list ($id, $section, $type, $text, $name, $email, $date) = mysql_fetch_array ($query))
    7. {
    8. echo "<table width='300' border ='1' >";
    9. echo "<tr>";
    10. echo "<td width='150'>$type</td><td><div align='right'>$date</div></td>";
    11. echo "</tr>";
    12. echo "</table>";
    13. echo "<table width='300' border ='1'>";
    14. echo "<tr>";
    15. echo "<td>$text</td>";
    16. echo "</tr>";
    17. echo "</table>";
    18. echo "<table width='300' border ='1'>";
    19. echo "<tr>";
    20. echo "<td width='150'>$name</td><td><div align='right'><a href='mailto:$email'>$email</div></td>";
    21. echo "</table>";
    22. echo "<br>";
    23. }
    24. ?>
    25.  

    Нужно что бы можно было выбрать все разделы (типы).
    Заранее спасибо.
    Надеюсь на скорую помощь.
     
  2. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Именно "все" или "несколько"? Если все, то просто добавь в селект на форме опцию "все" и переводи ее в *
    если несколько - используй "select multiply"
    Или я не понял вопроса?
     
  3. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Мне надо что бы в выпадающем списке было ВСЕ. И при выборе выдавало все разделы или типы.
     
  4. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Ну поставь опцию "все" и при ее появлении в $_POST формируй запрос без лишнего выражения в WHERE
    Что-то типа
    PHP:
    1.  
    2. $use_sections = $section == "all"?"section = ' $section,'":"";
    3. $use_types= $type == "all"?"type = ' $type,'":"";
    4. $query_str = "SELECT id, section, type, text, name, email, date FROM announcements WHERE".$use_sections.$use_types."text LIKE '%$search%'"
    5. $query = mysql_query ("$query_str");
    6.  
     
  5. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Непонимаю. Обьясните как работает ВЫБРАТЬ ВСЕ.
     
  6. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Вот появилась еще одна проблема. При поиске мне надо разбить результаты на страницы. Вот весь скрипт: PHP:
    PHP:
    1.  <?php
    2.  include ("mysql.php");
    3.  $search = $_POST ['search'];
    4.  $s_section = $_POST ['section'];
    5.  $s_type = $_POST ['type'];
    6.  $query1 = mysql_query ("SELECT section, type, text, name, email, date FROM announcements WHERE section = '$s_section' and type = '$s_type' and text LIKE '%$search%'");
    7.  $allnum = mysql_num_rows ($query1);
    8.  if(!isset($_GET['page']))
    9.  $page = 1;
    10.  else
    11.  $page = ($_GET['page']);
    12.  $on_page = 1;
    13.  $begin = ($page - 1) * $on_page;
    14.  $num_pages = ceil ($allnum / $on_page);
    15.  $query = mysql_query ("SELECT section, type, text, name, email, date FROM announcements WHERE section = '$s_section' and type = '$s_type' and text LIKE '%$search%' LIMIT $begin, $on_page");
    16.      while (list ($section, $type, $text, $name, $email, $date) = mysql_fetch_array ($query))
    17.      {
    18.      echo "<table width='300' border ='1' >";
    19.      echo "<tr>";
    20.      echo "<td width='150'>$type</td><td><div align='right'>$date</div></td>";
    21.      echo "</tr>";
    22.      echo "</table>";
    23.      echo "<table width='300' border ='1'>";
    24.      echo "<tr>";
    25.      echo "<td>$text</td>";
    26.      echo "</tr>";
    27.      echo "</table>";
    28.      echo "<table width='300' border ='1'>";
    29.      echo "<tr>";
    30.      echo "<td width='150'>$name</td><td><div align='right'><a href='mailto:$email'>$email</div></td>";
    31.      echo "</tr>";
    32.      echo "</table>";
    33.      echo "<br>";
    34.      }
    35.  for($i=0;$i<$num_pages;$i++)
    36.  {
    37.  $pages = $i+1;
    38.  echo "<a href=?page=$pages>$pages</a> ";
    39.  }
    40.  ?>


    Ссылки на страницы выводит. Но при перехлде на любую страницу результат уже не отображаеться. В чем проблема и что мне делать? Спасибо.

    // следующий раз будьте добры сами обрамлять код соответствующими bb-тэгами. Luge
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    есть запрос COUNT(*) для подсчёта количества элементов
    страницу передаёшь, а условия поиска откуда скрипт узнает?
     
  8. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Ну а как исправить? Что бы все работало верно?
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну передавай этот $search вместе с номером страницы
     
  10. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    А как? Не могли бы Вы показать? Буду благодарен.
     
  11. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    yandex.ru в качестве примера
     
  12. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    )))). Ну а исправить мой код. Пожалуйста. Я уже давно с этим мучаюсь(
     
  13. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Luge, маленькая какая-то у тебя цистерна - всего на один стакан хватит... :)
     
  14. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    5 wmz :D
    или попробуй посмотреть что из себя ссылки страниц представляют на других поисковиках и подумай
     
  15. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
  16. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    вот этот
    во все навигационные ссылки и пихает
    тебе тоже надо
    PHP:
    1. <?php echo '<a href=?page='.$pages.'&amp;search='.urlencode($search).'>'.$pages.'</a>'; ?>
    и на следующей странице брать из GET то, что надо искать, предварительно обработав urldecode()
     
  17. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    dark-demon, она не маленькая, она далеко просто (в тупичёк загнал, от чужих рук подальше :D )
    Можешь себе ведёрко нацедить :)
     
  18. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев

    А можно оюьяснить что к чему, ведь мне не надо просто код, я хочу разобраться. :)

    Вот моя ася 499 147 889. Luge если тебе не сложно то свяжись по асе. Так я больше пойму. Доставать не буду, обещаю)
     
  19. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Luge, ну, будь здарофф :)
     
  20. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Обьясните что это такое? А то я ниче не понимаю. И что мне надо изменить в моем скрипте.

    Вдруг это второй Гугл))
     
  21. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Это URL. К нему методом get добавлено значение q="что искал-то?". q на секретном языке гуглов означает query. Это у окошка, в которое ты вбиваешь запрос, имя такое - q.

    Яндексы вместо этого используют слово text. На секретном языке яндексов это значит "текст". Происходит это слово от имени окошка куда ты вбиваешь запрос в Яндексе

    Тогда используй секрентый язык гуглов и не лезь к яндексам...
     
  22. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    А можно что то свое использовать?
     
  23. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  24. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев

    А urldecode использовать как? Какой ее синтаксис, а то в мануале я ниче не понял.
     
  25. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    как можно не понять синтаксис из мануала?

    $newstr=urldecode($url_str) - вот и весь синтаксис.