在php中获取dropdownlist的值

时间:2017-12-06 10:29:51

标签: javascript php jquery html

我有以下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页面中的查询选择具有我在下拉列表中选择的类型的汽车。我尝试通过回显两个具有所选选项值的页面中的警报进行故障排除,但此步骤也失败了,因此我认为检索所选选项的值存在问题。任何帮助将不胜感激。

1 个答案:

答案 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

完全可能在代码中仍然存在其他错误,我还没有发现。您希望调试包含两件事:

  1. 查看PHP日志中的错误。
  2. 使用浏览器的调试工具观察AJAX请求/响应。