我希望有一个表单,使用户可以选择车辆。用户应该获得他选择的总价。我写了这个小脚本,它运行正常。我只是好奇有没有更好的方法来做到这一点。例如,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>
答案 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字符串并获取所选的值。