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.ブラウザから実行してみよう。以下のように表示されれば成功だ。


コメント