2010-08-04 64 views
1

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

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

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

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

我想要做的是,当用户在网站上注册时,我想为他/她创建一个配置文件URL。例如,表中的字段可以命名为ProfileURL,而实际值可以是http://www.domain.com/profile.php?id=1,其中id从表中的实际ID继承。我如何用我的上面的代码做到这一点?当我决定通过phpmyadmin手动保存所有字段时,我做错了什么?注意:我也通过phpmyadmin手动创建表,数据库和字段。但是,它的值当然是INSERT。我是否在正确的轨道上?

谢谢。

回答

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,你并不需要改变你的数据库结构。

+0

谢谢Martin和所有人。 – 2010-08-04 15:44:46

1

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

<?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 
} 
?> 

为1的ID的用户将profile.php?id=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也是一件好事。

+0

什么是mysql_real_escape_string在这里? – 2010-08-04 14:55:02

+0

为了避免该值并使查询安全,虽然'sprintf()'函数会根据'%d'分隔符自动检查参数是否为数字。 – 2010-08-04 15:03:00

+0

@col。弹片以防止SQL注入攻击。由于使用index.php?id = 1并依赖$ _GET ['id'] = 1作为值,因此阻止站点用户将?id = 1更改为恶意内容。 请参阅:http://unixwiz.net/techtips/sql-injection.html – Chris 2010-08-04 15:03:31

1

你不会留意保存个人资料网址。
你必须动态构建它。
由于大部分url仍然是samy,只有id正在改变。
因此,从数据库中获取id并将其添加到url。

相关问题