gpt4 book ai didi

php - 使用 jQuery 的动态链式选择框

转载 作者:行者123 更新时间:2023-12-01 05:55:41 25 4
gpt4 key购买 nike

我使用 jQuery/JS/Ajax 脚本从数据库中动态填充 SELECT 框,每个后续 SELECT 框都根据前一个 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 是一个发布的 $_SESSION 变量,其中包含用户所在国家/地区 obvs。

问题是第一个 SELECT 框的“onBlur”,使用此 JS 函数和 PHP 调用调出第二个 SELECT 框:

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

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

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

function drop_1($drop_var) { ...

最佳答案

如果您使用 PHP session 来存储用户的国家/地区(从 getTierOne() 的第 1 行看来,您就是这样),您应该能够将该行添加到 drop1() PHP 函数的开头:

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

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

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

$.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 注入(inject)攻击。 (如果您有充分的理由这样做,我深表歉意:显然您比我更了解您的具体要求!)

关于php - 使用 jQuery 的动态链式选择框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15970315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com