会员控制台 会员登陆 会员注册 最后更新 高级搜索 会员投稿 退出登陆
设为首页
收藏本站
留言给我
  首页 | 操作系统类 | 程序设计类 | 数据库类 | 应用服务类 | 网络及硬件类 | 其他技术 | GBunix论坛
操作系统类
程序设计类
数据库类
应用服务类
网络及硬件类
其他技术
Unix中文 / 程序设计类 / 其他程序 / phparticle 与 phpBB 用户数据整合方案
phparticle 与 phpBB 用户数据整合方案
2004-12-10    Trotter    www.gbunix.com    点击:
phparticle 与 phpBB 用户数据整合方案
作者:Trotter
邮箱:trotter@kekerde.net
出处:
www.gbunix.com

转载请保持文档完整,注明出处。

前言

  由于作者水平有限,目前只整合了用户数据,对于cookie还没有进行整合。也就是说当用户在登陆时,还是需要登陆两次。希望大家可以在这个文档的基础上,提出更好的整合方法,解决掉cookie的整合问题。在此,感谢作者朋友“蓝色的天空”对我的帮助,这个是他的网站(
www.ioptional.com),也帮他AD一下吧。呵呵

整合方法

  首先同步phparticle用户表pa_user和phpBB用户表users。由于时间关系,我没有写同步数据库的程序。那位有空可以写一下。

整合思路

  我们使用phpBB的注册程序。将phparticle设置成不允许用户注册,当用户注册时,首页在phpBB的users表中插入用户信息,当该用户收到系统通过Mail发送的激活账号信息时,点击激活账号链接,激活该用户的phpBB账号。同时给pa_user表中插入该用户信息。当用户修改用户资料时,同时修改两张表中对应的信息。

修改程序

  我们需要修改3个php文件,分别是phparticle的member.php, phpBB的usercp_activate.php和usercp_register.php。

1.member.php

大概在212行,注释掉一下代码:

//$DB->query("UPDATE ".$db_prefix."user SET
//              email='".addslashes($email)."',
//              sex='".addslashes($sex)."',
//              homepage='".addslashes(htmlspecialchars(trim($_POST[homepage])))."',
//              address='".addslashes(htmlspecialchars(trim($_POST[address])))."',
//              qq='".addslashes(htmlspecialchars(trim($_POST[qq])))."',
//              icq='".addslashes(htmlspecialchars(trim($_POST[icq])))."',
//              msn='".addslashes(htmlspecialchars(trim($_POST[msn])))."',
//              intro='".addslashes(htmlspecialchars(trim($_POST[intro])))."',
//              tel='".addslashes(htmlspecialchars(trim($_POST[tel])))."',
//              rememberpw='$rememberpw',
//              timezoneoffset='".addslashes($_POST[timezoneoffset])."'
//              WHERE userid='$pauserinfo[userid]'
//              ");

在下面加入一下代码:

    // write by trotter for phpbb & phparticle
   
   $DB->query("UPDATE ".$db_prefix."user SET
       sex='".addslashes($sex)."',
       homepage='".addslashes(htmlspecialchars(trim($_POST[homepage])))."',
       address='".addslashes(htmlspecialchars(trim($_POST[address])))."',
     qq='".addslashes(htmlspecialchars(trim($_POST[qq])))."',
       icq='".addslashes(htmlspecialchars(trim($_POST[icq])))."',
       msn='".addslashes(htmlspecialchars(trim($_POST[msn])))."',
       intro='".addslashes(htmlspecialchars(trim($_POST[intro])))."',
      tel='".addslashes(htmlspecialchars(trim($_POST[tel])))."',
      rememberpw='$rememberpw',
       timezoneoffset='".addslashes($_POST[timezoneoffset])."'
       WHERE userid='$pauserinfo[userid]'
       ");
   
    $DB->query("UPDATE users SET
       user_website='".addslashes(htmlspecialchars(trim($_POST[homepage])))."',
       user_aim='".addslashes(htmlspecialchars(trim($_POST[qq])))."',
       user_icq='".addslashes(htmlspecialchars(trim($_POST[icq])))."',
       user_msnm='".addslashes(htmlspecialchars(trim($_POST[msn])))."'
       WHERE username='$pauserinfo[username]'
       ");   
   
    // write by trotter for phpbb & phparticle

大概在311行,有如下代码:

    $DB->query("UPDATE ".$db_prefix."user SET
                       password='".md5($newpassword1)."'
                       WHERE userid='$pauserinfo[userid]'");


在代码后加入:

    // write by trotter for phpbb & phparticle
   
    $DB->query("UPDATE users SET
                       user_password='".md5($newpassword1)."'
                       WHERE username='$pauserinfo[username]'");
   
    // write by trotter for phpbb & phparticle

2.usercp_activate.php

大概在30行,注释掉如下代码:

//$sql = "SELECT user_active, user_id, username, user_email,  
// user_newpasswd, user_lang, user_actkey  FROM " . USERS_TABLE . "
//   WHERE user_id = " . intval($HTTP_GET_VARS[POST_USERS_URL]);

在后面加如下代码:

//write by trotter for phpbb & phparticle 

$sql = "SELECT * FROM " . USERS_TABLE . "
WHERE user_id = " . intval($HTTP_GET_VARS[POST_USERS_URL]);

//write by trotter for phpbb & phparticle

搜索代码“if ( $row = $db->sql_fetchrow($result) ){”,大概在45行,在其后加:

 //write by trotter for phpbb & phparticle
 
 $phpartice_username = $row['username'];
 $phpartice_password = $row['user_password'];
 $phpartice_email = $row['user_email'];
 $phpartice_joindate = $row['user_regdate'];
 $phpartice_homepage = $row['user_website'];
 $phpartice_qq = $row['user_aim'];
 $phpartice_icq = $row['user_icq'];
 $phpartice_msn = $row['user_msnm'];
 
 //write by trotter for phpbb & phparticle

大概在70行,注释掉如下代码:

      //$sql_update_pass = ( $row['user_newpasswd'] != '' ) ? ", user_password = '" 
      //. str_replace("\'", "''", $row['user_newpasswd']) . "', user_newpasswd = ''" : '';

      //$sql = "UPDATE " . USERS_TABLE . "
      //   SET user_active = 1, user_actkey = ''" . $sql_update_pass . "
      //   WHERE user_id = " . $row['user_id'];
            
      //if ( !($result = $db->sql_query($sql)) )
      //{
      //   message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__
      //, __FILE__, $sql_update);
      //}   

在其后加:

//write by trotter for phpbb & phparticle
  
// 判断字段中是否有新的密码,如果有,就认为是用户更新密码,更新两张表用户的密码即可。
// 如果没有新的密码,就是用户激活账号操作。
  
if ($row['user_newpasswd'] != ''){
   
 $sql = "UPDATE " . USERS_TABLE . "                                  
  SET user_active = 1, user_actkey = '', user_password = '"
  . str_replace("\'", "''", $row['user_newpasswd'])
  ."', user_newpasswd = '' WHERE user_id = " . $row['user_id'];
    
  if ( !($result = $db->sql_query($sql)) )
   {
    message_die(GENERAL_ERROR, 'Could not update users table', '',
    __LINE__, __FILE__, $sql_update);
   }
    
 $sqlphpartice = "update pa_user set password = '"
 . str_replace("\'", "''", $row['user_newpasswd'])
 . "' where username = '" . $row['username'] . "'";
   
 if ( !($result = $db->sql_query($sqlphpartice)) ) 
  {
   message_die(GENERAL_ERROR, 'Could not update users table', '',
   __LINE__, __FILE__, $sql_update);
  }
    
}else{
 //激活bbs的用户账号;判断pa_user表是否用相同名称的用户,如果没有,就给pa_user表插
 //入用户数据,如果有,就认为是用户更改了自己的email地址,需要激活账号。
    
 $sql = "UPDATE " . USERS_TABLE . "                                  
  SET user_active = 1, user_actkey = '' WHERE user_id = " . $row['user_id'];
  
 if ( !($result = $db->sql_query($sql)) )
  {
   message_die(GENERAL_ERROR, 'Could not update users table', '',
   __LINE__, __FILE__, $sql_update);
  }
   
 //当phpbb user表更改用户Email时,同时更新pa_user表用户的Email地址
    
 $sqlphpartice = "update pa_user set email = '" . $row['user_email']
 . "' where username = '" . $row['username'] . "'";
  
 if ( !($result = $db->sql_query($sqlphpartice)) )
  {
   message_die(GENERAL_ERROR, 'Could not update users table', '',
   __LINE__, __FILE__, $sql_update);
  }
    
 //查询pa_user表中是否有当前用户信息
 $count_user = "select count(*) as phparticle_user_count from pa_user
 where username = '" . $row['username'] . "'";
 if ( !($result = $db->sql_query($count_user)) )
  {
   message_die(GENERAL_ERROR, 'Could not update users table', '',
   __LINE__, __FILE__, $sql_update);
  }
 if ( $row = $db->sql_fetchrow($result) ){
    
  if (intval($row['phparticle_user_count']) == 0)
   {
   $sql = "SELECT * FROM " . USERS_TABLE . " WHERE user_id = "
   . intval($HTTP_GET_VARS[POST_USERS_URL]);
   if ( !($result = $db->sql_query($sql)) )
    {
     message_die(GENERAL_ERROR, 'Could not obtain user information', '',
     __LINE__, __FILE__, $sql);
    }
   $sqlphpartice = "INSERT INTO pa_user(username,usergroupid,password,email
   ,joindate,homepage,qq,icq,msn) VALUES('" . $phpartice_username . "','3',
   '" . $phpartice_password . "','" . $phpartice_email . "','" . $phpartice_joindate
   . "','" . $phpartice_homepage . "','" . $phpartice_qq . "','" . $phpartice_icq
   . "','" . $phpartice_msn . "')";
    
   if ( !($result = $db->sql_query($sqlphpartice)) )
    {
     message_die(GENERAL_ERROR, 'Could not update users table', '',
     __LINE__, __FILE__, $sql_update);
    }
   } 
  }
 }
   
//write by trotter for phpbb & phparticle

3.usercp_register.php

搜索代码“$passwd_sql = '';”,大概在289行。在其后加:

 // write by trotter for phpbb & phparticle
 
 $phparticle_passwd_sql = '';
 
 // write by trotter for phpbb & phparticle

搜索代码“$passwd_sql = '';”,大概在314行。在其后加:

 // write by trotter for phpbb & phparticle
 
 $phparticle_passwd_sql = '';
 
 // write by trotter for phpbb & phparticle

搜索代码“$passwd_sql = "user_password = '$new_password', ";”,大概在357行,在其后加:

    // write by trotter for phpbb & phparticle
    
    $phparticle_passwd_sql = "password = '$new_password', ";
    
    // write by trotter for phpbb & phparticle

搜索代码“$sql = "UPDATE " . USERS_TABLE . "”,大概在568行。在其后加: 

   // write by trotter for phpbb & phparticle
   // phpbb 会员修改个人资料
   
   $phparticle_sql = "UPDATE pa_user SET " . $phparticle_passwd_sql
   . " email = '" . str_replace("\'", "''", $email) . "', icq = '"
   .  str_replace("\'", "''", $icq) ."', homepage = '"
   . str_replace("\'", "''", $website) . "', qq = '"
   . str_replace("\'", "''", str_replace(' ', '+', $aim))
   . "', msn = '" . str_replace("\'", "''", $msn) . "'
    WHERE username = '" . $userdata['username'] . "'";
      
   if ( !($result = $db->sql_query($phparticle_sql)) )
   {
    message_die(GENERAL_ERROR, 'Could not update users table', '',
    __LINE__, __FILE__, $sql);
   }    
      
   // write by trotter for phpbb & phparticle

修改phparticle模版

  由于大家使用的模版都不一样,修改模版的方法我就不进行说明了,这个很简单,修改模版中有关注册部分的链接为phpBB的注册页面。

注意事项

  使用该MOD时,请关闭你的phparticle的注册功能。同时,打开phpBB注册账号修改激活选项。



了解更多详情,参与讨论,请进入GBUNIX论坛

http://www.gbunix.com/bbs/index.php
责任编辑: trotter

相关文章
Linux+Apache+PHP+MySQL+SSL配置详解 - 12-31 10:12 pm - 点击: 920
超级服务器apache+mysql+php+ssl之完全安装攻略(2) - 12-30 09:25 pm - 点击: 131
超级服务器apache+mysql+php+ssl之完全安装攻略(1) - 12-30 09:24 pm - 点击: 144
如何在Red Hat 7.1中配置SSL - 08-07 06:40 pm - 点击: 211
用SSL构建一个安全的Apache - 08-07 06:23 pm - 点击: 137
用SSL实现WEB服务器的安全性 - 08-07 04:57 pm - 点击: 181
Apache、SSL、MySQL和PHP平滑无缝地安装 - 08-07 01:46 pm - 点击: 115
Apache安装MOD_SSL的补充--手工签署证书的方法 - 08-07 01:36 pm - 点击: 116
Apache2+php4+MySQL4+SSL详细配置过程 - 07-15 01:13 pm - 点击: 804

发表评论 查看评论 加入收藏 Email给朋友 打印本文
给该文章评分
1 2 3 4 5 6 7 8 9 10
平均得分 0, 共 0 人评分
1 2 3 4 5 6 7 8 9 10
发表评论
标题:
内容:
声明:本站资讯均来自互联网,所有文章版权归原作者和出版者所有,如涉及版权问题,请来信告知!
Copyright © 2002-2004 GBunix.com. All rights reserved.