根據您的意見,您希望將表單條目與其相應的數據庫行,學生或其他標識符相關聯。
爲了關聯表單字段,您需要提交值的form fields as an array以供更新腳本處理。您可以使用方括號作爲表單字段名稱屬性的後綴。像name="field[]"
一樣,並可選地提供一個通用標識符,如數據庫錶行ID,以便不存在缺少記錄的問題。
數據視圖
<?php
while ($row = mysqli_fetch_assoc($moreDetails)) {
$id = $row['id'];
$reg = $row['reg_num'];
$sub = $row[$subject];
?>
<tr>
<td><?php echo $id; ?></td>
<td><?php echo $reg; ?></td>
<td>
<label for="score_<?php echo $id; ?>"></label>
<input id="score_<?php echo $id; ?>" type="text" class="form-control" name="student[<?php echo $id; ?>][score]" />
<input type='hidden' name='student[<?php echo $id; ?>][assessment]'/>
</td>
</tr>
<?php } ?>
,這將給你$_POST
值與此類似所得。
array(1) {
["student"]=>
array(3) {
["86236762057e1df012e662"]=>
array(2) {
["score"]=>
string(1) "a"
["assessment"]=>
string(1) "A"
}
["40443582357e1df012e668"]=>
array(2) {
["score"]=>
string(1) "b"
["assessment"]=>
string(1) "A"
}
["112264948957e1df012e66c"]=>
array(2) {
["score"]=>
string(1) "c"
["assessment"]=>
string(1) "A"
}
}
}
然後,你需要數據的陣列處理在更新或插入查詢,並添加自己的錯誤捕獲和條件生成查詢您的需求。
插入控制器
if (false === empty($_POST['student'])) {
$queryValues = array();
foreach ($_POST['student'] as $id => $student) {
$queryValues[] = "('" . $id . "', '" . $student['score'] . "')";
}
echo 'INSERT INTO ca (id, score) VALUES ' . implode(', ', $queryValues);
}
插入查詢結果
INSERT INTO ca (id, score) VALUES ('86236762057e1df012e662', 'a'), ('40443582357e1df012e668', 'b'), ('112264948957e1df012e66c', 'c')
更新控制器
if (false === empty($_POST['student'])) {
foreach ($_POST['student'] as $id => $student) {
echo "UPDATE ca
SET score = '" . $student['score'] . "'
WHERE id = '" . $id . "'";
}
}
個更新查詢結果
UPDATE ca SET score = 'a' WHERE id = '86236762057e1df012e662'
UPDATE ca SET score = 'b' WHERE id = '40443582357e1df012e668'
UPDATE ca SET score = 'c' WHERE id = '112264948957e1df012e66c'
隨着音符的最佳實踐,我強烈建議你考慮使用準備 聲明,以避免SQL注入攻擊。 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
你的代碼很容易受到SQL注入攻擊。隱藏的輸入沒有任何用處。你在做什麼錯了?很好的問題......你沒有解釋什麼是不工作...... – NDM
我很擔心'$ subject'是數據庫中的一列... – NDM
你需要描述你的確切問題。但'$ sub'是一個整數值,看起來並不是你想要的結果。使用'「SELECT * FROM ca WHERE class ='$ class'」'然後改變你的表單控件' ' – fyrye