php - 如何通过 PHP 和 DB 中的 INSERT 为 HTML 表单中的单个名称传递多个值
问题描述
我正在处理一个简单的购物车页面,它读取购物车表中用户 ID = 用户 ID 的产品列表,并使用产品 ID 获取列出的产品详细信息。
但是,一旦用户单击“结帐”按钮,他就会将产品详细信息提交给 PHP,PHP 会将这些传递的值插入到另一个表中。
我的代码如下:
购物车.php
<form action="final.php" method="post" >
<?php
$sql4 = "SELECT * FROM cart WHERE u_id = '$u_id'";
$result4 = $conn->query($sql4);
if ($result4->num_rows > 0) {
while($row4 = $result4->fetch_assoc()) {
$p_id = $row4["p_id"];
?>
<?php
$sql5 = "SELECT * FROM products WHERE id = '$p_id'";
$result5 = $conn->query($sql5);
if ($result5->num_rows > 0) {
while($row5 = $result5->fetch_assoc()) {
?>
<li class="cart-item">
<div class="product-line-grid">
<div class="product-line-grid-left col-md-3 col-xs-4">
<span class="product-image media-middle">
<img src="img/products/<?php echo $row5["pic"]; ?>" alt="Mammo diablo except obtain">
</span>
</div>
<div class="product-line-grid-body col-md-4 col-xs-8">
<div class="product-line-info">
<a class="label" href="indi.php?id=<?php echo $row5["id"]; ?>"><?php echo $row5["name"]; ?></a>
</div>
<input type="hidden" name="p_id" value="<?php echo $row5["id"]; ?>" />
<div class="product-line-info">
<span class="value" ><input class="form-control" disabled type="text" id="input1<?php echo $row5["id"]; ?>" value="<?php echo $row5["price"]; ?>"/></span>
</div>
<input type="hidden" name="price" value="<?php echo $row5["price"]; ?>" />
<br>
<div class="product-line-info">
<span class="label"><strong>Available Stock : </strong></span>
<span class="value"><?php echo $row5["stock"]; ?></span>
</div>
<div class="product-line-info">
<span class="label"><strong>Category : </strong></span>
<span class="value"><?php echo $row5["cat"]; ?></span>
</div>
<div class="product-line-info">
<span class="label"><strong>Sub Category : </strong></span>
<span class="value"><?php echo $row5["subcat"]; ?></span>
</div>
<input type="hidden" name="stock" value="<?php echo $row5["stock"]; ?>" />
</div>
<div class="product-line-grid-right product-line-actions col-md-5 col-xs-12">
<div class="row">
<div class="col-xs-4 hidden-md-up"></div>
<div class="col-md-10 col-xs-6">
<div class="row">
<div class="col-md-6 col-xs-6">
<div class="">
<input class="form-control qty5" id="input2<?php echo $row5["id"]; ?>" type="text" value="<?php echo $row4["quantity"]; ?>" name="quantity" min="1" style="display: block; background-color:white;border:1px solid lightblue;">
</div>
</div>
<div class="col-md-6 col-xs-2 price">
<span class="product-price">
<strong><input class="form-control qty1" disabled onblur="sum();" value="<?php echo $row5["price"]; ?>" name="eachfinal" type="text" id="output<?php echo $row5["id"]; ?>" /></strong>
</span>
</div>
</div>
</div>
<div class="col-md-2 col-xs-2 text-xs-right">
<div class="cart-line-product-actions ">
<a class="remove-from-cart" href="deletecart.php?id=<?php echo $row4["id"]; ?>" >
=<i class="material-icons pull-xs-left">delete</i>
</a>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
</div>
</li>
<?php
}
} else {
}
?>
<?php
}
} else {
}
?>
<button type="submit" class="btn btn-primary">Checkout</button>
</form>
最终的.php:
<?php
$p_id=$_POST["udf1"];
$price=$_POST["price"];
$stock=$_POST["stock"];
$conn = new mysqli ($servername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO final (p_id, price, stock)
VALUES ('$p_id', '$price', '$stock')";
if ($conn->query($sql) === TRUE) {
echo 'added successfully';
}
else {
echo "ERROR" . $sql . "<br>" . $conn->error;
}
?>
但是,如果我在购物车中只有一个产品并且我传递了相同的产品值,则此代码可以正常工作,但是,如果我在购物车中有多个产品并且我想传递它们的所有值并插入它们的值,它会失败。
在这里使用数组很重要,我在这里寻求您的帮助来解释它是如何完成的。
注意:请忽略 SQL 注入,因为我是初学者,我想正常尝试,然后选择它。
解决方案
使用数组,如:
购物车.php
<form action="final.php" method="post" >
<?php
$sql4 = "SELECT * FROM cart WHERE u_id = '$u_id'";
$result4 = $conn->query($sql4);
if ($result4->num_rows > 0) {
while($row4 = $result4->fetch_assoc()) {
$p_id = $row4["p_id"];
?>
<?php
$sql5 = "SELECT * FROM products WHERE id = '$p_id'";
$result5 = $conn->query($sql5);
if ($result5->num_rows > 0) {
while($row5 = $result5->fetch_assoc()) {
?>
<li class="cart-item">
<div class="product-line-grid">
<div class="product-line-grid-left col-md-3 col-xs-4">
<span class="product-image media-middle">
<img src="img/products/<?php echo $row5["pic"]; ?>" alt="Mammo diablo except obtain">
</span>
</div>
<div class="product-line-grid-body col-md-4 col-xs-8">
<div class="product-line-info">
<a class="label" href="indi.php?id=<?php echo $row5["id"]; ?>"><?php echo $row5["name"]; ?></a>
</div>
<input type="hidden" name="p_id[<?php echo $row5["id"]; ?>]" value="<?php echo $row5["id"]; ?>" />
<div class="product-line-info">
<span class="value" ><input class="form-control" disabled type="text" id="input1<?php echo $row5["id"]; ?>" value="<?php echo $row5["price"]; ?>"/></span>
</div>
<input type="hidden" name="price[<?php echo $row5["id"]; ?>]" value="<?php echo $row5["price"]; ?>" />
<br>
<div class="product-line-info">
<span class="label"><strong>Available Stock : </strong></span>
<span class="value"><?php echo $row5["stock"]; ?></span>
</div>
<div class="product-line-info">
<span class="label"><strong>Category : </strong></span>
<span class="value"><?php echo $row5["cat"]; ?></span>
</div>
<div class="product-line-info">
<span class="label"><strong>Sub Category : </strong></span>
<span class="value"><?php echo $row5["subcat"]; ?></span>
</div>
<input type="hidden" name="stock[<?php echo $row5["id"]; ?>]" value="<?php echo $row5["stock"]; ?>" />
</div>
<div class="product-line-grid-right product-line-actions col-md-5 col-xs-12">
<div class="row">
<div class="col-xs-4 hidden-md-up"></div>
<div class="col-md-10 col-xs-6">
<div class="row">
<div class="col-md-6 col-xs-6">
<div class="">
<input class="form-control qty5" id="input2<?php echo $row5["id"]; ?>" type="text" value="<?php echo $row4["quantity"]; ?>" name="quantity[<?php echo $row5["id"]; ?>]" min="1" style="display: block; background-color:white;border:1px solid lightblue;">
</div>
</div>
<div class="col-md-6 col-xs-2 price">
<span class="product-price">
<strong><input class="form-control qty1" disabled onblur="sum();" value="<?php echo $row5["price"]; ?>" name="eachfinal" type="text" id="output<?php echo $row5["id"]; ?>" /></strong>
</span>
</div>
</div>
</div>
<div class="col-md-2 col-xs-2 text-xs-right">
<div class="cart-line-product-actions ">
<a class="remove-from-cart" href="deletecart.php?id=<?php echo $row4["id"]; ?>" >
=<i class="material-icons pull-xs-left">delete</i>
</a>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
</div>
</li>
<?php
}
} else {
}
?>
<?php
}
} else {
}
?>
<button type="submit" class="btn btn-primary">Checkout</button>
</form>
最终的.php:
<?php
$prices=$_POST["price"];
$stocks=$_POST["stock"];
$conn = new mysqli ($servername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
foreach ($prices as $p_id => price) {
$stock = $stocks[$p_id];
$sql = "INSERT INTO final (p_id, price, stock)
VALUES ('$p_id', '$price', '$stock')";
if ($conn->query($sql) === TRUE) {
echo 'added successfully';
} else {
echo "ERROR" . $sql . "<br>" . $conn->error;
}
}
?>
最重要的部分是在 html 标签“输入”中。
推荐阅读
- r - 使用 plyr ldply 与函数内的函数并行
- flutter - flutter 如何从 API 获取标记并在地图上显示
- javascript - 道具更改时反应子组件不更新
- javascript - 如何将通过api收到的文件发送到谷歌驱动器nodejs
- mobile-application - 我应该选择哪种服务将网站转换为移动应用程序?
- jquery - jQuery追加到一个元素但在父元素的文本之后
- python - 以字符串形式获取 pandas 列名
- node.js - 未找到发送路线,
- sitefinity - sitefinity 参数 ActionResult 方法
- c# - unity c# for ... while ..代码崩溃,计算用户按键和用户按键的时间