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 » Напишите за меня, пожалуйста » Помогите пожалуйста

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

1. VasyaCV - 17 Июня, 2011 - 15:54:06 - перейти к сообщению
Здравствуйте!
Я новичок в php. Есть задание. Надо сделать поиск по выпадающему списку. При выборе значения из списка делается запрос в базу данных.
Моя форма:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <form action="search.php" method="post" name="f1" onsubmit="javascript: if ((txtSearch1.value=='')||(txtSearch1.value=='Поиск...')) { return false; } else { return true; }">
  2.          
  3.             <select name=txtFields1 size=1 method="post">
  4.             <option value="ZERO" selected>-- виберiть поле --</option>
  5.             <option value="tit">название</option>
  6.             <option value="aut">автор</option>
  7.             <option value="ed">редактор</option>
  8.             </select>
  9.          <input type="text" name="txtSearch1" size="50" value="" onfocus="">
  10.          <input type="submit" name="submit" value="поиск">
  11.          <input type="reset" name="reset" value="удалить">
  12.             <


код поиска что писал:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. /* Соединение, выбор БД */
  3. $link = mysql_connect("localhost", "root", "") or die("Не соединилось!!!");
  4. mysql_select_db("lb") or die("Не найдена БД");
  5. $query = "SELECT * FROM book WHERE UPPER(title) LIKE '%".strtoupper($_POST['txtSearch1'])."%'";
  6. $result = mysql_query($query) or die("Запрос ошибочный");
  7. $k=mysql_num_rows($result); //количество строк в результате запроса*/
  8. if ($k==0) {print "<h3 align=center>По ващому запиту нічого не знайдено. Повторіть пошук";}
  9. else{
  10. /* Печать результатов в HTML */
  11. print "Записів знайдено: <b>$k</b>";
  12. print "<table class=\"forumline\" border=\"0\" cellpadding=\"2\" cellspacing=\"1\" width=\"100%\">
  13. <tr></tr> \n";
  14. }
  15. while ($line = mysql_fetch_array($result, MYSQL_NUM)) {
  16. print "\t<tr>\n";
  17. for ($i=1;$i<=12;$i++){print "\t\t<td class=\"row1\" align=\"center\" valign=\"middle\" height=\"50\" width=\"16%\">$line[$i]</td>\n";}
  18. print "\t</tr>\n";
  19. }
  20. print "</table>\n";
  21. /* Освобождение памяти, занятой результатом запроса */
  22. /* Закрытие соединения */
  23. mysql_close($link);
  24. ?>
  25.  
2. OrmaJever - 17 Июня, 2011 - 16:09:01 - перейти к сообщению
так вам точно не помгут... потому что непонятно чем Хм
3. VasyaCV - 17 Июня, 2011 - 16:17:24 - перейти к сообщению
У меня есть база данных. Мне нужно по форме которую я написал выше делать поиск в базе. Например я выбираю из выпадающего списка автор и надо искать в базе по полю автор. Или я выбираю название и искать надо по полю название в таблице базы. Я не могу не как разобраться с выпадающим списком. Ищет только по одному значению, несмотря на то что в форме выбираю разные значения.
4. LIME - 17 Июня, 2011 - 18:54:21 - перейти к сообщению
VasyaCV могу предположить что выборка получается только по названию .
Да?
(Добавление)
в 5ой строке PHP поменяйте поле title на переменную которую перед этим инициализируйте в зависимости от txtFields1.
Или лучше выставте значения select как соответствующие поля в базе. Тогда :

PHP:
скопировать код в буфер обмена
  1.  
  2. $query = "SELECT * FROM book WHERE UPPER($_POST['txtFields1']) LIKE '%".strtoupper($_POST['txtSearch1'])."%'";
  3.  


наверное так
(Добавление)
и кстати хорошобы както проверить обе переменные на вшивость сначала если безопасность важна.
негоже их явно в запрос пихать . Подмигивание
5. VasyaCV - 18 Июня, 2011 - 09:32:56 - перейти к сообщению
а как это сделать?
6. LIME - 18 Июня, 2011 - 10:37:09 - перейти к сообщению
http://php.su/functions/?strip-tags для начала

ихорошобы убрать пробелы в начале и конце ...их случайно лепят все подряд а потом ищут где ошибка -
http://php.su/functions/?trim


обработайте все переменные которые получаете и используете ато можно внести изменения в ваш код запросто

пы сы : А код-то заработал?
(Добавление)
если ввести в поиске к примеру -

?> <h1>VasyaCV ламер<h1><?php

то это подставится в ваш код вместо переменной $_POST['txtSearch1']
догадались что получится в итоге? )))
7. VasyaCV - 18 Июня, 2011 - 14:10:30 - перейти к сообщению
код заработал только не много в другом варианте.
При таком запросе:
PHP:
скопировать код в буфер обмена
  1.  
  2. $search = mysql_real_escape_string($_POST['txtSearch1']);
  3. $query = "SELECT * from book where ".mysql_escape_string($_POST['txtFields1'])." like '%".$search."%'";

всё работает на ура)

 

Powered by ExBB FM 1.0 RC1