this image explain what i need我在使用PDO将多个输入记录插入数据库时遇到问题。 foreach的这段代码成功添加但只有表中一行的单个记录,它没有添加所有记录行。这是我的代码:
Html代码:
<table border="0" cellspacing="0" class="table table-bordered table-hover" data-name="cont-table">
<tr>
<th class="text-center"> م </th>
<th class="text-center"> اسم الصنف </th>
<th class="text-center"> الوحدة </th>
<th class="text-center"> الكمية </th>
<th class="text-center"> سعر الوحدة </th>
<th class="text-center"> العام المالي </th>
<th class="text-center"> إجمالي قيمة الصنف </th>
</tr>
</thead>
<tr>
<td></td>
<td><span id="snum">1.</span></td>
<td><!--<input type="text" id="first_name" name="first_name[]"/>!-->
<select class="select" id="first_name" name="items[]">
查询(&#34; SELECT first_name6 FROM item&#34;);
// $ stmt = $ pdo-&gt; execute();
while($ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)){
回声&#34;&#34; 。 $ row [&#39; first_name6&#39;]。 &#34;&#34 ;;
}
?&GT;
</select></td>
<td><!--<input type="text" id="last_name" name="last_name[]"/>!-->
<select class="select" id="last_name" name="units[]">
查询(&#34; SELECT first_name7 FROM unit&#34;);
// $ stmt = $ pdo-&gt; execute();
while($ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)){
回声&#34;&#34; 。 $ row [&#39; first_name7&#39;]。 &#34;&#34 ;;
}
?&GT;
! - &GT;
查询(&#34; SELECT first_name8 FROM financial&#34;);
// $ stmt = $ pdo-&gt; execute();
while($ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)){
回声&#34;&#34; 。 $ row [&#39; first_name8&#39;]。 &#34;&#34 ;;
}
?&GT;
</select></td>
<td><input type="text" id="total" name="totals[]" class="amount" value="" /></td>
</tr>
</table>
<button id="add_row" type="button" class="delete btn btn-default pull-right">مسح</button>
<button id="add_row" style="margin-right:5px;" type="button" class="addmore btn btn-default pull-right">اضاف صنف</button>
</form>
php代码:
if(isset($_POST['set-cont'])) {
foreach ($_POST['items'] as $key => $value) {
$items = $_POST["items"][$key];
$units = $_POST["units"][$key];
$qtys = $_POST["qtys"][$key];
$unitno = $_POST["unitno"][$key];
$financials = $_POST["financials"][$key];
$totals = $_POST["totals"][$key];
try {
$db = DB();
$query = $db->prepare("INSERT INTO table_contract (items, units,
qtys,unitno,financials,totals)
VALUES(:项:单位,:qtys,:unitno,:财务,:总计)&#34);
$query->bindParam("items", $items, PDO::PARAM_STR);
$query->bindParam("units", $units, PDO::PARAM_STR);
$query->bindParam("qtys", $qtys, PDO::PARAM_STR);
$query->bindParam("unitno", $unitno, PDO::PARAM_STR);
$query->bindParam("financials", $financials, PDO::PARAM_STR);
$query->bindParam("totals", $totals, PDO::PARAM_STR);
$query->execute();
} catch (PDOException $e) {
exit($e->getMessage());
}
}
}
答案 0 :(得分:0)
从return $db->lastInsertId();
阻止中移除foreach
。
一次迭代后它将返回值。这就是原因,只有一个值插入而休息不是。
看,我发现了一些错误,我在下面说明了这些错误。跟着它,它会起作用。
<强> 更改 强>
1)在此复选框中输入名称。 <td><input type="checkbox" class="case" name="checkedCheckBox[]"/></td>
。并且,名称必须是数组类型。因为,仅基于此复选框,您将在表中插入值。正确?
2)然后,ID不能相同。您提供了4个输入ID first_name
,这是不正确的。将所有ID更改为唯一ID。 ID必须是唯一的。
3)在 new-contract.php 页面中,找到通过此行检查的复选框。 foreach ($_POST['checkedCheckBox'] as $key => $value) {
。在这里,checkedCheckBox
是我在 Point-1 中提到的名称。
4)在 new-contract.php 页面中,从return $db->lastInsertId();
语句中删除foreach
。否则,在Ist Iteration之后,代码将退出并返回Last Inserted ID。
更新代码
<强>的index.php 强>
<form action="new-contract.php" method="post">
<table border="0" cellspacing="0" class="table table-bordered table-hover">
<thead style="">
<tr>
<th class="check-this">
<input class="check_all" type="checkbox" onclick="select_all()"/>
</th>
<th class="text-center"> م </th>
<th class="text-center"> اسم الصنف </th>
<th class="text-center"> الوحدة </th>
<th class="text-center"> الكمية </th>
<th class="text-center"> سعر الوحدة </th>
<th class="text-center"> العام المالي </th>
<th class="text-center"> إجمالي قيمة الصنف </th>
</tr>
</thead>
<tr>
<td><input type="checkbox" class="case" name="checkedCheckBox[]"/></td>
<td><span id="snum">1.</span></td>
<td>
<select class="select" id="first_name1" name="items[]">
</select>
</td>
<td>
<select class="select" id="first_name2" name="units[]">
</select>
</td>
<td><input class="select qty" type="number" id="tamil" name="qtys[]"/></td>
<td><input class="select unit" type="number" id="english" name="unitno[]" /></td>
<td>
<select class="select " id="first_name3" name="financials[]">
</select>
</td>
<td><input type="text" id="total" name="totals[]" class="amount" value="" /></td>
</tr>
</table>
<input name="set-cont" type="submit" class="sb-btn center" value="حفظ"/>
</form>
新-contract.php 强>
if(isset($_POST['set-cont'])) {
foreach ($_POST['checkedCheckBox'] as $key => $value) {
$items = $_POST["items"][$key];
$units = $_POST["units"][$key];
$qtys = $_POST["qtys"][$key];
$unitno = $_POST["unitno"][$key];
$financials = $_POST["financials"][$key];
$totals = $_POST["totals"][$key];
try {
$db = DB();
$query = $db->prepare("INSERT INTO table_contract (items, units, qtys, unitno, financials, totals) VALUES(:items,:units,:qtys,:unitno,:financials,:totals)");
$query->bindParam("items", $items, PDO::PARAM_STR);
$query->bindParam("units", $units, PDO::PARAM_STR);
$query->bindParam("qtys", $qtys, PDO::PARAM_STR);
$query->bindParam("unitno", $unitno, PDO::PARAM_STR);
$query->bindParam("financials", $financials, PDO::PARAM_STR);
$qQuery->bindParam("totals", $totals, PDO::PARAM_STR);
$query->execute();
} catch (PDOException $e) {
exit($e->getMessage());
}
}
}