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

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


Цитата cibin:
Но он выдаёт синтаксическую ошибку! »
сделайте echo $sSQL посмотрите что там за запрос.

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


Отправлено: 17:19, 12-05-2012 | #11



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

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


Старожил


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

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


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

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


Deadooshka


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

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


Цитата cibin:
"AND date_dog = $_GET['date_dog']" »
Переменные внутри строки. {$_GET['date_dog']} или $_GET[date_dog]

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

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


Старожил


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

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


Цитата 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 '}'

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

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


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


Deadooshka


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

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


Цитата cibin:
{
$_GET['primech']
} »
Даже с ; это глупость. Сделайте обработчик для входящих переменных, чтобы через него обращаться к ним, и не париться с определённостью.

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


Старожил


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

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


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

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

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


Deadooshka


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

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


http://docs.php.net/manual/ru/functi...ape-string.php - тут почитайте что-ли
Это сообщение посчитали полезным следующие участники:

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


Старожил


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

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


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

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

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


Deadooshka


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

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


Цитата 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%%' ).

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

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

Отправлено: 22:07, 14-05-2012 | #19


Старожил


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

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


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

Отправлено: 06:56, 15-05-2012 | #20



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




 
Переход