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

Компьютерный форум 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

 

Deadooshka


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

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


хз, это глюк браузера. Проверяйте на браузере без плагинов, очистите кэш или переустановите браузер.

Отправлено: 07:21, 15-05-2012 | #21



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

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


Старожил


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

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


Цитата Sham:
так лучше и правильней
PHP код:
$date_dog = isset($_GET['date_dog']) ? $_GET['date_dog'] : ''; »


После применение вашего совета ошибка ушла! Но результата не принёс, результатом поиска 0. Хорошо хоть ошибки нет!

На данный момент используя Ваш ценный совет получилась вот токая комбинация:

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

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

$date_dog = isset($_GET['date_dog']) ? $_GET['date_dog'] : '';
$n_dog = isset($_GET['n_dog']) ? $_GET['n_dog'] : '';
$name_org = isset($_GET['name_org']) ? $_GET['name_org'] : '';
$komissia = isset($_GET['komissia']) ? $_GET['komissia'] : '';
$dop_sogl = isset($_GET['dop_sogl']) ? $_GET['dop_sogl'] : '';
$inn = isset($_GET['inn']) ? $_GET['inn'] : '';
$r_schet = isset($_GET['r_schet']) ? $_GET['r_schet'] : '';
$boss = isset($_GET['boss']) ? $_GET['boss'] : '';
$kontakt_l = isset($_GET['kontakt_l']) ? $_GET['kontakt_l'] : '';
$kont_phone = isset($_GET['kont_phone']) ? $_GET['kont_phone'] : '';
$adres = isset($_GET['adres']) ? $_GET['adres'] : '';
$primech = isset($_GET['primech']) ? $_GET['primech'] : '';
$e_mail = isset($_GET['e_mail']) ? $_GET['e_mail'] : '';


mysql_query("SET NAMES cp1251");
$sSQL=sprintf("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 LIKE '%$dop_sogl%' and dogovor.inn = '$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%'"mysql_real_escape_string($date_dog), mysql_real_escape_string($n_dog), mysql_real_escape_string($name_org), mysql_real_escape_string($komissia), mysql_real_escape_string($dop_sogl), mysql_real_escape_string($inn), mysql_real_escape_string($r_schet), mysql_real_escape_string($boss), mysql_real_escape_string($kontakt_l), mysql_real_escape_string($kont_phone), mysql_real_escape_string($adres), mysql_real_escape_string($primech), mysql_real_escape_string($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) ):
?>

$date_dog, $komissia и $inn сделал не LIKE а = дело в том что они в основном числовые в котором будет требовать указание полной информации. Может повлияло!
Ввожу в поле $name_org %текст поиска% он выдаёт результат 0, хотя я знаю что там токая запись есть!

Отправлено: 09:36, 15-05-2012 | #22


Старожил


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

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


Цитата Tonny_Bennet:
$query = "SELECT * FROM table WHERE " if ($_GET['country'] != "") { $query = $query." AND Country = $_GET['country']" } »

В этой идеи есть смысл, с одним но!

Скорее всего примерно так нужно:

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

if ($_GET['date_dog'] != "")
{
    
$t "AND dogovor.date_dog = $_GET['date_dog']"


Дальше в селекте будет скорее всего так:

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 $t;

echo "
$sSQL";

$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) ): 

Т.е. теоретически получается так что если в форме есть запись то в селект вписывает AND date_dog = $_GET['date_dog'], но вот беда, не работает и я понимаю дело в том что сделав echo "$sSQL"; я увидел что он данный текст не подставляет! Но почему?

Последний раз редактировалось cibin, 16-05-2012 в 09:22.


Отправлено: 09:13, 16-05-2012 | #23


Deadooshka


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

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


Цитата cibin:
= $_GET['date_dog']" »
ошибка строковой переменной (я писал выше)
Цитата cibin:
dogovor.vid_oplati_id=vid_oplati.id_vid_oplati $t; »
кавычку добавьте (не видно что-ли раскраска кода нарушена).

Отправлено: 05:32, 17-05-2012 | #24


Старожил


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

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


такая запись правильная?

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

mysql_query("SET NAMES cp1251");

$sSQL=sprintf("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 LIKE '$dop_sogl' and dogovor.inn = '$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'"mysql_real_escape_string($date_dog), mysql_real_escape_string($n_dog), mysql_real_escape_string($name_org), mysql_real_escape_string($komissia), mysql_real_escape_string($dop_sogl), mysql_real_escape_string($inn), mysql_real_escape_string($r_schet), mysql_real_escape_string($boss), mysql_real_escape_string($kontakt_l), mysql_real_escape_string($kont_phone), mysql_real_escape_string($adres), mysql_real_escape_string($primech), mysql_real_escape_string($e_mail)); 

Дело в том что у меня ругаеться именно здесь и ругается на запятую хотя писал согласно примеру как тут описано http://docs.php.net/manual/ru/functi...ape-string.php
Если я уберу
PHP код: Выделить весь код

mysql_real_escape_string($date_dog), mysql_real_escape_string($n_dog), mysql_real_escape_string($name_org), mysql_real_escape_string($komissia), mysql_real_escape_string($dop_sogl), mysql_real_escape_string($inn), mysql_real_escape_string($r_schet), mysql_real_escape_string($boss), mysql_real_escape_string($kontakt_l), mysql_real_escape_string($kont_phone), mysql_real_escape_string($adres), mysql_real_escape_string($primech), mysql_real_escape_string($e_mail)) 


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

echo "$sSQL"

Выдаёт весь запрос но с пустыми полями, т.е. из формы информация не передаётся!

И ещё убираю запятую выдаёт в строке запроса синтаксическую ошибку!

Отправлено: 09:40, 17-05-2012 | #25


Deadooshka


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

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


У вас непонятно, зачем используется sprintf. В строке вместо переменных php дб описатели (%s) (выше писал уже).
Тогда вставляйте mysql_real_escape_string в строку запроса, без функции sprintf (см. конкатенация в PHP).

Отправлено: 10:13, 17-05-2012 | #26


Старожил


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

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


я извиняюсь выглядит на самом деле так:

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 LIKE '$dop_sogl' and dogovor.inn = '$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'"mysql_real_escape_string($date_dog), mysql_real_escape_string($n_dog), mysql_real_escape_string($name_org), mysql_real_escape_string($komissia), mysql_real_escape_string($dop_sogl), mysql_real_escape_string($inn), mysql_real_escape_string($r_schet), mysql_real_escape_string($boss), mysql_real_escape_string($kontakt_l), mysql_real_escape_string($kont_phone), mysql_real_escape_string($adres), mysql_real_escape_string($primech), mysql_real_escape_string($e_mail); 

Вы действительно говорили и я прислушался! Код копировал с предыдущих моих сообщений!

На данный момент вышел из ситуации путём создания для каждой формы поиска отдельный поиск! Всё работает, но на будущее надеюсь понять как сделать поиск по нескольким полям сразу!

Отправлено: 10:54, 17-05-2012 | #27


Deadooshka


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

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


все 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) . "%'
а то sprintf убрали, а параметры оставили.
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:41, 18-05-2012 | #28


Старожил


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

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


echo выдало это

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

SELECT FROM `dogovor`, `bank`, `periodichnost`, `sposob_oplati`, `sposob_peredachi`, `status`, `vid_billinga`, `vid_oplatiWHERE 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='' and dogovor.n_dog LIKE '%%' and dogovor.name_org LIKE '%%' and dogovor.komissia '' and dogovor.dop_sogl LIKE '%%' and dogovor.inn '' and dogovor.r_schet LIKE '%$%' and dogovor.boss LIKE '%%' and dogovor.kontakt_l LIKE '%%' and dogovor.kont_phone LIKE '%%' and dogovor.adres LIKE '%%' and dogovor.primech LIKE '%%' and dogovor.e_mail LIKE '%%'Результат запроса 

и это даёт в каком бы поле не вводил текст поиска. Т.е. он сам текст не передаёт в запрос!

Отправлено: 09:15, 18-05-2012 | #29


Deadooshka


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

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


проверьте атрибут формы method (get/post) т.е. $_GET/$_POST

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

$var = !empty($date_dog) ? " and dogovor.date_dog='" mysql_real_escape_string($date_dog) . "'" ''

и в строку запроса вставляете уже $var вместо этого условия.

Отправлено: 10:39, 18-05-2012 | #30



Компьютерный форум 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




 
Переход