Поиск в таблице mysql через формы+php
Создал форму где 13 форм типа text, каждая соответствует определённому сталбцу таблицы, форма применяет скрипт:
PHP код:
PHP код:
Знаю что если я сделаю банальный sql запрос он будет работать но как этот принцип применить в php? Может стоит в одной странице сделать 13 форм с различным вариантом поиска, и пусть клиент сам решает что и где искать!? Это конечно выход, но.... |
В критерии WHERE у вас используется точное равенство. А в "рабочем" примере ниже вы используете Like т.е. похожее значение. И если вы используете логический and вы тоже должны понимать что если хоть одно сравнение будет faslse то результатом будет 0 строк.
Покажите пожалуйста одну строку из таблицы и конкретный пример который по-вашему должен вывести данную строку. Ну и что соответственно выводит если не то что вы хотели бы. |
1. выведите текст ошибки echo mysql_error($link);
2. лучше выделить связку таблиц из условия (join) |
Цитата:
Цитата:
Цитата:
Цитата:
|
2. http://dev.mysql.com/doc/refman/5.6/en/join.html
Цитата:
http://dev.mysql.com/doc/refman/5.6/...recedence.html |
ааааааа т.е. запись подобного типа должно быть?
PHP код:
|
Цитата:
Пусть у вас есть таблица с тремя полями Name, Sername, Country. И есть форма также с тремя полями, которые, к примеру, через массив $_GET возвращают значения $_GET['name'], $_GET['sername'], $_GET['country']. Формируя запрос типа $query = "SELECT * FROM table" вы должны проверять не является ли пустым поле, которое ввёл пользователь. Что-то вроде Код:
$query = "SELECT * FROM table WHERE " |
Я правильно понял что после скрипта запроса select требуеться условием ввести проверку
PHP код:
Если читать код то получится что идёт отбор (SELECT) дальше проверка на пустоту формы, дальше выводим результат! Я всё правильно понял? |
Цитата:
К примеру часть кода Код:
$a = "Hello " В переменной $a слово Hello в переменной $b слово world!. А в переменной $c содержится строка объединенная из этих двух сток т.е. "Hello world!". Вот так и в примере, который я описал. Сначала в переменной $query есть начало запроса: $query = "SELECT * FROM table WHERE ". А потом если поле $_GET['country'] не пустое то мы к переменной $query добавляем строку, содержащую условие " AND Country = $_GET['country']" и запрос становится длиннее. "SELECT * FROM table WHERE AND Country = $_GET['country'] " Но как видно я тут допустил ошибку: после where идёт слово AND и нам MySQL скажет, что это неправильно. В общем нужно продумать логику обработки пустых полей, создать флаг, отвечающий за то было ли выбрано предыдущее поле и по нему ориентироваться ставить ли "AND". И на основе несложных выражений формулировать запрос. Для проверки его можно просто выводить на страничке. |
Я только хотел было написать что я написал таким образом:
PHP код:
Я уж думал что я опять не так понял! |
Цитата:
|
Выдаёт syntax error, unexpected '"' in
|
Цитата:
+ обязательно делайте везде mysql_real_escape_string |
Цитата:
PHP код:
Я скорее всего где что то не так на мудрил!? |
Цитата:
|
Я уже хочу сдаться и сделать для каждого поле вода отдельную форму и и скрипт поиска!
Так я правильно понимаю что принцип должен быть таков что форма отправляет запрос на скрипт в скрипте сперва должна проверяться наличие символов при помощи $_GET потом только выполнять SELECT? Или я что-то не так понял!? |
http://docs.php.net/manual/ru/functi...ape-string.php - тут почитайте что-ли
|
Спасибо за ссылку, не знаю правильно я там всё понял но в результате у меня получилось так:
PHP код:
2) Дальше происходит так что выдаёт ошибку браузера "Память не может быть "read"". Тут же закралось сомнение что я не так отразил mysql_real_escape_string |
Цитата:
PHP код:
там вместо переменных должны быть описатели (%s) и все обычные знаки % должны быть %% ( вместо LIKE '%$name_org%' будет LIKE '%%%s%%' ). |
Спасибо за совет!
а как на счёт 2-го вопроса? Как его решить? |
хз, это глюк браузера. Проверяйте на браузере без плагинов, очистите кэш или переустановите браузер.
|
Цитата:
После применение вашего совета ошибка ушла! Но результата не принёс, результатом поиска 0. Хорошо хоть ошибки нет! На данный момент используя Ваш ценный совет получилась вот токая комбинация: PHP код:
Ввожу в поле $name_org %текст поиска% он выдаёт результат 0, хотя я знаю что там токая запись есть! |
Цитата:
В этой идеи есть смысл, с одним но! Скорее всего примерно так нужно: PHP код:
PHP код:
|
|
такая запись правильная?
PHP код:
Если я уберу PHP код:
PHP код:
И ещё убираю запятую выдаёт в строке запроса синтаксическую ошибку! |
У вас непонятно, зачем используется sprintf. В строке вместо переменных php дб описатели (%s) (выше писал уже).
Тогда вставляйте mysql_real_escape_string в строку запроса, без функции sprintf (см. конкатенация в PHP). |
я извиняюсь выглядит на самом деле так:
PHP код:
На данный момент вышел из ситуации путём создания для каждой формы поиска отдельный поиск! Всё работает, но на будущее надеюсь понять как сделать поиск по нескольким полям сразу! |
все mysql_real_escape_string перенесите в строку запроса
например было так Код:
and dogovor.date_dog='$date_dog' and dogovor.n_dog LIKE '%$n_dog%' Код:
and dogovor.date_dog='" . mysql_real_escape_string($date_dog) . "' and dogovor.n_dog LIKE '%" . mysql_real_escape_string($n_dog) . "%' |
echo выдало это
PHP код:
|
проверьте атрибут формы method (get/post) т.е. $_GET/$_POST
вообще, строка условий запроса должна формироваться динамически, пустые значения нельзя вставлять. например PHP код:
|
Я уже запутался и жалею что решил это сделать!
|
У меня получилось вот что:
PHP код:
1) проверяет и принимает без проблем строку поиска, в каждом. 2) проверил массив, он работает ибо в каждом отражается строка которую вводили. 3) А вот дальше уже выводит вот что, при echo "$sSQL"; в случаи когда вводили текст выводит запрос в виде (не имеет значение в каком из форм вводил): PHP код:
Что не так? |
На одном сайт нашел такую вещь:
settype($someVar, "string") // переопределяем тип данных на строковый Вопрос правильно ли будет вписать подобное в проверку? |
Вопрос решён спасибо!!
|
Время: 03:37. |
Время: 03:37.
© OSzone.net 2001-