【问题标题】:How to make multiple checkboxes work with php and sql如何使多个复选框与 php 和 sql 一起使用
【发布时间】:2016-01-04 22:02:45
【问题描述】:

如何通过 php 传递一个包含多个复选框和值的数组,保存到 sql 数据库,以及能够将保存的数据拉回客户端?

比如我有一个数组,以'"checked"""checked""""'的方式保存checkbox的值,但是我不仅要保存checked的值,还要保存表单数据,如下:

  • 苹果:选中
  • 橘子:未选中
  • 香蕉:已选中
  • 西红柿:勾选

任何帮助都将不胜感激,请回答如何做的上下文,而不仅仅是代码 - 仍在学习!

这是适用于这个问题的代码

处理代码:

$salesman = $data['data-invoice-salesman']; // this is an array
                $salesman_array = array(); // create new array
                $salesman_names = array(1 => "User1",2 => "User2",3 => "User3",4 => "User4",5 => "User");
                for($i = 1; $i <= 5; $i++){ // loop from 1 to 5
                if(in_array($i, $salesman)){ // if value exists (has been selected), stack 'checked', if not, stack ''.
                    $salesman_array[$salesman_names[$i]] = "checked";
                } else {
                    $salesman_array[$salesman_names[$i]] = "";
                }
                }
                $salesman_json = mysqli_real_escape_string($this->_con, json_encode($salesman_array)); // encode the array into JSON and then escape it.

有效的表单代码:

<?php
        $salesmand = json_decode($invoice['Invoice']['salesman'], true);
        $salesman_names = array(1 => "User1",2 => "User2",3 => "User3",4 => "User4",5 => "User5");
            foreach ($salesman_names AS $i => $name) {
                if ($salesman[$name] == "checked") {
                    echo '<input type="checkbox" name="data-invoice-salesman[]" value="'.$i.'" checked/> '.$name.'<br>';
                } else {
                    echo '<input type="checkbox" name="data-invoice-salesman[]" value="'.$i.'" /> '.$name.'<br>';
                }
            }
        ?>
            </div>  

【问题讨论】:

  • $data['data-invoice-salesman'] 应该是 $_POST['data-invoice-salesman']。除此之外,它看起来应该可以工作。尽管在数据库中存储 JSON 字符串似乎不是一个好主意。
  • @Barmar 它可以保存复选框值,而不是每个输入的名称。为什么存储 JSON 字符串是个坏主意(它们被转义了)?
  • 这不是安全问题,只是一般的数据库设计问题。例如,您无法轻松搜索特定值。
  • “LIKE”搜索功能不会筛选结果?
  • 可以,但这是一种非常糟糕的方法。它不能利用索引。了解正确的数据库规范化。

标签: php sql checkbox


【解决方案1】:

添加一个将索引映射到名称的数组:

$salesman_names = array(
    1 => "Joe Smith",
    2 => "Fred Flintston",
    3 => "George Jetson",
    4 => "John Hamm",
    5 => "Alan Smithee"
);

然后在你的循环中,你可以这样做:

$salesman_array[$salesan_names[$i]] = "checked";

保存在数据库中的 JSON 可能如下所示:

{"Joe Smith":"checked", "Fred Flintson": "", "George Jetson","checked", "John Hamm":"", "Alan Smithee":""}

要显示复选框,请在显示时参考$salesman_array

$salesman = json_decode($invoice['Invoice']['salesman'], true);
foreach ($salesman_names AS $i => $name) {
    if ($salesman[$name] == "checked") {
        echo '<input type="checkbox" name="data-invoice-salesman[]" value="'.$i.'" checked/> '.$name.'<br>';
    } else {
        echo '<input type="checkbox" name="data-invoice-salesman[]" value="'.$i.'" /> '.$name.'<br>';
    }
}

【讨论】:

  • 我的数据库中不需要另一个名为“products”的列吗?
  • 我不太了解您的申请。这就是您所说的复选框名称,但是您的 PHP 循环称它们为销售员。
  • 对不起,水果示例与我的代码无关,我的实际代码将有5个推销员姓名,并且需要保存/检索推销员的能力,以及复选框的状态
  • 我要替换我的 $i = $k+1; $salesman 数组的代码?你能把你的代码和我的代码放在一起吗?
  • 将其添加到答案中
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2020-09-10
  • 2020-05-25
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多