![](/img/trans.png)
[英]How to make 2 drop down menus dependent on another without using values
[英]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>
我需要添加任何帮助以使其正常工作,我们将不胜感激!!! 提前致谢 :)
我是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.