繁体   English   中英

从数据库填充相关的下拉列表

[英]populate dependent drop down list from database

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

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>

在同一文件中,这是MKOA&WILAYA的2个下拉列表

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);


    ?>

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

您的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(is_set($ _POST [“ mkoa”]))的计算结果为false,并且其中没有任何内容文件。 显然,如果没有数据库的详细信息,我不知道在修复该问题后是否会奏效,但在我看来,这是一个起点。 因此,您需要使用GET而不是POST来检查设置是否正确,例如:

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

(我假设在该代码下面,您具有JS使用的一些输出。)

另外,必须-mysql_扩展名已弃用。 方便时更新为PDO或mysqli。

更正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>

当用户从第一个选择框中选择一个州而不是第二个选择框及其相应城市时,我将为您提供一个州和城市的示例。 这是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,城市名称),另一个是状态表(sid,州名称),状态表的sid是sid城市表上的外键

您的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>

暂无
暂无

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

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