清原研修/4 http://www.ark-web.jp/sandbox/wiki/451.html
目次 †
掲示板作成 †
| カテゴリー | 掲示板作成 |
| 優先順位 | 至急 |
| イテレーション | イテレーション1 |
| 状態 | 完了 |
| 完了予定日 | 2007/8/16 |
| 工数 | |
| 対応者 | 清原 |
外部仕様 †
- 投稿画面
名前 [ ] 内容 [ ] [ ] [ ] [送信]ボタン - 記事一覧画面
ID: 1 名前: XXXXXXXXXXXXXX 内容: YYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYY 投稿日時: 2007年08月10日 13時24分13秒 ID: 2 名前: XXXXXXXXXXXXXX 内容: YYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYY 投稿日時: 2007年08月10日 13時24分13秒 ...略... ID: 5 名前: XXXXXXXXXXXXXX 内容: YYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYY 投稿日時: 2007年08月10日 13時24分13秒 次へ 前へ
- 投稿、閲覧のできる掲示板。
- 投稿内容は「名前」と「内容」
- 「名前」または「内容」が未入力で「送信」を押したら、次のエラーメッセージを表示。
名前は必須です。 内容は必須です。
- 表示内容は「名前」と「内容」と「投稿日時」
- 「投稿日時」は投稿時に自動的に設定される。
- 閲覧画面は5件ずつ表示する。
- 「前へ」「次へ」ボタンでページングをおこなう。
- 投稿内容にHTML記号(「<」 「>」)、クォート(「'」)などが含まれていた場合は実態参照化する。
研修課題 †
- SmartyとPearDBを利用して、上記外部仕様を満たすWebアプリケーションを作成すること。
内部仕様 †
画面まわり †
- 画面はテンプレートエンジンのSmartyを利用。
DBまわり †
- DBはMySQL。
- DBアクセスにPearDBを利用。
ソース †
- board.php
<?php require_once('./Smarty/Smarty.class.php'); require_once('BoardClass.php'); $num = 5; //表示する投稿数 $smarty = new Smarty(); $smarty->template_dir = './Smarty/templates/'; $smarty->compile_dir = './Smarty/templates_c/'; $board = new BoardClass(); $board->setPage($_GET['page']); $data = $board->getEntry($num); for($i = 0; $i < $num; $i++){ if(!empty($board->data[$i]['ID'])){ $Array[$i]['ID'] = $data[$i]['ID']; $Array[$i]['Name'] = stripslashes($data[$i]['Name']); $Array[$i]['Message'] = stripslashes($data[$i]['Message']); $Array[$i]['Date'] = $data[$i]['Date']; $nownum = $data[$i]['ID']; } } if(!($nownum % $board->getMax())){ $smarty->assign('mod',0); }else{ $smarty->assign('mod',1); } $smarty->assign('Array',$Array); $smarty->assign('page',$board->getPage()); if(empty($_POST['flg'])){ }else{ if((!empty($_POST['name']))&& (!empty($_POST['message']))){ $board->setEntry(htmlspecialchars($_POST['name'],ENT_QUOTES), htmlspecialchars($_POST['message'],ENT_QUOTES)); }else{ if(empty($_POST['name'])){ $smarty->assign('err_name','名前は必須です。<br>'); } if(empty($_POST['message'])){ $smarty->assign('err_msg','内容は必須です。<br>'); } } } $smarty->display('board.tpl'); ?>
- BoardClass.php
<?php class BoardClass{ var $db; var $data; var $page = 0; function BoardClass(){ require_once('DB.php'); $this->db = DB::connect('mysql://root@localhost/kiyohara_training'); } function getEntry($num){ $this->data = $this->db->getAll('select * from board where ID between ? and ?', array(($num*$this->page)+1,(($this->page+1)*$num)),DB_FETCHMODE_ASSOC); if(PEAR::isError($this->data)){ die($this->data->getMessage()); } return $this->data; } function setEntry($name,$msg){ $query = $this->db->prepare('insert into board values(?,?,?,?)'); $date = date('Y-n-j G:i:s'); $max = $this->getMax(); $res = $this->db->execute($query,array(($max+1),$name,$msg,$date)); if(PEAR::isError($res)){ die($res->getMessage()); } } function getPage(){ return $this->page; } function setPage($page){ $this->page = $page; } function getMax(){ return $this->db->getone('select MAX(ID) from board'); } } ?>
- board.tpl
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> <font color = red> <b> {$err_name} {$err_msg} </b> </font> {foreach item=Array from=$Array} ID: {$Array.ID} <br> 名前:{$Array.Name} <br> 内容:{$Array.Message} <br> 投稿日時:{$Array.Date} <hr> {/foreach} </div> {if $page-1 >= 0} <a href="./board.php?page={$page-1}">前へ</a> {/if} {if $mod} <a href="./board.php?page={$page+1}">次へ</a> {/if} <form method='POST' action='board.php?page={$page}'> 名前:<br><input type='text' name='name'> <br> 内容:<br><textarea rows=5 cols=45 name='message'></textarea> <input type='hidden' name='flg' value='ok'> <br> <input type='submit' value=送信> </body> </html>
![[PukiWiki] [PukiWiki]](image/sandbox.gif)



