如何使用mysql和php制作级联下拉列表
Posted
技术标签:
【中文标题】如何使用mysql和php制作级联下拉列表【英文标题】:How to make cascading drop-down lists using mysql and php 【发布时间】:2012-10-18 05:18:45 【问题描述】:我必须制作一个包含多个相互修改的下拉菜单的表单。菜单/数据库表是:
类别、样式、类型和机制
我尝试使用我对 Ajax 的有限知识来执行此操作,但似乎只能访问 mysql 一次(在初始页面上)以填充 Categories 表,而无法通过查询下一组来更新 Styles 表结果。我收到一个错误,声称数据库为空。
我还尝试通过选项组填充下拉列表,以使用循环查询处理类别和样式,但仅显示类别标题,所有样式子值显示为空白。我的代码如下:
$query1="SELECT categories.category_id, categories.Category_Name ";
$query1.="FROM categories ";
$query1.="ORDER BY categories.Category_Name ASC";
$category_result=mysql_query($query1, $connection);
if(!$category_result)
die("Database query failed: " . mysql_error());
$options="";
$con=0;
while ($category_row=mysql_fetch_array($category_result))
$category_name=$category_row["Category_Name"];
$CategoryID=$category_row["category_id"];
$options.="<OPTGROUP LABEL=\"$category_name\"> <br />";
$query2="SELECT categories.category_id, categories.Category_Name, ";
$query2.="styles.style_id, styles.Style_Name ";
$query2.="FROM categories, styles ";
$query2.="WHERE styles.Category_ID = $CategoryID ";
$style_result=mysql_query($query2, $connection);
if(!$style_result)
die("Database query failed: " . mysql_error());
while ($style_row=mysql_fetch_array($style_result))
$style_name=$row["Style_Name"];
$id=$row["style_id"];
$options.="<OPTION VALUE=\"$id\" <a href=\"#\" onClick=\"javascript:swapContent('$style_name');\" >".$style_name.'</OPTION>';
$options.='</OPTGROUP> <br />';
?>
<SELECT NAME="category_id">
<OPTION VALUE=0></OPTION>
<?php echo $options ?>choose
</SELECT>
任何对我做错的洞察力将不胜感激!
【问题讨论】:
Please, don't usemysql_*
functions in new code。它们不再维护,deprecation process 已开始使用。看到red box?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.
特别是在您的情况下,PDO 结果的迭代器功能非常适合您询问的内容。
@hakre 我的希望是让它在 mysql 中工作,我理解,在将来将所有东西都切换到 PDO 之前......时间限制就是现在......但谢谢请注意!
【参考方案1】:
选项必须是数组。
$options[]="<OPTGROUP LABEL=\"$category_name\"> <br />";
<SELECT NAME="category_id">
<?php foreach ($options as $value)
echo $value?>
</SELECT>
【讨论】:
感谢您的建议,但我收到一条消息:“致命错误:字符串不支持 [] 运算符”。我在这里还有什么可能做错?【参考方案2】:最后只好自己解决了,但感谢那些试图提供帮助的人。
我将从我的 Class/Category/Style/Type 级联表中发布我的中间表。首先制作如下函数:
<?php //Category Selection
function Category_Selection($link)
global $connection;
$options="";
if(isset($_GET["class_id"]))
$query="SELECT categories.category_id, categories.Category_Name ";
$query.="FROM categories ";
$query.="ORDER BY categories.Category_Name ASC";
$result=mysql_query($query, $connection);
$class_id=$_GET['class_id'];
if(!$result)
die("Database query failed: " . mysql_error());
while ($row=mysql_fetch_array($result))
$name=$row["Category_Name"];
$id=$row["category_id"];
$link2=$link."&category_id=$id";
$options.="<OPTION VALUE=\"$link2\" ";
if(isset($_GET["category_id"]))
$category_id = $_GET['category_id'];
if($id==$category_id)
$options.=" selected=\"selected\" ";
$options.=" >".$name.'</OPTION>';
else
$options.="<OPTION selected=\"selected\" VALUE=0>First Select Class</OPTION>";
return($options);
?>
然后放在你的主页上:
<?php session_start() ?>
//Category
if(isset($_GET['category_id']))
$category_id=$_GET['category_id'];
setcookie('category_id',$category_id);
$link.="&category_id=$category_id";
elseif(isset($_COOKIE['category_id']))
$_GET['category_id']=$_COOKIE['category_id'];
$category_id=$_COOKIE['category_id'];
$link.="&category_id=$category_id";
现在让您的选择下拉:
<?php //Category Selection
$options=Category_Selection($link);
?>
<center>
<SELECT NAME="category_id" ONCHANGE="location = this.options[this.selectedIndex].value;">
<OPTION VALUE=0></OPTION>
<?php echo $options ?>
</SELECT>
</center>
对每个必需的下拉菜单重复上述操作。
祝你好运...当然要使用 MYSQLi 来保护您的网站,而不是上面显示的 MYSQL...
【讨论】:
以上是关于如何使用mysql和php制作级联下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?
具有CAML查询的SharePoint级联下拉列表可过滤其中一个选项