あなたのコメントによれば、フォームエントリは、対応するデータベースの行、学生、または他の識別子に関連付けることを目指しています。
フォームフィールドを関連付けるには、処理する更新スクリプトの値のform fields as an arrayを送信する必要があります。これを行うには、フォームフィールド名属性の接尾辞として角括弧を使用します。 name="field[]"
のように、オプションでデータベーステーブルの行IDのような共通の識別子を指定すると、レコードの欠落に問題は発生しません。あなたはこれに類似$_POST
値の結果として生じるが得られます
データビュー
<?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 } ?>
。
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
私は '$件名 'がデータベースの列であることをかなり心配しています... – NDM
あなたはあなたの正確な問題を記述する必要があります。しかし、 '$ sub'は整数値になりますが、これはあなたの意図した結果には見えません。 '' class = '$ class' "' 'フォームコントロールを変更する' 'input type = 'text' class = 'form-control' name = '$ subject' value = '$ sub' /> ' – fyrye