回精華區
作者Titan.bbs@KH.twbbs.org (明天見) 看板: plan
標題[功能] bbs與Coppermine Photo Gallery帳號同步
時間港都夜未眠 (2004/05/01 Sat 15:17:32) Updated: 2004/10/31
    要做這篇之前,必須開啟bbs的pop3d,做密碼確認用
    建議要做這個的人至少看得懂PHP語法跟SQL,不然會問題很多
    要做之前建議先備份資料庫

    原理大致是這樣,從pop3d去確認帳號密碼是否正確
    如果正確的話就登入,但是因為cpg會在之後的動作中去確認密碼
    所以在新增帳號時密碼那欄還是要隨便塞個東西,塞什麼就無所謂

    如果登入之後,發現cpg的資料庫沒這個人,就自動新增這個帳號
    也就是說,如果沒登過相簿的人,就不會有他的帳號在資料庫中

    我不是PHP高手,看我的變數不爽的就自己取吧,SQL指令請自己接起來
    我只是試著把功能作出來,如果有bug或是還可以更好的地方,請指教

: login.php

在$cookie_warning = '';這句後面加上這段

- if (isset($HTTP_POST_VARS['submitted'])) {
-     $results = db_query("SELECT user_id, user_name, user_password FROM
-  {$CONFIG['TABLE_USERS']} WHERE user_name = '" . addslashes($HTTP_POST_VARS
- ['username']) . "' AND BINARY user_password = '" . addslashes($HTTP_POST_VARS
- ['password']) . "' AND user_active = 'YES'");

function is_ok($string)  //rocet提供
{
  $flag = trim(preg_replace("/(^[+-])((.+))/", "\\1", $string));
  if ($flag == "+")
    return true;
  else if ($flag == "-")
    return false;
}

$socket = 0;  // socket 開啟完成
$user = 0;    // user 檢查通過
$pass = 0;    // pass 檢查通過
$ok = 0;      // socket/user/pass 都正確

if (isset($HTTP_POST_VARS['submitted']))
{
  $fp = fsockopen("localhost", 110, $errno, $errstr, 30);
  if (!$fp)
  {
    echo "$errstr ($errno)<br />\n";
  }
  else
  {
    if (is_ok(fgets($fp)))
      $socket = 1;
    else
      echo "socket can't open";

    fputs($fp, "user " . addslashes($HTTP_POST_VARS['username']) . "\r\n");
    if (is_ok(fgets($fp)))
      $user = 1;
    fputs($fp, "pass " . addslashes($HTTP_POST_VARS['password']) . "\r\n");
    if (is_ok(fgets($fp)))
      $pass = 1;
    fputs($fp, "quit\r\n");

    if ($socket && $user && $pass)
      $ok = 1;

    $checkdata = db_query("SELECT user_id FROM {$CONFIG['TABLE_USERS']}
      WHERE user_name = '" . addslashes($HTTP_POST_VARS['username']) . " '");

    if (!(mysql_num_rows($checkdata)) && $ok == "1")
    {
      $checkvalue = db_query("SELECT user_id FROM {$CONFIG['TABLE_USERS']}
        ORDER BY `user_id` DESC");
      $count = mysql_fetch_array($checkvalue);
      $newcount = $count[0] + 1;

      db_query("INSERT INTO {$CONFIG['TABLE_USERS']}
        (`user_id`, `user_group`, `user_active`, `user_name`,
         `user_password`, `user_lastvisit`, `user_regdate`,
         `user_group_list`, `user_email`, `user_website`, `user_location`,
         `user_interests`, `user_occupation`, `user_actkey`)
        VALUES ('$newcount', '2', 'YES', '" .
        addslashes($HTTP_POST_VARS['username']) . "', 'password',
        '0000-00-00 00:00:00', NOW() , '', '','', '', '', '', '');");
    }

    $result = db_query("SELECT user_password FROM {$CONFIG['TABLE_USERS']}
      WHERE user_name = '" . addslashes($HTTP_POST_VARS['username']) . "'
      AND user_active ='YES'");

    $value = mysql_fetch_array($result);

    $HTTP_POST_VARS['password'] = $value['user_password'];

    fclose($fp);
  }

  $results = db_query("SELECT user_id, user_name, user_password
    FROM {$CONFIG['TABLE_USERS']}
    WHERE user_name = '" . addslashes($HTTP_POST_VARS['username']) ."' AND
    BINARY user_password = '" . addslashes($HTTP_POST_VARS['password']) . "'
    AND user_active = 'YES'");

上面這段加完之後,改這個地方

- if (mysql_num_rows($results)) {
+ if (mysql_num_rows($results) && $ok == "1") {


: profile.php

既然帳號同步,那就不需要修改密碼的選項了

找到這一行,約240行左右

<input type="submit" name="change_pass"
          value="{$lang_register_php['change_pass']}" class="button">

直接刪除,或是註解起來,如:

<!-- <input type="submit" name="change_pass" value="{$lan
          value="{$lang_register_php['change_pass']}" class="button"> -->


    這樣做完之後,理論上就可以帳號跟密碼同步,如果沒有用過相簿的帳號
    第一次登入相簿時會自動增加帳號,我只有在我站上試過,沒做過其他測試


--
╭──高雄 ξ Kaohsiung ─────╮Author:Titan
高雄港都夜未眠 φ KH.twbbs.org│From  218-34-82-31.cm.dynamic.apol.c
├────────────────┤Time  :2004/05/01 Sat 15:17:32
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻