如果 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
也可以为空。考虑这种形式:<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
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"]) && 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的主要内容,如果未能解决你的问题,请参考以下文章