Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用jQuery动态链接选择框_Php_Jquery_Ajax_Select - Fatal编程技术网

Php 使用jQuery动态链接选择框

Php 使用jQuery动态链接选择框,php,jquery,ajax,select,Php,Jquery,Ajax,Select,我使用jQuery/JS/Ajax脚本动态填充数据库中的选择框,并根据前面的选择框填充后续的每个选择框 有人从我的第一个选择中选择“英格兰”,然后在下一个选择中填充英格兰的城镇等 我遇到的麻烦是让第二个SELECT函数识别变量。它有很多代码,所以我不想全部粘贴,但。。。这是在页面加载时填充第一个选择框的第一个函数: function getTierOne() { $tblname = $_SESSION['country']; $result = mysql_query("SELECT

我使用jQuery/JS/Ajax脚本动态填充数据库中的选择框,并根据前面的选择框填充后续的每个选择框

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

我遇到的麻烦是让第二个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>';
 }
}

它调用此函数:

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" />';
}

如果您使用PHP会话存储用户的国家(从getTierOne()的第1行可以看出您是),您应该能够将该行添加到drop1()PHP函数的开头:

function drop_1($drop_var)
{  
  $tblname = $_SESSION['country'];
  include_once('functions.php');
  ...
Jquery应该将用户的cookie与GET参数(func和dropvar)一起发送,这使PHP能够知道哪个会话属于用户,并将会话变量返回给用户(您可以通过Firebug/Chrome inspector的“网络”选项卡检查这一点-在onBlur启动后查找对func.PHP的调用,并查找“Cookie”请求头)

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

$.get("func.php", 
{
  func: "drop_1",
  country: "VALUE OF COUNTRY HERE",
  drop_var: $('#drop_1').val()
}, 
function(response)
{ ...
并修改服务器端PHP代码以接受2个参数,而不是一个参数

从可维护性的角度考虑,不要使用多个表(每个国家一个表),而是使用带有“国家”的单个表。“一栏。拥有多个结构相同的表很少是一个好主意,MySQL通常比数百个表更好地处理数百万行,并且它使得连接和更改表的结构更加困难。


您还应该清理输入,而不是直接在SQL查询中使用$GET['drop_var'],否则它会打断引号,使您面临SQL注入攻击。(如果您有充分的理由这样做,我深表歉意:显然您比我更了解您的具体需求!)

onBlur
工作在客户端浏览器上,而不是服务器上,您不能在javascript事件上运行php函数,除非您使用
ajax
我只是将onBlur用作一个糟糕的描述,真的,一旦从第一个选择中进行了选择,这将调用一个JS函数,该函数反过来调用PHP函数-我将把JS添加到我的问题中。这是一样的,,,你不能从javascriptIt调用PHP函数,除非我必须在第二个函数中输入实际的表名,然而我希望能够使用变量。Crashhatch-我使用的是会话,但函数drop_1($drop_var)将无法识别它们-实际上,我将所有数据都放在一个可用表(英国)中,我将其分为苏格兰、英格兰、,威尔士和北爱尔兰-但我可以在我的第一个问题中添加一个WHERE来打折,所以你是对的-谢谢你花时间回答-投票结果很好,虽然没有解决我最初的问题-回答得很好。哦,我不能升级,但如果可以的话我会的。很高兴你把它修好了。如果您遇到会话无法再次工作的问题,那么首先要做的两件事是检查cookie是否被传递(使用Firebug,如前所述),以及在尝试访问会话之前,确保ajax get请求调用了PHP的session_start()(例如,在func.PHP的顶部)。
function drop_1($drop_var) { ...
function drop_1($drop_var)
{  
  $tblname = $_SESSION['country'];
  include_once('functions.php');
  ...
$.get("func.php", 
{
  func: "drop_1",
  country: "VALUE OF COUNTRY HERE",
  drop_var: $('#drop_1').val()
}, 
function(response)
{ ...