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');