尝试发送数组时只插入最后一行

时间:2018-04-25 20:07:36

标签: php mysqli

我的表包含表单输入字段,其中值来自数据库。现在我想在数据库的新表中提交值。但是当我按下提交按钮时,只插入最后一行!我犯的错是什么?请帮忙。

数据提取代码:

<?php
        if (isset($_POST['show'])) {

            $class = $_POST["Class"];
            $sql = "SELECT * FROM students WHERE Class='$class'  ORDER BY Roll ";
            $result = $conn->query($sql);

            if ($result->num_rows > 0) {
                // output data of each row
                ?>

<form action="" method="POST">
 <table class="table table-bordered table-hover" style="width: 85%;text-align: center">

         <tr >
           <th>Roll</th>
           <th>Student's Name</th>
           <th>Attendance</th>

</tr>
    <?php while ($row = $result->fetch_assoc()) { ?>
          <tr>
      <td><input value="<?php echo $row['Roll']; ?>" name="Roll[]" readonly required=""/></td>
      <td><input value="<?php echo $row['Name']; ?>" name="Name[]" readonly required=""/></td>
       <td><select name="Status[]">
              <option value="0">0</option>
              <option value="1">1</option>
              </select></td>

       </tr>

   <?php } ?>

 </table>
<input type="submit" name="save" value="Save" style="width: 50%;margin-left: 20%">

</form>

 <?php
} else {
$message = "Sorry! No result!";
 echo "<script type='text/javascript'>alert('$message');</script>";
            }
  $conn->close();
}
?>

数组插入代码:

<?PHP
if (isset($_POST["save"])) {

foreach ($_POST["Roll"] as $rec => $value) {
$Roll = $_POST["Roll"][$rec];

$Name = $_POST["Name"][$rec];
$Status = $_POST["Status"][$rec];
$Date = date('Y-m-d');
$sql = "INSERT INTO `attendance`(`id`, `Date`, `Roll`, `Name`, `Status`) VALUES ('','$Date','$Roll','$Name','$Status')";


}
if ($conn->query($sql) === TRUE) {
 $message = "Saved !";
echo "<script type='text/javascript'>alert('$message');</script>";
} else {
 echo "Error: " . $sql . "<br>" . $conn->error;
 }
}
?>

2 个答案:

答案 0 :(得分:0)

用这个替换相关的行:

$sql .= "INSERT INTO `attendance`(`id`, `Date`, `Roll`, `Name`, `Status`) VALUES ('','$Date','$Roll','$Name','$Status');";

然后在foreach循环之前添加:

$sql = "";

如果您使用的是mysqli,那么您还需要将if语句替换为:

if ($conn->multi_query($sql) === TRUE) {

这会将所有插入组合成一个可以用一个查询语句执行的字符串,而不是将查询放在foreach中并对数据库进行n次调用。

答案 1 :(得分:0)

1)正如John Ellmore在评论中所发表的那样:

您需要在foreach循环中调用$ conn-&gt; query(...),而不是在它之后。 -

2)如果你的代码“更漂亮”,你可能会更容易注意到这个问题。为每个循环或其他包含缩进三个空格。当你退出夹杂物时,并且恢复正常。然后你(很可能)很容易看到你的问题。这些“最佳实践”项目经常受到“专业人士”甚至是新手的嘲笑。但是一个好的IDE可以帮助你完成这个缩进过程,并且可能每天编码都会让生活更轻松。