我一直在看十几个或更多的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是相同的。但这是朝着正确方向迈出的一步,因为它不会硬编码值或选择任何东西
答案 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为我们完成工作,我们将做的是。
虽然可以使用纯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:此代码未经过测试,但希望它能够运行。
希望这有帮助。