開発環境
- 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 コメント:
コメントを投稿