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 中的相关下拉列表的主要内容,如果未能解决你的问题,请参考以下文章