-2

我正在为班级建立一个简单的登录/注册网站。(即没有md5、sha等) 其中一个参数是在注册时不让新注册的密码等于前3个。如果是这种情况,我将编写一个返回 true 的函数。我无法弄清楚如何做到这一点。我数据库上的主键是 user_id (自动递增)。如果用户名已经存在,这是一个返回 true 的函数:

function user_exists ($username) {
    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) 
    FROM `users` WHERE `username` = '$username'"), 0) == 1) ? true : false;}

我以为我会从这个开始,并添加一些代码以仅回顾前三个用户名

function returns true if password exists database
function password_exists ($password) {
$password = sanitize($password);
return (mysql_result(mysql_query("SELECT COUNT(`user_id`) `FROM `users` 
WHERE `password` = '$password' AND `user_id <'$user_id' ORDER BY user_id DESC, LIMIT 3"), 0) ==  1) ? true : false ;

我是否试图用一个功能做太多事情?即我是否需要首先在一个函数中隔离最后 3 条记录,然后搜索该集合?我应该添加一个按顺序编号条目的列吗?即,如果有 5 条记录 1、2、3、4、5,并且“2”被删除,则该列将显示为 1、2、3、4。在我看来,这样搜索会更容易。非常感谢任何帮助!谢谢

}
4

2 回答 2

0

您可以通过以下形式的嵌套选择来做到这一点:

SELECT x FROM (SELECT ...) as y;

您的内部选择 (SELECT ...) 将返回记录,按日期排序(最近的在前),限制为 3。

您的外部选择将从内部选择中选择用户名。

如果返回 > 0 条记录,则说明用户名不好。

于 2012-12-22T18:09:23.597 回答
0

这样做没有任何意义。
要么检查整个数据库,要么根本不检查。

此外,这样的功能将对安全性产生巨大影响,这意味着这样的错误可能会暗示其他人的密码。

(如果是作业需要的话,难怪为什么每个人都讨厌 PHP。即使在课堂上他们教你写可怕的代码)

于 2012-12-22T18:14:08.047 回答