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

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

HTML-код:

 <?php

  $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);
        }
    }
}

Вы должны выполнять свой запрос в каждом цикле.

KubiRoazhon 19.02.2019 11:45

Я немного нуб, только учусь xD

Mir 19.02.2019 11:47

все еще вставляет только последнее значение

Mir 19.02.2019 11:53

Измените атрибут имени вашего ввода с name = "Tipo" на name = "Tipo[]"

KubiRoazhon 19.02.2019 11:54

теперь ошибка: $Tipo = mysqli_real_escape_string($conn, $_POST['Tipo']);

Mir 19.02.2019 11:57

Можете ли вы отредактировать свой вопрос и пропустить весь код PHP?

KubiRoazhon 19.02.2019 11:58

да, я сделаю это

Mir 19.02.2019 11:59

есть редактирование кода

Mir 19.02.2019 12:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
44
1

Ответы 1

В вашем 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
             }
        }
    }
}

Это работает, но нормально ли, что значения вставляются в разные строки, например, можно ли заставить их вставляться в одну строку?

Mir 19.02.2019 12:28

Да, это возможно. Зависит от того, как вы хотите хранить Tipo в своей базе данных. Например, вы можете сохранить его как строку в кодировке json, вот так mysqli_real_escape_string($conn, json_encode($Tipo)). Или у вас может быть несколько столбцов для каждого значения Tipo, например. INSERT INTO `relatorios` (Data, Sala, Descricao, Tipo_01, Tipo_02, ...) VALUES ...

Arthur Shveida 19.02.2019 12:38

не работать с json_encode и использовать (Tipo_01,...) не очень хорошо для меня, потому что я выбираю из базы данных значения «типо», чтобы показать их на флажке! я нуб поправьте меня если я не прав

Mir 19.02.2019 12:47

Если вы хотите использовать json_encode, вам не нужно перебирать значения Tipo, просто кодируйте весь массив. if (!empty($_POST['Tipo']) && is_array($_POST['Tipo'])) { $TipoEscaped = mysqli_real_escape_string($conn, json_encode($_POST['Tipo'])); $query = "INSERT INTO `relatorios` (Tipo) VALUES ('$TipoEscaped')"; }

Arthur Shveida 19.02.2019 12:59

Вы правы в том, что использование нескольких столбцов не будет работать, если эти значения извлекаются из базы данных и записываются туда динамически. Но если они являются статическими, известными значениями, вы можете сохранить их и в php, и это может работать.

Arthur Shveida 19.02.2019 13:04

Другие вопросы по теме