繁体   English   中英

在多个值上设置

Isset on multiple values

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

如果要同时设置多个值,我要检查。 我从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. 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 个回复

提交表单后,您提到的$_POST中的所有变量都将被设置。 如果未发出POST请求,则不会设置任何请求。

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

可能是因为您在POST表单时设置了值,即使您没有在输入字段中输入任何内容也是如此。 对于这些键,您将获得一个空字符串(对于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地址,一个字段为正则表达式,甚至您自己的自定义验证,您可以指定验证条件,然后一次完成所有操作。

当您提交表单时,操作页面上的值不见了。 这意味着从输入中获取的东西可能是空字符串,但是您可以考虑这个空字符串,例如数字为零,它没有值但有数字。 在您的情况下,值也会在操作页面上显示,这就是每次打印值时的原因。

您可以在不提交表单时通过在新标签中打开操作页面来进行检查。 没有打印出来,这意味着平均值不会在操作页面上显示。 您的代码应如下所示。

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';
1 检查多个null isset值

我正在检查两个值是否为null 。 如果两者都为null我想返回false ,如果其中一个或两个都不为 null ,则我想返回true 。 我当前的代码仅在两个都不为null时才返回true ,但我希望在其中一个都不为null时返回true 。 ...

2017-12-27 15:17:23 4 49   php/ isset
3 处理!isset值而不检查isset

我有一个从API提取的对象,该对象类似于以下结构: 但是,API稍有不一致。 有时,某些对象没有description属性: 在遍历API时,我正在将值从对象映射到数组: 但是,由于有时description不是对象的设置/现有属性,因此如果缺少description则 ...

4 使用isset()返回多个变量

我有一些返回用户代理的代码,通过一个函数运行它来解析它。 我以前使用的代码仅从解析函数返回一个变量(共有三个:“平台”,“浏览器”,“版本”): 虽然此代码可以返回用户代理的平台,但我需要将其附加以返回函数中的所有三个变量。 我将代码的前半部分更改为我认为正确的部分: 但是, ...

5 Isset 不等于多个变量

我在使用以下代码时遇到问题。 如果两者都存在或都不存在,则它有效,但如果存在变量之一则失败。 在网上搜索但找不到有效的解决方案。 谢谢, 约翰 ...

2020-04-14 10:37:47 1 20   php
6 多个isset检查php

我正在尝试实现多个if(isset())语句,但无法使其正常工作。 例: 当我单击a或b时,我仍然执行了else语句。 我也尝试过: 但是我得到一个错误 我正在尝试在不同的$ _GET请求上显示不同的页面。 有人可以指出我正确的方向吗?或者这不是正确的方法吗? ...

2014-11-24 18:07:38 2 83   php/ isset
7 PHP使用isset设置输入值

我想知道是否有更短的方式编写以下代码: 我讨厌必须这样做将我的所有形式,因为isset()检查真的搞砸了我的HTML并吓跑了前端。 ...

2010-01-10 23:01:28 3 11634   php
8 一页中设置了多个php

我正在尝试在一页中实现多个分页。 分页的所有结果,正在工作。 但是除了主要结果,我想包括其他选项。 例如,在下图中,我还有另外三个选项, 最新 , 信誉 , 最早 所以,我想对所有这些选项进行多次分页。 在要显示结果的页面中,我有多个isset() ,以实现该目的。 ...

9 isset($ _ Post)没有从邮件表单获取值

因此,我试图将值从联系表单(contact.php)发送到文件send_form_email.php。 由于某些原因,我没有从contact.php获取值。 非常感谢您的帮助! 这是我的contact.php文件中的表单代码: 单击提交按钮后,将调用以下Javascript函数 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM