在前端開發(fā)和后端開發(fā)中,我們常常需要使用到HTTP的post方法來(lái)提交表單數(shù)據(jù)。而在PHP中,我們可以通過(guò)header()函數(shù)來(lái)實(shí)現(xiàn)跳轉(zhuǎn)。在這篇文章中,我們將詳細(xì)介紹如何使用header()函數(shù)來(lái)實(shí)現(xiàn)post跳轉(zhuǎn),并且會(huì)配合實(shí)際案例來(lái)進(jìn)行講解。
首先,我們需要明確一點(diǎn),post跳轉(zhuǎn)并不是HTTP中自帶的跳轉(zhuǎn)方式,而是通過(guò)在HTTP報(bào)文中設(shè)置Location字段來(lái)實(shí)現(xiàn)的。使用header()函數(shù)來(lái)實(shí)現(xiàn)跳轉(zhuǎn)有兩個(gè)參數(shù),第一個(gè)參數(shù)是要跳轉(zhuǎn)的URL,第二個(gè)參數(shù)是是否立即跳轉(zhuǎn)。如果設(shè)置為true,則會(huì)立即跳轉(zhuǎn),否則會(huì)在當(dāng)前腳本執(zhí)行完畢后跳轉(zhuǎn)。下面是具體示例:
上面這段代碼表示跳轉(zhuǎn)到http://example.com/post.php這個(gè)頁(yè)面。同時(shí),為了確保跳轉(zhuǎn)成功,我們需要在調(diào)用header()函數(shù)之后加上exit語(yǔ)句,以阻止當(dāng)前腳本的繼續(xù)執(zhí)行。
接下來(lái)我們來(lái)看一個(gè)實(shí)際應(yīng)用場(chǎng)景。假設(shè)我們有一個(gè)登錄頁(yè)面,用戶輸入賬號(hào)和密碼之后我們需要將這些數(shù)據(jù)提交到一個(gè)叫做login.php的后臺(tái)處理腳本上。如果登錄成功,我們需要跳轉(zhuǎn)到用戶個(gè)人信息頁(yè)面,否則需要返回登錄頁(yè)面并提示錯(cuò)誤信息。下面就是一段示例代碼,其中加粗部分即為本文重點(diǎn):
上面這段代碼中,我們首先判斷用戶是否提交了表單(判斷$_POST['submit']是否存在),然后根據(jù)用戶輸入的賬號(hào)和密碼進(jìn)行驗(yàn)證。如果驗(yàn)證通過(guò),我們就將用戶信息寫入session,并且跳轉(zhuǎn)到http://example.com/profile.php這個(gè)頁(yè)面;如果驗(yàn)證不通過(guò),則會(huì)返回http://example.com/login.php并且在URL的后面加上message=error這個(gè)參數(shù),用來(lái)提示用戶登錄失敗。
最后,我們需要注意的是,如果我們?cè)趆eader()函數(shù)之前已經(jīng)輸出了一些HTML或者文本,那么跳轉(zhuǎn)就會(huì)失敗,因此在使用header()函數(shù)之前一定要確保沒有輸出任何內(nèi)容。如果確實(shí)需要在header()函數(shù)之前輸出一些內(nèi)容,那么可以使用ob_start()函數(shù)來(lái)開啟輸出緩存,待跳轉(zhuǎn)完成之后再使用ob_flush()函數(shù)來(lái)輸出。
首先,我們需要明確一點(diǎn),post跳轉(zhuǎn)并不是HTTP中自帶的跳轉(zhuǎn)方式,而是通過(guò)在HTTP報(bào)文中設(shè)置Location字段來(lái)實(shí)現(xiàn)的。使用header()函數(shù)來(lái)實(shí)現(xiàn)跳轉(zhuǎn)有兩個(gè)參數(shù),第一個(gè)參數(shù)是要跳轉(zhuǎn)的URL,第二個(gè)參數(shù)是是否立即跳轉(zhuǎn)。如果設(shè)置為true,則會(huì)立即跳轉(zhuǎn),否則會(huì)在當(dāng)前腳本執(zhí)行完畢后跳轉(zhuǎn)。下面是具體示例:
header("Location:http://example.com/post.php");
exit;
上面這段代碼表示跳轉(zhuǎn)到http://example.com/post.php這個(gè)頁(yè)面。同時(shí),為了確保跳轉(zhuǎn)成功,我們需要在調(diào)用header()函數(shù)之后加上exit語(yǔ)句,以阻止當(dāng)前腳本的繼續(xù)執(zhí)行。
接下來(lái)我們來(lái)看一個(gè)實(shí)際應(yīng)用場(chǎng)景。假設(shè)我們有一個(gè)登錄頁(yè)面,用戶輸入賬號(hào)和密碼之后我們需要將這些數(shù)據(jù)提交到一個(gè)叫做login.php的后臺(tái)處理腳本上。如果登錄成功,我們需要跳轉(zhuǎn)到用戶個(gè)人信息頁(yè)面,否則需要返回登錄頁(yè)面并提示錯(cuò)誤信息。下面就是一段示例代碼,其中加粗部分即為本文重點(diǎn):
if($_POST['submit']){
$user = $_POST['user'];
$password = $_POST['password'];
<br>
if(/*用戶驗(yàn)證通過(guò)*/){
//將用戶信息寫入session,并且跳轉(zhuǎn)到用戶個(gè)人信息頁(yè)面
session_start();
$_SESSION['user'] = $user;
header("Location:http://example.com/profile.php");
exit;
}else{
//返回登錄頁(yè)面并提示錯(cuò)誤信息
header("Location:http://example.com/login.php?message=error");
exit;
}
}
上面這段代碼中,我們首先判斷用戶是否提交了表單(判斷$_POST['submit']是否存在),然后根據(jù)用戶輸入的賬號(hào)和密碼進(jìn)行驗(yàn)證。如果驗(yàn)證通過(guò),我們就將用戶信息寫入session,并且跳轉(zhuǎn)到http://example.com/profile.php這個(gè)頁(yè)面;如果驗(yàn)證不通過(guò),則會(huì)返回http://example.com/login.php并且在URL的后面加上message=error這個(gè)參數(shù),用來(lái)提示用戶登錄失敗。
最后,我們需要注意的是,如果我們?cè)趆eader()函數(shù)之前已經(jīng)輸出了一些HTML或者文本,那么跳轉(zhuǎn)就會(huì)失敗,因此在使用header()函數(shù)之前一定要確保沒有輸出任何內(nèi)容。如果確實(shí)需要在header()函數(shù)之前輸出一些內(nèi)容,那么可以使用ob_start()函數(shù)來(lái)開啟輸出緩存,待跳轉(zhuǎn)完成之后再使用ob_flush()函數(shù)來(lái)輸出。