【问题标题】:Select list as an array variable once saved to MySQL can not be re-saved as none selected选择列表作为数组变量一旦保存到 MySQL 就不能重新保存为未选择
【发布时间】:2014-12-12 11:18:00
【问题描述】:

我有一个选择列表,用户可以在其中选择一个或多个选项。我使用一个数组将这些选择存储在表单中,然后 POST 将它们作为字符串写入 MySQL 数据库,稍后我会在需要时将其分解。

这很好用,除了一件事。一旦一条记录有一个或多个选择保存到数据库中,我就无法重新保存一个选择。

<p><input name="var[]" type="checkbox" value="1">One</p>
<p><input name="var[]" type="checkbox" value="2">Two</p>
<p><input name="var[]" type="checkbox" value="3">Three</p>

在 PHP 中,$_POST['var'] 被内爆并保存为字符串“1,2,3”或“1,3”等等。

当我取消选择所有复选框并提交表单时,PHP $_POST['var'] 不存在,因为它没有值(没有选择)所以它不会覆盖 db 列,没什么……

这是 CMS/CRUD 系统的一部分,因此在 PHP 管理中添加条件不是所需的路径。 Select 表单在不同的应用程序中可以/将会有不同的名称。

【问题讨论】:

  • 所以我所做的是添加一个 Javascript 取消选择所有调用 Ajax 的函数,该页面包含所有必要的变量,该页面有一个 PHP 脚本,当用户单击“取消选中所有”时,该脚本会删除该列。我想唯一的缺点是如果用户取消编辑......

标签: php mysql arrays forms select


【解决方案1】:

我已经看到它做了这样的事情。我知道它有效,但不能 100% 确定它是“正确”的方法……或者即使它可以满足您的需求。如果您对 sql 引擎没有太大的灵活性(或者不想弄乱它,我不怪您......)这是一种用空值填充数组的快速而肮脏的方法。如果您的 sql 引擎不支持写入空白,您将需要了解如何在表格中写入“空”点。有些使用var[1] =&gt; '~null~'var[1] =&gt; 'NULL' 之类的东西,引擎会将该字符串识别为“空”。

<form>
    <input name="var[1]" type="hidden" value="" />
    <p><input name="var[1]" type="checkbox" value="1">One</p>
    <input name="var[2]" type="hidden" value="" />
    <p><input name="var[2]" type="checkbox" value="2">Two</p>
    <input name="var[3]" type="hidden" value="" />
    <p><input name="var[3]" type="checkbox" value="3">Three</p>
    <input type="submit" name="submit" />
</form>

结果

Array
(
    [var] => Array
        (
            [1] => 1
            [2] => 
            [3] => 3
        )

    [submit] => Submit
)

【讨论】:

  • +1 好的实现,可能不是(如你所说)是最佳方式,但它会起作用。
猜你喜欢
  • 1970-01-01
  • 2017-05-23
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 2015-09-19
相关资源
最近更新 更多