从Mysql数据库中选择,直到出现特定的行问题为止

时间:2019-03-03 12:31:24

标签: php mysql

我的所有问卷都有两个MySql表,如下所示:

表1:

id, quiz_name, quiz_no.

表2:

id, quiz_no, question, ans1, ans2, ans3, ans4, ans5.

关于这些表,我想在单独的div中输出数据,其中测验的名称位于顶部,而所有属于特定quiz_no(表示特定测验标题)的问题和答案行。但是我所得到的是所有标题和答案都位于每个标题下quiz_name下的所有行。

我的代码是:

quiz.php

$table1 = "SELECT * FROM table1";

if (!empty($_POST['num'])) {
  $no = $_POST['num'];
  $table2 = "SELECT * FROM table2 WHERE quiz_no = '".$no."'"; //Notice: Undefined variable: table2 in C:\... quiz.html
}
// So
$table2 = "SELECT * FROM table2";

quiz.html

<?php
      if($mysqli->multi_query($table1)){do{$result = $mysqli->store_result();
        while($row = $result->fetch_assoc()){
?>
        <div id="head_view_pers" class="modal-header" style="cursor:pointer;background-color:#7F4532;border:1px solid #7F4532;">
            <h4 style="font-weight:bold;color:#fff;margin-left:10px;" class="modal-title"><?php echo $row2['nume_chestionar'];?></h4>
            <i class="fas fa-expand" style="position:relative;top:6px;float:right;padding:0 10px 10px 10px;font-size:30px;font-weight:bold;color:#fff;"></i>
        </div>
        <article id="view_quiz_pers" class="view_quiz_pers" style="">
             <div style="padding: 0;" class="view_chestionare_pers">
                  <div class="div_title" style="border-bottom: 1px solid #000000;margin:10px 24px 15px 24px;padding-bottom:4px;font-size:28px;text-align:center;font-weight:bold;"><?php echo $row['quiz_name']; ?></div>

                  <form action="quiz.php" method="post">
                       <input type="hidden" id="num" class="num" value="" name="num[]"></input>
                       <div class="view_pers_wrapper" style="clear:both;text-align:justify;margin:0 40px;">
<?php                    
                         if($mysqli->multi_query($table2)){do{$result2 = $mysqli->store_result();
                              while($row2 = $result2->fetch_assoc()) {
?>
                                <div class="view_questions" style="clear:both;padding:0 0 10px 0;font-weight:bold;list-style-type:none;margin:0 24px;"><?php echo $row2['id']; ?>. <?php echo $row2['question'];?></div>
                                  <ul class="view_answers" style="clear:both;margin: 0 24px;list-style-type:none;">
                                    <li class="li_ans1" ><?php if($row['ans1']) {echo '<b>a. </b>'.$row['ans1'];} ?></li>
                                    <li class="li_ans2" ><?php if($row['ans2']) {echo '<b>b. </b>'.$row['ans2'];} ?></li>
                                    <li class="li_ans3" ><?php if($row['ans3']) {echo '<b>c. </b>'.$row['ans3'];} ?></li>
                                    <li class="li_ans4" ><?php if($row['ans4']) {echo '<b>d. </b>'.$row['ans4'];} ?></li>
                                    <li class="li_ans5" style="padding-bottom:24px;"><?php if($row['ans5']) {echo '<b>e. </b>'.$row['ans5'];} ?></li>
                                  </ul>
<?php 
                        }mysqli_free_result($result);}while($mysqli->more_results() && $mysqli->next_result());} 
?>
                                </div>
                        </div>
                  </form>
        </article>
<?php 
      }mysqli_free_result($result2);}while($mysqli->more_results() && $mysqli->next_result());} 
?>

Screenshot

编辑:

<?php
 include 'db.php';

 $table1 = "SELECT * FROM table1";

 if (!empty($_POST['num'])) {
   $no = $_POST['num'];
   $table2 = "SELECT * FROM table2 WHERE quiz_no = '".$no."'"; //Notice: Undefined variable: table2 in C:\... quiz.html
 }

*测验以所需顺序插入。在插入页面中,您一次只能添加一份问卷。

这是带有两个表的MySql数据库:https://ibb.co/k624S82

2 个答案:

答案 0 :(得分:1)

我认为线索在代码注释中。此查询
 $table2 = "SELECT * FROM table2 WHERE quiz_no = '".$no."'";似乎是您想要的,因为它“将” table2与table1“连接”。不幸的是,正如您所指出的,它给出了此错误
 //Notice: Undefined variable: table2 in C:\... quiz.html

已将其替换为$table2 = "SELECT * FROM table2";,以减轻错误。它做了什么,即不再给出错误,而是导致了下一个问题:没有给出正确的结果。这是一个范围问题:由于$table2if块的内部 中声明,因此仅在该块中可用。将table2选择移到if之外是一个好的开始,但是现在它不能“联接”表。

这应该为您提供在问题上取得进展所需的信息。

答案 1 :(得分:0)

您正在以表单let query = collection .where(...) .where('zzLastUpdateOn', '>=', firebase_admin_1.firestore.Timestamp.fromDate(startDate)) .where('zzLastUpdateOn', '<=', firebase_admin_1.firestore.Timestamp.fromDate(endDate)) .where(...); 的形式在数组中发送值,因此我怀疑您的查询无效,并且您未定义的变量完全来自于未设置的查询,

name="num[]"

,然后如@DinoCodeSaurus所述被覆盖

您需要做的是从帖子数组$no = $_POST['num']; $table2 = "SELECT * FROM table2 WHERE quiz_no = '".$no."'";<-- you are trying to concatenate an array as a string 中获取值,或者您可能要做的就是将其设置为单个值,然后将($_POST[num][0])更改为{{1 }}

除非我想念什么