PHP

【PHP】フォームの作り方

こんにちは!ともです(@_tomo_engineer)!

この記事では、PHPを利用しフォームの作成方法についてまとめたいと思います。

参考にしたものは「パーフェクトPHP」です。

フォームの作成

フォームとはユーザにデータを送信させるための仕組みであり、HTMLのformタグで作成します。次の様にform.phpを作成しました。

<?php if(isset($_GET['age'])): ?>
<p>
    <?php echo htmlspecialchars($_GET['age']); ?>
</p>
<form action="form.php" method="get">
    <p>年齢を入力して下さい:
        <input type="text" name="age">
        <button type="submit">送信</button>
    </p>
</form>
action属性 フォームで送信されるデータの送信先URL
method属性 HTTPメソッドの指定(GETまたはPOST)

inputのname属性に送信するデータのキーを指定しています。

今回の場合、『age』というキーに送信したいデータを格納し、GETリクエストでデータを送信しているため、『$_GET[‘age’]』には入力した年齢が格納されています。

それをhtmlspecialchars()関数で表示させていますが、これはセキュリティのために行っています。HTMLではタグに『<』や『>』といった特殊な意味があり、出力の際にこの関数で変換処理(エスケープ)する必要があります。

<?php if(isset($_GET['age'])): ?>
<p>
    <?php echo htmlspecialchars($_GET['age']); ?>//エスケープ有り
    <?php echo $_GET['age']; ?>//エスケープ無し
</p>
<form action="form.php" method="get">
    <p>年齢を入力して下さい:
        <input type="text" name="age">
        <button type="submit">送信</button>
    </p>
</form>

こちらの様にエスケープ処理なしで描画したものとしないもの用意し、年齢の入力フォームに『<button>ボタン</button>』と入力してみます。

エスケープ処理をした場合は文字列として描画されましたが、エスケープ処理無しの場合はボタンタグとして表示されてしまいました。描画する際はエスケープ処理をする重要性が分かると思います。

HTTPメソッド

HTTP(Hyper Text Transfer Protocol)とはクライアントとサーバ間のリクエストとレスポンスのお約束です。お約束に従いクライアントはサーバにデータを要求(リクエスト)し、サーバはクライアントの要求に対してお約束に従い要求されたデータを返し(レスポンス)ます。

大きくリクエストの種類は『GET(取得)』と『POST(投稿)』の2種類あります。これはHTMLファイルや画像などをサーバに要求する場合は『GET』を利用し、サーバにデータを送信する場合は『POST』でリクエストを出します。英語の意味を考えれば納得できます。

GETメソッド

『GET』でのリクエストの場合、パラメータはURLに含まれた状態となり、これをGETパラメータと呼びます。GETパラメータの形式は次の様になっています。

『?』から始まり、『key=>value』の関係になっています。『&』で接続することにより複数の『GETパラメータ』を送信することができます。サーバサイドでGETパラメータで送られた値を確認する場合は後述するスーパーグローバル変数$_GET[“key”]で値を取得します。

POSTメソッド

『POST』メソッドの場合、『GETパラメータ』と異なりURLにパラメータが付与されません。代わりにリクエストの本文にあたる箇所に格納されます。

<?php echo $_POST['age']; ?>
<form action="form.php" method="post">
      <p>年齢を入力して下さい:
            <input type="text" name="age">
            <button type="submit">送信</button>
      </p>
</form>

この様なフォームを作成し、スーパグローバル変数の$_POSTで、『POST』で送信されたデータを表示させました。フォームからデータを送信した所、URLにパラメータは付与されていませんが、年齢を表示させることができました。

POSTメソッドの場合でも『GETパラメータ』を与える事は可能であり、action属性に『GETパラメータ』の形式で遷移先のURLを記述します。

<?php echo htmlspecialchars($_POST['age']."歳"); ?><br>
<?php echo htmlspecialchars("id:".$_GET['id']); ?><br>
<form action="form.php?id=1" method="post">
    <p>年齢を入力して下さい:
          <input type="text" name="age">
          <button type="submit">送信</button>
     </p>
</form>n

次の様にして、『POSTメソッド』でデータを送信し、『GETパラメータ』でもデータを送信し、その結果を描画しました。どちらも描画できていることが分かります。

まとめ

PHPでフォームからHTTPリクエストを送信する方法を確認しました。

  • HTMLのformからデータを送信する
  • HTTPの『GET』と『POST』をmethodで指定する
  • 画面の遷移先をactionで指定する
  • データの取得の場合は『GET』、投稿する場合は『POST』を利用する
  • htsmspecialcharsでエスケープ処理をしてから表示する

Webの基本的な部分について確認しました。次回は掲示板の作成を行ってみたいと思います。