【问题标题】:How to store multiple selected values from <select> tag in a single field [duplicate]如何将 <select> 标记中的多个选定值存储在单个字段中[重复]
【发布时间】:2022-03-16 01:46:31
【问题描述】:

我有一个带有multiple="multiple" 的选择标签。并且用户可以选择多个值。

<label for="aoi">Area of Interest:</label>
<select id="sel_aoi" name="aoi" multiple="multiple">
    <option value="hr-executive">HR Executives</option>
    <option value="sr-manager">Sr. Manager</option>
    <option value="service-advisor">Service Advisor</option>
    <option value="production">Production Engineer</option>
    <option value="mechanical">Mechanical Engineer</option>
</select>

如何将这些多个选定的值存储在 MySQL 数据库的单个字段中?

【问题讨论】:

  • 序列化:$aoi = msqli_real_escape_string($db, json_encode($_POST['aoi']));
  • 谢谢贾里德!它对我有用。 'mysqli' 的代码有书写错误。 MySQL 和 MySQLI 有什么区别。它用 mysql_connect() 给了我一个警告,但用 mysqli_connect() 工作正常。
  • 这不是错字。您应该使用mysqli 库; mysql 是旧的和过时的并且也deprecated,这意味着它最终将被删除。在此处阅读有关 mysqli 的更多信息:php.net/manual/en/intro.mysqli.php 另一个选项是 PHP Data Objects, or PDO,它是一个抽象的数据连接器,它不会将您的代码紧密耦合到任何特定的库,例如 mysqlmysqli
  • 另请注意,当您将其从数据库中拉出时,在这种情况下您使用json_decode($val) 进行反序列化,这将返回原始数组。

标签: php mysql database forms


【解决方案1】:

将其存储到数组中,并使用逗号分隔将值保存到数据库中。

<label for="aoi">Area of Interest:</label>
          <select id="sel_aoi" name="aoi[]" multiple="multiple">
            <option value="hr-executive">HR Executives</option>
            <option value="sr-manager">Sr. Manager</option>
            <option value="service-advisor">Service Advisor</option>
            <option value="production">Production Engineer</option>
            <option value="mechanical">Mechanical Engineer</option>
          </select>

进程.php

$aoi = implode(',', $_POST['aoi']);

【讨论】:

  • 应用我们的代码后,我收到一条警告消息:Warning: implode() [function.implode]: Invalid arguments pass in ..../process.php 并且没有任何值存储在表中。
  • 你有没有将数组添加到名称属性中。
【解决方案2】:

当您从 $_POST 获取值时,使用 mysql 将它们插入多个值,如下所示:

insert into myTable 
    (someColumn, someOtherColumn) 
values 
    (someValue1, someOtherValue1), 
    (someValue2, someOtherValue2), 
    (someValue3, someOtherValue3)

编辑:如果你想在一行中使用 PHP implode():

$qry="insert into mytable (someColumn) values (".implode(',',$myArray).")

并不是你想确保$myArray 变量没有任何可能 SQJ 注入攻击你的数据库的东西。准备好的声明将是一个建议。

【讨论】:

  • 这不是OP所描述的;它应该进入一个领域。这是一种查找方法,需要以这种方式排列表格以使其工作(即标准化)。
【解决方案3】:

Django 模型带有 JSONField(),您可以使用它来序列化整数值列表,然后将其反序列化为列表。

另一种方法是:如果您的选项数量有限,您也可以尝试为数据库中的每个选项创建单独的列,而不是将它们保存在以逗号分隔的单个字段中。

例如

interest_executive: Boolean
interest_manager: Boolean
interest_service_advisor: Boolean

最后,另一种方法是创建一个单独的表并在 user_id 和 interest_name_id 之间建立外键关系,但如果您的兴趣数量有限,这将是多余的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2015-02-22
    • 2014-09-09
    • 1970-01-01
    • 2013-02-20
    • 2014-04-30
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多