Создание глобальной переменной PHP на нескольких веб-страницах

Я новичок в PHP, извините, если это наивный вопрос, но я хочу создать библиотеку функций php, которая использует переменную, которая является глобальной на нескольких страницах. Я использую эти 3 файла для тестирования:

functions.php

<?php
    function report()
    {
        echo "Value = ".$GLOBALS["var"]; 
    }
?>

index.php

<?php
    $var = "ABC";
    require "functions.php";
    echo "<h1>index.php</h1>";
    report();
?>
<br /><br />
<input type=button onClick="location.href='page2.php'" value="Page2">

page2.php

<?php   
    require "functions.php";
    echo "<h1>page2.php</h1>";
    report();
?>

Функция report, вызываемая index.php, повторяет Value = ABC, как и ожидалось. Но при нажатии кнопки Page2 функция report, вызываемая page2.php, отображает Undefined index ошибку, вызванную $GLOBALS["var"] в functions.php.

Я хотел бы использовать $GLOBALS["var"], когда на него есть ссылка из page2.php. Может кто-нибудь подскажет, как это включить? Спасибо за любую помощь!


person wade    schedule 24.05.2015    source источник
comment
Вам нужны сеансы. $ GLOBALS является глобальным только внутри скрипта.   -  person    schedule 25.05.2015
comment
Если вы открываете page2.php, $GLOBALS["var"] нигде не определено.   -  person Rizier123    schedule 25.05.2015
comment
Бинго для sessions! Я добавил: session_start(); в начале index.php и page2.php и заменил $_SESSION['var'] на все глобальные var ссылки. Спасибо Hobo Sapiens.   -  person wade    schedule 25.05.2015
comment
Rizier123, я не уверен, как определить $GLOBALS["var"] в page2.php без его повторной инициализации и потери исходного значения?   -  person wade    schedule 25.05.2015


Ответы (2)


Прежде всего, вот несколько ссылок о $_SESSIONS переменных, которые вы должны прочитать.

Я обновил ваш код, чтобы вы стали примером.

functions.php

<?php
function report()
{
    if(isset($_SESSION['var']))
        echo "Value = ". $_SESSION['var']; 
}
?>

index.php

<?php
        session_start();
?>
<html>
<head>
</head>
<body>
    <?php

        $_SESSION['var'] = "ABC";

        require('functions.php');
        echo "<h1>index.php</h1>";

        report();
    ?>
    <br><br>
        <input type="button" onClick="location.href='page2.php'" 
               value="Page2">
</body>

page2.php

<?php 
session_start();
?>
<html>
<head>
</head>
<body>
    <?php
         require ('functions.php');
         echo "<h1>page2.php</h1>";
         report();
     ?>
</body>
</html>
person Falt4rm    schedule 24.05.2015
comment
фактически, размещение HTML над session_start(); считается выводом перед заголовком, поэтому лучше сначала объявить его <?php session_start(); ?>, а затем <html> <head>... - Rerences php.net/manual/en/function.error-reporting.php и stackoverflow.com/questions/8028957/ - person Funk Forty Niner; 25.05.2015
comment
Хорошо - кажется, все узнали в этой теме - тогда я модифицирую код. Изменить: готово. - person Falt4rm; 25.05.2015

Рекомендуется: объявить переменную .. Или используйте isset (), чтобы проверить, объявлены ли они, прежде чем ссылаться на них.

Во-вторых, вам нужно определить сеанс

<?php
function report()
{
    echo "Value = ". **$_SESSION['var']**; 
}
?>

и использовать на всех своих страницах :)

т.е. для страницы 1,

<?php
        session_start();

        $_SESSION['var'] = "XYZ";

        require('functions.php');

        report();
    ?>

и fot page2 также,

<?php 
session_start();

require ('functions.php');
report();
?>

Надеюсь, поможет :)

person Adarsh Vardhan    schedule 24.05.2015