PHP 和 HTML 中的相关下拉列表

Posted

技术标签:

【中文标题】PHP 和 HTML 中的相关下拉列表【英文标题】:Dependent Drop Down lists in PHP and HTML 【发布时间】:2019-10-30 23:05:19 【问题描述】:

我尝试实现一个依赖下拉列表系统。 contact.php页面中的代码是:

<?php 
    $link = new mysqli("localhost", "root", "", "graphicdesign");
    if($link->connect_error)
        die("ERROR: Nu s-a putut realiza conexiunea la baza de date " .$link->connect_error);
    

    $resultSet = $link->query("SELECT * FROM orase") or die('Error In Session');
    /* $rowsn = mysqli_fetch_array($resultSet);
    $n_oras=$rowsn['denumire_oras'];
    $id_orasss=$rowsn['id_oras'];    */                                         

    //$resultSetRep = $link->query("SELECT id_oras, denumire_rep FROM reprezentante where id_oras='$id_oras'") or die('Error In Session');                                                  
    //$rows1= mysqli_fetch_array($resultSetRep);
?>

<!DOCTYPE html>
<html>

<head>
    --head info
</head>

<body>
    <form action="#">

        <div class="row form-group">
            <div class="col-md-12">
                <label style="margin-right:15px;">Oras</label>
                <select id="denum_oras" name="den_oras">
                    <?php
                        while($rows = mysqli_fetch_array($resultSet)) 
                            $n_oras=$rows['denumire_oras'];
                            $id_oras=$rows['id_oras'];                                              
                            echo "<option value='$id_oras'>$n_oras</option>";
                        
                    ?>
                </select>
            </div>
        </div>

        <div class="row form-group">
            <div class="col-md-12">
                <label style="margin-right:15px;">Reprezentanta</label>
                <select id="reprez" name="reprez">
                    <?php
                        while($rows2=$resultSet->fetch_assoc()) 
                            $id_oras=$rows2['id_oras'];
                            $den_rep=$rows2['denumire_rep'];

                            $resultSetRep = $link->query("SELECT id_oras, denumire_rep FROM reprezentante where id_oras='$id_oras'") or die('Error In Session');

                            while($rows3=$resultSetRep->fetch_assoc()) 
                                $id_rep = $rows3['id_rep'];
                                $den_rep = $rows3 ['denumire_rep'];

                                echo "<option value='$id_rep'>$den_rep</option>";
                            
                         
                    ?>
                </select>
            </div>
        </div>

    </form>
</body>

</html>

第一个下拉列表正在工作,它正在从数据库中的“orase”表中检索正确的数据:

但是对于第二个下拉菜单,我希望当我从第一个下拉菜单中选择“Braila”选项时,显示数据库中的值,外键“id_oras”作为所选选项。

在这种情况下,当我从第一个下拉列表中选择“Braila”时,表 orase 中的 id_oras=1,我希望第二个下拉列表从表“reprezentante”中检索数据,其中 id_oras = 1,在这种情况下检索值“Rep Braila”和“Rep Braila 2”以显示在下拉列表中,但这没有发生..

这是页面截图:

我发布的代码是我想到的最好的,但仍然不起作用..请帮助我!

谢谢!

【问题讨论】:

这一切都发生在服务器端吗?如果是这样,它不会获得第一个选择,直到它击中客户端(并且他们选择一个)。您需要 AJAX 让它在更改后返回服务器以获取列表。此外,您的代码对 SQLi 是开放的,请使用绑定参数(首选)或输入清理进行查询。 【参考方案1】:

PHP 是预处理器语言,不是在运行时编译的,您可以使用 Ajax 或 XMLHttpRequest 来获取数据。之后就可以使用jquery或者javascript来绑定选择框中的数据了

【讨论】:

【参考方案2】:

您需要使用 Ajax 来完成此任务。当父下拉列表值更改时使用onChange jquery 事件将相应地填充子下拉列表或从属下拉列表。

请参考此链接:Populate a dropdown list based on selection of another dropdown list using ajax

希望这会有所帮助。

【讨论】:

谢谢,我以为没有Ajax会有解决方案,因为我不知道如何使用它,但我会看看你提供的链接。谢谢! 我根据您的建议发布了答案..您可以检查一下吗?还是不行 您能告诉我您在发布的答案中遇到了什么错误吗?【参考方案3】:

正如其他人所提到的,您需要在代码中注入一点 Javascript。

您的第一个 Select 看起来不错,但第二个必须重写。

将 onchange 事件放入您的第一个选择中,如下所示:

<select name="list" id="list" onchange="update(this)">

还有一个 Div 来保存你的第二个下拉列表。

<div id="secondlist">
    // contents of returned html from "getsecondlist.php" will go here
</div>

然后将以下 Javascript 放在您的 head 标签之间。 这将调用“getsecondlist.php”并传递 idoras 的参数。 "getsecondlist.php" 将返回第二个下拉列表,该列表存储在 this.responseText 中。

<script>
function update(e) 
    idoras = e.options[e.selectedIndex].value;

    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() 
        if (this.readyState == 4 && this.status == 200) 
            document.getElementById("secondlist").innerHTML = this.responseText;
        
    ;
    xhttp.open("GET", "getsecondlist.php?idoras=" + idoras, true);
    xhttp.send();

</script>

getsecondlist.php

<div class="row form-group">
<div class="col-md-12">
    <label style="margin-right:15px;">Reprezentanta</label> 
    <select id="reprez" name="reprez">
        <?php
        $id_oras=$_GET['idoras'];
        $resultSetRep = $link->query("SELECT id_oras, denumire_rep FROM reprezentante where id_oras='$id_oras'") or die('Error In Session');

        while($rows3=$resultSetRep->fetch_assoc()) 
            $id_rep = $rows3['id_rep'];
            $den_rep = $rows3 ['denumire_rep'];
            echo "<option value='$id_rep'>$den_rep</option>";
        
        ?>
    </select>
</div>
</div>

$_GET['idoras'] 获取从 Javascript 调用传入的参数。

希望这会有所帮助。

【讨论】:

我不太明白,因为您创建的 getsecondlist.php 在我的 contact.php 表单中作为结构 暂时你可以把它移到getsecondlist.php/getrep2.php,或者你可以把Javascript改成getElementById("reprez"),然后把php脚本放到getrep2中

以上是关于PHP 和 HTML 中的相关下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

带有分层邻接模型MySql和PHP的缩进HTML下拉列表

php中怎么把下拉列表中的数据按字母排序,并实现拼音的搜索啊

使用 html 下拉列表输入的 php 中的 SQL 查询

如何使用 ajax、php 和 html 填充一个下拉列表

将下拉列表中的第一个值设置为 php 中的默认值

网格视图中的相关下拉列表