我整天都在使用Tank Auth图书馆并对此有疑问。我在注册表单中添加了两个字段:first_name和last_name,我试图找出它为什么不插入user_profiles页面。
使用更新的代码我收到此错误:
遇到PHP错误
严重性:警告
消息:缺少Tank_auth :: create_user()的参数5,在第136行的/home/xtremer/public_html/kowmanager/application/controllers/auth.php中调用并定义
文件名:libraries / Tank_auth.php
行号:162 遇到PHP错误
严重性:注意
消息:未定义属性:Tank_auth :: $ users
文件名:libraries / Tank_auth.php
行号:188
致命错误:在第188行的/home/xtremer/public_html/kowmanager/application/libraries/Tank_auth.php中的非对象上调用成员函数UpdateProfileInfo()
更新代码:
关于我现在做错了什么想法?
我会在这方面给予50点奖励,但我无法获得链接,以便获得赏金。
答案 0 :(得分:8)
您应该做的是将所需的两列放在user_profiles
表中,然后使用以下内容向models/tank_auth/users.php
添加一个函数:
function UpdateProfileInfo ($userID, $firstname, $lastname)
{
return $this->db->update('user_profiles', array('firstname'=>$firstname, 'lastname'=>$lastname), array('user_id' => $userID));
}
然后替换(在/libraries/Tank_auth.php
)
function create_user($username, $email, $password, $email_activation)
随着
function create_user($username, $email, $password, $email_activation, $userInfo)
然后在(/libraries/Tank_auth.php
)下面
if (!is_null($res = $this->ci->users->create_user($data, !$email_activation))) {
添加
$this->users->UpdateProfileInfo($userInfo["firstname"],$userInfo["lastname"]);
然后替换(在/controllers/auth.php
)
if ($this->form_validation->run()) { // validation ok
if (!is_null($data = $this->tank_auth->create_user(
$use_username ? $this->form_validation->set_value('username') : '',
$this->form_validation->set_value('email'),
$this->form_validation->set_value('password'),
$email_activation))) { // success
使用:
$userInfo["firstname"] = $this->form_validation->set_value("firstname");
$userInfo["lastname"] = $this->form_validation->set_value("lastname");
if ($this->form_validation->run()) { // validation ok
if (!is_null($data = $this->tank_auth->create_user(
$use_username ? $this->form_validation->set_value('username') : '',
$this->form_validation->set_value('email'),
$this->form_validation->set_value('password'),
$email_activation, $userInfo))) { // success
虽然它应该有用,但是没有经过测试,请告诉我它是怎么回事 最大
答案 1 :(得分:2)
我注意到了几件事:
private function create_profile($user_id, $data)
{
$this->db->set('user_id', $user_id);
$this->db->set('first_name', $first_name);
$this->db->set('last_name', $last_name);
return $this->db->insert($this->profile_table_name);
}
$data
是一个数组,我假设你应该在这里传递first_name
和last_name
(你没有)。
此外,TANK AUTH要求您更新配置文件数据库架构所需的列(您是否这样做了?没有提及)。
要更正上面的代码,您需要在数组中传递更多详细信息($data
),如下所示:
$data['first_name'] = "Bob";
$data['last_name'] = "Smith";
create_profile($user_id, $data); // which would then use the first & last names
并不是说我想就此进行对话,但...... *
你需要做我给你看的东西:
create_profile
fn。$data[0]
,如果这就是你所谓的数组值那么$data['first_name']
。没有理由邋and并做$ data [0 ] - 不要猜测数组的键值。)答案 2 :(得分:1)
检查库中的Tank_auth文件,还有另一个“create_user”函数需要修改。妥善管理变量。 用这个来打扰我3个小时。