我想为每行插入正确的复选框值。见这个
,
但是当我尝试按下提交按钮时,数据会重复,具体取决于我检查过的最后一个复选框。见这个
。
以下是我的参考代码。
<?php
include 'database.php';
session_start();
if(isset($_POST['save']))
{
$plant_id = $_POST['plant_id'];
$workplace_id = $_POST['workplace_id'];
$checklistSQL = $connect->query("SELECT * FROM checklist WHERE plant_id =
'$plant_id' AND workplace_id = '$workplace_id' ");
while($cdata = $checklistSQL->fetch_assoc())
{
$checklist = $cdata['checklist'];
$answer = $_POST['answer'];
$remarks = $_POST['remarks'];
$insertSQL = $connect->query("INSERT INTO report(checklist, answer, remarks) VALUES ('$checklist', '$answer', '$remarks') ");
}
}
?>
<?php
$checklistSQL = $connect->query("SELECT * FROM checklist WHERE plant_id = '$plant_id' AND workplace_id = '$workplace_id' ");
while($cdata = $checklistSQL->fetch_assoc())
{
$checklist = $cdata['checklist'];
?>
<tr>
<td><?php echo $checklist ?></td>
<td><input type="checkbox" name="answer" value="yes" <?php if(isset ($_POST['yes'])){ echo "Yes"; } ?> /></td>
<td><input type="checkbox" name="answer" value="no" <?php if(isset($_POST['no'])) { echo "No"; } ?> /></td>
<td><input type="checkbox" name="answer" value="n/a" <?php if(isset($_POST['n/a'])) { echo "N/A"; } ?> /></td>
<td><input type="text" name="remarks" class="remarks" placeholder"Remarks"/></td>
<?php
}
?>
</tr>
答案 0 :(得分:0)
您的代码容易受到SQL注入攻击。 问题出在这里:
<td><input type="checkbox" name="answer" value="yes" <?php if(isset ($_POST['yes'])){ echo "Yes"; } ?> /></td>
<td><input type="checkbox" name="answer" value="no" <?php if(isset($_POST['no'])) { echo "No"; } ?> /></td>
<td><input type="checkbox" name="answer" value="n/a" <?php if(isset($_POST['n/a'])) { echo "N/A"; } ?> /></td>
所有这些复选框都具有公共名称answer
,因此最后一个复选框选择覆盖以前选择的值。因此,将名称命名为数组:
answer[]
以便它可以包含多个值。并迭代
answer[]
获取所有值。
答案 1 :(得分:0)
我强烈建议使用无线电元素而不是从UI角度看复选框。
https://www.w3schools.com/html/html_forms.asp
但是,如果您想要复选框,则需要调整&#34;名称&#34;属性是一个数组,用于收集您要查找的数据。在PHP中,准备将数据作为数组捕获。
HTML
name="answer[]"