Php 当我在循环中添加一个额外字段时,循环不起作用
我有以下代码:Php 当我在循环中添加一个额外字段时,循环不起作用,php,mysql,mysqli,Php,Mysql,Mysqli,我有以下代码: while ( $qrystmt->fetch() ) { // data array $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; // session data
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循环中添加第三个字段时,它似乎不起作用,它会给我一个错误,说明undefinedModuleName
是不是我的布局方式导致了下面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;
}
完整代码如下所示,从数据库中选择课程,然后选择与所选课程对应的模块:
$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;
...
$sql=“从课程中选择CourseId、CourseNo、CourseName”;
$sqlstmt=$mysqli->prepare($sql);
$sqlstmt->execute();
$sqlstmt->bind_result($dbCourseId、$dbCourseNo、$dbCourseName);
$courses=array();//如果数据不使用通用名称,则更容易
$courseHTML=“”;
$courseHTML.=''.PHP\u EOL;
$courseHTML.='请选择'.PHP\u EOL;
而($sqlstmt->fetch())
{
$courseid=$dbCourseId;
$course=$dbCourseNo;
$coursename=$dbCourseName;
$courseHTML.=''.$course.-''$coursename.''.PHP\u EOL;
}
$courseHTML.='';
?>
您是否尝试在循环之前使用数组值的回音测试数组?
可能您正试图将一个值赋给一个未定义好的变量。当您调用
$qrystmt->bind_result($dbCourseId,$dbModuleId,$dbCourseNo,$dbModuleNo, $dbCourseName,$dbModuleName);
您正在将一行分配给$dbModuleNo。所以它可能是一个值,而不是一个数组。这会在您呼叫时引起问题:
$dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleNo'] = $dbModuleNo ['ModuleName'] = $dbModuleName;
$dbModuleNo(可能)没有为'ModuleName'定义。看起来您从未将$dbModuleNo定义为数组。在循环之前添加$dbModuleNo=array()。并且$dbModuleNo['ModuleName']
真的定义了吗?我正在尝试将$dbModuleNo链接到['ModuleNo'],这是数据库中字段的名称