PHP Сделать простую функцию if-isset-empty - PullRequest
6 голосов
/ 11 апреля 2011

Я пишу приложение для рабочего листа для компании, занимающейся печатью. Я получаю поток форм. Для каждого отдельного поля ввода я должен проверить, установлены ли переменные $_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 и возвращает ее или, если она не установлена, возвращает пустую строку. И есть ли способ сделать это для $_GET и $_REQUEST тоже? (Или просто дублировать?)

Ответы [ 8 ]

7 голосов
/ 11 апреля 2011

Ваша функция тестирования 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суперглобальный , который содержит параметры запроса 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;
    }
}
?>

Например.

6 голосов
/ 11 апреля 2011

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

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

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

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

man-страница array_filter в частности: Если обратный вызов не предоставлен, все записи ввода, равные FALSE, будут удалены. Идет какой-то способ объяснить работу этого решения.

2 голосов
/ 18 июня 2013

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

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

Неустановленная переменная всегда будет «пустой», поэтому в вашем вызове empty() подразумевается isset().

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

!empty($_POST[$key])
2 голосов
/ 11 апреля 2011

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

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

1 голос
/ 11 апреля 2011

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

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

Однако, лучшим вариантом будет

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.
0 голосов
/ 24 сентября 2015

Эта функция добавляется в PHP 7 как «оператор слияния», используя два вопросительных знака:

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

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

0 голосов
/ 11 апреля 2011

Ваш метод, кажется, работает нормально:

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

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

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

0 голосов
/ 11 апреля 2011
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;
}

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

...