2012年12月26日水曜日

開発環境

『初めてのPHP5』 (David Sklar 著、 桑村 潤 翻訳、 廣川 類 翻訳、 オライリー・ジャパン、2005年、ISBN978-4-87311-257-2)の8章(クッキーとセッションでユーザーを記憶)8.8(演習問題)4を解いてみる。

4.

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

sample102.php

<?php
  session_start();
  require 'formhelpers.php';
  $products = array('javascript'=> "Learning Javascript",
                    'csharp' => 'Learning C#',
                    'python' => 'Learning Python',
                    'perl' => 'Learning Perl',
                    'ruby' => 'Learning Ruby',
                    'php' => 'Learning PHP');
  
  if(array_key_exists('_submit_check', $_POST)){
    if($errors = validate_form()){
      show_form($errors);
    } else {
      process_form();
    }
  } else {
    show_form();
  }
  function show_form($errors=''){
    global $products;
    print '<form method="POST" action="'. $_SERVER['PHP_SELF'] . '">';
    if($errors){
      print 'エラー<ul><li>';
      print implode('</li><li>', $errors);
      print '</li></ul>';
    }
    $defaults = array();
    if(array_key_exists('order', $_SESSION)){
      foreach($products as $key => $value){
        if(array_key_exists($key, $_SESSION)){
          $defaults[$key] = $_SESSION[$key];
        }
      }
    } else {
      $defaults = $_POST;
    }
    foreach($products as $key => $value){
      print '<label>' . $value . '<br />数量: ';
      input_text($key, $defaults);
      print '</label><br />';
    }
    input_submit('submit', 'order');
    print '<input type="hidden" name="_submit_check" value="1" />';
    print '</form>';
  }
  function validate_form(){
    global $products;
    $errors = array();
    foreach($products as $key => $value){
      if(strlen($_POST[$key])){
        if($_POST[$key] != strval(intval($_POST[$key]))){
          $errors[] = "数値を入力してください";
        } elseif(intval($_POST[$key]) < 0) {
          $errors[] = "0以上の数を入力してください";
        }
      }
    }
    return $errors;
  }
  function process_form(){
    global $products;
    $_SESSION['order'] = 1;
    foreach($products as $key => $value){
      if(array_key_exists($key, $_POST)){
        $_SESSION[$key] = $_POST[$key];
      }
    }
    print '<p>注文を受け付けました</p>';
    print '<p><a href="./sample103.php">注文確認ページへ</a></p>';
  }
?>

sample103.php

<?php
  session_start();
  require 'formhelpers.php';
  $products = array('javascript'=> "Learning Javascript",
                    'csharp' => 'Learning C#',
                    'python' => 'Learning Python',
                    'perl' => 'Learning Perl',
                    'ruby' => 'Learning Ruby',
                    'php' => 'Learning PHP');
  if(array_key_exists('_submit_check', $_POST)){
    process_form();
  } else {
    show_form();
  }
  function show_form(){
    global $products;
    if(array_key_exists('order', $_SESSION)){
      print '注文一覧<ul>';
      foreach($products as $key => $value){
        if(array_key_exists($key, $_SESSION)){
          print '<li>' . $value . ' 個数: ' . $_SESSION[$key] . '</li>';
        }
      }
      print '</ul>';
    } else {
      print '<p>注文はありません</p>';
    }
    print '<form method="POST" action="' . $_SERVER['PHP_SELF'] . '">';
    input_submit("submit", "order");
    print '<input type="hidden" name="_submit_check" value="1" />';
    print '</form>';
    print '<p><a href="./sample102.php">注文をやりなおす</a></p>';
  }
  function process_form(){
    global $products;
    unset($_SESSION['order']);
    foreach($products as $key => $value){
      unset($_SESSION[$key]);
    }
    print "<p>注文完了!</p>";
    print '<p><a href="./sample102.php">注文を続ける</a></p>';
  }
?>

0 コメント:

コメントを投稿