簡體   English   中英

表單完成后如何在php中重定向到另一個頁面?

[英]How to redirect to another page in php after form is complete?

我在我正在建設的網站上有一份注冊表。 如果填寫正確,我希望用戶返回主頁面。

我試圖使用header但我得到“無法修改標題信息......”我想這是因為我發布到$_SERVER['PHP_SELF'] ;

如果表單沒問題,如何重定向用戶的任何建議? (除了帶按鈕的成功頁面)

如果Web服務器未向用戶瀏覽器輸出其他文本/字符串數據,則只能使用header()函數。

您需要先將重定向的邏輯放在腳本的頂部,然后再做其他事情:

<?php

// Process form

// If processing was successful, redirect
if($success) 
{
    header("Location: http://www.main-page-url.com/");
}

?>

這樣做的原因是,當瀏覽器從Web服務器接收信息時,它接收HTTP標頭( header()函數將重定向輸出到),然后在HTTP標頭之后輸出HTTP響應的主體。 如果您的腳本在header命令之前echo任何內容,您將繼續收到該錯誤。

您無法修改標頭信息消息,因為您嘗試在將內容呈現到頁面后將新標頭發送到瀏覽器。 如果在任何echo / print調用之前執行header()調用,它將重定向。 否則,您需要元重定向。 你發布表格的地方是無關緊要的。

這不起作用的原因是標頭位於HTTP請求中的內容之前。 當您輸出內容時,PHP會先發送所有標題及其處理過的所有內容,從而領先於游戲。 發送HTTP請求沒有CTRL + Z,因此header()函數在發送后不能添加標頭。

但是,如果使用ob緩沖函數系列,則可以在回顯內容后調用header() 調用ob_start()來緩沖頁面輸出,進行任何必要的標題調用或內容輸出,最后使用ob_end_flush()發送輸出。 防爆。

<?php
ob_start(); //Start buffering
?>
<p>This is output!!!</p>
<?php
header('403 Moved Permanently'); //Fancy redirect is fancy
ob_end_flush(); //Send page content with redirect header
?>

使用緩沖的唯一可能的缺點是,在調用ob_end_flush()命令之前,用戶將在接收內容時遇到輕微的掛起。 但是,這很可能不會引人注意,所以你不必擔心它!

在完成所有這些操作之前,您可以考慮在代碼中輸出內容之前將所有標題調用移動到某個位置。 還要檢查前面空格的開始PHP標記,因為它們會強制發送標題和內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM