自己投稿/自己送信フォーム、つまり、別のフォームに送信するのではなく、結果を自分自身に送信するフォームを作成するにはどうすればよいですか?
適切な方法は、$_SERVER["PHP_SELF"]
を使用することです(htmlspecialchars
と組み合わせて、悪用の可能性を回避します)。また、空のaction=
部分をスキップすることもできます。これはW3Cでは有効ではありませんが、現在ほとんどの(すべての?)ブラウザーで動作します-デフォルトでは、空の場合はselfに送信します。
以下は、名前と電子メールを受け取り、送信時に入力した値を表示するフォームの例です。
<?php if (!empty($_POST)): ?>
Welcome, <?php echo htmlspecialchars($_POST["name"]); ?>!<br>
Your email is <?php echo htmlspecialchars($_POST["email"]); ?>.<br>
<?php else: ?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
Name: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
<input type="submit">
</form>
<?php endif; ?>
、あなたは$_SERVER['PHP_SELF']
を意味すると思います。もしそうなら、あなたは本当にそれを最初に消毒することなく使用すべきではありません。これにより、XSS攻撃にさらされやすくなります。
if(isset($_POST['submit']))
条件は、すべてのHTML出力の上にある必要があり、現在のページに再度リダイレクトするheader()
関数を含む必要があります(「メールが送信されました」という素敵な通知があります。何か )。そのためには、$_SESSION
または$_COOKIE
を使用する必要があります。
そしてお願いします。 $_REQUEST
の使用を停止します。これもセキュリティ上の脅威となります。
これはregister_globals
がオンの場合にのみ機能し、オンになることはありません(もちろん、その変数をどこか他の場所で定義していない限り)。
form
のaction
属性を?
...に設定してみてください.
<form method="post" action="?">
...
</form>
空白(""
)に設定することもできますが、古いWebKitバージョンには bug がありました。
これを試して
<form method="post" id="reg" name="reg" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"
うまくいく:)
送信ボタンには名前がありません。送信ボタンにname = "submit"を追加します。
ブラウザでフォームのソースを表示すると、フォームがselfに送信される方法がわかります。フォームのaction属性には現在のスクリプトの名前が含まれます。したがって、フォームが送信されると、フォーム自体に送信されます。虚栄のために編集してください!
変化する<input type="submit" value="Submit" />
に<input type="submit" value="Submit" name='submit'/>
変化する<form method="post" action="<?php echo $PHP_SELF;?>">
に<form method="post" action="">
if
のコードは、送信時にのみ実行されます。