2012年11月18日日曜日

開発環境

『初めてのPHP5』 (David Sklar 著、 桑村 潤 翻訳、 廣川 類 翻訳、 オライリー・ジャパン、2005年、ISBN978-4-87311-257-2)の9章(日付と時刻の取り扱い)9.6(演習問題)4を解いてみる。

4.

HTML、PHPのコード(TextWrangler)

sample65.php

<?php
  require 'formhelpers.php';
  $days = array();
  for($i = 1 ; $i <= 31 ; $i++){
    $days[$i] = $i;
  }
  $months = array(1 => "January",
                  2 => "February",
                  3 => "March",
                  4 => "April",
                  5 => "May",
                  6 => "June",
                  7 => "July",
                  8 => "August",
                  9 => "September",
                  10 => "October",
                  11 => "November",
                  12 => "December");
  $years = array();
  for($year = date('Y'); $year < date('Y') + 100; $year++){
    $years[$year] = $year;
  }
  if(! array_key_exists('_submit_check', $_POST)){
    $_POST['_submit_check'] = 0;
  }
  if($_POST['_submit_check']){
    if($form_errors=validate_form()){
      show_form($form_errors);
    } else {
      process_form();
    }
  } else {
    show_form();
  }
  function show_form($errors = ''){
    global $days, $months, $years;
    if($_POST['_submit_check']){
      $defaults = $_POST;
    } else {
      $date = strtotime('+1 month');
      $defaults = array('day' => date('j', $date),
                        'month' => date('n', $date),
                        'year' => date('Y', $date));
    }
    if($errors){
      print "エラー:<ul><li>";
      print implode("</li><li>", $errors);
      print "</li></ul>";
    }
    print '<form method="POST" action"' . $_SERVER['PHP_SELF'] . '">';
    print '将来の日、月、年を選択: ';
    input_select('day', $defaults, $days);
    input_select('month', $defaults, $months);
    input_select('year', $defaults, $years);
    input_submit('submit','Tuesdays');
    print '<input type="hidden" name="_submit_check" value="1"/>';
    print '</form>';
  }
  function validate_form(){
    global $days, $months, $years;
    $errors = array();
    if(! array_key_exists($_POST['day'], $days)){
      $errors[] = "日を選択してください。";
    }
    if(! array_key_exists($_POST['month'], $months)){
      $errors[] = "月を選択してください。";
    }
    if(! array_key_exists($_POST['year'], $years)){
      $errors[] = "年を選択してください。";
    }
    $today = mktime(0,0,0);
    $date = mktime(0,0,0, $_POST['month'], $_POST['day'], $_POST['year']);
    if($date <= $today){
      $errors[] = "未来を選択してください。";
    }
    return $errors;
  }
  function process_form(){
    $day = mktime(0,0,0,$_POST['month'], $_POST['day'], $_POST['year']);
    $tuesday = strtotime('Tuesday');
    if($tuesday > $day){
      print "本日(". date('l, F j, Y'). ")から選択された日(".
        date('l, F j, Y', $day).")までの間に火曜日はありません。";
    } else {
      print "本日(". date('l, F j, Y'). ")から選択された日(".
        date('l, F j, Y', $day).")までの間の火曜日一覧<br />";
      while($tuesday <= $day){
        print date('l, F j, Y', $tuesday);
        print "<br />";
        $tuesday = strtotime('+7 day', $tuesday);
      }
    }
  }
?>

HTMLソース

<form method="POST" action"/~kamimura/kamimura_blog/learning_php/sample65.php">将来の日、月、年を選択: <select name="day"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19" selected="selected">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select><select name="month"><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12" selected="selected">December</option></select><select name="year"><option value="2012" selected="selected">2012</option><option value="2013">2013</option><option value="2014">2014</option><option value="2015">2015</option><option value="2016">2016</option><option value="2017">2017</option><option value="2018">2018</option><option value="2019">2019</option><option value="2020">2020</option><option value="2021">2021</option><option value="2022">2022</option><option value="2023">2023</option><option value="2024">2024</option><option value="2025">2025</option><option value="2026">2026</option><option value="2027">2027</option><option value="2028">2028</option><option value="2029">2029</option><option value="2030">2030</option><option value="2031">2031</option><option value="2032">2032</option><option value="2033">2033</option><option value="2034">2034</option><option value="2035">2035</option><option value="2036">2036</option><option value="2037">2037</option><option value="2038">2038</option><option value="2039">2039</option><option value="2040">2040</option><option value="2041">2041</option><option value="2042">2042</option><option value="2043">2043</option><option value="2044">2044</option><option value="2045">2045</option><option value="2046">2046</option><option value="2047">2047</option><option value="2048">2048</option><option value="2049">2049</option><option value="2050">2050</option><option value="2051">2051</option><option value="2052">2052</option><option value="2053">2053</option><option value="2054">2054</option><option value="2055">2055</option><option value="2056">2056</option><option value="2057">2057</option><option value="2058">2058</option><option value="2059">2059</option><option value="2060">2060</option><option value="2061">2061</option><option value="2062">2062</option><option value="2063">2063</option><option value="2064">2064</option><option value="2065">2065</option><option value="2066">2066</option><option value="2067">2067</option><option value="2068">2068</option><option value="2069">2069</option><option value="2070">2070</option><option value="2071">2071</option><option value="2072">2072</option><option value="2073">2073</option><option value="2074">2074</option><option value="2075">2075</option><option value="2076">2076</option><option value="2077">2077</option><option value="2078">2078</option><option value="2079">2079</option><option value="2080">2080</option><option value="2081">2081</option><option value="2082">2082</option><option value="2083">2083</option><option value="2084">2084</option><option value="2085">2085</option><option value="2086">2086</option><option value="2087">2087</option><option value="2088">2088</option><option value="2089">2089</option><option value="2090">2090</option><option value="2091">2091</option><option value="2092">2092</option><option value="2093">2093</option><option value="2094">2094</option><option value="2095">2095</option><option value="2096">2096</option><option value="2097">2097</option><option value="2098">2098</option><option value="2099">2099</option><option value="2100">2100</option><option value="2101">2101</option><option value="2102">2102</option><option value="2103">2103</option><option value="2104">2104</option><option value="2105">2105</option><option value="2106">2106</option><option value="2107">2107</option><option value="2108">2108</option><option value="2109">2109</option><option value="2110">2110</option><option value="2111">2111</option></select><input type="submit" name="submit" value="Tuesdays"/><input type="hidden" name="_submit_check" value="1"/></form>

0 コメント:

コメントを投稿