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