如何使用PHP / MySQL动态地根据之前的选择填充下拉列表

时间:2014-04-28 22:12:04

标签: php ajax dynamic drop-down-menu

首先,请原谅我,如果我(似乎)重复在此网站(或网上的其他地方)已经回答过的问题。我来自R& D(C ++)背景,是Web开发的新手;但通常我会很快得到答案,但这个特殊的问题令我感到困惑。

提前感谢你所有的时间。

上下文

我有一个简单的网页(表单),用户输入简单的详细信息,并使用PHP将记录存储在MySQL数据库中。此DB中有许多表,其中两个用于动态填充两个下拉选择列表(HTML控件)

填充第一个下拉列表工作正常。第二个是基于第一个下拉列表中的选择来填充。

两个下拉列表都从SQL查询中获取数据。

挑战

经过半天扫描这个网站和大约10个不同的网站,关于AJAX,Javascript,PHP等 - 我还没有找到解决方案,而我的小项目(我今晚才被接受),将于明天中午完成!

所以,我的挑战是,我不能 - 在我的生活中 - 找到一种方法来使用AJAX(今天晚上才开始使用它!)或任何其他网络技术,填充第二个下拉列表,来自MySQL表中的数据。

代码类似于:

<select name="listDevices" id="listDevices"         
onchange="$('#brands').load('populateBrands.php?nID=1');    "         
title="<?php echo ucfirst($row_DevicesRec['de_name']); ?>">
<?php

do {  
?>
    <option value="<?php echo $row_DevicesRec['de_name']?>"><?php echo $row_DevicesRec['de_name']?></option>
<?php
} while ($row_DevicesRec = mysql_fetch_assoc($DevicesRec));
    $rows = mysql_num_rows($DevicesRec);
    if($rows > 0) {
        mysql_data_seek($DevicesRec, 0);
        $row_DevicesRec = mysql_fetch_assoc($DevicesRec);
    }
?>
</select>
</label></td>
</tr>

<tr valign="baseline">
    <td height="121" align="right" nowrap="nowrap">
        <div align="left" class="style3 style3" >Brands</div>
    </td>
<td><label>     
</label>
<label><br />
<select name="brands" id="brands">
</select>
<br />
</label></td>

其中,&#34;品牌&#34;是第二个下拉列表的ID字段。

解决方案??

将代码添加到第一个下拉列表的"OnChange"事件处理程序中。对?对!现在,对于我的生活,我无法找到一种方法来使用AJAX .load(或任何其他)函数来调用我的PHP文件,这将动态创建&#34; SELECT下拉列表控件并填充它。

现在..我知道这已被处理,但我不相信,它已被充分理解 - 由于混合HTML,Javascript,PHP和现在的AJAX ......所有在一个源文件中的复杂性! (所以,请原谅我的无知,如果可以,请帮助我。)

我哪里错了???? 谢谢你们。

1 个答案:

答案 0 :(得分:0)

据我所知,主要问题似乎是你总是在调用populateBrands.php?nID=1 - 如果其他一切都正常工作,你的第二个下拉列表将始终包含相同的元素,就好像第一个项目一样选择第一个下拉列表。

要解决这个问题,你需要让它找到必要的ID作为AJAX调用的GET参数,所以像这样:

onchange="$('#brands').load('populateBrands.php?nID=' + $('#listDevices').val());"

这将获取第一个选择框的值,并将其作为参数传递给PHP脚本,而不是始终使用“1”。 但是,为了实现这一点,您可能需要确保第一个下拉列表的值将ID作为其值而不是名称(除非您可以使用populateBrands.php可靠地使用它。

目前你有这个:

<option value="<?php echo $row_DevicesRec['de_name']?>"><?php echo $row_DevicesRec['de_name']?></option>

根据您的数据,您可能需要将其更改为此类内容:

<option value="<?php echo $row_DevicesRec['de_id']?>"><?php echo $row_DevicesRec['de_name']?></option>

希望有所帮助。但是,如果没有任何工作(即你的第二个下拉列表根本没有填充),请在致电populateBrands.php?nID=1时发布返回的内容,也许我可以帮助诊断。