繁体   English   中英

我如何根据php ajax请求中的第一个下拉列表在下拉列表中获取记录

[英]How do i get record in a dropdown list based on a first drop down list in php ajax request

即使 onchange 功能似乎在工作,Php ajax 请求也不起作用。

最初 get_data.php 位于与父文件夹不同的文件夹中。 我将它移动到同一个文件夹,但仍然无法正常工作。

//html select option
<select name="slct" id="slct1">
                <option selected disabled>----Choose Class ----</option>
              <?php
       $query = "SELECT * FROM classes ";

//GET RESULT
       $result = $pdo->query($query);
       $result->setFetchMode(PDO::FETCH_ASSOC);
       while($row = $result->fetch()){
        ?>
           <option value="<?php echo $row['class_name']?>"><?php echo $row['class_name']?></option>
           <?php
         }
         ?>
   <select name="slct" id="slct2" >
              <option selected disabled>----Select Student----</option>

            </select>


//ajax request
<script type="text/javascript"> 
$(document).ready(function(){
      $('#slct1').on('change',function(){
        var StudentID = $(this).val();
        if(StudentID){
            $.ajax({
                type:'POST',
                url:'get_data.php',
                data:'class_name='+StudentID,
                success:function(html){
                    $('#slct2').html(html);
                }
            }); 
        }else{
            $('#slct2').html('<option value="">Select Class First</option>'); 
        }
    });
});
</script>



//get_data.php
<?php
//Include the database configuration file
include '../config/dbconfig.php';
if(isset($_POST["class_name"])){
    //Fetch all state data
    $query = "SELECT * FROM students WHERE class = ".$_POST['class_name']." ORDER BY id ASC";

    //Count total number of rows
    $result = $pdo->query($query);
    $result->setFetchMode(PDO::FETCH_ASSOC);
    $rowCount = $result->num_rows;

    //State option list
    if($rowCount > 0){
        echo '<option value="">Select Student</option>';
        while($row = $result->fetch()){ 
            echo '<option value="'.$row['class'].'">'.$row['firstname']. $row['middlename'] . $row['lastname']. '</option>';
        }
    }else{
        echo '<option value="">No Student Registered</option>';
    }
}

?>

我想在选择课程时在第二个选择选项中获取学生记录。

正如评论中提到的 - 看起来问题可能是由于 SQL 查询中 POST 变量周围缺少引号引起的。 如果您使用prepared statement并将 POST 变量绑定到占位符,这将不会成为问题 - 额外的好处当然是更好地防止 SQL 注入。

<?php

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

        include '../config/dbconfig.php';


        $sql = 'select * from `students` where `class` = :classname order by id asc';
        $args = array( 
            ':classname' => $_POST['class_name']
        );


        $stmt=$pdo->prepare( $sql );
        if( $stmt ){

            $result=$stmt->execute( $args );

            if( $result && $stmt->rowCount() > 0 ){

                echo '<option selected hidden disabled>Select student';
                while( $rs=$stmt->fetch( PDO::FETCH_OBJ ) ){
                    printf('<option value='%s'>%s %s %s', $rs->class, $rs->firstname, $rs->middlename, $rs->lastname );
                }
            } else {
                echo '<option selected hidden disabled>No student registered';
            }
        } else {
            exit( '<option selected hidden disabled>error' );
        }
    }
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM