Всем привет. У меня есть код проверяющий наличие POST-переменных. Как можно его уменьшить, оптимизировав, чтобы он был более компактным но выполнял ту же задачу. PHP: <?php if ( (isset($_POST['login']) && $_POST['login']!='') && (isset($_POST['currency']) && $_POST['login']!='') && (isset($_POST['country']) && $_POST['login']!='') && (isset($_POST['url_notify']) && $_POST['login']!='') && (isset($_POST['order']) && $_POST['login']!='') && (isset($_POST['description']) && $_POST['login']!='') && (isset($_POST['sum']) && $_POST['login']!='') && (isset($_POST['name']) && $_POST['login']!='') && (isset($_POST['products']) && $_POST['login']!='') && (isset($_POST['Receipt']) && $_POST['login']!='') && (isset($_POST['sign']) && $_POST['login']!='') ) { echo 'Успех'; } Заранее спасибо.
Чую дичь лютую. Не понимаю, почему всё время login на неравенство пустой строки проверяется, в отдельное условие вынес бы. А так перебрать в цикле названия пост-переменных, и да, за тебя писать не буду. Совет -- воспользуйся сторонним валидатором, там ещё лимиты на кол-во символов можно будет передавать...
Это опечатка, простите. Нет возможности поправить первое сообщение. Вот так правильно: HTML: <?php if ( (isset($_POST['login']) && $_POST['login']!='') && (isset($_POST['currency']) && $_POST['currency']!='') && (isset($_POST['country']) && $_POST['country']!='') && (isset($_POST['url_notify']) && $_POST['url_notify']!='') && (isset($_POST['order']) && $_POST['order']!='') && (isset($_POST['description']) && $_POST['description']!='') && (isset($_POST['sum']) && $_POST['sum']!='') && (isset($_POST['name']) && $_POST['name']!='') && (isset($_POST['products']) && $_POST['products']!='') && (isset($_POST['Receipt']) && $_POST['Receipt']!='') && (isset($_POST['sign']) && $_POST['sign']!='') ) { echo 'Успех'; } Спасибо что заметили --- Добавлено --- Получилось так: PHP: <?php $fields = ['login', 'currency', 'country', 'url_notify', 'order', 'description', 'sum', 'name', 'products', 'Receipt', 'sign']; $valid = true; foreach ($fields as $field) { $valid = $valid && isset($_POST[$field]) && $_POST[$field] != ''; } if ($valid) { echo 'Успех'; } А можно ли еще больше оптимизировать или это предел?
Логика кода такая - если хотя бы для одного поля $valid = false, то результа false. Поэтому можно сделать так PHP: foreach ($fields as $field) { $valid = isset($_POST[$field]) && $_POST[$field] != ''; if(!$valid ) break; } Удачи!
Дополню PHP: $postKeys = ['login', 'currency', 'country', 'url_notify', 'order', 'description', 'sum', 'name', 'products', 'Receipt', 'sign']; $allSet = true; foreach ($postKeys as $key) { if (!isset($_POST[$key]) || $_POST[$key] == '') { $allSet = false; break; } } if ($allSet) { echo 'Успех'; }
@Survivor, код верный, но перестаньте переменные "allSet"-ами называть, выше верное название, "valid" или там "isValid" )))
PHP: $options = array_fill_keys ( ['login', 'currency', ... ], FILTER_DEFAULT ); if ( filter_input_array ( INPUT_POST, $options ) ) успех;