繁体   English   中英

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

[英]Dynamically populated drop-down menus from database

在此处输入图片说明

我有一个html + php页面。 有3个下拉菜单。 菜单的值来自sqlite数据库。 我想从第一个菜单中进行选择,然后基于该选择,动态填充第二个下拉菜单。 然后再次对第三个菜单相同。

我已经看到从上一个下拉菜单中选择的动态填充下拉菜单,但是:1.如果可能的话,我想单独用php完成此操作2.不需要任何外部插件/资源,因为该页面将在Intranet,无法访问Web。

我已经尝试过使用post / get方法的以下代码,但是当调用第二个帖子时,它将清除第一个帖子中的数据。

<form action="" method="get" name="proj_form"> 
<?php 
  $db = new SQLite3('FEINT_DB.db');  
  $sql="SELECT project FROM synthesis_metrics WHERE is_project=1"; 
  $query = $db->query($sql); // Run your query  
  echo '<select name="project" id="project">';     
  while ($row = $query->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"; 
  $query = $db->query($sql); // Run your query  
  echo '<select name="CL" id="CL">';     
  while ($row = $query->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"; 
  $query = $db->query($sql); // Run your query  
  echo '<select name="tiel" id="tiel">';     
  while ($row = $query->fetchArray()) {  
     echo '<option value="'.$row[tiel].'">'.$row['tiel'].'</option>';  
    } 
  echo "</select>"; 

图片:按第3次提交后: 在此处输入图片说明

当第二个帖子被调用时,它将清除第一个帖子中的数据

因为您在重新呈现数据时未将其输出到表单。 呈现<option>元素时,没有指示应选择哪个元素:

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>';
}

这只是将当前渲染<option>的值与发布的<option>的值进行比较。 如果相同,则在该<option>元素上包括selected属性。


更新:我还注意到您正在使用三个不同的<form>元素,其中一些是POST,而另一些是GET。 这将引起不必要的混乱。 将所有这三个都包装在一个<form>元素中可能会更容易,以便将它们全部包含在同一请求中。


附注:您的代码是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>";

抱歉,格式化错误。 :(

在这种情况下,必须使用ajax才能将数据传递到页面并获取结果,而无需重新加载页面或将页面定向到另一个页面。 它是这样的:

$('first_drop_down').change( function() {
    var val = $( 'first_drop_down' ).val();
    $.get( 'php_file.php?val=' + val , function( response ) {
        $( 'div' ).html( response );
    } );
} );

您需要创建一个包含第二个下拉菜单的div。 在php文件中,您需要使用与传递给文件的值相匹配的选项来回显一个全新的<select> 在php文件中,您可以使用$_GET[ 'val' ]来访问传递给它的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM