PHPを学ぼう!

▼PHPを学ぶチャプターです。


SMS付き2Gは、900円。
通話付きは、1600円。

 

素材メニュー

 ◆Chapter 1

 ◆Chapter 2

 ◆Chapter 3

 ◆Chapter 4

 

制作ヒント

 ◆制作のヒント

 

レッスンメニュー

 ◆Chapter2 練習問題

 ◆Chapter3 DB練習問題

 

サイト運営者がPHPを学んだ
お勧めの書籍です!
これ一冊で基本的なPHPの仕組み、簡単なプログラムの作成、SQLiteを使ったデータベースなどかなり学べる要素が詰まっています!

↓↓↓ ↓↓↓

PHPレッスンブック―PHP5対応

新品価格
¥2,520から
(2013/2/24 04:38時点)

 

 

サイバーテロの技法について書かれた書籍です!
ハッカーの手法を知ることでご自身のサイトがハッカーに攻撃されたときそれを防ぐ手法を紹介しています。

↓↓↓ ↓↓↓

PHPサイバーテロの技法―攻撃と防御の実際

新品価格
¥1,890から
(2013/11/5 10:09時点)

 

 

★初年度100円! サブドメインやメールアカウントを無制限に設置できます。
PHPやCGIは勿論、WordPress、Movable Type Open Source、掲示板、ブログ、ショッピングサイトなどが簡単に導入できるので複数サイトを運営したい場合に便利なサービスです。

↓↓↓ ↓↓↓

 

PHPが動作するサーバー

 

はじめてのHP | 無料素材 | タグ辞典 | CSSガイドEX | PHPを学ぼう!

◆Chapter 3 - キーワード検索機能をつける

サイトにアクセスしてくれた人が知りたい情報をそのサイトで検索できればユーザビリティは向上しますね。
サイトの内容にもよるのでしょうが、そのサイトでデータベースを構築していたなら、その実現は簡単にできます。
簡単といわれれば、サイト運営者としては検索機能は是非とも付け加えたいと思いませんか?

 

残念ながら、この『PHPを学ぼう!』は、データベースを活用していません。
何故なら、このホームページを開設した頃(1年前)はデータベースの知識が全くなかったからです。
アクセス数も順調に伸びているし、ページをデータベース化するにはページ数が少ないというのもありました。
何より面倒くさいというのが最大の理由だったかもしれません・・・(笑)

 

フィギュアなどを紹介する関連サイト、『ホビ★コレ』に一度アクセスしてみてください。 ほぼ同様のデザインのホームページですが、コレクション情報はデータベース化しています。
TOP ページを見てもらうとわかりますようにデータベース化すると作品別、キャラクター別、キーワード別などでデータの抽出が自由にできるのです。

 

では実際にキーワード検索についての説明をしていましょう。
と、その前に以下のサイトより、英単語のデータが無料でダウンロードができますので「辞書データベース形式(SQLite)のダウンロード】」をダウンロードをしておいてください。
このデータベースを使い説明していきます。

WEB便利ツール(くじらはんど/PHPレッスンブック著)

 

ダウンロードしたファイルを解凍してみると既に SQlite で作成されたファイル、"ejdict.sqlite3" が存在します。
拡張子が、"sqlite3" となっていますが PHP5.0 以降なら気にすることなく使えます。

このデータベースファイルの中身は基礎英単語で約50000語が収録されています。
テーブル名に "items" 、カラムには "item_id(PRIMARY KEY)"、"word"、"mean"、"level" で構築されています。
ここでは、"level" の内容は使用しませんので無視します。
データベースファイルの中身を間単に知りたいときには、Firefox のアドオンで "SQlite Maneger" がお勧めです!
ファイル名を指定して開くだけで次のように中身を見ることができます。
勿論、データの追加、修正、削除も簡単にできます。

SQLite

 

次にサンプルコードで説明していきます。

【sample_search.php】

01|<html lang="ja">
02|<head>
03|<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
04|<title>英単語約50000語から完全一致で検索</title>
05|</head>
06|<body>
07|<?php
08|//actionのページ指定
09|$self_page = "./sample_search.php";
10|
11|//POSTの処理
12|$word =
13|isset($_REQUEST['word']) ? htmlspecialchars($_REQUEST['word']) : "";
14|$submit = isset($_REQUEST['submit']) ? $_REQUEST['submit'] : "";
15|$search_task =
16|isset($_REQUEST['search_task']) ? $_REQUEST['search_task'] : "";
17|
18|//データベースに接続する
19|try{
20|  $db = new PDO("sqlite:data/ejdict.sqlite3");
21|  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
22|}catch(PDOException $e){
23|  echo "データベースにアクセスできません".$e->getMessage();
24|  exit;
25|}
26|?>
27|<form action="<?=$self_page;?>" method="POST" name="serach"
28| style="margin:0 0 0 20px; font-size:9pt">
29|<input type="text" name="word" value="" maxlength="16" size="20">
30|<input type="submit" name="submit" value="検索する">
31|</form>
32|<?php
33|if($submit == "検索する"){
34|  $mess="";
35|  $search_task = "off";
36|  if($word==""){
37|    $mess="*キーワードを入力してください。";
38|  }else{
39|    $search_task = "on";
40|    $mess=" ";
41|}
42|  echo "<p style='font-size:11pt; color:red;'>".$mess."</p>\n";
43|}
44|
45|//データの表示
46|if($search_task == "on"){
47|  echo "<h3>【完全一致の検索結果】</h3>";
48|  $stmt = $db->prepare("SELECT * FROM items WHERE word=?");
49|  $stmt->execute(array($word));
50|  $i=0;
51|  foreach($stmt as $row){
52|    $word = htmlspecialchars($row["word"]);
53|    $mean = str_replace(" / ", "\n", $row["mean"]);
54|    $mean = nl2br(htmlspecialchars($mean));
55|    echo "<h4 style='margin:0; background:#eeeeee;'>$word</h4>\n";
56|    echo "<div style='margin:2px 6px 18px 6px;'>$mean</div>";
57|    $i++;
58|  }
59|  if($i<1){ echo "<p style='margin:0 0 0 20px; font-cloro:red'>
60|検索結果がありません。
61|</p> "; }
62|
63|  //DBから切断する ( $db = null; も可能)
64|  unset( $db );
65|}
66|?>
67|</body>
68|</html>

このプログラムは、キーワードに対して完全一致したものだけを検索します。
プログラムの動作確認が、こちらできます。

 

12行目ではフォームから渡された値が存在すれば代入し、なければ初期化しています。

$word = isset($_REQUEST['word']) ? htmlspecialchars($_REQUEST['word']) : "";

値が存在する場合、フォームから渡された値を初期化し、値が存在すれば代入しています。
その場合、htmlspecialchars 関数を使い値のサイニタイズをしています。

 

19~25行は、データベースにアクセスする際の処理、いわば呪文のようなものです。

33~43行は、フォームから値が送信された場合に値が存在するかどうかを判断する処理です。

46~65行は、フォームから値が送信された値、つまりキーワードが存在した場合の処理になります。

48行目が完全一致でキーワード検索をさせるクエリになります。

$db->prepare("SELECT * FROM items WHERE word=?");

49行目でその値を多次元配列で変数 $stmt に渡しています。

50行目の "$i=0;" は、検索結果の数を知るために宣言しています。

51~58行は、検索結果があれば書き出す処理です。

 

ここで注目したいのは57行目の "$i++;" です。
検索結果があれば、インクリメントされます。
その結果、59~61行のコメントの書き出しを判断しているのです。

 

簡単なプログラムですがご理解いただけたでしょうか。

sample_search.php をダウンロードして試したい方は、一括ダウンロードをご利用ください。

このページの練習問題は、「あいまい検索」です。
こちらも挑戦ください!

 

 

一括ダウンロード

DB練習問題

 

 

 

 

 

 

 

 

 

 

 

 

ex-mode.net | ツールEX | 素材EX | アフィモール | 初級者向 初めてのホームページ作り | Htmlタグ辞典 | 初めてのプランター菜園 | リンク・ボード
気のみ気のままなブログ | CSSガイドEX | ホビ★コレ | 班長日記!

▲UP

Copyright (C) ex-mode.net 2017. All Rights Reserved.