php - 将具有多个值的多行插入数据库
问题描述
我想将多行插入到有多个值可供选择的数据库中。
foreach($_POST["txtName"] as $name){
foreach($_POST["txtMaterial"] as $material){
$sQuery = $db->prepare('SELECT * FROM products WHERE name = :sName AND material = :sMaterial AND size = :sSize GROUP BY id');
$sQuery->bindValue(':sName', $name);
$sQuery->bindValue(':sMaterial', $material);
$sQuery->bindValue(':sSize', $_POST["txtSize"]);
$sQuery->execute();
$aOrders = $sQuery->fetchAll();
foreach($aOrders as $aOrder){
$sQuery2 = $db->prepare('INSERT INTO orders VALUES (null, :sUser, :sProduct, CURRENT_TIMESTAMP)');
$sQuery2->bindValue(':sUser', $_SESSION['jUser']['id']);
$sQuery2->bindValue(':sProduct', $aOrder['id']);
$sQuery2->execute();
if($sQuery2->rowCount()){
session_destroy();
echo '{"status":1, "message":"success"}';
}
echo '{"status":0, "message":"error"}';
}
}
}
我已经尝试过了,但是它插入了具有相同名称和不同材料的行。HTML 如下所示:
<div class='product'>
<div class='content'>
<input name='txtName[]' class='txtName' type='text' value=''>
</div>
<div class='chooseProduct'>
<div class='attributes'>
<div class='materials' id='".rand()."'>
<div class='text'>Material:</div>
<select class='materials-option' name='txtMaterial[]' onChange='getMaterial(this, $(this).parent().siblings());'>
<option value='0' selected disabled>Choose material</option>
<option value='".$aMaterial['material_id']."' id='".$aMaterial['material_id']."'>".$aMaterial['material_name']."</option>
</select>
</div>
<div class='sizes' id='".rand()."'>
<div class='text'>Size:</div>
<select class='size-option' name='txtSize' onChange='getSize(this);'>
<option value='0' selected disabled>Choose size</option>
<option value='".$aSize['size_id']."' id='".$aSize['size_id']."'>".$aSize['size_name']."</option>
</select>
</div>
</div>
</div>
</div>
谁能帮助我根据选择的内容插入具有不同名称、材料和大小的行?谢谢你。
解决方案
我认为我们要去的地方是txtMaterial
每个人都会有一个txtName
所以循环内的循环不是你想要的。
创建一个循环,捕获索引,然后使用该索引访问其他 2 个数组数据
foreach($_POST["txtName"] as $idx => $name){
// the GROUP BY id in this query seems rather an odd idea
// specially as id's are normally unique
$sQuery = $db->prepare('SELECT *
FROM products
WHERE name = :sName
AND material = :sMaterial
AND size = :sSize
GROUP BY id');
$sQuery->bindValue(':sName', $name);
$sQuery->bindValue(':sMaterial', $_POST["txtMaterial"][$idx]);
$sQuery->bindValue(':sSize', $_POST["txtSize"][$idx]);
$sQuery->execute();
// Will the above query return more than one row???
$aOrders = $sQuery->fetchAll();
foreach($aOrders as $aOrder){
$sQuery2 = $db->prepare('INSERT INTO orders
VALUES (null, :sUser, :sProduct, CURRENT_TIMESTAMP)');
$sQuery2->bindValue(':sUser', $_SESSION['jUser']['id']);
$sQuery2->bindValue(':sProduct', $aOrder['id']);
// INSERT query like UPDATE and DELETE will return either
// TRUE or FALSE to indicate if the query was successful or not
$success = $sQuery2->execute();
if($success){
// no idea why you would want to destroy the session
// here while you are still in a loop that will want to use it
// next time round the loop
//session_destroy();
echo '{"status":1, "message":"success"}';
}
// this will run EVERY time round the loop
// this will just confuse everybody !!!
echo '{"status":0, "message":"error"}';
}
}
推荐阅读
- c++ - 即使函数 f1 没有返回任何值并且它的返回类型为 null,这段代码是如何工作的?
- webpack - Webpack:发出的块不创建主入口点
- python - 如何搜索文件并检查是否有
- javascript - 有条件的 Vuelidate 验证器
- javascript - 无法从 node.js 中的 child_process 访问数组
- r - 如何将数据框 (B) 中的列合并到数据框 (A) 中,但列 (Y) 由数据框 (A) 中另一列中的值组织?
- python - Python 3 部分总和
- java - Java开发包内部错误61003
- vhdl - 我用于实现某些 fsm 的 vhdl 代码无法正常工作
- python - 计算天体中窗口的变异系数