TOP > 読み物 > PHP: ぴゅーっと速くプログラミング > フレームワークを作ってみよう(8)

PHP: ぴゅーっと速くプログラミング

フレームワークを作ってみよう(8)

実践編2 占いプログラムを作る

さて、ということで今回の課題は占いです。 と言っても別に真剣に占うわけではありません。 それっぽいプログラムを作ってみましょうというわけです。

課題2

前回のプログラムを参考に、
誕生日から運勢を占うプログラムを作成しなさい。

用意する画面は誕生日入力画面と占い結果画面とし、
framework.php および form.php を使用すること(それ以外の実装は任意。
占い方法も任意です。当然まともな占いである必要はありません)。

ちなみにform.phpというのは前回出てきた <select>タグ生成用の関数が入ったやつです。 とりあえずこんな感じで。

form.php: download source

  1: <?php
  2: 
  3: function
  4: _select($name, $hash, $selected = '')
  5: {
  6:   $ret = sprintf('<select name="%s">', $name);
  7:   foreach ($hash AS $value => $label) {
  8:     $ret .= sprintf('<option value="%s"', $value);
  9:     if ($value == $selected) $ret .= ' SELECTED';
 10:     $ret .= ">$label";
 11:   }
 12:   $ret .= '</select>';
 13:   return $ret;
 14: }
 15: 
 16: ?>

で、この課題をまたまたO君に作ってもらいました(Kさんは別の仕事でお忙しいので今回はパスです)。これはまずは実行例から見てもらう方がいいかな。

[ O君の占いプログラム ]

すいません。占い結果、○○ばかりでわけわかんないですよね (所詮ランダムなんで意味はないんですが…)。 実はO君、MSNの占いページのデータを使ってくれたんです。 さすがにここでそれをそのまま使うわけにもいかないので、 とりあえず伏字にさせてもらいました。 まぁこんな感じで動いているよ、ということだけわかっていただければということで。

さて、それではソースの方を見ていきましょう。まずは本体。

fortune.php: download source

  1: <?php
  2:  require('framework.php');
  3:  require('form.php');
  4:  
  5:  class fortune extends framework{
  6:   function fortune(){
  7:    $this->class_value = array('action',
  8:       'year1','year2','year3','months','day1','day2','blood',
  9:       );
 10:    $this->nameYear1 = array(0 => '選択⇒',1 => '19',2 => '20',);
 11:    $this->nameYear2 = array(0 => '選択⇒',1 => '0',2 => '1',3 => '2',4 => '3',
 12:       5 => '4',6 => '5',7 => '6',8 => '7',9 => '8',10 => '9',);
 13:    $this->nameYear3 = array(0 => '選択⇒',1 => '0',2 => '1',3 => '2',4 => '3',
 14:       5 => '4',6 => '5',7 => '6',8 => '7',9 => '8',10 => '9',);
 15:    $this->nameMonths = array(0 => '選択⇒',1 => '1',2 => '2',3 => '3',4 => '4',5 => '5',
 16:       6 => '6',7 => '7',8 => '8',9 => '9',10 => '10',11 => '11',12 => '12',);
 17:    $this->nameDay1 = array(0 => '選択⇒',1 => '0',2 => '1',3 => '2',4 => '3');
 18:    $this->nameDay2 = array(0 => '選択⇒',1 => '0',2 => '1',3 => '2',4 => '3',
 19:       5 => '4',6 => '5',7 => '6',8 => '7',9 => '8',10 => '9',);
 20:    $this->nameBlood = array(0 => '選択⇒',1 => 'A',2 => 'B',3 => 'AB',4 => 'O');
 21:    $this->import($this->class_value);
 22: 
 23:    if (!$this->action) $this->action = 'form';
 24:   }
 25:   
 26:   function form(){
 27:   }
 28:   
 29:   function check(){
 30:    if ((!$this->year1) || (!$this->year2) || (!$this->year3)){
 31:     $err[] = '年を選択してください';
 32:    }
 33:    if (!$this->months){
 34:     $err[] = '月を選択してください';
 35:    }
 36:    if (!$this->day2){
 37:     $err[] = '日を選択してください';
 38:    }
 39:    
 40:    $strY = $this->nameYear1[$this->year1].$this->nameYear2[$this->year2].$this->nameYear3[$this->year3];
 41:    $strM = $this->nameMonths[$this->months];
 42:    $strD = $this->nameDay1[$this->day1].$this->nameDay2[$this->day2];
 43:    
 44:    if (@checkdate($strM,$strD,$strY)){
 45:    }else{
 46:     $err[] = '正確な生年月日を選択してください';
 47:    }
 48:    
 49:    if ($err) {
 50:     $this->error = '<ul><li>'. implode('<li>', $err). '</ul>';
 51:     return 0;
 52:    }
 53:    return 1;
 54:   }
 55:   
 56:   function done(){
 57:    if (!$this->check() || $this->cancel) {
 58:     $this->action = 'form';
 59:     return;
 60:    }
 61:    
 62:    $ans = $thie->year1 + $this->year2 + $thie->year3 +
 63:     $this->months + $this->day1 + $this->day2 + $this->blood;
 64:    $nowY = date("Y",time());
 65:    $nowM = date("n",time());
 66:    $nowD = date("j",time());
 67:    
 68:    $ans += $nowY + $nowM + $nowD;
 69:    
 70:    switch($ans % 11){
 71:     case 0:
 72:      $this->all_answer = "○を○す○○。お○きなやり○で、のんびりと。";
 73:      $this->love_answer = "もうしばらく○○のままで。まだまだ○○は○そう。";
 74:      $this->money_answer = "ここは○○○きで。○は○○○○が○○な○。";
 75:      $this->job_answer = "○○○もチェック。○○な○○が○れていそう。";
 76:      break;
 77:     case 1:
 78:      $this->all_answer = "○○くらいは○りられそう。○○に○○してみては。";
 79:      $this->love_answer = "まだ○らないことばかり。まずは、お○いの○○○○。";
 80:      $this->money_answer = "○ったつもりで○ってはだめ。○○を○かめてから。";
 81:      $this->job_answer = "○○○でもして○○○○。○い○○が○かびそう。";
 82:      break;
 83:     case 2:
 84:      $this->all_answer = "カリカリしない。ここはまず、○○○でも。";
 85:      $this->love_answer = "○ってはだめ。○はじっくり○を○む○。";
 86:      $this->money_answer = "○けがこみそう。○いきって、○○りを。";
 87:      $this->job_answer = "バタバタと○てない。○ち○いて○え○してみて。";
 88:      break;
 89:     case 3:
 90:      $this->all_answer = "チームワーク○○。○の○○を○○○に○○して。";
 91:      $this->love_answer = "お○○は、とても○○○。○○をもって○し○って。";
 92:      $this->money_answer = "ショッピングが○しめそう。○りはデパ○○に○って。";
 93:      $this->job_answer = "ビジネスチャンス。ここは○○○で。";
 94:      break;
 95:     case 4:
 96:      $this->all_answer = "○○を○けそう。ここは、○○もしっかり○○。";
 97:      $this->love_answer = "○まずい○○になりそう。○○は○めに○○して。";
 98:      $this->money_answer = "○しくても、○○は○○。ここは○めたほうが。";
 99:      $this->job_answer = "すんなりとは○らなそう。○○も○○しておいて。";
100:      break;
101:     case 5:
102:      $this->all_answer = "○ち○かない○○の○。まず、○○になること。";
103:      $this->love_answer = "○り○してはだめ。お○○にだって○○があります。";
104:      $this->money_answer = "○○○いしそう。サイフの○は、しっかり○めて。";
105:      $this->job_answer = "○○○○○。スケジュールに○って○○に。";
106:      break;
107:     case 6:
108:      $this->all_answer = "○いどおりに○まない○。○○の○○○○は○○して。";
109:      $this->love_answer = "ガードは、かなり○そう。○ルートから○○して。";
110:      $this->money_answer = "○○○○。もう○しタイトな○○を。";
111:      $this->job_answer = "○○はけっこう○○そう。○○に○り○って。";
112:      break;
113:     case 7:
114:      $this->all_answer = "チームワーク○○。○の○○を○○○に○○して。";
115:      $this->love_answer = "お○○は、とても○○○。○○をもって○し○って。";
116:      $this->money_answer = "リーズナブルな○○で○○できそう。しっかり○○って。";
117:      $this->job_answer = "そのプラン、○○○するかも。もう○し○めてみて。";
118:      break;
119:     case 8:
120:      $this->all_answer = "○ただしい○○。ひとつずつ○○を○○していって。";
121:      $this->love_answer = "○を○いではだめ。○にもステップがあります。";
122:      $this->money_answer = "カードのツケがきつそう。もっとしっかり○○して。";
123:      $this->job_answer = "○○○○を○○○。どこかに○○があるかも。";
124:      break;
125:     case 9:
126:      $this->all_answer = "○○くらいは○りられそう。○○に○○してみては。";
127:      $this->love_answer = "まずは、お○だちから。○もいずれ○まります。";
128:      $this->money_answer = "○○はタイト。○の○も○たってみたら。";
129:      $this->job_answer = "○○な○○が○られそう。ネットで○○してみて。";
130:      break;
131:     case 10:
132:      $this->all_answer = "もうひと○り。○を○えてかかれば、なんとかなりそう。";
133:      $this->love_answer = "○○の○は、ちゃんと○えて。○が○われています。";
134:      $this->money_answer = "○しいものでなくとも。ここは、○わずにすむはず。";
135:      $this->job_answer = "○○が○○。ここは○○れたやり○で。";
136:      break;
137:     default:
138:      $this->all_answer = "カンの○える○。ひらめきのままに○○して。";
139:      $this->love_answer = "じゅうぶん○○○です。○○をもって○○して。";
140:      $this->money_answer = "お○のことは○○しない。○○はのびのび○えそう。";
141:      $this->job_answer = "アイデアが○く○。ひらめいたプランは、しっかりメモ。";
142:      break;
143:    }
144:   }
145:  }
146:  $fortune = new fortune();
147:  $fortune->main();
148:  
149:  
150: ?>

結構いい感じですね。PHP初心者ということを考えればよくできています。 強いてあげればもう少し読みやすく、 あとO君はVB使いということなので配列の扱いがもう少し上手くなれば完璧ですね。

まずはコンストラクタでの配列の初期化、もう少し読みやすく書いてみましょう。 無理に詰めて書かずに、1要素一行にしてみます。 多少ソースが長くなっても、後で挿入したり削除したりするときに楽です。

  $this->class_value = array(
    'action',
    'year1',
    'year2',
    'year3',
    'months',
    'day1',
    'day2',
    'blood',
  );
  $this->nameYear1 = array(
    0 => '選択⇒',
    1 => '19',
    2 => '20',
  );
  $this->nameYear2 = array(
    0 => '選択⇒',
    1 => '0',
    2 => '1',
    3 => '2',
    4 => '3',
    5 => '4',
    6 => '5',
    7 => '6',
    8 => '7',
    9 => '8',
    10 => '9',
  );
  $this->nameYear3 = array(
    0 => '選択⇒',
    1 => '0',
    2 => '1',
    3 => '2',
    4 => '3',
    5 => '4',
    6 => '5',
    7 => '6',
    8 => '7',
    9 => '8',
    10 => '9',
  );
  $this->nameMonths = array(
    0 => '選択⇒',
    1 => '1',
    2 => '2',
    3 => '3',
    4 => '4',
    5 => '5',
    6 => '6',
    7 => '7',
    8 => '8',
    9 => '9',
    10 => '10',
    11 => '11',
    12 => '12',
  );
  $this->nameDay1 = array(
    0 => '選択⇒',
    1 => '0',
    2 => '1',
    3 => '2',
    4 => '3'
  );
  $this->nameDay2 = array(
    0 => '選択⇒',
    1 => '0',
    2 => '1',
    3 => '2',
    4 => '3',
    5 => '4',
    6 => '5',
    7 => '6',
    8 => '7',
    9 => '8',
    10 => '9',
  );
  $this->nameBlood = array(
    0 => '選択⇒',
    1 => 'A',
    2 => 'B',
    3 => 'AB',
    4 => 'O'
  );

やっぱちょっと長いですね^^; 年月日は数字だけで表せますのでループにしちゃいましょう。

  $this->class_value = array(
    'action',
    'year1',
    'year2',
    'year3',
    'months',
    'day1',
    'day2',
    'blood',
  );
  $this->nameYear1 = array(
    0 => '選択⇒',
    1 => '19',
    2 => '20',
  );
  $this->nameYear2[0] = '選択⇒';
  for ($y = 1; $y <= 9; $y++) $this->nameYear2[$y] = $y - 1;
  $this->nameYear3[0] = '選択⇒';
  for ($y = 1; $y <= 10; $y++) $this->nameYear3[$y] = $y - 1;
  $this->nameMonths[0] = '選択⇒';
  for ($m = 1; $m <= 12; $m++) $this->nameMonths[$m] = $m - 1;
  $this->nameDay1[0] = '選択⇒';
  for ($d = 1; $d <= 4; $d++) $this->nameDay1[$d] = $d - 1;
  $this->nameDay2[0] = '選択⇒';
  for ($d = 1; $d <= 10; $d++) $this->nameDay2[$d] = $d - 1;
  $this->nameBlood = array(
    0 => '選択⇒',
    1 => 'A',
    2 => 'B',
    3 => 'AB',
    4 => 'O'
  );

かなり短くできました。 でもまだちょっと違和感があります。 直感的でない、という感じですかね。 理由は恐らく年の下二桁と日の下二桁だけ 数字一桁ごとにプルダウンにしてるというところじゃないかと思います。 プログラム的にも微妙に中途半端になってしまってます。 この年月日入力はユーザインタフェースを考えた場合、 いろいろと悩ましいことが多いのですが、 とりあえずプログラムだけを考えた場合、こう書けば比較的すっきり書けます。 まずは完全に数値一桁ごとにしてしまう場合。

  for ($n = 0; $n < 10; $n++) $this->labelNumber[$n] = $n;

これだけです。あとは$this->labelNumberを使いまわすだけ。 もしくはこう。

  $this->labelMonth[0] = '選択⇒';
  for ($n = 1; $n <= 12; $n++) $this->labelMonth[$n] = $n;
  $this->labelDay[0]   = '選択⇒';
  for ($n = 1; $n <= 31; $n++) $this->labelDay[$n] = $n;

月、日ごとにプルダウンにします。 年は<input type="text">にしちゃいます。 恐らくこのパターンが一番よくあるパターンではないかと思います。

さて、年月日のところはいいとして、 あと気になるのは占い結果を設定してるところですかね。 ここも同じ調子で続くし、 後々のことを考えれば少なくとも配列にはしておきたいところです。

具体的には後に出てくる実例を見ていただくということで、 とりあえずそういう本体があることを前提に各ページのソースを見てみます。 こちらについては特に問題ないようですね。バッチリです。

form.html: download source

  1: <h1>占い</h1>
  2: 
  3: <?php if ($this->error): ?>
  4: <p><b><font color="red"><?= $this->error ?></font></b></p>
  5: <?php endif ?>
  6: 
  7: <form action="<?= MYSELF ?>" method="POST">
  8: <input type="hidden" name="action" value="done">
  9: 
 10: <table>
 11:   <tr><td>生年月日</td>
 12:     <td><?= _select('year1', $this->nameYear1, $this->year1) ?></td>
 13:     <td><?= _select('year2', $this->nameYear2, $this->year2) ?></td>
 14:     <td><?= _select('year3', $this->nameYear3, $this->year3) ?></td>
 15:     <td>年</td>
 16:   </tr>
 17:   <tr><td colspan="3"></td>
 18:     <td><?= _select('months', $this->nameMonths, $this->months) ?></td>
 19:     <td>月</td>
 20:   </tr>
 21:   <tr><td colspan="2"></td>
 22:     <td><?= _select('day1', $this->nameDay1, $this->day1) ?></td>
 23:     <td><?= _select('day2', $this->nameDay2, $this->day2) ?></td>
 24:     <td>日 産れ</td>
 25:   </tr>
 26:   <tr><td>血液型</td>
 27:     <td colspan="2"></td>
 28:     <td><?= _select('blood', $this->nameBlood, $this->blood) ?></td>
 29:     <td>型</td>
 30:   </td></tr>
 31:   <tr><td colspan="3"></td>
 32:     <td><input type="submit" value="占う"></td>
 33:   </tr>
 34: </table>
 35: </form>

done.html: download source

  1: <h1>占い結果</h1>
  2: 
  3: <p>
  4: <b><?= $this->nameYear1[$this->year1] ?><?= $this->nameYear2[$this->year2] ?><?= $this->nameYear3[$this->year3] ?></b>
  5: 年 
  6: <b><?= $this->nameMonths[$this->months] ?></b> 
  7: 月 
  8: <b><?= $this->nameDay1[$this->day1] ?><?= $this->nameDay2[$this->day2] ?></b> 
  9: 日 
 10: <b><?= $this->nameBlood[$this->blood] ?></b> 
 11: 型の本日の運勢は... 
 12: <br> 
 13: </p> 
 14: <p> 
 15: <table> 
 16:   <tr> 
 17:     <td><b><font color="#0000FF">全体運 :</font></b></td>
 18:     <td><?= $this->all_answer ?></td> 
 19:   </tr> 
 20:   <tr> 
 21:     <td><b><font color="#FF0000">ラブ 運 :</font></b></td>
 22:     <td><?= $this->love_answer ?></td> 
 23:   </tr> 
 24:   <tr> 
 25:     <td><b><font color="#CC9900">金  運 :</font></b></td>
 26:     <td><?= $this->money_answer ?></td> 
 27:   </tr> 
 28:   <tr> 
 29:     <td><b><font color="#008000">仕事運 :</font></b></td>
 30:     <td><?= $this->job_answer ?></td>
 31:   </tr>
 32: </table>
 33: <form action="<?= MYSELF ?>" method="POST">
 34: <input type="hidden" name="action" value="form">
 35: <input type="hidden" name="year1" value="<?= $this->_year1 ?>">
 36: <input type="hidden" name="year2" value="<?= $this->_year2 ?>">
 37: <input type="hidden" name="year3" value="<?= $this->_year3 ?>">
 38: <input type="hidden" name="months" value="<?= $this->_months ?>">
 39: <input type="hidden" name="day1" value="<?= $this->_day1 ?>">
 40: <input type="hidden" name="day2" value="<?= $this->_day2 ?>">
 41: <input type="hidden" name="blood" value="<?= $this->_blood ?>">
 42: 
 43: <input type="submit" value="もう一度">
 44: </form>

さて、それでは僕が作るとしたらこんな感じ、 というのを一応載せて今回は終わりにします。 次回のネタ考えなきゃ…

fortune.php: download source

  1: <?php
  2: 
  3: require('framework.php');
  4: require('form.php');
  5: 
  6: class
  7: Fortune extends framework
  8: {
  9:   function Fortune(){
 10:     $this->class_value = array(
 11:       'action',
 12: 
 13:       'year',
 14:       'month',
 15:       'day',
 16:       'blood',
 17:     );
 18:     $this->labelMonth[0] = '選択⇒';
 19:     for ($n = 1; $n <= 12; $n++) $this->labelMonth[$n] = $n;
 20:     $this->labelDay[0]   = '選択⇒';
 21:     for ($n = 1; $n <= 31; $n++) $this->labelDay[$n]   = $n;
 22:     $this->labelBlood = array(
 23:       0 => '選択⇒',
 24:       1 => 'A',
 25:       2 => 'B',
 26:       3 => 'AB',
 27:       4 => 'O'
 28:     );
 29:     $this->answer = array(
 30:       0 => array(
 31:         'all'   => '○を○す○○。お○きなやり○で、のんびりと。',
 32:         'love'  => 'もうしばらく○○のままで。まだまだ○○は○そう。',
 33:         'money' => 'ここは○○○きで。○は○○○○が○○な○。',
 34:         'job'   => '○○○もチェック。○○な○○が○れていそう。',
 35:       ),
 36:       1 => array(
 37:         'all'   => '○○くらいは○りられそう。○○に○○してみては。',
 38:         'love'  => 'まだ○らないことばかり。まずは、お○いの○○○○。',
 39:         'money' => '○ったつもりで○ってはだめ。○○を○かめてから。',
 40:         'job'   => '○○○でもして○○○○。○い○○が○かびそう。',
 41:       ),
 42:       2 => array(
 43:         'all'   => 'カリカリしない。ここはまず、○○○でも。',
 44:         'love'  => '○ってはだめ。○はじっくり○を○む○。',
 45:         'money' => '○けがこみそう。○いきって、○○りを。',
 46:         'job'   => 'バタバタと○てない。○ち○いて○え○してみて。',
 47:       ),
 48:       3 => array(
 49:         'all'   => 'チームワーク○○。○の○○を○○○に○○して。',
 50:         'love'  => 'お○○は、とても○○○。○○をもって○し○って。',
 51:         'money' => 'ショッピングが○しめそう。○りはデパ○○に○って。',
 52:         'job'   => 'ビジネスチャンス。ここは○○○で。',
 53:       ),
 54:       4 => array(
 55:         'all'   => '○○を○けそう。ここは、○○もしっかり○○。',
 56:         'love'  => '○まずい○○になりそう。○○は○めに○○して。',
 57:         'money' => '○しくても、○○は○○。ここは○めたほうが。',
 58:         'job'   => 'すんなりとは○らなそう。○○も○○しておいて。',
 59:       ),
 60:       5 => array(
 61:         'all'   => '○ち○かない○○の○。まず、○○になること。',
 62:         'love'  => '○り○してはだめ。お○○にだって○○があります。',
 63:         'money' => '○○○いしそう。サイフの○は、しっかり○めて。',
 64:         'job'   => '○○○○○。スケジュールに○って○○に。',
 65:       ),
 66:       6 => array(
 67:         'all'   => '○いどおりに○まない○。○○の○○○○は○○して。',
 68:         'love'  => 'ガードは、かなり○そう。○ルートから○○して。',
 69:         'money' => '○○○○。もう○しタイトな○○を。',
 70:         'job'   => '○○はけっこう○○そう。○○に○り○って。',
 71:       ),
 72:       7 => array(
 73:         'all'   => 'チームワーク○○。○の○○を○○○に○○して。',
 74:         'love'  => 'お○○は、とても○○○。○○をもって○し○って。',
 75:         'money' => 'リーズナブルな○○で○○できそう。しっかり○○って。',
 76:         'job'   => 'そのプラン、○○○するかも。もう○し○めてみて。',
 77:       ),
 78:       8 => array(
 79:         'all'   => '○ただしい○○。ひとつずつ○○を○○していって。',
 80:         'love'  => '○を○いではだめ。○にもステップがあります。',
 81:         'money' => 'カードのツケがきつそう。もっとしっかり○○して。',
 82:         'job'   => '○○○○を○○○。どこかに○○があるかも。',
 83:       ),
 84:       9 => array(
 85:         'all'   => '○○くらいは○りられそう。○○に○○してみては。',
 86:         'love'  => 'まずは、お○だちから。○もいずれ○まります。',
 87:         'money' => '○○はタイト。○の○も○たってみたら。',
 88:         'job'   => '○○な○○が○られそう。ネットで○○してみて。',
 89:       ),
 90:       10 => array(
 91:         'all'   => 'もうひと○り。○を○えてかかれば、なんとかなりそう。',
 92:         'love'  => '○○の○は、ちゃんと○えて。○が○われています。',
 93:         'money' => '○しいものでなくとも。ここは、○わずにすむはず。',
 94:         'job'   => '○○が○○。ここは○○れたやり○で。',
 95:       ),
 96:     );
 97:     $this->import($this->class_value);
 98: 
 99:     if (!$this->action) $this->action = 'form';
100:   }
101: 
102:   function
103:   form()
104:   {
105:   }
106: 
107:   function
108:   check()
109:   {
110:     if (!$this->year)
111:       $err[] = '年を入力してください';
112:     if (!$this->month)
113:       $err[] = '月を選択してください';
114:     if (!$this->day)
115:       $err[] = '日を選択してください';
116:     if (!checkdate($this->month,$this->day,$this->year))
117:       $err[] = '正しい日付を指定してください';
118:     if (!$this->blood)
119:       $err[] = '血液型を選択してください';
120:     
121:     if ($err) {
122:       $this->error = '<ul><li>'. implode('<li>', $err). '</ul>';
123:       return 0;
124:     }
125:     return 1;
126:   }
127: 
128:   function
129:   done()
130:   {
131:     if (!$this->check() || $this->cancel) {
132:       $this->action = 'form';
133:       return;
134:     }
135:     
136:     $this_year  = date('Y');
137:     $this_month = date('n');
138:     $this_day   = date('j');
139:     $answer = $thie->year + $this->month + $this->day + $this->blood +
140:               $this_year + $this_month + $this_day;
141:     $this->result = $this->answer[$answer % 11];
142:   }
143: }
144: 
145: $fortune = new Fortune();
146: $fortune->main();
147: 
148: // vi:ts=8 sw=2
149: ?>

form.html: download source

  1: <h1>占い</h1>
  2: 
  3: <?php if ($this->error): ?>
  4: <p><strong><font color="red"><?= $this->error ?></font></strong></p>
  5: <?php endif ?>
  6: 
  7: <form action="<?= MYSELF ?>" method="POST">
  8: <input type="hidden" name="action" value="done" />
  9: <table>
 10:   <tr>
 11:     <th>生年月日</th>
 12:     <td><input type="text" name="year" value="<?=
 13:       $this->_year
 14:     ?>" size=5 maxlength=4 />年<?=
 15:       _select('month', $this->labelMonth, $this->month)
 16:     ?>月<?=
 17:       _select('day', $this->labelDay, $this->day)
 18:     ?>日 生まれ</td>
 19:   </tr>
 20:   <tr>
 21:     <th>血液型</th>
 22:     <td><?=
 23:       _select('blood', $this->labelBlood, $this->blood)
 24:     ?>型</td>
 25:   </tr>
 26:   <tr>
 27:     <td colspan=2 align="center"><input type="submit" value="占う" /></td>
 28:   </tr>
 29: </table>
 30: </form>

done.html: download source

  1: <h1>占い結果</h1>
  2: 
  3: <p>
  4: <strong><?= $this->year ?></strong>年 
  5: <strong><?= $this->labelMonth[$this->month] ?></strong>月 
  6: <strong><?= $this->labelDay[$this->day] ?></strong>日 
  7: <strong><?= $this->labelBlood[$this->blood] ?></strong>型の本日の運勢は…
  8: </p> 
  9: 
 10: <p> 
 11: <table> 
 12:   <tr> 
 13:     <th><font color="#0000FF">全体運</font></th>
 14:     <td><?= $this->result['all'] ?></td> 
 15:   </tr> 
 16:   <tr> 
 17:     <th><font color="#FF0000">ラブ運</font></th>
 18:     <td><?= $this->result['love'] ?></td> 
 19:   </tr> 
 20:   <tr> 
 21:     <th><font color="#CC9900">金運</font></th>
 22:     <td><?= $this->result['money'] ?></td> 
 23:   </tr> 
 24:   <tr> 
 25:     <th><font color="#008000">仕事運</font></th>
 26:     <td><?= $this->result['job'] ?></td>
 27:   </tr>
 28: </table>
 29: </p>
 30: 
 31: <form action="<?= MYSELF ?>" method="POST">
 32: <input type="hidden" name="action" value="form" />
 33: <input type="hidden" name="year" value="<?= $this->_year ?>" />
 34: <input type="hidden" name="month" value="<?= $this->_month ?>" />
 35: <input type="hidden" name="day" value="<?= $this->_day ?>" />
 36: <input type="hidden" name="blood" value="<?= $this->_blood ?>" />
 37: <input type="submit" value="もう一度" />
 38: </form>

[ 実行例 ]


[ 前へ | 続く(?) ]