如何定义下拉值的变量以在另一个下拉列表中使用 - php

时间:2015-02-04 15:56:20

标签: php jquery mysql ajax

我一直在看十几个或更多的php mysql jquery ajax教程网站/插件但是所有这些似乎都是将值或值集硬编码到ajax / jquery / json而不是仅仅链接下拉要求。我还检查了stackoverflow是否有任何内容,但示例都是硬编码的。

所需的工作流程

1. Select value in drop down 1
2. define a variable in drop down 2 or in mysql select that takes value from drop down 1 and limit the options or change the options as required

相关数据库结构

Table : price_change 
ID | price_word  | amount     | max_
3  | 10 Lacs     | 1000000    | 0
4  | 25 Lacs     | 2500000    | 0
1  | >10 Lacs    | 999999     | 0
2  | 1 Crore     | 10000000   | 1
11 | 10 Crores   | 100000000  | 1
10 | 5 Crores    | 50000000   | 1
7  | 1.25 Crores | 12500000   | 2
8  | 1.5 Crores  | 15000000   | 2
9  | 2 Crores    | 20000000   | 2
5  | 50 Lacs     | 5000000    | 2
6  | 75 Lacs     | 7500000    | 2

我有一个准备好的语句,根据查询选择数据并显示结果

function db_select($query) {
    $rows = array();
    $result = db_query($query);

    // If query failed, return `false`
    if($result === false) {
        return false;
    }

    // If query was successful, retrieve all the rows into an array
    while ($row = mysqli_fetch_assoc($result)) {
        $rows[] = $row;
    }
    return $rows;
}

为下拉列表生成值的当前代码

<select name="minprice" id="minprice" >
    <?php
        $rows = db_select("SELECT amount,price_word FROM price_change where max_<>'1' ");
        foreach($rows as $row){
            echo "<option value='".$row['amount']."'>".$row['price_word']."</option>";
        }
    ?>
</select>

为下拉列表2生成值的当前代码

<select name="maxprice" id="maxprice">
    <?php
        $rows = db_select("SELECT amount,price_word FROM price_change where max_<>'0' ");
        foreach($rows as $row){
            echo "<option value='".$row['amount']."'>".$row['price_word']."</option>";
        }
    ?>
</select>

为了使下拉2总是超过下拉1,我需要定义一个可用于确保这一点的变量。 理想情况下,这就像SELECT amount,price_word FROM price_change where max_<>'0' AND amount>=$dropdown1

我知道这将涉及一些ajax / jquery,但我想确保代码是可重用的,所以我不会硬编码值或选择元素。

有人可以指出我正确的方向,因为我一直试图这么做几个小时

我希望有足够的信息来帮助我解决问题,但如果我错过了某些内容并且有更好的方法可以解决这个问题,请告诉我。

编辑 - 这有效 - http://www.plus2net.com/php_tutorial/dd.php但唯一的问题是它使用我不想要的新网址运行页面刷新模拟。我基本上希望URL是相同的。但这是朝着正确方向迈出的一步,因为它不会硬编码值或选择任何东西

1 个答案:

答案 0 :(得分:1)

您应该专注于代码缩进:)

我相信相关选择正是您所寻找的,以及如何完成。

如果你想要的是根据从下拉列表1中选择一个值来过滤下拉列表2的值,我们可以这样做。

//Drop-down1
<select name="minprice" id="minprice" >
    <?php
        $rows = db_select("SELECT amount,price_word FROM price_change where max_<>'1' ");
        foreach($rows as $row){
            echo "<option value='".$row['amount']."'>".$row['price_word']."</option>";
        }
    ?>
</select>

//Drop-down2
<select name="maxprice" id="maxprice">
    <?php
        $rows = db_select("SELECT amount,price_word FROM price_change where max_<>'0' ");
        foreach($rows as $row){
            echo "<option value='".$row['amount']."'>".$row['price_word']."</option>";
        }
    ?>
</select>

此时我们需要javascript / ajax为我们完成工作,我们将做的是。

  • 从第一个选择元素捕获“on-change”触发器。
  • 从第一个元素发送ajax请求以及所选值。
  • 收到回复后,请使用新数据重新填充下拉列表。

虽然可以使用纯JavaScript实现ajax,但我更喜欢使用jQuery来完成这项工作,因此请确保在同一页面中包含jQuery库,否则代码将无效。

<script type="text/javascript">
    //Execute this when DOM is loaded.
    $(document).ready(function(){
        //Trigger an on-change even from the first drop-down.
        $('#minprice').on('change', function() {
             //Fetch the current selected value.
             var value = $(this).val();
             //Send an ajax request with the selected value.
             $.ajax({
                 url: 'ajax.php',
                 data: 'minprice='+value,
                 method: 'POST',
                 success: function(response) {
                     //Received response from the script, time to re-populate drop-down2 with the new content received from the script.
                     //Step1- Remove all existing options from drop-down 2
                     $('#maxprice').find('option').remove();
                     //Step2 - Populate drop-down 2 with received content using the loop.
                     $.each(response, function(index, value)) {
                         $('#maxprice').append('<option value="'+index+'">'+value+'</option>');
                     }
                 }
             });
        });
    });
</script>

最后,您需要创建一个名为ajax.php的文件,以便您可以接收和发送服务器内容,ajax.php可以是类似的。

//Filename: ajax.php
//Store the received value in a variable.
$minprice = !empty($_POST['minprice']) ? (int)$_POST['minprice'] : die('empty minprice');
//Initialize an empty array to return.
$result = array();

//Run the database query with the minprice value and assign retrieved value to $result, in the end echo $result in this file, like the following.

//Make sure the array returned is in following format.
$result = array(
    '1000000' => '10 Lacs',
    '2500000' => '25 Lacs',
);
echo $result.

PS:此代码未经过测试,但希望它能够运行。

希望这有帮助。