【问题标题】:How do I populate a Drop-down list , dynamically, based on a previous selection - using PHP/MySQL如何根据先前的选择动态填充下拉列表 - 使用 PHP/MySQL
【发布时间】:2014-06-14 15:31:33
【问题描述】:

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

提前感谢您的所有时间。

背景

我有一个简单的网页(表单),用户可以在其中输入简单的详细信息,并使用 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>

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

解决方案??

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

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

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

【问题讨论】:

    标签: php ajax dynamic drop-down-menu


    【解决方案1】:

    据我所知,主要问题似乎是您总是调用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。作为我调试和测试过程的一部分,我是故意这样做的。我终于设法在这个网站上找到了一个解决方案——我设法通过修改我的代码来模仿它,它奏效了!耶!将发布我的代码(可能对某人有所帮助)并链接到原始解决方案。谢谢 SharkofMirkwood。
    • 其实我觉得这个问题在这个网站上是不受欢迎的(被否决了)。可能是因为还有其他类似的帖子。将其留在此。感谢任何真正试图帮助我的人。真相胜出.. Oummm
    • 啊好吧,很高兴知道你解决了它!对不起,如果我认为你不小心硬编码了 ID 从而侮辱了你的智商,哈哈。快乐的黑客;)
    猜你喜欢
    • 2015-01-08
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多