如何使用mysql和php创建级联下拉列表
我必须制作一个具有多个下拉菜单的表单,这些菜单可以相互修改。菜单/数据库表包括: 类别、样式、类型和机制 我试图用我有限的Ajax知识来实现这一点,但似乎只能访问MySQL一次(在初始页面上)来填充Categories表,而无法通过查询下一组结果来更新Styles表。我收到一个错误,声称数据库是空的 我还尝试通过选项组填充下拉列表,通过循环查询处理类别和样式,但只有类别标题显示,所有样式子值显示为空。我的代码如下:如何使用mysql和php创建级联下拉列表,php,mysql,ajax,Php,Mysql,Ajax,我必须制作一个具有多个下拉菜单的表单,这些菜单可以相互修改。菜单/数据库表包括: 类别、样式、类型和机制 我试图用我有限的Ajax知识来实现这一点,但似乎只能访问MySQL一次(在初始页面上)来填充Categories表,而无法通过查询下一组结果来更新Styles表。我收到一个错误,声称数据库是空的 我还尝试通过选项组填充下拉列表,通过循环查询处理类别和样式,但只有类别标题显示,所有样式子值显示为空。我的代码如下: $query1="SELECT categori
$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>
$query1=“选择categories.category\u id,categories.category\u Name”;
$query1.=“来自类别”;
$query1.=“按类别排序。类别\名称ASC”;
$category\u result=mysql\u查询($query1,$connection);
如果(!$category\u结果){
die(“数据库查询失败:”.mysql_error());
}
$options=“”;
$con=0;
而($category\u row=mysql\u fetch\u array($category\u result)){
$category_name=$category_行[“category_name”];
$CategoryID=$category_行[“category_id”];
$options.=“
”;
$query2=“选择categories.category\u id、categories.category\u Name”;
$query2.=“style.style\u id,style.style\u Name”;
$query2.=“来自类别、样式”;
$query2.=“WHERE styles.Category\u ID=$CategoryID”;
$style\u result=mysql\u查询($query2,$connection);
如果(!$style\u结果){
die(“数据库查询失败:”.mysql_error());
}
而($style\u row=mysql\u fetch\u数组($style\u result)){
$style_name=$row[“style_name”];
$id=$row[“style_id”];
$options.=“选项必须是数组
$options[]="<OPTGROUP LABEL=\"$category_name\"> <br />";
<SELECT NAME="category_id">
<?php foreach ($options as $value)
echo $value?>
</SELECT>
$options[]=“
”;
我终于自己解决了,但感谢那些试图帮助我的人
我将发布我的类/类别/样式/类型级联表中的中间表。首先创建如下函数:
<?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}";
}
//类别
如果(isset($\u GET['category\u id'])){
$category\u id=$\u GET['category\u id'];
setcookie('category\u id',$category\u id);
$link.=“&category\u id={$category\u id}”;
}elseif(isset($\u COOKIE['category\u id'])){
$\u GET['category\u id']=$\u COOKIE['category\u id'];
$category\u id=$\u COOKIE['category\u id'];
$link.=“&category\u id={$category\u 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…。它们不再被维护,并且已经开始使用。请参阅?改为了解,并使用或-将帮助你决定使用哪一个。如果你选择PDO。特别是在你的情况下,PDO结果的迭代器功能确实对你有好处u询问。@hakre我的希望是在mysql中实现这一点,我理解,在将来将所有内容切换到PDO之前……时间限制是目前的情况……但感谢您的提醒!感谢您的建议,但我收到一条消息:“致命错误:[]字符串不支持运算符。”“.我在这里还会做错什么?