【问题标题】:Many values insertion from checkbox only last value is inserting in database从复选框插入的许多值只有最后一个值插入到数据库中
【发布时间】:2019-02-19 10:41:08
【问题描述】:

我需要从复选框中插入许多值,但只有最后一个值插入到数据库中。

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

【问题讨论】:

  • 你应该在每个循环中执行你的查询。
  • 我有点菜鸟,还在学习xD
  • 仍然只插入最后一个值
  • 将输入的名称属性从name="Tipo"更改为name="Tipo[]"
  • 现在出现错误:$Tipo = mysqli_real_escape_string($conn, $_POST['Tipo']);

标签: php html mysql


【解决方案1】:

在您的 html 代码中将输入标记更改为: &lt;input type="checkbox" value="&lt;?php echo $row['tipo'];?&gt;" name="Tipo[]"&gt;。 如果你在标签名称后面加上[],那么php中的这个post变量将是一个数组。我删除了标签 ID,因为它应该是唯一的,不确定您是否需要它,但如果需要,请使其唯一。

你的 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
             }
        }
    }
}

【讨论】:

  • 它正在工作,但值插入不同行是否正常,比如是否可以让它们插入同一行?
  • 是的,有可能。取决于您希望如何在数据库中存储 Tipo。例如,您可以将其存储为 json 编码字符串,例如 mysqli_real_escape_string($conn, json_encode($Tipo))。或者,您可以为每个 Tipo 值设置多个列,例如。 INSERT INTO `relatorios` (Data, Sala, Descricao, Tipo_01, Tipo_02, ...) VALUES ...
  • 不使用 json_encode 并使用 (Tipo_01, ...) 对我不利,因为我从数据库中选择“tipo”值以在复选框上显示它们!如果我错了,我是菜鸟纠正我
  • 如果你想使用 json_encode,你不需要遍历 Tipo 值,只需要对整个数组进行编码。 if (!empty($_POST['Tipo']) &amp;&amp; is_array($_POST['Tipo'])) { $TipoEscaped = mysqli_real_escape_string($conn, json_encode($_POST['Tipo'])); $query = "INSERT INTO `relatorios` (Tipo) VALUES ('$TipoEscaped')"; }
  • 你说得对,如果这些值是从 db 中获取并动态写入的,那么使用多个列将不起作用。但是如果它们是静态的、已知的值,那么你也可以将它们存储在 php 中并且它可以工作
猜你喜欢
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 2017-07-17
  • 1970-01-01
  • 2022-07-28
  • 2010-09-19
  • 2016-11-22
相关资源
最近更新 更多