【问题标题】:Get inputs from multiple textfields to array and insert to db field从多个文本字段获取输入到数组并插入到数据库字段
【发布时间】:2015-03-01 11:27:47
【问题描述】:

我有一个订单。它有 10 个文本字段供用户输入数量。如何将输入存储到数组并插入到 db 字段(以逗号分隔)?注意:不需要在所有文本字段上输入。例如,输入是 1,2,3,4..它应该出现在 db 字段中也应该是 1,2,3,4

示例和描述会很棒。我对此比较陌生。

【问题讨论】:

  • 使用 implode 将输入的数量变成带分隔符的字符串,然后插入到数据库中。
  • @SuchitKumar 你能演示一下吗?我不知道该怎么做。对不起
  • 在回答中看到我已经回显了 $data 您需要使用 sql 将其插入到您的表中,无需回显。 @kim
  • 感谢大家的回答,但选择的对我来说是最容易理解的。不过我会记下它们的。祝你有美好的一天。

标签: php mysql arrays dreamweaver


【解决方案1】:

假设您有一个包含四个文本字段的表格 - fieldOnefieldTwofieldThreefieldFour

你的html form 应该是这个样子(我跳过了不相关的部分)。

<form method="POST">
    <textarea name='data[fieldOne]'></textarea>
    <textarea name='data[fieldTwo]'></textarea>
    <textarea name='data[fieldThree]'></textarea>
    <textarea name='data[fieldFour]'></textarea>
</form>

现在,您的PHP 代码:

$data = $_POST['data']; // PHP converts names like data[fieldOne] into arrays.

foreach ($data as $key => $value) {
    $fieldNames[] = "`{$key}`";    //field names for our insert statement - `fieldOne`, `fieldTwo`, etc...
    $values[":{$key}"] = strip_tags($value); 
}

$stmt = $pdo->prepare("INSERT INTO `tableName` (".implode(', ', $fieldNames).") VALUES (".implode(", ", array_keys($values)).")"; // If you're not using PDO and prepared statements you're doing it wrong, so i absolutely recommend you learning that if you haven't already.
$stmt->execute($values);

这应该可以解决问题。 请注意,使用准备好的语句可以使您免于手动转义数据。但是,如果您担心XSS 攻击,您仍然应该使用strip_tagsfilter 扩展。

【讨论】:

  • 你在array_keys($values)前面缺少:吗?
  • 不,因为$values[":{$key}"]
【解决方案2】:

HTML

<form action="my_page_that_processes_orders.php" method="post">
  <input type="text" name="order[product1]" />
  <input type="text" name="order[product2]" />
  <input type="text" name="order[product3]" />
  <input type="text" name="order[product4]" />
  <input type="submit" />
</form>

my_page_that_processes_orders.php

$data = $_POST["order"];// Advisable to perform checks for security reasons (not going to do it)

$aux = '';
foreach($data as $product => $qty) {
 // Do whatever you please with the data.
 $aux .= "$product $qty,"; // For instance.
}

$string_to_insert = rtrim($aux, ",");
// Insert it in DB or do more processing stuff.

希望对你有帮助。

亲切的问候。

【讨论】:

    【解决方案3】:

    假设这是你的表单:如果你只关心订单数组而不关心相应的键。

    <form action="submit.php" method="post">
      <input type="text" name="order[]" />
      <input type="text" name="order[]" />
      <input type="text" name="order[]" />
      <input type="text" name="order[]" />
      <input type="submit" />
    </form>
    

    你的submit.php:

         <?php 
           $data ="";
      foreach($_POST["order"] as $key=>$val){
        if(isset($val) && $val !="")
          $data.=$val.",";
      }
       $data=trim($data);
        echo $data;// use data 
    

    注意:不要使用 mysql 使用 PDO 或 mysqli 代替。 mysql 已弃用。

    【讨论】:

    • 非常感谢,但它让空白文本字段昏迷。如何解决这个问题?我有 10 个文本字段,但如果只有 2 个有输入,则结果为 1,2,,,,,,,,
    • @kim 为此使用修剪:$data = implode(',',$_POST["order"]); echo trim($data,',');
    • 在 mysql 字段中仍然显示为 1,2,,,,,,,,
    • 嗨。我刚刚再次测试。如果来自 textfield 的输入在两者之间跳过,例如来自 textfld1、textfld2 和 textfld5 的输入 1、2、3,它仍然会导致 1,2,,,3
    • 你能告诉我你为什么要这样存储吗?
    猜你喜欢
    • 1970-01-01
    • 2021-01-23
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2011-04-11
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多