使用 SQL 数据库链接 2 个 SELECT 框 - PHP

Posted

技术标签:

【中文标题】使用 SQL 数据库链接 2 个 SELECT 框 - PHP【英文标题】:Linking 2 SELECT boxes using an SQL Database - PHP 【发布时间】:2012-02-25 19:15:42 【问题描述】:

所以,我创建了一个将数据提交到 SQL 数据库的表单。我有 2 个选择下拉菜单,其中包含“模块代码”和“模块标题”的数据。在数据库中,模块标题只有一个模块代码,例如团队项目(模块标题)的模块代码为 11COB290。

我怎样才能得到它,以便当用户选择给定的模块名称或模块标题时将自动选择正确的合作伙伴,即选择与用户选择的模块名称相关的正确模块代码,而无需按下任何提交按钮?

以下代码是我目前拥有的下拉选择框和php代码:

<td align="center">
<select name='ModuleTitle' id='ModuleTitle' style='width:100%;'>
<option>Select...</option>

    <?php
        //3. Perform database query
        $result = mysql_query("SELECT * FROM Module
        ORDER BY  `ModTitle` ASC;", $connection);
        if(!$result)
            die("Database query failed: " . mysql_error());
        
        //4. Use Returned Data
        while ($row = mysql_fetch_array($result)) 
            $module = $row[2];
            echo "<option name='$module'>$module</option><br />";       
        
    ?>
    </select>
    </td>

    <td align="center">
    <select name='ModuleCode' id='ModuleCode' style='width:100%;'>
    <option>Select...</option>

    <?php       
        //3. Perform database query
        $result = mysql_query("SELECT * FROM Module
        ORDER BY  `ModCode` ASC;", $connection);
        if(!$result)
            die("Database query failed: " . mysql_error());
        
    //4. Use Returned Data
        while ($row = mysql_fetch_array($result)) 
            $module = $row[3];
            echo "<option name='$module'>$module</option><br />";       
        
    ?>
    </select>
    </td>

【问题讨论】:

查看 jQuery 的 AJAX 函数。您可以从下拉列表中处理更改事件并对 PHP 进行 AJAX 调用。 如果我没听错,你需要使用:JS chained select lists 【参考方案1】:

除非有特殊原因,否则为什么不给出一个 SELECT 框而不是两个?

<td align="center">
<select name='ModuleTitle' id='ModuleTitle' style='width:100%;'>
<option>Select...</option>
<?php
    //3. Perform database query
    $result = mysql_query("SELECT * FROM Module ORDER BY `ModTitle` ASC;", $connection);
    if(!$result)
        die("Database query failed: " . mysql_error());
    
    //4. Use Returned Data
    while ($row = mysql_fetch_array($result)) 
        $module = $row[2] . ' (' . $row[3] . ')';
        $moduleCode = $row[3];
        echo "<option value='$moduleCode'>$module</option>";
    
?>
</select>
</td>

否则,如果您想保留 2 个 SELECT,请使用 AJAX 调用。想法是在每个 SELECT 上定义 onChange 事件,在该事件中,向 PHP 脚本发送 AJAX 请求。 PHP 脚本将请求模块代码或标题并将其发送回 AJAX 处理程序。然后,AJAX 处理程序可以自动将另一个 SELECT 中的相应选项标记为 SELECTED。如果您还没有这方面的经验,您可能需要一些时间来研究 AJAX 和 javascript

另一个想法可能是将模块代码用作标题 SELECT 的值,将模块标题用作代码 SELECT 的值。例如,标题 SELECT 将是:

<SELECT name="ModuleTitle" id="ModuleTitle" style="width:100%;">
<OPTION>Select...</option>
<OPTION value="123">Title 123</OPTION>
<OPTION value="345">Title 345</OPTION>
<OPTION value="567">Title 567</OPTION>
</SELECT>

然后在 onChange 事件处理程序中,您可能会执行以下操作:

var selObj = document.getElementById('ModuleTitle');
var selIndex = selObj.selectedIndex;
document.getElementById('ModuleCode').value = selObj.option[selIndex].text;

顺便说一句,没有“名称”属性。它应该是“价值”。请在您的代码中修复。

希望对你有帮助!

注意:以上代码均未经过测试,但我希望它能正常工作

【讨论】:

以上是关于使用 SQL 数据库链接 2 个 SELECT 框 - PHP的主要内容,如果未能解决你的问题,请参考以下文章

sql从表中检索数据并使它们链接

如何使用 PHP 将 SQL Select 语句链接到 HTML 按钮

SQL 插入到具有 2 个条件的 Select 语句中

数据库安全之什么是SQL注入?

s-s-rS 报表生成器 2.0 如何链接 2 个服务器并在一个数据集中运行

H2 - 使用 SQL 语句“SELECT * FROM null T”访问链接表时出错