【问题标题】:Sending and receiving checkbox data to and from SQL w/PHP使用 PHP 向 SQL 发送和接收复选框数据
【发布时间】:2016-04-03 12:05:19
【问题描述】:

我正在尝试找出将复选框数据数组传递给 sql 所需的 SQL 代码,然后将相同的数组从 sql 中拉出以获取表单。收到朋友的一些帮助,教我如何将数据保存到数组中,但不知道以复选框数据的形式从 SQL 中拉取数组的最佳实践。

这是我目前的表格:

<div class="btn-group" data-toggle="buttons">
                            <label class="btn btn-default active">User1
                            <input type="checkbox" name="salesman[]" value="User1" <?= in_array('User1', $invoice['Invoice']['salesman']) ? '' : '' ?> autocomplete="off">
                            </label>
                            <label class="btn btn-default active">User2
                            <input type="checkbox" name="salesman[]" value="User2" <?= in_array('User2', $invoice['Invoice']['salesman']) ? '' : '' ?> autocomplete="off">
                            </label>  

这就是我可以提取非数组数据的方法,为数组寻找正确的代码:

$salesman = mysqli_real_escape_string( $this->_con, trim( $data['data']['Invoice']['salesman'] ) );

在网络类似概念中找到的代码:

 <?
        $childarr = explode(",", $row["children_pref"]);    
    ?>
    <input type="checkbox" name="children_pref[]" value="0" <?=(in_array('0',$childarr))?('checked'):('');?> >None<br>
    <input type="checkbox" name="children_pref[]" value="1" <?=(in_array('1',$childarr))?('checked'):('');?>> 1<br>
    <input type="checkbox" name="children_pref[]" value="2" <?=(in_array('2',$childarr))?('checked'):('');?>> 2<br>
    <input type="checkbox" name="children_pref[]" value="3" <?=(in_array('3',$childarr))?('checked'):('');?>> 3<br>
    <input type="checkbox" name="children_pref[]" value="4" <?=(in_array('4',$childarr))?('checked'):('');?>> 4<br>
    <input type="checkbox" name="children_pref[]" value="5" <?=(in_array('5',$childarr))?('checked'):('');?>> 5<br>
    <input type="checkbox" name="children_pref[]" value="6" <?=(in_array('6',$childarr))?('checked'):('');?>> 6 or more<br>

【问题讨论】:

  • 您如何将复选框值存储在数据库中? $invoice['basket']['fruit']$basket['fruit'] 来自哪里?请附上相关的 PHP 代码。
  • 对不起 - 玩弄我的伪代码并复制了错误的代码,用实际代码更新
  • 您应该只需要将数组值传递给 SQL。然后,您不需要从 SQL 中检索这些相同的值,因为您已经有了这些值。

标签: php sql arrays checkbox


【解决方案1】:

我认为,如果您只是在数据库中保存一个包含用逗号分隔的值的字符串,那会好得多。 Apples,Bananas,OrangesApples,Oranges 之类的东西显然将由用户选择复选框来设置。

在您的代码中,您只需遍历您的 post 数组并将创建新变量的值与包含我之前示例的值的字符串连接起来。我将调用这样的变量$my_selected_fruits,这样我就可以在下面示例的 SQL 查询中使用它。

稍后从数据库中获取它们只需要$fruits = explode(",", $db_array),其中$db_array 将是Apples,Bananas,Oranges(或数据库中存储的任何内容),这将输出:

echo $fruits[0]; // Apples
echo $fruits[1]; // Bananas
echo $fruits[2]; // Oranges

当然,在实际代码中,您会以不同的方式使用这些数据,很可能是循环使用它。

所以您的 SQL 查询将类似于:

mysqli_query($link, "INSERT INTO `database` SET `fruits`='$my_selected_fruits'");

换句话说,一个非常简单和基本的 SQL 查询。

- 编辑-

我不知道你为什么要这样做,但既然你坚持,我现在发现最好只创建一个 JSON 对象并将其保存在数据库中。幸运的是,您不需要知道 JSON,因为您只需要将它保存在 TEXT 列中。

因此,使用json_encode(),您将创建一个如下所示的 JSON 对象并将其保存在数据库中(这是一个示例,取决于您的数组,它的编码方式会有所不同,您无需担心这个 JSON ):

[
    {
        0: {
            "user": "user1",
            "checkbox": "checked"
        },
        1: {
            "user": "user2",
            "checkbox": ""
        },
        2: {
            "user": "user3",
            "checkbox": ""
        },
        3: {
            "user": "user4",
            "checkbox": "checked"
        }
    }
]

然后,您检索它并将其保存在一个变量中,然后您将使用 json_decode($var, true) 将其编码回 PHP 数组。

之后,您可以再次使用您的 PHP 数组,例如,分解它。

【讨论】:

  • 听起来很简单——我想要完成的真正乐趣是如何将复选框数据与数组一起推送和拉取
  • @Steven 也许我误解了你的问题?实际上我现在看到你更新了代码,它与水果无关,即使它没有改变逻辑。所以你正在尝试发送数组并将其按原样保存到数据库中?
  • 我想将数组作为 User1、User 2 保存到数据库中,复选框值为 1:0(选中或未选中,”),并调用相同的数据(User1,未选中,User2,选中)(复选框数据基于用户选择)数组eill有大约10个值,并包括复选框
  • 哦,现在我明白了。好吧,您最有可能使用 JSON 执行此操作,因为您可以将 JSON 对象保存为文本然后检索它,使用 json_encode() 生成要保存在数据库中的对象,并使用 json_decode() 将其转换回 PHP 数组.因此,您可以保存具有多个索引(1 到 10)的 PHP 数组,它们的值将是另一组具有 'user'=&gt;'user1''checkbox'=&gt;'0'(或 1)的数组。我说清楚了吗?
  • 我只想坚持使用 PHP,我知道有一种方法可以只使用 PHP - 我已经研究并发现了一百种几乎可以做到的方法,但只是功亏一篑。现在我正在查看“explode”属性 - 它看起来很有希望,但我遇到了问题(php 新手)。最终我会弄清楚并发布,除非有人打败我:D
猜你喜欢
  • 2011-10-16
  • 2012-02-16
  • 2012-09-14
  • 1970-01-01
  • 2018-06-26
  • 2016-12-16
  • 2018-02-07
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多