web-dev-qa-db-ja.com

自分に送信するPHPフォームを作成するにはどうすればよいですか?

自己投稿/自己送信フォーム、つまり、別のフォームに送信するのではなく、結果を自分自身に送信するフォームを作成するにはどうすればよいですか?

46
user544079

適切な方法は、$_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; ?>
76
Phphelp

、あなたは$_SERVER['PHP_SELF']を意味すると思います。もしそうなら、あなたは本当にそれを最初に消毒することなく使用すべきではありません。これにより、XSS攻撃にさらされやすくなります。

if(isset($_POST['submit']))条件は、すべてのHTML出力の上にある必要があり、現在のページに再度リダイレクトするheader()関数を含む必要があります(「メールが送信されました」という素敵な通知があります。何か )。そのためには、$_SESSIONまたは$_COOKIEを使用する必要があります。

そしてお願いします。 $_REQUESTの使用を停止します。これもセキュリティ上の脅威となります。

11
tereško

これはregister_globalsがオンの場合にのみ機能し、オンになることはありません(もちろん、その変数をどこか他の場所で定義していない限り)。

formaction属性を?...に設定してみてください.

<form method="post" action="?">
   ...
</form>

空白("")に設定することもできますが、古いWebKitバージョンには bug がありました。

5
alex

これを試して

<form method="post" id="reg" name="reg" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"

うまくいく:)

4
Robot Boy

送信ボタンには名前がありません。送信ボタンにname = "submit"を追加します。

ブラウザでフォームのソースを表示すると、フォームがselfに送信される方法がわかります。フォームのaction属性には現在のスクリプトの名前が含まれます。したがって、フォームが送信されると、フォーム自体に送信されます。虚栄のために編集してください!

3
David Fells
  1. 変化する
    <input type="submit" value="Submit" />

    <input type="submit" value="Submit" name='submit'/>

  2. 変化する
    <form method="post" action="<?php echo $PHP_SELF;?>">

    <form method="post" action="">

  3. ifのコードは、送信時にのみ実行されます。
  4. 常にフォーム(htmlコード)が表示されます。
  5. あなたの質問は何ですか?