从数据库填充依赖的下拉列表

时间:2014-10-01 09:10:46

标签: php mysql ajax

我想在MIKOA下拉列表中选择一个值后填充WILAYA dropList。这是我到目前为止所做的。但是下载列表没有填充在更改事件中。到目前为止,什么是错误的?

on first.php

<head>
    <script type = "text/javascript">
       function jazaWilaya (mkoa_value)
       {
           var xmlhttp = new XHMLHttpRequest ();
           xmlhttp.onreadystatechange = function ()
           {
               if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
               {
                   document.getElementById("wilaya").innerHTML= xmlhttp.reponseText;
               }
           };
           xmlhttp.open ("GET", "wilaya.php?mkoa="+mkoa_value, true);
           xmlhttp.send ();
       }

    </script>
</head>

在同一个文件中,这里有2个下拉列表MKOA&amp;大区

Mkoa:
<select id="mkoa" name ="mkoa" onchange="jazaWilaya(this.value);" >
    <option value = "chagua">Chagua</option>  
    <option>Arusha </option>
    <option value = "dsm">Dar-es-Salaam</option>
    <option value = "dodoma">Dodoma</option>
    <option value = "kagera">Kagera </option>
    <option value = "manyara">Manyara</option>
    <option value = "mbeya">Mbeya</option>
    <option value = "morogoro">Morogoro</option>
    <option value = "mwanza">Mwanza</option>
    <option value = "mtwara ">Mtwara</option>
    <option value = "pwani">Pwani</option>
    <option value = "shinyanga">Shinyanga </option>
    <option value = "tabora">Tabora</option>
    <option value = "tanga">Tanga</option>
    <option value = "zanzibar">Zanzibar</option>
</select> 
<br><br>

Wilaya:
<select id="wilaya" name="wilaya">
    <option>Chagua</option>
    <?php
    while ($row = mysql_fetch_array($result))
    {
    ?>
        <option value = "<?=$row['wilaya_id']?>"><?php echo $row['wilaya_jina'];?></option>
    <?php
    }
    ?>
</select>

这是另一个名为wilaya.php

的php文件中的查询代码
<?php
    // put your code here

    $con = mysql_connect("localhost", "root", "root");
    if (!$con)
    {
        echo mysql_error();
    }

    $mkoa = mysql_real_escape_string($_REQUEST["mkoa"]);

    mysql_select_db("dalaliOnline", $con);
    $sql = "SELECT wilaya_jina FROM WILAYA WHERE mkoa_jina ='$mkoa' ";
    $result =mysql_query($sql, $con);


    ?>

4 个答案:

答案 0 :(得分:0)

在对问题进行一些更新后,这是我的新答案。以下原始答案无关紧要。

除非您的脚本有一些输出要使用,否则您的JavaScript无法执行任何操作。 PHP变量对它没用。一种解决方案是让wilaya.php使用您的原始代码为选择框创建新选项:

<?php
    $con = mysql_connect("localhost", "root", "root");
    if (!$con)
    {
      // we don't want to output anything if something goes wrong, it'll mess the select up
      die();
    }

    $mkoa = mysql_real_escape_string($_REQUEST["mkoa"]);

    mysql_select_db("dalaliOnline", $con);
    $sql = "SELECT wilaya_jina FROM WILAYA WHERE mkoa_jina ='$mkoa' ";
    $result = mysql_query($sql, $con);
    ?>
    <option>Chagua</option>
    <?php
    while ($row = mysql_fetch_array($result))
    {
    ?>
        <option value = "<?php echo $row['wilaya_id']; ?>"><?php echo $row['wilaya_jina']; ?></option>
    <?php
    }
    ?>

然后,您的JavaScript将使用wilaya.php的输出替换选择框内容。

您将数据作为GET请求发送,但是你有一个if语句检查wilaya.php中的POST变量,所以if(isset($ _POST [&#34; mkoa&#34; ]))正在评估为false并且该文件中没有任何内容正在运行。显然没有你的数据库的细节我不知道当你解决这个问题时这是否会起作用,但在我看来这是一个开始的地方。因此,您需要使用GET而不是POST来检查是否已设置,例如:

if (isset ($_GET["mkoa"]))
{
  // the rest of your code
}

(我假设在下面的代码中你有一些JS正在使用的输出。)

此外,必须 - 不推荐使用mysql_扩展名。方便时更新到PDO或mysqli。

答案 1 :(得分:0)

在wilaya.php中修正您的代码:

<?php
    // put your code here

    $con = mysql_connect("localhost", "root", "root");
    if (!$con)
    {
        echo mysql_error();
    }

    $mkoa = mysql_real_escape_string($_REQUEST["mkoa"]);

    mysql_select_db("dalaliOnline", $con);
    $sql = "SELECT wilaya_jina FROM WILAYA WHERE mkoa_jina ='$mkoa' ";
    $result =mysql_query($sql, $con);

    while ($row = mysql_fetch_array($result))
    {
    ?>
       <option value = "<?=$row['wilaya_id']?>"><?php echo $row['wilaya_jina'];?></option>
    <?php
    }
?>

从first.php文件中删除以下代码:

Wilaya: Should be
<select id="wilaya" name="wilaya">
    <option>Chagua</option>

</select>

Instead of Wilaya: 
<select id="wilaya" name="wilaya">
    <option>Chagua</option>
    <?php
    while ($row = mysql_fetch_array($result))
    {
    ?>
        <option value = "<?=$row['wilaya_id']?>"><?php echo $row['wilaya_jina'];?></option>
    <?php
    }
    ?>
</select>

答案 2 :(得分:0)

当用户从第一个选择框中选择一个状态而不是第二个选择框与相应的城市一起出现时,我再给你一个州和城市的例子。 这是state.php页面。

<?php
mysql_connect("localhost","root","");
mysql_select_db("statename");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script>
function showdetails(str)
{
var xmlhttp;
if (str==0)
  { 
 alert("please select state name");
  }
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)
    {
    document.getElementById("showresult").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","details.php?id="+str,true);
xmlhttp.send();
}
</script>
</head>

<body>
<form>
SELECT STATE:
:<select name="sid" id="sid" onchange="showdetails(this.value)">
                <option value="0">Select State Name</option>
                <?php

                $sql="select sid,statename from state";
                $qry=mysql_query($sql);
                $num=mysql_num_rows($qry);
                if($num>0)
                {
                    while($res=mysql_fetch_array($qry))
                {
                ?>
                <option value="<?php echo $res['sid'];?>"><?php echo $res["statename"];?></option>
                 <?php
                }
                }
                 ?>
             </select>




 CITY NAMES:    
 <div id=showresult></div>

</form>
</body>
</html>

details.php页面

mysql_connect("localhost","root","");
mysql_select_db("statename");
$id = $_REQUEST["id"];
$sql="select * from city where sid='$id'";
$qry=mysql_query($sql);
$num=mysql_num_rows($qry);
?>
<select name="cid" id="cid">
                <option value="0">Select City Name</option>
                <?php
                if($num>0)
                {
                    while($res=mysql_fetch_array($qry))
                {
                ?>
                <option value="<?php echo $res['cid'];?>"><?php echo $res["cityname"];?></option>
                 <?php
                }
                }
                 ?>
             </select>

这里有2个表,一个是城市表(cid,sid,cityname)另一个是状态表(sid,州名)状态表的sid是sid city table中的外键

答案 3 :(得分:0)

你的wilaya.php应该是这样的:

<?php
    // put your code here

    $con = mysql_connect("localhost", "root", "root");
    if (!$con)
    {
        echo mysql_error();
    }

    $mkoa = mysql_real_escape_string($_REQUEST["mkoa"]);

    mysql_select_db("dalaliOnline", $con);
    $sql = "SELECT wilaya_jina FROM WILAYA WHERE mkoa_jina ='$mkoa' ";
    $result =mysql_query($sql, $con);


?>

<option>Chagua</option>
<?php
       while ($row = mysql_fetch_array($result))
       {
?>
           <option value="<?php echo $row['wilaya_id']?>"><?php echo $row['wilaya_jina'];?></option>
<?php
       }
?>
你的first.php文件中的

更改

大区:

<select id="wilaya" name="wilaya">
    <option>Chagua</option>
</select>