gpt4 book ai didi

php - 如何动态选择特定的表字段?

转载 作者:行者123 更新时间:2023-11-30 22:12:33 25 4
gpt4 key购买 nike

我正在设计一个学校门户网站。我想要这样一种情况,即教师可以从我的表格中的科目列表中选择一个特定科目并输入学生的分数。

之后,所选科目的个别学生的分数将输入数据库。

下面是我的表结构。

my table structure

表单由while循环生成。我们的想法是通过点击一次获得学生的分数。

Form for the scores

下面是我的代码。请问,我做错了什么?

$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>
";
}
}

最佳答案

根据您的评论,您希望将表单条目与其相应的数据库行、学生或其他标识符相关联。

为了关联表单字段,您需要提交 form fields as an array更新脚本要处理的值。您可以通过使用方括号作为表单字段名称属性的后缀来完成此操作。像 name="field[]" 并可选择提供一个公共(public)标识符,如数据库表行 ID,这样就不会出现丢失记录的问题。

数据 View

<?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"
}
}
}

然后您需要在更新或插入查询中处理数据数组,并添加您自己的错误捕获和条件以生成您需要的查询。

插入 Controller

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')

更新 Controller

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'

As note of best practices, I strongly urge you to look into using prepared statements to avoid sql injection attacks. http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

关于php - 如何动态选择特定的表字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39597928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com