如果 isset $_POST

Posted

技术标签:

【中文标题】如果 isset $_POST【英文标题】:If isset $_POST 【发布时间】:2012-10-24 08:16:57 【问题描述】:

我在一个页面上有一个提交到另一个页面的表单。在那里,它检查输入 mail 是否已填充。如果是这样,那么做一些事情,如果没有填满,做其他事情。我不明白为什么它总是说它已设置,即使我发送了一个空表单。有什么遗漏或错误?

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.php:

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

【问题讨论】:

表单中出现的所有类似文本的输入和文本区域都将提交给服务器,即使它们的值为空字符串。 【参考方案1】:

大多数表单输入总是被设置,即使没有填满,所以你也必须检查是否为空。

由于!empty() 已经对两者都进行了检查,您可以使用它:

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

【讨论】:

这个比较表对php.net/manual/en/types.comparisons.php这样的事情很有帮助 次要的事情......我认为在这种情况下最好避免使用! 运算符(更容易阅读,出错的机会更少等)并反转逻辑......@987654325 @ 我不明白为什么最好避免使用!empty()。不过,我承认,我更喜欢在成功条件之前编写失败条件。【参考方案2】:

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

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

【讨论】:

您应该提到同时使用isset!empty 以防止错误。编辑:哎呀,它显然每天都在学习,然后Ref 我试过了,都很好用。为什么 $_SERVER['REQUEST_METHOD'] == 'POST' 更好?它究竟是做什么的?它可以引用特定的输入还是对表单是通用的? $_SERVER['REQUEST_METHOD'] 确保用户已提交表单。即使在这种情况下,$_POST 也可以为空。考虑这种形式:&lt;form method="post"&gt;&lt;/form&gt;,提交它不会向操作发送任何内容,但请求类型将为post。或者可以使用 curl:curl -X POST http://example.com/processor.php。如果处理器包含echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1); 之类的代码,您将看到POST true isset() 可能适用于您在 $_POST 中指定一个键并希望允许像 0 这样的虚假值。特别是对于电子邮件值提交,使用 !empty() 是验证电子邮件地址的不充分工具。【参考方案3】:

From php.net, isset

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

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

【讨论】:

我发现“用于检查所有空选项”对研究人员来说要么过于模糊要么误导。【参考方案4】:

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

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

【讨论】:

我复制粘贴代码,我认为它不起作用?你检查了吗? 为了记录,if(isset($_POST["mail"]) &amp;&amp; trim($_POST["mail"])) 会做同样的事情。【参考方案5】:

你可以简单地使用:

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 type comparison tables,您是绝对正确的。一个简单的布尔值完成了空函数的工作来检查空字符串。 我知道这是旧答案,但第一种方法可能会导致未定义的索引通知。 @ICE 可以通过在变量前面加上@,即@$_POST['username']来轻松绕过。感谢您注意到这一点。 @ 经常使代码看起来不专业。正确处理通知和警告。【参考方案6】:

在输入文本表单中添加以下属性: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";    

【讨论】:

依赖客户端验证是不够的。手动绕过客户端防御是微不足道的。为了提高安全性,需要在服务器端实施强验证。如本页其他地方所述,isset() 将无法按照 OP 的要求工作。 我完全同意。很久以前写了这个答案。这个答案暗示了事物的前端。理想情况下,应该在前端和后端都进行验证,错误从服务器端传递并在前端处理错误。 研究人员的底线:此答案的服务器端检查不能确保填写表单字段。【参考方案7】:

也许你可以试试这个:

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

【讨论】:

这更简单地写成!empty()。通过检查电子邮件字段的值是否为 非零,它还会使您的 sn-p 不那么直观。【参考方案8】:
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') 
        echo "Yes, mail is set";
    else
        echo "N0, mail is not set";
    
?>

【讨论】:

您应该解释为什么您的代码回答了 OP 的问题。 以及为什么不简单推荐!empty()【参考方案9】:

让我们认为这是您在 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 是您的数据库连接。

【讨论】:

isset() 后跟 !empty() 是一种反模式,无论出于何种原因都不应该存在于任何代码中。它正在做太多的工作。如果!empty() 是所需的逻辑,那么检查isset() 也是没有意义的。另外,不要再使用mysqli_real_escape_string;使用准备好的语句。【参考方案10】:

先检查是否已提交 FORM,然后是字段。您还应该清理该字段以防止黑客攻击。

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";
    


【讨论】:

在检查$Email 是否不为空之前,看看你是如何无条件声明它的?这是在做不必要的工作。 !empty() 做了两件事。它检查变量是否被声明并检查它是否真实。由于肯定声明了变量,因此您可以使用 if ($Email) 获得完全相同的效果。【参考方案11】:

回答发布的问题: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."!";

【讨论】:

empty() 在这里做了太多的工作,因为$foo 保证在检查时被声明。【参考方案12】:

你可以试试这个:

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

【讨论】:

你需要解释你的答案。 SO 的存在不仅是为了回答问题,而且是为了教育人们 这个答案不检查提交的邮件不是邮箱。【参考方案13】:
<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";

?>

【讨论】:

这个建议早在几年前就已经给出了 ***.com/a/13045314/2943403 并且没有给页面增加新的价值。【参考方案14】:

你可以试试,

 <?php

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

【讨论】:

这个答案不能验证$_POST["mail"] 是非空的。【参考方案15】:

$-POST 方法: 如果我们在表单标签中使用 POST 方法来传递数据,我们可以使用 $_POST 数组在服务器中查找数据。使用这个数组名我们从服务器获取数据。($_POST['name'])从表单发送的信息POST 方法对其他人是不可见的(所有名称/值都嵌入在 HTTP 请求的正文中)并且对要发送的信息量没有限制。 示例代码:

<html>
<head>
</head>
<body>
<?php
if(isset($_POST['submit']))
if(isset($_POST['name']) && isset($_POST['roll']))
echo"<h1>form submitted</h1>";echo"your name is". $_POST['name']."<br>";
echo "your roll number is". $_POST['roll']."<br>";
else?>
<form action="" method="POST">
Name:<input type="text" name="name"><br><br>
Roll:<input type="text" name="roll"><br>
<br><input type="submit" value="submit" name="submit">
</form>
<?php?>
</body>
</html>

【讨论】:

这个答案不仅忽略了 OP 的场景,而且这个答案对检查字段是否“填充”没有任何作用。

以上是关于如果 isset $_POST的主要内容,如果未能解决你的问题,请参考以下文章

如果 $_POST 值仍然相同,PHP 表单将拒绝发送

如果选中则如何更新数据库1的复选框值,如果未选中则更新为0?

如果存在则更新,否则插入[重复]

如果记录已存在,则为 PDO 数组

PHP三元运算符 isset的理解

[单选题]isset()的功能是( )