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を学ぼう!

◆Answer! - DB練習問題4の答え

【解答】

【sample_search.php】

01|<html lang="ja">
02|<head>
03|<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
04|<title>DB練習問題4のサンプルプログラムです。</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 LIKE ? LIMIT 20");
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){
60|      echo "<p style='margin:0 0 0 20px; font-cloro:red'>
61|      検索結果がありません。
62|      </p> ";
63|    }
64|
65|    //DBから切断する ( $db = null; も可能)
66|    unset( $db );
67|  }
68|?>
69|</body>
70|</html>

48~49行の2行を少し改編するだけで曖昧(あいまい)検索ができるようになります。
48行目の "LIKE ?" 、LIKE 句を利用して曖昧検索を実現しています。
とはいっても何のヒントもなかったわけですから少し難しかったでしょう・・・

同じ行の "LIMIT" は検索する件数に制限をかけたものです。
例えば、"a" というキーワードで検索をすると膨大な数の検索結果を返すことになります。
その為、リミットを設けているのです。

 

49行目の

$stmt->execute(array($word."%"));

"$word" の後に "%" がついてます。
これはワイルドカードの様なもので以下の文字が利用できます。

文 字

意 味

%

0文字以上の任意の文字列

_

任意の文字列

 

例えば、「book」を検索すると以下のクエリを実行することになります。

SELECT * FROM items WHERE word LIKE 'book%' LIMIT 20");

このクエリで前方一致で昇順で検索されるこになります。

例えばクエリを

SELECT * FROM items WHERE word LIKE '%book' LIMIT 20");

とすると後方一致検索になり、

SELECT * FROM items WHERE word LIKE '%book%' LIMIT 20");

とすると前方後方一致検索になります。

 

この曖昧検索(前方一致)の動作確認がサンプルページ で行えます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

▲UP

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