質問
私は物事のサイズで送信するフォームを持っています。それに応じて価格を設定できるように、文字列が何であるかを確認する必要があります。私がこれをしようとすると、それらは等しくないと言い、価格はもらえません。これは私が使用しているコードです:
if (私は物事のサイズで送信するフォームを持っています。それに応じて価格を設定できるように、文字列が何であるかを確認する必要があります。私がこれをしようとすると、それらは等しくないと言い、価格はもらえません。これは私が使用しているコードです:
<*>
ここで何が間違っていますか? $ _POST ['sizes']をエコーすることができ、それらの1つを正確に提供します。
POST['sizes'] == "Small ($30)"){$total = "30";}
if (私は物事のサイズで送信するフォームを持っています。それに応じて価格を設定できるように、文字列が何であるかを確認する必要があります。私がこれをしようとすると、それらは等しくないと言い、価格はもらえません。これは私が使用しているコードです:
<*>
ここで何が間違っていますか? $ _POST ['sizes']をエコーすることができ、それらの1つを正確に提供します。
POST['sizes'] == "Medium ($40)"){$total = "40";}
if (私は物事のサイズで送信するフォームを持っています。それに応じて価格を設定できるように、文字列が何であるかを確認する必要があります。私がこれをしようとすると、それらは等しくないと言い、価格はもらえません。これは私が使用しているコードです:
<*>
ここで何が間違っていますか? $ _POST ['sizes']をエコーすることができ、それらの1つを正確に提供します。
POST['sizes'] == "Large ($50)"){$total = "50";}
else {$total = 私は物事のサイズで送信するフォームを持っています。それに応じて価格を設定できるように、文字列が何であるかを確認する必要があります。私がこれをしようとすると、それらは等しくないと言い、価格はもらえません。これは私が使用しているコードです:
<*>
ここで何が間違っていますか? $ _POST ['sizes']をエコーすることができ、それらの1つを正確に提供します。
POST['price'];}
ここで何が間違っていますか? $ _POST ['sizes']をエコーすることができ、それらの1つを正確に提供します。
解決
ポールディクソンが言ったことは正しい。 if文の不格好なチャンクの代わりにswitch文を使用することもお勧めします(実際には論理的なバグがあるため、 $ total
は常に $ _ POST ['priceと等しくなります']
が' Large($ 50) '
)でない場合
<?php
switch ( ポールディクソンが言ったことは正しい。 if文の不格好なチャンクの代わりにswitch文を使用することもお勧めします(実際には論理的なバグがあるため、 $ total
は常に $ _ POST ['priceと等しくなります']
が' Large($ 50) '
)でない場合
<*>POST['sizes'] )
{
case 'Small ($30)' :
$total = 30;
break;
case 'Medium ($40)' :
$total = 40;
break;
case 'Large ($50)' :
$total = 50;
break;
default:
$total = ポールディクソンが言ったことは正しい。 if文の不格好なチャンクの代わりにswitch文を使用することもお勧めします(実際には論理的なバグがあるため、 $ total
は常に $ _ POST ['priceと等しくなります']
が' Large($ 50) '
)でない場合
<*>POST['price'];
break;
}
?>
他のヒント
これはswitch / caseステートメントの適切な候補で、「else」がデフォルトです。
また、MediumおよびLargeでelseifを使用せずに、$ _ POST ['sizes']がLargeでない場合、$ totalは常に$ _POST ['price']になります。これもあなたを投げ捨てる可能性があります。
ご存知のように、if / elseの問題は、最後のelseが常に発生していることです。スイッチはまだ優れていますが、コードは次のようになります。
if (ご存知のように、if / elseの問題は、最後のelseが常に発生していることです。スイッチはまだ優れていますが、コードは次のようになります。
<*>
問題が$ 30、$ 40などだと言う人には、そうではありません。変数は数字で開始できないため、PHPは$ 40などを無視します。
POST['sizes'] == "Small ($30)") { $total = "30";
} else if (ご存知のように、if / elseの問題は、最後のelseが常に発生していることです。スイッチはまだ優れていますが、コードは次のようになります。
<*>
問題が$ 30、$ 40などだと言う人には、そうではありません。変数は数字で開始できないため、PHPは$ 40などを無視します。
POST['sizes'] == "Medium ($40)") { $total = "40";
} else if (ご存知のように、if / elseの問題は、最後のelseが常に発生していることです。スイッチはまだ優れていますが、コードは次のようになります。
<*>
問題が$ 30、$ 40などだと言う人には、そうではありません。変数は数字で開始できないため、PHPは$ 40などを無視します。
POST['sizes'] == "Large ($50)") { $total = "50";
} else { $total = ご存知のように、if / elseの問題は、最後のelseが常に発生していることです。スイッチはまだ優れていますが、コードは次のようになります。
<*>
問題が$ 30、$ 40などだと言う人には、そうではありません。変数は数字で開始できないため、PHPは$ 40などを無視します。
POST['price']; }
問題が$ 30、$ 40などだと言う人には、そうではありません。変数は数字で開始できないため、PHPは$ 40などを無視します。
または、不格好なスイッチよりも優れている場合は、この単純なロジックを活用して、「データ駆動型プログラミング」を実践できます。
$vals = array(
'Small ($30)' => 30,
'Medium ($40)' => 40,
'Large ($50)' => 50
);
$total = array_key_exists(または、不格好なスイッチよりも優れている場合は、この単純なロジックを活用して、「データ駆動型プログラミング」を実践できます。
<*>POST['sizes'], $vals)
? $vals[または、不格好なスイッチよりも優れている場合は、この単純なロジックを活用して、「データ駆動型プログラミング」を実践できます。
<*>POST['sizes']]
: または、不格好なスイッチよりも優れている場合は、この単純なロジックを活用して、「データ駆動型プログラミング」を実践できます。
<*>POST['price'];
このエラーの実際の原因は別として、ラベル以外の値を使用していた場合は回避できたでしょう。例:
<select name="sizes">
<option value="small">Small ($30)</option>
<option value="meduim">Medium ($40)</option>
<option value="large">Large ($50)</option>
</select>
一重引用符を使用してみてください
if (一重引用符を使用してみてください
<*>
二重引用符で囲まれた文字列は変数補間を使用するため、$記号が重要になります!宣言方法の違いについては、このマニュアルページをご覧ください。 PHPの文字列リテラル。
(論理エラーを修正するために編集-他の人が述べたように、スイッチはここでより明確になるでしょう)
POST['sizes'] == 'Small ($30)'){$total = "30";}
elseif (一重引用符を使用してみてください
<*>
二重引用符で囲まれた文字列は変数補間を使用するため、$記号が重要になります!宣言方法の違いについては、このマニュアルページをご覧ください。 PHPの文字列リテラル。
(論理エラーを修正するために編集-他の人が述べたように、スイッチはここでより明確になるでしょう)
POST['sizes'] == 'Medium ($40)'){$total = "40";}
elseif (一重引用符を使用してみてください
<*>
二重引用符で囲まれた文字列は変数補間を使用するため、$記号が重要になります!宣言方法の違いについては、このマニュアルページをご覧ください。 PHPの文字列リテラル。
(論理エラーを修正するために編集-他の人が述べたように、スイッチはここでより明確になるでしょう)
POST['sizes'] == 'Large ($50)'){$total = "50";}
else {$total = 一重引用符を使用してみてください
<*>
二重引用符で囲まれた文字列は変数補間を使用するため、$記号が重要になります!宣言方法の違いについては、このマニュアルページをご覧ください。 PHPの文字列リテラル。
(論理エラーを修正するために編集-他の人が述べたように、スイッチはここでより明確になるでしょう)
POST['price'];}
二重引用符で囲まれた文字列は変数補間を使用するため、$記号が重要になります!宣言方法の違いについては、このマニュアルページをご覧ください。 PHPの文字列リテラル。
(論理エラーを修正するために編集-他の人が述べたように、スイッチはここでより明確になるでしょう)
$ totalは文字列ですか?
$ total =&quot; 30&quot ;;文字列の構文です。 $ total = 30;数値に対しては正しいでしょう。
ここにセキュリティホールはありませんか?誰かがデフォルト条項に必要な価格を送信した場合はどうなりますか?
// remove any non-decimal characters from the front, then extract your value,
// then remove any trailing characters and cast to an integer
$total = (integer)preg_replace("/^\D*(\d+)\D.*/", "$1", <*>POST['sizes']);
if (!$total) $total = <*>POST['price'];