我想知道你是否可以告诉我我的代码有什么问题,或者指出我哪里出错了,因为我无法显示任何结果。 $ _POST ['checkbox']是一个数组。
<?
$get_id=$_POST['checkbox'];
if(empty($get_id)) {
echo("<h3>You didn't select anything.</h3>");
} else {
$where[] = sprintf(" id='%s'",$_POST["checkbox"]);
}
$where_str = " WHERE ".implode(" AND ",$where);
$sql = "SELECT * FROM products $where_str";
$result = mysql_query($sql, $link);
echo "<table>";
echo "<tr> <th>Description</th> </tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr><td>";
echo $row['description'];
echo "</td></tr>";
}
echo "</table>";
?>
答案 0 :(得分:3)
<?
,因为PHP 5.4之后不支持它们。$link
undefined)mysql_
)。查看备选方案的评论(mysqli_
或PDO
)您应该使用REQUEST_METHOD
$_SERVER
索引来确定您的脚本是否已发布。
if( $_SERVER[REQUESTED_METHOD] == 'POST' && !empty($_POST['checkbox']) ) {
... }
您需要使用错误处理来检查错误。如果您echo $sql;
,您会看到未填充复选框:
SELECT * FROM products WHERE id=''
您的脚本容易受到SQL注入攻击。切换到当前API时,请使用绑定参数。
$_POST[checkbox]
是一个数组吗?sprintf
将无法正常工作,因为您将整个$_POST[checkbox]
数组传递给它。你需要迭代它来格式化它。 (见奥利的回答)示例强>
假设您的HTML看起来像这样:
<form method="post" ...>
<input type="checkbox" name="checkbox[]" value="1" />
<input type="checkbox" name="checkbox[]" value="2" />
<input type="checkbox" name="checkbox[]" value="3" />
<input type="submit" name="submit" />
</form>
并检查所有三个盒子;它会产生这个数组:
Array ( [0] => 1 [1] => 2 [2] => 3 )
跟随Collie的循环:
foreach ($_POST['checkbox'] as $checkbox) {
$where[] = sprintf(" id='%s'",$checkbox);
}
$where
将如下所示:
Array ( [0] => id='1' [1] => id='2' [2] => id='3' )
你的脚本的其余部分应该工作。但是,您应该考虑使用IN
运算符。
这样您就可以跳过循环并只使用implode
:
$where = "'" . implode("', '", $_POST[checkbox]) . "'";
产生:
'1', '2', '3'
并结合IN
:
$sql = "SELECT ... FROM WHERE id IN ($where)";
请注意,这并未消毒,您仍然容易受到注射。
答案 1 :(得分:0)
如果$_POST["checkbox"]
是您所说的数组,则不能将其用作sprintf
中的字符串。尝试使用array_pop
返回该数组的最后一个值或类似值。
您可以foreach
遍历数组中的每个元素:
foreach ($_POST['checkbox'] as $checkbox) {
$where[] = sprintf(" id='%s'",$checkbox);
}
虽然如果要求ID等于两个不同的整数,这可能只会创建一个无效的SQL语句。