2

私はプログラミング全体にかなり慣れていないので、これがばかげた質問である場合はご容赦ください。今まで遭遇したことがないのは奇妙に思えます。

ケーキの注文書を作ろうとしています。フォームに入力して送信すると、注文が新しいウィンドウに表示されます。[送信] をクリックして、データベースにアップロードします。フォームを送信する前に、フォームのエラーをチェックするための一連の If ステートメントがあります。これは、コードの簡略化されたバージョンです。書き込みはケーキに書きたいことを意味し、Name はあなたの名前、cake は希望するケーキの種類です (デフォルトは「なし」です)。

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

何が起こっているのかというと、最初に送信すると正しいケーキの種類が表示されますが、2 回目に送信すると、「なし」が選択されているというエラーが表示されます。他のすべての値はそこにあり、同じままです。問題は、最初の "IF" ステートメント ("If($cake = "None")) が自動的に $cake を "None" に変更していることだと思います。これは、そのステートメントだけをコメントアウトしようとしたためです。ケーキを「Caramel Apple Pie」に変更します。これは、次の 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 に答える