重定向到另一个页面并在php中显示消息

时间:2018-02-17 07:24:37

标签: php

我在提交表单后尝试,从registration.php重定向到index.php并在那里显示消息。结构是这样的:

和registration.php

class Registration 
{ 

...

public $messages = array();

...

if ($stmt->execute([$uid_new, $email_new, $pwd_1_hash])) {  
    $this->messages[] = 'success';
    header('Location index.php');
}

messages.php

if ($registration->messages) {
    foreach($registration->messages as $message) {
        echo "$message <br>";
    }

的index.php

<?php include 'messages.php'; ?>

但重定向后,消息未显示。哪里可以成为问题?感谢。

2 个答案:

答案 0 :(得分:0)

您正在使用可以在index.php页面上重定向的标头,因此如果要使用相同的消息,则必须完成类对象范围,您必须将消息存储在会话中并在打印后销毁会话。

if ($stmt->execute([$uid_new, $email_new, $pwd_1_hash])) {  
    $this->messages[] = 'success';
     session_start();
     $_SESSION['errors'] = $this->messages;
    header('Location: index.php');
}

And on index page use 
$registration = $_SESSION['errors'];
if ($registration->messages) {
    foreach($registration->messages as $message) {
        echo "$message <br>";
    }

未设置($ _ SESSION [&#39;错误&#39;])

答案 1 :(得分:0)

由于您在注册类中重定向,因此会丢失未保存在持久存储(例如会话)中的所有数据,包括$ messages数组。我不认为您的代码结构正确,无法处理您想要的重定向。我建议在重定向之前设置一个会话变量来保存你的消息。另外,我不知道你的errors.php文件里面有什么,但是不应该是messages.php吗?

<?php

// Registration.php
class Registration
{
    public function save()
    {
        if ($stmt->execute()) {
            $_SESSION['messages'][] = 'success';
        }
    }
}

// messages.php
if (!empty($_SESSION['messages'])) {
    foreach($_SESSION['messages'] as $message) {
        echo "$message <br>";
    }
}

// index.php
include 'messages.php';

另外,我并不认可这种代码风格,它在今天的PHP生态系统中有点笨拙。如果我是你,我会看看使用框架。