Доброе утро! поискал, почитал но решения пока не нашел прошу совета. Суть в следующем: есть большой набор показателей по которым должна делаться выборка из БД. пользователю предлагается форма для ввода пороговых значений, содержащая, в том числе и чекбоксы. Если все поля заполняются, то проблем нет, но! идея в том, что не все показатели могут быть востребованы... то есть если никакое значение не указано, или "галочка" в чекбоксе не стоит, то и выборка по этим показателям не делается... спасибо! PHP: <div align="center"> <form name="filvybor" method="post" action=""> <p> Выберите критериии филиала по численности персонала </p> <p> от <input name="ot" type="text" id="search"> до <input name="do" type="text" id="search"> </p> <p> Выберите критериии филиала по МС. </p> <p> от <input name="otms" type="text" id="search"> до <input name="doms" type="text" id="search"> </p> <p> Выберите критериии филиала по менеджерам </p> <p> от <input name="otmen" type="text" id="search"> до <input name="domen" type="text" id="search"> </p> <p> Контракт? (поставить галочку) <input type="checkbox" name="ma" value="1" /> </p> <input name="Submit" type="submit" value="Показать"> </form> <table align="center" border="1"> <?php $ot = $_POST['ot']; $do = $_POST['do']; $otms= $_POST['otms']; $doms = $_POST['doms']; $otdep = $_POST['otmen']; $dodep = $_POST['domen']; $ma=$_POST['ma']; if ($ot=='') { echo ""; } else { echo "Перечень филиалов: <br> с численностью персонала от ".$ot, " чел. до ".$do." чел. <br> с численностью МС от ".$otms, " чел. до ".$doms." чел. <br> с численностью менеджеров от ".$otmen, " чел. до ".$domen." чел. <br>"; $result = mysql_query("SELECT a.uid, b.uid ,a.name, a.nas, a.ms, a.men, a.ma, b.dohod, b.rashod, b.dolyasob FROM (test AS a INNER JOIN budgettest as b ON a.uid=b.uid) WHERE a.nas>$ot and a.nas<$do AND a.ms>$otms AND a.ms<$doms and a.men>$otmen and a.men<$domen and a.ma=$ma ORDER BY a.nas LIMIT 5" ); $n= mysql_num_rows($result); echo ('<tr>'); echo ('<td> <p align="center"> UID </p></td>'); echo ('<td> <p align="center"> Наименование филиала </p></td>'); echo ('<td width="150px"> <p align="center">'); echo $n; echo ('</p></td>'); echo ('<td> <p align="center"> Кол-во МС </p></td>'); echo ('<td> <p align="center"> Кол-во менеджеров </p></td>'); echo ('<td> <p align="center"> Контракт? </p></td>'); $daa = mysql_fetch_array( $result); if ($daa[6]==1); { $mama="Контракт"; } if ($daa=='') { echo "<br>Филиалов не существует"; } else { do { printf (" <tr height='10px' align='center'> <td width='100'>%s</td> <td width='300'>%s</td> <td width='100'>%s</td> <td width='100'>%s</td> <td width='100'>%s</td> <td width='100'>%s</td> </tr> ", $daa[0], $daa[2], $daa[3],$daa[4],$daa[5],$mama); } while ($daa = mysql_fetch_array( $result)); } } ?> </table> П.с. за код сильно не ругайте еще начинаем только... за любые советы спасибо!
http://www.php.ru/forum/viewtopic.php?t=31285 и ещё я бы не советовал курсы Попова, как и конструкции do-while, printf
каюсь но все же курс дал старт, многое получилось сделать, но и многому через форумы учиться приходится! спасибо большое! все работает... единственное с чекбоксом пока не получается
собственно вот с чем столкнулся... <?php $ot2 = $_POST['ot2']; $do2 = $_POST['do2']; $otms2= $_POST['otms2']; $doms2 = $_POST['doms2']; $otdep2 = $_POST['otmen2']; $dodep2 = $_POST['domen2']; $ma2=$_POST['ma2']; if ($ot2=='') { echo ""; } else { echo ..... Раньше у меня была проверка на первое значение, чтобы оно обязательно было введено, но теперь если вдруг выбирается поиск по другим критериям? if (empty($ot2,$do2,....$domen2) так нельзя... в массив тоже пробовал... не хватает знаний((( цель: проверить, если форма чистая, чтобы при загрузке страницы выдалась чистая форма... [/php]
Вообще перестал показывать... мож не туда вставил? if (empty($ot2) || empty( $do2)|| empty( $otms2)|| empty( $doms2)|| empty( $otdep2)|| empty( $dodep2)) { echo ''; } else {
а если форма будет из 40-50 переменных? я планирую большую... как их все разом проверить? или тут вообще другой алгоритм?
|| заменил на and - заработало... и все же - а если 40-50 переменных? можно как-нить через массив? хотя из все равно все перечислять....
я обычно делаю с помощью массивов. Например, для получения условия на выборку данных PHP: $cond=array(); if(isset($ot!='')) { $cond[]="a.nas>$ot": } if(isset($do!='')) { $cond[]="a.nas<$do": } if(isset($otms2!='')) { $cond[]="a.ms>$otms2": } if(isset($doms !='')) { $cond[]="a.ms<$doms ": } ..... if(sizeof($o)>0) { $fullcondition=implode(' and ', $cond); $result = mysql_query("SELECT a.uid, b.uid ,a.name, a.nas, a.ms, a.men, a.ma, b.dohod, b.rashod, b.dolyasob FROM (test AS a INNER JOIN budgettest as b ON a.uid=b.uid) WHERE $fullcondition ORDER BY a.nas LIMIT 5" ); ........ } else { //форма чистая }
большое спасибо за помощь!!! очень продвинулся за сегодня... но вот новый гвоздь... SELECT a.uid, a.tip, b.uid ,a.name, a.nas, a.ms, a.dep, a.ma, b.dohod, b.rashod, b.dolyasob FROM (geo_test AS a INNER JOIN geo_budgettest as b ON a.uid=b.uid) WHERE 1=1 AND a.dep > '34' AND a.tip= '2' AND a.tip= '3' ORDER BY a.nas LIMIT 50 вот какой получается пока select путем наращивания... AND a.tip= '2' AND a.tip= '3' - это же неверно? должно быть по идее ИЛИ (OR)??? тогда у меня не получается связать... я не знаю какие 4 варианта будут выбраны... if ($_POST['go']==2){ $where = $where . " AND a.tip= '{$_POST['go']}'"; $text=$text. "<br> ГО"; } if ($_POST['mr']==3){ $where = $where . " AND a.tip= '{$_POST['mr']}'"; $text=$text. "<br> МР"; } if ($_POST['gp']==4){ $where = $where . " AND a.tip= '{$_POST['gp']}'"; $text=$text. "<br> ГП"; } if ($_POST['sp']==5){ $where = $where . " AND a.tip= '{$_POST['sp']}'"; $text=$text. "<br> СП"; } спасибо...