【超初学者向け】PHPで入力フォームにバリデーションをかける

今日はPHPでフォームにバリデーションをかけていきます。

webアプリケーションを作るにあたって、バリデーションは非常に重要です。

  • 悪意のあるユーザーからの入力を制御する
  • ユーザーに入力必須を促す
  • データを管理しやすくするために、ユーザーに入力形式を指定する

バリデーションには、様々な役割があります。

今回の記事は、超初学者向けということで、フォームに入力制限をかける簡単な方法をみていきましょう。

今日の記事は、

  • フォームにバリデーションをかけたい
  • 入力必須にしたい
  • エラーメッセージを表示したい

こんな方におすすめです。

それではやっていきましょう。

フォームにバリデーションをかける

PHPの基礎ができていれば、フォームに簡単なバリデーションをかけることは容易です。

ただし、バリデーションは本来、奥の深い実装です。

あくまでも、今日は超初心者向けだということをお忘れなく。

それでは、コードをみていきましょう。

<?php
error_reporting(0);
include "Warning.php";

    if ($_POST['name'] === '') {
        $errors['name'] = 'blank';
    }
    if (strlen($_POST['name']) < 1) {
        $errors['name'] = 'length';
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="" method="POST">
        <label for="name">名前を入力してください</label>
        <input type="text" id="name" name="name" value="<?php print(htmlspecialchars($_POST['name'], ENT_QUOTES)); ?>">
        <?php if ($errors['name'] === 'blank'): ?>
            <p style="color: red;">Name can't be blank</p>
        <?php endif; ?>
        <?php if ($errors['name'] === 'length'): ?>
            <p style="color: red;">1文字以上の入力です</p>
        <?php endif; ?>
        <button type="submit">登録する</button>
    </form>
</body>
</html>

配列であったり、if文であったり、PHPの基礎学習がとても活きてくる実装ですね。

以下で詳しくみていきましょう。

バリデーションをかけるのに必要なこと

ここからは、3つのステップに分けて解説していきます。

1. name属性が空の時にエラーを表示する

if (!empty($_POST)) {
    if ($_POST['name'] === '') {
        $errors['name'] = 'blank';
    }
    if (strlen($_POST['name']) < 1) {
        $errors['name'] = 'length';
    }
}
  1. POSTパラメータ自体がからでない時
  2. POSTパラメータで送られてきたname属性が空(”)であれば、
  3. $errorsという配列にnameをキーとして、’blank’という値を格納する

コードを言語化してみました。

特にわかりづらいのが、一番最初のif文だと思います。

ここは、一番最初にページを訪れた時は、エラーメッセージを表示させずに、フォームが送信された時にエラーメッセージ を表示するような条件分岐です。

もしよければ、最初のif文を消してみましょう。

手を動かして実際に挙動を確認するとわかりやすいと思います。

もし連想配列の理解が怪しいという方は、【初学者が最初につまづく】連想配列の使い方から値の取得方法を解説しますをご参考ください。

2. エラーを表示する

<?php if ($errors['name'] === 'blank'): ?>
  <p style="color: red;">Name can't be blank</p>
<?php endif; ?>
<?php if ($errors['name'] === 'length'): ?>
  <p style="color: red;">1文字以上の入力です</p>
<?php endif; ?>

ここはもうおなじみif文ですね。

if文を復習したいという方は、【基本の「き」】PHPのif文をマスターしてプログラミングの表現力を磨こうをご参考ください。

3. warningエラーを消す

error_reporting(0);
include "Warning.php";

正直、僕はこれが一番勉強になりました。

PHPは言語特有のエラーをコーディングで消すことができるんですね。

これはびっくりです。

どうやらphp.iniファイルを操作しても消せるっぽいです。

みなさんいかがでしょうか?

まとめ

  • 初期ページでエラーが出ないように条件分岐する
  • name属性が空の時にキーとバリューを配列に格納する
  • if文を使用してエラーメッセージを表示する
  • PHPのwarningは、コーディングで消せる

今日はここまでです。

laravelでやるともっと簡単にバリデーション組めるのかな?

もうちょっと学習を進めたら、挑戦してみます!

参考:

PHPでWarningを非表示にする

PHP+MySQL(MariaDB) Webサーバーサイドプログラミング入門

コメント

Comments are closed.