如何使用mysql和php创建级联下拉列表

如何使用mysql和php创建级联下拉列表,php,mysql,ajax,Php,Mysql,Ajax,我必须制作一个具有多个下拉菜单的表单,这些菜单可以相互修改。菜单/数据库表包括: 类别、样式、类型和机制 我试图用我有限的Ajax知识来实现这一点,但似乎只能访问MySQL一次(在初始页面上)来填充Categories表,而无法通过查询下一组结果来更新Styles表。我收到一个错误,声称数据库是空的 我还尝试通过选项组填充下拉列表,通过循环查询处理类别和样式,但只有类别标题显示,所有样式子值显示为空。我的代码如下: $query1="SELECT categori

我必须制作一个具有多个下拉菜单的表单,这些菜单可以相互修改。菜单/数据库表包括:

类别、样式、类型和机制

我试图用我有限的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>
$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之前……时间限制是目前的情况……但感谢您的提醒!感谢您的建议,但我收到一条消息:“致命错误:[]字符串不支持运算符。”“.我在这里还会做错什么?