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
Форумы портала PHP.SU » PHP » Программирование на PHP » Поиск PHP

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

1. Funtik44 - 15 Сентября, 2010 - 11:38:38 - перейти к сообщению
Всем привет.

Ребят, подскажите пожалуйста, у меня есть скриптик, который осуществляет поиск по базе и потом эта информация выводится в тело сайта:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php include ("config.php");
  2. $search = mysql_real_escape_string($_POST['search']);
  3. $res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%".$_POST['search']."%'", $db);
  4. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  5. $myrow = mysql_fetch_array($res);
  6. ?>


С ним возникли следующие проблеммы:

1. В Mozill'e, Chrome и Oper'e скрипт поиска не отрабатывает (хотя в IE всё идеально).
2. В Mozill'e, Chrome и Oper'e сайт не работает если я перехожу по прямому адресу (http://site.ru), если же открываю локальный адрес (file:///W:/home/site.ru/www/index.php), то все работает (за исключением поиска). И еще в Chrome при переходе на страницу со скриптом, он открывает не страницу, а код отображает на экране. Не понял


Это все, у меня работает на Denwer'e.
2. garvey - 15 Сентября, 2010 - 11:41:52 - перейти к сообщению
Видно что-то у вас с настройкой локального сервера. Хотя не могу сказать точно, слишком мало информации. Но проблема уж точно не в приведенном коде.
3. Funtik44 - 15 Сентября, 2010 - 11:47:54 - перейти к сообщению
Просто я ставил Denwer, а потом даже ничего не изменял в настройках. Вы считаете, что код написан приемлемо, да?

Тогда буду разбираться с настройками, а пока задам еще один вопрос. У меня страница на сайте, где собственно и находится данный поиск. Пользователь вводит название объекта, далее в базе ищется информация по этому объекту и выводится на экран. Необходимо, чтобы совместно с этой информацией искались еще и связанные с этим объектом картинки и выводились в тело.

1. Как быть с картинками, лучше (с точки зрения быстродействия) их хранить в обычной папке внутри сайта и подгружать от туда?
2. Как это реализовать с точки зрения кода php и связать с уже существующим поиском? С чего мне начать?
4. garvey - 15 Сентября, 2010 - 11:56:26 - перейти к сообщению
Я не говорил, что код приемлемый. Но в нем нет ошибок, которые будут приводить к неработоспособности.

Картинки храните в папке с названиями image$Id.ext. В таблице есть поле Id. Поиском находим какую-то запись, берем ее Id и вытягиваем картинку с этим Id, если она есть.
5. Funtik44 - 15 Сентября, 2010 - 12:16:32 - перейти к сообщению
А Вы не могли бы пример кода написать?
6. JustUserR - 15 Сентября, 2010 - 12:21:27 - перейти к сообщению
Funtik44 Работа серверного PHP-скрипта не должна зависеть от используемого браузера на клиентской стороне - и если вы получаете различных результаты в разных user-agent-ах то это свидетельствует скорее всего о наличии кеширования либо настройках по умолчанию - в частност следует явно указывать в формах параметр action с виртуальным путем к серверному PHP-скрипту Кроме того при использовании значения из пользовательского ввода в LIKE-операторе - необходимо произвести его предварительное двойное экрнирование согласно уровню вложенности в строку и спецсимволам действующим в операторе
7. Funtik44 - 15 Сентября, 2010 - 12:41:58 - перейти к сообщению
Цитата:
с виртуальным путем к серверному PHP-скрипту


<form action="http:\\site.ru\page2.php" method=post> это имеется ввиду?

И Вы не могли бы пояснить, что значит "предварительное двойное экрнирование"?
8. JustUserR - 15 Сентября, 2010 - 12:46:22 - перейти к сообщению
Funtik44 пишет:
А Вы не могли бы пример кода написать?
В качестве простого механизма для защиты вашего SQL-запроса от неправильно введенной пользователем информации - которая может привести к SQL-инхекции или неправильной трактовки запроса - можно использовать такой PHP-код
PHP:
скопировать код в буфер обмена
  1. $search = mysql_real_escape_string($_POST['search']);
  2. $search = str_replace("?","\?",str_replace("%","\%",$search))
  3. $res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%$search%'", $db);
9. Funtik44 - 15 Сентября, 2010 - 12:54:55 - перейти к сообщению
Ругается на эту строку:

Цитата:
$res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%$search%'", $db);


Ругань:

Parse error: syntax error, unexpected T_VARIABLE in W:\home\site.ru\www\page2.php on line 4
10. AdMeen - 15 Сентября, 2010 - 13:06:19 - перейти к сообщению
Если учесть что любой браузер представляет собой лишь клиент, который обменивается с сервером по протоколу HTTP, а протокол как вы понимаете одинаков для всех, тут нет никаких расхождений. То проблема может быть на стороне сервера, что мало вероятно, так как ИЕ все таки получает ответ, или на стороне клиента при обработке вывода, который вы нам не показали.
(Добавление)
Funtik44 пишет:
Ругается на эту строку:


да уж... вас видимо забанило на гугле? вы используете неизвестную переменную в строке

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  $res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%$search%'", $db);
  3.  
11. Funtik44 - 15 Сентября, 2010 - 13:10:31 - перейти к сообщению
AdMeen пишет:
Если учесть что любой браузер представляет собой лишь клиент, который обменивается с сервером по протоколу HTTP, а протокол как вы понимаете одинаков для всех, тут нет никаких расхождений. То проблема может быть на стороне сервера, что мало вероятно, так как ИЕ все таки получает ответ, или на стороне клиента при обработке вывода, который вы нам не показали.


Вывод следующий:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <form action="" method=post>
  2. <input id="inputtext" type="text" name="search">
  3. <input id="inputbut" type="image" src="images/search.gif" name="submit">
  4. </form>
12. AdMeen - 15 Сентября, 2010 - 13:12:18 - перейти к сообщению
Funtik44 пишет:

Вывод следующий:



Пардон, где же тут вывод результатов поиска?
13. Funtik44 - 15 Сентября, 2010 - 13:21:22 - перейти к сообщению
AdMeen пишет:
Пардон, где же тут вывод результатов поиска?


Извиняюсь, промазал.

Вот код:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php include ("config.php");
  2. $search = mysql_real_escape_string($_POST['search']);
  3. $res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%".$_POST['search']."%'", $db);
  4. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  5. $myrow = mysql_fetch_array($res);
  6. ?>


Вот вывод результатов:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <p class="placename"><b><? echo $myrow["placename"];?></b></p>
  2. <p class="zagolovok"><b>ОПИСАНИЕ:</b></p>
  3. <p class="centertext"><b><? echo $myrow["description"];?></b></p>

(Добавление)
Если я в этот код добавляю вместо:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $search = mysql_real_escape_string($_POST['search']);
  2. $res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%".$_POST['search']."%'", $db);


Строки, приведенные в примере JustUser, получается следующий код, который не работает:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php include ("config.php");
  2. $search = mysql_real_escape_string($_POST['search']);
  3. $search = str_replace("?","\?",str_replace("%","\%",$search))
  4. $res = mysql_query("SELECT `id`,`placename`,`description` from `places` where `description` like '%$search%'", $db);
  5. if (!$res) {echo "Запрос не прошел."; exit(mysql_error());}
  6. $myrow = mysql_fetch_array($res);
  7. ?>

(Добавление)
garvey пишет:
Картинки храните в папке с названиями image$Id.ext. В таблице есть поле Id. Поиском находим какую-то запись, берем ее Id и вытягиваем картинку с этим Id, если она есть.


Вы не могли бы привести пример кода, как это выглядит?
14. JustUserR - 16 Сентября, 2010 - 15:14:58 - перейти к сообщению
Funtik44 пишет:
Строки, приведенные в примере JustUser, получается следующий код, который не работает:
Приведенный вариант PHP-скрипта в котором входящая от пользователя информация для поиска подвергается двукратному экранированию по вышеуказанной схеме является логически коректным - тем не менее конкретно во второй строке отсутствет оперетор точка с запятой и также возможно система интерполяции переменных просит заключть ее имя в фигурные скобки на стыке спецсимволов

 

Powered by ExBB FM 1.0 RC1