【问题标题】:Select from Mysql Database until a specific row problem从 Mysql 数据库中选择,直到出现特定行问题
【发布时间】:2019-03-03 12:31:23
【问题描述】:

我的所有问卷都有两个 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());} 
?>

编辑:

<?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

【问题讨论】:

  • 问题在数据库表中的顺序是否符合要求?如果没有,那么您可能需要添加一个字段,例如 question_no 来指定顺序,然后使用该列对结果进行排序。
  • 另外,问题的 id 是自动递增的整数吗?
  • 问题与答案在同一行,每一行都有自动递增的id

标签: php mysql


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您正在以name="num[]" 的形式发送数组中的值,因此我怀疑您的查询不起作用,并且您的未定义变量来自根本未设置的查询,

    $no = $_POST['num'];
      $table2 = "SELECT * FROM table2 WHERE quiz_no = '".$no."'";<-- you are trying to concatenate an array as a string
    

    然后正如@DinoCodeSaurus 提到的那样,它无论如何都会被覆盖

    您需要做的是从您的帖子数组($_POST[num][0]) 中获取值,或者,您可能想要做的只是将其设置为单个值并将!empty($_POST['num'] 更改为isset($_POST['num'])

    除非我错过了什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      相关资源
      最近更新 更多