Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
填充下拉列表-PHP Ajax MySQL_Php_Mysql_Ajax - Fatal编程技术网

填充下拉列表-PHP Ajax MySQL

填充下拉列表-PHP Ajax MySQL,php,mysql,ajax,Php,Mysql,Ajax,我的HTML页面上有两个下拉列表:第一个下拉列表包含数据库列名,第二个下拉列表将根据这些列名填充,即 我有一个带有字段的表:,下面是条目 1. "A", "BS", "New York" 2. "B", "BS", "Chicago" 3. "C", "MS", "Boston" 4. "D", "MS", "New York" 因此,我的第一个下拉列表将包含列名,即“学位”和“城市” 如果我选择“学位”,则第二个下拉列表应填充“学士学位”和“硕士学位”,如果我选择“城市”,则第二个下拉列表应

我的HTML页面上有两个下拉列表:第一个下拉列表包含数据库列名,第二个下拉列表将根据这些列名填充,即

我有一个带有字段的表:
,下面是条目

1. "A", "BS", "New York"
2. "B", "BS", "Chicago"
3. "C", "MS", "Boston"
4. "D", "MS", "New York"
因此,我的第一个下拉列表将包含列名,即“学位”和“城市”

如果我选择“学位”,则第二个下拉列表应填充“学士学位”和“硕士学位”,如果我选择“城市”,则第二个下拉列表应选择“纽约”、“波士顿”和“芝加哥”

我如何着手实施

[添加我的代码]:

changessecond(first)
方法与您建议的完全相同

<body>
   <form method="POST" action="" name="mainForm">
      <table>
         <tr>
            <td> Filter by: </td>
            <td>
            <div id="first">
               <select onChange="changeSecond(this.value)">
                  <option value="1">All</option>
                  <option value="2">Degree</option>
                  <option value="3">City</option>
               </select>
            </td>
         </tr>
         <tr>
            <td>&nbsp</td>
            <td>
               <div id="second">
                  <select name="val">
                     <option value=""></option>
                  </select>
               </div>
            </td>
         </tr>
      </table>
   </form>
</body>

筛选依据:
全部的
度
城市
 
这是您建议的第二个_script.php:

<?
   $link = mysql_connect("localhost", "root", "");

   if (!$link)
   {
      die('Could not connect: ' . mysql_error());
   }
   if (mysql_select_db("myDatabase", $link))
   {
      $first=mysql_real_escape_string($_REQUEST["first"]);
      $query="SELECT ".$first." FROM myTable GROUP BY ".$first;
      $data=mysql_query($query);

      echo "<select id=\"second\">";
      while($row=mysql_fetch_row($data))
      {
         echo "<option value=\"".$row[0]."\">".$row[0]."</option>";
      }
      echo "</select>";
   }
   echo mysql_error();
?>

您可以预先加载并隐藏所有需要的下拉列表,并在第一个下拉列表中触发“更改”事件时显示它们,或者在同一个“更改”事件中有两个下拉列表并清空它们


如果选择第二种方法,您应该缓冲要插入下拉列表中的数据,部分或全部

您可以预加载和隐藏所有需要的下拉列表,并在第一个下拉列表中触发“更改”事件时显示它们,或者在同一个“更改”事件中有两个下拉列表并清空它们


如果选择第二种方法,则应缓冲要插入下拉列表中的数据,部分或全部

如果需要更动态的解决方案(可适应背景数据库的更改),则可以在页面上执行以下操作:

<script>
        function changeSecond(first){
        var xmlhttp;
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        xmlhttp.onreadystatechange=function()
        {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            var res=xmlhttp.responseText;
            document.getElementById("second").innerHTML=res;
            }
          }
        xmlhttp.open("GET","second_script.php?first="+first,true);
        xmlhttp.send();
        }
        </script>
...
<select onChange="changeSecond(this.value)">
<option value="Degree">Degree</option>
<option value="City">City</option>
</select>
<div id="second"><select><option value=""></option></select></div>

功能更改第二(第一){
var-xmlhttp;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
var res=xmlhttp.responseText;
document.getElementById(“第二”).innerHTML=res;
}
}
open(“GET”,“second_script.php?first=“+first,true”);
xmlhttp.send();
}
...
度
城市
然后是一个脚本,类似于:

<?php
//database connection
$first=mysql_real_escape_string($_REQUEST["first"]);
$query="SELECT ".$first." FROM tablename GROUP BY ".$first;
$data=mysql_query($query);
echo "<select>";
while($row=mysql_fetch_row($data)){
echo "<option value=\"".$row[0]."\">".$row[0]."</option>";
}
echo "</select>";
?>


我想,为了实现真正的灵活性,您还需要在另一个类似于上述脚本的脚本中使用mysql\u field\u name动态填充第一个,如果您需要更动态的解决方案(可以适应后台数据库的更改),您可以在页面上执行以下操作:

<script>
        function changeSecond(first){
        var xmlhttp;
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        xmlhttp.onreadystatechange=function()
        {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            var res=xmlhttp.responseText;
            document.getElementById("second").innerHTML=res;
            }
          }
        xmlhttp.open("GET","second_script.php?first="+first,true);
        xmlhttp.send();
        }
        </script>
...
<select onChange="changeSecond(this.value)">
<option value="Degree">Degree</option>
<option value="City">City</option>
</select>
<div id="second"><select><option value=""></option></select></div>

功能更改第二(第一){
var-xmlhttp;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
var res=xmlhttp.responseText;
document.getElementById(“第二”).innerHTML=res;
}
}
open(“GET”,“second_script.php?first=“+first,true”);
xmlhttp.send();
}
...
度
城市
然后是一个脚本,类似于:

<?php
//database connection
$first=mysql_real_escape_string($_REQUEST["first"]);
$query="SELECT ".$first." FROM tablename GROUP BY ".$first;
$data=mysql_query($query);
echo "<select>";
while($row=mysql_fetch_row($data)){
echo "<option value=\"".$row[0]."\">".$row[0]."</option>";
}
echo "</select>";
?>


我想,为了实现真正的灵活性,您还需要在另一个脚本中使用mysql\u field\u name动态填充第一个脚本,类似于上面的代码,用于基于其他 在下面的示例中,我在“子”下拉列表中显示在“父”下拉列表中选择的城市的位置

    <script type="text/javascript">
    function city_locality(val)
    {
    // alert (val);
    url="<?php echo $this->baseurl ?>/components/com_ezportal/includes/query.php";
    data="stid="+val;
$.post(url,data,function(data){
$("#locid").html(data);
});     
    }
    </script>
    <select name="filter_1state" id="filter_1state" onChange="city_locality(this.value)">
      <option value="0">-- Select City --</option>
      <option value="1">Lahore</option>
      <option value="2">Karachi</option>
      <option value="3">Islamabad</option>
      <option value="4">Quetta</option>
      <option value="5">Multan</option>
    </select>

功能城市/地区(val)
{
//警报(val);
url=“/components/com_ezportal/includes/query.php”;
data=“stid=”+val;
$.post(url、数据、函数(数据){
$(“#locid”).html(数据);
});     
}
--选择城市--
拉合尔
卡拉奇
伊斯兰堡
奎达
木尔坦
文件query.php的代码

    <?php 
    $link = mysql_connect('localhost', 'root', '');
    mysql_select_db('mydatabase');
    if (isset($_POST['stid']))
    {
        $stid = $_POST['stid'];
        $query= mysql_query("SELECT id,ezcity FROM tbl_locality WHERE stateid = '".$stid."' GROUP BY ezcity"); 
    ?>
        <option value="0">-- Select Locality --</option>
    <?php
        while($row = mysql_fetch_array($query))
        {
    ?>
        <option value="<?php echo $row['id']?>"><?php echo $row['ezcity']?>        </option> 
        <?php
        }
    }
    ?>

要填充的主文件的代码基于其他
在下面的示例中,我在“子”下拉列表中显示在“父”下拉列表中选择的城市的位置

    <script type="text/javascript">
    function city_locality(val)
    {
    // alert (val);
    url="<?php echo $this->baseurl ?>/components/com_ezportal/includes/query.php";
    data="stid="+val;
$.post(url,data,function(data){
$("#locid").html(data);
});     
    }
    </script>
    <select name="filter_1state" id="filter_1state" onChange="city_locality(this.value)">
      <option value="0">-- Select City --</option>
      <option value="1">Lahore</option>
      <option value="2">Karachi</option>
      <option value="3">Islamabad</option>
      <option value="4">Quetta</option>
      <option value="5">Multan</option>
    </select>

功能城市/地区(val)
{
//警报(val);
url=“/components/com_ezportal/includes/query.php”;
data=“stid=”+val;
$.post(url、数据、函数(数据){
$(“#locid”).html(数据);
});     
}
--选择城市--
拉合尔
卡拉奇
伊斯兰堡
奎达
木尔坦
文件query.php的代码

    <?php 
    $link = mysql_connect('localhost', 'root', '');
    mysql_select_db('mydatabase');
    if (isset($_POST['stid']))
    {
        $stid = $_POST['stid'];
        $query= mysql_query("SELECT id,ezcity FROM tbl_locality WHERE stateid = '".$stid."' GROUP BY ezcity"); 
    ?>
        <option value="0">-- Select Locality --</option>
    <?php
        while($row = mysql_fetch_array($query))
        {
    ?>
        <option value="<?php echo $row['id']?>"><?php echo $row['ezcity']?>        </option> 
        <?php
        }
    }
    ?>

您可以使用ajax实现此目的

eg1.html

筛选依据:
全部的
度
城市
 
$(文档).ready(函数(){
$('#第一个_下拉列表')。更改(函数(){
$.ajax({
'type':'post',
'url':'getDropdownOptions.php',
'data':'first='+$(this.val(),
“成功”:函数(数据){
$(“#第二个#下拉列表”).html(数据);
}
});
});
});
getDropdownOptions.php