我正在设计一个学校门户网站。我想要一种情况,老师可以从我的表格中的主题列表中选择一个特定的主题,并输入分数。
之后,所选科目的个别学生的分数将输入数据库。
下面是我的表结构。
表单由while循环生成。该想法是通过点击立即获得学生的分数。
以下是我的代码。请问,我做错了什么?
$moreDetails = mysqli_query(
$con,
"select id,reg_num,$subject,term,pin from ca where class='$class'"
);
if ($moreDetails) {
while($row = mysqli_fetch_assoc($moreDetails)){
$id = $row['id'];
$reg = $row['reg_num'];
$sub = $row[$subject];
echo "
<tr>
<td>$id</td>
<td>$reg</td>
<td><label for='score'></label>
<input type='text' class='form-control' name='$sub' />
<input type='hidden' name='assessment'/>
</td>
</tr>
";
}
}
答案 0 :(得分:0)
根据您的意见,您希望将表单条目与其对应的数据库行,学生或其他标识符相关联。
要关联表单字段,您需要提交要处理的更新脚本的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