如果是设置$ _POST

Nrc*_*Nrc 94 php isset

我在一个页面上有一个表单,提交到另一个页面.在那里,它检查输入邮件是否已填满.如果是,那么做一些事情,如果没有填补,做其他事情.我不明白为什么它总是说它被设置,即使我发送一个空表格.缺少什么或错了什么?

step2.php:

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>
Run Code Online (Sandbox Code Playgroud)

step2_check:

if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {    
    echo "N0, mail is not set";
}
Run Code Online (Sandbox Code Playgroud)

oop*_*ase 215

把它改成这个:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}
Run Code Online (Sandbox Code Playgroud)

所以!empty()总是设置,但其内容可能是空的.

由于!empty()已经检查了值是否已设置,您还可以使用此版本:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}
Run Code Online (Sandbox Code Playgroud)

  • 这个比较表非常有用,比如http://php.net/manual/en/types.comparisons.php (9认同)
  • 小事...我认为在这种情况下最好避免使用 `!` 运算符(更容易阅读,出错的可能性更小等)并反转逻辑... `if (empty()) {/*否 */} else {/* 是 */}` (2认同)

Nem*_*den 23

!empty而不是isset.isset返回true,$_POST因为$_POSTarray是超全局的并且始终存在(set).

或者更好用 $_SERVER['REQUEST_METHOD'] == 'POST'

  • `$ _SERVER ['REQUEST_METHOD']`确保用户提交了表单.即使在这种情况下,`$ _POST`也可以为空.考虑这种形式:`<form method ="post"> </ form>`,提交它将不会向动作发送任何内容,但请求类型将是`post`.或者它可以用curl完成:`curl -X POST http:// example.com/processor.php`.如果处理器包含`echo $ _SERVER ['REQUEST_METHOD']之类的代码.''.var_export(空($ _ POST),1);`,你会看到`POST true` (3认同)
  • 你应该提一下使用BOTH`isset`和`!empty`来防止错误.编辑:哎呀,它显然每天都在学习[参考](http://kunststube.net/isset/) (2认同)

jan*_*z00 5

来自php.net,isset

如果var存在并且其值不是NULL,则返回TRUE,否则返回FALSE.

空白空间被视为已设置.您需要使用empty()来检查所有null选项.