2012-06-20 112 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']。