Вставка многих значений из флажка, только последнее значение вставляется в базу данных

0

Мне нужно вставить много значений из флажка, но только последнее значение вставляется в базу данных.

HTML-код:

  $conn = mysqli_connect("localhost", "root", "", "fix_in_time");
  $result = mysqli_query($conn, "SELECT * FROM 'material' WHERE id > 0");

  while($row = mysqli_fetch_assoc($result)):?>
  <input type="checkbox" value="<?php echo $row['tipo'];?>" name="Tipo" id="Tipo"><label><?php echo $row['tipo'];?></label><br>
  <?php endwhile;?>

Есть код PHP:

$Sala = mysqli_real_escape_string($conn, $_POST['Sala']);
$Descricao = mysqli_real_escape_string($conn, $_POST['Descricao']);
$Tipo = mysqli_real_escape_string($conn, $_POST['Tipo']);
$Data = date("d-m-Y H:i:s", strtotime('-1 hour'));

if(empty($_POST['Sala']) || empty($_POST['Descricao'])|| 
empty($_POST['Tipo'])){
echo"<script language='javascript' type='text/javascript'>alert('Por favor 
preencha os campos!');window.location.href='../index.php';</script>";
exit();

}

if(isset($_POST['submit'])){

    if (!empty($_POST['Tipo'])) {

        foreach ((array)$Tipo as $Tipo) {

            $query = "INSERT INTO 'relatorios' (Data, Sala, Descricao, Tipo) VALUES ('$Data', '$Sala', '$Descricao', '$Tipo')";

                 mysqli_query($conn, $query);
    }
}

}

  • 0
    Вы должны выполнить свой запрос в каждом цикле.
  • 0
    Я немного нуб, все еще учусь xD
Показать ещё 6 комментариев
Теги:

2 ответа

0

В вашем html-коде измените тег ввода на: <input type="checkbox" value="<?php echo $row['tipo'];?>" name="Tipo[]">. Если вы добавите имя тега с помощью [], то эта переменная записи в php будет массивом. Я удалил идентификатор тега, потому что он должен быть уникальным, не уверен, нужен ли он вам, но если вы захотите, сделайте его уникальным.

И ваш PHP-код должен выглядеть примерно так:

if(isset($_POST['submit'])) {
    if (!empty($_POST['Tipo']) && is_array($_POST['Tipo'])) {
        foreach ($_POST['Tipo'] as $Tipo) {
             $TipoEscaped = mysqli_real_escape_string($conn, $Tipo);
             $query = "INSERT INTO 'relatorios' (Tipo) VALUES ('$TipoEscaped')";
             $success = mysqli_query($conn, $query);
             if (!$success) {
                 //handle mysql error
             }
        }
    }
}
  • 0
    Это работает, но нормально ли это, что значения вставляются в разные строки, как, например, можно ли их вставить в одну и ту же строку?
  • 0
    Да, это возможно. Зависит от того, как вы хотите хранить Tipo в вашей базе данных. Например, вы можете сохранить его в виде строки в кодировке json, например, mysqli_real_escape_string($conn, json_encode($Tipo)) . Или вы можете иметь несколько столбцов для каждого значения Tipo , например. INSERT INTO `relatorios` (Data, Sala, Descricao, Tipo_01, Tipo_02, ...) VALUES ...
Показать ещё 3 комментария
-2

Я изменил ваш код, чтобы добавить строку выполнения запроса в каждый цикл.

if(isset($_POST['submit'])){

if (!empty($_POST['Tipo'])) {

 foreach ((array)$Tipo as $Tipo) {

   $query = "INSERT INTO 'relatorios' (Tipo) VALUES ('$Tipo')";

   mysqli_query($conn, $query);
 }
} 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню