繁体   English   中英

使用php / javascript制作3个从MySQL数据库填充的相关下拉菜单

[英]Using php/javascript to make 3 dependent drop down menus that are populated from a MySQL database

使用php / javascript制作3个从MySQL数据库填充的相关下拉菜单

嗨! 我是编码/网络开发的新手。 我知道这是一个受欢迎的话题,但是我已经花了很多时间阅读论坛并查看示例代码,但是:

a)我发现的示例包括硬编码的数据,并且不会从数据库中提取数据,这是我需要做的。 b)这些示例还使用了现已弃用的扩展,例如mysql_query和mysql_fetch_assoc。 我认为我需要使用PDO,但我对此并不熟悉。

这是有关我的数据库的一些背景:

数据库中只有一个表-“ costs_table”。 我尝试使用下拉列表填充的字段是“子系统”,“ Unit_Cost_element”和“ Unit_Cost_component”。 这些字段之间存在1:M的关系-子系统包含许多元素,而元素包含许多组件。

这是我希望每个下拉菜单执行的代码的SQL语句:

SELECT DISTINCT Subsytem FROM Costs_table;

SELECT DISTINCT Unit_Cost_Element FROM Costs_Table WHERE Subsystem = $SelectedSubsystem;

SELECT DISTINCT Unit_Cost_Component FROM Costs_Table WHERE Subsystem = $SelectedSubsystem AND Unit_Cost_Element = $SelectedElement;

我知道我最终将需要数组,但是我以前从未构造过数组。 到目前为止,我拥有的代码只是创建列表框的索引页。 我也是从另一个论坛获得此代码的,因此它可能与我需要做的事情不是100%一致的。

无论如何,这里是代码:

<?php

try {
    $objDb = new PDO('mysql:host=localhost;dbname=unit_costs_db', 'username', 'password');
    $objDb->exec('SET CHARACTER SET utf8');

    $sql = "SELECT DISTINCT Subsystem, ID FROM costs_table ORDER BY Subsystem ASC";
    $statement = $objDb->query($sql);
    $list = $statement->fetchAll(PDO::FETCH_ASSOC);

}
    catch(PDOException $e){
    echo 'There was a problem';
        }
    ?>

<!DOCTYPE HTML>

<html lang="en"
<head>
<meta charset="utf-8" />
<title> Dependable Dropdown menu</title>
<meta name="description" content="Dependable dropdown menu" />
<meta name="keywords" content="dependable dropdown menu" />
<link href="/css/6-19_core.css" rel="stylesheet" type="text/css" />

</head>


<body>


<div id="wrapper">
    <form action="" method="post">

            <select name="Subsystem" id="Subsystem" class="update">
                <option value="">Select Subsystem</option>
                <?php if (!empty($list)) { 
                    foreach($list as $row) { ?>
                    <option value="<?php echo $row['ID']; ?>">
                        <?php echo $row['Subsystem']; ?>
                    </option>
                <?php }
                }
                ?>
                </select>

            </select>
                <br>
            <select name="Element" id="Element" class="update"
                disabled="disabled">
                <option value="">----</option>
            </select>
                <br>
            <select name="Component" id="Component" class="update"
                disabled="disabled">
                <option value="">----</option>
            </select>

    </form>
</div>




<script src="/js/jquery-1.6.4.min.js" type="text/javascript"></script>

<script src="/js/6-19_core.js" type="text/javascript"></script>

</body>
</html>

我需要添加任何帮助以使其正常工作,我们将不胜感激!!! 提前致谢 :)

有关PDO准备的声明的更多信息。

我是PHP / PDO的相对新手,所以如果可以改善此答案,请告诉我。

首先,您的连接需要改进。 用这个:

try {
$objDb = new PDO('mysql:host=127.0.0.1;dbname=databaseName', 'user', 'password');
$objDb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$objDb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}

阅读更多有关连接的信息

您需要使用execute对象:)我将其包装在一个函数中。 像这样:

该函数是在try关闭大括号之后编写的}

function querySelection($objDb,$sql) {
    $statement = $objDb->prepare($sql); #prepare
    $statement->execute(); #execute 
    $list = $statement->fetchAll(PDO::FETCH_ASSOC);

    foreach($list as $row) {
        echo '<option value=" ' . $row['ID'] . ' "> ' . $row['Subsystem'] . '</option>';
    }

}

以您的形式:

<select>
    <option value="0">----</option>
    <?php 
        $sql = 'SELECT DISTINCT Subsystem, ID FROM costs_table ORDER BY Subsystem ASC';
        querySelection($objDb,$sql); 
        # $objDb passes the database connection variable to the function 
        # $sql passes the query
    ?>
</select>

Continue for each query...


<select>
    <option value="0">----</option>
    <?php 
        $sql = 'SELECT DISTINCT Subsytem FROM Costs_table';
        querySelection($objDb,$sql); 
        # $objDb passes the database connection variable to the function 
        # $sql passes the query
    ?>
</select>

...等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM