🤖

[php] フォームについて

2024/03/24に公開

フォーム入力

htmlでフォームを作成後phpでプログラムを記述

<!doctype html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>sample20</title>
</head>
<body>
    <form action="submit.php" method="get">
        <label for="my_name">お名前:</label>
        <input type="text" id="my_name" name="my_name">
<!-- labelのmy_nameとinput typeの名前は一致させるようにする -->
        <input type="submit" value="送信する">
    </form>
</body>
</html>
<?php if (!empty($_REQUEST['my_name'])): ?>
<!-- ここのmy_nameはhtmlファイルに記述したtextフィールドのnmaeと一致させるようにする -->
    <p>お名前: <?php echo htmlspecialchars($_REQUEST['my_name'], ENT_QUOTES); ?></p>
<?php endif; ?>

$_REQUEST[]

phpはフォームから送信されてきた内容をこの$_REQUEST[]で受け取るという決まりになっている。なのでフォームから送られてきた内容を受け取りたいという場合は決まり文句としてこれ!!
そして[]のなかに今回はmy_nameと入れてあげることでこの内容を受け取ることができる。

安全性を考える/htmlspecialchars

投稿フォームのところで何かいたずらをされた時に情報を盗まれたりすることがある。そのため、htmlspecialchars($_REQUEST['my_name'], ENT_QUOTES)このように記述する。
htmlspecialcharsというファンクションでさっきの$_REQUEST[]を包んであげて二つ目のパラメータのENT_QUOTESも記述してあげる。そうすることで、危険性のある文字列が動作せずに画面に表示されるだけになる。

空白で送信するときのエラーをなくす/if構文をいれる

何も入力しない状態で送信すると環境によってはエラー文が表示されることがある。(エラーは実際に起きているが小さいエラーなので表示されない時もある)エラー表示が表に出てこないようにするための処理。

<?php if (!empty($_REQUEST['my_name'])): ?>
//!empty→空ではない時に下の処理が実行される。

<?php endif; ?>

getとpostのちがい

get

  • URLに表示される
  • URLに表示されるのでその画面をシェアしたときなどに使うとOK
  • URLに表示されるので入力した名前とかは見られる(passwardとかの場合は使ったらだめ)

post

  • 裏側で処理されるためURLに表示されない

$_REQUESTとの関係

$_REQUESTはpostとget両方を受け取ることができる。
また、フォームのメソッドにあわせて$_REQUESTでなくても$_GET/$_POSTに変更することはできる。
けれどgetにはデメリットがあるのメソッドに合わせて使った方がいい。

じゃあ$_REQUESTを使う時はいつなん?

$_REQUESTを使う時はget/postどっちを使うかわからない時とか変更される可能性があるときとかに使うのが無難みたい。

Discussion