12

我想重定向到一个页面,然后显示一条消息:

我所拥有的是:

if (mysqli_affected_rows($link) == 1) 
{
   //succes         
    $message = 'succes';
    redirect_to('index.php');
}

在索引页面上我有:

if (!empty($message)) {
    echo '<p class="message"> '.$message.'</p>';
}

重定向功能工作正常:

function redirect_to( $location = NULL ) {
        if ($location != NULL) {
            header("Location: {$location}");
            exit;
        }
    }

但它不会显示我的消息。它是空的。

4

6 回答 6

27

当重定向发生并$location执行描述的 PHP 脚本时,$message变量早就不存在了。

为了解决这个问题,您需要使用GET变量在您的位置标头中传递您的消息:

header("Location: $location?message=success");

if(!empty($_GET['message'])) {
    $message = $_GET['message'];
// rest of your code

您还可以查看会话

session_start();
$_SESSION['message'] = 'success';
header("Location: $location");

然后在目标脚本中:

session_start();
if(!empty($_SESSION['message'])) {
   $message = $_SESSION['message'];
   // rest of your code
于 2012-08-16T13:22:04.863 回答
4

脚本结束后变量不再存在。每个单独的请求,每个单独的 PHP 脚本调用都是一个全新的上下文,没有来自任何其他调用的数据。

使用会话来持久化数据。

于 2012-08-16T13:21:57.377 回答
3

你可以使用会话

if (mysqli_affected_rows($link) == 1) 
{
   //succes         
    $_SESSION['message'] = 'succes';
    redirect_to('index.php');
}

并在索引上

if (!empty($_SESSION['message'])) {
    echo '<p class="message"> '.$_SESSION['message'].'</p>';
    unset($_SESSION['message']);
}
于 2012-08-16T13:22:10.070 回答
2

由于您正在运行(在第一个文件中设置)header("Location: {$location}");的值,因此在加载 index.php 时会丢失。$location

于 2012-08-16T13:22:24.920 回答
2

您可以避免重定向功能并在页面中使用此代码

header("Location: $locationpage?message=success")

索引.php

if(!empty($_GET['message'])) {
$message = $_GET['message'];
 echo '<p class="message"> '.$message.'</p>';
}
于 2018-02-21T16:15:33.093 回答
1

使用以下代码....

header("Location: index.php?message=success");

在 index.php 中

$msg=$_GET['message'];
echo $msg;
于 2012-08-16T13:24:33.670 回答