为什么我只能选择这种形式的一个值?

时间:2014-08-19 14:43:39

标签: php forms

我正在使用此代码从数据库生成问题,它的工作原理!但我只能回答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/>';
}
}
 ?>

4 个答案:

答案 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中使用的字符串可能是一个更好的主意,以避免对数据库进行不必要的调用。