1 minute read

学んだこと

フォームのメソッド

  • form 内の method に設定するメソッド名について
    • GET
      • 送信したデータが URL に記述される。
      • 個人情報など知られたくないデータの場合は POST を使用する。
    • POST
      • URL に送信したデータが記述されない
      • 知られたくないデータを扱うのに適切なメソッド

PHP 側の受け取り方

  • form のメソッドが GET の場合、_REQUESTで受け取っても問題ない。
  • form のメソッドが POST の場合、_REQUESTで受け取ると問題がある。
    • 例えば、http://localhost:8888/lesson01/sample20/submit.php?my_name=いたずらのように、URL にクエリデータを入れた状態で実行された場合、送信されたデータの改ざんすることができる。
    • そのため、POST の場合は、_POSTで受け取るようにすることで送信データの安全性を高めることができる。
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>sample20</title>
</head>
<body>
    <?php if(!empty($_REQUEST['my_name'])):?>
        <p>お名前: <?php echo htmlspecialchars($_REQUEST['my_name']);?></p>
    <?php endif; ?>
</body>
</html>

チェックボックスの値を受け取る

index.html

  • <input type="checkbox" name="reserve[]" value="1/2" />の name は同じチェックボックスであればすべて同じ名前に統一する。
    • 理由としては、PHP 側はリクエストで指定した name のチェックボックスのみ取得することができるから。
    • そのため、同じチェックボックスは同じ name に設定する必要がある。
  • チェックボックスの場合、name 名の後ろに[]を記述するのを忘れない
  • チェックボックスの value は、PHP 側でリクエストを取得する際に受け取る値を指す。
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <form action="submit.php" method="post">
      <h2>ご予約希望日</h2>
      <ul>
        <li>
          <label>
            <input type="checkbox" name="reserve[]" value="1/1" />1月1日
          </label>
        </li>
        <li>
          <label>
            <input type="checkbox" name="reserve[]" value="1/2" />1月2日
          </label>
        </li>
        <li>
          <label>
            <input type="checkbox" name="reserve[]" value="1/3" />1月3日
          </label>
        </li>
      </ul>
      <input type="submit" value="送信する" />
    </form>
  </body>
</html>

submit.php

  • リクエストされたデータを確認し、処理を分岐するようにする。
  • リクエストされたデータを扱う場合は、htmlspecialchars を呼び出してデータを扱う。(XSS 対策)
  • チェックボックスのデータは配列になっていることを忘れない。
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>ご予約日</h2>
    <?php if (!empty($_REQUEST['reserve'])):?>
    <?php $reserves = $_REQUEST['reserve']; ?>
    <ul>
        <?php foreach($reserves as $reserve): ?>
            <li><?php echo htmlspecialchars($reserve, ENT_QUOTES) ?>
        <?php endforeach; ?>
    </ul>
    <?php endif; ?>
</body>
</html>

全角英数字を半角に変換

  • mb_convert_kanaを使うことで全角英数字を半角に変換することができる。
    • 元々は全角かなを半角かなに変換するマルチバイトの関数。
    • 第二引数に'n'を設定することで、全角数字を半角数字に変換してくれる。
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
    $age = '12';

    $age = mb_convert_kana($age, 'n', 'UTF-8');
    if(is_numeric($age)){
        echo $age . '歳です。';
    }else{
        echo '※数字で入力してください';
    }
    ?>
</body>
</html>

Tags:

Updated: