Доступ к массиву полученого от массива checkbox

vl

Новичок
sahnovich
Fatal error in http://phpclub.ru/talk/showthread.php?postid=701117#post701117 on line 3
 

sahnovich

Новичок
PHP:
$sql='SELECT * FROM product where ';
for($i=0;i<count($_REQUEST['categ']);$i++)
{
	
$where.='id_categ='.$_REQUEST['categ'][$i].' or ';
}		
print ($sql.=$where);
Сейчас выводит вот такую вот шляпу:
Notice: Undefined variable: where in z:\home\ultracomp\www\select_prod.php on line 14
[Денвер: показать возможную причину ошибки]SELECT * FROM product where id_categ=1 or id_categ=2 or id_categ=3 or id_categ=4 or
 

vl

Новичок
перед тем как выполнять какие-либо операции с переменной её нужно объявить (undefined - неопределенная)
 

Фанат

oncle terrible
Команда форума
sahnovich
во-первых, про $where я прогнал.
и эта переменная, как правильно заметил vl, не нужна.
можно её убрать и оставить по-старому $sql.= внутри цикла.
а вот почему код, коорый ты здесь написал, у меня выводит совсем не такую ошибку, а ошибку синтаксическую - для меня загадка
 

sahnovich

Новичок
PHP:
for($i=0;$i<count($_REQUEST['categ']);$i++){
						
							 $sql.='id_categ='.$_REQUEST['categ'][$i].' or ';
						}		
							
						
						print ($sql);
-~{}~ 06.03.07 21:58:

это вроде все нормально показывает так как надо

-~{}~ 06.03.07 21:58:

Спасибо мужики!!!!!!!!!!!!!!!!!!!!!!!
 

sahnovich

Новичок
Дай бог вам здоровья и баб хороших ;)

-~{}~ 06.03.07 22:00:

Фанат
Особую благадорность выражаю тебе.

-~{}~ 06.03.07 22:02:

Фанат

Ты там кажеться говорил что можешь показать как с IN круто сделать.
 

Фанат

oncle terrible
Команда форума
да погоди ты. ещё не закончили.
во-первыйх тебе ещё надо отрезать or с конца.
во-вторых, вместо for лучше использовать foreach. получается в три раза короче:
foreach(($_REQUEST['categ']) as $val){
$sql.='id_categ='.$val.' or ';
}
print ($sql);
в-третьих, и в самых главных, надо ещё запрос защищать.
для чего убедиться, что в $_REQUEST['categ'] лежат только цифры.
для этого перед этим кодом надо написать строчку
$_REQUEST['categ']=array_map("intval",$_REQUEST['categ']);
 

vl

Новичок
Фанат
по идее, array_map - лишний проход по массиву. Можно intval и в цикле делать.
 

Фанат

oncle terrible
Команда форума
sahnovich
покажи, как убрал.
а то ты "уже сделал" не раз писал.

vl
можно, но для implode оно как раз в таком виде понадобится =)
 

sahnovich

Новичок
PHP:
elseif(empty($_REQUEST['proiz']) )
						{
						$sql='SELECT * FROM product where ';
						
						for($i=0;$i<count($_REQUEST['categ']);$i++){
						
							 $sql.='id_categ='.$_REQUEST['categ'][$i].' or ';
						}		
							
						
						$resul=substr($sql,0,-3);
						print($resul);
 

Фанат

oncle terrible
Команда форума
ну, неплохо.
Хотя я бы на твоем месте сделал через foreach.
ну да ладно.
как ты правильно заметил, есть альтернативный синтаксис - IN
для которого мы должны получить строку, состоящую из элементова массива, разделенных запятой.
сделать строку из массива нам помогает функция [m]implode[/m]()
 
Сверху