如何根据PHPAJAX请求中的第一个下拉列表获取下拉列表中的记录

如何根据PHPAJAX请求中的第一个下拉列表获取下拉列表中的记录,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,即使onchange函数似乎正在工作,Php ajax请求也无法工作 最初,get_data.php位于与父文件夹不同的文件夹中。我把它移到了同一个文件夹,但仍然不工作 //html select option <select name="slct" id="slct1"> <option selected disabled>----Choose Class ----</option> <?ph

即使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变量缺少引号。如果您使用一个准备好的语句并将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' );
        }
    }
?>

因此,您使用PDO,但由于不使用预先准备好的语句而失去了一个重要的好处,并使您的代码受到可能的SQL注入攻击。我认为问题在于sql语句中的变量缺少引号@RamRaiderWHERE class=.$\u POST['class\u name'].~如果$\u POST['class\u name']是一个字符串,则它需要位于SQL语句中的引号内。最好使用下面准备好的语句