**目次 [#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>

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

アークウェブのサービスやソリューションはこちら