小编典典

在PHP中包含文件时,可以使用$ _GET变量吗?即使通过AJAX调用也可以吗?

ajax

我有一个处理发送确认电子邮件的PHP文件。我还有一个日历,可以使用AJAX进行各种更新。当AJAX调用更新文件时,它将使用新信息更新数据库,并且我希望发送确认电子邮件。

因此,从AJAX调用的php文件内部,我认为应该include("email- sender.php?stage=confirm2a&job={$slot->job_id}调用哪个电子邮件php页面,并带有$
_GET变量来告诉它发送哪些电子邮件以及向谁发送电子邮件。

但是由于某些原因,当您使用?key=value附加到字符串的$ _GET对时,我无法使包含起作用。PHP.net告诉我可以在包含中使用$
_GET变量,但是当我设置一个简单的测试时,它似乎不起作用。

我的测试页有一个链接,单击该链接会向页面提交ajax调用以及包含一个等于“动物”值的变量“农场”的数据。像这样:

$("a.testlink").click(function() {
    var mydata = "farm=animal";
    $.ajax({
        url: "ajaxPHP.php",
        data: mydata,
        success: function(rt) {
            alert(rt);
        }
});

所以ajaxPHP.php说:

if($_GET['farm']) {
    $var = $_GET['farm'];
    echo $var;
}

此时,单击链接时,成功警报将显示“动物”。那就对了。

但是,如果我将ajaxPHP.php更改为此:

if($_GET['farm']) {
    $var = $_GET['farm'];
    include("ajaxInclude.php?farm={$var}");
}

并有一个名为ajaxInclude.php的文件,其中说:

if($_GET['farm']) {
    $var = $_GET['farm'];
    echo $var;
}

然后,当我单击链接时,我会收到一个空警报。因此,include不适用于附加到末尾的查询字符串。

有什么帮助吗?

加成

所以现在我有以下内容:

$stage = "confirm2a";
include("email-sender.php");
$stage = "confirm2b";
include("email-sender.php");

然后在email-sender.php中,显然有很多代码,例如:

if($stage == "confirm2a") { 
   email Person 1 etc...
}
if($stage == "confirm2b") {
    email Person 2 etc...
}

但是,当我运行脚本时,只有第1个人收到电子邮件,并且只有一次。不知道为什么


阅读 257

收藏
2020-07-26

共1个答案

小编典典

您可以在包含的脚本中处理变量,而不是将其附加到包含路径本身上:

$var = "foo";
include("script.php");

-script.php的内容-

echo $var; // 'foo'

我认为这反而更清洁。您可能希望script.php在回显任何变量之前检查以确保值存在于其中。

2020-07-26