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
Форумы портала PHP.SU :: Версия для печати :: Передача данных по нескольким полям.
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Передача данных по нескольким полям.

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

1. Altynayka - 05 Марта, 2008 - 10:14:55 - перейти к сообщению
Здравствуйте.
Подскажите пожалуйста как мне осуществить след. выборку из таблицы:
Есть несколь input textov, при нажатии на кнопку происходит выполнения action="script.php"
Проблема в том, что у меня таких полей 5
и нужно значения, которые передаются в переменные сравнить со значениями, хранящимися в БД.
Я написала запрос.
Но такое ощущение, что он запрос игнорирует.
Я передаю переменные, он отображает все строки из таблицы, даже если инпут тексты пустые. Или когда все поля в форме пусты , все равно отображаются все поля из БД.
Что делать? Очень нужна помощь! Огорчение
2. Dastar - 05 Марта, 2008 - 10:41:10 - перейти к сообщению
Я предвижу... Э...
А можно сначала на скрипт посмотреть?
3. EuGen - 05 Марта, 2008 - 11:02:35 - перейти к сообщению
Ничего не понял, попробуйте еще раз.
4. Altynayka - 05 Марта, 2008 - 12:05:55 - перейти к сообщению
есть несколько полей для ввода данных
потом я их передаю через переменные
$nomer=$_GET['cat_nomer'] ;
$name=$_GET['cat_name'];
потом идет запрос:
SELECT nomer ,name FROM note

where nomer like '.$nomer
OR slujba.name_slujba like '.$name;
вот
я заполняю не все поля (например только первую), такая выборка.
Но он мне отображает не конкретные поля, соответсвующие значению переданному,
а все поля.
5. EuGen - 05 Марта, 2008 - 12:26:48 - перейти к сообщению
А почему это у Вас в запросе в условии WHERE присутствует некая таблица slujba, хотя ее нет в выражении FROM? Такой запрос не выполнится из-за ошибки.
6. valenok - 05 Марта, 2008 - 12:45:40 - перейти к сообщению
7. Altynayka - 06 Марта, 2008 - 03:53:22 - перейти к сообщению
EuGen пишет:
А почему это у Вас в запросе в условии WHERE присутствует некая таблица slujba, хотя ее нет в выражении FROM? Такой запрос не выполнится из-за ошибки.


На названия не обращайте внимания.

SELECT nomer ,name FROM note
where nomer like '.$nomer
OR name like '.$name;
8. RomAndry - 06 Марта, 2008 - 08:30:30 - перейти к сообщению
CODE (text):
скопировать код в буфер обмена
  1.  
  2. SELECT `nomer` ,`name` FROM `note`  
  3. WHERE `nomer` LIKE "'.$nomer.'"
  4. OR `name` LIKE "'.$name.'"';
  5.  
9. Altynayka - 06 Марта, 2008 - 08:42:42 - перейти к сообщению
RomAndry пишет:
CODE:
скопировать код в буфер обмена

SELECT `nomer` ,`name` FROM `note`
WHERE `nomer` LIKE "'.$nomer.'"
OR `name` LIKE "'.$name.'"';


спасибо!!!
10. Altynayka - 10 Марта, 2008 - 04:38:16 - перейти к сообщению
А как мне сделать не строгую выборку по несокльким полям? Я сделала след.:
SELECT `nomer` ,`name` FROM `note`
WHERE `nomer` LIKE "'.%$nomer%.'"
OR `name` LIKE "'.%$name%.'"';

Работает хорошо, если все поля для ввода заполнены.Но если ,допустим, я одно из полей оставлю пустым, то отображаются все строки из таблицы.
Как мне исправить?
11. EuGen - 11 Марта, 2008 - 10:05:13 - перейти к сообщению
Примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $rgWheres=array();
  4. if ($name)
  5.    $rgWheres[]="name LIKE '%".addslashes($name)."%'";
  6. if ($nomer)
  7.    $rgWheres[]="nomer LIKE '%".addslashes($nomer)."%'";
  8. $strWhere=join(" OR ", $rgWheres);
  9. if ($strWhere)
  10.    $strWhere=" WHERE ".$strWhere;
  11. mysql_query("SELECT `nomer` ,`name` FROM `note` $strWhere");
  12. ?>
  13.  
12. Altynayka - 11 Марта, 2008 - 11:04:36 - перейти к сообщению
EuGen Спасибо!!!!!!!!!!!!! большое все классно получилось!
Можете еще подсказать, как мне сделать, чтобы регистры не учитывались.
13. scuter - 11 Марта, 2008 - 11:26:45 - перейти к сообщению
я в этом случае пользуюсь,
REGEXP

CODE (text):
скопировать код в буфер обмена
  1. SELECT * FROM `content` WHERE `text` REGEXP CONVERT( _utf8 'bla bla bla' USING utf8 ) COLLATE utf8_general_ci LIMIT 0 , 30
14. EuGen - 11 Марта, 2008 - 11:56:40 - перейти к сообщению
В данном случае можно проще дело решить. Для REGEXP СУБД должна много чего сделать, что не оправданно, как мне кажется, в этом случае ("Из пушки по воробьям"). Предлагаю сделать так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $rgWheres=array();
  4. if ($name)
  5.    $rgWheres[]="LOWER(name) LIKE '%".strtolower(addslashes($name))."%'";
  6. if ($nomer)
  7.    $rgWheres[]="LOWER(nomer) LIKE '%".strtolower(addslashes($nomer))."%'";
  8. $strWhere=join(" OR ", $rgWheres);
  9. if ($strWhere)
  10.    $strWhere=" WHERE ".$strWhere;
  11. mysql_query("SELECT `nomer` ,`name` FROM `note` $strWhere");
  12. ?>
  13.  

Любопытно, что по-умолчанию регистры как раз не учитываются.
15. Altynayka - 12 Марта, 2008 - 09:45:25 - перейти к сообщению
СПАСИБО БОЛЬШОЕ !!! Радость EuGen

 

Powered by ExBB FM 1.0 RC1