Перейти к содержанию
СофтФорум - всё о компьютерах и не только

помогите отладить скрипт


Рекомендуемые сообщения

Собственно работу скрипта можно увидить на ЭльЭко. Что не нравиться:

1. после отправки заполненой формы результат поиска получаю на странице search.php, а нужно, чтобы результат в виде выделения искомой позиции, появлялся на той странице где эта позиция находится;

2. как сделать не очень строгий поиск, хотя бы по первым 5-ти буквам?

Вот код самого скрипта:

 <form action="http://www.el-eko.ru/search.php" method="POST">Поиск товара по каталогу:<input type="text" name="name" maxlength="255" size="30" /><img src="images/lupa.gif" width="19" height="15"><input type="submit"  name="search" value="Найти" /></form><?php   print("<table border='0' cellspacing='3' cellpadding='0'>");//connection to MySQL $db_host = "localhost"; $db_user = "user"; $db_password = "password"; $db_name = "mydb"; $connection = mysql_connect ($db_host, $db_user, $db_password) or die ('error connection'); mysql_select_db($db_name, $connection);//variables	@$name =$_POST['name'];	@$page =$_POST['page'];	@$group_production =$_POST['group_production'];//chekboxes if (isset($name)) {	 $srch='name';} //name - имя столбца в таблице if (isset($page)) {	 $srch='page';} //page - имя столбца в таблице if (isset($group_production)) {	 $srch='group_production';} //group_production - имя столбца в таблице	@$query = "SELECT * FROM production WHERE $srch = '$name' ";	$result = mysql_query($query);	while($t = @mysql_fetch_array($result)) {		 print("	 <tr>	   <td  width='40%'><font color='#CC6600'>$t[name]</font></td>	   <td  width='30%'><font color='#FF6600'>$t[opisanie]</font></td>	   <td  width='15%'><font color='#CC0000'>$t[blabla]</font></td>	  </tr>	 ");} print("</table>");?>

Небольшое дополнение: я не очень хорошо понимаю в php, поэтому если есть возможность "разжевать" тему буду признатален, кстати сам скрипт писал не я, мне дали болванку а я пытаюсь ее заточить под себя.

Ссылка на комментарий
Поделиться на другие сайты

На втором вопросе, отредактировать запрос:

@$query = "SELECT * FROM production WHERE $srch = '$name' ";

Если хотите нестрогий поиск -> не полное совподение, нужно пользуват LIKE

$query = "SELECT * FROM production WHERE $srch like '$name%' ";
Ссылка на комментарий
Поделиться на другие сайты

На втором вопросе, отредактировать запрос:

@$query = "SELECT * FROM production WHERE $srch = '$name' ";

Если хотите нестрогий поиск -> не полное совподение, нужно пользуват LIKE

$query = "SELECT * FROM production WHERE $srch like '$name%' ";

Спасибо amigo за помощь, такой поиск реально лучше, но полностью удовлетворения нет, т.к. результат я получаю не в виде выделенной искомой позиции на самой странице где она находится, а выводится искомая позиция отдельно. Что здесь можно придумать?

Ссылка на комментарий
Поделиться на другие сайты

Еще такой момент: как сделать так чтобы в результате поиска столбец "название страницы" выводился как ссылка на ту страницу на которую он указывает?

Ссылка на комментарий
Поделиться на другие сайты

mjc66:

1) Ваш скрипт содержит уязвимость SQL Injection. Вводимые параметры, что используются в функциях mysql_query надо очищать с помощью addslashes(); P.S.: ТОЛЬКО если magic_quotes_gpc не включено.

2) Если вы хотите совсем уж хороший посик, то используйте полнотекстовый поиск - смотрите мануал MySQL.

3) Лучше в скриптах использовать метод GET, а не POST (чтобы результаты поиска можно было давать в качестве ссылки).

Ссылка на комментарий
Поделиться на другие сайты

1) Можно пользувать mysql_escape_string

mjc66

Без информации о структуре вашего сайта и БД очень трудно ответитть этих вопросов

Ссылка на комментарий
Поделиться на другие сайты

mjc66:

1) Ваш скрипт содержит уязвимость SQL Injection. Вводимые параметры, что используются в функциях mysql_query надо очищать с помощью addslashes(); P.S.: ТОЛЬКО если magic_quotes_gpc не включено.

2) Если вы хотите совсем уж хороший посик, то используйте полнотекстовый поиск - смотрите мануал MySQL.

3) Лучше в скриптах использовать метод GET, а не POST (чтобы результаты поиска можно было давать в качестве ссылки).

Странно, изменил в форме на 1-й странице метод , POST на GET теперь он мне пишет об ошибке запроса, может в коде скрипта тоже надо что-то изменить?

Ссылка на комментарий
Поделиться на другие сайты

1) Можно пользувать mysql_escape_string

mjc66

Без информации о структуре вашего сайта и БД очень трудно ответитть этих вопросов

Не совсем понял на счет структуры сайта, а что касается БД, то выглядит она следующим образом: одна таблица-"production", три столбца: "page"(varchar(20))-48 элементов имя ключа "page" тип ключа "INDEX", "name"(varchar(255))-1789 элементов имя ключа "name" тип ключа "INDEX", "group_production"(varchar(255))-15 элементов имя ключа "group_production" тип ключа "INDEX".

Ссылка на комментарий
Поделиться на другие сайты

Странно, изменил в форме на 1-й странице метод , POST на GET теперь он мне пишет об ошибке запроса, может в коде скрипта тоже надо что-то изменить?

Да, надо $_POST заменить на $_GET

Ссылка на комментарий
Поделиться на другие сайты

Не совсем понял на счет структуры сайта, а что касается БД, то выглядит она следующим образом: одна таблица-"production", три столбца: "page"(varchar(20))-48 элементов имя ключа "page" тип ключа "INDEX", "name"(varchar(255))-1789 элементов имя ключа "name" тип ключа "INDEX", "group_production"(varchar(255))-15 элементов имя ключа "group_production" тип ключа "INDEX".

Кстати еще момент: умные люди советуют сделать еще столбец типа "id", чтобы поиск велся именно по нему; тогда у меня вопрос такой какой ему лучше тип присвоить, какие атрибуты: UNSINGNED или UNSINGNED ZEROFILL, not null или null, а так же нужно ли ставить значение auto_increment?

Да, надо $_POST заменить на $_GET

Поиск нормализовался, однако результат в виде ссылки не выводится

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Почему же?

Вот, посмотри поиск Соли ( http://www.el-eko.ru/search.php?name=%F1%EE%EB%FC )

Это я и имел ввиду.

Вобщем я доработал скрипт, окончательный вариант выглядит так

<?php    print("<table border='1' cellspacing='2' cellpadding='1' class='search'><caption align=top class='search'>Результат поиска:</caption><tr><td width='35%' class='search_top' align='center'><b>Наименование товара</b></td><td width='20%' class='search_top' align='center'><b>Страница в каталоге</b></td><td width='30%' class='search_top' align='center'><b>Группа товаров</b></td></tr>"); //connection to MySQL  $db_host = "localhost";  $db_user = "login";  $db_password = "password";  $db_name = "my_db";  $connection = mysql_connect ($db_host, $db_user, $db_password) or die ('error connection');  mysql_select_db($db_name, $connection); //variables 	@$id =$_GET['id']; 	@$name =$_GET['name']; 	@$page =$_GET['page']; 	@$group_production =$_GET['group_production']; //chekboxes  if (isset($id)) { 	 $srch='id';} //id - имя столбца в таблице  if (isset($name)) { 	 $srch='name';} //name - имя столбца в таблице  if (isset($page)) { 	 $srch='page';} //page - имя столбца в таблице  if (isset($group_production)) { 	 $srch='group_production';} //group_production - имя столбца в таблице 	@$query = "SELECT * FROM production WHERE $srch like '%$name%' ";    $result = mysql_query($query) or die('Ошибка запроса');		while($t = @mysql_fetch_array($result)) {		 print("	  	 <tr> 	   <td  width='35%' class='search'><font color='#CC0000'>$t[name]</font></td> 	   <td  width='20%' class='search'><font color='#0000CC'><a href=$t

>Найти на странице</a></font></td> 	   <td  width='30%' class='search'><font color='#CC0000'>$t[group_production]</font></td> 	  </tr> 	 "); }  print("</table>"); ?>

однако остается одна единственная проблема: в результате открытия файла search.php появляется таблица с результатом поиска: "Наименование товара", "Страница в каталоге", "Группа товаров", в колонке "Страница в каталоге" выводится ссылка "Найти на странице" которая ведет на ту страницу где находится выбранный товар, так вот нужно чтобы эта страница открывалась и показывала при помощи выделения каким-нибудь цветом тот самый выбранный товар.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...