【发布时间】:2014-01-18 02:03:57
【问题描述】:
我正在使用 RedBean PHP ORM 来尝试注册/获取用户。也就是说,给定一个逗号分隔的列表,我会这样做
$emails = explode(',', trim($app->request->post('emails')));
然后将每封邮件传递给这个函数
function registerOrGetUser($email)
{
echo("R or G " . $email . "<br>");
$user = R::findOne('user', ' email = ? ', array($email));
if(!$user)
{
echo("Couldn't find user " . $email . ", creating new user.<br>");
//user does not exist, register them
$user = R::dispense('user');
$password = $random = substr(md5(rand()),0,8);
$user->email = $email;
$user->password = md5($password);
$user->role = 0;
R::store($user);
mail($user->email, "Welcome to imgstat!", "Welcome to imgstat, " . $user->email . "! An account has been created for you. Please sign in with this email address, and the following password: " . $password);
}
return $user;
}
注意调试的 echo 语句。我遇到的问题是它有时只能检测到用户是否已经存在。也就是说,如果我尝试添加
test@test.test
它获取用户(并且不注册新用户)。但是,如果我尝试
test@test.test, test@test.test
它在数据库中创建了第二个用户 - 据我所知,使用完全相同的电子邮件!从那时起,我可以根据需要添加任意数量的 test@test.tests - 他们将始终获取用户而不创建重复项。但由于某种原因,如果电子邮件不是逗号分隔列表中的唯一项目,则始终会创建第一个副本。
有什么想法吗?
【问题讨论】: