填充下拉列表-PHP Ajax MySQL
我的HTML页面上有两个下拉列表:第一个下拉列表包含数据库列名,第二个下拉列表将根据这些列名填充,即 我有一个带有字段的表:填充下拉列表-PHP Ajax MySQL,php,mysql,ajax,Php,Mysql,Ajax,我的HTML页面上有两个下拉列表:第一个下拉列表包含数据库列名,第二个下拉列表将根据这些列名填充,即 我有一个带有字段的表:,下面是条目 1. "A", "BS", "New York" 2. "B", "BS", "Chicago" 3. "C", "MS", "Boston" 4. "D", "MS", "New York" 因此,我的第一个下拉列表将包含列名,即“学位”和“城市” 如果我选择“学位”,则第二个下拉列表应填充“学士学位”和“硕士学位”,如果我选择“城市”,则第二个下拉列表应
,下面是条目
1. "A", "BS", "New York"
2. "B", "BS", "Chicago"
3. "C", "MS", "Boston"
4. "D", "MS", "New York"
因此,我的第一个下拉列表将包含列名,即“学位”和“城市”
如果我选择“学位”,则第二个下拉列表应填充“学士学位”和“硕士学位”,如果我选择“城市”,则第二个下拉列表应选择“纽约”、“波士顿”和“芝加哥”
我如何着手实施
[添加我的代码]:
changessecond(first)
方法与您建议的完全相同
<body>
<form method="POST" action="" name="mainForm">
<table>
<tr>
<td> Filter by: </td>
<td>
<div id="first">
<select onChange="changeSecond(this.value)">
<option value="1">All</option>
<option value="2">Degree</option>
<option value="3">City</option>
</select>
</td>
</tr>
<tr>
<td> </td>
<td>
<div id="second">
<select name="val">
<option value=""></option>
</select>
</div>
</td>
</tr>
</table>
</form>
</body>
筛选依据:
全部的
度
城市
 
这是您建议的第二个_script.php:
<?
$link = mysql_connect("localhost", "root", "");
if (!$link)
{
die('Could not connect: ' . mysql_error());
}
if (mysql_select_db("myDatabase", $link))
{
$first=mysql_real_escape_string($_REQUEST["first"]);
$query="SELECT ".$first." FROM myTable GROUP BY ".$first;
$data=mysql_query($query);
echo "<select id=\"second\">";
while($row=mysql_fetch_row($data))
{
echo "<option value=\"".$row[0]."\">".$row[0]."</option>";
}
echo "</select>";
}
echo mysql_error();
?>
您可以预先加载并隐藏所有需要的下拉列表,并在第一个下拉列表中触发“更改”事件时显示它们,或者在同一个“更改”事件中有两个下拉列表并清空它们
如果选择第二种方法,您应该缓冲要插入下拉列表中的数据,部分或全部您可以预加载和隐藏所有需要的下拉列表,并在第一个下拉列表中触发“更改”事件时显示它们,或者在同一个“更改”事件中有两个下拉列表并清空它们
如果选择第二种方法,则应缓冲要插入下拉列表中的数据,部分或全部如果需要更动态的解决方案(可适应背景数据库的更改),则可以在页面上执行以下操作:
<script>
function changeSecond(first){
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var res=xmlhttp.responseText;
document.getElementById("second").innerHTML=res;
}
}
xmlhttp.open("GET","second_script.php?first="+first,true);
xmlhttp.send();
}
</script>
...
<select onChange="changeSecond(this.value)">
<option value="Degree">Degree</option>
<option value="City">City</option>
</select>
<div id="second"><select><option value=""></option></select></div>
功能更改第二(第一){
var-xmlhttp;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
var res=xmlhttp.responseText;
document.getElementById(“第二”).innerHTML=res;
}
}
open(“GET”,“second_script.php?first=“+first,true”);
xmlhttp.send();
}
...
度
城市
然后是一个脚本,类似于:
<?php
//database connection
$first=mysql_real_escape_string($_REQUEST["first"]);
$query="SELECT ".$first." FROM tablename GROUP BY ".$first;
$data=mysql_query($query);
echo "<select>";
while($row=mysql_fetch_row($data)){
echo "<option value=\"".$row[0]."\">".$row[0]."</option>";
}
echo "</select>";
?>
我想,为了实现真正的灵活性,您还需要在另一个类似于上述脚本的脚本中使用mysql\u field\u name动态填充第一个,如果您需要更动态的解决方案(可以适应后台数据库的更改),您可以在页面上执行以下操作:
<script>
function changeSecond(first){
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var res=xmlhttp.responseText;
document.getElementById("second").innerHTML=res;
}
}
xmlhttp.open("GET","second_script.php?first="+first,true);
xmlhttp.send();
}
</script>
...
<select onChange="changeSecond(this.value)">
<option value="Degree">Degree</option>
<option value="City">City</option>
</select>
<div id="second"><select><option value=""></option></select></div>
功能更改第二(第一){
var-xmlhttp;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
var res=xmlhttp.responseText;
document.getElementById(“第二”).innerHTML=res;
}
}
open(“GET”,“second_script.php?first=“+first,true”);
xmlhttp.send();
}
...
度
城市
然后是一个脚本,类似于:
<?php
//database connection
$first=mysql_real_escape_string($_REQUEST["first"]);
$query="SELECT ".$first." FROM tablename GROUP BY ".$first;
$data=mysql_query($query);
echo "<select>";
while($row=mysql_fetch_row($data)){
echo "<option value=\"".$row[0]."\">".$row[0]."</option>";
}
echo "</select>";
?>
我想,为了实现真正的灵活性,您还需要在另一个脚本中使用mysql\u field\u name动态填充第一个脚本,类似于上面的代码,用于基于其他 在下面的示例中,我在“子”下拉列表中显示在“父”下拉列表中选择的城市的位置
<script type="text/javascript">
function city_locality(val)
{
// alert (val);
url="<?php echo $this->baseurl ?>/components/com_ezportal/includes/query.php";
data="stid="+val;
$.post(url,data,function(data){
$("#locid").html(data);
});
}
</script>
<select name="filter_1state" id="filter_1state" onChange="city_locality(this.value)">
<option value="0">-- Select City --</option>
<option value="1">Lahore</option>
<option value="2">Karachi</option>
<option value="3">Islamabad</option>
<option value="4">Quetta</option>
<option value="5">Multan</option>
</select>
功能城市/地区(val)
{
//警报(val);
url=“/components/com_ezportal/includes/query.php”;
data=“stid=”+val;
$.post(url、数据、函数(数据){
$(“#locid”).html(数据);
});
}
--选择城市--
拉合尔
卡拉奇
伊斯兰堡
奎达
木尔坦
文件query.php的代码
<?php
$link = mysql_connect('localhost', 'root', '');
mysql_select_db('mydatabase');
if (isset($_POST['stid']))
{
$stid = $_POST['stid'];
$query= mysql_query("SELECT id,ezcity FROM tbl_locality WHERE stateid = '".$stid."' GROUP BY ezcity");
?>
<option value="0">-- Select Locality --</option>
<?php
while($row = mysql_fetch_array($query))
{
?>
<option value="<?php echo $row['id']?>"><?php echo $row['ezcity']?> </option>
<?php
}
}
?>
要填充的主文件的代码基于其他
在下面的示例中,我在“子”下拉列表中显示在“父”下拉列表中选择的城市的位置
<script type="text/javascript">
function city_locality(val)
{
// alert (val);
url="<?php echo $this->baseurl ?>/components/com_ezportal/includes/query.php";
data="stid="+val;
$.post(url,data,function(data){
$("#locid").html(data);
});
}
</script>
<select name="filter_1state" id="filter_1state" onChange="city_locality(this.value)">
<option value="0">-- Select City --</option>
<option value="1">Lahore</option>
<option value="2">Karachi</option>
<option value="3">Islamabad</option>
<option value="4">Quetta</option>
<option value="5">Multan</option>
</select>
功能城市/地区(val)
{
//警报(val);
url=“/components/com_ezportal/includes/query.php”;
data=“stid=”+val;
$.post(url、数据、函数(数据){
$(“#locid”).html(数据);
});
}
--选择城市--
拉合尔
卡拉奇
伊斯兰堡
奎达
木尔坦
文件query.php的代码
<?php
$link = mysql_connect('localhost', 'root', '');
mysql_select_db('mydatabase');
if (isset($_POST['stid']))
{
$stid = $_POST['stid'];
$query= mysql_query("SELECT id,ezcity FROM tbl_locality WHERE stateid = '".$stid."' GROUP BY ezcity");
?>
<option value="0">-- Select Locality --</option>
<?php
while($row = mysql_fetch_array($query))
{
?>
<option value="<?php echo $row['id']?>"><?php echo $row['ezcity']?> </option>
<?php
}
}
?>
您可以使用ajax实现此目的
eg1.html
筛选依据:
全部的
度
城市
 
$(文档).ready(函数(){
$('#第一个_下拉列表')。更改(函数(){
$.ajax({
'type':'post',
'url':'getDropdownOptions.php',
'data':'first='+$(this.val(),
“成功”:函数(数据){
$(“#第二个#下拉列表”).html(数据);
}
});
});
});
getDropdownOptions.php