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