如果我正确执行以下步骤,有人可以告诉我:
当用户想要在网站上注册时,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
自动编辑。我甚至走在正确的轨道上吗?
谢谢。
答案 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,则无需更改数据库结构。