【问题标题】:drop down menu is not displaying any options下拉菜单不显示任何选项
【发布时间】:2012-11-24 01:15:15
【问题描述】:

我认为我没有正确编写下面的代码,但我希望能够从另一个页面上的模块下拉菜单中检索值。下面是包含空白下拉菜单并输出所选模块的编号和名称的代码:

$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" onchange="getModules();">'.PHP_EOL; 
 $courseHTML .= '<option value="">Please Select</option>'.PHP_EOL;  

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

  $courseHTML .= '</select>'; 

    $moduleHTML = "";  
        $moduleHTML .= '<select name="modules" id="modulesDrop">'.PHP_EOL; 
        $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
        $moduleHTML .= '</select>'; 


        ?>

        <script type="text/javascript">

        function getModules() { 
        var course = jQuery("#coursesDrop").val(); 
        jQuery('#modulesDrop').empty(); 
        jQuery('#modulesDrop').html('<option value="">Please Select</option>'); 
        jQuery.ajax({ 
        type: "post", 
        url:  "module.php", 
        data: { course:course }, 
        success: function(response){ 
        jQuery('#modulesDrop').append(response); 
        } 
        }); 


        }


        </script> 

    <?php

    if (isset($_POST['moduleSubmit'])) {    

    $outputmodule = ""; 

    $moduleInfo = explode("_", $_POST['modules']);
    $moduleId = $moduleInfo[0];
    $moduleNo = $moduleInfo[1];
    $moduleName = $moduleInfo[2];
    $outputmodule = sprintf("<p><strong>Module:</strong> %s - %s</p>", $moduleNo, $moduleName);

    ....

    ?>

下面是 module.php 页面,它根据所选课程在下拉菜单中显示模块编号和名称:

<?php

$course = isset($_POST['course']) ? $_POST['course'] : ''; 

    $sql = "
    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.CourseId, m.ModuleId
    "; 

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

     $sqlstmt->bind_param("s",$course);

     $sqlstmt->execute(); 

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


    $moduleHTML  = "";  

     while($sqlstmt->fetch()) { 
         $moduleHTML .= sprintf('<option value="%1$s">%2$s - %3$s</option>'.PHP_EOL, $dbModuleId, $dbModuleNo, $dbModuleName);
    } 


    echo $moduleHTML; 

     $sqlstmt->execute(); 
    ?>

目前,除了“请选择”选项之外,下拉菜单中没有显示任何内容

更新:

好的,如果您查看 editsessionteacher.php 脚本,它包含以下有效的代码:

$outputmodule = ""; 

        $moduleInfo = explode("_", $_POST['modules']);
        $moduleId = $moduleInfo[0];
        $moduleName = $moduleInfo[2];
        $outputmodule = sprintf("<p><strong>Module:</strong> %s - %s</p>", $moduleId, $moduleName);

module.php 是这样的:

$course = isset($_POST['course']) ? $_POST['course'] : ''; 

$sql = "
SELECT cm.CourseId, cm.ModuleId,
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.CourseId, m.ModuleId
"; 

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

 $sqlstmt->bind_param("s",$course);

 $sqlstmt->execute(); 

 $sqlstmt->bind_result($dbCourseId,$dbModuleId,$dbCourseName,$dbModuleName);


$moduleHTML  = "";  

     while($sqlstmt->fetch()) { 
         $moduleHTML .= sprintf('<option value="%1$s_%2$s">%1$s - %2$s</option>'.PHP_EOL, $dbModuleId, $dbModuleName);
    } 


echo $moduleHTML; 

 $sqlstmt->execute();

但是我想将moduleNo添加到下拉菜单中,所以当我尝试将代码更改为下面的代码时,它不起作用:

editsessionteacher.php:

$outputmodule = ""; 

$moduleInfo = explode("_", $_POST['modules']);
$moduleId = $moduleInfo[0];
$moduleNo = $moduleInfo[1];
$moduleName = $moduleInfo[2];
$outputmodule = sprintf("<p><strong>Module:</strong> %s - %s</p>", $moduleNo, $moduleName);

module.php:

    $course = isset($_POST['course']) ? $_POST['course'] : ''; 

    $sql = "
    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.CourseId, m.ModuleId
    "; 

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

     $sqlstmt->bind_param("s",$course);

     $sqlstmt->execute(); 

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


    $moduleHTML  = "";  

$moduleHTML .= '<select name="modules" id="modulesDrop">'.PHP_EOL; 
$moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;  

 while($sqlstmt->fetch()) { 
     $moduleHTML .= sprintf('<option value="%1$s">%2$s - %3$s</option>'.PHP_EOL, $dbModuleId, $dbModuleNo, $dbModuleName);
} 

$moduleHTML .= '</select>'; 

echo $moduleHTML; 

【问题讨论】:

    标签: php jquery mysqli


    【解决方案1】:

    您似乎从未调用过 javascript 函数 getModules() 来请求获取新选项。尝试在您的 &lt;script&gt; 标签中添加它:

    jQuery(function(){
      jQuery("#coursesDrop").change(getModules); 
    
    })
    

    【讨论】:

    • 那么在两个脚本中更改我的代码以使下拉菜单再次工作的最佳方法是什么?
    • OK.. 我误读了上面的代码在 2 个文件中。实际上select 的关闭是正确的。 jQuery ajax 似乎也是正确的。看来您从未调用过getModules() 函数。给我几分钟时间来更新我的答案
    • 我添加了我没有包含的课程下拉菜单,在课程下拉菜单中它确实包含 getModules() 函数
    • OK..那么您需要在浏览器控制台中检查 ajax 请求以确保它正在生成。如果正在制作,则需要查看发送和返回的数据。 module.php 是否与正在运行 AJAX 代码的页面位于同一目录中?如果不知道实际请求在控制台中发生了什么,很难同时排除两端的故障
    • 我知道 ajax 请求是正确的。我将在我的问题中包含更新,请在 10 分钟内阅读更新,您将明确知道问题出在哪里
    【解决方案2】:

    while 循环生成的字符串应该在&lt;select&gt;...&lt;/select&gt; 标签内

    $moduleHTML .= '<select name="modules" id="modulesDrop">'.PHP_EOL; 
    $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
    
     while($sqlstmt->fetch()) { 
         $moduleHTML .= sprintf('<option value="%1$s">%2$s - %3$s</option>'.PHP_EOL, $dbModuleId, $dbModuleNo, $dbModuleName);
    } 
    
    $moduleHTML .= '</select>'; 
    
    echo $moduleHTML; 
    

    【讨论】:

    • 好的,但是我如何将它包含在我的代码中,因为我希望它立即在显示“请选择”选项的页面上显示下拉菜单,然后当用户选择一门课程时,然后我希望它在下拉菜单中包含其他选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2021-03-07
    • 2020-11-04
    • 2021-07-29
    • 2012-12-16
    相关资源
    最近更新 更多