В скрипт передаётся переменная $k. Она используется для запроса Код (Text): SELECT * FROM $table1 WHERE kto='$k' and date between '$t1' and '$t1' ORDER BY ID Как в этом случае сделать чтобы kto мог быть - ВСЕ (или просто не учитывать это условие kto='$k')?
PHP: $where="date between '$t1' and '$t1'"; if ($k!='all') $where.=" AND kto='$k' "; $sql="SELECT * FROM $table1 WHERE $where ORDER By ID";
Метод Олега не осилил. Делал как подсказал armadillo. А если таких параметров как $k='all' десяток ? То есть например есть переменные $k , $k2, $k3, $k4, ..., $k9 каждая из которых может быть равна all.
PHP: $where0=" date between '$t1' and '$t1' "; $where =array(); $where[]=$where0; foreach ($kto as $k) { if ($k!='all') $where[]=" kto= ".$k." "; } $sql="SELECT * FROM $table1 WHERE ".implode(' AND ',$where)." ORDER BY ID"; в методе Олега вместо $kto!="all" применяется isset($kto)
PHP: <?php function sql_protect($var) { return "'".mysql_escape_string(get_magic_quotes_gpc()?stripslashes($var):$var)."'" ; } function sql_and_where($array) { foreach($array as $key => $val) { $val = sql_protect($val); $cond[] = " `$key` = $val "; } return implode('and',$cond); } $data = array( 'date' => '12/11/2002', 'id' => '44', 'tag' => 'flipper', ); $sql = 'select * from table where '.sql_and_where($data); echo $sql; ?>
После доработки под мои нужды получился следующий рабочий код : PHP: <?php function sql_protect($var) { return "'".mysql_escape_string(get_magic_quotes_gpc()?stripslashes($var):$var)."'" ; } function sql_and_where($array) { foreach($array as $key => $val) { $val = sql_protect($val); $cond[] = " `$key` = $val "; } return implode('and',$cond); } $t3='2008-02-01'; $t4='2008-03-20'; $k='all'; $k2='222'; //$k3='333'; $k4='444'; $k5='all'; //$k6='666'; $k7='all'; $k8='all'; $k9='999'; $data = array(); if(!$k or $k=='all') {} else {$data['kto']= $k;} if(!$k2 or $k2=='all') {} else {$data['kto2']= $k2;} if(!$k3 or $k3=='all') {} else {$data['kto3']= $k3;} if(!$k4 or $k4=='all') {} else {$data['kto4']= $k4;} if(!$k5 or $k5=='all') {} else {$data['kto5']= $k5;} if(!$k6 or $k6=='all') {} else {$data['kto6']= $k6;} if(!$k7 or $k7=='all') {} else {$data['kto7']= $k7;} if(!$k8 or $k8=='all') {} else {$data['kto8']= $k8;} if(!$k9 or $k9=='all') {} else {$data['kto9']= $k9;} $sql = 'select * from table where '.sql_and_where($data).' and date between \'$t3\' and \'$t4\' ORDER BY date '; echo $sql; ?> У переменных k-k9 может быть 3 состояния - 1 переменная не определена, 2 переменная = all, 3 переменная имеет некое значение. Сделал как смог. Не бейте
Чем больше вникаю , тем больше вопросов. Обьясните пожалуйтса для чего нужна функция function sql_protect ? И как сделать при if((!$k2 or $k2=='all') and (!$k3 or $k3=='all')) запрос выглядел следующим образом select * from table where (`kto` = '$k' or 'komu'='$k') and date between '2008-02-01' and '2008-03-20' ORDER BY date ? Пробовал передавать в массив PHP: $data['kto']= 'izm' ; и в массиве PHP: foreach($array as $key => $val) { if($val=='izm'){$cond[] = " `$key` = '$k' ";}else{ //$val = sql_protect($val); $cond[] = " `$key` = '$val' "; } } проверять переменную и формировать другое значение , но не получается. Что-то я коряво делаю. $k в массиве не видно.