6

我正在为一家打印机公司编写一个工作表应用程序。我收到了大量的表格。对于每个输入字段,我必须检查是否$_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变量并返回它,或者如果它未设置则返回一个空字符串。有没有办法为$_GETand做到这一点$_REQUEST?(或者只是复制?)

4

8 回答 8

7

您的 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) 是一个包含 POST ( ) 和 GET ( ) 请求参数的PHP 超级全局变量。$_POST$_GET

如果您只想捕获 POST 请求参数,那么它将是:

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

例如。

于 2011-04-11T15:09:39.620 回答
6

如果您有大量字段,我建议您也使用一组默认值:

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

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

$fields然后将包含带有 POST 数据或预设默认值的表单值列表。没有 isset,看到了吗?

array_filter 手册页特别是:如果未提供回调,则将删除所有等于 FALSE 的输入条目。以某种方式解释此解决方案背后的工作原理。

于 2011-04-11T15:15:57.567 回答
2

这应该有效:

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)查看是否所有内容都已正确发布。

于 2011-04-11T15:11:50.187 回答
2

请注意,这是多余的:

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

未设置的变量将始终为“空”,因此在您的调用isset()中暗示。empty()

对于您的逻辑,您可以通过以下方式获得相同的结果:

!empty($_POST[$key])
于 2013-06-17T23:46:12.423 回答
1

你的第一个功能对我来说很完美。

为什么你认为它不起作用?

但是,更好的变体是

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.
于 2011-04-11T15:04:52.607 回答
0
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;
}

像以前的函数一样调用。

于 2011-04-11T15:11:34.257 回答
0

您的方法似乎在这里工作正常:

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

我用名称 test 做了一个简单的输入,表单方法是POST和 using echo if_post_echo('test');

它在页面上发布了文本框中的内容。

于 2011-04-11T15:18:26.663 回答
0

这个特性在 PHP 7 中被添加为使用两个问号的“Null Coalesce Operator”:

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

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

于 2015-09-23T22:21:50.773 回答