Перенос сообщения через веб-сайт с использованием PHP ООП - PullRequest
1 голос
/ 28 июля 2011

Я новичок в PHP и хочу создать статический метод, который, если его аргумент пуст, будет показывать сообщение. Если нет, то данное сообщение будет установлено в статическую переменную для последующего использования. Но когда я вызываю метод для установки сообщения, а затем вызываю его на другой странице, чтобы показать сообщение. Ничего не появляется.

Вот моя часть кода для этого "session.php":

   class Session {

            public static $message; 


            public static function notify($message = ""){
                if(!empty($message)){
                    self::$message = $message;                    
                } else {                        
                    return self::$message;
                }
            }
}

    $session = new Session();

"add_user.php":

<?php       
    require_once '../helper/session.php';       
?>

<?php
    if (isset($_POST["submit"])) {        

        $user->username = $_POST["username"];
        $user->password = $_POST["password"];
        $user->first_name = $_POST["first_name"];
        $user->last_name = $_POST["last_name"];
        if($result = $user->add_user()){
            Session::notify("New user added");
            redirect_to("../view/login.php");
        } else { Session::notify("Cannot add new user"); }

    }
?>

"login.php":

<?php 
    require_once "../control/add_user.php";
?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <link rel="stylesheet" href="../stylesheet/login.css" />
        <title>Welcome to Harmony</title>
    </head>

    <body>
        <header>
            <h2>Harmony</h2>
        </header>

        <section>
            <div id="formStyle">
                <h3>Login or Signup:</h3>
                <form action="login.php" method="post">

                    <p><label for="username">Username: </label>
                        <input type="text" name="username" value="" placeholder="Username"/></p>

                    <p><label for="password">Password: </label>
                        <input type="text" name="password" value="" placeholder="Password"/></p>

                    <input type="submit" name="submit" value="Submit" />
                    <input type="button" name="sign_up" value="Sign up" onClick="parent.location='add_user.php'">
                </form>
                            <?php echo Session::notify();  ?>
            </div>
        </section>
    </body>
</html>

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

Вы действительно не пишете на сессию, а вы?Вы должны создать еще два метода для получения и установки переменных в реальном сеансе.После перенаправления ваше сообщение исчезает, потому что оно сохраняется только при выполнении скрипта.

function set_notification($message) {
$_SESSION['notification'] = $message; }
function get_notification() {
if(!empty($_SESSION['notification'])) {
return $_SESSION['notification']; }

Что-то в этом роде:)

Конечно, для работы сессий вы должны выполнить session_start() вызов в начале скрипта.Подробнее о них здесь

1 голос
/ 28 июля 2011

HTTP - и PHP - без сохранения состояния. Вам необходимо использовать переменные сеанса для отслеживания данных между сеансами

http://www.php.net/manual/en/book.session.php

1 голос
/ 28 июля 2011

HTTP по своей природе не имеет общего доступа, поэтому все, что вы делаете в одном запросе, недоступно для любого другого запроса.Вам нужно будет использовать общее хранилище данных для сохранения этих сообщений.

База данных, memcache, даже текстовый файл на сервере (при условии, что вы работаете на одном сервере и не балансируете нагрузку несколько раз) - все это варианты.

Вы можете использовать куки нана стороне клиента, чтобы сохранить небольшой объем данных.Но имейте в виду, что это небезопасное решение (без использования шифрования), и вы ограничены в объеме данных, которые вы можете хранить в файлах cookie.

...