開発環境
- OS X Lion - Apple(OS)
- Apache (Web Server)
- PHP (サーバーサイドプログラミング言語)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
『初めてのPHP5』 (David Sklar 著、 桑村 潤 翻訳、 廣川 類 翻訳、 オライリー・ジャパン、2005年、ISBN978-4-87311-257-2)の9章(日付と時刻の取り扱い)9.6(演習問題)4を解いてみる。
4.
HTML、PHPのコード(TextWrangler)
<?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 コメント:
コメントを投稿