問題はどこだ?この単純な html/PHP フォームはローカルでテストすると正常に動作しますが、ライブ サーバーでは失敗します。
P粉060528326
2023-09-05 17:03:39
<p>既存の Web サイトに「メッセージ送信」フォームを追加したいと考えています。このチュートリアルを見つけました: </p>
<p>PHP 問い合わせフォーム</p>
<p>チュートリアルのコードを確認し、それがどのように機能するかを学び、それからプログラミングしました。 PC 上ですべて実行してテストしましたが、完璧に動作しました。 </p>
<p>次に、それを既存の Web サイトの一部としてサーバーに置きます。しかし失敗した。送信ボタンをクリックすると画面がクリアされ、フォームが消えます。エラーメッセージはありません。何もありません。 </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 コースを 2 つ受講しました。しかし、どこに問題があるのかわかりません。 </p>
<p>次に、問題をこの単純なコードにまとめ、送信ボタンを含むフォームだけでできるだけ単純にしました。フルフォームと同じ問題があります。 </p>
<p>これは私のテストコードです:</p>
<pre class="brush:php;toolbar:false;"><!doctype html>
<html lang="ja">
<頭>
<!-- 必須のメタタグ -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width、initial-scale=1、shrink-to-fit=no">
<title>連絡先</title>
</head>
<?php
セッション開始();
$request_method = strtoupper($_SERVER['REQUEST_METHOD']);
if ($request_method === 'GET'){
?><フォームアクション="for_stack_overflow.php"メソッド="post">
<button type="submit">メッセージを送信</button>
</フォーム>
<?php
}
elseif ($request_method === 'POST'){
header('場所: for_stack_overflow.php', true, 303);
出口;
}
?></html></pre>
<p>この単純な html/php コードには、私の完全なフォームと同じ問題があります。送信ボタンをクリックすると画面がクリアされ、フォーム ボタンだけが残ります。フォームが機能しません。 </p>
<p>一般的な問題として、目に見えない空白文字によって PHP 関数 header() が失敗することがわかったため、意図的にすべてのインデントを削除しました。 </p>
<p>このプログラム (および私の完全なフォーム) はそれぞれ: </p>
<ol>
<li>PC 上でローカルにテストしたところ、完璧に動作しました;</li>
<li>実サーバー上のウェブサイトホスティングアカウントで実行すると失敗します。 </li>
</ol>
<p>この問題を解決するために最善を尽くしました。 </p>
<p>何が問題だったのでしょうか?何が問題になる可能性がありますか?何か理解できないことがありますか? </p>
HTML 出力の前に
リーリーheader()
およびsession_start()
呼び出しを移動します。参考:https://www.php.net/manual/en/function.header.php
参考:https://www.php.net/manual/en/function.session-start.php