Можете ли вы использовать переменные $ _GET при включении файла в PHP? Возможно ли это даже с AJAX-звонка? - PullRequest
3 голосов
/ 29 января 2010

У меня есть файл PHP, который обрабатывает отправку подтверждающих писем. У меня также есть календарь, который я использую AJAX для различных обновлений. Когда AJAX вызывает файл обновления, он обновляет базу данных новой информацией, и я хочу, чтобы письма с подтверждением отправлялись.

Итак, внутри php-файла, который вызывает AJAX, я решил, что должен include("email-sender.php?stage=confirm2a&job={$slot->job_id}, который вызывает страницу php электронной почты, с переменными $ _GET, которые сообщают ему, какие письма отправлять и кому.

Но по какой-то причине я не могу заставить работать include, когда вы используете пары ?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 получает электронное письмо и только один раз. Не уверен, почему ...

Ответы [ 3 ]

9 голосов
/ 29 января 2010

Вы можете обрабатывать переменные в вашем включенном скрипте, а не добавлять их в сам путь включения:

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

- содержимое файла script.php -

echo $var; // 'foo'

По-моему, в любом случае это намного чище. Вы можете проверить, чтобы убедиться, что значения существуют в script.php, прежде чем выводить какие-либо переменные.

0 голосов
/ 29 января 2010

$_GET - глобальная переменная, поэтому может использоваться в любом месте вашего PHP-скрипта, включая любые включенные скрипты

0 голосов
/ 29 января 2010

Есть, по крайней мере, две альтернативы для решения этой проблемы:

1)

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

Затем в ajaxInclude.php:

<code>
if($farm) {
    $var = $farm;
    echo $var;
}

2)

<code>
if($_GET['farm']) {
    $var = $_GET['farm'];
    header("Location: ajaxInclude.php?farm={$var}");
}
...