编写对复选框选项值进行求和的代码的最佳方法是什么

时间:2018-03-21 18:18:55

标签: php forms

我希望有一个表单,使用户可以选择车辆。用户应该获得他选择的总价。我写了这个小脚本,它运行正常。我只是好奇有没有更好的方法来做到这一点。例如,foreach循环中有很多IF。如果我有100个复选框怎么办?我应该以某种方式自动化脚本,对于每种新型车辆,脚本应该制作新的IF声明吗?这听起来很尴尬。有没有办法直接以复选框形式或其他东西放置一些价格?然而,做这种事情的最佳方式是什么。感谢名单。     

if (isset($_POST['submit'])){
    $automobils=$_POST['auto'];
    $set= array();

    echo "You ordered: " ;
    foreach ($automobils as $model){
        if ($model == "chevrolet"){
            $set[]=20000;
        }
        if ($model == "reno"){
            $set[]=15000;
        }
        if ($model == "punto"){
            $set[]=10000;
        }
        echo "<i>$model </i>";
    }
    $sum = array_sum($set);
    echo "</br> Whole price is $sum $";
}
?>

<form action="" method="post">
<input type="checkbox" name="auto[]" value="chevrolet"/> Chevrolet</br>
<input type="checkbox" name="auto[]" value="reno"/> Reno</br>
<input type="checkbox" name="auto[]" value="punto"/> Punto</br>

<input type="submit" name="submit" value="Submit"/> 
</form>

3 个答案:

答案 0 :(得分:1)

没有添加数据库和另一个有趣的编程水平。 你可以用一个爆炸命令来做到这一点(并且真的缩小了你的foreach)

输入值

 value="chevrolet"

更改为

 value="chevrolet;20000"

然后在你的foreach循环中

 foreach ($automobils as $model){
      $eachmodel = explode(";",$model);
      $set[] = $eachmodel[1];
 }

答案 1 :(得分:1)

理想情况下,您可以将可能的值及其相应的价格存储在数据库中,而不是存储在代码中。但这是一个快速的解决方案,涉及一个关联数组,作为每辆车与其价格之间的映射。

$map = [
    'chevrolet' => 20000,
    'reno' => 15000,
    'punto' => 10000
];
if (!empty($_POST['auto']) {
    echo 'You ordered:<br />';
    $total = 0;
    foreach($_POST['auto'] as $model)
        if (array_key_exists($model, $map)) {
            echo ' - '.$model.'<br />';
            $total += $map[$model];
        }
    echo 'Total price: '.$total.'<br />';
}

然后,您只需在添加/更改车辆/价格等时更新地图。

注意它的关键是存储允许的值/价格代码端(或在数据库中)而不是在您的表单中,因为后者可以通过DOM编辑,因此您需要某些服务器 - 无论如何都要验证它。

答案 2 :(得分:-1)

如果您想将数字放入复选框。您可以使用一些特殊的分隔符将其赋值。 例如

this

稍后您可以使用Explode字符串并获取所选的值。