Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Поиск в таблице mysql через формы+php (http://forum.oszone.net/showthread.php?t=234428)

cibin 11-05-2012 12:27 1913931

Поиск в таблице mysql через формы+php
 
Создал форму где 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 форм с различным вариантом поиска, и пусть клиент сам решает что и где искать!? Это конечно выход, но....

Tonny_Bennet 11-05-2012 14:35 1913992

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

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

Sham 11-05-2012 21:45 1914214

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

cibin 11-05-2012 23:05 1914257

Цитата:

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

Исходя из этого я так понимаю что в php требуется особым методом указать пустое поле формы!? но как?

Цитата:

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

Он на данный момент ни чего не выводит! Если сделать только одно поле формы и в скрипте поиска указать только один параметр, он находит и показывает! Когда есть несколько и не известно в каком из них клиент пожелает искать, тут уже проблемы начались!

Цитата:

Цитата Sham
выведите текст ошибки echo mysql_error($link); »

Ни чего кроме сообщении что результат 0.

Цитата:

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

Не очень понял!

Sham 12-05-2012 01:01 1914308

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

cibin 12-05-2012 09:32 1914393

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

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


Tonny_Bennet 12-05-2012 10:15 1914410

Цитата:

Цитата 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'] не пустая, то к запросу добавится часть, содержащая условие равенства страны. И так нужно сделать для каждой переменной, постепенно формируя свой запрос.

cibin 12-05-2012 14:08 1914557

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

PHP код:

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


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

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

Tonny_Bennet 12-05-2012 14:46 1914574

Цитата:

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

cibin 12-05-2012 14:51 1914576

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

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

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

Tonny_Bennet 12-05-2012 17:19 1914680

Цитата:

Цитата cibin
Но он выдаёт синтаксическую ошибку! »

сделайте echo $sSQL посмотрите что там за запрос.

cibin 12-05-2012 20:03 1914754

Выдаёт syntax error, unexpected '"' in

Sham 12-05-2012 20:46 1914770

Цитата:

Цитата cibin
"AND date_dog = $_GET['date_dog']" »

Переменные внутри строки. {$_GET['date_dog']} или $_GET[date_dog]

+ обязательно делайте везде mysql_real_escape_string

cibin 12-05-2012 21:57 1914794

Цитата:

Цитата Sham
Переменные внутри строки. {$_GET['date_dog']} или $_GET[date_dog]
+ обязательно делайте везде mysql_real_escape_string »

У меня получился такой скрипт:

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'] != "")
{
    
$_GET['date_dog']
}

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

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

if (
$_GET['komissia'] != "")
{
    
$_GET['komissia']
}

if (
$_GET['dop_sogl'] != "")
{
    
$_GET['dop_sogl']
}

if (
$_GET['inn'] != "")
{
    
$_GET['inn']
}

if (
$_GET['r_schet'] != "")
{
    
$_GET['r_schet']
}

if (
$_GET['boss'] != "")
{
    
$_GET['boss']
}

if (
$_GET['kontakt_l'] != "")
{
    
$_GET['kontakt_l']
}

if (
$_GET['kont_phone'] != "")
{
    
$_GET['kont_phone']
}

if (
$_GET['adres'] != "")
{
    
$_GET['adres']
}

if (
$_GET['primech'] != "")
{
    
$_GET['primech']
}

if (
$_GET['e_mail'] != "")
{
    
$_GET['e_mail']
}

$result=mysql_query($sSQL$link);

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

Выдаёт ошибку: Parse error: syntax error, unexpected '}'

Я скорее всего где что то не так на мудрил!?

Sham 13-05-2012 06:18 1914941

Цитата:

Цитата cibin
{
$_GET['primech']
} »

Даже с ; это глупость. Сделайте обработчик для входящих переменных, чтобы через него обращаться к ним, и не париться с определённостью.

cibin 13-05-2012 09:15 1914964

Я уже хочу сдаться и сделать для каждого поле вода отдельную форму и и скрипт поиска!

Так я правильно понимаю что принцип должен быть таков что форма отправляет запрос на скрипт в скрипте сперва должна проверяться наличие символов при помощи $_GET потом только выполнять SELECT? Или я что-то не так понял!?

Sham 13-05-2012 21:52 1915350

http://docs.php.net/manual/ru/functi...ape-string.php - тут почитайте что-ли

cibin 14-05-2012 11:34 1915588

Спасибо за ссылку, не знаю правильно я там всё понял но в результате у меня получилось так:

PHP код:

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

if (isset(
$_GET[date_dog])) {$date_dog $_GET['date_dog'];}
if (isset(
$_GET[n_dog])) {$n_dog $_GET['n_dog'];}
if (isset(
$_GET[name_org])) {$name_org $_GET['name_org'];}
if (isset(
$_GET[komissia])) {$komissia $_GET['komissia'];}
if (isset(
$_GET[dop_sogl])) {$dop_sogl $_GET['dop_sogl'];}
if (isset(
$_GET[inn])) {$inn $_GET['inn'];}
if (isset(
$_GET[r_schet])) {$r_schet $_GET['r_schet'];}
if (isset(
$_GET[boss])) {$boss $_GET['boss'];}
if (isset(
$_GET[kontakt_l])) {$kontakt_l $_GET['kontakt_l'];}
if (isset(
$_GET[kont_phone])) {$kont_phone $_GET['kont_phone'];}
if (isset(
$_GET[adres])) {$adres $_GET['adres'];}
if (isset(
$_GET[primech])) {$primech $_GET['primech'];}
if (isset(
$_GET[e_mail])) {$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) ):
?>

1) У меня есть сомнение что я правильно условие написал или не дописал. Я так понимаю требуется в начале сделать проверку на наличие информации для запроса
2) Дальше происходит так что выдаёт ошибку браузера "Память не может быть "read"". Тут же закралось сомнение что я не так отразил mysql_real_escape_string

Sham 14-05-2012 22:07 1915980

Цитата:

Цитата cibin
if (isset($_GET[date_dog])) {$date_dog = $_GET['date_dog'];} »

так лучше и правильней
PHP код:

$date_dog = isset($_GET['date_dog']) ? $_GET['date_dog'] : ''

неправильная строка в sprintf (почитайте http://docs.php.net/manual/ru/function.sprintf.php )
там вместо переменных должны быть описатели (%s) и все обычные знаки % должны быть %% ( вместо LIKE '%$name_org%' будет LIKE '%%%s%%' ).

cibin 15-05-2012 06:56 1916098

Спасибо за совет!
а как на счёт 2-го вопроса? Как его решить?

Sham 15-05-2012 07:21 1916107

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

cibin 15-05-2012 09:36 1916155

Цитата:

Цитата 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, хотя я знаю что там токая запись есть!

cibin 16-05-2012 09:13 1916799

Цитата:

Цитата 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"; я увидел что он данный текст не подставляет! Но почему?

Sham 17-05-2012 05:32 1917393

Цитата:

Цитата cibin
= $_GET['date_dog']" »

ошибка строковой переменной (я писал выше)
Цитата:

Цитата cibin
dogovor.vid_oplati_id=vid_oplati.id_vid_oplati $t; »

кавычку добавьте (не видно что-ли раскраска кода нарушена).

cibin 17-05-2012 09:40 1917464

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

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"

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

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

Sham 17-05-2012 10:13 1917477

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

cibin 17-05-2012 10:54 1917495

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

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); 

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

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

Sham 18-05-2012 04:41 1918007

все 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 убрали, а параметры оставили.

cibin 18-05-2012 09:15 1918072

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 '%%'Результат запроса 

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

Sham 18-05-2012 10:39 1918118

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

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

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

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

cibin 18-05-2012 10:54 1918129

Я уже запутался и жалею что решил это сделать!

cibin 24-06-2012 23:29 1939879

У меня получилось вот что:
PHP код:

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

if (isset(
$_REQUEST[n_dog])) $n_dog $_REQUEST['n_dog']; else $n_dog 0;
//echo "$n_dog";
if (isset($_REQUEST[date_dog])) $date_dog $_REQUEST['date_dog']; else $date_dog 0;
if (isset(
$_REQUEST[name_org])) $name_org $_REQUEST['name_org']; else $name_org 0
echo 
"$name_org";
if (isset(
$_REQUEST[komissia])) $komissia $_REQUEST['komissia']; else $komissia 0;
echo 
"$komissia";
if (isset(
$_REQUEST[dop_sogl])) $dop_sogl $_REQUEST['dop_sogl']; else $dop_sogl 0;
echo 
"$dop_sogl";
if (isset(
$_GET[inn])) $inn intval($_GET['inn']); else $inn 0;
echo 
"$inn";
if (isset(
$_GET[r_schet])) $r_schet intval($_GET['r_schet']); else $r_schet 0;
echo 
"$r_schet";
if (isset(
$_REQUEST[boss])) $boss $_REQUEST['boss']; else $boss 0
echo 
"$boss";
if (isset(
$_REQUEST[kontakt_l])) $kontakt_l $_REQUEST['kontakt_l']; else $kontakt_l 0;
echo 
"$kontakt_l";
if (isset(
$_REQUEST[kont_phone])) $kont_phone $_REQUEST['kont_phone']; else $kont_phone 0;
echo 
"$kont_phone";
if (isset(
$_REQUEST[adres])) $adres $_REQUEST['adres']; else $adres 0;
echo 
"$adres";
if (isset(
$_REQUEST[primech])) $primech $_REQUEST['primech']; else $primech 0;
echo 
"$primech";
if (isset(
$_REQUEST[e_mail])) $e_mail $_REQUEST['e_mail']; else $e_mail 0;
echo 
"$e_mail";
mysql_query("SET NAMES cp1251");
function 
EditSelect($date_dog$n_dog$name_org$komissia$dop_sogl$inn$r_schet$boss$kontakt_l$kont_phone$adres$primech$e_mail)
    {
        
$vars = array($date_dog$n_dog$name_org$komissia$dop_sogl$inn$r_schet$boss$kontakt_l$kont_phone$adres$primech$e_mail);
$query "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"
;
$queryArr = array(
" 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%'",
);
//print_r($queryArr);

for($i=0$i<count($queryArr); $i++)
            if(
$vars[$i]!=0)
                
$query.=$queryArr[$i];

        return 
$query;
    }
     
$sSQL=EditSelect($date_dog$n_dog$name_org$komissia$dop_sogl$inn$r_schet$boss$kontakt_l$kont_phone$adres$primech$e_mail);
     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) ):
?>

Здесь я попробовал проверить прям по строчно, т.е. каждую проверку, в результате заметил что он при таком коде из формы типа text
1) проверяет и принимает без проблем строку поиска, в каждом.
2) проверил массив, он работает ибо в каждом отражается строка которую вводили.
3) А вот дальше уже выводит вот что, при echo "$sSQL"; в случаи когда вводили текст выводит запрос в виде (не имеет значение в каком из форм вводил):
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 

, но когда ищем по цифрам находит всё идеально! Т.е. он не дописывает условие и в результате он выводит всю таблицу!
Что не так?

cibin 25-06-2012 09:26 1940027

На одном сайт нашел такую вещь:
settype($someVar, "string") // переопределяем тип данных на строковый
Вопрос правильно ли будет вписать подобное в проверку?

cibin 25-06-2012 10:45 1940059

Вопрос решён спасибо!!


Время: 06:42.

Время: 06:42.
© OSzone.net 2001-