2012年5月23日水曜日

開発環境

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

3.

コード(TextWrangler)

sample22.php

<?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 コメント:

コメントを投稿