代码之家  ›  专栏  ›  技术社区  ›  rhodesjason

在php中包含一个文件时,可以使用$\u get变量吗?是否有可能,即使是通过Ajax调用?

  •  3
  • rhodesjason  · 技术社区  · 14 年前

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

    所以从Ajax调用的php文件内部,我认为我应该 include("email-sender.php?stage=confirm2a&job={$slot->job_id} 它调用email php页面,其中的$\u get变量告诉它要发送哪些电子邮件以及发送给谁。

    但是由于某种原因,当你使用时,我不能让include工作 ?key=value $获取附加到字符串的对。php.net告诉我可以在include中使用$\u get变量,但是当我设置一个简单的测试时,它似乎不起作用。

    我的测试页面有一个链接,当点击时,它会向页面提交一个Ajax调用,以及包含一个变量“farm”的数据,该变量等于值“animal”。这样地:

    $("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($获取[“农场”]){
    $var=$获取[农场];
    回声$ 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收到电子邮件,而且只有一次。不知道为什么…

    3 回复  |  直到 14 年前
        1
  •  9
  •   Sampson    14 年前

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

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

    --script.php的内容--

    echo $var; // 'foo'
    

    在我看来,无论如何,这要干净得多。您可能希望检查以确保值存在于 script.php 在回显任何变量之前。

        2
  •  0
  •   Joel A. Villarreal Bertoldi    14 年前

    至少有两种方法可以解决这一问题:

    1)

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

    然后,在ajaxinclude.php中:

    
    if($farm) {
        $var = $farm;
        echo $var;
    }
    

    2)

    
    if($_GET['farm']) {
        $var = $_GET['farm'];
        header("Location: ajaxInclude.php?farm={$var}");
    }
    
        3
  •  0
  •   Adam Hopkinson    14 年前

    $_GET 是一个全局变量,因此可以在PHP脚本中的任何位置使用,包括任何包含的脚本