PHP - フォームバリデーション

こんにちは、PHP開発者さんたち!今日は、フォームバリデーションの楽しい世界に飛び込みます。あなたの近所の親切なコンピュータ教師として、私はこのウェブ開発の重要な部分をガイドします。信じてください、フォームバリデーションをマスターするのは自転車に乗るのと同じです - 一度習うと、忘れられません!

PHP - Form Validation

フォームバリデーションが重要な理由

コードに飛び込む前に、フォームバリデーションがなぜ如此重要か話しましょう。オンラインのピザデリバリーサービスを運営しているとします。誰かが「ABC」のピザを注文したり、電話番号に「-5」を入力したりしたら、困りますよね!そこで、フォームバリデーションが助け舟を出し、受け取るデータが正確で使用可能であることを確保します。

クライアントサイドバリデーションとサーバーサイドバリデーション

フォームバリデーションの世界には、主に2つのプレイヤーがあります:クライアントサイドバリデーションとサーバーサイドバリデーション。今日はPHPを使用したサーバーサイドバリデーションに焦点を当てますが、簡単に両方について触れてみましょう。

クライアントサイドバリデーション

クライアントサイドバリデーションは、ユーザーのブラウザでデータがサーバーに送信される前に発生します。これは迅速で、即時フィードバックを提供しますが、熟練したユーザーには回避される可能性があります。

サーバーサイドバリデーション

サーバーサイドバリデーションは、フォームが送信された後にサーバーで発生します。これはより安全で信頼性が高く、ユーザーが操作することができません。今日はこのバリデーションを深く掘り下げます。

PHP フォームバリデーションの始め方

簡単なフォームから始めて、バリデーションを段階的に構築してみましょう。まずは基本的なHTMLフォームを見てみましょう:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
名前: <input type="text" name="name"><br>
年齢: <input type="text" name="age"><br>
<input type="submit" name="submit" value="送信">
</form>

次に、このフォームにPHPの魔法を加えてバリデーションを行います!

バリデーション関数

具体的なバリデーションに進む前に、ヘルパー関数を作成しましょう:

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

このtest_input()関数は以下の3つの重要なことを行います:

  1. trim()は文字列の両端から空白を削除します
  2. stripslashes()はバックスラッシュを削除します
  3. htmlspecialchars()は特殊文字をHTMLエンティティに変換します

これらのステップは、悪意のあるコードの注入を防ぎ、データがクリーンであることを確保します。

フォームが空

まずは基本的なチェックを行います:フォームが空かどうか?以下のようにやります:

<?php
$name = $age = "";
$nameErr = $ageErr = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "名前は必須です";
} else {
$name = test_input($_POST["name"]);
}

if (empty($_POST["age"])) {
$ageErr = "年齢は必須です";
} else {
$age = test_input($_POST["age"]);
}
}
?>

このコードでは:

  • 変数とエラーメッセージを初期化します
  • フォームがPOSTで送信されたか確認します
  • 各フィールドが空かどうかをチェックし、空の場合はエラーメッセージを設定し、それ以外の場合は入力をクリーンアップします

年齢フィールドが数値でない

次に、年齢フィールドが数値であることを確認するチェックを追加します:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
// ... 前のチェック ...

if (empty($_POST["age"])) {
$ageErr = "年齢は必須です";
} else {
$age = test_input($_POST["age"]);
if (!is_numeric($age)) {
$ageErr = "年齢は数値でなければなりません";
}
}
}

ここでは、is_numeric()を使用して年齢が実際に数値であるか確認します。それでない場合は、適切なエラーメッセージを設定します。

すべてをまとめて

では、完成したフォームバリデーションスクリプトを見てみましょう:

<?php
$name = $age = "";
$nameErr = $ageErr = "";

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "名前は必須です";
} else {
$name = test_input($_POST["name"]);
}

if (empty($_POST["age"])) {
$ageErr = "年齢は必須です";
} else {
$age = test_input($_POST["age"]);
if (!is_numeric($age)) {
$ageErr = "年齢は数値でなければなりません";
}
}
}
?>

<h2>PHP フォームバリデーション例</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
名前: <input type="text" name="name">
<span class="error"><?php echo $nameErr;?></span>
<br><br>
年齢: <input type="text" name="age">
<span class="error"><?php echo $ageErr;?></span>
<br><br>
<input type="submit" name="submit" value="送信">
</form>

<?php
echo "<h2>あなたの入力:</h2>";
echo $name;
echo "<br>";
echo $age;
?>

このスクリプトは以下を行います:

  1. 変数と関数を定義します
  2. フォームが送信された場合にバリデーションを行います
  3. フォームにエラーメッセージを表示します(エラーがあれば)
  4. 有効な入力を表示します

バリデーションメソッドの表

以下は、PHPで一般的に使用されるバリデーションメソッドの表です:

メソッド 説明
empty() 変数が空かどうかをチェック if (empty($var))
isset() 変数が設定されておりNULLでないかどうかをチェック if (isset($var))
is_numeric() 変数が数値または数値文字列かどうかをチェック if (is_numeric($var))
strlen() 文字列の長さを取得 if (strlen($var) > 5)
preg_match() 正規表現マッチを実行 if (preg_match("/pattern/", $var))
filter_var() 変数を指定されたフィルタでフィルタリング if (filter_var($var, FILTER_VALIDATE_EMAIL))

フォームバリデーションはデータの整合性を確保し、ユーザーエクスペリエンスを向上させることです。クラブのボーイのように、良いデータを入れて、悪いデータを外す役割です!

このチュートリアルがあなたにPHPフォームバリデーションの solidな基盤を提供してくれたことを願っています。練習は完璧の道ですので、さまざまなフォームとバリデーションテクニックを試してみてください。間もなく、フォームバリデーションをプロのように行えるようになるでしょう!

ハッピーコーディング、そしてあなたのフォームが常に有効であることを祈っています!

Credits: Image by storyset