我在提交表单后尝试,从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'; ?>
但重定向后,消息未显示。哪里可以成为问题?感谢。
答案 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生态系统中有点笨拙。如果我是你,我会看看使用框架。