0


我试图通过这个论坛的许多不同的帖子来解决问题。但无法达到我的具体目标。
我正在尝试将表中的列中的数据添加到组合中,然后如果单击任何一个数据,它应该根据单击的数据从另一个表中的另一列列出到另一个组合。
请检查我的网站:raihans.co.uk,用户:dbuser,passwd。然后将鼠标悬停在用户登录/注销上,单击“数据库测试”。
作为示例,您可以查看顶部创建的组合。在底部,我已经尝试过使用 mysql、javascript 和 php。成功地从我的一个表中填充了我在 1st Combo 中的第一列。但不能进行到第二或第三。
请看一下代码。我已经习惯了填充这两个组合。我不确定,我在哪里做错了。请帮助我。提前谢谢你。

<html><div><head><?php
    $link = mysql_connect("localhost","db_user_name","db_user_passwd");
    if (!$link) {    die('Could not connect to Database: ' . mysql_error());   }
    mysql_select_db("db_name",$link);
?>

<script type="text/javascript">
<?php
    $category = array();
    $query = "SELECT State_Name FROM Test_State";
    $q_result = mysql_query($query);
    if (!$q_result) {     die('Could not make query: ' . mysql_error());      }
    while($row = mysql_fetch_assoc($q_result))  {    ?>
category[] = ["<?php  $row;    }    ?>"];

function fillSelect(sel,ary,nxt){
 if (ary&&sel.form){
 var frm=sel.form,nme=sel.name.replace(/\d/g,""),i=Number(sel.name.replace(/\D/g,""))+1,nxt=frm[nxt],opts=sel.options,oary=[],z0=nxt==sel?0:1,z1=0,z1a;
 while (frm[nme+i]){
   frm[nme+i].length=1;
   frm[nme+i].selectedIndex=0;
   i++;
 }
 for (;z0<opts.length;z0++){
   if (opts[z0].selected&&ary[opts[z0].value]){
     oary=oary.concat(ary[opts[z0].value]);
 }  }
 if (nxt){
   for (;z1<oary.length;z1++)  {    nxt.options[z1+1]=new Option(oary[z1],oary[z1]);   }
 nxt.selectedIndex=0;
 }   }   }
 function getValue(isValue) {   alert(isValue);   }

 function init() {   fillSelect(document.forms[0]['List1'],category,'List1')   }

 navigator.appName == "Microsoft Internet Explorer" ? attachEvent('onload', init, false) : addEventListener('load', init, false);
 </script></div></head>

 <body>
 <form action="">

 <select name='List1' onchange="fillSelect(this,category,'List2')">
     <option value="" selected>Select a country</option>
 <?php
    $category = "SELECT Country_Name FROM Test_Country";
    $query_result = mysql_query($category);
    while($result = mysql_fetch_assoc($query_result))
    {    ?>
 <option value = "<?php echo $result['Country_Name']?>"><?php echo $result['Country_Name']?></option>
 <?php    } ?>
 </select>

 <select name='List2' onchange="getValue(this.value)">
 <option selected>Select State</option>
 </select>
 </form></body></html>
4

1 回答 1

0

我认为对您来说最好的技术是完全按原样使用示例代码,但有一个变化:当您在 PHP 中构建页面时,您希望动态创建类别数组。您可以通过在 PHP 中创建数组来非常巧妙地做到这一点,然后使用json_encode()将其转换为 javascript。

在这里,我试图向您展示如何构建$categories可以与现有 Javascript 一起使用的变量。我还没有测试它,所以你应该预料到一些错误。但是技术才是最重要的。

<html><div><head>
    <?php
        $link = mysql_connect("localhost","db_user_name","db_user_passwd");
        if (!$link)
            die('Could not connect to Database: ' . mysql_error());
        mysql_select_db("db_name",$link);

        $categories = array();

        $countryQuery = "select State_Name FROM Test_State";
        $countryResult = mysql_query($countryQuery);
        while( $row = mysql_fetch_assoc($countryResult) )
            $categories['startList'][] = $row['State_Name'];

        /*  I don't know your db schema, so I'm making it up as I go along
            A db row of "California","SFO" becomes:
                $categories["California"] = array("SFO");
            Subsequent airports in California are appended to the same array.
        */
        $airportQuery = "select Airport_Name, State_Name from Test_Airport";
        $airportResult = mysql_query($airportQuery);
        while( $row = mysql_fetch_assoc($airportResult) )
            $categories[$row['State_Name']][] = $row['Airport_Name'];

        // you can use the same technique to build a map of airports->resorts
    ?>

    <!-- Now we just need to export the big PHP array as a Javascript variable.
        Use the json_encode() function. -->
    <script type="text/javascript">
        $category = <?php echo json_encode($categories); ?> ;
    </script>

我也有一些额外的说明给你:

首先,不要使用 mysql 库。它已被新代码弃用。请改用mysqliPDO

其次,我认为您对 PHP 和 Javascript 如何交互感到困惑。总之,他们没有。PHP 运行并创建页面,然后浏览器加载页面并运行 Javascript。看起来您希望 Javascript 与 PHP 交互,除非您使用 AJAX 技术,否则这不会发生。您还没有为 AJAX 做好准备。

第三,如果你要让其他人阅读你的代码,你应该先把它格式化好。凌乱的代码很难阅读,大多数人只会避开它而不回答你的问题。如果您希望其他人帮助您编写代码,则需要愿意为您的问题付出一些额外的努力。

于 2013-04-23T00:53:42.153 回答