С некоторых пор подчиняюсь прихотям NetBeans и избегаю писать прямое обращение к $_POST, вместо этого пишу что-нибудь типа Код (PHP): $email = filter_input(INPUT_POST, 'req_email', FILTER_SANITIZE_EMAIL) ?: ''; но вот понадобилась форма со списком значений, которые я оформил как <input name="email[]"…> В переменной $_POST я прекрасно получаю все строки, красиво воспользоваться filter_input без упоминания $_POST я не могу Дорогие профи, помогите!
Вот здесь немного не понятно Добавлено спустя 3 минуты 35 секунд: а, все, понял... Добавлено спустя 30 секунд: нет, не понял
Не понял, из-за особенностей редактора вы не используете суперглобальные переменные в своей программе? А INPUT_POST - вообще константа, что-ли? Вроде макросы в php отсутствуют... Ну скопируйте $_POST в другую переменную....
http://php.ru/manual/book.filter.html а еще конкретнее: http://php.ru/manual/function.filter-input-array.html там снизу хорошие примеры
Про редактор это была шутка в которой есть только доля шутки. Я правда почти на 100% могу избавиться от упоминания суперглобалс в своих контроллерах. Спасибо за моральную поддержку, очевидно с filter_input не знакомы и поэтому суть задачи непонятна Я знаю, что [vs] использует, подожду когда он заметит. Добавлено спустя 7 минут 53 секунды: Возможно filter_input_array и решает проблему, возможно я просто запарился и туплю. Прошу показать "на примерах": у меня куча email-ов с общим именем инпута…
Код (PHP): $req_desc = array( 'email' => array('filter.sanitize' => FILTER_SANITIZE_EMAIL) ); $post = filter_input_array(INPUT_POST, $req_desc); Добавлено спустя 4 минуты 55 секунд: Не, походу мой пример не канает, ждем [vs]... Добавлено спустя 4 минуты 5 секунд: А, ну да, почти верно... Код (PHP): $req_desc = array( 'email' => FILTER_SANITIZE_EMAIL ); $req = filter_input_array(INPUT_POST, $req_desc); Вот так по идее должно быть идентично вышей записи filter_input, только для массивов...
dapperkop, нет, твой пример наверное будет работать для единственного <input name="email">, но не для пачки <input name="email[]"> <input name="email[]"> <input name="email[]"> чуешь разницу? Я закончил тупить и получил почти то, что хотел: Код (PHP): <!doctype html> <html> <head> <meta charset="utf8"> <title>Validate email array from POST</title> </head> <body> <form method="post"> <input type="text" name="email[]" value=""><br> <input type="text" name="email[]" value=""><br> <input type="text" name="email[]" value=""><br> <input type="text" name="email[]" value=""><br> <input type="text" name="email[]" value=""><br> <input type="submit" name="submit" value=" Send "><br> </form> </body> </html> <?php $args = array( 'email' => array( 'filter' => FILTER_VALIDATE_EMAIL, 'flags' => FILTER_REQUIRE_ARRAY, ) ); $filtered = filter_input_array(INPUT_POST, $args); echo '<pre>$_POST = '.var_export($_POST, true).';</pre>'; echo '<pre>$filtered = '.var_export($filtered, true).';</pre>'; тестовый прогон: Код (Text): $_POST = array ( 'email' => array ( 0 => 'alfa@beta.com', 1 => 'alfa.beta.com', 2 => 'foo@bar.baz.com', 3 => '', 4 => 'sdf gh', ), 'submit' => ' Send ', ); $filtered = array ( 'email' => array ( 0 => 'alfa@beta.com', 1 => false, 2 => 'foo@bar.baz.com', 3 => false, 4 => false, ), ); отфильтрованы годные емайлы, все остальные false. нужные мне данные лежат в $filtered['email']