我有一个我无法弄清楚的最奇怪的问题,请参阅以下代码:
$frmUsername = $_POST['frmUsername'];
$frmPassword = $_POST['frmPassword'];
if($frmUsername == "" || $frmPassword == "") {
print "frmUsername: " . $frmUsername;
print "frmPassword: " . $frmPassword;
} exit();
结果将是:
frmUsername:frmPassword:
但是如果我做同样的事情并将打印语句移到IF之外:
$frmUsername = $_POST['frmUsername'];
$frmPassword = $_POST['frmPassword'];
print "frmUsername: " . $frmUsername;
print "frmPassword: " . $frmPassword;
if($frmUsername == "" || $frmPassword == "") {
} exit();
结果将是:
frmUsername:MYUSERNAMEfrmPassword:MYPASSWORD
那么,为什么认为frmUsername和frmPassword的IF语句是空白的,当事件不是时,例如:
$frmUsername = $_POST['frmUsername'];
$frmPassword = $_POST['frmPassword'];
if($frmUsername == "" || $frmPassword == "") {
print "I think the strings are empty, even when they're not";
} exit();
结果将是:
我认为字符串是空的,即使它们不是
第二个例子:
$frmUsername = $_POST['frmUsername'];
$frmPassword = $_POST['frmPassword'];
if($frmUsername == "" || $frmPassword == "") {
print "I think the strings are empty, even when they're not: '$frmUsername' '$frmPassword'";
exit();
}
结果将是:
我认为字符串是空的,即使它们不是:''''
答案 0 :(得分:2)
如果其中一个字段为空,则第一个代码段中的if条件将仅打印 。另外,检查您是否在条件中使用逻辑相等('==')而不是赋值('=')。
答案 1 :(得分:1)
编写的前两个代码块肯定会让你的头脑旋转......
实际上,第二个例子证明POST数据实际上正在通过,并且变量被正确分配(他正在打印值并且它们正确地出现)。
但是在第一个例子中,他想打印某些东西,如果它们中的任何一个是空白的。 PHP似乎正在打印它们,即使它们中的任何一个都是空白的。
确实很奇怪。
如果不是使用POST数据(仅作为测试......),您只需静态添加内容会发生什么?
e.g。
$frmUsername = "user";
$frmPassword = "pass";
if语句是否仍然认为它们都是空白的?
答案 2 :(得分:1)
这可能不是答案,但最好在这里输入所有内容而不是像我开始时的评论一样。
在您的问题中,如果将其他方放在最后,以便您可以确定它何时通过以及测试失败时:
$frmUsername = $_POST['frmUsername'];
$frmPassword = $_POST['frmPassword'];
if($frmUsername == "" || $frmPassword == "") {
echo 'strings are empty?';
}
else
{
echo 'strings are not empty?';
}
你也可以打印$ _POST中的所有内容,以确定那里没有问题:
echo '<pre>'.print_r($_POST).'</pre>';
答案 3 :(得分:0)
那么,为什么IF语句认为frmUsername和frmPassword是空白的?
按设计工作。
你在说:
如果($ frmUsername为空) OR ($ frmPassword为空),请执行以下操作:.....
如果两个字符串都不为空,则条件不匹配。
你可能想要的是
if($frmUsername != "" && $frmPassword != "")
仅当两个字符串都包含值时才匹配。