首頁  >  問答  >  主體

問題出在哪裡?這個簡單的html/PHP表單在本地測試時正常運行,但在實際伺服器上卻失敗了

<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>
P粉060528326P粉060528326410 天前487

全部回覆(1)我來回復

  • P粉055726146

    P粉0557261462023-09-06 13:54:44

    header()session_start()呼叫移到HTML輸出之前。

    <?php session_start();
    ...
    ?>
    <!doctype html>
    ...

    參考:https://www.php.net/manual/en/function.header.php

    參考:https://www.php.net/manual/en/function.session-start.php

    回覆
    0
  • 取消回覆