Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подскажите скрипт поиска по MySQL
 
 автор: netas   (30.11.2009 в 02:19)   письмо автору
 
 

Помогите с нормальным рабочим скриптом для поиска на сайте по базе. Столько перелопатил - то старьё, то глюки, уж замучился. Спасибо.

  Ответить  
 
 автор: cheops   (30.11.2009 в 12:27)   письмо автору
 
   для: netas   (30.11.2009 в 02:19)
 

Поиск на MySQL обычно затачивается под конкретные таблицы, не существует универсального скрипта, анализирующего все таблицы базы данных.

  Ответить  
 
 автор: netas   (30.11.2009 в 15:10)   письмо автору
 
   для: cheops   (30.11.2009 в 12:27)
 

Хорошо, есть таблица code, в ней поля, где нужно искать: area (область) и town (город). То есть при запросе, например "Новомосковск", выдавался бы весь список Новомосковсков из разных областей. Ну как-то так. С чего начать написание такого скрипта? Спасибо.

  Ответить  
 
 автор: ~AquaZ~   (30.11.2009 в 18:46)   письмо автору
 
   для: netas   (30.11.2009 в 15:10)
 

<?php $query addslashes($query);
$res mysql_query("SELECT `area`,`town`,`...`,`...` WHERE `area` LIKE '%{$query}%' or `town` LIKE '%{$query}%'");

  Ответить  
 
 автор: netas   (30.11.2009 в 20:14)   письмо автору
 
   для: ~AquaZ~   (30.11.2009 в 18:46)
 

Уважаемый AquaZ, вот составил такой запрос:

<?php 
$query 
addslashes($query); 
$result mysql_query("SELECT 'area','town' WHERE 'area' LIKE '%{$query}%' or 'town' LIKE '%{$query}%'");
do {
printf ("<table width='100%%' border='0' cellpadding='0' cellspacing='2'>
              <tr>
              <td><p>%s</p></td>
              <td><p>%s</p></td>
              <td><p>%s</p></td>
              </tr>
              </table>"
$myrow ['town'], $myrow['area'], $myrow ['code']);}
while (
$myrow mysql_fetch_array ($result));
?>


но выдаёт ошибку:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/kompascl/public_html/businfo.com.ua/test/search_test.php on line 49

Что-то не так в строке

while ($myrow = mysql_fetch_array ($result));


Что именно?

  Ответить  
 
 автор: netas   (30.11.2009 в 22:31)   письмо автору
 
   для: netas   (30.11.2009 в 20:14)
 

Подредактировал файл, стало так:

<?php $query addslashes($query); 
      
$result mysql_query("SELECT 'area','town' WHERE 'area' LIKE '%{$query}%' or 'town' LIKE '%{$query}%'");
      
      if (!
$result)
      
      { echo 
"Запрос не прошёл";
      exit(
mysql_error());
      }
      if (
mysql_num_rows($result)>0)
      {      
      
$myrow mysql_fetch_array($result);
do {
printf ("<table width='100%%' border='0' cellpadding='0' cellspacing='2'>
                                                                <tr>
             <td><p>%s</p></td>
             <td><p>%s</p></td>
             <td><p>%s</p></td>
             </tr>
                          
             </table>"
$myrow ['town'], $myrow['area'], $myrow ['code']);}
while (
$myrow mysql_fetch_array ($result));
}

?>


Теперь ошибка:

Запрос не прошёлYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE area LIKE %% or town LIKE %%' at line 1

В чём проблема? Спасибо.

  Ответить  
 
 автор: Rustamich   (02.12.2009 в 07:43)   письмо автору
 
   для: netas   (30.11.2009 в 22:31)
 

В запросе не указано с какой таблицы Вы выборку производите, т.е где FROM ...?

  Ответить  
 
 автор: netas   (03.12.2009 в 00:23)   письмо автору
13.9 Кб
 
   для: Rustamich   (02.12.2009 в 07:43)
 

Поправил:

<?php 
include("../blocks/bd.php"); 
  
if (isset(
$_GET['id'])) {$id $_GET['id'];}
if (isset(
$_POST['submit_s'])) {$submit_s $_POST['submit_s'];}
if (isset(
$_POST['search'])) {$search $_POST['search'];}
if (isset(
$_GET['submit_s'])) {$submit_s $_GET['submit_s'];}
if (isset(
$_GET['search'])) {$search $_GET['search'];}

if (isset(
$submit_s))
{
if (empty(
$search) or strlen($search) < 4)
{
exit (
"<p>Запрос не введён, либо он меньше 4-х символов</p>");
}
$search trim($search);
$search stripslashes($search);
$search htmlspecialchars($search);
$search preg_replace('~([^\d].)\1\1~is',''$search);
}
else
{
exit (
"<p>Вы обратились к файлу без необходимых параметров</p>");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><? echo "Информация по запросу - $search";?></title>

</head>

<body>

      <?php $query addslashes($query);  
      
$result mysql_query("SELECT 'area','town' FROM code WHERE 'area' LIKE '%{$query}%' or 'town' LIKE '%{$query}%'"); 
       
      if (!
$result
       
      { echo 
"Запрос не прошёл"
      exit(
mysql_error()); 
      } 
      if (
mysql_num_rows($result)>0
      {       
      
$myrow mysql_fetch_array($result); 
do {
printf ("<table width='100%%' border='0' cellpadding='0' cellspacing='2'> 
                                                                <tr> 
             <td><p>%s</p></td> 
             <td><p>%s</p></td> 
             <td><p>%s</p></td> 
             </tr> 
                           
             </table>"
$myrow ['town'], $myrow['area'], $myrow ['code']);} 
while (
$myrow mysql_fetch_array ($result)); 


?> 

</body>
</html>


Теперь выводится вот что (см. файл)

  Ответить  
 
 автор: Trianon   (03.12.2009 в 01:54)   письмо автору
 
   для: netas   (03.12.2009 в 00:23)
 

теперь посмотрите что Вам в запросе SELECT написал ~AquaZ~
и что написали Вы.

  Ответить  
 
 автор: netas   (05.12.2009 в 00:34)   письмо автору
 
   для: Trianon   (03.12.2009 в 01:54)
 

Неправильные кавычки? Сделал такие как у Aquaz, но теперь по любому запросу, например, Киев, выводит весь список городов по алфавиту. Форма вот здесь: http://businfo.com.ua/test/search_form_test.php

  Ответить  
 
 автор: Trianon   (05.12.2009 в 00:38)   письмо автору
 
   для: netas   (05.12.2009 в 00:34)
 

Я не нашел, где у Вас в скрипте присваивается переменная $query.
Запрос оказывается с открытым условием.

  Ответить  
 
 автор: netas   (05.12.2009 в 00:45)   письмо автору
 
   для: Trianon   (05.12.2009 в 00:38)
 

А где и как её присвоить? Я пока, как говорится, только учусь.

  Ответить  
 
 автор: Trianon   (05.12.2009 в 00:51)   письмо автору
 
   для: netas   (05.12.2009 в 00:45)
 

по какому учебнику, если не секрет?

  Ответить  
 
 автор: netas   (05.12.2009 в 00:56)   письмо автору
 
   для: Trianon   (05.12.2009 в 00:51)
 

Как тут уже упомянули по видеокурсу:) А всё же по теме...

  Ответить  
 
 автор: Trianon   (05.12.2009 в 01:08)   письмо автору
 
   для: netas   (05.12.2009 в 00:56)
 

Учите язык. Вернее оба используемых языка.
Видеокурс можете выкинуть.
Тут кстати уже упомянули...

  Ответить  
 
 автор: toproot   (10.12.2009 в 17:34)   письмо автору
 
   для: Trianon   (05.12.2009 в 01:08)
 

$query = "SELECT * FROM `bilets` WHERE 'what' LIKE '%{$search}%' or 'result' LIKE '%{$search}%';";

Оно у меня ищет только с начала строки. Тоесть если what = "how do you.." и $search = "how" тогда ищет , а если $search = "do you" - не ищет. А дайте запрос чтоб искало плиз!

  Ответить  
 
 автор: Trianon   (10.12.2009 в 18:44)   письмо автору
 
   для: toproot   (10.12.2009 в 17:34)
 

а если $search = "do" - тоже не ищет? Верится с трудом.

  Ответить  
 
 автор: toproot   (10.12.2009 в 21:16)   письмо автору
 
   для: Trianon   (10.12.2009 в 18:44)
 

Не понял, так what и result ето не поля ? Я ввожу в поиске what - выбивает все значения, то же и с result.
как это понять ? я так понимаю мой запрос ИЗВЛЕКАЕТ ВСЕ ИЗ `bilets` ПРИ УСЛОВИИ ЧТО ЗНАЧЕНИЕ ПОЛЯ what ПОХОЖЕ НА $search ИЛИ ЗНАЧЕНИЕ ПОЛЯ result ПОХОЖЕ НА $search. Разве не так ?
почему работает только эсли $search = what или $search = result ?

  Ответить  
 
 автор: Trianon   (10.12.2009 в 21:19)   письмо автору
 
   для: toproot   (10.12.2009 в 21:16)
 

А ... ну да, конечно.
'what' и 'result' это не поля, а значения.
поля будут `такие`

И вообще-то об этом я Вам еще неделю назад сказал.

  Ответить  
 
 автор: toproot   (10.12.2009 в 21:23)   письмо автору
 
   для: Trianon   (10.12.2009 в 21:19)
 

поменял кавычки, отлично, то что нужно, благодарю.

  Ответить  
 
 автор: ~AquaZ~   (23.12.2009 в 17:30)   письмо автору
 
   для: netas   (03.12.2009 в 00:23)
 

По стилю программирования видно, что аффтар видеокурса - гражданин Е. Попов. Я по его курсам учился - он ни слова не сказал о безопасности; таких сайтов нахакано...
[цитата]
Я написал сайт по курсам и на следующий день в корневой директории не оказалось ни одного файла...
[конец цитаты]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования