如何根据PHPAJAX请求中的第一个下拉列表获取下拉列表中的记录
即使onchange函数似乎正在工作,Php ajax请求也无法工作 最初,get_data.php位于与父文件夹不同的文件夹中。我把它移到了同一个文件夹,但仍然不工作如何根据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
//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语句中的引号内。最好使用下面准备好的语句