привет всем заглянувшим=) не соображу чет как сделать - суть с формы приходит штук 20..30..40 разных $_GET,G_POST запросов (условно - формы разные ).. задача - проверить в php какие $_GET,G_POST запросы я отработал а какие нет я понимаю что это надо через фореач .. но не могу сообразить как .. вот что я сейчас имею Код (PHP): $sWhere=" WHERE "; if ($_GET['rayon']!='') {$sWhere .= " ( \"rayon\" ILIKE '%".pg_escape_string ($_GET['rayon'])."%' or \"KRN\" ILIKE '%".pg_escape_string ($_GET['rayon'])."%' AND ";} if ($_GET['strit']!='') {$sWhere .= " ( \"STRIT\" = '".pg_escape_string ($_GET['strit'])."' or \"STRIT_UG\" = '".pg_escape_string ($_GET['strit'])."' or \"KUN\" = '".pg_escape_string ($_GET['strit'])."' OR \"KUNU\" = '".pg_escape_string ($_GET['strit'])."' ) AND ";} и тд и тп.. т.е. я просто набираю WHERE так как мне понять какие GET или POST я пропустил ? Добавлено спустя 7 минут 23 секунды: ээ кажется я немного непонятно написал =) форма делается отдельно - сначала рисую ее со всеми полями .. потом уже ее начинаю обрабатывать в php. т.е. на форме может быть 20 полей а php просматривает только 19 - как для себя сделать проверку что именно вот такое поле по get пришло но оно нигде не используется
Всё равно непонятно написали Направляйте разные формы на разные скрипты. Вы же знаете имена полей своей формы?
с 1 формы приходит много полей - чтото типа такого $_GET['ARXNOM'] $_GET['rayon'] $_GET['strit'] $_GET['dom'] $_GET['gorod'] ... в php надо собрать из всех этих полей where запрос и не пропустить ни 1 поля .. а вдруг я пропущу 1 .. то будет неправильный запрос .. способ как я where собираю я указал выше. ну например я не обработал $_GET['gorod'] = тогда в запросе не будет учитываться город.. как можно проверить - все ли приходящие поля обрабатываются.. Добавлено спустя 5 минут 26 секунд: пока у меня только 1 мысль ..идиотская в каждом if добавить unset($_GET['rayon']) - имя в get менять естесно .. а в конце просмотреть фореачем Get и выдать что остались вот такие переменные.
я проверяю человеческий фактор - меня могут по работе паралельно отвлечь и я забуду обработать какойто get потом пользователь начнет работать .. и окажется что пропуск одной из строчек повлияет на выборку .. ну представь что база по городу .. а я забыл добавить в условие улицу - выдаст ВСЕ дома на всех улицах но с таким номером дома .. че произойдет - пользователь напишет кляузу что я плохо работаю.. ведь в форме то поле есть, а выдает по всем улицам .. непорядок
Хм... Что-то тёмная затея. Ну может, если действительно уж очень много, написать примерно так. Например, ваша таблица называется a_table. И я предполагаю mysqli для баз Код (PHP): // на всякий случай получим список полей. МОжно сделать один раз, а потом просто сохранить куда-нибудь массив $res = $db->query("show fields from a_table"); $fields = array (); while ($f = $res->fetch_assoc()) { $fields[] = $f["Field"]; } $res->free(); $where = ''; foreach ($_REQUEST as $name=>$value) { if (in_array($name, $fields)) { if ($where != '') $where .= ' and '; $where .= sprintf("(`%s` = '%s')", $name, $db->escape_string($value)); } } Так точно ничего не пропустите, но и лишнего не вставите в запрос. Но, ИМХО, это всё лишнее. Хотя не знаю вашей задачи.
привязаться к табличке мысль интересная . но далеко не все поля используются в запросе.. пока я сделал так Код (PHP): if ($_GET['rayon']!='') {$sWhere .= " ( \"rayon\" ILIKE '%".pg_escape_string ($_GET['rayon'])."%' or \"KRN\" ILIKE '%".pg_escape_string ($_GET['rayon'])."%' AND ";$_GET['rayon']='';} if ($_GET['strit']!='') {$sWhere .= " ( \"STRIT\" = '".pg_escape_string ($_GET['strit'])."' or \"STRIT_UG\" = '".pg_escape_string ($_GET['strit'])."' or \"KUN\" = '".pg_escape_string ($_GET['strit'])."' OR \"KUNU\" = '".pg_escape_string ($_GET['strit'])."' ) AND ";$_GET['strit']='';} всеравно все руками обрабатываю (( нельзя автоматизировать .. буду в конце добавлять очистку этой $_GET а потом foreach ( $_GET as $key=>$value){ if ($value !=''){ echo "\r\t необработано:".$key; } } спасибо что попробовали разобраться в моих бредовых мыслях а в данной форме реально много полей - 1 страница - 27 строк ( некоторые - чекбоксы) 2 страница формы - 21 строка .. форму с Access переписывает 1 человек .. а в php набирает уже другой .. иначе сдохнеш ее делать =)
Ну и используйте ради бога. Проверка по таблице стоит, чтоб вы лишнего не вставили из REQUEST в запрос where (там ещё бывает, к примеру, кнопка submit, может ещё фигня какая-нибудь). А если будет меньше значений, чем в таблице, ничего страшного. Ведь я же цикл делаю не по $fields, а по $_REQUEST. Работать всё равно будет. Хотя если у вас такие условия, как вы показали, то проще ручками, конечно. Хотя я бы поставил, к примеру, селекты, тогда можно будет проверять только на равенство, без ILIKE
ну заведи массив, для каждой формы, со списком полей. исходя из массива формируй форму и обработку данных(формирование запросов) с одноименными функциями(с префиксами например). если будет добавлено новое поле то оно автоматом появится в форме. и тоже с функцией обработчиком, если её не будет то скрипт сразу выдаст ошибку, и ты быстренько добавишь нужную функцию для формирования запроса...