根据您的意见,您希望将表单条目与其相应的数据库行,学生或其他标识符相关联。
为了关联表单字段,您需要提交值的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