gpt4 book ai didi

数组的 php 和 MYSQL SELECT 问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:38 24 4
gpt4 key购买 nike

我想知道您能否告诉我我的代码有什么问题或指出我哪里出错了,因为我无法显示任何结果。 $_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>";
?>

最佳答案

  1. 你应该避免使用短标签 <?因为它们在 PHP 5.4 之后不受支持。
  2. 您没有连接到 MySQL($link 未定义)
  3. 您正在使用已弃用的 API (mysql_)。查看替代方案的评论(mysqli_PDO)
  4. 你应该使用 REQUEST_METHOD $_SERVER的索引以确定您的脚本是否已发布。

    if( $_SERVER[REQUESTED_METHOD] == 'POST' && !empty($_POST['checkbox']) ) { ... }

  5. 您需要使用错误处理来检查错误。如果你echo $sql;您会看到未填充复选框:

    SELECT * FROM products WHERE id=''

  6. 您的脚本容易受到 SQL 注入(inject)攻击。当您切换到当前 API 时,请使用绑定(bind)参数。

  7. $_POST[checkbox]数组?
  8. 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)

Following Collie's loop:

foreach ($_POST['checkbox'] as $checkbox) {
$where[] = sprintf(" id='%s'",$checkbox);
}

$where看起来像:

Array(    [0] =>  id='1'    [1] =>  id='2'    [2] =>  id='3')

The rest of your script should work. However, you should look into using the IN operator.

That will enable you to skip the loop and just use implode:

$where = "'" . implode("', '", $_POST[checkbox]) . "'";

产生:

'1', '2', '3'

And combined with IN:

$sql = "SELECT ... FROM WHERE id IN ($where)";

请注意,这没有经过 sanitizer ,您仍然容易受到注入(inject)。

关于数组的 php 和 MYSQL SELECT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15041972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com