#php #function #post #isset #simplify
#php #функция #Публикация #isset #упростить
Вопрос:
Я кодирую приложение для работы с таблицами для компании, производящей принтеры. Я получаю поток форм. Для каждого отдельного поля ввода я должен проверять, установлены ли $_POST
переменные, и если, то возвращать значение эхом. (В случае некоторой ошибки, например, после ошибки проверки, пользователь не должен повторно вводить всю форму)
Пример кода:
if(isset($_POST['time'])amp;amp;!empty($_POST['time'])){echo $_POST['time'];}
Мне приходилось реализовывать это около сотни раз.
Итак, я попытался придумать какую-нибудь функцию, чтобы сделать это простым и читаемым.
Что-то вроде этого:
function if_post_echo($key, $default = "") {
if(isset($_POST[$key])amp;amp;!empty($_POST[$key])){
echo $_POST[$key];
}else{
echo $default;
}
}
Но это не сработает.
Я попытался передать $_POST
для $key
переменной следующим образом:
if_post_echo($_POST['time'])
function if_request_echo($key, $default = "") {
if(isset($key)amp;amp;!empty($key)){
echo $key;
}else{
echo $default;
}
}
И я также пробовал это:
function if_request_echo($key, $default = null) {
return isset($_REQUEST[$key])amp;amp;!empty($_REQUEST[$key]) ? $_REQUEST[$key] : $default;
}
Без какого-либо разумного результата.
Вопрос:
Как я могу создать функцию, которая ищет необходимую $_POST
переменную и возвращает ее, или, если она не установлена, возвращает пустую строку. И есть ли способ сделать это также для $_GET
и $_REQUEST
? (Или просто дублирует?)
Комментарии:
1. Большую часть времени вам следует избегать $_REQUEST, вопрос безопасности. Используйте $ _GET и $ _POST в зависимости от отправленных данных.
2. Спасибо за ваши комментарии! @David: Я знаю о проблеме с $ _REQUEST, но на этот раз мы не защищены, приложение недоступно из сети. @netcoder: Я не могу вспомнить, почему я настроил это так, но я знаю, что раньше я пробовал !empty самостоятельно без isset, и это приводило к некоторым проблемам.
3. @David как
$_REQUEST
менее безопасно, чем$_GET
or$_POST
? Все они могут быть изменены пользователем для получения значений, которые ваше приложение может не ожидать. Как может,$_COOKIE
если уж на то пошло, которая$_REQUEST
также получает свое значение из.4. Взгляните на межсайтовые подделки Криса Шифлета
5. Ну, на самом деле это не безопасность, а существенное различие между методами POST и GET.
Ответ №1:
Ваша функция тестирования PHP:
<?php
function test_req($key, $default = '') {
if(isset($_REQUEST[$key]) and
!empty($_REQUEST[$key])) {
return $_REQUEST[$key];
} else {
return $default;
}
}
?>
Затем в вашей форме HTML:
<input name="my_field" value="<?php echo htmlentities(test_req('my_field')); ?>" />
$_REQUEST
(linked) — это PHP super global, который содержит параметры запроса POST ( $_POST
) и GET ( $_GET
).
Если вы хотите только фиксировать параметры POST-запроса, тогда это было бы:
<?php
function test_req($key, $default = '') {
if(isset($_POST[$key]) and
!empty($_POST[$key])) {
return $_POST[$key];
} else {
return $default;
}
}
?>
Например.
Ответ №2:
Если у вас большое количество полей, я бы предложил вам также использовать массив значений по умолчанию:
$defaults = array(
"time" => "default",
"name" => "enter name here",
"text..." => "...",
);
$fields = array_filter($_POST) $defaults;
$fields
затем будет содержать список значений формы либо с данными POST, либо с предустановленным значением по умолчанию. Нет isset, понимаете?
страница руководства array_filter в частности: если обратный вызов не предоставлен, все входные данные, равные FALSE, будут удалены. В некоторой степени объясняет работу, лежащую в основе этого решения.
Комментарии:
1. Мне нравится простота этого подхода.
2. Спасибо; также за добавление ссылки! (Это действительно работает аналогично
empty()
в этом случае.)
Ответ №3:
Это должно сработать:
function if_post_echo($key, $default = ''){
if(isset($_POST[$key]) AND !empty($_POST[$key]){
echo $_POST[$key];
}
echo $default;
}
Если у вас возникли проблемы, я рекомендую вам попробовать var_dump($_POST)
или print_r($_POST)
посмотреть, все ли было правильно размещено.
Ответ №4:
Просто к сведению, это избыточно:
isset($_POST[$key]) amp;amp; !empty($_POST[$key])
Неустановленная переменная всегда будет «пустой», что isset()
подразумевается в вашем empty()
вызове.
Для вашей логики вы можете достичь того же результата с помощью всего:
!empty($_POST[$key])
Ответ №5:
Ваша первая функция работает для меня идеально.
Как вы думаете, почему это не работает?
Однако лучшим вариантом было бы
function _post($key, $default = "") {
if(isset($_POST[$key])){
return $_POST[$key];
}else{
return $default;
}
}
Чтобы использовать ее :
echo $_post($key); // You could define the message as a second parameter.
Комментарии:
1. Я действительно запутался. Точно таким кодом, который вы использовали, я вставляю это:
value="<?php _post(time); ?>"
и ничего не возвращает.2.
value="<?php echo htmlentities(_post(time)); ?>
3. Это не проверяет, пуста ли переменная, что нормально, если
$default
всегда является пустой строкой. Если нет, то она не функционирует так, как было запрошено.
Ответ №6:
function requireArray( $array, $required ) {
foreach( $required as $k=>$v ) {
if ( !isset($array[$k]) || empty($array[$k]) )
return false;
}
return true;
}
#call like this:
requireArray($_POST, array('time', 'username', 'foo'));
Если вы хотите знать конкретно:
function missingFrom( $array, $required ) {
$r = array();
foreach( $required as $k ) {
if ( !isset($array[$k]) || empty($array[$k]) )
$r[] = $k;
}
return $r;
}
Вызывается как предыдущая функция.
Ответ №7:
Похоже, ваш метод здесь работает нормально:
function if_post_echo($key, $default = "") {
if(isset($_POST[$key])amp;amp;!empty($_POST[$key])){
echo $_POST[$key];
}else{
echo $default;
}
}
Я ввел простой ввод с именем test, а метод form является POST
и использует echo if_post_echo('test');
.
Он разместил на странице то, что было в текстовом поле.
Ответ №8:
Эта функция добавляется в PHP 7 как «Оператор объединения Null» с использованием двух вопросительных знаков:
echo ($_GET['message'] ?? 'default-if-not-set');