2012-12-12 61 views
2

我正在使用我的網站上的搜索引擎。用戶可以在URL中添加與GET一起提交的條件。根據GET參數重寫查詢

當用戶選擇例如1級的標準,它看起來像這樣:

localhost/search.php?course=1&price=&name= 

他們有3個標準,他們可以選擇,所以你看他唯一入選的課程。

現在我必須根據標準從數據庫中選擇,所以我的代碼如下所示:

if ($_GET['price'] > 0 && $_GET['name']) 
{ 
    $search_price = $_GET['price']; 
    $search_name = $_GET['name']; 

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND price < $search_price AND name LIKE '%$search_name%'"); 
} 
elseif ($_GET['price'] > 0) 
{ 
    $search_price = $_GET['price']; 

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND price < $search_price"); 
} 
elseif ($_GET['name']) 
{ 
    $search_name = $_GET['name']; 

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND name LIKE '%$search_name%'"); 
} 
else 
{ 
    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id'"); 
} 

while ($row2 = mysql_fetch_assoc($result2)) 
             { 
..... 

但是,這不可能是正確的做法,因爲如果最終用戶可以選擇10個標準,這是怎麼回事是一個很長的代碼

我該如何解決這個問題?

+2

'SQL injection' +廢棄的'mysql_ *'功能....諮詢,學習PDO與事先準備好的聲明。 – itachi

回答

1

我會做的是動態創建sql查詢,然後在最後執行它。因此,像這樣

$query_string = "SELECT blahblah, blahblah, blah blah from blahx where 1=1 "; 
$where = ""; 

if(isset($_GET['somecriteria'])) 
{ 
    $where .= " AND blahblah = $_GET['somecriteia'] "; 
} 
if(isset($_GET['someOTHERcriteria'])) 
{ 
    $where .= " AND blahblah=$_GET['someOTHERcritera'] "; 
} 
mysql_query($query_string . $where); 

等。 必須注意這只是向你展示如何實現你的目標。這顯然很容易發生SQL注入攻擊,你必須清理這些東西。

+0

應該是'。='不是'+ =' – SeanWM

+0

@謝恩哈,謝謝。讓我的語言混合起來有時:) –

0

使用$ _post向PHP腳本發送大量信息。使用get的時候,你應該創建url來包含獲取調用,只有當它們被填充。因此,如果沒有選擇價格,url不應包含「price =」。這將導致您的接收腳本出現問題。

您的數據庫腳本可以通過一次呼叫完成,只包括所選標準。

Myqsl現在已經貶值,你需要尋找到Myqsli或PDO