iT邦幫忙

0

PHP用下拉式選單後以中文關鍵字搜尋搜尋不到,但用數字改查編號就可以?如何避開中文字搜尋變亂碼而查不到的問題?

php

抱歉我原本用一般的文字bar來作中文關鍵字的查詢是可以查的到,但是改用下拉式選單後再用中文字查詢就查不到,若改用數字查詢ID就可以,想請問專業的大大們要如何才能避開中文字查詢亂碼的問題?

<?php
    header("Content-Type: text/html; charset=utf8_unicode_ci");
    include("connMysql.php");
    $seldb=@mysql_select_db("hmo");
    if (!$seldb) die ("資料庫連結失敗");
    mysql_query("SET NAMES 'utf8'");
if(isset($_GET["keyword"])&&($_GET["action"]="1")&&($_GET["keyword"]!="")){
    $sql_query = "SELECT * FROM `access` WHERE `cName` LIKE '%".$_GET["keyword"]."%'  " ;
}if(isset($_GET["keyword"])&&($_GET["action"]="18")&&($_GET["keyword"]!="")){
	$sql_query = "SELECT * FROM `access` WHERE `cID` LIKE '%".$_GET["keyword"]."%'  " ;
}else{
    $sql_query = "SELECT * FROM `access` ORDER BY `cID` DESC";
}
function keepURL(){
    $keepURL = "";
    if(isset($_GET["keyword"])) $keepURL.="&keyword=".urlencode($_GET["keyword"]);

    return $keepURL;
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>會員查詢系統</title>
<form name="form1" method="GET" action="hmo-2.php" >
<input name="keyword" type="hidden" value="keyword">
<select name="action" id="action" >
            <option value="1">姓名</option>
            <option value="18">編號</option>
</select>
wiseguy iT邦超人 1 級 ‧ 2013-01-05 19:47:24 檢舉
又來了 .... 怎麼學 PHP 的人都不關注一下 SQL injection 是什麼,都是這樣直接就把 $_GET, $_POST 大喇喇地接在 SQL 上就送進資料庫了 ...

難怪 PHP 十多年來一直擺脫不了《欠缺安全性的程式語言》這種無奈的惡名 ... 嘆氣
2
Samと可樂快跑
iT邦研究生 3 級 ‧ 2013-01-26 11:01:52
最佳解答

header("Content-Type:charset=utf8")

這樣呢?

看更多先前的回應...收起先前的回應...

header("Content-Type:charset=utf-8")
應該是這樣才對。

我的感覺,你應該只是中文字編碼錯誤所以無法正確判斷資料。

cheche905 iT邦新手 5 級 ‧ 2013-01-26 12:17:37 檢舉

我也覺得,剛試過了還是一樣查不到

你有試著把資料庫的資料撈出來和你傳送的資料撈出來比對嗎?
另外我發現原來你是用GET
何不將表單改用POST來處理?
你用GET會有網址編碼的問題
如果你將網址做urlencode的話,你的程式就要用urldecode做反解才行。

你直接輸出$sql_query看看
然後輸出的值直接丟去PHPMYADMIN就知道是甚麼結果= =+

6
yach
iT邦新手 4 級 ‧ 2013-01-06 13:57:22
<pre class="c" name="code">($_GET["action"]="1")

改成中文字查詢的時候有改成兩個=嗎?

如下:

<pre class="c" name="code">($_GET["action"]=="姓名")
cheche905 iT邦新手 5 級 ‧ 2013-01-06 18:34:09 檢舉

改成兩個等於後也沒辦法,用中文字查詢會變成else的情況,就是全部列出姓名列表。

4
炎之虛空
iT邦好手 1 級 ‧ 2013-01-07 09:27:08

直接將

<pre class="c" name="code">$_GET["keyword"]

改成

<pre class="c" name="code">urlencode($_GET["keyword"])
cheche905 iT邦新手 5 級 ‧ 2013-01-07 18:34:13 檢舉

urlencode

試過了也不行

你要不要輸出你的$_GET["keyword"] 看看會出現甚麼數值

cheche905 iT邦新手 5 級 ‧ 2013-01-11 10:06:42 檢舉

我用$_GET["keyword"] 輸出後的確是中文姓名沒錯,但是在下拉式搜尋時卻查不到。

4
ugm
iT邦新手 5 級 ‧ 2013-01-10 16:38:43

下拉選單的name為「action」所以條件應設為$_GET["action]

cheche905 iT邦新手 5 級 ‧ 2013-01-11 10:10:25 檢舉

if的條件式$_GET["action"] 是要改哪一段呢?因為我改成單引號也是查不到?

我要發表回答

立即登入回答