非常抱歉,關於部落格內 PHP 的部分目前已經停止維護,因本人已經很久沒有寫 PHP ,且文章中所使用的 PHP 版本偏舊,希望有心學習 PHP 的朋友們,可以參考 Codecademy 的課程,或近一步嘗試 Laravel 這個 PHP 框架(可透過 laracasts 學習),若有找不到錯的學習資源也歡迎在留言串分享,方便有需要的人能夠有更多學習的管道!
在這一堂課我們會沿用上堂課所使用的資料庫,透過語法來練習怎麼樣篩選資料,並把篩選後資料呈現於網頁上。
結果可以看這裡
mysql_query("select * from 資料表名稱 where 欄位名稱=' 篩選條件'"):篩選出等同於「篩選條件」的資料
mysql_query("select * from 資料表名稱 where 欄位名稱 like % '篩選條件'%"):篩選具有「篩選條件」的資料
mysql_query("select * from 資料表名稱 where 欄位名稱 like % '篩選條件'%"):篩選具有「篩選條件」的資料
我們使用上一堂課所建立的資料庫繼續練習。
資料篩選
精確搜尋
篩選資料時,我們同樣會用到mysql_query的語法,這個語法的意思就類似「我告訴你」,然後後在輸入要告訴它的內容,這裡我希望它幫我篩選只呈現女生的資料,我們就可以用這樣的語法:mysql_query("select * from 資料表名稱 where 欄位名稱=' 篩選條件'"),套到我們的資料庫就是,mysql_query("select * from member where memSex='女' "),這樣的作法,其時做的是「精確搜尋」。
這樣在echo的時候,就只會呈現出性別為女的資料。
模糊搜尋
如果我是要在地址中篩選有「南」的資料,則可以輸入:
$data=mysql_query("select * from member where memCity like '%南%'")
使用like和%就可以做模糊搜尋,只要城市裡面有南,不管這個是在第一個字,第二個,還是第三個,資料都會呈現:
透過類似的方法,如果我們輸入的是("select * from member where memCity like '%南'"),則會篩選出前面可以隨便,但最後一個字一定要是南。
如果是輸入("select * from member where memCity like '南%'"),則會篩選出後面可以隨便,但第一個字一定要是南的資料。
讓網友自訂篩選條件
既然我們知道篩選的語法了,那我們就要設計一個介面,讓網友可以自行篩選他想要的資料才對,該怎麼做呢?
一樣要先建立一個表單。
![](https://1.bp.blogspot.com/-ljsWVnGC9RA/VRqGfaMD5DI/AAAAAAAAXGU/MBZVpWBtx50/s1600/1.png)
目標空白,就是傳送給自己的意思
這裡表單中所輸入的資料,我把它稱做city
透過if指令,即可達成根據網友輸入的資料加以進行模糊搜尋(若要進行精確搜尋,則不要加上%),這段語法的意思是,如果網友有輸入資料($_POST['city'] != ' ')則將城市根據網友所輸入的值進行模糊篩選,否則呈現所有的資料。
這時候,透過預覽,網頁就已經會根據你所輸入的資料加以搜尋了。
這裡還有一個很特別的地方,是文字框的預設值,在剛剛的預覽中,你會發現,當你點完搜尋後,搜尋框的內容就消失了,這點其實蠻不符合直覺的,為了修正這一點,我們可以去修改文字框內的預設值。
這裡先隨便打個abc,讓我們知道預設值的語法在程式碼的哪裡
預設值是value,我們把value裡的東西改成$city,因為在前面的php語法中,我們已經定義$city = $_POST['city'],也就是文字框內輸入的資料,所以當預設值等同於city時,搜尋框內預設值,就會變成是我們剛剛搜尋的內容。
我們也可以讓網友根據性別加以篩選
一樣先建立表單
讓不拘變成預設核取的狀態
接著,我把按鈕名稱,取做sex,並且修改各自的value
最後在最上面的地方修改程式碼,把它改成
if($_POST['city'] != '' or $_POST['sex']!= ' '),意思是只要city的文字框或sex的核取按鈕有被選取的話(不是空白),則執行下面的語法,而下面的語法新增一行and memSex = '$sex',這樣就可以了。
按下搜尋時,網頁就會根據搜尋的指令加以搜尋了。
這堂課完整的語法如下
<?php mysql_connect("localhost","root","12345678");//連結伺服器 mysql_select_db("contact");//選擇資料庫 mysql_query("set names utf8");//以utf8讀取資料,讓資料可以讀取中文 if($_POST['city']!='' or $_POST['sex']!=''){ $city=$_POST['city']; $sex=$_POST['sex']; $data=mysql_query("select * from member where memCity like '%$city%' and memSex like '$sex'"); }else{ $data=mysql_query("select * from member"); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>資料篩選</title> </head> <body> <form id="form1" name="form1" method="post" action=""> <p>城市: <input name="city" type="text" id="city" value="<?php echo $city?>" /> </p> <p> <input name="sex" type="radio" id="radio" value="%" checked="checked" /> 不拘 <input type="radio" name="sex" id="radio2" value="男" /> 男 <input type="radio" name="sex" id="radio3" value="女" /> 女</p> <p> <input type="submit" name="button" id="button" value="搜尋" /> </p> </form> <p></p> <table width="700" border="1"> <tr> <td >編號</td> <td >姓名</td> <td >性別</td> <td >生日</td> <td >地址</td> <td >城市</td> <td >國籍</td> <td>郵遞區號</td> <td >電話</td> <td>備註</td> </tr> <?php for($i=1;$i<=mysql_num_rows($data);$i++){ $rs=mysql_fetch_row($data); ?> <tr> <td><?php echo $rs[0]?></td> <td><?php echo $rs[1]?></td> <td><?php echo $rs[2]?></td> <td><?php echo $rs[3]?></td> <td><?php echo $rs[4]?></td> <td><?php echo $rs[5]?></td> <td><?php echo $rs[6]?></td> <td><?php echo $rs[7]?></td> <td><?php echo $rs[8]?></td> <td><?php echo $rs[9]?></td> </tr> <?php } ?> </table> <p> </p> </body> </html>
結果
結果可以看這裡
以上內容均為本人在馬老師雲端研究室學習所整理之筆記
您好! 請問若想尋找台北+台中的人要怎麼寫呢?
回覆刪除Hi,你指的是臺北或台中人嗎?
刪除select * from member where memCity ='台北' or memCity ='台中'
您好,感謝您的分享,受益無窮阿!
回覆刪除但是想請問您要怎麼把寫好的成果放到網路上供別人使用呢?
像您文末結果中的「這裡」一樣能夠有個連結
摸索了一天還是不知道該怎麼用> <