2012年12月21日金曜日

開発環境

『初めてのPHP5』 (David Sklar 著、 桑村 潤 翻訳、 廣川 類 翻訳、 オライリー・ジャパン、2005年、ISBN978-4-87311-257-2)の6章(Webフォームの作成)6.7(演習問題)3を解いてみる。

3.

HTML、PHPのソースコード(BBEdit)

sample96.php

<?php
  function calc_add($a, $b){
    return $a + $b;
  }
  function calc_sub($a, $b){
    return $a - $b;
  }
  function calc_mul($a, $b){
    return $a * $b;
  }
  function calc_div($a, $b){
    return $a / $b;
  }
  if(array_key_exists('_submit_check', $_POST)) {
    if($errors = validate_form()){
      show_form1($errors);
      print "?";
      show_form2();
    } else {
      process_form();
    }
  } else {
    show_form1();
    print "?";
    show_form2();
  }
  function show_form1($errors = ''){
    if(array_key_exists('_submit_check', $_POST)){
      $defaults = $_POST;
    } else {
      $defaults = array('lhs' => 5, 'rhs' => 10);
    }
    if($errors){
      print 'エラー<ul><li>';
      print implode('</li><li>', $errors);
      print '</li></ul>';
    }
    print <<<_HTML_
<form method="POST" action="{$_SERVER['PHP_SELF']}" >
<input type="text" name="lhs" value="{$defaults['lhs']}"/>
<select name="operator">
<option value="add">+</option>
<option value="sub">-</option>
<option value="mul">*</option>
<option value="div">/</option>
</select>
<input type="text" name="rhs" value="{$defaults['rhs']}"/>
= 
_HTML_;
  }
  function show_form2(){
    print <<<_HTML_
<input type="submit" value="calc" />
<input type="hidden" name="_submit_check" value="1" />
</form>
_HTML_;
  }
  function validate_form(){
    $errors = array();
    if($_POST['lhs'] != strval(floatval($_POST['lhs']))){
      $errors[] = "左側に数値を入力してください";
    }
    if($_POST['rhs'] != strval(floatval($_POST['rhs']))){
      $errors[] = "右側に数値を入力してください";
    }
    return $errors;
  }
  function process_form(){
    show_form1();
    switch($_POST['operator']){
      case "add": print calc_add($_POST['lhs'], $_POST['rhs']); break;
      case "sub": print calc_sub($_POST['lhs'], $_POST['rhs']); break;
      case "mul": print calc_mul($_POST['lhs'], $_POST['rhs']); break;
      case "div": print calc_div($_POST['lhs'], $_POST['rhs']); break;
      default:print "?";
    }
    show_form2();
  }
?>

0 コメント:

コメントを投稿