2012-06-20 123 views
0

我有一個包的完整列表,我希望用戶選擇使用複選框並比較軟件包。用戶選擇後,我將使用從複選框數組獲得的packages_id將所有包數據顯示爲.PDF文件。我如何分開數組並注入到mysql select?的$ _ POSTPHP Array選擇mysql

輸出[ '比較']: [14,15,16]

MySQL查詢:

$packages=mysql_query(" 
select * 
from package 
where id in (" . implode(',', $_POST['compare']) . ") 
LIMIT 4"); 

回答

2

這應該爲你工作

mysql_query(" 
    select * 
    from package 
    where id in (" . implode(',', $_POST['compare']) . ") 
"); 

妥善保管消毒和驗證輸入

+0

我不能得到這個工作。我認爲,不要把ID IN('14,15,16')放在ID IN('14','15','16')中。 – Psinyee

+0

我的代碼在(14,15,16)''中創建'id是有效的;而不是在'('14 15 16')''中的id,這將無法正常工作 –

+0

是否有可能把它分解成3個mysql查詢?就像一個用於id 14,然後另一個用於15,最後一個用於16。 PDF只能在創建時捕獲一個while循環。 – Psinyee

0

如果我理解你的問題吧,你想要幫助查詢。

if(empty($_POST['compare'])) 
    // stop execution because they didn't pick anything  

$packages = mysql_query( 
    " SELECT * FROM package WHERE id = '". 
     implode("' OR id = '", $_POST['compare']) 
     ."'"); 

看看http://us3.php.net/implode直到你做出改變,以PDO,這是編寫查詢有史以來最好的事情。

你應該意識到你根本沒有清理你的查詢。即使您認爲您正在控制複選框的值以及查詢的內容,僞造表單數據也非常容易。因此,您需要執行安全檢查。

一個簡單的方法來做到這一點是:

foreach($_POST['compare'] as $compare){ 
    $sql[] = sanitize($compare); 
} 

很顯然,你需要一個的sanitize功能。這些在SO上很容易找到。然後,您可以在查詢中使用$ sql而不是$ _POST ['compare']。