douqian9729 2019-03-21 15:51
浏览 66
已采纳

如何使用下拉列表使用PHP将值分配给某个行(在以相同形式插入的行之外)

I am creating a quiz builder using SQL, HTML and PHP, whereby the user can insert their question and four answer choices for that question (A, B, C or D). In the same form they can then choose what choice will be the correct answer from a dropdown. This should then assign the 'is correct' boolean value of that certain answer row to 1 in the database. [my database structure and what my form should look like is attached]

<?php
include ("nav.php");
include("connect.php");

$quiz_id = htmlentities($_GET["quizid"]);

$quiz = "SELECT * FROM `q_quiz` WHERE q_quiz.id ='$quiz_id'";

$quizresult= $conn->query($quiz);

if(!$quizresult){
    echo $conn->error;
}

?>
<html>
    <head>
        <title></title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" type="text/css" href="ui/styles.css">


        <!-- UIkit CSS -->
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.3/css/uikit.min.css" />

        <!-- UIkit JS -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.3/js/uikit.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.3/js/uikit-icons.min.js"></script>
    </head>
    <body>
        <div class ='uk-container'>
             
             <?php
             if (isset($_POST['submit'])) {

                 include("connect.php");
                 
                 $newquest = $conn->real_escape_string($_POST['question']);
                 
                 $insertquest = "INSERT INTO q_questions(quiz_id, question)
                            VALUES ('$quiz_id', '$newquest')";

                 $resultquest = $conn->query($insertquest);
                 
                 $quest_id = $conn -> insert_id;
                 
                 if (!$resultquest) {
                     echo $conn->error;
                 } 
                 
                 foreach ($_POST['ans'] as $ans) {
                    $answers = $conn->real_escape_string($ans);
                    
                    $insertans = "INSERT INTO q_answers (question_id, answer) VALUES ('$quest_id', '$answers')";
                    $resultans = $conn ->query($insertans);
                    
                    if (!$resultans) {
                     echo $conn->error;
                 } else {
                     header("Location: managequiz.php?quizid=$quiz_id");
                 }   
                                            
                 } //END OF FOREACH LOOP
                 
                 
             }
             
             
             ?>
             
             <?php
                while ($row = $quizresult->fetch_assoc()) {
            $titledata = $row["title"];
                }
             ?>
                
             <div uk-grid>
                 <form class="uk-form-horizontal" method='POST' action='#'>
                 <input type='hidden' name='questionid' value=''>
                 
                 <fieldset class="uk-fieldset">
                 <legend class="uk-legend">New question for quiz: <?php echo $titledata?></legend>
                 <div class="uk-margin">
                     <label class="uk-form-label">Question</label>
                     <div class="uk-form-controls">
                         <textarea class="uk-textarea" rows="5" placeholder="Enter your question here..." name='question' required></textarea>
                     </div>
                 </div>
                 <div class="uk-margin">
                     <div class="uk-form-label">A</div>
                     <div class="uk-form-controls uk-form-controls-text">
                         <input class="uk-input" id="form-horizontal-text" type="text" name='ans[]'>
                     </div>
                     
                     <div class="uk-form-label">B</div>       
                     <div class="uk-form-controls uk-form-controls-text">
                         <input class="uk-input" id="form-horizontal-text" type="text" name='ans[]'>
                     </div>
                     
                     <div class="uk-form-label">C</div>
                     <div class="uk-form-controls uk-form-controls-text">
                         <input class="uk-input" id="form-horizontal-text" type="text" name='ans[]'>
                     </div>
                     
                     <div class="uk-form-label">D</div>
                     <div class="uk-form-controls uk-form-controls-text">
                         <input class="uk-input" id="form-horizontal-text" type="text" name='ans[]'>
                     </div>
                     
                     <div class="uk-form-label">Correct Answer:</div>
                     <div class="uk-form-controls">
                         <select class="uk-select" id="form-stacked-select">
                             <option value=''>A</option>
                             <option value=''>B</option>
                             <option value=''>C</option>
                             <option value=''>D</option>
                         </select>
                     </div>
               
                     
                     <div uk-form-custom>
                             <input class="uk-button uk-button-default" type="submit" name='submit' tabindex="-1" value='Save & Continue'>
                     </div>
                     
                 </div>
                 </fieldset>
             </form>
             </div>
    </body>
</html>

enter image description here

</div>
  • 写回答

1条回答 默认 最新

  • duanhuhong5255 2019-03-21 16:26
    关注

    as kiks73 mentioned, you can assign values to the option of the Select and POST the selected one to your database as correct answer ID.

    <html>
    <select class="uk-select" id="form-stacked-select" name="correctAnswer">
        <option value='1'>A</option>
        <option value='2'>B</option>
        <option value='3'>C</option>
        <option value='4'>D</option>
    </select>
    </html>
    

    If you select A, the value "1" would be sent to your database as correct answer (as long as you correct the SQL part in your php.

    EDIT: I got your question a bit late, sorry. you need to POST the select aswell in order to get the nessecary information about the correct answer. You could try something like that:

             <?php
    
             //just a counter
             $i = 1;
             //correct boolean 1 or 0
             $bool = 0;
    
             if (isset($_POST['submit'])) {
    
                 include("connect.php");
    
                 $newquest = $conn->real_escape_string($_POST['question']);
    
                 $insertquest = "INSERT INTO q_questions(quiz_id, question)
                            VALUES ('$quiz_id', '$newquest')";
    
                 $resultquest = $conn->query($insertquest);
    
                 $quest_id = $conn -> insert_id;
    
                 if (!$resultquest) {
                     echo $conn->error;
                 } 
    
                 foreach ($_POST['ans'] as $ans) {
                    //get the value of the selected answer
                    $correctAnswer = $_POST['correctAnswer'];
                    //check if the selected one matches with our counter
                    if($i == $correctAnswer)
                    {
                        $bool = 1;
                    }
                    else
                    {   
                        $bool = 0;
                    }                   
                    $answers = $conn->real_escape_string($ans);
    
                    $insertans = "INSERT INTO q_answers (question_id, answer, correct) VALUES ('$quest_id', '$answers', $bool)";
                    $resultans = $conn ->query($insertans);
    
                    if (!$resultans) {
                     echo $conn->error;
                 } else {
                     header("Location: managequiz.php?quizid=$quiz_id");
                 }   
                       $i ++;                     
                 } //END OF FOREACH LOOP
    
    
             }
    
    
             ?>
    

    If you POST the whole form, you can use anything in it. i made an ugly loop, which checks each time you instert an answer to your SQL DB, if this one is selected.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答