Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Поиск в таблице mysql через формы+php

Ответить
Настройки темы
[решено] Поиск в таблице mysql через формы+php

Старожил


Сообщения: 252
Благодарности: 3

Профиль | Отправить PM | Цитировать


Создал форму где 13 форм типа text, каждая соответствует определённому сталбцу таблицы, форма применяет скрипт:

PHP код: Выделить весь код

<?php 

require_once "zashita.php";
require_once 
"bdconnect.php";
 
mysql_query("SET NAMES cp1251");
$sSQL="SELECT * FROM `dogovor`, `bank`, `periodichnost`, `sposob_oplati`, `sposob_peredachi`, `status`, `vid_billinga`, `vid_oplati` WHERE dogovor.bank_id=bank.id_bank and dogovor.periodichnost_id=periodichnost.id_periodichnost and dogovor.sposob_oplati_id=sposob_oplati.id_sposob_oplati and dogovor.sposob_peredachi_id=sposob_peredachi.id_sposob_peredachi and dogovor.status_id=status.id_status and dogovor.vid_billinga_id=vid_billinga.id_vid_billinga and dogovor.vid_oplati_id=vid_oplati.id_vid_oplati and dogovor.date_dog='$date_dog' and dogovor.n_dog LIKE '%$n_dog%' and dogovor.name_org LIKE '%$name_org%' and dogovor.komissia='$komissia' and dogovor.dop_sogl='$dop_sogl' and dogovor.inn='$inn' and dogovor.r_schet='$r_schet' and dogovor.boss='$boss' and dogovor.kontakt_l='$kontakt_l' and dogovor.kont_phone='$kont_phone' and dogovor.adres='$adres' and dogovor.primech='$primech' and dogovor.e_mail='$e_mail'";
$result=mysql_query($sSQL$link);
if (
mysql_num_rows($result) == 0) echo"Результат запроса : 0";else
if (
mysql_num_rows($result) > 0
while ( 
$myrow mysql_fetch_array($result) ):
?>

Дело в том что данный скрипт ни чего не хочет находить. Если мы оставим только одино значение например

PHP код: Выделить весь код

dogovor.n_dog LIKE '%$n_dog%' 


он работает, я подумал может нужно в место and нужно применить or т.е. "или" но он показывает в результате всю таблицу да и ещё одну строку несколько раз!
Знаю что если я сделаю банальный sql запрос он будет работать но как этот принцип применить в php?
Может стоит в одной странице сделать 13 форм с различным вариантом поиска, и пусть клиент сам решает что и где искать!? Это конечно выход, но....

Отправлено: 12:27, 11-05-2012

 

Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


В критерии WHERE у вас используется точное равенство. А в "рабочем" примере ниже вы используете Like т.е. похожее значение. И если вы используете логический and вы тоже должны понимать что если хоть одно сравнение будет faslse то результатом будет 0 строк.

Покажите пожалуйста одну строку из таблицы и конкретный пример который по-вашему должен вывести данную строку. Ну и что соответственно выводит если не то что вы хотели бы.

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 14:35, 11-05-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2478
Благодарности: 667

Профиль | Отправить PM | Цитировать


1. выведите текст ошибки echo mysql_error($link);
2. лучше выделить связку таблиц из условия (join)

Отправлено: 21:45, 11-05-2012 | #3


Старожил


Сообщения: 252
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Tonny_Bennet:
И если вы используете логический and вы тоже должны понимать что если хоть одно сравнение будет faslse то результатом будет 0 строк. »
Исходя из этого я так понимаю что в php требуется особым методом указать пустое поле формы!? но как?

Цитата Tonny_Bennet:
Покажите пожалуйста одну строку из таблицы и конкретный пример который по-вашему должен вывести данную строку. Ну и что соответственно выводит если не то что вы хотели бы. »
Он на данный момент ни чего не выводит! Если сделать только одно поле формы и в скрипте поиска указать только один параметр, он находит и показывает! Когда есть несколько и не известно в каком из них клиент пожелает искать, тут уже проблемы начались!

Цитата Sham:
выведите текст ошибки echo mysql_error($link); »
Ни чего кроме сообщении что результат 0.

Цитата Sham:
2. лучше выделить связку таблиц из условия (join) »
Не очень понял!

Отправлено: 23:05, 11-05-2012 | #4


Deadooshka


Сообщения: 2478
Благодарности: 667

Профиль | Отправить PM | Цитировать


2. http://dev.mysql.com/doc/refman/5.6/en/join.html
Цитата cibin:
может нужно в место and нужно применить or т.е. "или" »
группируйте в скобки как нужно "... and (... or ... or ...) and ..."
http://dev.mysql.com/doc/refman/5.6/...recedence.html

Отправлено: 01:01, 12-05-2012 | #5


Старожил


Сообщения: 252
Благодарности: 3

Профиль | Отправить PM | Цитировать


ааааааа т.е. запись подобного типа должно быть?

PHP код: Выделить весь код

<?php 
require_once "zashita.php";
require_once 
"bdconnect.php";
 
mysql_query("SET NAMES cp1251");
$sSQL="SELECT * FROM `dogovor`, `bank`, `periodichnost`, `sposob_oplati`, `sposob_peredachi`, `status`, `vid_billinga`, `vid_oplati` WHERE dogovor.bank_id=bank.id_bank and dogovor.periodichnost_id=periodichnost.id_periodichnost and dogovor.sposob_oplati_id=sposob_oplati.id_sposob_oplati and dogovor.sposob_peredachi_id=sposob_peredachi.id_sposob_peredachi and dogovor.status_id=status.id_status and dogovor.vid_billinga_id=vid_billinga.id_vid_billinga and dogovor.vid_oplati_id=vid_oplati.id_vid_oplati and (dogovor.date_dog LIKE '$date_dog' OR dogovor.n_dog LIKE '%$n_dog%' OR dogovor.name_org LIKE '%$name_org%' OR dogovor.komissia  LIKE '$komissia' OR dogovor.dop_sogl LIKE '$dop_sogl' OR dogovor.inn LIKE '$inn' OR dogovor.r_schet LIKE '$r_schet' OR dogovor.boss LIKE '$boss' OR dogovor.kontakt_l LIKE '$kontakt_l' OR dogovor.kont_phone LIKE '$kont_phone' OR dogovor.adres LIKE '$adres' OR dogovor.primech LIKE '$primech' OR dogovor.e_mail LIKE '$e_mail')";
$result=mysql_query($sSQL$link);
if (
mysql_num_rows($result) == 0) echo"Результат запроса : 0";else
if (
mysql_num_rows($result) > 0
while ( 
$myrow mysql_fetch_array($result) ):
?>


Отправлено: 09:32, 12-05-2012 | #6


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


Цитата cibin:
Исходя из этого я так понимаю что в php требуется особым методом указать пустое поле формы!? но как? »
Давайте на время отойдём от вашего примера и просто посмотрим как сделать правильный запрос с пустыми полями.

Пусть у вас есть таблица с тремя полями Name, Sername, Country. И есть форма также с тремя полями, которые, к примеру, через массив $_GET возвращают значения $_GET['name'], $_GET['sername'], $_GET['country'].

Формируя запрос типа $query = "SELECT * FROM table" вы должны проверять не является ли пустым поле, которое ввёл пользователь. Что-то вроде

Код: Выделить весь код
$query = "SELECT * FROM table WHERE "

if ($_GET['country'] != "")
{
$query = $query." AND Country = $_GET['country']"
}
Т.е. если переменная $_GET['country'] не пустая, то к запросу добавится часть, содержащая условие равенства страны. И так нужно сделать для каждой переменной, постепенно формируя свой запрос.

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:15, 12-05-2012 | #7


Старожил


Сообщения: 252
Благодарности: 3

Профиль | Отправить PM | Цитировать


Я правильно понял что после скрипта запроса select требуеться условием ввести проверку

PHP код: Выделить весь код

if ($_GET['country'] != "")
{
$query $query." AND Country = $_GET['country']"


для каждого значение.

Если читать код то получится что идёт отбор (SELECT) дальше проверка на пустоту формы, дальше выводим результат!
Я всё правильно понял?

Отправлено: 14:08, 12-05-2012 | #8


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


Цитата cibin:
Если читать код то получится что идёт отбор (SELECT) дальше проверка на пустоту формы, дальше выводим результат!
Я всё правильно понял? »
Наверное не очень. Оператор "." (точка) в PHP служит для объединения строк.

К примеру часть кода

Код: Выделить весь код
$a = "Hello "
$b = "world!"

$c = $a.$b

echo $c

В переменной $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". И на основе несложных выражений формулировать запрос. Для проверки его можно просто выводить на страничке.

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:46, 12-05-2012 | #9


Старожил


Сообщения: 252
Благодарности: 3

Профиль | Отправить PM | Цитировать


Я только хотел было написать что я написал таким образом:

PHP код: Выделить весь код

<?php 
require_once "zashita.php";
require_once 
"bdconnect.php";

mysql_query("SET NAMES cp1251");
$sSQL="SELECT * FROM `dogovor`, `bank`, `periodichnost`, `sposob_oplati`, `sposob_peredachi`, `status`, `vid_billinga`, `vid_oplati` WHERE dogovor.bank_id=bank.id_bank and dogovor.periodichnost_id=periodichnost.id_periodichnost and dogovor.sposob_oplati_id=sposob_oplati.id_sposob_oplati and dogovor.sposob_peredachi_id=sposob_peredachi.id_sposob_peredachi and dogovor.status_id=status.id_status and dogovor.vid_billinga_id=vid_billinga.id_vid_billinga and dogovor.vid_oplati_id=vid_oplati.id_vid_oplati and dogovor.date_dog='$date_dog' and dogovor.n_dog LIKE '%$n_dog%' and dogovor.name_org LIKE '%$name_org%' and dogovor.komissia LIKE '$komissia' and dogovor.dop_sogl LIKE '$dop_sogl' and dogovor.inn LIKE '$inn' and dogovor.r_schet LIKE '$r_schet' and dogovor.boss LIKE '$boss' and dogovor.kontakt_l LIKE '$kontakt_l' and dogovor.kont_phone LIKE '$kont_phone' and dogovor.adres LIKE '$adres' and dogovor.primech LIKE '$primech' and dogovor.e_mail LIKE '$e_mail'";


if (
$_GET['date_dog'] != "")
{
    
$sSQL $sSQL."AND date_dog = $_GET['date_dog']"
}

if (
$_GET['n_dog'] != "")
{
    
$sSQL $sSQL."AND n_dog = $_GET['n_dog']"
}

if (
$_GET['name_org'] != "")
{
    
$sSQL $sSQL."AND name_org = $_GET['name_org']"
}
.....

//а дальше...

$result=mysql_query($sSQL$link);
if (
mysql_num_rows($result) == 0) echo"Результат запроса : 0";else
if (
mysql_num_rows($result) > 0
while ( 
$myrow mysql_fetch_array($result) ):

Но он выдаёт синтаксическую ошибку!
Я уж думал что я опять не так понял!

Отправлено: 14:51, 12-05-2012 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Поиск в таблице mysql через формы+php

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Поиск одинаковых значений в одной таблице MySQL blackmane Вебмастеру 1 01-04-2012 14:27
Поиск заданного текста в коде формы с периодическим её обновлением. BAORope AutoIt 0 30-03-2012 19:52
MSFT SQL Server - Поиск пустого поля в таблице rivera Программирование и базы данных 2 05-07-2011 11:04
Выборочная загрузка и выгрузка данных из формы в таблицу MySQL dima1981 Вебмастеру 8 25-08-2008 18:02
Поиск в MySQL LEXX2002 Вебмастеру 15 09-10-2004 01:04




 
Переход