我正在尝试在数组中存储 $_POST 值,但我的输入字段具有不同的名称,并且当我插入时只插入一个字段。
这是我的 php 代码。
<?php
$conn = new mysqli("localhost","root","","invoice");
if (isset($_POST['submit'])) {
$des = $_POST['describe'];
$qty = $_POST['quantity'];
$rate = $_POST['rate'];
$array = array($des, $qty, $rate);
foreach ($array as $key => $value) {
$sql = "INSERT INTO `product_description`(`product`, `quantity`, `rate`) VALUES ('".implode('","', $value)")";
$conn->query($sql);
}
}
?>
我是 php 语言的新手,所以任何人都可以帮助我将多个字段值存储在数组中并运行插入查询吗?
1st :由于您的输入是数组,因此您需要使用for
循环来获取each row
记录
第二:使用prepared statement
避免sql injection
<?php
$conn = new mysqli("localhost","root","","invoice");
if (isset($_POST['submit'])) {
for($i=0;$i<count($_POST['describe']);$i++){
$stmt = $conn->prepare("INSERT INTO `product_description` (`product`, `quantity`, `rate`) VALUES (?,?,?)");
$stmt->bind_param('sss',$_POST['describe'][$i],$_POST['quantity'][$i],$_POST['rate'][$i]);
$stmt->execute();
$row_count = $stmt->affected_rows;
if($row_count>0){
echo "data inserted";
}else{
echo "data inserted";
}
}
}
?>
与其像这样使用 foreach 尝试
$sql = "INSERT INTO `product_description`(`product`, `quantity`, `rate`)
VALUES ('".$array[0]."','".$array[1]."','".$array[2]."')";
$conn->query($sql);
你不需要做内爆或foreach。当您提交表单并使用get
或post
获取结果时,您可以看到结果已经采用数组的形式。
我建议您使用bindparam
. 您的查询对sql injection
开放。
试试这个:
<?php
$conn = new mysqli("localhost","root","","invoice");
if (isset($_POST['submit'])) {
explode($_POST);
$sql = "INSERT INTO `product_description`(`product`, `quantity`, `rate`) VALUES ('$describe,$quantity,$rate')";
$conn->query($sql);
}
?>
试试这个
if (isset($_POST['submit'])) {
foreach($_POST['describe'] as $key=>$row){
$stmt = $conn->prepare("INSERT INTO `product_description` (`product`, `quantity`, `rate`) VALUES (?,?,?)");
$stmt->bind_param('sss',$row,$_POST[$key]['quantity'],$_POST[$key]['rate']);
$stmt->execute();
$row_count = $stmt->affected_rows;
if($row_count>0){
echo "data inserted";
}
}
}
是否有必要首先将您的值放在数组中?只需将您的查询更改为此查询并执行它
"INSERT INTO ´product_description´(´product´, ´quantity´, ´rate´) VALUES($des, $qty, $rate)";
删除所有 foreach 和数组创建语句