【发布时间】:2023-03-27 06:29:02
【问题描述】:
如何将来自相同输入名称的值保存在多行中。
比如我的php,html代码来自:
<form action="functions.php" method="post" name="grades">
<table>
<thead>
<tr>
<th>Subject</th>
<th>Grade</th>
</tr>
</thead>
<tbody>
<?php $unos = $baza->odradi("SELECT subject FROM subjects ORDER BY id ASC");
if (!empty($unos)) {
foreach($unos as $row=>$value){ ?>
<tr>
<td><input type="hidden" name="subject_id[]" value="<?= $unos[$row]["id"]; ?>"> <?= $unos[$row]["subject"]; ?></td>
<td>
<select class="form-control input-xs" name="grade_id[]" required>
<option selected disabled>Select grade</option>
<option value="5">excelent</option>
<option value="4">very good</option>
<option value="3">good</option>
<option value="2">ok</option>
<option value="1">bad</option>
</select>
</td>
</tr>
</tbody>
</table>
<input type="submit" name="grades" class="btn btn-success btn-lg" value="Submit grades">
</form>
需要保存的函数如下所示:
if (isset($_POST['grades'])) {
foreach (array_combine($_POST['subject_id'], $_POST['grade_id']) as $i => $val){
$subject = $_POST["subject_id"][$i];
$grade = $_POST["grade_id"][$i];
$sql = "INSERT INTO final_grade (subject_id,grade_id) VALUES ('$subject','$grade')";
$u = mysqli_query($db, $sql);
}
但都乱七八糟了,前两行没有保存成绩或科目,有些行完全丢失了。
【问题讨论】:
-
你不需要
combine()。只需使用其中一个输入数组来设置循环,然后在访问循环内的另一个数组时使用$i。而且您需要为安全/稳定性准备好声明。