php - 当我在循环中添加一个额外的字段时,while 循环不起作用

标签 php mysql mysqli

我有以下代码:

 while ( $qrystmt->fetch() ) { 
          // data array
          $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; 
          $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; 
           // session data
          $_SESSION['idcourse'] = $dbCourseNo;
          $_SESSION['namecourse'] = $dbCourseName;

    }

现在,当我尝试在 while 循环中显示 2 个字段时,上面的代码工作正常。但是当我尝试在 while 循环中添加第三个字段时,它似乎不起作用并且它给我一个错误,指出未定义的 ModuleName

是不是我的布局方式导致了下面的 while 循环中的错误:

while ( $qrystmt->fetch() ) { 
          // data array
          $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; 
          $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleNo'] = $dbModuleNo ['ModuleName'] = $dbModuleName; 
           // session data
          $_SESSION['idcourse'] = $dbCourseNo;
          $_SESSION['namecourse'] = $dbCourseName;

    }

完整代码如下,它从数据库中选择一门类(class),然后选择与所选类(class)相对应的模块:

 $sql = "SELECT CourseId, CourseNo, CourseName FROM Course"; 

 $sqlstmt=$mysqli->prepare($sql);

 $sqlstmt->execute(); 

 $sqlstmt->bind_result($dbCourseId, $dbCourseNo, $dbCourseName);

 $courses = array(); // easier if you don't use generic names for data 

 $courseHTML = "";  
 $courseHTML .= '<select name="courses" id="coursesDrop">'.PHP_EOL; 
 $courseHTML .= '<option value="">Please Select</option>'.PHP_EOL;  

 while($sqlstmt->fetch()) 
 {   
     $courseid = $dbCourseId;
     $course = $dbCourseNo;
     $coursename = $dbCourseName; 
     $courseHTML .= "<option value='".$courseid."'>" . $course . " - " . $coursename . "</option>".PHP_EOL;  
  } 

  $courseHTML .= '</select>'; 

    ?>

        <?php
if (isset($_POST['submit'])) {

$submittedCourseId = $_POST['courses'];

    $query = "
                 SELECT cm.CourseId, cm.ModuleId, c.CourseNo, m.ModuleNo,
                 c.CourseName,
                 m.ModuleName
                 FROM Course c
                 INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId
                 JOIN Module m ON cm.ModuleId = m.ModuleId
                 WHERE
                 (c.CourseId = ?)
                 ORDER BY c.CourseName, m.ModuleId
                ";

    $qrystmt=$mysqli->prepare($query);
    // You only need to call bind_param once
    $qrystmt->bind_param("s",$submittedCourseId);
    // get result and assign variables (prefix with db)

    $qrystmt->execute(); 

    $qrystmt->bind_result($dbCourseId,$dbModuleId,$dbCourseNo,$dbModuleNo, $dbCourseName,$dbModuleName);

     $qrystmt->store_result();

    $num = $qrystmt->num_rows();

    if($num ==0){
        echo "<p style='color: red'>Please Select a Course</p>";
    } else { 

        $dataArray = array();

 while ( $qrystmt->fetch() ) { 
          // data array
          $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; 
          $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; 
           // session data
          $_SESSION['idcourse'] = $dbCourseNo;
          $_SESSION['namecourse'] = $dbCourseName;

    }

     foreach ($dataArray as $foundCourse => $courseData) {

          $output = ""; 

          $output .= "<p><strong>Course:</strong> " . $foundCourse .  " - "  . $courseData['CourseName'] . "</p>";

       $moduleHTML = ""; 
       $moduleHTML .= '<select name="module" id="modulesDrop">'.PHP_EOL;
       $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;      
            foreach ($courseData['Modules'] as $moduleId => $moduleData) {        

            $moduleHTML .= "<option value='$moduleId'>" . $moduleId . " - " . $moduleData['ModuleName'] ."</option>".PHP_EOL;        
  } 
            }
            $moduleHTML .= '</select>';

      echo $output;

      ...

最佳答案

当你打电话时

$qrystmt->bind_result($dbCourseId,$dbModuleId,$dbCourseNo,$dbModuleNo, $dbCourseName,$dbModuleName);

您正在为 $dbModuleNo 分配一行。所以它可能是一个值而不是数组。这会在您调用时引起问题:

$dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleNo'] = $dbModuleNo ['ModuleName'] = $dbModuleName; 

$dbModuleNo(可能)没有为“ModuleName”定义。

关于php - 当我在循环中添加一个额外的字段时,while 循环不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533302/

相关文章:

php - 为动态输入数组插入空值

php - 如何在一个查询中组合多个 UPDATE 语句?

mysql - [Qt][QMYSQL] 已部署的应用程序 - 未加载驱动程序

php - SQL主键重置?

php - MYSQL SUM() 与 IF

php - 如何在 PHP 中发送没有请求数据的 cURL POST?

php - AND 条件(来自数组)

php - 拉维尔 : Select from three tables using eloquent

php - 使用mysqli发布到数据库

php - 通过 MYSQL Explode 只允许 1 个赞成票