在多个值上设置

时间:2015-01-14 19:23:42

标签: php html forms post isset

如果同时设置,我想检查多个值。我从isset文档中读到了If multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set. Evaluation goes from left to right and stops as soon as an unset variable is encountered.

那么为什么我的代码总是打印发送的值而从不打印'不'?

PHP

if ( isset( $_POST['thread'],
        $_POST['winkey'],
        $_POST['dkey'],
        $_POST['winrew'],
        $_POST['drew'] )===true ) {
    echo $_POST['thread'];
    echo $_POST['winkey'];
    echo $_POST['dkey'];
    echo $_POST['winrew'];
    echo $_POST['drew'];
}
else echo 'no';

HTML

<form action="class.php" method="POST">
thread link:<br>
<input type="text" name="thread" >
<br>
win key:<br>
<input type="text" name="winkey" >
<br>
double key:<br>
<input type="text" name="dkey" >
<br>
winrew:<br>
<input type="text" name="winrew" >
<br>
double rew:<br>
<input type="text" name="drew" >
<br>
<input type="checkbox" name="banlist" value="ban">Include banlist<br>
<br>
<input type="submit" value="Submit">
</form> 

3 个答案:

答案 0 :(得分:5)

只要您提交表单,就会设置您提及的$_POST中的所有变量。如果未发出POST请求,则不会设置任何请求。

我认为您正在寻找empty()而不是测试任何变量是否为空。

答案 1 :(得分:2)

可能是因为当您发布表单时,即使您没有在输入字段中放置任何内容,也会设置值。对于这些键,您将得到一个空字符串(对于isset()将返回TRUE。)

您可能应该使用!empty()进行检查。

更好的方法可能是使用filter_input_array()。这可能看起来像这样。

//define callback function to be used to check if value is empty
function empty_filter($var) {
    if(!empty($var)) return $var;
}

$filter_definitions = array(
    'thread' => array('filter'    => FILTER_CALLBACK,
                      'options'   => 'empty_filter',
                      'error_message'    => 'This field cannot be empty.'), // filter_var_array will ignore this, but you can specify messaging here.
    'winkey' => array('filter'    => FILTER_CALLBACK,
                      'options'   => 'empty_filter',
                      'error_message'    => 'This field cannot be empty.'),
    'dkey' => array('filter'    => FILTER_CALLBACK,
                      'options'   => 'empty_filter',
                      'error_message'    => 'This field cannot be empty.'),
    'winrew' => array('filter'    => FILTER_CALLBACK,
                      'options'   => 'empty_filter',
                      'error_message'    => 'This field cannot be empty.'),
    'drew' => array('filter'    => FILTER_CALLBACK,
                      'options'   => 'empty_filter',
                      'error_message'    => 'This field cannot be empty.')
);

$filtered_post = filter_input_array(INPUT_POST, $filter_definitions, true);

// items not passing filter will show as NULL, so we check for NULL
if(in_array(NULL, $filtered_post)) {
    // you can walk through the filtered array an echo out error messages
    foreach($filtered_post as $key => $value) {
        if(is_null($value)) {
            echo $key . ': ' . $filter_definitions[$key]['error_message'] . '<br>';
        }
    }
} else {
   // validation passed
   // do whatever comes next
}

请注意,您可以为输入数组中的每个键定义不同的过滤条件,例如,您希望将一个字段验证为电子邮件地址,一个作为IP地址,一个作为正则表达式,或者甚至是您自己的自定义验证,您可以指定验证标准,并在一次通过中完成所有操作。

答案 2 :(得分:0)

当您提交表单时,操作页面上的值已消失。 这意味着某些东西从输入开始它可能是空字符串,但你可以认为这个空字符串数字为零而没有值但有数字。在您的情况下,值将在操作页面上进行,这就是每次打印值的原因。

您可以在不提交表单时通过在新标签页中打开操作页面立即查看。不会打印出平均值不会出现在操作页面上。您的代码应如下所示。

if ( isset( $_POST['thread'],
    $_POST['winkey'],
    $_POST['dkey'],
    $_POST['winrew'],
    $_POST['drew'] )===true ) {
    if ($_POST['thread'] == "" and $_POST['winkey'] == "" and $_POST['dkey'] == "" and $_POST['winrew'] == "" and $_POST['drew'] == ""){
        echo "no";
    } 
    else{
            echo $_POST['thread'];
            echo $_POST['winkey'];
            echo $_POST['dkey'];
            echo $_POST['winrew'];
            echo $_POST['drew'];
    }

}
else echo 'no';