我有以下html / php代码:
<!DOCTYPE html>
<html>
<head>
<title>Voiture</title>
</head>
<body>
Welcome<br>
<form method="post" action="">
Liste de voiture<select name="selected" id="selected">
<?php
$sql = 'select Type from voiture';
$result = $conn->query($sql);
$json = array();
while ($row = $result->fetch_assoc()) {
if(!in_array($row['Type'], $json)){
$json[] = $row['Type'];
echo '<option name = "'.$row['Type'].'">'.$row['Type'].'</option>';
}
}
?>
</select> <br>
<span id="sel" name="sel"></span>
<table border="1">
<tr id="header">
<td>Type</td>
<td>Model</td>
<td>Couleur</td>
<td>Prix</td>
<td>User</td>
<td>Action</td>
</tr>
</table>
<input type="submit" name="submit" hidden>
</form>
<script src="jquery-3.2.1.js"></script>
<script>
$(function(){
$('#selected').on('change',function(){
$('#sel').text(document.getElementById('selected').value);
$.getJSON('phpVoiture.php',function(data){
for (var x = 0 ; x < data.length ; x++){
$('<tr><td>'+data[x]['type']+'</td>'+'<td>'+data[x]['Model']+
'</td><td>'+data[x]['Couleur']+'</td>'+
'<td>'+data[x]['Prix']+'</td>'+'<td></td></tr>').insertAfter($('#header'));
}
});
});
});
</script>
</body>
</html>
以下php页面:
<?php
require_once ('./dbConnect.php');
include ('./Voiture.php');
$sel = $_POST['selected'];
$conn = mysqli_connect(servername, username, password, db ,port);
$query = "select * from voiture where Type = '".sel."'";
$result = mysqli_query($conn, $query);
$json = array();
if(mysqli_num_rows($result)>0){
while($row = mysqli_fetch_assoc($result)){
$json[] = [
'type' => $row['Type'],
'model' => $row['Model'],
'couleur' => $row['Couleur'],
'prix' => $row['Prix']
];
}
}
else{
echo mysqli_num_rows($result);
}
echo json_encode($json);
问题是,当我在下拉列表中选择一个选项时,没有任何反应。我希望在第二个php页面中的查询选择具有我在下拉列表中选择的类型的汽车。我尝试通过回显两个具有所选选项值的页面中的警报进行故障排除,但此步骤也失败了,因此我认为检索所选选项的值存在问题。任何帮助将不胜感激。
答案 0 :(得分:1)
您没有将所选值发送到服务器。将其添加到AJAX调用:
$.getJSON('phpVoiture.php', { selected: $('#selected').val() }, function(data){
//...
});
此外,您的<option>
元素没有值。您使用的是name
,但它属于<select>
。使用value
:
echo '<option value="'.$row['Type'].'">'.$row['Type'].'</option>';
此外,您正在使用GET请求而不是POST请求。所以你需要在$_GET
数组中查找值:
$sel = $_GET['selected'];
您还有其他拼写错误,例如在PHP中错误使用变量:
"...".sel."..."
将是:
"...".$sel."..."
虽然这提出了关于SQL injection的观点。你根本不应该像这样直接连接变量。相反,use prepared statements with query parameters。
完全可能在代码中仍然存在其他错误,我还没有发现。您希望调试包含两件事: