2012-08-16 40 views
7

tôi muốn chuyển hướng đến một trang và sau đó hiển thị một thông điệp:php chuyển hướng đến trang với thông điệp

những gì tôi có là:

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

trên trang chỉ số i có:

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

Chức năng chuyển hướng đang hoạt động tốt:

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

Nhưng nó sẽ không hiển thị thông báo của tôi. Nó trống rỗng.

Trả lời

16

Vào thời điểm chuyển hướng xảy ra và tập lệnh php được mô tả bởi $location được thực thi, $message biến sẽ mất nhiều thời gian.

Để giải quyết vấn đề này, bạn cần phải vượt qua thông điệp của bạn trong tiêu đề vị trí của bạn, sử dụng GET biến:

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

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

Bạn cũng có thể có một cái nhìn vào sessions

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

sau đó trong kịch bản đến: phiên

session_start(); 
if(!empty($_SESSION['messsage'])) { 
    $message = $_SESSION['message']; 
    // rest of your code 
+0

Tôi hiểu ngay bây giờ. cảm ơn sự giúp đỡ của bạn. – user1386906

+0

nếu bạn không muốn thư hiển thị trên thanh địa chỉ, việc sử dụng phiên sẽ là giải pháp thay thế tốt, bạn viết thư của mình cho phiên, ví dụ $ _SESSION ['message'] = "some message" sau khi hiển thị nó chưa được đặt $ _SESSION ['message']); – alpera

3

Biến không còn tồn tại sau khi tập lệnh kết thúc. Mỗi yêu cầu riêng biệt, mỗi lệnh gọi PHP riêng biệt là một ngữ cảnh hoàn toàn mới không có dữ liệu từ bất kỳ lời gọi nào khác.

Sử dụng sessions để lưu dữ liệu.

3

bạn có thể sử dụng

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

và trên index

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

Vì bạn đang chạy header("Location: {$location}"); giá trị của $location (thiết lập trong file đầu tiên) bị mất khi index.php được tải.

1

sử dụng đoạn mã sau ....

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

trong index.php

$msg=$_GET['message']; 
echo $msg; 
0

bạn có thể tránh chức năng chuyển hướng và sử dụng mã này trong trang

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

index .php

if(!empty($_GET['message'])) { 
$message = $_GET['message']; 
echo '<p class="message"> '.$message.'</p>'; 
} 
Các vấn đề liên quan