&pgid();
 
 11·î¤«¤é¿·¤·¤¯Æþ¼Ò¤·¤¿¾®¾Â¤Ç¤¹¡£¸½ºß¸¦½¤Ãæ¤ÇPHP¤ÎÊÙ¶¯¤ò¤·¤Æ¤¤¤Þ¤¹¡£
 ÀèÆü¡¢¸¦½¤¤Î°ì´Ä¤È¤·¤Æ¡ÖSmarty¤ÈPearDB¤òÍøÍѤ·¤¿·Ç¼¨ÈġפòºîÀ®¤·¤Þ¤·¤¿¡£
 ¼«Ê¬¤ÎƬ¤ÎÃæ¤òÀ°Íý¤¹¤ë°ÕÌ£¤â¤³¤á¤Æ¡¢¤³¤³¤Ë¤½¤ÎÀ®²Ì¤Î°ìÉô¤òȯɽ¤·¤¿¤¤¤È»×¤¤¤Þ¤¹¡£
 
 #blikimore
 
 **Ìܼ¡ [#nce29998]
 #contents();
 **³µÍ× [#ffc248be]
 ***´Ä¶­ [#sf8649dd]
 Æ°ºî´Ä¶­ : Linux
 Web¥µ¡¼¥Ð : Apache
 ³«È¯¸À¸ì : PHP
 DB : MySQL
 »ÈÍѤ·¤¿¥é¥¤¥Ö¥é¥ê¤Ê¤É : Smarty¡¢PearDB
 ³«È¯¤ÏWindows¥Þ¥·¥ó¤«¤éSSH¤ÇLinux¤Ë¤Ä¤Ê¤®¡¢¤ª¤³¤Ê¤¤¤Þ¤·¤¿¡£
 ***¥·¥¹¥Æ¥à¹½À® [#z45c15bc]
 ºîÀ®¤·¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï°Ê²¼¤Î¤è¤¦¤Ê¹½À®¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
 
 smarty_board
 ¨§ js
 ¨¢ ¨¦ smarty_board.js     --list.tplÆâ¤ÇÍøÍѤ¹¤ëjavaScript
 ¨§ templates
 ¨¢ ¨¦ list.tpl            --²èÌ̤Υƥó¥×¥ì¡¼¥È
 ¨§ article_dao.php        --¥Ç¡¼¥¿¥¢¥¯¥»¥¹¥ª¥Ö¥¸¥§¥¯¥È
 ¨§ list.php               --list.tpl¤ËÊÑ¿ô¤òÀßÄꤹ¤ë¥â¥¸¥å¡¼¥ë
 ¨§ paging_manager.php     --¥Ú¡¼¥¸¥ó¥°´ÉÍý¤ò¤ª¤³¤Ê¤¦¥¯¥é¥¹
 ¨¦ submit_new_article.php --¿·µ¬Åê¹Æ¤ò¹Ô¤¦¥¯¥é¥¹
 
 **º¤¤Ã¤¿ÅÀ [#k07e5025]
 
 ***Smarty¤Èjavascript [#j6accfa2]
 ¥Æ¥ó¥×¥ì¡¼¥È¥Õ¥¡¥¤¥ë¤ÎÃæ¤Ç¤ÏÃæ³ç¸Ì{}¤¬Í½Ìó¸ì¤È¤·¤Æ°·¤ï¤ì¤Þ¤¹¡£¤½¤Î¤¿¤á¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Ë°Ê²¼¤Î¤è¤¦¤Êµ­½Ò¤ò¤¹¤ë¤È¥¨¥é¡¼¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
  function addPageNum(num) {
      document.list_form.page_num.value 
        = new Number(document.list_form.page_num.value) + num;
  }
 ²óÈòÊýË¡¤È¤·¤Æ¤Ï°Ê²¼¤ÎÆó¤Ä¤¬¤¢¤ê¤Þ¤¹¡£
 -javascript¤Ï³°Éô¥Õ¥¡¥¤¥ë¤Ëµ­½Ò¤¹¤ë¡£
 -Smarty¤ÎÃæ³ç¸Ì¤¬»ý¤Ã¤Æ¤¤¤ëµ¡Ç½¤ò¾¤Îµ­¹æ¤Ë³ä¤êÅö¤Æ¤ë¡£¡Ê°Ê²¼Îã¡Ë
  $smarty->left_delimiter = '<!--{';
  $smarty->right_delimiter = '}-->';
 ¤Á¤Ê¤ß¤Ë»ä¤ÏÁ°¼Ô¤ÎÊýË¡¤ò¼è¤ê¤Þ¤·¤¿¡£
 
 - ¤â¤¦1¤Ä¡¢javascript¤ÎÉôʬ¤ò{literal}{/literal}¤Ç°Ï¤à¤È¤¤¤¦É½µ­Ë¡¤¬¤¢¤ê¤Þ¤¹¡£(by Ãݼ on 06/11/13)
 -- http://sky.freespace.jp/smarty/SmartyManual_2-6-6J_html/language.function.literal.html
 -- http://www.irisdti-jp.com/web/
 
 
 ***ʸ»ú²½¤± [#t08c9daa]
 »Ï¤á¤ÏHTML¤Î¥¨¥¹¥±¡¼¥×¤ò¡¢Smarty¤Îµ¡Ç½¤ò»È¤¤¥Æ¥ó¥×¥ì¡¼¥È¤ÎÃæ¤Ç°Ê²¼¤Î¤è¤¦¤Ë¤ä¤í¤¦¤È»×¤¤¤Þ¤·¤¿¡£
  <td>{$article.name|escape:"htmlall"}</td>
 ¤½¤·¤¿¤éʸ»ú²½¤±¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¤Î¤Ç¡¢¥Æ¥ó¥×¥ì¡¼¥È¤ò¼¡¤Î¤è¤¦¤Ë½¤Àµ¤·¡¢
  <td>{$article.name}</td>
 phpÆâ¤Ç°Ê²¼¤Î´Ø¿ô¤ò»È¤Ã¤Æ¥¨¥¹¥±¡¼¥×¤¹¤ë¤³¤È¤Ë¤·¤Þ¤·¤¿¡£
  function escape($str) {
      return nl2br(htmlentities($str, ENT_QUOTES, 'EUC-JP'));
  }
 
 ***\n¤È'(¥·¥ó¥°¥ë¥¯¥©¡¼¥Æ¡¼¥·¥ç¥ó) [#u091fe98]
 ÆþÎϤµ¤ì¤¿Ãͤò¤½¤Î¤Þ¤ÞDB¤ËÅÐÏ¿¤¹¤ë¤È¤¤¤í¤¤¤íÌäÂ꤬ȯÀ¸¤·¤Þ¤¹¡£Î㤨¤Ð¡Ö\n¡×¤¬ÆþÎϤµ¤ì¤ë¤È¡¢²þ¹Ô¤µ¤ì¤Æɽ¼¨¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£¤â¤Ã¤È¤Ò¤É¤¤¤Î¤Ï¡Ö'¡Ê¥·¥ó¥°¥ë¥¯¥©¡¼¥Æ¡¼¥·¥ç¥ó¡Ë¡×¤òÆþÎϤµ¤ì¤¿¾ì¹ç¤Ç¤¹¡£SQL¥¤¥ó¥¸¥§¥¯¥·¥ç¥ó¤¬²Äǽ¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£¤µ¤¤¤ï¤¤PHP¤Ë¤Ï
  addslashes()
 ¤È¤¤¤¦ÊØÍø¤Ê´Ø¿ô¤¬¤¢¤ë¤Î¤Ç¡¢´Êñ¤ËÂбþ¤Ç¤­¤Þ¤¹¡£
 
 
 2006/11/09 Äɵ­ ¾å¤ÎSQL¥¤¥ó¥¸¥§¥¯¥·¥ç¥óÂкö¤Ç¤Ï´°Á´¤Ç¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹¡£
 http://d.hatena.ne.jp/hoshikuzu/20060211#P20060211PHPSQLINJECTION
 2007/10/25 Äɵ­ ¾å¤ÎSQL¥¤¥ó¥¸¥§¥¯¥·¥ç¥óÂкö¤Ç¤Ï´°Á´¤Ç¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹¡£
 http://www.irisdti-jp.com/web/
 **¥½¡¼¥¹ [#g1df0ee8]
 ***list.tpl [#g3a926a4]
  <html>
  <head>
  <meta http-equiv="content-type" content="text/html;charset=EUC-JP ">
  <title>¥¹¥Þ¡¼¥Æ¥£¡¼¤òÍøÍѤ·¤¿·Ç¼¨ÈÄ</title>
  
  <script language="javascript" src= "./js/smarty_board.js" ></script>
  
  </head>
  
  <body>
  
  <center>¥¹¥Þ¡¼¥Æ¥£¡¼¤òÍøÍѤ·¤¿·Ç¼¨ÈÄ</center>
  
  <!-- ÆþÎÏÉôʬ -->
  <form action="submit_new_article.php" name="submit_form" method="POST" >
  <table align="center">
      <tr>
          <td>̾Á°</td>
          <td><input type="text" name="name" size="40"></td>
      </tr>
      <tr>
          <td>ÆâÍÆ</td>
          <td><textarea name="message" rows="6" cols="70" ></textarea></td>
      </tr>
      <tr>
          <td><input type="submit" value="¿·µ¬Åê¹Æ" /></td>
      </tr>
  </table>
  
  </form>
  
  <!-- °ìÍ÷Éôʬ -->
  <form action="list.php" name="list_form" method="POST" >
  <input type="submit" value="Á°¤Ø" {$is_prev_disabled} onclick="addPageNum(-1);" />
  <input type="submit" value="¼¡¤Ø" {$is_next_disabled} onclick="addPageNum(1);" />
  {$page_num} / {$page_count}
  <input type="hidden" name="page_num" value="{$page_num}" />
  
  {foreach from=$articles item=article}
  
  <hr>
  <table>
      <tr>
          <td>̾Á°¡§</td>
          <!--<td>{$article.name|escape:"htmlall"}</td>-->
          <td>{$article.name}</td>
      </tr>
      <tr>
          <td nowrap>Åê¹ÆÆü»þ¡§</td>
          <td>{$article.date|date_format:"%Y/%m/%d %H:%M:%S"}</td>
      </tr>
      <tr>
          <td>ÆâÍÆ¡§</td>
          <td>{$article.message}</td>
      </tr>
  </table>
  
  {/foreach}
  <hr>
  
  <input type="submit" value="Á°¤Ø" {$is_prev_disabled} onclick="addPageNum(-1);" />
  <input type="submit" value="¼¡¤Ø" {$is_next_disabled} onclick="addPageNum(1);" />
  {$page_num} / {$page_count}
  
  </form>
  </body>
  </html>
 
 ***list.php [#c12499f7]
  <?php
  
  require_once('Smarty.class.php');
  require('paging_manager.php');
  
  //¸¡º÷
  $pager = new PagingManager(getPageNum());
  $result = $pager->getArticles();
  
  //²èÌÌÍѤΥꥹ¥È¤ËµÍ¤áÂؤ¨¤ë¡£
  $articles = array();
  foreach ($result as $row){
      $articles[sizeof($articles)] 
  	  = array(name=>escape($row[1]), date=>$row[2], message=>escape($row[3]) );
  }
  
  //¥¹¥Þ¡¼¥Æ¥£¡¼¤ÎÀßÄê
  $smarty = new Smarty;
  $smarty->assign('articles', $articles);
  $smarty->assign('page_num', getPageNum());
  $smarty->assign('page_count', $pager->getPageCount());
  if (!$pager->hasPrevPage() ) {
      $smarty->assign('is_prev_disabled', 'disabled');
  }
  if (!$pager->hasNextPage()) {
      $smarty->assign('is_next_disabled', 'disabled');
  }
  
  $smarty->template_dir = './templates/';
  $smarty->display('list.tpl');
  
  function getPageNum(){
  
      $page_num = (int) $_POST[page_num];
      if ($page_num <= 1){
          $page_num = 1;
      }
      return $page_num;
  }
  
  function escape($str) {
      return nl2br(htmlentities($str, ENT_QUOTES, 'EUC-JP'));
  }
  
  ?>
 
 ***submit_new_article.php [#r21ca826]
  <?php
  
  require('article_dao.php');
  
  //²èÌ̤«¤é¤Î¾ðÊó¤ò¼èÆÀ¤¹¤ë¡£
  $article = array();
  $article[name] = addslashes($_POST[name]);
  $article[message] = addslashes($_POST[message]);
  
  //DB¤Ø¤ÎÅÐÏ¿½èÍý¤ò¤ª¤³¤Ê¤¦¡£
  $dao = New ArticleDao;
  $dao -> registArticle($article);
  
  //¥ê¥À¥¤¥ì¥¯¥È
  header("Location: http://carrot.ark-web.jp/~konuma/smarty_board/list.php");
  header("Location:http://www.irisdti-jp.com/playonline/);
  
  ?>
 ***paging_manager.php [#a7afbe30]
  <?php
  
  require('article_dao.php');
  
  define('PAGE_COUNT', 5);
  
  class PagingManager {
  
      var $current_page_num;
      var $articles;
      
      function PagingManager($page_num) {
          $this->current_page_num = $page_num;
          
          $dao = new ArticleDao;
          $this->articles = $dao->getArticles();
      }
  
      function getArticles() {
          
          $limit_from = (PAGE_COUNT * $this->current_page_num) - PAGE_COUNT;
          $limit_to = $limit_from + PAGE_COUNT -1;
          $index = 0;
          $part_of_articles = array();
          
          while($row =& $this->articles->fetchRow()){
              if( $limit_from <= $index && $index <= $limit_to ) {
                  $part_of_articles[sizeof($part_of_articles)] = $row;
              }
              $index++;
          }
          return $part_of_articles;
      }
  
      function hasPrevPage() {
          return  ( $this->current_page_num > 1 ); 
      }
  
      function hasNextPage() {
          return ( $this->current_page_num * PAGE_COUNT < $this->articles->numRows() );
      }
  
      function getPageCount() {
          return ceil($this->articles->numRows() / PAGE_COUNT);
      }
  
  }
  
  ?>
 
 ***article_dao.php [#nf2ddffb]
  <?php
  
  require('DB.php');
  
  class ArticleDao {
  
      //°ì·ï¤ÎÅê¹Æ¤òDB¤ËÅÐÏ¿¤¹¤ë¡£
      function registArticle($article) {
          //¥³¥Í¥¯¥·¥ç¥ó
          $dsn = "mysql://root:@localhost/konuma_training";
          $db = DB :: connect($dsn, true);
          
          //sqlʸ¤ÎºîÀ®
          $sql = "insert into articles(
                     submitter_name
                    ,submit_date
                    ,message
                  ) values (
                     ?
                    ,sysdate()
                    ,?
                  )";
                  
          //SQL¤Î¼Â¹Ô
          $db->query($sql, array($article[name], $article[message]));        
  
          //¥³¥Í¥¯¥·¥ç¥ó¤Î³«Êü
          $db -> disconnect();
  
      }
  
      //DB¤è¤ê½ñ¤­¹þ¤ß¤ò¼èÆÀ¤¹¤ë¡£
      function getArticlesLimit($limit_from, $count){
          
          //¥³¥Í¥¯¥·¥ç¥ó
          $dsn = "mysql://root:@localhost/konuma_training";
          $db = DB :: connect($dsn, true);
          
          //sqlʸ¤ÎºîÀ®
          $sql = "select * from articles order by id desc";
                  
          //SQL¤Î¼Â¹Ô
          $result = $db->limitQuery($sql, $limit_from, $count);        
  
          //¥³¥Í¥¯¥·¥ç¥ó¤Î³«Êü
          $db -> disconnect();
  
          return $result;
      }
  
      //DB¤è¤ê½ñ¤­¹þ¤ß¤ò¼èÆÀ¤¹¤ë¡£
      function getArticles(){
          
          //¥³¥Í¥¯¥·¥ç¥ó
          $dsn = "mysql://root:@localhost/konuma_training";
          $db = DB :: connect($dsn, true);
          
          //sqlʸ¤ÎºîÀ®
          $sql = "select * from articles order by id desc";
                  
          //SQL¤Î¼Â¹Ô
          $result = $db->query($sql);        
  
          //¥³¥Í¥¯¥·¥ç¥ó¤Î³«Êü
          $db -> disconnect();
  
          return $result;
      }
  }
  
  ?>
 
 2006/11/09 °ìÉô½¤Àµ ¥¤¥ó¥µ¡¼¥È»þ¤Ë¥Ö¥ì¡¼¥¹¥Û¥ë¥À¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë½¤Àµ¤·¤Þ¤·¤¿¡£
 
 ***smarty_board.js [#vd9922dc]
  function addPageNum(num) {
  	document.list_form.page_num.value = new Number(document.list_form.page_num.value) + num;
  }
 
 #blikifooter(¾®¾Â);

¥È¥Ã¥×   ÊÔ½¸ º¹Ê¬ ¥Ð¥Ã¥¯¥¢¥Ã¥× źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS

¥¢¡¼¥¯¥¦¥§¥Ö¤Î¥µ¡¼¥Ó¥¹¤ä¥½¥ê¥å¡¼¥·¥ç¥ó¤Ï¤³¤Á¤é