在数据库中每行添加不正确的复选框值

时间:2017-05-18 03:51:21

标签: php html mysql checkbox mysqli

我想为每行插入正确的复选框值。见这个

Picture 1

但是当我尝试按下提交按钮时,数据会重复,具体取决于我检查过的最后一个复选框。见这个

Picture 2

以下是我的参考代码。

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

2 个答案:

答案 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[]"