【问题标题】:populate dependent drop down list from database从数据库填充依赖下拉列表
【发布时间】:2014-10-01 18:17:08
【问题描述】:

我想在 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>

在同一个文件中,这里有 2 个下拉列表 MKOA 和 WILAYA

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


    ?>

【问题讨论】:

    标签: php mysql ajax


    【解决方案1】:

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

    【讨论】:

    • 我按照指示做了,我找不到错误,但第二个列表不会加载。我的 Javascript 代码写对了吗?
    • @Buzuka 是的,您的 javascript 代码编写正确。但是在您的 ajax 调用中,您需要在服务器端脚本中回显或打印您的输出,并通过 javascript 在您的特定元素中写入此响应。
    【解决方案2】:

    当用户从第一个选择框中选择一个州而不是第二个选择框出现与其对应的城市时,我再给你一个州和城市的例子试试这个。 这是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>
    

    这里有两张表,一张是城市表(cid, sid, cityname) 另一个是状态表(sid, state name) 状态表的sid是sid城市表的外键

    【讨论】:

    • 您发布了答案或您认为适合答案的代码??
    • 是的试试这个它可能会帮助你而不是像上面的问题@Arif_suhail_123 的答案
    • 对不起你说的,如果我理解正确你说它可能对我没有帮助?对不起,如果我弄错了
    • 这个程序就像上面由@Buzuka发起的问题一样。复制页面代码并按照指示创建数据库和表您将能够知道这实际上是什么。
    • @sameerkumar 我非常了解您的示例,我当前的代码和 thıs 之间存在细微差别,例如 标签,您可以在不使用额外 dıv 的情况下编写该代码吗? bse 我不想改变我工作中当前的 dıv 安排。
    【解决方案3】:

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

    你的 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["mkoa"])) 的评估结果为 false并且该文件中没有任何内容在运行。显然,如果没有您的数据库的详细信息,我不知道当您修复它时这是否会起作用,但在我看来,这就是开始的地方。因此,您需要使用 GET 而不是 POST 来检查是否已设置,例如:

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

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

    另外,强制 - 不推荐使用 mysql_ 扩展名。方便时更新到 PDO 或 mysqli。

    【讨论】:

    • 我不是故意要保留的,请查看 wilaya php 上的编辑。注意:即使使用 $_GET 它也不会运行
    • 查看我的更新 - wilaya.php 中是否还有其他代码有输出?
    • wilaya.php 不输出任何内容。它只是从数据库中获取数据
    • 那是你的问题。如果没有脚本可以使用的一些输出,JavaScript 将无法做任何事情。我现在会更新我的答案。
    • 我希望输出出现在 WILAYA 下拉列表中;我在 SELECT 元素的 OPTION 标记之间保留了一个 echo 语句
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2018-10-03
      相关资源
      最近更新 更多