mjc66 Опубликовано 23 мая, 2007 Жалоба Поделиться Опубликовано 23 мая, 2007 Собственно работу скрипта можно увидить на ЭльЭко. Что не нравиться: 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, поэтому если есть возможность "разжевать" тему буду признатален, кстати сам скрипт писал не я, мне дали болванку а я пытаюсь ее заточить под себя. Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 23 мая, 2007 Жалоба Поделиться Опубликовано 23 мая, 2007 На втором вопросе, отредактировать запрос: @$query = "SELECT * FROM production WHERE $srch = '$name' "; Если хотите нестрогий поиск -> не полное совподение, нужно пользуват LIKE $query = "SELECT * FROM production WHERE $srch like '$name%' "; Ссылка на комментарий Поделиться на другие сайты Поделиться
mjc66 Опубликовано 24 мая, 2007 Автор Жалоба Поделиться Опубликовано 24 мая, 2007 На втором вопросе, отредактировать запрос: @$query = "SELECT * FROM production WHERE $srch = '$name' "; Если хотите нестрогий поиск -> не полное совподение, нужно пользуват LIKE $query = "SELECT * FROM production WHERE $srch like '$name%' "; Спасибо amigo за помощь, такой поиск реально лучше, но полностью удовлетворения нет, т.к. результат я получаю не в виде выделенной искомой позиции на самой странице где она находится, а выводится искомая позиция отдельно. Что здесь можно придумать? Ссылка на комментарий Поделиться на другие сайты Поделиться
mjc66 Опубликовано 31 мая, 2007 Автор Жалоба Поделиться Опубликовано 31 мая, 2007 Еще такой момент: как сделать так чтобы в результате поиска столбец "название страницы" выводился как ссылка на ту страницу на которую он указывает? Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 31 мая, 2007 Жалоба Поделиться Опубликовано 31 мая, 2007 mjc66: 1) Ваш скрипт содержит уязвимость SQL Injection. Вводимые параметры, что используются в функциях mysql_query надо очищать с помощью addslashes(); P.S.: ТОЛЬКО если magic_quotes_gpc не включено. 2) Если вы хотите совсем уж хороший посик, то используйте полнотекстовый поиск - смотрите мануал MySQL. 3) Лучше в скриптах использовать метод GET, а не POST (чтобы результаты поиска можно было давать в качестве ссылки). Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 31 мая, 2007 Жалоба Поделиться Опубликовано 31 мая, 2007 1) Можно пользувать mysql_escape_string mjc66 Без информации о структуре вашего сайта и БД очень трудно ответитть этих вопросов Ссылка на комментарий Поделиться на другие сайты Поделиться
mjc66 Опубликовано 31 мая, 2007 Автор Жалоба Поделиться Опубликовано 31 мая, 2007 mjc66: 1) Ваш скрипт содержит уязвимость SQL Injection. Вводимые параметры, что используются в функциях mysql_query надо очищать с помощью addslashes(); P.S.: ТОЛЬКО если magic_quotes_gpc не включено. 2) Если вы хотите совсем уж хороший посик, то используйте полнотекстовый поиск - смотрите мануал MySQL. 3) Лучше в скриптах использовать метод GET, а не POST (чтобы результаты поиска можно было давать в качестве ссылки). Странно, изменил в форме на 1-й странице метод , POST на GET теперь он мне пишет об ошибке запроса, может в коде скрипта тоже надо что-то изменить? Ссылка на комментарий Поделиться на другие сайты Поделиться
mjc66 Опубликовано 31 мая, 2007 Автор Жалоба Поделиться Опубликовано 31 мая, 2007 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". Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 31 мая, 2007 Жалоба Поделиться Опубликовано 31 мая, 2007 Странно, изменил в форме на 1-й странице метод , POST на GET теперь он мне пишет об ошибке запроса, может в коде скрипта тоже надо что-то изменить? Да, надо $_POST заменить на $_GET Ссылка на комментарий Поделиться на другие сайты Поделиться
mjc66 Опубликовано 31 мая, 2007 Автор Жалоба Поделиться Опубликовано 31 мая, 2007 Не совсем понял на счет структуры сайта, а что касается БД, то выглядит она следующим образом: одна таблица-"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 Поиск нормализовался, однако результат в виде ссылки не выводится Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 31 мая, 2007 Жалоба Поделиться Опубликовано 31 мая, 2007 Почему же? Вот, посмотри поиск Соли ( http://www.el-eko.ru/search.php?name=%F1%EE%EB%FC ) Это я и имел ввиду. Ссылка на комментарий Поделиться на другие сайты Поделиться
mjc66 Опубликовано 15 июня, 2007 Автор Жалоба Поделиться Опубликовано 15 июня, 2007 Почему же? Вот, посмотри поиск Соли ( 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 появляется таблица с результатом поиска: "Наименование товара", "Страница в каталоге", "Группа товаров", в колонке "Страница в каталоге" выводится ссылка "Найти на странице" которая ведет на ту страницу где находится выбранный товар, так вот нужно чтобы эта страница открывалась и показывала при помощи выделения каким-нибудь цветом тот самый выбранный товар. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти