4

我有一个发送大小东西的表格,我需要查看字符串等于什么,以便我可以相应地设置价格。当我尝试这样做时,它说它们不相等,并且我没有得到任何价格。这是我正在使用的代码:

if ($_POST['sizes'] == "Small ($30)"){$total = "30";}
if ($_POST['sizes'] == "Medium ($40)"){$total = "40";}
if ($_POST['sizes'] == "Large ($50)"){$total = "50";}
else {$total = $_POST['price'];}

我在这里做错了什么?我可以回显 $_POST['sizes'] 它给了我这些东西之一。

4

9 回答 9

8

Paul Dixon 说的是正确的。我是否还建议使用 switch 语句而不是笨重的 if 语句块(实际上其中有一个逻辑错误,我可能会添加 -不时$total总是相等)$_POST['price']'Large ($50)'

<?php

switch ( $_POST['sizes'] )
{
    case 'Small ($30)' :
        $total = 30;
        break;
    case 'Medium ($40)' :
        $total = 40;
        break;
    case 'Large ($50)' :
        $total = 50;
        break;
    default:
        $total = $_POST['price'];
        break;
}

?>
于 2008-10-08T20:31:54.110 回答
3

这是 switch/case 语句的一个很好的候选,你的 'else' 是默认值。

此外,如果在 Medium 和 Large 上不使用 elseif,如果您的 $_POST['sizes'] 不是 Large,那么您的 $total 将始终为 $_POST['price']。这也可能让你失望。

于 2008-10-08T20:34:52.390 回答
2

所以你知道,你的 if/else 的问题是最后一个 else 总是在发生。开关仍然更好,但您的代码应该是这样的:

if ($_POST['sizes'] == "Small ($30)") { $total = "30";
} else if ($_POST['sizes'] == "Medium ($40)") { $total = "40";
} else if ($_POST['sizes'] == "Large ($50)") { $total = "50";
} else { $total = $_POST['price']; }

对于每个说问题在于 30 美元、40 美元等的人来说,事实并非如此。变量不能以数字开头,因此 PHP 将忽略 $40 等。

于 2008-10-08T20:55:25.047 回答
1

尝试使用单引号

if ($_POST['sizes'] == 'Small ($30)'){$total = "30";}
elseif ($_POST['sizes'] == 'Medium ($40)'){$total = "40";}
elseif ($_POST['sizes'] == 'Large ($50)'){$total = "50";}
else {$total = $_POST['price'];}

双引号字符串使用变量插值,因此 $ 符号变得有意义!有关如何在 PHP 中声明字符串文字的差异,请参阅此手册页。

(编辑以纠正逻辑错误 - 正如其他人指出的那样,这里的开关会更清晰)

于 2008-10-08T20:27:12.840 回答
1

或者,甚至比笨重的开关更好,您可以利用这个简单的逻辑并练习“数据驱动编程”:

$vals = array(
    'Small ($30)' => 30,
    'Medium ($40)' => 40,
    'Large ($50)' => 50
);

$total = array_key_exists($_POST['sizes'], $vals)
    ? $vals[$_POST['sizes']]
    : $_POST['price'];
于 2009-02-04T00:01:58.717 回答
1

除了此错误的实际原因之外,如果您使用了标签以外的其他值,则可以避免此错误,例如:

<select name="sizes">
    <option value="small">Small ($30)</option>
    <option value="meduim">Medium ($40)</option>
    <option value="large">Large ($50)</option>
</select>
于 2009-02-04T00:13:50.583 回答
0

$total 是一个字符串吗?

$total = "30"; 是字符串的语法。$总计 = 30; 对于数字是正确的。

于 2009-02-03T23:51:38.490 回答
0

这里不是有安全漏洞吗?如果有人只是为默认条款提交他们想要的任何价格怎么办?

于 2009-02-03T23:53:38.877 回答
0
// 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'];
于 2009-02-04T00:04:48.650 回答