2012年5月25日金曜日

開発環境

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

4.

コード(TextWrangler)

sample23.php

<?php
  $states = array('Alabama','Alaska','Arizona','Arkansas','California',
                  'Colorado','Connecticut','Delaware','Florida','Georgia',
                  'Hawaii','Idaho','Illinois','Indiana','Iowa',
                  'Kansas','Kentucky','Louisiana','Maine','Maryland',
                  'Massachusetts','Michigan','Minnesota','Mississippi','Missouri',
                  'Montana','Nebraska','Nevada','New Hampshire','New Jersey',
                  'New Mexico','New York','North Carolina','North Dakota','Ohio',
                  'Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina',
                  'South Dakota','Tennessee','Texas','Utah','Vermont',
                  'Virginia','Washington','West Virginia','Wisconsin','Wyoming');
  if(array_key_exists('_submit_check',$_POST)){
    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]">
<label>配送元(州): <input type="text" name="from" /></label><label>郵便番号(5桁): <input type="text" name="from_add"/></label><br />
<label>宛先(州): <input type="text" name="to"/></label><label>郵便番号(5桁): <input type="text" name="to_add"/></label><br />
<label>大きさ(36インチ以上): <input type="text" name="inch" /></label><br />
<label>重さ(150ポンド以下): <input type="text" name="pond" /></label><br />
<input type="submit" value="送信" />
<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['from'])){
      $errors[] = "送信元を入力してください";
    } elseif(!in_array($_POST['from'], $GLOBALS['states'])){
      $errors[] = "送信元の州名を確認してください。";
    }
    if(!strlen($_POST['from_add'])){
      $errors[] = "送信元の郵便番号を入力してください";
    } elseif(!preg_match('/^\d{5}$/',$_POST['from_add'])){
      $errors[] = "正しい形式で送信元の郵便番号を入力してください。";
    }
    if(!strlen($_POST['to'])){
      $errors[] = "送信先を入力してください";
    } elseif(!in_array($_POST['to'], $GLOBALS['states'])){
      $errors[] = "送信先の州名を確認してください。";
    }
    if(!strlen($_POST['to_add'])){
      $errors[] = "送信先の郵便番号を入力してください";
    } elseif(!preg_match('/^\d{5}$/',$_POST['to_add'])){
      $errors[] = "正しい形式で送信先の郵便番号を入力してください。";
    }
    if(!strlen($_POST['inch'])){
      $errors[] = "大きさを入力してください。";
    } elseif(!$_POST['inch'] == strval(floatval($_POST['inch']))){
      $errors[] = '大きさには数値を入力してください。';
    } elseif ($_POST['inch'] < 36){
      $errors[] = '大きさは36インチ以上からです。';
    }
    if(!strlen($_POST['pond'])){
      $errors[] = "重さを入力してください";
    } elseif (!$_POST['pond'] == strval(floatval($_POST['pond']))){
      $errors[] = "重さには数値を入力してください。";
    } elseif ($_POST['pond'] > 150){
      $errors[] = "重さは150ポンドまでです。";
    }
    return $errors;
  }
  function process_form(){
    $from = $_POST['from'];
    $from_add = $_POST['from_add'];
    $to = $_POST['to'];
    $to_add = $_POST['to_add'];
    $inch = $_POST['inch'];
    $pond = $_POST['pond'];
    print "<table border=1>";
    print "<tr><th>送信元</th><th>郵便番号</th><th>送信先</th><th>郵便番号</th><th>大きさ</th><th>重さ</th></tr>";
    print "<tr><td>$from</td><td>$from_add</td><td>$to</td><td>$to_add</td><td>$inch</td><td>$pond</td></tr>";
  }
?>

HTMLソース

<form method="POST" action="/kamimura_blog/learning_php/sample23.php">
<label>配送元(州): <input type="text" name="from" /></label><label>郵便番号(5桁): <input type="text" name="from_add"/></label><br />
<label>宛先(州): <input type="text" name="to"/></label><label>郵便番号(5桁): <input type="text" name="to_add"/></label><br />
<label>大きさ(36インチ以上): <input type="text" name="inch" /></label><br />
<label>重さ(150ポンド以下): <input type="text" name="pond" /></label><br />
<input type="submit" value="送信" />
<input type="hidden" name="_submit_check" value="1">
</form>

(送信前)

0 コメント:

コメントを投稿