2013-04-17 113 views
0

我有一个页面,用户可以选择多个复选框,然后提交表单,在下一页显示他们检查了更多细节。但我的查询不起作用。我怎么能通过复选框数据到MySQL查询来获取其余的数据。MYSQL查询在哪里php数组

这是我的查询:

$c=$_POST['select']; 

$result=mysqli_query($con, 'SELECT * FROM item WHERE item_number IN ("'.implode('","', $c).'")'); 

echo "<table border='1'> 
<tr> 
<th>item name</th> 
<th>item number</th> 
</tr>"; 
while($row = mysqli_fetch_array($result)) 
{ 
    echo "<tr>"; 
    echo "<td>" . $row['item_name'] . "</td>"; 
    echo "<td>" . $row['item_number'] . "</td>"; 
    echo "</tr>"; 
} 
    echo "</table>"; 


mysqli_close($con); 

当运行查询我得到这个错误:

警告:mysqli_fetch_array()预计参数1被mysqli_result,布尔给

它没有返回结果,但如果我回声查询并复制粘贴到MySQL我得到的结果,但从PHP运行时我只得到错误。

任何帮助,将不胜感激

+0

为什么它不起作用?你从数据库或从网络服务器得到的错误是什么? –

+1

什么是$ c?另外,你应该通过运行mysqli_real_escape_string() – Seth

+0

改变implode('','',$ c)implode(',',$ c)的所有值来保护你的数据库 –

回答

-4

$ C并不似乎是PHP的数组,所以它不能在这里被引爆

+1

的有效连接“如果我回显(”'.implode('“,”',$ c)。“”)我得到值“ –

+0

什么样的数据类型你从$ _POST ['选择'] - 有效的PHP数组或蜇? – Ilya

+0

是的,它会打印出我从表单中选择的所有值,如果我回显它。 –

0

更新你的代码的版本放出来的错误消息的查询是否有一个。同时对输入进行净化处理

<?php 
if (is_array($_POST['select'])) 
{ 
    $c = array_map('array_map_callback', $_POST['select']); 

    $result = mysqli_query($con, 'SELECT item_name, item_number FROM item WHERE item_number IN ("'.implode('","', $c).'")') OR die(mysqli_error($con)); 

    echo "<table border='1'> 
    <tr> 
    <th>item name</th> 
    <th>item number</th> 
    </tr>"; 
    while($row = mysqli_fetch_array($result)) 
    { 
     echo "<tr>"; 
     echo "<td>" . $row['item_name'] . "</td>"; 
     echo "<td>" . $row['item_number'] . "</td>"; 
     echo "</tr>"; 
    } 
    echo "</table>"; 
    mysqli_close($con); 
} 
else 
{ 
    echo "No items selected"; 
} 

function array_map_callback($a) 
{ 
    global $con; 
    return mysqli_real_escape_string($con, $a); 
} 

?> 

希望这应该将查询的错误信息放出。