**目次 [#x84676ed]
#contents
** 掲示板作成 [#j1f396dc]
|カテゴリー|掲示板作成|
|優先順位|至急|
|イテレーション|[[イテレーション1]]|
|状態|未着手|
|状態|完了|
|完了予定日|2007/8/16|
|工数||
|対応者|清原|
----
**外部仕様 [#f14524b7]
- 投稿画面
名前 [ ]
内容 [ ]
[ ]
[ ]
[送信]ボタン
- 記事一覧画面
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記号(「<」 「>」)、クォート(「'」)などが含まれていた場合は実態参照化する。
**研修課題 [#qbc07a86]
-SmartyとPearDBを利用して、上記外部仕様を満たすWebアプリケーションを作成すること。
**内部仕様 [#w77a05fc]
***画面まわり [#i261e65f]
-画面はテンプレートエンジンのSmartyを利用。
***DBまわり [#pec6eb6d]
-DBはMySQL。
-DBアクセスにPearDBを利用。
**ソース [#d2d454c7]
-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>