Только последняя строка вставляется при попытке отправить массив - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть таблица, которая содержит поля ввода формы, где значения поступают из базы данных.Теперь я хотел представить значения в новой таблице в базе данных.Но когда я нажимаю кнопку отправки, вставляется только последний ряд!Какую ошибку я делаю?Пожалуйста, помогите.

Код выборки данных:

<?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 голосов
/ 25 апреля 2018

1) Как было сказано ранее в комментарии Джона Эллмора:

Вам необходимо вызывать $ conn-> query (...) в цикле foreach, а не после него.-

2) Эта проблема, вероятно, была бы более легко заметна вами, если бы ваш код был «красивее».Отступ три пробела для каждого цикла или другого включения.и отступить к норме, когда вы выходите из включений.Тогда бы вы (наверное) очень легко увидели вашу проблему.Эти «передовые практики» часто пугают «профессионалы» и даже новички.Но хорошая IDE поможет вам в этом процессе отступов и, вероятно, облегчит жизнь с каждым днем ​​написания кода.

0 голосов
/ 25 апреля 2018

Заменить соответствующую строку на:

$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 обращений к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...