2

我对整个编程很陌生,所以如果这是一个愚蠢的问题,请原谅我。奇怪的是我以前没有遇到过。

我正在尝试为蛋糕制作订单。您填写表格并提交,然后它将在新窗口中显示订单,然后您点击“提交”并将其上传到数据库。在提交表单之前,我有一系列 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 语句的顶部。

任何人都知道它为什么这样做?以及如何解决?

4

3 回答 3

5

您正在使用 a=而不是 a==

  • =是一个赋值运算符,即它改变了我们的变量值。在 -statement 中使用它if会导致设置变量并检查结果。
  • ==是比较操作
  • ===也是一个比较运算符,它额外检查类型是否相等。

有关更多信息,请参阅 PHP赋值运算符比较运算符手册

补充笔记:

  • 该行throw new Exception("Please select a Cake"也丢失);了。
  • 在您的示例情况下,使用异常写入消息$error有点矫枉过正!例如,只需使用$error = "Please enter Your name.".
于 2012-12-14T16:55:37.173 回答
1

=是赋值。 ==是对平等的测试。

一些程序员像这样编写他们的相等测试来捕获这个错误:

if ( 'foo' == $x ) 

因为如果你有这个

if ( 'foo' = $x )

这是一个语法错误,因为您不能分配$x给字符串文字。

于 2012-12-14T16:56:03.397 回答
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
于 2012-12-14T16:55:59.827 回答