【问题标题】:Insert row for each $_POST with PHP PDO使用 PHP PDO 为每个 $_POST 插入行
【发布时间】:2014-09-20 10:30:58
【问题描述】:

我有一个由 while 循环生成的动态表单,如下所示:

<form>
<?php while ($questions = $query->fetch(PDO::FETCH_ASSOC)) { ?>
<textarea name="text"></textarea>
<input type="hidden" name="question_id" value="<?php echo $questions['question_id']; ?>">
<?php } ?>
</form>

我正在尝试将每个“响应”和“问题 ID”插入到自己的行中。我不确定是将 $_POST 变量作为 text[] 之类的数组发送还是执行 foreach 循环或两者兼而有之?

基本上我想做以下事情:

foreach($_POST) {
    $query = $db->prepare("INSERT INTO responses SET text=:text, question_id=:question_id);
    $query->bindValue(':text', $_POST['text'], PDO::PARAM_STR);
    $query->bindValue(':question_id', $_POST['question_id'], PDO::PARAM_INT);
    $query->execute();
}

我读过这样多次执行查询也是低效的。

最好的方法是什么?

【问题讨论】:

  • 请记住始终过滤您的 $_POST,不要只是将 $_POST 字段插入数据库。
  • @Adherence 它在这里被绑定到占位符,所以一切正常。不过,prepare 行中缺少 "

标签: php mysql post pdo foreach


【解决方案1】:

很简单,你只需要稍微改进一下你的循环,你只需要一个查询......

$query = $db->prepare("INSERT INTO responses SET text=:text, question_id=:question_id");

foreach ($_POST as $key => $value) {
    if($key == "text") {
        $query->bindValue(':text', $value, PDO::PARAM_STR);
    } else if($key == "question_id") {
        $query->bindValue(':question_id', $value, PDO::PARAM_INT);
    }
}

$query->execute();

【讨论】:

  • 当两个输入都是数组时,我该怎么做? name="question_id[]" 和 name="text[]"
【解决方案2】:

像这样设置textarea数组的id

<form>
<?php while ($questions = $query->fetch(PDO::FETCH_ASSOC)) { ?>
<textarea name="text[<?php echo $questions['question_id']; ?>]"></textarea>
<?php } ?>
</form>

然后你可以遍历 $_POST['text'] 数组

foreach($_POST['text'] as $k => $val) {
    $query = $db->prepare("INSERT INTO responses SET text=:text, question_id=:question_id);
    $query->bindValue(':text', $val, PDO::PARAM_STR);
    $query->bindValue(':question_id', $k, PDO::PARAM_INT);
    $query->execute();
}

【讨论】:

    【解决方案3】:

    帖子值如下:

    <textarea name="text"></textarea>
    

    在服务器端:

    $_POST["text"]
    

    如果你想通过 POST 传输多维数组,使用这个:

    <textarea name="text[]"></textarea>
    <textarea name="text[]"></textarea>
    <textarea name="text[]"></textarea>
    

    在服务器端:

    $_POST["text"][0]; //1
    $_POST["text"][1]; //2
    $_POST["text"][2]; //3
    

    确定它可以与键一起使用:

    <textarea name="text[foo]"></textarea>
    <textarea name="text[boo]"></textarea>
    <textarea name="text[]"></textarea>
    

    在服务器端:

    $_POST["text"]["foo"]; //1
    $_POST["text"]["boo"]; //2
    $_POST["text"][0]; //3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2014-05-06
      • 2015-12-24
      • 2013-08-20
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多