Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php ajax相关下拉列表未从表加载数据_Php_Jquery_Mysql_Ajax - Fatal编程技术网

php ajax相关下拉列表未从表加载数据

php ajax相关下拉列表未从表加载数据,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,我正在尝试使用php和ajax创建一个相关下拉列表。我所期望的是,当选择“品牌”汽车时,相关车型应自动加载到“车型”下拉列表中。我已经设法对“品牌”汽车进行预加载。但“模型”下拉列表仍然为空。我使用了一个故事,在sql语句中使用了select模型,其中make=selected make。这是我的密码 php 剧本 filter_action.php Javascript中似乎有几个错误,这在开发人员控制台中是显而易见的,而您的PHP使mySQL服务器容易受到sql注入攻击 <script

我正在尝试使用php和ajax创建一个相关下拉列表。我所期望的是,当选择“品牌”汽车时,相关车型应自动加载到“车型”下拉列表中。我已经设法对“品牌”汽车进行预加载。但“模型”下拉列表仍然为空。我使用了一个故事,在sql语句中使用了select模型,其中make=selected make。这是我的密码

php

剧本

filter_action.php


Javascript中似乎有几个错误,这在开发人员控制台中是显而易见的,而您的PHP使mySQL服务器容易受到sql注入攻击

<script>
    $(document).ready( function () {
    
        // The string should be within quotes here
        $('#make').change(function(e){
            var make = $(this).val();
            
            $.ajax({
                url:"filter_action.php",
                method:"POST",
                data:{'Make':make},
                success: function(data){
                    $("#model").html(data);
                };//this needed to be closed
            });
        });
    });
</script>
我已经尝试过使用php pdo

首先,我创建了3个文件

db.php

<?php

$host_name = 'localhost';
$user_name = 'root';
$password = '';
$db_name = 'stackoverflow';

$conn = new PDO("mysql:host=$host_name; dbname=$db_name;", $user_name, $password);

?>
htmlDropdown.php

<?php include "db.php"; ?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cars</title>
    <!-- jQuery cdn link -->
    <script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
    <!-- Ajax cdn link -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxy/1.6.1/scripts/jquery.ajaxy.min.js" integrity="sha512-bztGAvCE/3+a1Oh0gUro7BHukf6v7zpzrAb3ReWAVrt+bVNNphcl2tDTKCBr5zk7iEDmQ2Bv401fX3jeVXGIcA==" crossorigin="anonymous"></script>
</head>
<body>
    <?php
        $car_sql = 'SELECT car_name FROM cars';  //select all cars query
        $cars_statement = $conn->prepare($car_sql);
        $cars_statement->execute();
    ?>
    <select name="car" id="car">
        <option value="">Cars</option>
        <?php
            while ($cars = $cars_statement->fetch()) { // fetch all cars data
            ?>
                <option value="<?php echo $cars['car_name']; ?>"><?php echo $cars['car_name']; ?></option>
            <?php
            }
        ?>
    </select><br><br>

    <select name="model" id="model">
        <option value="">Model</option>
    </select>
</body>
</html>
<script>

    $(document).ready(function () {

        $('#car').on("change", function () {

            let car = $(this).val(); // car value

            $.post("http://local.stackoverflowanswer1/cars/modelAjax.php", { car_name : car }, function (data, status) { // ajax post send car name in modelAjax.php file
                
                let datas = JSON.parse(data); // convert string to json object

                let options = '';

                options = '<option>Model</option>';

                $.each(datas.model, function (key, value) {
                    options += "<option>"+value.modal_name+"</option>";
                });

                $('#model').html(options);

            });
        });
    });
</script>
modelAjax.php

<?php

include "db.php";

if ($_POST['car_name']) 
{
    $car_id_sql = "SELECT id FROM cars WHERE car_name LIKE ?"; // get id from given car name
    $id_statement = $conn->prepare($car_id_sql);
    $id_statement->execute([$_POST['car_name']]);

    $id = $id_statement->fetch();

    $model_sql = "SELECT modal_name FROM models WHERE car_id = ?"; // get model name from given id
    $model_statement = $conn->prepare($model_sql);
    $model_statement->execute([$id['id']]);

    $models = $model_statement->fetchAll();

    echo json_encode(["model" => $models]); // i have a conver array to json object
}

?>
这里,db.php文件可以包含我的数据库连接代码。和htmlDropdown.php文件包含我的汽车和车型下拉列表。php文件包含用于获取所有模型的ajax

db.php

<?php

$host_name = 'localhost';
$user_name = 'root';
$password = '';
$db_name = 'stackoverflow';

$conn = new PDO("mysql:host=$host_name; dbname=$db_name;", $user_name, $password);

?>
htmlDropdown.php

<?php include "db.php"; ?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cars</title>
    <!-- jQuery cdn link -->
    <script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
    <!-- Ajax cdn link -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxy/1.6.1/scripts/jquery.ajaxy.min.js" integrity="sha512-bztGAvCE/3+a1Oh0gUro7BHukf6v7zpzrAb3ReWAVrt+bVNNphcl2tDTKCBr5zk7iEDmQ2Bv401fX3jeVXGIcA==" crossorigin="anonymous"></script>
</head>
<body>
    <?php
        $car_sql = 'SELECT car_name FROM cars';  //select all cars query
        $cars_statement = $conn->prepare($car_sql);
        $cars_statement->execute();
    ?>
    <select name="car" id="car">
        <option value="">Cars</option>
        <?php
            while ($cars = $cars_statement->fetch()) { // fetch all cars data
            ?>
                <option value="<?php echo $cars['car_name']; ?>"><?php echo $cars['car_name']; ?></option>
            <?php
            }
        ?>
    </select><br><br>

    <select name="model" id="model">
        <option value="">Model</option>
    </select>
</body>
</html>
<script>

    $(document).ready(function () {

        $('#car').on("change", function () {

            let car = $(this).val(); // car value

            $.post("http://local.stackoverflowanswer1/cars/modelAjax.php", { car_name : car }, function (data, status) { // ajax post send car name in modelAjax.php file
                
                let datas = JSON.parse(data); // convert string to json object

                let options = '';

                options = '<option>Model</option>';

                $.each(datas.model, function (key, value) {
                    options += "<option>"+value.modal_name+"</option>";
                });

                $('#model').html(options);

            });
        });
    });
</script>
modelAjax.php

<?php

include "db.php";

if ($_POST['car_name']) 
{
    $car_id_sql = "SELECT id FROM cars WHERE car_name LIKE ?"; // get id from given car name
    $id_statement = $conn->prepare($car_id_sql);
    $id_statement->execute([$_POST['car_name']]);

    $id = $id_statement->fetch();

    $model_sql = "SELECT modal_name FROM models WHERE car_id = ?"; // get model name from given id
    $model_statement = $conn->prepare($model_sql);
    $model_statement->execute([$id['id']]);

    $models = $model_statement->fetchAll();

    echo json_encode(["model" => $models]); // i have a conver array to json object
}

?>

此$make应加引号,即:$make。另外,检查浏览器控制台是否存在任何其他错误?通过直接嵌入用户提供的输入,您的SQL容易受到注入攻击data@Swati谢谢是的,我已将其更改为$make,但结果仍然与您得到的结果相同???@KUMAR不,“make”下拉列表正在工作,但“model”下拉列表仍然为空。感谢您的时间和帮助。不幸的是,它没有起作用。我很感谢您建议准备好stmt以防止sql注入。基本上我复制了你的代码,但仍然没有结果。你能打开开发控制台并报告观察到的任何错误吗?我不确定你是否喜欢这个想法。我在cpanel上编码,而不是在本地服务器上。?NFI-从未见过cPanel。我只是想知道是否有js错误,谢谢。我真的很感谢你的时间和努力。我需要的是将make和model保持在同一个表中,并使用“make”而不是“id”。类似于“从汽车中选择模型”,其中make=selected make。你能帮忙吗?
<?php

include "db.php";

if ($_POST['car_name']) 
{
    $car_id_sql = "SELECT id FROM cars WHERE car_name LIKE ?"; // get id from given car name
    $id_statement = $conn->prepare($car_id_sql);
    $id_statement->execute([$_POST['car_name']]);

    $id = $id_statement->fetch();

    $model_sql = "SELECT modal_name FROM models WHERE car_id = ?"; // get model name from given id
    $model_statement = $conn->prepare($model_sql);
    $model_statement->execute([$id['id']]);

    $models = $model_statement->fetchAll();

    echo json_encode(["model" => $models]); // i have a conver array to json object
}

?>