我对整个编程事情都很陌生,所以如果这是一个愚蠢的问题,请原谅我。我以前没碰过它似乎很奇怪。
我正在尝试为蛋糕制作订单。您填写表单,提交表单,然后在新窗口中显示订单,然后点击“提交”,然后将其上传到数据库。在提交表单之前,我有一系列If语句来检查表单中的错误。这是代码的简化版本。写作意味着你想要的任何文字,名字是你的名字,蛋糕是你想要的蛋糕类型(默认为“无”)。
try {
$name = trim($params->name);
$cake = trim($params->cake);
$writing = trim($params->writing);
if (strlen($name) < 3){
throw new Exception("Please enter Your name.");
}
if ($cake = "None") {
throw new Exception("Please select a Cake"
}
if ($cake = "Caramel Apple Pie" or $cake = "Pumpkin Pie" or $cake = "Eggnog Pie" and strlen($writing) > 1) {
throw new Exception("We are sorry, but you can't write on any of our specialty pies.");
}
} catch(Exception $x) {
$error = $x->getmessage();
}
所以发生的事情是,当我第一次去提交时,会出现正确的蛋糕类型,但是当你第二次提交它时,会出现错误,说我选择了“无”。所有其他值都在那里并保持不变。我认为问题在于第一个“IF”语句(在哪里说“If($ cake =”None“))会自动将$ cake更改为”None“,因为我已经尝试将该语句注释掉,然后它会将蛋糕更改为“焦糖苹果派”,这是下一个IF声明的顶部。
任何人都知道它为什么这样做?以及如何解决它?
答案 0 :(得分:5)
您使用的是=
而不是==
=
是赋值运算符,即它更改了我们的变量值。在if
- 语句中使用它会导致设置变量并检查结果。==
是比较操作===
也是一个比较运算符,它还检查类型是否相等。有关详细信息,请参阅PHP assignment operator和comparison operator手册
附加说明:
throw new Exception("Please select a Cake"
。);
中编写邮件在您的示例情况下有点矫枉过正!例如,只需使用$error
。答案 1 :(得分:1)
=
是作业。 ==
是对平等的考验。
一些程序员编写这样的相等测试来捕获这个错误:
if ( 'foo' == $x )
因为如果你有这个
if ( 'foo' = $x )
这是语法错误,因为您无法将$x
分配给字符串文字。
答案 2 :(得分:0)
问题是您正在使用赋值运算符。将您的代码更改为:
if($cake == "None")
=
接线员:
在问题语言中=
表示作业。您正在为特定变量分配值。
I.E.
$truck = "Ford";
//$truck has now been assigned the value of "Ford"
==
接线员:
==
被称为平等。这将检查您要比较的值和/或变量是否相等。
I.E.
$truck = "Ford";
if($truck == "Ford") //returns true