В соответствии с вашими комментариями вы хотите связать записи формы с соответствующими строками базы данных, студентами или другим идентификатором.
Чтобы связать поля формы, вам необходимо отправить form fields as an array значений для скрипта обновления для обработки. Вы делаете это, используя квадратные скобки в качестве суффикса атрибута имени поля формы. Например, name="field[]"
и необязательно поставлять общий идентификатор, такой как идентификатор строки таблицы базы данных, чтобы не возникало проблем с отсутствующими записями.
Просмотр данных
<?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')
Контроллер Update
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