使用jQuery动态链接的SELECT框

时间:2013-04-12 11:34:56

标签: php jquery ajax select

我正在使用jQuery / JS / Ajax脚本从我的数据库中动态填充SELECT框,每个后续的SELECT框都是根据之前的SELECT填充的。

EG。有人从我的第一个SELECT中选择“英格兰”,然后用英格兰的城镇等填充下一个SELECT。

我遇到的麻烦是让第二个SELECT函数识别变量。这是很多代码,所以我不想粘贴它,但是......这是第一个在页面加载时填充第一个SELECT框的函数:

function getTierOne()
{   
 $tblname = $_SESSION['country'];
 $result = mysql_query("SELECT DISTINCT county FROM $tblname ORDER BY county") 
 or die(mysql_error()); 
 while($tier = mysql_fetch_array( $result ))  
 {
  echo '<option value="'.$tier['county'].'">'.$tier['county'].'</option>';
 }
}

这很好,$ tblname是一个包含用户country,obvs的已发布$ _SESSION变量。

问题是第一个SELECT框的'onBlur',第二个SELECT框是使用这个JS函数和PHP调用启动的:

$(document).ready(function() 
{
    $('#wait_1').hide();
    $('#drop_1').change(function()
        {
            $('#wait_1').show();
            $('#result_1').hide();
            $.get("func.php", 
                {
                    func: "drop_1",
                    drop_var: $('#drop_1').val()
                }, 
            function(response)
                {
                    $('#result_1').fadeOut();
                    setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);
                });
            return false;
        });
});

...

if (isset($_GET['func'])&& $_GET['func'] == "drop_1") {
drop_1($_GET['drop_var']);
}

调用此功能:

function drop_1($drop_var)
{  
  include_once('functions.php');
  $result = mysql_query("SELECT DISTINCT town FROM $tblname WHERE county='$drop_var'") 
  or die(mysql_error());

  echo '<select name="drop_2" id="drop_2">
  <option value=" " disabled="disabled" selected="selected">Select Your Town/Nearest Town</option>';

  while($drop_2 = mysql_fetch_array( $result )) 
  {
  echo '<option value="'.$drop_2['town'].'">'.$drop_2['town'].'</option>';
  }
  echo '</select>';
  echo '<input type="submit" name="submit" value="Continue" />';
}

但即使我使用Global,此函数也无法识别我的$ tblname变量!它识别的唯一变量是$ drop_var,它是第一个SELECT框的结果。

有没有人知道如何将$ tblname变量传递给

function drop_1($drop_var) { ...

1 个答案:

答案 0 :(得分:0)

如果你正在使用PHP会话来存储用户的国家(并且从getTierOne(的line1)看起来像你的那样),你应该能够将行添加到你的drop1()PHP函数的开头:< / p>

function drop_1($drop_var)
{  
  $tblname = $_SESSION['country'];
  include_once('functions.php');
  ...

Jquery应该发送你的用户的cookie以及GET参数(func和dropvar),这允许PHP知道哪个会话属于用户,并将它们的会话变量返回给他们(你可以用“网络”来检查它) Firebug / Chrome检查器的选项卡 - 在onBlur触发并查找“Cookie”请求标头后查找对func.php的调用。

或者,如果您没有使用会话,但是您将国家/地区存储在客户端(例如,作为第一个“drop_0”选择框?),您可以让jquery传递tier1(county)中的选项在get call中选择框。即

$.get("func.php", 
{
  func: "drop_1",
  country: "VALUE OF COUNTRY HERE",
  drop_var: $('#drop_1').val()
}, 
function(response)
{ ...

修改服务器端PHP代码以接受2个参数而不是1个。

从可维护性的角度来看,请考虑不使用多个表(每个国家/地区一个),而是使用带有其他“国家/地区”列的单个表。拥有多个结构相同的表几乎不是一个好主意,MySQL通常比数百个表更好地处理数百万行,并且它使得连接和更改表的结构变得更加困难。 您还应该清理输入,而不是直接在SQL查询中使用$ GET ['drop_var'],否则它将在引号上打破并打开SQL注入攻击。 (如果你有充分的理由去做其中任何一项道歉:显然你比我更了解你的具体要求!)