PHP делает простую функцию if-isset-empty

я кодирую приложение рабочего листа для компании-принтера. Я получаю поток форм. Для каждого поля ввода я должен проверить, если $_POST переменные установлены, и если, так Эхо обратно значение. (В случае какой-либо ошибки, например, после ошибки проверки, пользователь не должен перепечатывать всю форму)

пример кода:

if(isset($_POST['time'])&&!empty($_POST['time'])){echo $_POST['time'];}

мне пришлось реализовать это около ста раз. Поэтому я попытался выяснить какую-то функцию, чтобы сделать это простым и читаемый.

что-то вроде этого:

function if_post_echo($key, $default = "") {
    if(isset($_POST[$key])&&!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)&&!empty($key)){
        echo $key;   
        }else{
        echo $default;   
        }
    }

и я также попытался это:

function if_request_echo($key, $default = null) {
    return isset($_REQUEST[$key])&&!empty($_REQUEST[$key]) ? $_REQUEST[$key] : $default;
}

без какого-либо разумного результата.

вопрос:

как я могу подделать функцию, которая ищет необходимое $_POST variable и возвращает его или если его unset затем возвращает пустую строку. И есть ли способ сделать это для $_GET и $_REQUEST тоже? (Или просто дублировать?)

8 ответов


ваша функция тестирования 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 (связанный) - это PHP super global, который содержит оба поста ($_POST) и Get ($_GET) параметры запроса.

если вы хотите только захватить параметры запроса POST, то это будет:

<?php
function test_req($key, $default = '') {
    if(isset($_POST[$key]) and
       !empty($_POST[$key])) {
        return $_POST[$key];
    } else {
        return $default;
    }
}
?>

например.


Если у вас большой сумме полей, я бы предложил вам также использовать массив значений по умолчанию:

$defaults = array(
    "time" => "default",
    "name" => "enter name here",
    "text..." => "...",
);

$fields = array_filter($_POST) + $defaults;

$fields будет содержать список значений формы с данными POST или предустановленным значением по умолчанию. Нет иссет, видишь?

array_filter man page в частности: если обратный вызов не указан, все входные данные, равные FALSE, будут удалены. Это как-то объясняет работу, стоящую за этим решением.


Это должно работать:

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) чтобы увидеть, все ли было правильно опубликовано.


просто отметить, что это избыточно:

isset($_POST[$key]) && !empty($_POST[$key])

переменная unset всегда будет "пустой", поэтому isset() подразумевается в твоем empty() звонок.

для вашей логики вы можете достичь того же результата, просто:

!empty($_POST[$key])

ваша первая функция отлично работает для меня.

почему вы думаете, что это не сработает?

однако лучшим вариантом было бы

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.

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;
}

вызывается как предыдущая функция.


ваш метод, кажется, работает хорошо здесь:

function if_post_echo($key, $default = "") {
    if(isset($_POST[$key])&&!empty($_POST[$key])){
        echo $_POST[$key];   
    }else{
        echo $default;   
    }
}

Я сделал простой ввод с тестом имени, а метод формы -POST и с помощью echo if_post_echo('test');.

он разместил на странице то, что было в текстовом поле.


эта функция добавляется в PHP 7 как "оператор null Coalesce", используя два вопросительных знака:

echo ($_GET['message'] ?? 'default-if-not-set');

https://wiki.php.net/rfc/isset_ternary