[英]php and MYSQL SELECT issues with arrays
我想知道您是否可以告诉我我的代码有什么问题,或者指出我要去哪里,因为我无法显示任何结果。 $ _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>";
?>
<?
因为PHP 5.4之后不支持它们。 $link
undefined) mysql_
)。 参见注释(替代mysqli_
或PDO
) 您应该使用$_SERVER
的REQUEST_METHOD
索引来确定是否已发布脚本。
if( $_SERVER[REQUESTED_METHOD] == 'POST' && !empty($_POST['checkbox']) ) {
... }
您需要使用错误处理来检查错误。 如果您echo $sql;
您会看到未填充复选框:
SELECT * FROM products WHERE id=''
您的脚本容易受到SQL注入的攻击。 切换到当前API时,请使用绑定的参数。
$_POST[checkbox]
是数组吗? sprintf
将无法按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)";
请注意,这尚未消毒,您仍然容易受到注射的伤害。
如果$_POST["checkbox"]
是一个像您所说的数组,则不能在sprintf
中将其用作字符串。 尝试使用array_pop
返回该数组或类似数组的最后一个值。
您可以foreach
数组中的每个元素:
foreach ($_POST['checkbox'] as $checkbox) {
$where[] = sprintf(" id='%s'",$checkbox);
}
尽管如果要求ID等于两个不同的整数,这可能只会创建一个无效的SQL语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.