【问题标题】:$_POST not sending all values of radio buttons$_POST 不发送单选按钮的所有值
【发布时间】:2017-04-27 12:41:30
【问题描述】:

我正在使用PHP 制作一个在线测验系统,我已将问题、选项和答案保存在数据库的表格中。在 html 页面中,我通过 while 循环打印问题和选项(选项是单选按钮)。我学会了如何将单选按钮值发送到PHP,但我面临的问题是,只有第一个问题的选定选项被发送到PHP。例如,如果我在数据库中保存了两个问题并使用 while 循环将它们打印在页面上,那么现在如果我选择 option1 代表 question1option2 代表 question2,然后单击提交,这只是将值option1 发布到PHP,而其他选定的按钮值将丢失。我希望所有这些值都通过数据库检查答案是否正确,然后根据正确答案显示分数。

这是我的html页面的代码,我发布了整个代码,但我认为你应该检查<form>标签。

<body>

<?php
include('connect.php');
$sql="Select * FROM html";
$record=mysql_query($sql);
?>      
<div id="container">
        <div class="header">
            <span class="heading"><span class="C">O</span>NLINE <span 
class="C">Q</span>UIZ <span class="C">S</span>YSTEM </span>
    <div class="logo"><img src="img/flogo.png" width="188" height="150" 
alt="logo"></div>

    </div>
        <div class="center">

         <nav>
            <ul>
            <li style="margin-right:180px; height:50px;width:auto"><a 
href="home.php">Username</a></li>
            <li><a href="Shome.php">Home</a></li>
            <li><a href="results.php">Results</a></li>
            <li><a href="welcome.php">Sign Out</a></li>
            </ul>
        </nav>
        <div id="page-wrap">
        <h1>HTML Quiz </h1>
            <form action="results.php" method="post" id="quiz">
            <ol>
            <li>
            <?php
            while($result=mysql_fetch_assoc($record))
            {
            echo "<form>";
            echo "<h3>";
            echo "".$result['id'].". ".$result['question']."";
            echo "</h3>";
            echo '<input type="radio" name="answer[]" id="question-1-answer-
A" value="A" />';
            echo '<label for="question-1-answer-A">';
            echo "".$result['option1']."";
            echo "</label>";
            echo '<input type="radio" name="answer[]" id="question-1-answer-
B" value="B" />';
            echo '<label for="question-1-answer-B">';
            echo "".$result['option2']."";
            echo "</label>";
            echo '<input type="radio" name="answer[]" id="question-1-answer-
C" value="C" />';
            echo '<label for="question-1-answer-C">';
            echo "".$result['option3']."";
            echo "</label>";
            echo '<input type="radio" name="answer[]" id="question-1-answer-
D" value="D" />';
            echo '<label for="question-1-answer-D">';
            echo "".$result['option4']."";
            echo "</label>";
            echo "</form>";
            }
            echo '<input type="Submit" value="Submit" name="submit" />';
            ?>
            </li>
            </ol>
            </form>

        </div>
    </div>

<div class="footer">
        <footer></footer> </div>
</div>
</body>

还有results.php

<?php
include('connect.php');
$sql="Select * FROM html";
$record=mysql_query($sql);
$result=mysql_fetch_assoc($record);
$total=0;
foreach($_POST['answer'] as $check) {
echo $check; 
}
echo "YOUR SCORE: ".$total;
?>

我知道这个结果文件现在什么都不做,foreach 部分将用于检查每个答案与数据库中的答案,然后总数将增加,您现在看到的代码只是检查有多少值正在发送到PHP。目前我已经打印了6个问题,在为每个问题选择选项后,当我点击提交时,它会显示

AYOURSCORE: 0

这里的“A”是“问题 1”中选择的选项的值,其他问题的值会丢失。这是我面临的主要问题。

我必须在 2 天内提交此项目,因此我们将不胜感激。 谢谢

附:我是 PHP 新手,对 Java 脚本知之甚少或一无所知。

【问题讨论】:

标签: php html mysql database forms


【解决方案1】:

我认为您使用的是两种形式。在一个表单中您重复多个但在子表单中您没有提供 action=""。或者从循环内部删除表单。

<body>

<?php
include('connect.php');
$sql="Select * FROM html";
$record=mysql_query($sql);
?>      
<div id="container">
        <div class="header">
            <span class="heading"><span class="C">O</span>NLINE <span 
class="C">Q</span>UIZ <span class="C">S</span>YSTEM </span>
    <div class="logo"><img src="img/flogo.png" width="188" height="150" 
alt="logo"></div>

    </div>
        <div class="center">

         <nav>
            <ul>
            <li style="margin-right:180px; height:50px;width:auto"><a 
href="home.php">Username</a></li>
            <li><a href="Shome.php">Home</a></li>
            <li><a href="results.php">Results</a></li>
            <li><a href="welcome.php">Sign Out</a></li>
            </ul>
        </nav>
        <div id="page-wrap">
        <h1>HTML Quiz </h1>
            <form action="results.php" method="post" id="quiz">
            <ol>
            <li>
            <?php
            while($result=mysql_fetch_assoc($record))
            {
            echo "<h3>";
            echo "".$result['id'].". ".$result['question']."";
            echo "</h3>";
            echo '<input type="radio" name="answer[]" id="question-1-answer-
A" value="A" />';
            echo '<label for="question-1-answer-A">';
            echo "".$result['option1']."";
            echo "</label>";
            echo '<input type="radio" name="answer[]" id="question-1-answer-
B" value="B" />';
            echo '<label for="question-1-answer-B">';
            echo "".$result['option2']."";
            echo "</label>";
            echo '<input type="radio" name="answer[]" id="question-1-answer-
C" value="C" />';
            echo '<label for="question-1-answer-C">';
            echo "".$result['option3']."";
            echo "</label>";
            echo '<input type="radio" name="answer[]" id="question-1-answer-
D" value="D" />';
            echo '<label for="question-1-answer-D">';
            echo "".$result['option4']."";
            echo "</label>";
            }
            echo '<input type="Submit" value="Submit" name="submit" />';
            ?>
            </li>
            </ol>
            </form>

        </div>
    </div>

<div class="footer">
        <footer></footer> </div>
</div>
</body>

【讨论】:

    【解决方案2】:

    我认为,问题在于输入的名称:name="answer[]"。每个单选按钮的名称都相同 - 所有问题都相同。我认为,在括号中添加索引会有所帮助

    name="answer[1]"问题一

    name="answer[2]"第二个问题

    等等。 w3schools TryIt Editor 让您可以玩输入法。

    【讨论】:

    • 使用input type="radio" 的意义在于你对同一个问题有多个答案——这意味着每个字段都应该有同名和一个不同的值;同名迫使您只选择一个答案。你一定把radiocheckbox 混淆了?
    • @Matt 我同意对于 one 问题的所有答案,单选按钮应该具有相同的名称。 (复选框也是如此)。但是,在 while 循环中,单选按钮会被打印出来,并且在每个循环中它们都是相同的。 所有个问题都是一样的。这些单选按钮的名称中应该有变量 $result['id'] 。另外,我不确定这个问题是 4 岁是否重要?
    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2022-12-08
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多