我正在使用此代码从数据库生成问题,它的工作原理!但我只能回答1个问题并保存到数据库,为什么?如果我尝试回答多个问题,单选按钮值就会移动?
$question_id = mysqli_real_escape_string($con, $_POST['question_id']);
foreach ($_POST['answer_value'] as $question_id => $answer_id);
$sql="INSERT INTO answers (question_id, answer_value)
VALUES ('$question_id', '$answer_value')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo 'answer saved';
mysqli_close($con);
// generate all quetions
$query = "SELECT * FROM questions";
$result = @mysqli_query($con, $query);
echo '<form action="insert.php" method="POST">
Firstname: <input type="text" name="firstname">
Lastname: <input type="text" name="lastname">
Email: <input type="text" name="email"><br>';
if ($result) {
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$body = $row['question_body'];
$question_id = $row['question_id'];
echo '
<tr>
<td>'.$body.'</td>
<td><input type="radio" name="answer_value['.$question_id.']" value="0"></td>
<td><input type="radio" name="answer_value['.$question_id.']" value="1"></td>
<td><input type="radio" name="answer_value['.$question_id.']" value="2"></td><br>
</tr>';
}
echo'<input type="submit"></form>
<br/>';
}
}
?>
答案 0 :(得分:3)
每个问题都需要一个单独的广播组。每次循环时都使用不同的name
。
您可以将问题ID存储在那里,而不是隐藏在输入中。
<input type="radio" name="answer_value[<?php echo $question_id; ?>]" value="1">
当它被提交回服务器时,您会发现$_POST['answer_value'][]
是一个关联数组,其中问题为关键字。
答案 1 :(得分:0)
如果不同的单选按钮具有相同的名称,则只能选择其中一个(您对它们进行分组)。 这就是工作的意思,您可以改为复选框输入:
<input type="checkbox" name="answer_value[]" value="1" />
<input type="checkbox" name="answer_value[]" value="2" />
然后,您可以检查$_POST['answer_value']
以了解已检查过多少人以及他们拥有的值。
答案 2 :(得分:0)
使每个答案的每个问题具有相同的名称,因为所有具有相同名称的无线电盒都以html链接,并且将作为一个大的无线电按钮组。 使用问题ID解决:
<input type="radio" name="answer_value_'.$row["question_id"].'" value="1">
答案 3 :(得分:0)
这里的问题是你循环遍历$ _POST ['answer_value']但只抓取最后一个值。
请尝试使用以下代码:
foreach ($_POST['answer_value'] as $question_id => $answer_id) {
var_dump($question_id);
}
在括号({})内,您可以插入数据库。 但是,将问题和答案保存到稍后将在mysql_query中使用的字符串可能是一个更好的主意,以避免对数据库进行不必要的调用。