開発環境
- OS X Lion - Apple(OS)
- Apache (Web Server)
- PHP (サーバーサイドプログラミング言語)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
『初めてのPHP5』 (David Sklar 著、 桑村 潤 翻訳、 廣川 類 翻訳、 オライリー・ジャパン、2005年、ISBN978-4-87311-257-2)の6章(Webフォームの作成)6.7(演習問題)3を解いてみる。
3.
コード(TextWrangler)
<?php
$cals = array("add","sub","mul","div");
$result;
if($_POST['_submit_check']){
if($form_errors = validate_form()){
show_form($form_errors);
} else {
process_form();
}
} else {
show_form();
}
function show_form($errors = ""){
print <<<_HTML_
<form method="POST" action="$_SERVER[PHP_SELF]">
<input type="text" name="val1"/>
<input type="text" name="val2"/>
<select name="cal">
<option>add</option>
<option>sub</option>
<option>mul</option>
<option>div</option>
</select>
<input type="submit" value="result" />
<input type="hidden" name="_submit_check" value="1"/>
</form>
_HTML_;
if($errors){
print "<p>エラー一覧</p><ul><li>";
print implode("</li><li>",$errors);
print "</li></ul>";
}
}
function validate_form(){
$errors = array();
if(!strlen($_POST['val1'])){
$errors[] = "値(左)を入力してください";
} elseif(!$_POST['val1'] == strval(floatval($_POST['val1']))){
$errors[] = "数値(左)を入力してください";
}
if(!strlen($_POST['val2'])){
$errors[] = "値(右)を入力してください";
} elseif(!$_POST['val1'] == strval(floatval($_POST['val2']))){
$errors[] = "数値(右)を入力してください";
}
if(! in_array($_POST['cal'], $GLOBALS['cals'])){
$errors[] = "演算子を選択してください";
}
return $errors;
}
function process_form(){
$a = $_POST['val1'];
$b = $_POST['val2'];
$cal = $_POST['cal'];
$result;
switch($cal){
case "add": $result = $a + $b;$cal = "+";break;
case "sub": $result = $a - $b;$cal = "-";break;
case "mul": $result = $a * $b;$cal = "*";break;
case "div": $result = $a / $b;$cal = "/";break;
}
print "$a $cal $b = $result\n";
}
?>
HTMLソース
<form method="POST" action="/kamimura_blog/learning_php/sample22.php">
<input type="text" name="val1"/>
<input type="text" name="val2"/>
<select name="cal">
<option>add</option>
<option>sub</option>
<option>mul</option>
<option>div</option>
</select>
<input type="submit" value="result" />
<input type="hidden" name="_submit_check" value="1"/>
</form>
(送信前)
0 コメント:
コメントを投稿