1

我有一个包含列的表

GroupID | GroupName | GroupDesc | Overs |
-----------------------------------------
1       | Test Group|Description| Yes   |

我有一个名为 list.php 的页面,它当前为组表(上图)中数据库中的每一行创建 URL。

该代码不是最漂亮的,但我认为它有效,这是他的代码

列表.php

<?php 
    $result = mysql_query("SELECT * FROM groups");

    while($row = mysql_fetch_array($result))
        {
            echo "<div class=\"divider\">";
            echo "<a href=\"group.php?id=";
            echo $row['GroupID'];
            echo "\">";
            echo $row['GroupName'];

            echo "</a>";
            echo "<br><br>";
            echo $row['GroupDesc'];
            echo "<br>";
            echo "Over 18's: ";
            echo $row['AgeRes'];
            echo "</div>";
        }
?>

然后创建一个 URL,例如http://domainname.com/group/group.php?id=1

这就是我的问题所在 - 我将如何使用 URL 中的 ID 部分从上面的数据库中选择相关行?

我的第二个问题是我们如何阻止它成为 SQL 可注入的?

我对这一切都很陌生,所以我很想得到关于这个和任何好的阅读资源的答案,这样我就可以进一步发展我的技能。

谢谢

4

2 回答 2

1

要回答第一个问题,您需要在查询中使用 where 子句。我不确定我使用的列名是否正确,但我相信你明白了。有大量免费的在线交互式 SQL 教程可供您了解如何编写查询代码。

要回答您的第二个问题,您可以使用该mysql_real_escape_string()函数来整理正在传递的变量。然而,更好的方法是更改​​连接到数据库的方式。PDOmysqli在连接数据库方面做得更好。你应该考虑学习那些 - 特别是如果你刚刚开始。

<?php 
    $id=mysql_real_escape_string($_GET['id']);
    $result = mysql_query("SELECT * FROM groups where id=".$id.";");
    // Am not 100% sure if that is the right column name to use for your database.


    while($row = mysql_fetch_array($result))
    {
        echo "<div class=\"divider\">";
        echo "<a href=\"group.php?id=";
        echo $row['GroupID']; 
        echo "\">";
        echo $row['GroupName'];

        echo "</a>";
        echo "<br><br>";
        echo $row['GroupDesc'];
        echo "<br>";
        echo "Over 18's: ";
        echo $row['AgeRes'];
        echo "</div>";
    }
?>
于 2012-07-24T22:23:01.117 回答
1

Q1:您需要检索请求变量并包含在您的 SQL 查询中:

$result = mysql_query("SELECT * FROM groups WHERE id = '" . $_GET['id'] . "'");

Q2:您应该先转义值,然后再将其包含在查询中:

$id = (int)mysql_real_escape_string($_GET['id']);

然后将您的查询更改为以下内容:

$result = mysql_query("SELECT * FROM groups WHERE id = '" . $id . "'");
于 2012-07-24T22:23:35.000 回答