php - 使用php计算多个复选框和价格
问题描述
我在数据库数据库中有表服务。它有 3 个字段 id、service_type、amount。
我有 html 表单,其中包含选择服务类型的复选框,我选择了服务类型,但金额必须自动计算并存储在数据库金额列中。但是当我从复选框中选择服务时出现一个错误,它被选中并存储在数据库中,但没有存储价格。我的脚本如下:
<input type="checkbox" name="services[]" value="oilchange"
<input type="checkbox" name="services[]" value="acrepair"
<input type="checkbox" name="services[]" value="tyrechange"
<input type="submit" name="btnservice" value="Confirm Services">
现在php脚本如下:
<?php $price=0.0;if (isset($_POST['services'])) {
$service=$_POST['services'];
$c=count($service);
for ($i=0; $i < $c; $i++) {
if ($service[$i]==fullservice) {
$price=$price+5000;
$iq="INSERT INTO tblservices( amount) VALUES ('$price')";
$run=mysqli_query($con,$iq);
if ($run) {
}
}
elseif ($service[$i]==tyrebalance) {
# code...
$price=$price+4000;
$iq="INSERT INTO tblservices( amount) VALUES ('$price')";
$run=mysqli_query($con,$iq);
if ($run) {
}
}
elseif($service[$i]==oilchange) {
# code...
$price=$price+3000;
$iq="INSERT INTO tblservices( amount) VALUES ('$price')";
$run=mysqli_query($con,$iq);
if ($run) {
}
}
elseif ($service[$i]==acrepair) {
# code...
$price=$price+2000;
$iq="INSERT INTO tblservices( amount) VALUES ('$price')";
$run=mysqli_query($con,$iq);
if ($run) {
}
}
elseif ($service[$i]==tyrechange) {
# code...
$price=$price+1000;
$iq="INSERT INTO tblservices( amount) VALUES ('$price')";
$run=mysqli_query($con,$iq);
if ($run) {
}
}
}
}if (isset($_POST['btnservice'])) {
$a=$_POST['services'];
$type=implode("/",$a);
$query="insert into tblservices(service_type,amount) values('$type','$price')";
$run=mysqli_query($con,$query);
if ($run) {
echo "<script type = \"text/javascript\">
alert(\"Services Selected.................\");
window.location = (\"services.php\")
</script>";
}
else{
echo "<script type = \"text/javascript\">
alert(\"Login Failed. Try Again................\");
window.location = (\"services.php\")
</script>";
}
}?>
我是新手,对不起,这就是为什么我不能上传我需要赢得声誉的图片,所以我可以发布图片以便更好或更详细地解释我的问题。
解决方案
我可以在您的示例中看到两种类型的查询。在这里分享单一服务类型插入和总价插入。希望这可以帮助!!
<div class="container">
<form action="" method="post">
<input type="checkbox" name="services[]" value="oilchange" />oilchange
<input type="checkbox" name="services[]" value="acrepair" />acrepair
<input type="checkbox" name="services[]" value="tyrechange" />tyrechange
<br/>
<input type="submit" name="btnservice" value="Confirm Services">
</form> <?php
$serviceChargeArr = array(
'fullservice' => 5000,
'tyrebalance' => 4000,
'oilchange' => 3000,
'acrepair' => 2000,
'tyrechange' => 1000
);
$priceTotal = 0.0;
if (isset($_POST['btnservice'])) {
if (isset($_POST['services'])) {
$serviceArr = $_POST['services'];
$serviceArrCnt = count($serviceArr);
//QUERY 1 - insert each with respect to clicked checkboxes
for ($i = 0; $i < $serviceArrCnt; $i++) {
if ($eachPrice = $serviceChargeArr[$serviceArr[$i]]) {
$insertArr[] = "('$serviceArr[$i]', '$eachPrice')";
}
}
if (!empty($insertArr)) {//sigle insert query -each service and its price will be inserted
$query="insert into tblservices (service_type, amount)
values".implode(", ",$insertArr ).";";
echo $query."<br/>";
}//QUERY 1 ENDS
//QUERY 2 - insert single row with comma separated values and total price
for ($i = 0; $i < $serviceArrCnt; $i++) {
if ($eachPrice = $serviceChargeArr[$serviceArr[$i]]) {
$priceTotal += $eachPrice;
}
}
if (!empty($serviceArr)) {
$seviceList = implode(',', $serviceArr);
$query="insert into tblservices (service_type, amount)
values ('{$seviceList}' , '{$priceTotal}') ;";
echo $query."<br/>";
}//QUERY 2 ENDS
if($query) {
$run = mysqli_query($con, $query);
if ($run) {
echo "<br/> SUCCESS : inserted";
} else {
echo "<br/> ERROR : try again<br/>Mysql Error: ".$con->error;
}
}
}
} ?>
</div>
推荐阅读
- git - 与 npm 等包管理器相比,使用 git 子模块的主要优势是什么?
- javascript - 有没有办法让 Electron 主进程脚本使用 `postMessage` 函数监听页面发布的消息?
- linkedin - 如何使用 LinkedIn API 获取公司洞察
- python - 展开列表字典以获取列表中每个值的键排列
- c++ - 将旧库与新模块系统一起使用
- javascript - 在 ReactJS 中传递 Props
- python - 我无法将从套接字接收的数据更改为整数。我收到此错误“invalidlateral for int () with base 10”
- html - 在文件类型输入的接受属性中传递 .png 和 image/png 有什么区别?
- php - Laravel 中的条件格式
- c# - 什么时候在 Unity 中将非静态 GameObject 方法和属性与 gameObject 放在一起?