[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: почему не работает(
mark1
при поиске по селектам,надо если заполнены не все поля искать по ним ,тут посоветовали как сделать,но что то не работает,из data ничего не вытаскивает
PHP
<?php 
if 
(isset($_POST['cat']))      $cat_id = $_POST['cat'];  
if 
(isset($_POST['city']))      $city_id = $_POST['city'];  
if 
(isset($_POST['komnati']))      $kom_id = $_POST['komnati'];  
if 
(isset($_POST['sdelka']))      $sd_id = $_POST['sdelka'];  
if 
(isset($_POST['planirovka']))      $plan_id = $_POST['planirovka'];  
if 
(isset($_POST['material']))      $mat_id = $_POST['material'];  


$where_cat_id 
= " cat_id = '$cat_id' "; 
$where_city_id 
= " city_id = '$city_id' "; 
$where_kom_id 
= " kom_id = '$kom_id' "; 
$where_sd_id 
= " sd_id = '$sd_id' "; 
$where_plan_id 
= " plan_id = '$plan_id' "; 
$where_mat_id 
= " mat_id = '$mat_id' "; 


if 
($сat_id !== "") $where_cat_id = " cat_id = '$cat_id' AND "; 
else $where_cat_id 
== ""; 

if 
($city_id !== "") $where_city_id = " city_id = '$city_id' AND "; 
else $where_city_id 
== ""; 

if 
($kom_id !== "") $where_kom_id = " kom_id = '$kom_id' AND "; 
else $where_kom_id 
== ""; 

if 
($sd_id !== "") $where_sd_id = " sd_id = '$sd_id' AND "; 
else $where_sd_id 
== ""; 


if 
($plan_id !== "") $where_plan_id = " plan_id = '$plan_id' AND "; 
else $where_plan_id 
== ""; 


if 
($mat_id !== "") $where_mat_id = " mat_id = '$mat_id' AND "; 
else $where_mat_id 
== ""; 





 if
($_POST['action']=="search") 
{ 



$sql 
= "SELECT * FROM data "; 

if 
(($where_cat_id !== "")||($where_city_id !== "")||($where_kom_id !== "")||($where_sd_id !== "")||($where_plan_id !== "")||($where_mat_id !== "")) $sql .= " WHERE "; 

$sql 
.= " " . $where_cat_id . " "; 
$sql 
.= " " . $where_city_id . " "; 
$sql 
.= " " . $where_kom_id . " "; 
$sql 
.= " " . $where_sd_id . " "; 
$sql 
.= " " . $where_plan_id . " "; 
$sql 
.= " " . $where_mat_id . " "; 

$sql 
= substr_replace($sql, ' ', -5); 





$res 
= mysql_query($sql); 
if(!$res) exit("Ошибка извлечения данных ".mysql_error());




Спустя 10 часов, 18 минут, 1 секунда (19.10.2009 - 09:51) stepan написал(а):
Цитата (mark1 @ 18.10.2009 - 20:33)
при поиске по селектам,надо если заполнены не все поля искать по ним

По ним это по ком?

Далее не ошибки а рекомендации, т.к. код и так нагружен и для прочтения тяжел
вот это
PHP
if (isset($_POST['cat']))      $cat_id $_POST['cat'];  
if (isset(
$_POST['city']))      $city_id $_POST['city'];

лучше писать вот так
PHP
$cat_id = isset($_POST['cat'])? $_POST['cat'] : null;  
$city_id = isset($_POST['city'])? $_POST['city'] : null;

PHP
$where_cat_id " cat_id = '$cat_id' ";

вот так
PHP
$where_cat_id " cat_id = '".$cat_id."' ";


далее даже смотреть не хочется.

да и вообще ты ошибку напиши которую выводит.

Спустя 22 минуты, 35 секунд (19.10.2009 - 10:13) mark1 написал(а):
ошибку не выводит просто из data ничего не выбирает,поиск должен осуществлятся по любому заполненому селекту

Спустя 38 минут, 29 секунд (19.10.2009 - 10:52) stepan написал(а):
Ну изначально посмотри что у тебя получается, а потом делай выборку
PHP
echo $sql;
$query mysql_query $sql );

да и для завершение запроса тебе еще не хватает
PHP
$result mysql_fetch_array $query );
echo 
mysql_error ();
echo 
'Что же у нас на выходе - ';
var_dump $result );


Спустя 58 минут, 21 секунда (19.10.2009 - 11:50) mark1 написал(а):
выдается


SELECT * FROM data WHERE cat_id = '1' AND city_id = '5' AND kom_id = '0' AND sd_id = '0' AND plan_id = '0' AND mat_id = '0' Что же у нас на выходе - bool(false) при заполнении cat и city

Спустя 37 минут, 5 секунд (19.10.2009 - 12:27) Kuliev написал(а):
mark1
SQL
SELECT * FROM `data` WHERE

data зарезервировано MySQL по этому нужно брать в обратные кавычки

Спустя 37 минут, 50 секунд (19.10.2009 - 13:05) Семён написал(а):
Цитата (Kuliev @ 19.10.2009 - 13:27)
mark1
SQL
SELECT * FROM `data` WHERE

data зарезервировано MySQL по этому нужно брать в обратные кавычки

data не зарезервированное слово, эт так к сведению wink.gif

Спустя 44 минуты, 59 секунд (19.10.2009 - 13:50) stepan написал(а):
Пробуй вот это
PHP
$sql " SELECT * 
              FROM `data` 
              WHERE `cat_id` = '1' 
              AND `city_id` = '5' 
              AND `kom_id` = '0' 
              AND `sd_id` = '0' 
              AND `plan_id` = '0' 
              AND `mat_id` = '0' "
;
$query mysql_query $sql );
$result mysql_fetch_array $query );
var_dump $result );


если заработало значит от этого надо отталкиваться...
если не заработало пробуй вывести без WHERE

Спустя 21 минута, 47 секунд (19.10.2009 - 14:12) mark1 написал(а):
в общем вывожу так

PHP
<?php
$cat_id 
= isset($_POST['cat'])? $_POST['cat'] : null;  
$city_id = isset($_POST['city'])? $_POST['city'] : null;
$kom_id = isset($_POST['komnati'])? $_POST['komnati'] : null;  
$sd_id = isset($_POST['sdelka'])? $_POST['sdelka'] : null;
$plan_id = isset($_POST['planirovka'])? $_POST['planirovka'] : null;  
$mat_id = isset($_POST['material'])? $_POST['material'] : null;





$where_cat_id " cat_id = '".$cat_id."' ";
$where_city_id " city_id = '".$city_id."' ";
$where_kom_id " kom_id = '".$kom_id."' ";
$where_sd_id " sd_id = '".$sd_id."' ";
$where_plan_id " plan_id = '".$plan_id."' ";
$where_mat_id " mat_id = '".$mat_id."' ";


if (
$сat_id !== ""$where_cat_id " cat_id = '$cat_id' AND ";
else 
$where_cat_id == "";

if (
$city_id !== ""$where_city_id " city_id = '$city_id' AND ";
else 
$where_city_id == "";

if (
$kom_id !== ""$where_kom_id " kom_id = '$kom_id' AND ";
else 
$where_kom_id == "";

if (
$sd_id !== ""$where_sd_id " sd_id = '$sd_id' AND ";
else 
$where_sd_id == "";


if (
$plan_id !== ""$where_plan_id " plan_id = '$plan_id' AND ";
else 
$where_plan_id == "";


if (
$mat_id !== ""$where_mat_id " mat_id = '$mat_id' AND ";
else 
$where_mat_id == "";





 if(
$_POST['action']=="search")
{



$sql "SELECT * FROM `data` WHERE `cat_id` = '1' 
              AND `city_id` = '5' 
              AND `kom_id` = '0' 
              AND `sd_id` = '0' 
              AND `plan_id` = '0' 
              AND `mat_id` = '0' "
;

if ((
$where_cat_id !== "")||($where_city_id !== "")||($where_kom_id !== "")||($where_sd_id !== "")||($where_plan_id !== "")||($where_mat_id !== "")) $sql .= " WHERE ";

$sql .= " " $where_cat_id " ";
$sql .= " " $where_city_id " ";
$sql .= " " $where_kom_id " ";
$sql .= " " $where_sd_id " ";
$sql .= " " $where_plan_id " ";
$sql .= " " $where_mat_id " ";

$sql substr_replace($sql' ', -5);





echo 
$sql;
$query mysql_query $sql );
if(!
$query) exit("Ошибка извлечения данных ".mysql_error()); 
 
$result mysql_fetch_array $query );
echo 
mysql_error ();
echo 
'Что же у нас на выходе - ';
var_dump $result );
  while (
$result mysql_fetch_array($query)) 
{
//категории
$categ=$result ["cat_id"];
$res1=mysql_query ("SELECT name FROM cat where cat_id='$categ'",$dbh);
$myrow1=mysql_fetch_array ($res1);


//сделка 
$sdel=$result ["sd_id"];
$res2=mysql_query ("SELECT name FROM sdelka where sd_id='$sdel'",$dbh);
$myrow2=mysql_fetch_array ($res2);



 
// комнаты
$komn=$result ["kom_id"];
$res3=mysql_query ("SELECT kol FROM komnati where kom_id='$komn'",$dbh);
$myrow3=mysql_fetch_array ($res3);
 


//улица 
$cit=$result ["city_id"];
$res4=mysql_query ("SELECT name FROM city where city_id='$cit'",$dbh);
$myrow4=mysql_fetch_array ($res4);




//планировка  
$plan=$result ["plan_id"];
$res5=mysql_query ("SELECT name FROM planirovka where plan_id='$plan'",$dbh);
$myrow5=mysql_fetch_array ($res5); 
 
//материал 
$mat=$result ["mat_id"];
$res6=mysql_query ("SELECT name FROM material where mat_id='$mat'",$dbh);
$myrow6=mysql_fetch_array ($res6);

 

//этаж  
$et=$result ["et_id"];
$res7=mysql_query ("SELECT name FROM etag where et_id='$et'",$dbh);
$myrow7=mysql_fetch_array ($res7);

 



//площадь  
$psh=$result ["psh_id"];
$res8=mysql_query ("SELECT name FROM ploshad where psh_id='$psh'",$dbh);
$myrow8=mysql_fetch_array ($res8);





//цена  
$cen=$result ["cen_id"];
$res9=mysql_query ("SELECT name FROM cena where cen_id='$cen'",$dbh);
$myrow9=mysql_fetch_array ($res9);





printf ("<table  ><tr><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td><td class='t2'>%s</td></tr></table>",$myrow4["name"],$myrow1["name"],$myrow2["name"],$myrow3["kol"],$myrow5["name"],$myrow6["name"],$myrow7["name"],$myrow8["name"],$myrow9["name"]);

}



}





выходит SELECT * FROM `data` `cat_id` = '1' AND `city_id` = '5' AND `kom_id` = '0' AND `sd_id` = '0' AND `plan_id` = '0' AND `mat_id` = '0' WHERE cat_id = '1' AND city_id = '5' AND kom_id = '0' AND sd_id = '0' AND plan_id = '0' AND mat_id = '0' Ошибка извлечения данных You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '1' AND `city_id` = '5' AND `kom_id` = '0' ' at line 1


в таблице data у меня хранятся id других таблиц,поля name которых надо вывести

Спустя 7 минут, 4 секунды (19.10.2009 - 14:19) stepan написал(а):
А где у тебя mysql_connect (); mysql_select_db ();
и в конце mysql_close ();

Спустя 1 минута, 37 секунд (19.10.2009 - 14:21) Gram написал(а):
Выложите свой дамп а.

Вот такого не должно быть
выходит SELECT * FROM `data` `cat_id` = '1' AND `city_id` = '5' AND `kom_id` = '0' AND `sd_id` = '0' AND `plan_id` = '0' AND `mat_id` = '0' WHERE cat_id = '1' AND city_id = '5' AND kom_id = '0' AND sd_id = '0' AND plan_id = '0' AND mat_id = '0'

в частности FROM `data` `cat_id` = '1'

Спустя 4 минуты, 17 секунд (19.10.2009 - 14:25) stepan написал(а):
я имел введу без WHERE т.е.
SQL
SELECT * FROM `data`

Спустя 4 минуты, 21 секунда (19.10.2009 - 14:29) Gram написал(а):
А еще в вот в этой строчке
PHP
if ($сat_id !== "") $where_cat_id = " cat_id = '$cat_id' AND ";
else $where_cat_id == "";

в названии переменной
PHP
if ($сat_id !== "")

первая буква не английская си , а русская. может из-за этого все ваши проблемы

Спустя 13 минут, 6 секунд (19.10.2009 - 14:42) mark1 написал(а):
без where нже выводил в самом начале,выдает при выборе city и cat

SELECT * FROM `data` WHERE cat_id = '1' AND city_id = '5' AND kom_id = '0' AND sd_id = '0' AND plan_id = '0' AND mat_id = '0' Что же у нас на выходе - bool(false)

выводится если только все селекты заполнены

Спустя 22 минуты, 19 секунд (19.10.2009 - 15:05) Gram написал(а):
На пару часов уехать надо, приду напишу тебе решение, если раньше никто не напишет. А ты уже несколько дней этот запрос мучаешь)))

Спустя 2 минуты, 12 секунд (19.10.2009 - 15:07) mark1 написал(а):
точно,я тут совсем новичок,особенно в синтаксисе

Спустя 29 минут, 56 секунд (19.10.2009 - 15:37) Gram написал(а):
PHP
$cat_id = isset($_POST['cat'])? trim($_POST['cat']) : null;
 
$city_id = isset($_POST['city'])? trim($_POST['city']) : null;
 
$kom_id = isset($_POST['komnati'])? trim($_POST['komnati']) : null;
 
$sd_id = isset($_POST['sdelka'])? trim($_POST['sdelka']) : null;
 
$plan_id = isset($_POST['planirovka'])? trim($_POST['planirovka']) : null;
 
$mat_id = isset($_POST['material'])? trim($_POST['material']) : null;

 if (
$cat_id !== ""$where_cat_id " `cat_id` = " $cat_id " AND "; else $where_cat_id == "";
 if (
$city_id !== ""$where_city_id " `city_id` = " $city_id " AND "; else $where_city_id == "";
 if (
$kom_id !== ""$where_kom_id " `kom_id` = " $kom_id " AND "; else $where_kom_id == "";
 if (
$sd_id !== ""$where_sd_id " `sd_id` = " $sd_id " AND "; else $where_sd_id == "";
 if (
$plan_id !== ""$where_plan_id " `plan_id` = " $plan_id " AND "; else $where_plan_id == "";
 if (
$mat_id !== ""$where_mat_id " `mat_id` = " $mat_id " AND "; else $where_mat_id == "";

 
$sql "SELECT * FROM `data`";
 if
  (
      (
$where_cat_id !== "") ||
      (
$where_city_id !== "") ||
      (
$where_kom_id !== "") ||
      (
$where_sd_id !== "") ||
      (
$where_plan_id !== "") ||
      (
$where_mat_id !== "")
  ) 
$sql .= " WHERE ";

 
$sql .= $where_cat_id;
 
$sql .= $where_city_id;
 
$sql .= $where_kom_id;
 
$sql .= $where_sd_id;
 
$sql .= $where_plan_id;
 
$sql .= $where_mat_id;

 
$sql substr_replace($sql'', -4);

 
$res mysql_query($sql);

 while (
$row mysql_fetch_array($res))
  {
     echo 
'<pre>';
     
print_r($row);
  }



 echo 
$sql;

Спустя 55 минут, 10 секунд (19.10.2009 - 16:32) mark1 написал(а):
спасиба,но так тоже работает тока если все селекты выбирать,потому что эти невыбранные переменные становятся равны "0" и в таблице тоже соответственно ищутся как ноль,их надо как то уничтожать чтоб они в запросе не участвовали

Спустя 2 часа, 14 минут, 4 секунды (19.10.2009 - 18:46) Kuliev написал(а):
mark1
Если Вы используете SELECT для выборки, то все очень просто
PHP
<?php
// Пример:
// Пришедшие данные
$a 0;
$b 1;
$c 3;
$d 4;
$e 0;

// создаем ассоциативный массив
$array = array(
                
"`id_cat_1`" => $a,
                
"`id_cat_2`" => $b,
                
"`id_cat_3`" => $c,
                
"`id_cat_4`" => $d,
                
"`id_cat_5`" => $e
              
);
// Начальная строчка запроса
$sql "SELECT * FROM `data`";

//Создаем пустой масив для условия WHERE
$sql_where = array();

//Перебираем массив
foreach($array as $key => $value)
{
    
// Если есть 0 в запросе отсеиваем его
    
if(!empty($value))
    
$sql_where[] = $key." = ".intval($value);
}

//Проверяем нужно ли подставлять условие WHERE в запрос
if(count($sql_where) > 0)
$sql .=" WHERE ";

//Формируем окончательную строку запроса 
$sql.=" ".implode(" AND "$sql_where);

//Собственно вот что получилось
echo $sql;


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.