
ユーザーがいつも適切な値を入力してくれるとは限りませんので、チェックが大切になります。値をチェックする方法はいくつかあります。
1.サーバーのPHP側で入力チェックする方法
2.サーバーのPHPに送る前に、クライアントのブラウザで入力チェックする方法
(ブラウザでは JavaScript などの言語を使って行います)
まずは 1 の方法で入力チェックする方法から解説します。
【1】sample010 フォルダをコピーして sample011 フォルダを作成します。

【2】calc.html の変更はありません。 calc.php だけ変更します。

*「\」はWindowsではエンマークのことです。
保存先 C:\phpdev\www\test\sample011
ファイル名 calc.html
<html>
<head>
<title>calc.html</title>
</head>
<body>
<form name="form1" action="calc.php" method="post">
<input type = "text" name = "txtA">
<select name="selOpe" size=1>
<option value = "+">+</option>
<option value = "-">-</option>
<option value = "×">×</option>
<option value = "÷">÷</option>
</select>
<input type = "text" name = "txtB"> = ?
<br>
<input type = "submit" value = "計算">
<input type = "reset" value = "クリア">
</form>
</body>
</html>
保存先 C:\phpdev\www\test\sample011
ファイル名 calc.php
<?php
//値を取得
$a = $_POST['txtA'];
$b = $_POST['txtB'];
$ope = $_POST['selOpe'];
dataCheck($a,"txtA");
dataCheck($b,"txtB");
//セレクトボックスによって処理を変える
switch ($ope) {
case "+":
$answer = $a + $b;
break;
case "-":
$answer = $a - $b;
break;
case "×":
$answer = $a * $b;
break;
case "÷":
$answer = $a / $b;
break;
default:
break;
}
function dataCheck($str,$name){
if(strlen($str) == 0 || ereg("[^0-9]",$str)){
print("<html><head><title>入力エラー</title></head><body>");
print($name." は半角数字を入力してください。<br /><br />\n");
print("<a href=\"#\" onClick=\"history.back(); return false;\">再入力</a>\n");
print("</body></html>");
exit;
}
}
?>
<html>
<head>
<title>calc.php</title>
</head>
<body>
<?php
//計算結果を表示
print ($a." ".$ope." ".$b." = ".$answer."\n");
?>
<br />
<br />
<a href="#" onclick="history.back(); return false;">前の画面へ戻る</a>
</body>
</html>
*上記のプログラムはページの都合上、インデント(字下げ)が半角スペース2つになっていますが、実際には半角スペース4つにするのが好ましいです。インデントはプログラムの動作には影響しません。
【3】C:\phpdev にある 2K-NT-XP-phpdev_start.bat をダブルクリックして、phpdev を起動します。

準備ができたら作成したPHPプログラムを実行してみましょう。
【4】ブラウザのアドレスに http://localhost/test/sample011/calc.html と入力し、実行します。
【5】calc.html の画面が表示されました。

【6】テキストボックスに何も入力しないで、そのまま「計算」ボタンをクリックします。

【7】calc.php が表示され、メッセージが表示されました。

【8】ソースを表示してみましょう。

【9】ちゃんと入力エラー時のHTMLになっています。

【10】「再入力」リンクをクリックします。

【11】テキストボックスにわざと文字の「a」を入力します。

【12】メッセージが表示されました。

【13】「再入力」リンクをクリックします。

【14】今度は正しくテキストボックスに半角数字を入力し、「計算」ボタンをクリックします。

【15】1つ目のテキストボックスはOKですが、2つ目の値が不適切なのでメッセージが表示されます。

【16】2つのテキストボックスの値が適切なら、計算結果が表示されます。

【17】値やセレクトボックスをいろいろ変えて、動作を確認してください。
【解説】
今回 calc.html側の変更はありません。
■calc.php側
(1)PHPとHTMLを分離しました。PHPの処理を最初にまとめて、計算結果だけHTMLの中に出力しています。
(2)ユーザー定義関数を呼び出している部分です。この関数は受け取った値が適切かどうかチェックします。引数はテキストボックスの値と、入力エラー時に出力するための名前です。
dataCheck($a,"txtA");
dataCheck($b,"txtB");
(3)ユーザー定義関数の書き方
function 関数名(引数,引数){
処理;
return;
}
*返り値(以降は戻り値とします)がなければ、 return は省略できます。
(4)データのチェックは何度も使いますので、ユーザー定義関数としました。
function dataCheck($str,$name){
if(strlen($str) == 0 || ereg("[^0-9]",$str)){
print("<html><head><title>入力エラー</title></head><body>");
print($name." は半角数字を入力してください。<br /><br />\n");
print("<a href=\"#\" onClick=\"history.back(); return false;\">再入力</a>\n");
print("</body></html>");
exit;
}
}
・渡された引数をもとにif文で処理を分けています。
if(strlen($str) == 0 || ereg("[^0-9]",$str)){
もし $str($aや$b)が0文字 または 半角数字以外が入力されていたら、
メッセージとリンクを表示して終了します。
終了するのでそれ以降のプログラムやHTMLは出力されません。そのため最低限のHTMLはメッセージとリンクの前後に出力しています。
(5)正規表現
[^0-9] の部分は正規表現です。正規表現は強力で文字列を扱うときに威力を発揮します。マッチングや置換など、正規表現だけで1冊の本になるほどです。このPHP講座では必要に応じて少しずつ解説します。
ereg()はPHPでマッチングを行うときに使う関数で、以下の例では $str の変数に、数字以外が1文字でも使われていたらマッチします。
ereg("[^0-9]",$str)
例 123a456
【ワンポイント】
if(strlen($str) == 0 || ereg("[^0-9]",$str)){
のかわりに
if(intval($str)==0){
を使うこともできますが、上記のほうが細かい設定が可能です。
intval()関数は引数を整数にして返します。成功時は整数、失敗時は 0です。