如果isset $ _POST


100

我在一页上有一个表单提交到另一页。在那里,它检查输入邮件是否已填充。如果是这样,则执行某些操作,如果未填满,请执行其他操作。我不明白为什么即使我发送一个空表格也总是说它已设置。缺少什么或做错了什么?

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>

step2_check:

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

6
表单中存在的所有类似文本的输入和文本区域将被提交到服务器,即使它们的值是空字符串也是如此。
hypeJunction

Answers:


223

即使没有填写,大多数表单输入总是被设置的,因此您也必须检查是否为空。

由于!empty()已经检查了两者,因此您可以使用以下命令:

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


2
小事...我认为最好避免在!这种情况下操作员(更易于阅读,减少出错的机会等),并逆转逻辑……if (empty()) {/* No */} else {/* Yes */}
White White,2014年

25

使用!empty代替isset。isset返回true,$_POST因为$_POST数组是超全局的,并且始终存在(设置)。

还是更好用 $_SERVER['REQUEST_METHOD'] == 'POST'


2
您应该提到同时使用isset!empty来防止错误。编辑:糟糕,它的确每天都在学习,然后参考
Touki 2012年

1
我试过了,都很好。为什么$ _SERVER ['REQUEST_METHOD'] =='POST'更好?它到底是做什么的?它可以指代特定输入还是形式通用?
Nrc 2012年

3
$_SERVER['REQUEST_METHOD']确保用户已提交表格。$_POST即使在这种情况下也可以为空。考虑以下形式:<form method="post"></form>,提交该内容不会发送任何操作,但请求类型为post。或者可以使用curl:来完成curl -X POST http://example.com/processor.php。如果处理器包含类似的代码echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);,您将看到POST true
Nemoden 2012年

5

从php.net,isset

如果var存在并且具有非NULL的值,则返回TRUE,否则返回FALSE。

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


2

如果您将表单发送为空,则仍将发送$ _POST ['mail'],但该值为空。要检查该字段是否为空,您需要检查

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }

我复制粘贴代码,我认为它不起作用?你检查了吗?
Nrc 2012年

2

将以下属性添加到输入文本表单: required="required"。如果未填写表格,则不允许用户提交表格。

您的新代码将是:

<form name="new user" method="post" action="step2_check.php"> 
<input type="text" name="mail" required="required"/> <br />
<input type="password" name="password" required="required"/><br />
<input type="submit"  value="continue"/>
if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
}

2

您可以简单地使用:

if($_POST['username'] and $_POST['password']){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

或者,使用empty()

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

根据PHP类型比较表,您绝对正确。一个简单的布尔值执行empty函数的工作,以检查空字符串。
viery365 '17

我知道这是旧答案,但是第一种方法会导致未定义的索引通知。
ICE

1
@ICE可以通过在变量前面加上@,即:来轻松地绕开它@$_POST['username']。谢谢您的注意。
CONvid19

2

使用!empty()代替isset()。因为isset()在您的情况下,始终会返回true。

if (!empty($_POST["mail"])) {
    echo "Yes, mail is entered";    
} else {  
    echo "No, mail is not entered";
}

1

也许您可以尝试以下一种方法:

if (isset($_POST['mail']) && ($_POST['mail'] !=0)) { echo "Yes, mail is set"; } else { echo "No, mail is not set"; }


1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>

3
您应该解释为什么您的代码回答了OP的问题。
Markus

1

让我们认为这是您在step2.php中的HTML表单

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>

我认为您的数据库需要它,因此您可以将HTML表单值分配给php变量,现在您可以使用Real Escape String,并且以下必须为

step2_check.php

if(isset($_POST['mail']) && !empty($_POST['mail']))
{
$mail = mysqli_real_escape_string($db, $_POST['mail']);
}

其中$ db是您的数据库连接。


1

请先检查表单是否已提交,然后再检查该字段。您还应该对现场进行清理以防止黑客入侵。

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"  id="SubmitForm" name= "SubmitForm" value="continue"/>
</form>

step2_check:


if (isset($_POST["SubmitForm"]))
   {
   $Email =  sanitize_text_field(stripslashes($_POST["SubmitForm"]));
   if(!empty($Email))
     echo "Yes, mail is set"; 
   else
     echo "N0, mail is not set";
   } 
}

0

要回答发布的问题:isset和empty一起给出了三个条件。Javascript也可以将其与ajax命令一起使用。

$errMess="Didn't test";   // This message should not show
if(isset($_POST["foo"])){ // does it exist or not
    $foo = $_POST["foo"]; // save $foo from POST made by HTTP request
    if(empty($foo)){      // exist but it's null
        $errMess="Empty"; // #1 Nothing in $foo it's emtpy

    } else {              // exist and has data
        $errMess="None";  // #2 Something in $foo use it now
      }
} else {                  // couldn't find ?foo=dataHere
     $errMess="Missing";  // #3 There's no foo in request data
  }

echo "Was there a problem: ".$errMess."!";

0

您可以尝试以下方法:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}

您需要解释您的答案。这样存在不仅可以回答问题,而且可以教育人们
Machavity

0
<form name="new user" method="post" action="step2_check.php"> 
  <input type="text" name="mail" required="required"/> <br />
  <input type="password" name="password" required="required"/><br />
  <input type="submit"  value="continue"/>
</form>

<?php
if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
?>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.