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]   

> Без описания
alexey11
Отправлено: 07 Сентября, 2011 - 15:07:55
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Сент. 2011  


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




Возможно ли сделать так, чтобы определение WHERE бралось с переменной?

К примеру
PHP:
скопировать код в буфер обмена
  1. $r1='name="ddd"';
  2. mysql_query('SELECT * FROM base1 WHERE $r1', $db);
  3.  

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

Как то можно такое сделать?
 
 Top
OrmaJever Модератор
Отправлено: 07 Сентября, 2011 - 15:10:19
Post Id



Активный участник


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


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




да это возможно только нужно запрос брать в двойные кавычки "
PHP:
скопировать код в буфер обмена
  1. $r1='name="ddd"';
  2. mysql_query("SELECT * FROM base1 WHERE $r1", $db);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
alexey11
Отправлено: 07 Сентября, 2011 - 15:15:03
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Сент. 2011  


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




Получилось. Спасибо!
А как можно сделать именно что бы проверялось если в форме поле пустое, то не учитывается в запросе?
 
 Top
LIME
Отправлено: 07 Сентября, 2011 - 15:24:11
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




например както так
PHP:
скопировать код в буфер обмена
  1. empty($_GET['name'])?$r1='':$r1="name='{$_GET['name']}'";

(Отредактировано автором: 07 Сентября, 2011 - 15:25:16)

 
 Top
alexey11
Отправлено: 07 Сентября, 2011 - 15:46:23
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Сент. 2011  


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




Да, но получается что в запросе - если переменная пуста, то where остается без параметра и получается ошибка...
 
 Top
LIME
Отправлено: 07 Сентября, 2011 - 15:51:37
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




alexey11 так у вас 1 только параметр передается? ну тогда вообще в чем проблема?
проверяете если пришло делаете запрос если нет делаете что там вам надо еще
либо сами додумайте либо просто дайте код для доводки
как тут угадаеш что там у вас
 
 Top
OrmaJever Модератор
Отправлено: 07 Сентября, 2011 - 16:02:54
Post Id



Активный участник


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


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




ну так добавьте туда where
PHP:
скопировать код в буфер обмена
  1. $r1 = empty($_GET['name']) ? '' : "WHERE name='{$_GET['name']}'";
  2. mysql_query("SELECT * FROM base1 $r1", $db);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
alexey11
Отправлено: 07 Сентября, 2011 - 19:07:04
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Сент. 2011  


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




... у меня 4 передаваемых параметра. Но из них , к примеру, 2 может не быть или быть всего 1, а может даже не одного (в таком случае просто выводится вся база)! И первый тоже не всегда может быть, потому просто добавить where не получиться, так же где то нужно передавать и AND ...
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Сентября, 2011 - 19:29:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




PHP:
скопировать код в буфер обмена
  1. $arr = array("field1 = 'hfjfk'","field2 = 'nhgfjfk'","field3 = 767685");
  2. $where = (count($arr) > 0) ? " WHERE ".implode(" AND",$arr) : "";
 
 Top
OrmaJever Модератор
Отправлено: 07 Сентября, 2011 - 21:06:26
Post Id



Активный участник


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


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




alexey11 ну вот эти 4 параметра должны както передаватся в скрипт, предположим что это масив из $_GET['name'].
Пошагово зделаем наш запрос
PHP:
скопировать код в буфер обмена
  1. $where = ''; // создаём пустую строку с условием
  2. if(sizeof($_GET['name']) > 0) { // если есть хоть один параметр добавляем их к переменой
  3. $where .= ' WHERE '; //добавляем к этой строке where
  4. $i = 0; // просто переменя для определения первой итерации цыкла
  5.   foreach($_GET['name'] as $k =>  $v) { // перебираем масив, цыклов будет столько сколько параметров
  6.     if($i++ != 0) $where .= ' AND '; // если это не первая итерация цыкла то делаем $i+1 и добавляем в строку AND  
  7.     $where .= " `$k` = '$v'"; // добавляем к строке WHERE параметры
  8.   }
  9. }
  10. echo $where; // теперь $where можно добавлять в запрос, если нет параметров то он будет пустой.

это не самая идеальная схема но для понимания сойдёт Подмигивание


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
alexey11
Отправлено: 07 Сентября, 2011 - 21:53:06
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Сент. 2011  


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




Спасибо за помощь.

Ну а если этот пример, то каким образом можно передать в этот массив данные?
DeepVarvar пишет:
$arr = array("field1 = 'hfjfk'","field2 = 'nhgfjfk'","field3 = 767685");
$where = (count($arr) > 0) ? " WHERE ".implode(" AND",$arr) : "";

У меня не получается... Недовольство, огорчение
Даже кавычки правильные сохранить не получается. Если просто вписываю в него, то работает, а сам факт передачи не получается. Если можно, помогите пожалуйста и с этой частью.
 
 Top
alexey11
Отправлено: 08 Сентября, 2011 - 22:28:14
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Сент. 2011  


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




Спасибо за помощь.

Все получилось.
 
 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