我有一个由while循环生成的动态表单,如下所示:
<form>
<?php while ($questions = $query->fetch(PDO::FETCH_ASSOC)) { ?>
<textarea name="reponse_text[]"></textarea>
<input type="hidden" name="question_id[]" value="<?php echo $questions['question_id']; ?>">
<?php } ?>
</form>
我试图将每个'response'和'question_id'插入到自己的行中。我相信使用forloop执行此操作是必要的,但无法弄清楚如何访问每个POST数组值:
$user_checkup_id = $db->lastInsertId();
$query = $db->prepare("INSERT INTO user_responses (user_response_text, question_id, user_checkup_id)
VALUES (:user_response_text, :question_id, :user_checkup_id)");
foreach ($_POST as $key => $value) {
$query->bindValue(':user_checkup_id', $user_checkup_id, PDO::PARAM_INT);
if($key == "response_text") {
$query->bindValue(':response_text', $value, PDO::PARAM_STR);
} else if($key == "question_id") {
$query->bindValue(':question_id', $value, PDO::PARAM_INT);
}
}
$query->execute();
提交给数据库的值是response_text的“Array”。如何访问每行的实际文本区域值?
答案 0 :(得分:1)
$_POST['reponse_text']
是一个数组,可以像访问它一样访问它。令牌错误的匹配数是因为您在其中一个参数上定义了if / else条件。
foreach ($_POST['reponse_text'] as $i => $value) {
$query->bindValue(':user_checkup_id', $user_checkup_id, PDO::PARAM_INT);
$query->bindValue(':response_text', $value, PDO::PARAM_STR);
$query->bindValue(':question_id', $_POST['question_id'][$i], PDO::PARAM_INT);
// here you do them at once or the other parameter won't be defined
$query->execute(); // then you execute, for each different response text
}
请务必将execute()
放在 foreach中,否则它将在整个事件之后执行,实际上只插入已绑定到查询的最后一个响应文本。
答案 1 :(得分:0)
试试这个:
foreach ($_POST["reponse_text"] as $key => $value) {
$query->bindValue(':user_checkup_id', $user_checkup_id, PDO::PARAM_INT);
if($key == "response_text") {
$query->bindValue(':response_text', $_POST['reponse_text'][$key], PDO::PARAM_STR);
} else if($key == "question_id") {
$query->bindValue(':question_id', $_POST['question_id'][$key], PDO::PARAM_INT);
}
}