【Step11】受け取ったデータのチェック 

データが入力されたかチェックするには 

strlen()関数は、文字列の長さを調べる関数です。長さがゼロであればデータが入力されてないと判断します。

<?php
 //strlen()関数でチェック
 $namae = @$_POST["namae"];
 if (!strlen($namae)) {
   echo "データが入力されていません。文字列を入力して「送信」をクリックしてください";
 }
 else {
   echo $namae;
 }
?>

empty()関数は、フォームから受け取ったデータが空または0であるときにTRUEが返されます。0が無効なデータの場合は使えます。

<?php
  //empty()関数でチェック
  $namae = @$_POST["namae"];
  if (empty($namae)) {
    echo "データが入力されていません。文字列を入力して「送信」をクリックしてください<br>
    ※0(ゼロ)は無効です";
  }
  else {
    echo "入力文字 :".$namae;
  }
?>

 

文字列が含まれているかを調べるには 

stristr()関数を使うと、フォームからのデータに指定した文字列が含まれているかを調べることができます。含まれていれば見つかった文字列を返し、含まれていないときには FALSE を返します。大文字と小文字の区別はしません。大文字と小文字を区別する場合はstrstr()関数を使います。

<?php
  $namae = @$_POST["namae"]; //データを受け取る
  $sagasu = "千絵";//探す文字列

  //stristr()関数で探す
  if (!stristr($namae, $sagasu)) {
    echo "$namae に「 $sagasu 」 が含まれていません<br>";
  }
  else {
    echo "$namae に $sagasu が含まれています<br>";
  }
?>

 

桁数を調べるには 

strlen()関数を使うと、文字列の長さをバイトで調べることができます。
下記サンプルでは入力文字が6バイト以内かを調べています。

<?php
  $namae = @$_POST["namae"]; //データを受け取る
  $maxlen = 6; //最大文字数を指定

  if (empty($namae)) {
    echo "データが入力されていません。文字列を入力して「送信」をクリックしてください<br> ";
  }

  else {

    //strlen()関数で調べる
    if (!strlen($namae) > $maxlen) {
      echo "$maxlen バイト以内で入力してください<br>";
    }
    else {
      echo "「 $namae 」.は $maxlen バイト以内です";
    }
  }
?>

 

数字かどうかを調べるには 

is_numeric()関数を使うと、データが数字かどうかを調べることができます。数値または数値文字列であれば True が返されます。

<?php
  $namae = @$_POST["namae"]; //データを受け取る
  $maxlen = 6; //最大文字数を指定

  if (empty($namae)) {
   echo "数値を入力して「送信」をクリックしてください<br> ";
  }

  else {

   //データの型を調べます
   echo "$namae のデータ型は".gettype($namae)."です<br>";

   //is_numeric()を使って数値かどうかで調べます
   if (is_numeric($namae)) {
     $keisan = $namae + $namae;
     echo "$namae + $namae =".$keisan ;
   }
   else {
     echo "「 $namae 」.は 数値ではありません。";
   }
  }
?>

 

半角数字のみかを調べるには 

ereg()関数を使って数字が全角で入力されてないかを調べます。計算などに必要な数字の場合、半角でないと困る場合があります。一致するパターンを指定するには 正規表現を使います。 (Step7 正規表現参照

<?php
  $namae = @$_POST["namae"]; //データを受け取る

  if (empty($namae)) { //空かどうかチェック
   echo "半角数字を入力して「送信」をクリックしてください<br> ";
  }
 
  else {

    //正規表現を使って半角数字かどうかで調べます 
    $pattern = "^[0-9]+$";

    if (ereg($pattern,$namae)) {
      echo "$namae は半角数字のみです" ;
    }
    else {
      echo "「 $namae 」は 半角数字ではありません。";
    }
  }
?>

 

日付が正しいかどうかをチェックするには 

checkdate()関数を使うと、日付が正しいかどうかをチェックすることができます。指定された日付が有効であればTRUEを返し、そうでなければFALSE を返します。

構文 checkdate ( int month, int day, int year )

引数で指定された日付の妥当性をチェックします。日付が 以下のようになっていれば妥当であると判断されます。

<form method=post action="<?=$_SERVER["PHP_SELF"]?>">
  <table>
<tr>
<td>
<select name= "yyyy"> ;
<?php
//年
for ($i =2005; $i <=2020; $i++) {
echo "<option>$i";
}
echo "</select>年";

//月
echo "<select name= \"mm\">" ;
for ($i =1; $i <=12; $i++) {
echo "<option>$i";
}
echo "</select>月";


//日
echo "<select name= \"dd\">" ;
for ($i =1; $i <=31; $i++) {
echo "<option>$i";
}
echo "</select>日";
?>
</td>
<td><input type="submit" value="送信" name="sub1"></td>
</tr>
</table>
< /form>

<?php
//日付データを受け取る
$yyyy = @$_POST["yyyy"];
$mm = @$_POST["mm"];
$dd = @$_POST["dd"];

if (empty($yyyy)) { //年が空かどうかチェック
echo "日付を入力して「送信」をクリックしてください<br> ";
}
else {


//正しい日付かをチェック
If (checkdate($mm, $dd, $yyyy)) {
echo "$yyyy/$mm/$dd は正しい日付です";
}
else {
echo "$yyyy/$mm/$dd は正しい日付ではありません";
}
}
?>


クライアントサイドで入力不備を知らせる 

下記サンプルは、JavaScript chk関数を使って、クライアントサイドでチェックする方法です。この場合は、クライアントサイドでブラウザのスクリプト機能を有効にしていないと効果はありません。
クライアントサイドでのデータチェックは応答が速いものの、ブラウザに依存します。サーバーサイドではクライアントサイドよりは遅いものの、ブラウザの依存はありません。

<html>
< head>
< meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
< title>JavaScriptを使ってデータが入力されてないことを通告</title>
< script language="JavaScript">
< !--
function chk(f) {
if(f.namae.value==''){
alert('お名前を入力してください')
return false
}
else {
return true
}
}
//-->
< /script>
< /head>

<body>

<form onSubmit="return chk(this)" action="<?=$_SERVER["PHP_SELF"]?>"
method="post">
  <table>
<tr>
<td><input type="text" name="namae"></td>
<td><input type="submit" value="送信" name="sub1"></td>
</tr>
</table>
< /form>

<?PHP

if (isset($_POST["namae"])) {
$namae = $_POST["namae"];
echo $namae;
}
?>

</body>
< /html>

 

エラーメッセージを表示して戻る 

strlen()関数を使って、入力された文字数を調べます。「0」のときには何も入力されてないとして、エラーメッセージを表示します。簡単なエラーチェックの方法です。

<form method=post action="<?=$_SERVER["PHP_SELF"]?>">
  <table>
<tr>
<td><input type="text" name="namae"></td>
<td><input type="submit" value="送信" name="sub1"></td>
</tr>
</table>
< /form>

<?php
$namae = @$_POST["namae"]; //データを受け取る
//strlen()関数でチェック
if (strlen($namae)) {
echo "お名前:".$namae;
}
else {
echo "お名前が入力されていません。文字列を入力して「送信」をクリックしてください";
}
?>

フォームを再表示する 

次の例では、1〜10までの文字サイズでなかったときにフォームを表示します。

<?php
$namae = @$_POST["namae"]; //データを受け取る


//文字の長さが1〜10以外の場合フォームを再表示する
if (strlen($namae) <1 or strlen($namae) >10) {
?>

<form method=post action="check_9.php" method="post">
<table>
<tr>
<td>1〜10バイト(全角の場合5文字)で入力してください。</td>
<td><input type="text" name="namae"></td>
<td><input type="submit" value="送信" name="sub1"></td>
</tr>
</table>
< /form>

<?php
}
else {
echo "正しく入力されました :".$namae;
}
?>