变量在IF语句中丢失范围/值?

时间:2010-08-18 16:49:32

标签: php

我有一个我无法弄清楚的最奇怪的问题,请参阅以下代码:

 $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();
}

结果将是:

  

我认为字符串是空的,即使它们不是:''''

4 个答案:

答案 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 != "")

仅当两个字符串都包含值时才匹配。