Как получить запись в раскрывающемся списке на основе первого раскрывающегося списка в запросе php ajax - PullRequest
0 голосов
/ 10 июля 2019

Php ajax-запрос не работает, хотя кажется, что работает функция onchange.

Изначально файл 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>';
    }
}

?>

Я хочу получить записи учеников во втором варианте выбора, когда выбран класс.

1 Ответ

0 голосов
/ 10 июля 2019

Как уже упоминалось в комментарии, похоже, что проблема может быть связана с отсутствием кавычек вокруг переменной POST в запросе SQL. Это не было бы проблемой, если бы вы использовали 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' );
        }
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...