【问题标题】:PHP mysql: inserting data from an arrayPHP mysql:从数组中插入数据
【发布时间】:2014-06-16 01:50:41
【问题描述】:

我无法提取要插入数据库的数组。我的表单接受多个动态数量的输入,因此我将数据放在一个带有输入 phonenos[] 和 phonetypes[] 的数组中:

<form name="add" action="" method="POST">
<input name="name" type="text" placeholder="Name"></input><br />
    <input name="qty" type="text" placeholder="Qty"></input><br /> -->
    <input class="form-control required" name="phonenos[]" maxlength="14" type="text" placeholder="number..."><br>
    <select class="form-control" name="phonetypes[]">
        <option value="0">Choose a phone type</option>
        <option value="Main">Main</option>
        <option value="Fax">Fax</option>
        <option value="Mobile/Direct">Mobile/Direct</option>
    </select>
    <div id="addmore">
        <input type="button" value="Add More" onClick="addRow(this.form)"></input>
    </div>
    <input type="submit" value="submit" name="action"></input>
</form>

在我的 PDO 查询中:

..... first query insertion...

$phonenos = $_POST['phonenos'];

foreach($_POST['phonenos'] as $phoneno) {
    $phoneno;
}

$phonetypes = $_POST['phonetypes'];

foreach($_POST['phonetypes'] as $phonetype) {
    $phonetype;
}

$sql = 'INSERT INTO phone (p_id, phoneno, phonetype) values (:p_id, :phoneno, :phonetype)';
$query = $conn->prepare($sql);
$query->execute( array(
        ':p_id'=>$lastid,
        ':phoneno'=>$phoneno,
        ':phonetype'=>$phonetype
    )); 

所以我在提交多个电话号码后对变量 $phoneno 和 $phonetype 做了一个var_dump,它只打印出最后一个号码和类型,而我想要提交的整个列表。如何获取所有数据以便将其插入数据库?

【问题讨论】:

  • 您是否在表单元素中多次显示了代码的内部部分——或者您是否有多个表单元素?
  • @CBroe 在表单内多次。

标签: php mysql arrays pdo


【解决方案1】:

我通过 for 循环找到了解决方案。

$phones = $_POST['phones'];
$phonetypes = $_POST['phonetypes'];

for($i = 0, $j = 0; $i <= $phones, $j <= $phonetypes; $i++, $j++) {
    $phone = $phones[$i];
    $phonetype = $phonetypes[$j];

    $sql = "INSERT INTO phone (p_id, phone, phonetype) values (:p_id, :phone, :phonetype)";
    $query = $conn->prepare($sql);
    $query->execute( array(
        ':p_id'=>$lastid,
        ':phone'=>$phone,
        ':phonetype'=>$phonetype
    ));
}    

【讨论】:

  • 无需一遍又一遍地准备相同的查询。您可以将$sql = ...; $query = $conn-&gt;prepare($sql); 行移出循环,它们只需要运行一次。
【解决方案2】:

如果您希望将所有数字插入同一列,那么我认为最好的解决方案是在插入 db 之前对它们进行序列化。

$phonenos = serialize($_POST['phonenos']);
$phonetypes = serialize($_POST['phonetypes']);

$sql = 'INSERT INTO phone (p_id, phoneno, phonetype) values (:p_id, :phoneno, :phonetype)';
$query = $conn->prepare($sql);
$query->execute( array(
        ':p_id'=>$lastid,
        ':phoneno'=>$phonenos,
        ':phonetype'=>$phonetypes
    )); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2019-06-17
    • 1970-01-01
    相关资源
    最近更新 更多