Php 变量在IF语句中失去作用域/值?

Php 变量在IF语句中失去作用域/值?,php,Php,我有一个我无法解决的最奇怪的问题,请参阅以下代码: $frmUsername = $_POST['frmUsername']; $frmPassword = $_POST['frmPassword']; if($frmUsername == "" || $frmPassword == "") { print "frmUsername: " . $frmUsername; print "frmPassword: " . $frmPassword; } exit(); 结果将是

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

 $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:MyUserName frmPassword:MYPASSWORD

那么,为什么IF语句认为frmUsername和frmPassword为空,而事实并非如此,例如:

 $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();
}
结果将是:

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

那么,为什么IF语句认为frmUsername和frmPassword是空的呢

按设计工作

你是说:

如果($frmUsername为空)或($frmPassword为空),请执行以下操作:

如果两个字符串都不是空的,则条件将不匹配

你可能想要的是

if($frmUsername != "" && $frmPassword != "")

只有当两个字符串都包含一个值时,它才会匹配。

如果其中一个字段为空,则第一个代码段中的if条件将仅打印。此外,请检查您在条件语句中是否使用了逻辑等式('=')而不是赋值('=')。

前两段编写的代码肯定会让您头晕目眩

实际上,第二个例子是证明POST数据实际上是通过的,并且变量被正确分配(他正在打印值,并且它们正确地出现)

但是在第一个例子中,如果其中一个是空白的,他想打印某些东西。PHP似乎正在打印它们,尽管它们都不是空的

真奇怪

如果不使用POST数据(作为测试…),而是静态添加内容,会发生什么

e、 g


if语句是否仍然认为它们都是空白的?

这可能不是答案,但最好在此处全部键入,而不是像我开始时那样在注释中键入

在您的问题if中,将else放在末尾,这样您就可以确定它何时通过,何时测试失败:

$frmUsername = $_POST['frmUsername'];
$frmPassword = $_POST['frmPassword'];

if($frmUsername == "" || $frmPassword == "") {
    echo 'strings are empty?';    
}
else
{
    echo 'strings are not empty?';
}
您还可以在$\u POST中打印所有内容,以确保没有问题:

echo '<pre>'.print_r($_POST).'</pre>';
echo''。打印($\u POST)。'';

是的,但它们都不是空的,所以它甚至不应该进入if语句,但每次都会进入。@rebbie但您上面说的是它不会进入块。“你不是吗?”雷比很奇怪。您能将第二个示例更改为“print”吗?我认为字符串是空的,即使它们不是:“$frmUsername”“$frmPassword”“”只是为了100%确定?以上编辑。我认为这是一个屏幕上报告的问题,以及在查看源代码时在Chrome中重新加载的内容。不,这不是范围问题。在您的实际if中,您是否有机会执行:
if($frmUsername=“”| |$frmPassword=“”)
?这就是任务,因此问题就存在了……不,我先检查了这个。我在
if
之前使用==添加
变量转储($frmUsername,$frmPassword)并发布结果…网页(在屏幕上)显示:string(10)“MYUSERNAME”string(10)“MYPASSWORD”。但是,如果我在网页上查看source,它会显示:string(0)”“NULL我认为字符串是空的,即使它们不是:“”“您确定两次都在表单字段中输入值吗?为什么不试着结合示例,在循环内外打印变量,看看输出是什么,用=而不是==
echo '<pre>'.print_r($_POST).'</pre>';