0

我最近安装了 Jpmaster77 的登录脚本。我不得不说,这太棒了,但我在做一些修改时遇到了麻烦。首先,我的问题主要是添加一个自动递增的 ID,该 ID 以 1 递增 1,因此用户不是只有一个用户名,而是有一个与他们匹配的 ID。我这样做有很多原因,一个是如果用户更改了他们的用户名,我仍然可以找到他们。首先,这是我的主要问题:

CREATE TABLE users (
 username varchar(30) primary key,
 password varchar(32),
 userid varchar(32),
 userlevel tinyint(1) unsigned not null,
 email varchar(50),
 timestamp int(11) unsigned not null
);

我尝试使用自动增量在标记为“ID”的用户名上方创建另一行,但是根据 PHPMyAdmin,我不能有一些东西是主要的并且在两个不同的行上有一个自动增量。这是矛盾的,无论我做什么,它都会弄乱注册。每次我尝试对数据库进行最轻微的更改进行注册时,我都会收到此错误“我们很抱歉,但发生了错误,您对用户名* *的注册无法完成。请稍后再试。”

我花了过去一个小时试图找到问题,但我不知道它可能是什么。如果有人能引导我朝着正确的方向前进,我会很高兴。我还决定发布 register.php 来帮助解决这个问题: http: //pastebin.com/c5S0SDcc

4

1 回答 1

1

如果您将用户名字段更改为唯一键字段怎么样,这意味着两行不能有相同的用户名,主键字段也是如此。这不应该破坏你的 php 代码。

CREATE TABLE users (
 id int unsigned auto_increment,
 username varchar(30),
 password varchar(32),
 userid varchar(32),
 userlevel tinyint(1) unsigned not null,
 email varchar(50),
 timestamp int(11) unsigned not null,
 unique key(username),
 primary key (id)
);

编辑:

好的,如果您更改数据库架构,您还必须更改其他代码以匹配数据库架构。即在这种情况下,您必须更改将用户插入数据库的函数。让我解释一下我是如何调试的。

1)你没有提供完整的源代码,所以我用谷歌搜索了 Jpmaster77,我找到了这个网站

2)我意识到您正在尝试注册到系统中,我打开了 register.php 文件并搜索了该术语

很抱歉,发生了错误

我找到了正确的行,看到 $_SESSION['regsuccess'] 已设置,但设置为 false。

3)然后我打开process.php文件,看到procRegister-function中是调用该$session->register函数的行,在这种情况下它返回2,因为注册不成功。

4)然后我必须知道做什么$session->register-function。我session.php从包含目录打开文件并搜索register-function。我知道这个函数在这种情况下返回 2。所以我找到了return 2;来自第 233 行的评论

注册尝试失败

5) 如果该函数返回 2,那一定是因为$database->addNewUser函数返回 false。同样,我database.php从包含目录打开文件并查看addNewUser-function。

6)所以这里这个函数返回false。原因很明显:

该脚本尝试在数据库中插入一行而不在插入查询中提供列名。因此,如果您更改表列顺序并添加或删除列,例如在这种情况下,该脚本将失败。就像 MySQL 的文档说的:

如果您没有为 INSERT ... VALUES 或 INSERT ... SELECT 指定列名列表,则表中每一列的值必须由 VALUES 列表提供

您可以尝试通过为插入查询提供列名来解决此问题,但如果您不知道自己在做什么,则不建议这样做。

$q = sprintf("INSERT INTO ".TBL_USERS." (username, password, userid, userlevel, email, name) VALUES ('%s', '%s', '%s', '%s', '%s', $time, '0', '%s', '0', '0')",
            mysql_real_escape_string($username),
            mysql_real_escape_string($password),
            mysql_real_escape_string($userid),
            mysql_real_escape_string($ulevel),
            mysql_real_escape_string($email),
            mysql_real_escape_string($name));

我希望这篇文章可以帮助您找出问题并调试您的脚本。

于 2013-06-14T03:54:15.523 回答