我有一个PHP表单,其中包含各种类型的输入字段(复选框,下拉列表,收音机,自动完成等)。我想要做的是获取用户输入(可能是多个值,对于例如,问题:哪个是你最喜欢的电影?他可能会写一个以上的电影)并将这些值存储在Mysql表的不同行中。 这是我数据库中的表:
答案: ID,userId,questionId,answer
成员:userId,姓名,姓氏等
qustion:questionId,questionText
我能做的是这样的事情:(注意:在这种情况下,设计会有所不同,这里我为每个问题都有一个单独的字段)
$stmt = $conn->prepare('UPDATE test SET q1 = :q1, q2 = :q2, q3 = :q3, q4 = :q4, q5 = :q5, q6 = :q6, q7 = :q7 WHERE username = :username');
$stmt->execute(array(':q1' => $q1,':q2' => $q2, ':q3' => $q3, ':q4' => $q4, ':q5' => $q5, ':q 6' => $q6, ':q7' => $q7, ':username' => $_SESSION['SESS_USERNAME']));
我对这种方法的问题是多个值的答案被插入同一行,用逗号分隔它们(例如,如果用户写了" Tom cruise"和#34; Brad Pitt",它将这两个名称存储在同一行中)
我想我必须用这样的东西代替它:
$stmt = $conn->prepare('INSERT INTO Answer (qId, answer) VALUES (:qId, :answer)');
但在这里我不知道如何定义qId? (它如何识别每个答案与哪个问题有关)
在下面的代码中,我可以从数据库中获取问题并将其存储在数组中,但我仍然不确定如何完成此代码..我应该在循环内写入insert语句(从DB获取问题的循环,所以对于每个问题,它插入qId并且用户已插入答案...我是对的??)
$arr = array();
$sql="select qId from question";
$result = mysql_query($sql) or die(mysql_error());
while( $row = mysql_fetch_assoc( $result ) ) {
arr[] = $row[ 'qId' ];
}
有人可以帮助我知道如何将这些值插入多行吗?
非常感谢,
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您已经通过qId获得了存储在$ _POST中的答案,并且您在输入名称中使用了[],正如Aret建议的那样,您可以执行以下操作:
// creates an object, $stmt, which will do an insert whenever $stmt->execute()
// is called
$stmt = $conn->prepare('INSERT INTO Answer (qId, answer) VALUES (:qId, :answer)');
$sql="select qId from Answer";
$result = mysql_query($sql) or die(mysql_error());
// loop over all question ids
while( $row = mysql_fetch_assoc( $result ) ) {
$qId = $row['qId'];
// loop over all the answers for one question
foreach ($_POST[$qId] as $answer) {
// this runs the sql from the first line with :qId set to $qId,
// and :answer set to $answer
$stmt->execute(array(':qId' => $qId, ':answer' => $answer));
}
}