1. 程式人生 > >我的php學習筆記(三十七) PHP站內搜尋:多關鍵字、加亮顯示

我的php學習筆記(三十七) PHP站內搜尋:多關鍵字、加亮顯示

一、SQL語句中的模糊查詢        主要通過LIKE(不區分大小寫)關鍵字實現模糊查詢。LIKE條件一般用在指定搜尋某欄位的時候, 通過"%"或者" _" 萬用字元的作用實現模糊查詢功能,萬用字元可以在欄位前面也可以在後面或前後都有。只通過LIKE是無法實現模糊查詢的,因此萬用字元的作用不可忽略。 下面是三個例項: 搜尋以PHP開頭:
SELECT * FROM table WHERE title  LIKE  'PHP%' 
搜尋以PHP結束:
SELECT * FROM table WHERE title  LIKE  '%PHP'

搜尋包含PHP100:
SELECT * FROM table WHERE title  LIKE  '%PHP%'  注:%表示0個或多個字元構成的字串,_表示單個字元,類似於正則表示式中元字元的作用 在LIKE後面可以增加其他條件,類似於if語句 例子的資料庫中的內容

<?php
	$conn = @mysql_connect("localhost", "root", "") or die("資料庫連結錯誤");
	mysql_select_db("bbs", $conn);
	mysql_query("set names 'GBK'"); //使用GBK中文編碼;
	
	if($_GET['key']) {
		
		$sql = "SELECT * FROM `text` WHERE content LIKE '%$_GET[key]%'";
		$query = mysql_query($sql);
		
		while($r=mysql_fetch_array($query)) {
			echo "$r[content]"."<br>";
		}
	}
	
?>

<html>
	<body>
	<form action="" method="get">
	關鍵字:
	<input type="text" name="key" />
	<input type="submit" name="sub" value="搜尋" />
	</form>
	</body>
</html>

搜尋php的效果圖
二、多個關鍵字搜尋的原理和技巧 單個關鍵字搜尋的步驟:提交表單->PHP檔案接收關鍵字->執行SQL->輸出結果 如果是多關鍵字的時候:在提交表單的時候將多個關鍵字用空格或+號分隔開,然後PHP檔案接收到所提交的字串後,通過一些函式如:explore函式將字串拆分成多個關鍵字存放在陣列中;然後就可以在資料庫中通過多個LIKE模糊查詢得到所要查詢的內容。 三、替換關鍵字高亮顯示 通過模糊查詢得到所要的內容後,使用正則表示式替換所要查詢的內容,可以通過改變顏色,加粗等改變顯示的效果。
<?php
	$conn = @mysql_connect("localhost", "root", "") or die("資料庫連結錯誤");
	mysql_select_db("bbs", $conn);
	mysql_query("set names 'GBK'"); //使用GBK中文編碼;
	
	if($_GET['key']) {
		$k = explode(" ", $_GET[key]);
		
		$sql = "SELECT * FROM `text` WHERE content LIKE '%$k[0]%' or content LIKE '%$k[1]%'";
		$query = mysql_query($sql);
		
		while($r=mysql_fetch_array($query)) {
			$r[content] = preg_replace("/($k[0])/i", "<font color=red><b>\\1</b></font>", $r[content]);
			$r[content] = preg_replace("/($k[1])/i", "<font color=red><b>\\1</b></font>", $r[content]);
			echo "$r[content]"."<br>";
		}
	}
	
?>

<html>
	<body>
	<form action="" method="get">
	關鍵字:
	<input type="text" name="key" />
	<input type="submit" name="sub" value="搜尋" />
	</form>
	</body>
</html>
查詢php 學習的效果圖


相關推薦

php學習筆記 PHP搜尋關鍵字顯示

一、SQL語句中的模糊查詢        主要通過LIKE(不區分大小寫)關鍵字實現模糊查詢。LIKE條件一般用在指定搜尋某欄位的時候, 通過"%"或者" _" 萬用字元的作用實現模糊查詢功能,萬用字元可以在欄位前面也可以在後面或前後都有。只通過LIKE是無法實現模糊查詢的

PHP搜尋關鍵字顯示

一、SQL語句中的模糊查詢       主要通過LIKE(不區分大小寫)關鍵字實現模糊查詢。LIKE條件一般用在指定搜尋某欄位的時候, 通過"%"或者" _" 萬用字元的作用實現模糊查詢功能,萬用字元可以在欄位前面也可以在後面或前後都有。只通過LIKE是無法實現模糊查詢的,因

OpenCV學習筆記——實用函式系統函式巨集core

如果你想在OpenCV的基礎上自己開發一些演算法,我覺得core這部分內容不得不精啊,能熟練使用OpenCV的資料結構是開發的基礎,又是重中之重。最近就又拌在這上頭了,所以再重溫一下。這次分析一下Utility and System Functions and Macros

Unity3D學習筆記頂點偏移和溶解

mar exc car struct range pass 偏移 discard 通過 頂點偏移 沿向量方向偏移,沿自身坐標系方向偏移 沿法線方向偏移,球體放大,立方體拆分 Shader "Lesson/VFVertOffsetVertex" { Proper

Python學習筆記SMTP發送郵件

email debug lib 第一個 發郵件 參數 html郵件 命令 兼容 摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432005

Linux學習筆記sed

sedsedsed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾

Linux學習筆記日常運維

ifconfig一、linux網絡相關、 ifconfig ifconfig //查看網卡ip(yum install net-tools) ifup ens33/ifdown ens33 //開啟網卡,關閉網卡,只有一個網卡時,一旦關閉了網卡就會斷開遠程鏈接,只能去服務器主機重新打

Linux學習筆記iptables filter表案例 iptables nat表應用

iptables filter表案例、 iptables nat表應用 一、iptables filter表案例需求:將80、20、21端口放行,對22端口指定特定的ip才放行以下為操作方法:vim /usr/local/sbin/iptables.sh //加入如下內容#! /bin/bas

Effective_STL 學習筆記 用 distance 和 advance 把 const_iterator 轉化成 iterator

  並不存在從 const_iterator 到 iterator 之間的隱式轉換 一種安全的、可移植的方法獲取他所對應的 iterator: 1   typedef deque<int> IntDeque;     // 方便的typedef 2   typedef Int

Effective_STL 學習筆記 瞭解你的排序選擇

  排序出 20 個質量最高的 Widget,一種演算法叫作 partial_sort: 1   bool qualityCompare( const Widget & lhs, const Widget & rhs ) 2   { 3     // 返回 lhs 的質量是

Effective_STL 學習筆記 通過 mismatch 和 lexicographical 比較實現簡單的忽略大小寫字串比較

  怎麼用 STL 進行忽略大小寫的字串的比較?   首先實現兩個字元忽略大小寫的比較: 1   int ciCharCompare( char c1, char c2 )      // 忽略大小寫比較字元 2   { 3     int Ic1 = tolower(

Effective_STL 學習筆記 了解 copy_if 的正確 實現

了解 算法 十六 ota eve nbsp remove rep ack STL 提供了 11 個名字帶有 “copy” 的算法     copy        copy_backward     replace_copy     reverse_copy     re

Effective_STL 學習筆記 用純函數做判斷式

函數類 effect false 函數 轉換 bsp 對象 stl 排序 1. 判斷式是返回 bool (或者其他隱式轉換為 bool 的東西)。判斷式在 STL 中廣泛使用。標準關聯容器的比較函數是判斷式,判斷式函數常常作為參數傳給算法,比如 find_if 和多種排

Effective_STL 學習筆記 避免產生只寫程式碼

  假設有一個 vector<int>,想要去掉 vector 中的值小於 x 而出現在至少和 y 一樣大的最後一個元素之後的所有元素 1   vector<int> v; 2   int x, y; 3   . . . 4   v.erase( remove_if

Effective_STL 學習筆記 避免產生只寫代碼

有一個 find tor ive type 使用 rbegin pan begin 假設有一個 vector<int>,想要去掉 vector 中的值小於 x 而出現在至少和 y 一樣大的最後一個元素之後的所有元素 1   vector<int>

oracle sql 高階程式設計學習筆記

半聯結定義 當兩張表進行聯結的時候,如果表1中的資料行是否出現在結果集中需要根據表2中出現或不出現至少一個相匹配的資料行來判斷,這種情況就會發生半聯結;而反聯結便是半聯結的補集,它們會作為資料庫中常見的聯結方法如NESTED LOOPS,MERGE SORT

Javaweb學習筆記————————泛型泛型的萬用字元反射泛型資訊反射註解註解

泛型     1.泛型類:具有一個或多個型別變數的類,稱之為泛型類     class A<T>{     }     2.在建立泛型例項時,需要為其型別變數賦值     A<String> a = new A<String>();

Java開發筆記利用正則串分割字串

前面介紹了處理字串的常用方法,還有一種分割字串的場景也很常見,也就是按照某個規則將字串切割為若干子串。分割規則通常是指定某個分隔符,根據字串內部的分隔符將字串進行分割,例如逗號、空格等等都可以作為字串的分隔符。正好String型別提供了split方法用於切割字串,只要字串變數呼叫split方法,並把分隔符作為

Django學習筆記datetime.timedelta類介紹

datetime.timedelta物件代表兩個時間之間的時間差,兩個date或datetime物件相減就可以返回一個timedelta物件。  如果有人問你昨天是幾號,這個很容易就回答出來了。但是如果問你200天前是幾號,就不是那麼容易答出來。而在Python中dateti

Django學習筆記:django orm extra

extra 在django orm中使用複雜的sql語句 extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些情況下,Django 的查