問題出在哪裡?這個簡單的html/PHP表單在本地測試時正常運行,但在實際伺服器上卻失敗了
P粉060528326
2023-09-05 17:03:39
<p>我想在現有的網站上新增一個「傳送訊息」表單。我找到了這個教學:</p>
<p>PHP聯絡表單</p>
<p>我審查了教程中的程式碼,學習了它的工作原理,然後進行了程式設計。我將其運行起來,並在我的個人電腦上進行了所有測試,它完美地工作。 </p>
<p>然後,我將其作為現有網站的一部分放到了伺服器上。但是失敗了。點擊提交按鈕會清空螢幕,表單消失不見。沒有錯誤訊息。什麼都沒有。 </p>
<p>XAMPP和實際伺服器都運行PHP版本8.1.12。 </p>
<p>它在這行PHP程式碼上失敗了:header('Location: contact.php', true, 303);</p>
<p>我花了很多時間來調試這個問題,學習了更多關於PHP的知識,按照在Stack Overflow上找到的建議進行操作,並閱讀了關於函數header()的PHP文件。我還參加了兩個LinkedIn Learning的PHP課程。但我無法弄清楚問題出在哪裡。 </p>
<p>然後,我將問題簡化為這段簡單的程式碼,使其盡可能簡單,只有一個包含提交按鈕的表單。它和完整的表單有同樣的問題。 </p>
<p>這是我的測試程式碼:</p>
<pre class="brush:php;toolbar:false;"><!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Contact</title>
</head>
<?php
session_start();
$request_method = strtoupper($_SERVER['REQUEST_METHOD']);
if ($request_method === 'GET'){
?><form action="for_stack_overflow.php" method="post">
<button type="submit">Send Message</button>
</form>
<?php
}
elseif ($request_method === 'POST'){
header('Location: for_stack_overflow.php', true, 303);
exit;
}
?></html></pre>
<p>這段簡單的html/php程式碼和我的完整表單有相同的問題:點擊提交按鈕後,螢幕被清空,只剩下一個表單按鈕。表單不起作用。 </p>
<p>我故意去除了所有縮進,因為我了解到一個常見問題是看不見的空白字元會導致PHP函數header()失敗。 </p>
<p>這個程式(以及我的完整表單)每個都:</p>
<ol>
<li>在我的個人電腦上進行本地測試時完美運行;</li>
<li>在真實伺服器上,我的網站託管帳戶上運行時失敗。 </li>
</ol>
<p>我已經盡力解決這個問題了。 </p>
<p>是什麼出了問題?可能出了什麼問題?有什麼我不理解的地方嗎? </p>
將
header()
和session_start()
呼叫移到HTML輸出之前。參考:https://www.php.net/manual/en/function.header.php
參考:https://www.php.net/manual/en/function.session-start.php