За последние 24 часа нас посетил 37851 программист и 1283 робота. Сейчас ищут 1052 программиста ...

проверка $_REQUEST

Тема в разделе "Прочие вопросы по PHP", создана пользователем Slavka, 11 ноя 2013.

  1. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    привет всем заглянувшим=)
    не соображу чет как сделать - суть с формы приходит штук 20..30..40 разных $_GET,G_POST запросов (условно - формы разные )..
    задача - проверить в php какие $_GET,G_POST запросы я отработал а какие нет
    я понимаю что это надо через фореач .. но не могу сообразить как ..
    вот что я сейчас имею
    Код (PHP):
    1. $sWhere=" WHERE ";
    2.     if ($_GET['rayon']!='')   {$sWhere .= " ( \"rayon\" ILIKE '%".pg_escape_string ($_GET['rayon'])."%' or \"KRN\" ILIKE '%".pg_escape_string ($_GET['rayon'])."%' AND ";}
    3. 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 пришло но оно нигде не используется
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Всё равно непонятно написали :)

    Направляйте разные формы на разные скрипты. Вы же знаете имена полей своей формы?
     
  3. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    с 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 и выдать что остались вот такие переменные.
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а зачем проверять самого себя?
    вы себе не доверяете?
    непонятно зачем вообще это нужно.
     
  5. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    я проверяю человеческий фактор - меня могут по работе паралельно отвлечь и я забуду обработать какойто get потом пользователь начнет работать .. и окажется что пропуск одной из строчек повлияет на выборку .. ну представь что база по городу .. а я забыл добавить в условие улицу - выдаст ВСЕ дома на всех улицах но с таким номером дома .. че произойдет - пользователь напишет кляузу что я плохо работаю.. ведь в форме то поле есть, а выдает по всем улицам .. непорядок
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Хм... Что-то тёмная затея. Ну может, если действительно уж очень много, написать примерно так. Например, ваша таблица называется a_table. И я предполагаю mysqli для баз

    Код (PHP):
    1. // на всякий случай получим список полей. МОжно сделать один раз, а потом просто сохранить куда-нибудь массив
    2. $res = $db->query("show fields from a_table");
    3. $fields = array ();
    4. while ($f = $res->fetch_assoc()) {
    5.    $fields[] = $f["Field"];
    6. }
    7. $res->free();
    8.  
    9. $where = '';
    10.  
    11. foreach ($_REQUEST as $name=>$value) {
    12.    if (in_array($name, $fields)) {
    13.        if ($where != '')
    14.          $where .= ' and ';
    15.        $where  .= sprintf("(`%s` = '%s')", $name, $db->escape_string($value));
    16.    }
    17. }
    18.  
    Так точно ничего не пропустите, но и лишнего не вставите в запрос. Но, ИМХО, это всё лишнее. Хотя не знаю вашей задачи.
     
  7. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    привязаться к табличке мысль интересная . но далеко не все поля используются в запросе..
    пока я сделал так
    Код (PHP):
    1.     if ($_GET['rayon']!='')   {$sWhere .= " ( \"rayon\" ILIKE '%".pg_escape_string ($_GET['rayon'])."%' or \"KRN\" ILIKE '%".pg_escape_string ($_GET['rayon'])."%' AND ";$_GET['rayon']='';}
    2.     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']='';}
    3.  
    всеравно все руками обрабатываю (( нельзя автоматизировать ..
    буду в конце добавлять очистку этой $_GET а потом
    foreach ( $_GET as $key=>$value){
    if ($value !=''){
    echo "\r\t необработано:".$key;
    }
    }

    спасибо что попробовали разобраться в моих бредовых мыслях :D
    а в данной форме реально много полей -
    1 страница - 27 строк ( некоторые - чекбоксы)
    2 страница формы - 21 строка ..
    форму с Access переписывает 1 человек .. а в php набирает уже другой .. иначе сдохнеш ее делать =)
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну и используйте ради бога. Проверка по таблице стоит, чтоб вы лишнего не вставили из REQUEST в запрос where (там ещё бывает, к примеру, кнопка submit, может ещё фигня какая-нибудь). А если будет меньше значений, чем в таблице, ничего страшного. Ведь я же цикл делаю не по $fields, а по $_REQUEST. Работать всё равно будет. Хотя если у вас такие условия, как вы показали, то проще ручками, конечно. Хотя я бы поставил, к примеру, селекты, тогда можно будет проверять только на равенство, без ILIKE
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ну заведи массив, для каждой формы, со списком полей.
    исходя из массива формируй форму и обработку данных(формирование запросов) с одноименными функциями(с префиксами например).
    если будет добавлено новое поле то оно автоматом появится в форме. и тоже с функцией обработчиком, если её не будет то скрипт сразу выдаст ошибку, и ты быстренько добавишь нужную функцию для формирования запроса...