実際に計算の機能を付けましょう。
<?php
@$number1 = $_GET['number1'];
@$number2 = $_GET['number2'];
@$operator = $_GET['operator'];
$result = 0;
switch ($operator) {
case 'add':
$result = $number1 + $number2;
break;
case 'minus':
$result = $number1 - $number2;
break;
case 'multiply':
$result = $number1 * $number2;
break;
case 'divide':
$result = $number1 / $number2;
break;
default:
break;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<form action="#">
<input type="text" name="number1" placeholder="数字1">
<select name="operator">
<option value="add">+</option>
<option value="minus">-</option>
<option value="multiply">×</option>
<option value="divide">÷</option>
</select>
<input type="text" name="number2" placeholder="数字2">
<input type="submit" value="送信">
</form>
結果:<?php echo htmlspecialchars($result,ENT_QUOTES); ?>
</body>
</html>
分析すると、まず変数にフォームに入る値を持つ変数を代入します。
@$number1 = $_GET['number1'];
@$number2 = $_GET['number2'];
@$operator = $_GET['operator'];
そして計算を行います。
switch ($operator) {
case 'add':
$result = $number1 + $number2;
break;
case 'minus':
$result = $number1 - $number2;
break;
case 'multiply':
$result = $number1 * $number2;
break;
case 'divide':
$result = $number1 / $number2;
break;
default:
break;
}
そしてHTMLの中に結果を表示します。
結果:<?php echo htmlspecialchars($result,ENT_QUOTES); ?>
*ちなみに、htmlspecialcharsは、xss(cross site scripting)を防ぐための機能です。
このまま実行すれば、なんも問題はありません。数字を入力すればですね。しかしいたずらで文字とかの入力は十分可能なので、仮に文字を入れられたとして、
switch ($operator) {
case 'add':
@$result = $number1 + $number2;
break;
case 'minus':
@$result = $number1 - $number2;
break;
case 'multiply':
@$result = $number1 * $number2;
break;
case 'divide':
@$result = $number1 / $number2;
break;
default:
break;
}
のようにresult変数に@を付けてエラーを隠しても、処理されたとは言えません。
ならどうしたらいい?