Php 从数据库中动态填充下拉菜单

Php 从数据库中动态填充下拉菜单,php,html,drop-down-menu,Php,Html,Drop Down Menu,我有一个html+php页面。有3个下拉菜单。菜单的值来自sqlite数据库。 我想从第一个菜单中进行选择,并根据该选择动态填充第二个下拉菜单。第三个菜单也一样 我见过 但是: 1.如果可能的话,我想用php单独完成这项工作 2.无需任何外部插件/资源,因为页面将在内部网上运行,而无需访问web 我用post/get方法尝试了以下代码,但是当调用第二个post时,它会清除第一个post中的数据 调用第二个post时,它将清除第一个post中的数据 因为在渲染表单时,没有将数据输出到表单。渲染元素

我有一个html+php页面。有3个下拉菜单。菜单的值来自sqlite数据库。 我想从第一个菜单中进行选择,并根据该选择动态填充第二个下拉菜单。第三个菜单也一样

我见过 但是: 1.如果可能的话,我想用php单独完成这项工作 2.无需任何外部插件/资源,因为页面将在内部网上运行,而无需访问web

我用post/get方法尝试了以下代码,但是当调用第二个post时,它会清除第一个post中的数据

调用第二个post时,它将清除第一个post中的数据

因为在渲染表单时,没有将数据输出到表单。渲染元素时,没有指示应选择哪个元素:

echo '<option value="'.$row['project'].'">'.$row['project'].'</option>';
提供以下指示:

if ($row['project'] == $_GET['project']) {
  echo '<option value="'.$row['project'].'" selected>'.$row['project'].'</option>';
} else {
  echo '<option value="'.$row['project'].'">'.$row['project'].'</option>';
}
这只是将当前渲染的值与发布渲染的值进行比较。如果相同,则在该元素上包含选定属性

更新:我还注意到你使用了三种不同的元素,有些是POST,有些是GET。这将导致不必要的混乱。将这三个元素封装在一个元素中可能会更容易,因此它们都包含在同一个请求中


旁注:您的代码对SQL注入非常开放。你应该从阅读开始,看一看。

乍一看,代码应该是有效的。但是您将所有查询引用存储在同一个变量中。尝试将查询结果存储在不同的变量中。试试这个-

<form action="" method="get" name="proj_form"> <?php $db = new SQLite3('FEINT_DB.db'); $sql="SELECT project FROM synthesis_metrics WHERE is_project=1"; $query1 = $db->query($sql); echo '<select name="project" id="project">'; while ($row = $query1->fetchArray()) { echo '<option value="'.$row['project'].'">'.$row['project'].'</option>'; } echo "</select>"; $project =$_GET['project']; ?> <input type="submit" name="projbutton" value="Submit"/></form> <?php echo "You chose $project <br>"; ?> <form action="" method="post"> <?php $sql="SELECT CL FROM synthesis_metrics WHERE is_CL=1"; $query2 = $db->query($sql); echo '<select name="CL" id="CL">'; while ($row = $query2->fetchArray()) { echo '<option value="'.$row[CL].'">'.$row['CL'].'</option>'; } echo "</select>"; $CL =$_POST['CL']; ?> <input type="submit" name="button" value="Submit"/></form> <?php echo "You chose $CL <br>"; ?> <form action="" method="get" name="tile_form"> <?php $sql="SELECT tile FROM synthesis_metrics WHERE CL=$CL AND is_t=1"; $query3 = $db->query($sql); echo '<select name="tiel" id="tiel">'; while ($row = $query3->fetchArray()) { echo '<option value="'.$row[tiel].'">'.$row['tiel'].'</option>'; } echo "</select>";

很抱歉,格式错误:

单靠php是不可能的。。。你应该使用Ajax@MasivuyeCokile你能推荐一种不需要外部资源的使用Ajax的方法吗?@MasivuyeCokile:根本不是这样。这可以通过PHP实现。使用AJAX可能更容易、更干净,并且不需要重新加载页面,但没有理由不使用PHP接收表单值并根据这些值输出更新的页面。我尝试在每个while循环中添加控件。结果与之前相同,我将尝试在上面的描述中添加第二个图像,显示提交第三个下拉按钮后的外观。还有什么需要添加以保留选择吗?@yorgo:我刚刚更新了答案。看起来您也在使用三种不同的表单,但可能应该只使用一种。这样,后续的表单帖子就会包含所有相关信息,因为您希望每次都包含所有相关信息。将所有三个元素包装在同一个表单中。需要根据第一个表单中的选项填充第二个表单。如果在同一选择中,是否可以执行此操作?更新:意思是以相同的形式。@yorgo:它不仅可以而且可能应该以相同的形式发布,因为它都发布到同一页面。基本上,每个表单帖子都需要它所选的值和它之前的值。如果将它们保存在单独的表单中,则需要将隐藏的输入添加到第二个和第三个表单中,以包含前面的值。