2011-12-23 133 views
1

我有一个registration.php页面,我需要检查一个用户名是否已经存在于我的数据库中,这样我就不会有两个同名的成员...检查用户名是否已经存在于数据库中MySQL PHP

这里是我如何将用户信息到数据库(用户名,密码,登记日期等)下的“用户名”

mysql_query("INSERT INTO UserDb (ID, TimeStamp, UserName, Password) VALUES ('$ipaddress', NOW(), '$user_username', '$user_password')"); 

我如何检查数据库“USERDB”字段以确保用户的变量“$ user_username”不存在?

回答

2

您可以使数据库中的用户名字段成为主键或唯一的,这保证了数据库中用户名的唯一性。

然后,如果您尝试插入已存在的用户名the mysql_query() function will fail, returning FALSE

除此之外,你应该总是在数据库中查询用户名的存在,使用简单的SELECT语句:

SELECT username FROM table WHERE username='$php_username_var';

+0

目前我的“TimeStamp”默认设置为PrimaryKey ...这是否意味着没有两个用户可以同时注册?这将成为未来的问题吗?此外,我似乎无法将我的UserName字段设置为PHPMyAdmin中的主键...这是因为它设置为“FullText -type:text”它是否必须是别的东西?我可能会使用逻辑if语句和select语句来帮助我学习编码的学习经验,但我也对你提到的这个主要关键事物感到好奇,在知道之前我一无所知!再次感谢迄今为止所有的帮助! –

+1

“这是否意味着没有两个用户可以同时注册?”技术上,是的。 “这会成为未来的问题吗?”是的,这是新问题的潜在来源。但是在这种情况下,无论如何都不要使用时间戳作为主键。 “这是因为它设置为”FullText -type:text“你应该考虑Eli的建议,并将用户名作为电子邮件地址,然后将最大长度放在上面。约束在这里:http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html –

+1

我忘了解释,最大长度是允许用户名/电子邮件成为主键。 –

1

在用户名上创建一个唯一的密钥,如果INSERT出错,请检查错误号。

2

您可以使UserName成为唯一的字段。如果用户名已经存在,MySQL将拒绝插入新记录。

或者,您可以运行查询搜索用户名。如果不存在,请插入它。将它包含在一个事务中,这样你就可以确定在你搜索了一个用户之后,添加了一个新名称,并添加了一个新名称。

+1

事务处理可能不足,最好事先锁定表。 – Erbureth

+0

+1用于交易。 –

+0

什么是交易? –

1

这是最好的检查用户名第一,而不是取决于数据库通过错误告诉你 - 总是最好是明确的,而不是具有隐含的功能。

此外,您可能需要考虑具有相同用户名的一个或多个现有记录的情况。

例如,如果用户注册订阅,则在几个月后取消,然后再重新注册。

有时最好重新打开帐户,其他时间只是为了创建一个新的帐户......在这种情况下,可能会有相同用户名的重复行,只要当前帐户是活跃的,其余的是为了历史报道的目的。

实际上,如果您的结算表,笔记等中引用了旧用户实例,则可能需要重复的行。如果您删除了该用户,则会导致报告出现问题。

一个建议的话 - 考虑使用用户的电子邮件地址作为他们的用户名 - 你知道这是一个字符串是唯一的,给你一个默认的方式来联系他们,并可以在注册时验证。

+0

该电子邮件是伟大的建议!我不会在这个项目上存储任何电子邮件地址,因为我不相信自己有一个足够安全的网站来存储个人信息...就在一个星期前,我没有使用mysql_real_escape_string或strip_tags存储信息...我wouldn我不想对这样的泄露信息负责!但在未来,我一定会记住这样的建议!非常感谢! –

相关问题