使用 PHP 和 MySQL 进行自我发布的动态单选按钮

Posted

技术标签:

【中文标题】使用 PHP 和 MySQL 进行自我发布的动态单选按钮【英文标题】:Dynamic radio button with self-post using PHP & MySQL 【发布时间】:2015-02-13 04:50:19 【问题描述】:

我正在从 mysql 数据库中提取数据,该数据库动态地放置一个带有 4-5 个单选按钮选项的问题作为答案。这些单选按钮都属于同一组 $quest_name。 while 语句的第一遍将创建属于单选组“question_1”的 4 个单选按钮。

它会在一个页面上创建 30-40 个这样的问题,每个问题都有 4 个单选按钮。我希望用户填写所有答案,然后页面发回给自己,用户的答案仍然被选中,然后显示它们是否正确(我仍然必须添加功能)。

我试图以http://www.w3schools.com/php/php_form_complete.asp 为例,但改用动态创建的单选按钮名称。

这是我目前所拥有的:

        <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

            <?php

            if ($result->num_rows > 0) 
                // output data of each row
                while($row = $result->fetch_assoc()) 
                    $quest_num = $row["id"];
                    $question = $row["question"];
                    $option_1 = $row["option_1"];
                    $option_2 = $row["option_2"];
                    $option_3 = $row["option_3"];
                    $option_4 = $row["option_4"];
                    $option_5 = $row["option_5"];
                    $answer = $row["answer"];
                    $quest_name = "question_" . $row["id"];

                    echo "(" . $quest_num . ") " . $question . "<br>";
            ?>


                    <label>
                        <input type="radio" name=<?php echo $quest_name ?>
                        <?php if (isset(echo $quest_name) && echo $quest_name == echo $option_1) echo "checked"; ?>
                        value=<?php echo $option_1 ?>><?php echo $option_1 ?>
                    </label>
                    <br>

                    <label>
                        <input type="radio" name=<?php echo $quest_name ?>
                        value=<?php echo $option_2 ?>><?php echo $option_2 ?>
                    </label>
                    <br>

                    <label>
                        <input type="radio" name=<?php echo $quest_name ?>
                        value=<?php echo $option_3 ?>><?php echo $option_3 ?>
                    </label>
                    <br>

                    <label>
                        <input type="radio" name=<?php echo $quest_name ?>
                        value=<?php echo $option_4 ?>><?php echo $option_4 ?>
                    </label>
                    <br>
                    <br>

            <?php 
                
             else 
                echo "0 results";
            

            $conn->close();
    ?>

            <input type="submit">
        </form>

到目前为止让我感到悲伤的部分是:

 <?php if (isset(echo $quest_name) && echo $quest_name == echo $option_1) echo "checked"; ?>

我也试过了:

 <?php if (isset($quest_name) && $quest_name == $option_1) echo "checked"; ?>

和:

 <?php echo (isset($quest_name) && $quest_name == $option_1) ? "checked" : ""; ?>

您如何将他们选择的内容发回同一页面?就像在这种情况下,我想说如果“question_1”已设置并且“question_1”等于“converter”(第一个单选按钮选项),然后在单击提交按钮时检查它。

我不太擅长网络开发,但我正在尝试创建一个网站来帮助我的电气技师同学。

感谢您的帮助。

编辑:

使用这行代码解决了这个问题:

<?php if(isset($_POST[$quest_name]) && $_POST[$quest_name]==$option_1)  echo 'checked="checked"';  ?>

【问题讨论】:

不要将 echo 放在条件中。试试这个。 &lt;?php echo (isset($quest_name) &amp;&amp; $quest_name == $option_1) ? "checked" : ""; ?&gt; 嗨 Vikas,这也不起作用。除了为单选按钮名称使用动态创建的变量之外,我可以不做与 www.w3schools.com/php/php_form_complete.asp 上显示的相同的操作吗? 【参考方案1】:

您需要的是 Radio Group。在HTML 层中,它被创建为所有名称相同的名称和不同的值,如下所示:

<p>
  <label>
    <input type="radio" name="RadioGroup1" value="Value1" id="RadioGroup1_0">
    Radio</label>
  <br>
  <label>
    <input type="radio" name="RadioGroup1" value="Value2" id="RadioGroup1_1">
    Radio</label>
  <br>
</p>

当您想在php 层中获取用户输入时,您可以这样:

<?php
//check if Radio Group 1 is set
    if(isset($_POST['RadioGroup1'])) 
        // print the value of Radio Group 1 choice
        echo $_POST['RadioGroup1'];
    
?>

当你想在HTML 层中创建一个 Selected Radio 时,你可以这样:

<input name="RadioGroup1" type="radio" id="RadioGroup1_1" value="radio" checked="checked">

所以你必须检查用户是否像这样输入了哪个收音机的值:

<label>
    <input type="radio" name="RadioGroup1" value="value1" id="RadioGroup1_0" <?php if(isset($_POST['RadioGroup1']) && $_POST['RadioGroup1']=='value1')  echo ' checked="checked"';  ?>>
    Radio</label>
  <br>
  <label>
    <input type="radio" name="RadioGroup1" value="value2" id="RadioGroup1_1" <?php if(isset($_POST['RadioGroup1']) && $_POST['RadioGroup1']=='value2')  echo ' checked="checked"';  ?> >
    Radio</label>

【讨论】:

单选按钮确实属于一个单选组,每次通过while语句。第一个是“question_1”,第二个是“question_2”,依此类推。每个组有四个单选按钮。我正在尝试在w3schools.com/php/php_form_complete.asp 上遵循 w3schools 的示例。我的代码完全相同,只是我的单选按钮名称是使用每个 MySQL 行数据动态创建的。我不明白为什么我不能像他们对这个动态变量做同样的事情。如果我将操作更改为输出到另一个 php 文件,我可以访问用户选择的内容,但我不想要这个。 抱歉,您的最后一段代码确实解决了我的问题。感谢您的帮助。【参考方案2】:

您可以使用以下内容:

<input type="radio" name="<?php echo $quest_name ?>" value="<?php echo $option_1 ?>"
    <?php if (isset($quest_name) && ($quest_name == $option_1)) echo "checked"; ?> />

【讨论】:

我已经尝试过了。这似乎合乎逻辑,但我不知道为什么它不起作用。如果我把那段代码去掉,单选按钮中的 if 语句,它就可以正常工作。在 while 语句的第一遍中,它使用四个单选按钮选项将问题放在页面上,每个选项都属于“question_1”单选组。我通过发布到一个单独的 php 文件并回显我的选择来验证它是否有效。这一切都奏效了。我只想将其发布回自身并回显用户选择的内容。

以上是关于使用 PHP 和 MySQL 进行自我发布的动态单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

动态创建单选按钮并分配选定的值 PHP

自我更新 PHP+MySQL 应用程序的最佳实践是啥?

从大于单页的动态创建的表 (div) 创建多页 PDF

我需要在 php 文件测验中动态分配单选按钮

使用 php 变量创建动态 mysql 查询

在 PHP/MySQL 插入中转义单引号不起作用