如何使用PHP/MySQL动态填充基于先前选择的下拉列表

如何使用PHP/MySQL动态填充基于先前选择的下拉列表,php,ajax,dynamic,drop-down-menu,Php,Ajax,Dynamic,Drop Down Menu,首先,请原谅我,如果我(似乎)在重复一个以前在这个网站(或者在网上的其他地方)已经回答过的问题。我来自研发(C++)背景,对网络开发不熟悉;但通常我会很快得到答案,但这个问题让我很困惑 提前谢谢你花了这么多时间 上下文 我有一个简单的网页(表单),用户在其中输入简单的细节,并使用PHP将记录存储在MySQL数据库中。该数据库中有许多表,其中两个用于动态填充两个下拉选择列表(HTML控件) 填充第一个下拉列表效果很好。第二个选项将根据第一个下拉列表中的选择进行填充 这两个下拉列表都从SQL查询获取

首先,请原谅我,如果我(似乎)在重复一个以前在这个网站(或者在网上的其他地方)已经回答过的问题。我来自研发(C++)背景,对网络开发不熟悉;但通常我会很快得到答案,但这个问题让我很困惑

提前谢谢你花了这么多时间

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

填充第一个下拉列表效果很好。第二个选项将根据第一个下拉列表中的选择进行填充

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

挑战 经过1/2天的扫描,这个网站和大约10个不同的AJAX、Javascript、PHP等网站——我还没有找到解决方案,我的小项目(我今天晚上才被接受)定于明天中午完成

因此,我面临的挑战是,我无法找到一种方法来使用AJAX(今天晚上才开始使用!)或任何其他web技术,用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>

品牌


其中,“品牌”是第二个下拉列表的ID字段

解决方案是什么?? 将代码添加到第一个下拉列表的
“OnChange”
事件处理程序中。对吗?正确的!现在,就我个人而言,我无法找到一种方法来使用AJAX.load(或任何其他)函数调用我的PHP文件,它将“动态创建”选择下拉列表控件并填充它

现在。。我知道这个问题已经解决了,但我不相信,它已经被充分理解了——因为混合了HTML、Javascript、PHP和现在的AJAX的复杂性。。。所有在一个源文件!(所以,请原谅我的无知,如果可以的话,请帮助我)

我哪里做错了????
谢谢大家。

据我所知,主要问题似乎是您总是调用
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时返回的信息,也许我可以帮助您进行诊断。

嗨,非常感谢您的回复!始终感谢大家花时间分享他们的智慧。我有一个好消息的更新!我将通过回答您的问题选项(?)来分享。但我可以准确地看到您来自何方,将ID硬编码为POST var。作为我调试和测试过程的一部分,我故意这么做。我终于找到了一个解决方案,我在这个网站上找到了一个解决方案,通过修改我的代码,我成功地模仿了它。耶!将发布我的代码(可能对某人有所帮助)并链接到原始解决方案。谢谢Sharkoffmirkwood。实际上,我觉得这个问题在这个网站上不受欢迎(被否决)。可能是因为还有其他类似的帖子。我就到此为止。感谢所有真心帮助我的人。真相终将胜出。。OummmAh好吧,很高兴知道你解决了它!如果我认为你无意中硬编码了身份证而侮辱了你的智慧,我也很抱歉,哈哈。祝你黑客快乐;)