如何使用$ _GET ['id']为用户创建配置文件URL

时间:2010-08-04 14:44:22

标签: php mysql get

如果我正确执行以下步骤,有人可以告诉我:

当用户想要在网站上注册时,register.php会处理他/她的请求。以下是register.php的一些代码:

$sql="INSERT INTO Members (fldFullName, fldEmail, Password, Gender, DOB)
VALUES
('$fname','$email','$pass', '$gender', '$date')";

特别是当我编写上面的代码时,我对PHP / MySQL有点新鲜,但仍然是。因此,我通过 phpmyadmin 在表格中手动创建了上述所有字段。此外,我还通过 phpmyadmin 手动添加了ID字段,作为带有自动增量主键的第一个字段。为什么我手动完成,我不记得原因了。但我很确定这可能是我遇到问题的原因。

我要做的是,当用户在网站上注册时,我希望为他/她创建个人资料网址。例如,表中的字段可以命名为ProfileURL,而实际值可以是http://www.domain.com/profile.php?id=1,其中id是从表中的实际ID继承的。我怎么能用上面的代码做到这一点?当我决定通过phpmyadmin手动保存所有字段时,我做错了什么?注意:我也一直通过phpmyadmin手动创建表,数据库和字段。但是,它的值当然是INSERT自动编辑。我甚至走在正确的轨道上吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

profile.php中,检查$_GET['id'],如果存在,请对数据库中的同一SELECT使用ID查询。它看起来像这样。

<?php
if (isset($_GET['id']))
{
    $id = (int) $_GET['id'];
    $sql = 'SELECT * FROM Members WHERE ID = ' . $id;

    // Then the rest of the code to check the results goes here
}
?>

ID为1的用户为profile.php?id=1

答案 1 :(得分:1)

你做得对。现在写这样的SQL:

$sql = sprintf("SELECT * FROM Members WHERE ID=%d", mysql_real_escape_string($_GET['id']));

您将能够通过$ _GET ['id']获取userdata。请记住使用mysql_real_escape_string来保护您的查询免受SQL注入。 sprintf替换数字或字符串等正确的数据类型也是一件好事。

答案 2 :(得分:1)

您不注意保存个人资料网址 你必须动态地构建它 因为大多数网址仍然是samy,所以只有id正在改变 因此,从数据库中获取id并将其添加到url。

答案 3 :(得分:1)

如上所述,您无需将配置文件URL保存到数据库。我猜所有的个人资料网址都会遵循一些标准格式(即www.example.com/profile.php?id=1)?

好吧,如果您保存了数据库中的所有内容,然后您决定将格式更改为www.example.com/profile/1,那么您的数据将会包含大量过时的数据。数据库。您将不得不浏览每条记录并对其进行更新,这对数据库表来说可能是危险的,比如数百万行。

因此,解决方案是使用一个带参数的脚本。说profile.php。如上所述,您将使用$_GET数组中的数据检查配置文件:

<?php
if (isset($_GET['id'])) {
    $id  = mysql_real_escape_string($_GET['id']);
    $sql = "SELECT * FROM members WHERE id = '$id' LIMIT 1";
    $res = mysql_query($sql);
    if (mysql_num_rows() > 0) {
        $member = mysql_fetch_object($res);
        // handle displaying of member's profile here
    }
    else {
        // member does not exist with ID
    }
}
?>

这样,如果您决定更改脚本名称或使用搜索引擎友好的URL,则无需更改数据库结构。