【问题标题】:Getting a value from url and using it in sql query从 url 获取值并在 sql 查询中使用它
【发布时间】:2018-05-05 15:39:47
【问题描述】:

我正在为一家汽车经销商处理一个复杂的项目,我必须根据多个条件创建数据库搜索。数据库中的汽车分为 3 种类型——我们称它们为 A、B 和 C。假设 A=1、B=2、C=3 的值。该网址看起来像 index.php?type_id=1 。到目前为止的工作搜索代码如下。

index.php

<script type="text/javascript">
$(document).ready(function(){
    $('#car').on('change',function(){
        var carID = $(this).val();
        if(carID){
            $.ajax({
                type:'POST',
                url:'ajaxData.php',
                data:'marque_id='+carID,
                success:function(html){
                    $('#model').removeAttr("disabled");
                    $('#model').html(html);
                }
            }); 
        }else{
            $('#model').attr("disabled");
            $('#energy').attr("disabled");
        }
    });
});
</script>

$type_id = $_GET['type_id];

$query = $db->query("SELECT DISTINCT marque_name,a.marque_id FROM vehicule_marque as a INNER JOIN vehicule as b WHERE b.type_id = '$type_id' AND a.marque_id = b.marque_id  order by marque_name");
$rowCount = $query->num_rows;

<div>Select car</div>
    <select name="car" id="car" required >
        <option value="">Select Car</option>
        <?php
        if($rowCount > 0){
            while($row = $query->fetch_assoc()){ 
                echo '<option value="'.$row['marque_id'].'">'.$row['marque_name'].'</option>';
            }
        }else{
            echo '<option value="">Car not available</option>';
        }

        ?>
    </select>


    <div>Select car model</div>
    <select name="model" id="model" disabled>
        <option value=""><!--Select car first--></option>
    </select>

ajaxData.php

if(isset($_POST["marque_id"]) && !empty($_POST["marque_id"])) {
    //Get all state data
    $query = $db->query("SELECT DISTINCT a.modele_id, modele_name, a.marque_id FROM vehicule_modele as a INNER JOIN vehicule as b  WHERE a.marque_id = ".$_POST['marque_id']." AND b.type_id = '$type_id' AND b.marque_id = a.marque_id AND b.modele_id = a.modele_id ORDER BY modele_name ");

    //Count total number of rows
    $rowCount = $query->num_rows;

    //Display model list
    if($rowCount > 0){
        echo '<option value="">Select model</option>';
        while($row = $query->fetch_assoc()){
            echo '<option value="'.$row['modele_id'].'">'.$row['modele_name'].'</option>';
        }
    }else{
        echo '<option value="">Model not available</option>';
    }
}

问题在于,一旦客户选择了汽车品牌,就在 ajaxData.php 查询中使用 type_id 值并使用它来显示模型。在index.php 中,我GET 成功获得了来自url 的值(我尝试回显它并且它有效),但是我无法让它在另一个查询中工作 - 它继续只显示“模型不可用”选项。我尝试在脚本中将$type_id 放入一个新变量中,但这也不起作用。我不确定我错过了什么。如果我删除 type_id 条件,一切正常。如果有人知道如何解决这个问题,我将不胜感激。

【问题讨论】:

  • ajaxData.php 对您的$type_id = $_GET['type_id'];一无所知。所以,你必须明确地将$type_id 传递给ajaxData.php
  • 需要在Ajax请求中传递变量,脚本才能使用。
  • 这是否意味着我必须 GET 或将其放入 ajaxData.php 内的新变量中? @u_mulder
  • 请阅读SQL Injection 并考虑使用参数化查询。您的应用程序在这里很容易受到攻击。
  • 你应该通过 GET 或 POST 将此变量传递给 ajaxData.php,我不在乎。

标签: php jquery sql


【解决方案1】:

首先,您需要了解对 url index.php?type_id=1 的请求和对 url ajaxData.php 的请求是不同的请求,并且彼此一无所知

因此,如果您尝试在 ajaxData.php 中访问 $_GET['type_id'],您将显然收到 nothing,因为 $_GETemptyajaxData.php。如果您向ajaxData.php?type_id=42 发送请求,您将获得 42 作为$_GET['type_id']

所以,如果你想在ajaxData.php 中使用一些$_GET$_POST 数据,你必须明确地发送这些数据。

可以是:

url:'ajaxData.php?type_id=' + yourValue,  
// access it with $_GET['type_id']

data:'marque_id='+carID+'&type_id='+yourValue,
// access it with $_POST['type_id']

【讨论】:

  • 非常感谢,它成功了。我实际上用数据尝试过这样的事情,但我没有正确编写它,所以谢谢你告诉我正确的方法。
猜你喜欢
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多