Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Уникальная выборка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
cibin
Отправлено: 22 Июня, 2012 - 19:26:59
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Мне нужно создать универсальную выборку.
Подробно:
Есть Главная таблица, вся информация стекается в эту таблицу! Созданный так же ещё несколько таблиц которые являются на подобии справочников. При внесении информации они используются в html форме выпадающего списка. Требуется сделать универсальную выборку по этим справочникам, но так что бы из нескольких форм выпадающего списка (в данном случаи их 7) клиент мог выбрать люой из них да так что бы мог выбрать как все так и несколько! Т.е. из 7 он хочет выбрать 3, а остальные не должны участвовать в селекте!
Я в форме выпадающего списка добавил возможность выбора пустого значение <option value="">не выбрано</option> а дальше с низу идёт скрипт вывода из таблицы.
Вся загвоздка в том что он не реагирует на "", т.е. пустое значение!
На данный момент я узнал что строка
if (isset($_GET[status_id])) $status_id = intval($_GET['status_id']); else $status_id = 0;
это проверка на пустое значение status_id. Но как это применить в селекте??

Что бы легче понять прикладываю архив с формой и скриптом селект!
http://www[dot]fayloobmennik[dot]net/1997653

Заранее благодарю если кто сможет помочь!

P.S. Надеюсь понятно объяснил!
 
 Top
cibin
Отправлено: 23 Июня, 2012 - 07:52:20
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Возможно ли в php выполнить подобный алгоритм:
После проверки пустого значение например переменная $t определяем текстом "and dogovor.status_id='$status_id'" дальше в селекте пишем:
SELECT * FROM `dogovor`WHERE $t
Вся проблема в том что я не знаю как в php это правильно написать, если данный алгоритм возможно выполнить в php.
 
 Top
Green
Отправлено: 23 Июня, 2012 - 08:01:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Апр. 2012  
Откуда: Кисловодск


Помог: 9 раз(а)




cibin пишет:
Возможно ли в php выполнить подобный алгоритм:
После проверки пустого значение например переменная $t определяем текстом "and dogovor.status_id='$status_id'" дальше в селекте пишем:
SELECT * FROM `dogovor`WHERE $t
Вся проблема в том что я не знаю как в php это правильно написать, если данный алгоритм возможно выполнить в php.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $t   = "AND `status_id` = '" . $status_id . "'";
  4. $sql = "SELECT * FROM `dogovor` WHERE `test` = 'test' " . $t . "";
  5. echo $sql;
  6. ?>
  7.  

Типа так...
 
 Top
cibin
Отправлено: 23 Июня, 2012 - 08:14:18
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




В селекте что означает `test`??
(Добавление)
К стати у меня вызывает сомнение, правильно ли я написал проверку!?
 
 Top
Green
Отправлено: 23 Июня, 2012 - 12:56:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Апр. 2012  
Откуда: Кисловодск


Помог: 9 раз(а)




cibin пишет:
В селекте что означает `test`??

Условие это... Я его специально добавил, ибо у Вас было бы:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `dogovor`WHERE AND dogovor.status_id='$status_id'

А это ошибка. AND - и. То есть перед AND, должно быть еще условие.

cibin пишет:
К стати у меня вызывает сомнение, правильно ли я написал проверку!?

cibin пишет:
if (isset($_GET[status_id])) $status_id = intval($_GET['status_id']); else $status_id = 0;

$_GET[status_id] замените на $_GET['status_id']... То есть возьмите в кавычки. Иначе - Notice.
 
 Top
cibin
Отправлено: 23 Июня, 2012 - 13:27:27
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Хотел спасибо поставить но не выходит!!

Так во первых на счёт условия у меня получилось так (надеюсь правильно):

PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['status_id']))
  2. {$status_id = intval($_GET['status_id']);
  3. $a = "AND `status_id` = '" . $status_id . "'";
  4. }
  5. else
  6. {$status_id = 0;}
  7. if (isset($_GET['vid_oplati_id']))
  8. {$vid_oplati_id = intval($_GET['vid_oplati_id']);
  9. $b = "AND `vid_oplati_id` = '" . $vid_oplati_id . "'";}
  10. else
  11. {$vid_oplati_id = 0;}
  12. if (isset($_GET['vid_billinga_id']))
  13. {$vid_billinga_id = intval($_GET['vid_billinga_id']);
  14. $c = "AND `vid_billinga_id` = '" . $vid_billinga_id . "'";}
  15. else
  16. {$vid_billinga_id = 0;}
  17. if (isset($_GET['sposob_peredachi_id']))
  18. {$sposob_peredachi_id = intval($_GET['sposob_peredachi_id']);
  19. $d = "AND `sposob_peredachi_id` = '" . $sposob_peredachi_id . "'";}
  20. else
  21. $sposob_peredachi_id = 0;
  22. if (isset($_GET['periodichnost_id']))
  23. {$periodichnost_id = intval($_GET['periodichnost_id']);
  24. $e = "AND `periodichnost_id` = '" . $periodichnost_id . "'";}
  25. else
  26. {$periodichnost_id = 0;}
  27. if (isset($_GET['sposob_oplati_id']))
  28. {$sposob_oplati_id = intval($_GET['sposob_oplati_id']);
  29. $f = "AND `sposob_oplati_id` = '" . $sposob_oplati_id . "'";}
  30. else
  31. {$sposob_oplati_id = 0;}
  32. if (isset($_GET['bank_id']))
  33. {$bank_id = intval($_GET['bank_id']);
  34. $t = "AND `bank_id` = '" . $bank_id . "'";}
  35. else
  36. {$bank_id = 0;}


Теперь на счёт запроса, у меня на самом деле обстоит так:

PHP:
скопировать код в буфер обмена
  1. $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

а дальше должно приписываться условие отбора! Поэтоум и спрашиваю что мне вписывать в test в мойём случаи??

(Отредактировано автором: 23 Июня, 2012 - 13:46:25)

 
 Top
vanicon
Отправлено: 23 Июня, 2012 - 16:00:20
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




Не стал разбираться конкретно с Вашим запросом, но суть Вашей проблемы понял.
Приведу не большой пример:
это проверка на существование get параметра input, если он существует то присваиваем переменной $input_sql кусок нужного sql запроса, если его нет то оставляем эту переменную пустой. $where я сделал переменной если условий и вовсе не будет...
PHP:
скопировать код в буфер обмена
  1.  
  2. //если хотябо одно из условие будет существовать
  3. if(isset($_GET['input1']) or isset($_GET['input2']) or isset($_GET['input3'])){
  4. $where = 'WHERE';//то назначаем оператор WHERE
  5. //1 уловие
  6. if(isset($_GET['input1'])){
  7. $input1_sql = "`input` = '".$_GET['input1']."'";//тут AND не нужен так как это условие будет всегда первым
  8. }
  9. else{
  10. $input1_sql = '';
  11. }
  12.  
  13. //2 условие
  14. if(isset($_GET['input2'])){
  15. if($input1_sql <> null){
  16. //это условие будет стоять 2 значит неообходимо проверить существует ли 1 условие, если существует то добавляем оператор AND
  17. $input2_sql = "AND `input2` = '".$_GET['input2']."'";
  18. }
  19. else{
  20. //а если не существует то без опереатора AND
  21. $input2_sql = "`input2` = '".$_GET['input2']."'";
  22. }
  23. }
  24. else{
  25. $input2_sql = '';
  26. }
  27.  
  28. //3 условие
  29. if(isset($_GET['input3'])){
  30. //это условие будет стоять 3 значит неообходимо проверить существует 1 или 2 условие, если существует то добавляем оператор AND
  31. if($input1_sql <> null or $input2_sql <> null){
  32. $input3_sql = "AND `input3` = '".$_GET['input3']."'";
  33. }
  34. else{
  35. //а если не существует то без опереатора AND
  36. $input3_sql = "`input3` = '".$_GET['input3']."'";
  37. }
  38. }
  39. else{
  40. $input3_sql = '';
  41. }
  42.  
  43. }
  44. else{
  45. $where = '';//если ниодного условия нет то WHERE сдесь не к чему
  46. $input1_sql = '';
  47. $input2_sql = '';
  48. $input3_sql = '';
  49. }
  50.  
  51. //сам запрос
  52. $quer = "SELECT * from `test` $where $input1_sql $input2_sql $input3_sql";
  53.  
  54.  


-----
Так было, так есть и так будет
 
 Top
cibin
Отправлено: 23 Июня, 2012 - 21:24:30
Post Id


Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




У меня получился такой код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once "zashita.php";
  3. require_once "bdconnect.php";
  4.  
  5. if(isset($_GET['status_id']) or isset($_GET['vid_oplati_id']) or isset($_GET['vid_billinga_id']) or isset($_GET['sposob_peredachi_id']) or isset($_GET['periodichnost_id']) or isset($_GET['sposob_oplati_id']) or isset($_GET['bank_id']) ){
  6. $where = 'WHERE';//то назначаем оператор WHERE
  7.  
  8. if (isset($_GET['status_id']))
  9. {$status_id_sql = "AND `status_id` = '" .$_GET['status_id']. "'";}
  10. else
  11. {$status_id_sql = '';}
  12. if (isset($_GET['vid_oplati_id']))
  13. {$vid_oplati_id_sql = "AND `vid_oplati_id` = '" .$_GET['vid_oplati_id']. "'";}
  14. else
  15. {$vid_oplati_id_sql = '';}
  16. if (isset($_GET['vid_billinga_id']))
  17. {$vid_billinga_id_sql = "AND `vid_billinga_id` = '" .$_GET['vid_billinga_id']. "'";}
  18. else
  19. {$vid_billinga_id_sql = '';}
  20. if (isset($_GET['sposob_peredachi_id']))
  21.  
  22. {$sposob_peredachi_id_sql = "AND `sposob_peredachi_id` = '" .$_GET['sposob_peredachi_id']. "'";}
  23. else
  24. {$sposob_peredachi_id_sql = '';}
  25. if (isset($_GET['periodichnost_id']))
  26. {$periodichnost_id_sql = "AND `periodichnost_id` = '" .$_GET['periodichnost_id']. "'";}
  27. else
  28. {$periodichnost_id_sql = '';}
  29. if (isset($_GET['sposob_oplati_id']))
  30. {$sposob_oplati_id_sql = "AND `sposob_oplati_id` = '" .$_GET['sposob_oplati_id']. "'";}
  31. else
  32. {$sposob_oplati_id_sql = '';}
  33. if (isset($_GET['bank_id']))
  34. {$bank_id_sql = "AND `bank_id` = '" .$_GET['bank_id']. "'";}
  35. else
  36. {$bank_id_sql = '';}
  37. }
  38. else{
  39. $where = '';        //если ниодного условия нет то WHERE сдесь не к чему
  40. $status_id_sql = '';
  41. $vid_oplati_id_sql = '';
  42. $vid_billinga_id_sql = '';
  43. $sposob_peredachi_id_sql = '';
  44. $periodichnost_id_sql = '';
  45. $sposob_oplati_id_sql = '';
  46. $bank_id_sql = '';
  47. }
  48.  
  49. mysql_query("SET NAMES cp1251");
  50. $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 $status_id_sql $vid_oplati_id_sql $vid_billinga_id_sql $sposob_peredachi_id_sql $periodichnost_id_sql $sposob_oplati_id_sql $bank_id_sql";
  51. $result=mysql_query($sSQL, $link);
  52. if (mysql_num_rows($result) == 0) echo"Результат запроса : 0"; else
  53. if (mysql_num_rows($result) > 0)
  54. while ( $myrow = mysql_fetch_array($result) ):
  55. ?>

всё в роде бы хорошо но при любом выборе всплывающего списка он выдаёт всю таблицу, а не то что мы запросили!
(Добавление)
т.е. создаётся такое ощущение как будто мы ни чего не выбирали из всплывающих списков!
(Добавление)
добавил

в результате на экране вижу текст:
Resource id #6
(Добавление)
Вопрос решил таким образом:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once "zashita.php";
  3.     require_once "bdconnect.php";
  4.  
  5.     if (isset($_GET[status_id])) $status_id = intval($_GET['status_id']); else $status_id = 0;
  6.     if (isset($_GET[vid_oplati_id])) $vid_oplati_id = intval($_GET['vid_oplati_id']); else $vid_oplati_id = 0;
  7.     if (isset($_GET[vid_billinga_id])) $vid_billinga_id = intval($_GET['vid_billinga_id']); else $vid_billinga_id = 0;
  8.     if (isset($_GET[sposob_peredachi_id])) $sposob_peredachi_id = intval($_GET['sposob_peredachi_id']); else $sposob_peredachi_id = 0;
  9.     if (isset($_GET[periodichnost_id])) $periodichnost_id = intval($_GET['periodichnost_id']); else $periodichnost_id = 0;
  10.     if (isset($_GET[sposob_oplati_id])) $sposob_oplati_id = intval($_GET['sposob_oplati_id']); else $sposob_oplati_id = 0;
  11.     if (isset($_GET[bank_id])) $bank_id = intval($_GET['bank_id']); else $bank_id = 0;
  12.  
  13.     mysql_query("SET NAMES cp1251");
  14.     function EditSelect($status_id, $vid_oplati_id, $vid_billinga_id, $sposob_peredachi_id, $periodichnost_id, $sposob_oplati_id, $bank_id)
  15.     {
  16.         $vars = array($status_id, $vid_oplati_id, $vid_billinga_id, $sposob_peredachi_id, $periodichnost_id, $sposob_oplati_id, $bank_id);
  17.         $query = "SELECT * FROM
  18.                `dogovor`, `bank`, `periodichnost`, `sposob_oplati`, `sposob_peredachi`, `status`, `vid_billinga`, `vid_oplati`
  19.                WHERE
  20.                dogovor.bank_id=bank.id_bank
  21.                and dogovor.periodichnost_id=periodichnost.id_periodichnost
  22.                and dogovor.sposob_oplati_id=sposob_oplati.id_sposob_oplati
  23.                and dogovor.sposob_peredachi_id=sposob_peredachi.id_sposob_peredachi
  24.                and dogovor.status_id=status.id_status
  25.                and dogovor.vid_billinga_id=vid_billinga.id_vid_billinga
  26.                and dogovor.vid_oplati_id=vid_oplati.id_vid_oplati";
  27.        
  28.         $queryArr = array(
  29.                         " and dogovor.status_id='$status_id'",
  30.                         " and dogovor.vid_oplati_id='$vid_oplati_id'",
  31.                         " and dogovor.vid_billinga_id='$vid_billinga_id'",
  32.                         " and dogovor.sposob_peredachi_id='$sposob_peredachi_id'",
  33.                         " and dogovor.periodichnost_id='$periodichnost_id'",
  34.                         " and dogovor.sposob_oplati_id='$sposob_oplati_id'",
  35.                         " and dogovor.bank_id='$bank_id'"
  36.                         );                    
  37.                        
  38.         for($i=0; $i<count($queryArr); $i++)
  39.             if($vars[$i]!=0)
  40.                 $query.=$queryArr[$i];
  41.  
  42.         return $query;
  43.     }
  44.     $sSQL=EditSelect($status_id, $vid_oplati_id, $vid_billinga_id, $sposob_peredachi_id, $periodichnost_id, $sposob_oplati_id, $bank_id);
  45.            
  46.     $result=mysql_query($sSQL, $link);
  47.  
  48.     if (mysql_num_rows($result) == 0) echo"Результат запроса : 0";else
  49.     if (mysql_num_rows($result) > 0)
  50.     while ( $myrow = mysql_fetch_array($result) ):
  51. ?>

а в форме в место
CODE (html):
скопировать код в буфер обмена
  1. <form action="viborka_rezult.php" method="post" name="form">

написал
CODE (html):
скопировать код в буфер обмена
  1. <form action="viborka_rezult.php" method="get" name="form">

И всё пошло по маслу!!
Всем спасибо за участие!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB