DBの準備

1.ここでやったejwordデータベースを使う。未作成の人は作成しておくこと。


2.rootユーザーでアクセスし、joytasユーザーにejwordデータベースを扱えるように権限を与える。

GRANT ALL PRIVILEGES ON `ejword`.* TO 'joytas'@'localhost';

プロジェクトの作成

3.ドキュメントルート内にejappフォルダを作成する。
4.ejappフォルダの中にユーティリティーを集めるfunctions.phpを以下のように作成する。
●functions.php

<?php
function h($str){
    return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

クラスの作成

5.テーブルの構造に合わせて以下のようにWord.phpを作成する。

<?php
class Word{
  public $id;
  public $title;
  public $body;
}

6.DAOを作成しよう。以下のようにWordDAO.phpを作成する。

<?php
require_once('Word.php');
class WordDAO{
  private $db;
   public function __construct(PDO $db) {
      $this->db = $db;
   }
  
   public function findAll($search){
     $stt=$this->db->prepare('SELECT * FROM words WHERE title LIKE ?');
     $stt->bindValue(1,$search);
     $stt->execute();
     $words=$stt->fetchAll(PDO::FETCH_CLASS, 'Word');
     return $words;
   }
}

7.index.phpを以下のように作成する。

<?php
require_once('functions.php');
require_once('WordDAO.php');
$search='';
$mode='';
if(count($_POST)>0){
  $search=$_POST['search'];
  switch($_POST['mode']){
    case 'startWith':
    $searchWord=$search.'%';
    $mode='startWith';
    break;
    case 'full':
    $searchWord=$search;
    $mode='full';
    break;
    case 'endWith':
    $searchWord='%'.$search;
    $mode='endWith';
    break;
  }
  try{
  $db=new PDO('mysql:host=127.0.0.1;dbname=ejword;charset=utf8','joytas','12345');
  $dao=new WordDAO($db);
  $words=$dao->findAll($searchWord);
  }catch(PDOException $e){
    echo $e->getMessage();
  }
}
?>
 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>EJword</title>
</head>
<body>
<form method="post">
<input type="text" name="search" value="<?=h($search)?>" placeholder="search">
<select name="mode">
<option value="startWith" <?php if($mode==='startWith'){echo 'selected';}?>>で始まる</option>
<option value="full" <?php if($mode==='full'){echo 'selected';}?>>と一致する</option>
<option value="endWith" <?php if($mode==='endWith'){echo 'selected';}?>>で終わる</option>
</select>
<button type="submit">検索</button>
</form>
<?php if(isset($words) && count($words)>0):?>
<table border="1">
<?php foreach($words as $word):?>
<tr><td><?=$word->title?></td><td><?=$word->body?></td></tr>
<?php endforeach;?>
</table>
<?php endif;?>
</body>
</html>


実行

8.ブラウザから実行してみよう。以下のように表示されれば成功だ。