Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поиск на сайте
Форумы портала PHP.SU » PHP » Программирование на PHP » Поиск на сайте

Страниц (1): [1]
 

1. Andrey5555 - 17 Января, 2008 - 19:43:53 - перейти к сообщению
Надо сделать поиск. Все есть, вот только не знаю как сделать так что бы можно было выбрать все (в даном случае разделы).

Вот форма:
PHP:
<form id="form1" name="form1" method="post" action="search.php">
<table width="1011" border="0" cellspacing="0" cellpadding="0">
<tr>
<th width="472" scope="col"><?php
include ("mysql.php");
$query = mysql_query ("SELECT id, title FROM sections ORDER BY title");
echo "<select name='section' id='section'>";
while (list ($section_id, $title) = mysql_fetch_array ($query))
echo "<option value=$section_id>$title</option>";
echo "</select>";
?> </th>
<th width="140" scope="col"> <select name="type" id="type">
<option>Предложение</option>
<option>Спрос</option>
<option>Обмен</option>
<option>Сдам</option>
<option>Сниму</option>
<option>Разное</option>
</select></th>
<th width="332" scope="col"><label>
<input name="search" type="text" id="search" size="50" />
</label></th>
<th width="67" scope="col"><label>
<input type="submit" name="Submit" value="Искать" />
</label></th>
</tr>
</table>
</form>


Нужно что бы можно было выбрать все разделы (типы).
Заранее спасибо.
Надеюсь на скорую помощь.
(Добавление)
Вот скрипт который обрабатывает форму:
PHP:
<?php
include ("mysql.php");
$search = $_POST ['search'];
$query = mysql_query ("SELECT id, section, type, text, name, email, date FROM announcements WHERE section = '$section', type = '$type' text LIKE '%$search%'");
while (list ($id, $section, $type, $text, $name, $email, $date) = mysql_fetch_array ($query))
{
echo "<table width='300' border ='1' >";
echo "<tr>";
echo "<td width='150'>$type</td><td><div align='right'>$date</div></td>";
echo "</tr>";
echo "</table>";
echo "<table width='300' border ='1'>";
echo "<tr>";
echo "<td>$text</td>";
echo "</tr>";
echo "</table>";
echo "<table width='300' border ='1'>";
echo "<tr>";
echo "<td width='150'>$name</td><td><div align='right'><a href='mailto:$email'>$email</div></td>";
echo "</table>";
echo "<br>";
}
?>
2. EuGen - 17 Января, 2008 - 19:47:41 - перейти к сообщению
Проблема в том, чтобы добавить в select еще пункт "Все разделы"? или в том, как сформировать запрос, чтобы он охватывал все разделы? Или в чем-то еще? Что-то не до конца ясно пока что.
3. Andrey5555 - 17 Января, 2008 - 19:55:32 - перейти к сообщению
Сформировать запрос.
4. EuGen - 17 Января, 2008 - 20:03:22 - перейти к сообщению
ОК,
Так, как Вы сейчас это делаете - не совсем правильно, потому что в Вашем запросе нет гибкости. Как я обычно делаю в таких случаях:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $section=$_POST['section'];
  3. $search=$_POST['search'];
  4. $type=$_POST['type'];
  5. $rgWheres=array();
  6. if($section)
  7.    $rgWheres[]="section='".addslashes($section)."'";
  8. if($type)
  9.    $rgWheres[]="type='".addslashes($type)."'";
  10. if($search)
  11.    $rgWheres[]="`text` LIKE '%".addslashes($search)."%'";
  12. $strWhere=join("&&", $rgWheres);
  13. if ($strWhere)
  14.    $strWhere="WHERE ".$strWhere;
  15. if($search)
  16. {
  17.    $query = mysql_query ("SELECT id, section, type, text, name, email, date FROM announcements $strWhere");
  18. }
  19.  
5. Andrey5555 - 17 Января, 2008 - 20:10:51 - перейти к сообщению
А есть ли вариант попроще? Без использования масива. Так что бы было как дважды два? Я не совсем понимаю как можно осуществить выбор всего? Как в переменную получить все значения типов (разделов)?
(Добавление)
А есть ли вариант попроще? Без использования масива. Так что бы было как дважды два? Я не совсем понимаю как можно осуществить выбор всего? Как в переменную получить все значения типов (разделов)? Или это делаеться как то по другому? Лучше обьяните как это осуществляеться, может я сам смогу реализовать.
Спасибо
6. EuGen - 17 Января, 2008 - 20:13:45 - перейти к сообщению
Вот как это работает:
предположим, $_POST['section'] пусто. (Кстати, Вам нужно сделать в Вашем select выбор такого вида: <option value=''>Все категории</option>).
тогда в массив $rgWheres не попадет строка "section='$section'", и, соответственно, в строку $strWhere тоже не попадет это условие.
Тогда и в запросе у Вас его не будет, и, стало быть, будет сделана выборка по всем section.
7. Andrey5555 - 18 Января, 2008 - 16:00:35 - перейти к сообщению
А можно ли как то без использования масива?
8. Andrey5555 - 27 Января, 2008 - 13:12:02 - перейти к сообщению
Вот появилась еще одна проблема. При поиске мне надо разбить результаты на страницы. Вот весь скрипт: PHP:
PHP:
скопировать код в буфер обмена
  1.  
  2.  <?PHP
  3.  include ("mysql.php");
  4.  $search = $_POST ['search'];
  5.  $s_section = $_POST ['section'];
  6.  $s_type = $_POST ['type'];
  7.  $query1 = mysql_query ("SELECT section, type, text, name, email, date FROM announcements WHERE section = '$s_section' and type = '$s_type' and text LIKE '%$search%'");
  8.  $allnum = mysql_num_rows ($query1);
  9.  if(!isset($_GET['page']))
  10.  $page = 1;
  11.  else
  12.  $page = ($_GET['page']);
  13.  $on_page = 1;
  14.  $begin = ($page - 1) * $on_page;
  15.  $num_pages = ceil ($allnum / $on_page);
  16.  $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");
  17.      while (list ($section, $type, $text, $name, $email, $date) = mysql_fetch_array ($query))
  18.      {
  19.      echo "<table width='300' border ='1' >";
  20.      echo "<tr>";
  21.      echo "<td width='150'>$type</td><td><div align='right'>$date</div></td>";
  22.      echo "</tr>";
  23.      echo "</table>";
  24.      echo "<table width='300' border ='1'>";
  25.      echo "<tr>";
  26.      echo "<td>$text</td>";
  27.      echo "</tr>";
  28.      echo "</table>";
  29.      echo "<table width='300' border ='1'>";
  30.      echo "<tr>";
  31.      echo "<td width='150'>$name</td><td><div align='right'><a href='mailto:$email'>$email</div></td>";
  32.      echo "</tr>";
  33.      echo "</table>";
  34.      echo "<br>";
  35.      }
  36.  for($i=0;$i<$num_pages;$i++)
  37.  {
  38.  $pages = $i+1;
  39.  echo "<a href=?page=$pages>$pages</a> ";
  40.  }
  41.  ?>




Ссылки на страницы выводит. Но при перехлде на любую страницу результат уже не отображаеться. В чем проблема и что мне делать? Спасибо.
9. Andrey5555 - 01 Февраля, 2008 - 17:33:38 - перейти к сообщению
Так как все таки сделать выборку ВСЕГО попроще?

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

Ну мы что, не понимаем что вы будете делать с данными?
Выводить их циклом. Зачем вы нам цикл в коде оставили? Он нам нужен?
Постраничная навигация.. Какое отношению к заголовку вопроса она имеет??

Зачем вы присваиваете отдельным перемнным значения из массива?
Кроме того ещё дублируя его.
Да уже не говоря о эффективности программы, зачем вы лишнюю работу делаете?
О стиле программирования я ничего не говорю. Хотите писать вместо двух строк четыре - пожалуйста.

А теперь для того чтобы я мог помочь вам составить запрос,
скажите пожалуйста что же я должен для этого знать.

Ну и самое главное
какое ваш код имеет отношение к простому вопросу:
Так как все таки сделать выборку ВСЕГО попроще?

Если вы придумали гениальный метод реализации решения вашей задачи,
то спрашивайте конкретный вопрос.
Если вы не знаете как бы решить ту или иную задачу - так и спросите.

Эту тему я вам предлагаю либо отредактировать, либо попросить у супермодератора
её отредактировать, либо забыть про неё и начать новую.

--
Если у вас попросили дать полный код, приношу извинения заранее.
Я такие темы не читаю. Вместо того чтобы вам помочь, вы загружаете меня работой.
11. EuGen - 01 Февраля, 2008 - 20:32:45 - перейти к сообщению
Спокойствие, только спокойствие.
Человек скоро, я думаю, сам поймет, в чем он не прав и почему ответов маловато. И тогда уже будут приводиться более разумные объяснения и примеры.
12. valenok - 01 Февраля, 2008 - 22:42:40 - перейти к сообщению
Да я просто выпалил. Накопилось.
Я каждую третюю тему открываю и вообще не читаю ..
13. evgenijj - 02 Февраля, 2008 - 11:45:30 - перейти к сообщению
valenok пишет:
Я такие темы не читаю. Вместо того чтобы вам помочь, вы загружаете меня работой.

+1
14. Dastar - 02 Февраля, 2008 - 16:47:39 - перейти к сообщению
Адрей, твой вопрос вынеc в отдельную тему.

 

Powered by ExBB FM 1.0 RC1