如何解决OOP PHP用户类用户蛋糕未添加到数据库中
| 最近,我发现了这个名为usercake(http://usercake.com/)的小用户类脚本,它具有所有基本功能,并且运行良好。 我的问题:第一个用户可以很好地添加到数据库中,但是之后就无法正常工作。显然,有一点我没有弄清楚的错误(我不太了解oop PHP)。没有错误发生(我可以看到),并且电子邮件已发送出去。 我已经以相同的命运将它安装在多个地方。我想解决此问题,因为使用此脚本可以节省很多时间。 这是我的网址:http://rawcomposition.com/birding/loggedin/register.PHP 验证所有内容后,将调用以下函数: public function userCakeAddUser()
{
global $db,$emailActivation,$websiteUrl,$db_table_prefix;
//Prevent this function being called if there were construction errors
if($this->status)
{
//Construct a secure hash for the plain text password
$secure_pass = generateHash($this->clean_password);
//Construct a unique activation token
$this->activation_token = generateActivationToken();
//Do we need to send out an activation email?
if($emailActivation)
{
//User must activate their account first
$this->user_active = 0;
$mail = new userCakeMail();
//Build the activation message
$activation_message = lang(\"ACTIVATION_MESSAGE\",array($websiteUrl,$this->activation_token));
//Define more if you want to build larger structures
$hooks = array(
\"searchStrs\" => array(\"#ACTIVATION-MESSAGE\",\"#ACTIVATION-KEY\",\"#USERNAME#\"),\"subjectStrs\" => array($activation_message,$this->activation_token,$this->unclean_username)
);
/* Build the template - Optional,you can just use the sendMail function
Instead to pass a message. */
if(!$mail->newTemplateMsg(\"new-registration.txt\",$hooks))
{
$this->mail_failure = true;
}
else
{
//Send the mail. Specify users email here and subject.
//SendMail can have a third parementer for message if you do not wish to build a template.
if(!$mail->sendMail($this->clean_email,\"New User\"))
{
$this->mail_failure = true;
}
}
}
else
{
//Instant account activation
$this->user_active = 1;
}
if(!$this->mail_failure)
{
//Insert the user into the database providing no errors have been found.
$sql = \"INSERT INTO `\".$db_table_prefix.\"Users` (
`Username`,`Username_Clean`,`Password`,`Email`,`ActivationToken`,`LastActivationRequest`,`LostPasswordRequest`,`Active`,`Group_ID`,`SignUpDate`,`LastSignIn`
)
VALUES (
\'\".$db->sql_escape($this->unclean_username).\"\',\'\".$db->sql_escape($this->clean_username).\"\',\'\".$secure_pass.\"\',\'\".$db->sql_escape($this->clean_email).\"\',\'\".$this->activation_token.\"\',\'\".time().\"\',\'0\',\'\".$this->user_active.\"\',\'1\',\'0\'
)\";
return $db->sql_query($sql);
}
}
}
这是表结构:
CREATE TABLE IF NOT EXISTS `userCake_Users` (
`User_ID` int(11) NOT NULL AUTO_INCREMENT,`Username` varchar(150) NOT NULL,`Name` varchar(100) NOT NULL,`Username_Clean` varchar(150) NOT NULL,`Password` varchar(225) NOT NULL,`Email` varchar(150) NOT NULL,`ActivationToken` varchar(225) NOT NULL,`LastActivationRequest` int(11) NOT NULL,`LostPasswordRequest` int(1) NOT NULL DEFAULT \'0\',`Active` int(1) NOT NULL,`Group_ID` int(11) NOT NULL,`SignUpDate` int(11) NOT NULL,`LastSignIn` int(11) NOT NULL,PRIMARY KEY (`User_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
解决方法
对我来说,有两种可能性为什么在添加第一个用户后不添加其他用户:
首先,在创建第一个用户后,以下用户帐户的“ 2”标志设置为TRUE。但是这种情况不太可能,因为它是为第一个用户成功运行的同一代码,因此没有理由对其他用户将该标志设置为TRUE。
第二种可能性是第二个用户帐户的“ 3”为FALSE。如果为假,则方法“ 4”不执行任何操作。该标志可能为假的原因是用户名或电子邮件地址已存在。
您是否在第二个帐户中使用了与第一个帐户相同的用户名或电子邮件地址?我确定您一定不能使用相同的用户名,而应该使用相同的电子邮件地址。 usercake类不允许使用相同的用户名或相同的电子邮件地址。
希望这可以帮助。
, 我会用这个难看的代码做四件事:
1)启用error_reporting模式,以便在出现sthg时可以看到一些内容:
error_reporting(E_ALL);
2)测试此INSERT sql直接进入dB,以确保其正常工作,并验证这段代码。如果sql INSERT请求有效,则请检查对这些SQL请求的访问条件,如上面的Abhay所述,
3)由于我们没有您所有的配置,因此很难进行猜谜游戏。因此,我建议您为AI User_ID添加一个NULL字段。
$sql = \"INSERT INTO `\".$db_table_prefix.\"Users` (
`User_ID`,// Add this here
`Username`,`Username_Clean`,`Password`,`Email`,`ActivationToken`,`LastActivationRequest`,`LostPasswordRequest`,`Active`,`Group_ID`,`SignUpDate`,`LastSignIn`
)
VALUES (
NULL,// and that one
\'\".$db->sql_escape($this->unclean_username).\"\',\'\".$db->sql_escape($this->clean_username).\"\',\'\".$secure_pass.\"\',\'\".$db->sql_escape($this->clean_email).\"\',\'\".$this->activation_token.\"\',\'\".time().\"\',\'0\',// later,I would also try using an int for an int
\'\".$this->user_active.\"\',\'1\',\'0\'
)\";
4)使用OOP和PDO查找另一个编码更好的编码。
, 您将Name设置为NOT NULL,并且在代码的Insert语句中未发送Name值,因此mysql将引发异常,称Name不能为null,请检查一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。