블로그는 자신만의 공간으로 자신만이 포스팅하고 자신만이관리한다
한마디로 혼자놀기...ㅋㅋ
혼자놀기가 나쁘다는것은 아니다
나도 매일같이 혼자 놀았으니까..
하지만 주변 친구들이 많거나.. 여자친구가 있으면.. 커뮤니티 블로그.. 커플 블로그는 어떨까
간단한 태터툴즈 패치를 통해서 그 염원을 이룰수가있다
실제로 이블로그는 커플블로그로 그패치를 적용해 한창 사용하고 있다..
블로그하나에 여러개의 개정으로 로그인할수있는것이고
각자의 아이디(이메일주소)와 패스워드 이름이 부여된다.
패치내용은 다음과 같다(여기서 태터툴즈 설치된 최상위 디렉토리는 /blog 이다)
1. ??_Users 데이터베이스 테이블에 admin 필드를 추가 (사용자 구분을 위한 필드)
2. /blog/blog/login/index.php 로그인할때 Session 을 저장한다
3. /blog/blog/comment/* 리플을 달때 사용자들을 구분해준다
4. /blog/blog/owner/setting/account 계정정보 출력
5. /blog/blog/owner/setting/account/password 패스워드 변경
6. /blog/blog/owner/setting/account/profile 프로필 변경
다음과 같은 패치를 통해서 사용자 로그인, 리플등록수정, 글등록, 사용자 정보수정이 가능하다
그럼 이제 패치를 해보자
추가해줘야할부분이 파란색으로 된 부분이다
1. 다음과 같이 sql 쿼리를실행한다
ALTER TABLE `my_Users` ADD `admin` INT( 11 ) NOT NULL DEFAULT '1';
PHP 로 작성하면 다음과 같다
[LINUX]<?php
include "../config.php";
$chakani_sql = mysql_connect($database['server'],$database['username'],$database['password']);
mysql_select_db($database['database']) or die("Fail Select DB");
mysql_query("ALTER TABLE `$database['prefix']Users` ADD `admin` INT( 11 ) NOT NULL DEFAULT '1'");
mysql_close($chakani_sql);
?>
[/LINUX]
이 php 문을 /blog/blog/sql.php 로 저장한다. 그리고 http://홈페이지주소/sql.php 를 실행시키면된다
사용자 등록은 다음과 같은 쿼리문으로 등록할수있다
[LINUX]<?php
include "../config.php";
$user_id = "자신의 USERID";
$admin = "구분할숫자"; // 다른것과 같게 하지말고 전의 사용자의 admin 에서 1을 증가해서 넣는다
$email="이메일주소"; // 사용할아이디
$password = "패스워드";
$name = "이름";
$time = time();
$host = "자신의 호스트번호";
$chakani_sql = mysql_connect($database['server'],$database['username'],$database['password']);
mysql_select_db($database['database']) or die("Fail Select DB");
mysql_query("INSERT INTO `$database['prefix']Users` (`userid`, `admin`, `loginid`, `password`, `name`, `created`, `lastLogin`, `host`) VALUES ('$user_id', '$admin', '$email', MD5('$password'), '$name', '$time', '0', '$host')");
mysql_close($chakani_sql);
?>
[/LINUX]
이것역시 /blog/blog/add.php 로 저장한다 그리고 http://홈페이지주소/add.php 를 실행시키면된다
그러면 사용자 추가 끝
2. /blog/blog/login/index.php 를 패치한다
289 줄의 함수 authorizeSession
316 줄의 함수 login 이 그대상이다
[LINUX]function authorizeSession($userid, $admin){
global $database,$service;
if(!is_numeric($userid))
return false;
$_SESSION['userid']=$userid;
$_SESSION['admin']=$admin;
if(isSessionAuthorized(session_id()))
return true;
for($i=0;$i<100;$i++){
$id=dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF));
$result=mysql_query("INSERT INTO {$database['prefix']}Sessions(id, address, userid, created, updated) VALUES('$id', '{$_SERVER['REMOTE_ADDR']}', $userid, UNIX_TIMESTAMP(), UNIX_TIMESTAMP())");
if($result&&(mysql_affected_rows()==1)){
@session_id($id);
header("Set-Cookie: TSSESSION=$id; path=/; domain={$service['domain']}");
return true;
}
}
return false;
}
[/LINUX]
[LINUX]function login($loginid,$password){
global $database;
global $service;
$loginid=mysql_escape_string($loginid);
if((strlen($password)==32)&&preg_match('/[0-9a-f]/i',$password))
$secret='(`password` = \''.md5($password)."' OR `password` = '$password')";
else
$secret='`password` = \''.md5($password).'\'';
if($result=mysql_query("SELECT userid, admin, loginid, name FROM {$database['prefix']}Users WHERE loginid = '$loginid' AND $secret")){
if($session=mysql_fetch_array($result)){
authorizeSession($session['userid'], $session['admin']);
if(empty($_POST['save']))
setcookie('TSSESSION_LOGINID','',time()-31536000,$service['path'].'/',$service['domain']);
else
setcookie('TSSESSION_LOGINID',$loginid,time()+31536000,$service['path'].'/',$service['domain']);
executeQuery("UPDATE {$database['prefix']}Users SET lastLogin = unix_timestamp() WHERE loginid = '$loginid'");
return true;
}
}
return false;
}
[/LINUX]
3. 리플 패치를 해보자
/blog/blog/comment/add/item.php 의 559번째줄 과 /blog/blog/comment/comment/item.php 의 627번째불, /blog/blog/comment/delete/item.php 의 574 번째 줄을 수정한다
줄수는 모두 틀리지만 패치해야하는 내용은 같다
list($user['loginid'],$user['name'])=fetchQueryRow("select loginid, name from {$database['prefix']}Users where userid = {$user['id']} and admin=$_SESSION[admin]");
여기 까지 패치를 하면 로그인하고 글쓰고 리풀을 다는데는 문제가 없다
다만 계정정보 관리에서 패스워드와 프로필의 업데이트가 안된다..
4. 로그인 -> 환경설정 -> 계정정보 출력을 해보자
/blog/blog/owner/setting/account/index.php 의 367 번째줄
list($user['loginid'],$user['name'])=fetchQueryRow("select loginid, name from {$database['prefix']}Users where userid = {$user['id']} and admin=$_SESSION[admin]");
5. 로그인 -> 환경설정 -> 계정정보 -> 패스워드 변경
/blog/blog/owner/setting/account/password/index.php 의 338번째줄
list($user['loginid'],$user['name'])=fetchQueryRow("select loginid, name from {$database['prefix']}Users where userid = {$user['id']} and admin=$_SESSION[admin]");
117번째 줄의 함수 changePassword 수정
[LINUX]function changePassword($owner,$pwd,$prevPwd){
global $database, $_SESSION;
if(!strlen($pwd)||!strlen($prevPwd))
return false;
if((strlen($prevPwd)==32)&&preg_match('/[0-9a-f]/i',$prevPwd))
$secret='(`password` = \''.md5($prevPwd)."' OR `password` = '$prevPwd')";
else
$secret='`password` = \''.md5($prevPwd).'\'';
$count=fetchQueryCell("select count(*) from {$database['prefix']}Users where userid = $owner and $secret");
if($count==0)
return false;
$pwd=md5($pwd);
$sql="UPDATE `{$database['prefix']}Users` SET password = '$pwd' WHERE `userid` = $owner and admin=$_SESSION[admin]";
return executeQuery($sql);
}
[/LINUX]
6. 로그인 -> 환경설정 -> 계정정보 -> 프로필 변경
/blog/blog/owner/setting/account/profile/index.php 의 335번째줄
list($user['loginid'],$user['name'])=fetchQueryRow("select loginid, name from {$database['prefix']}Users where userid = {$user['id']} and admin=$_SESSION[admin]");
114번째 줄의 함수 changeSetting
[LINUX]function changeSetting($owner,$email,$nickname){
global $database, $_SESSION;
$email=mysql_escape_string($email);
$nickname=mysql_escape_string($nickname);
if($email==''||$nickname==''){
return false;
}
$sql="UPDATE `{$database['prefix']}Users` SET loginid = '$email', name = '$nickname' WHERE `userid` = $owner and admin=$_SESSION[admin]";
$result=mysql_query($sql);
if(!$result){
return false;
}else{
return true;
}
}
[/LINUX]
이밖에도 블로그 아이콘을 사용자마다 틀리게 패치를 했지만
블로그 아이콘을 구분하는 기준이 이름밖에 없어서
사용자가 이름을 바꾸면 표시를 못하기때문에 설명에서 뺐다..ㅎㅎ
그럼 이제 커플로그를 사용해보자..
첨부된 파일은 현재 http://chakani.net 에 적용된 패치내용이다
참고 해도 좋고 /blog 아래에서 압축을 풀면 한번에 패치가 되버린다(이거 주의..)
태터 툴즈 V1.0.5 를 기반으로 작성되었다
하지만 패치는 V1.0.4 에서도 적용가능하다
CHAKANI_patch060511.tar.bz2커플로그 패치 V0.1

댓글을 달아 주세요
간단하게 팀블로그 작성이 가능하겠군요. 그런데 이거 멀티유저모드에서는 어떻게 적용하면 되지요 ??
다중사용자에서는 테스트는 안해봤지만 똑같이 적용될것 같은데요..
새로등록되는 사용자는 아이디, 이름, admin 값만 틀리게하고 나머지는 같게 등록하니까요
userid 하고 host 이 값이 같으면 될것은데요
userid의 경우 primary값이면서 자동값을 가지고 있어서 동일한 값을 줄수가 없네요... 아마도 개인사용자용은 userid에 paimary값을 넣을 필요가 없어서 안걸려 있을수도 있겠지만요 ㅠ ㅜ
저는 asp랑 ms-sql을 가지고 놀았기에... php와 my-sql만 보면 속이 울렁거리네요... +__+;;
저런경우에 아예 컬럼값을 하나 더 줘서.. .디폴트로 비어있게 하고.. 거기에 userid값을 준후에 로그인시 select구문에서 새로만든 컬럼값이 비어있지 않을경우 그 값을 userid에 대입후 로긴하게 하는건 어떨가 하는 생각이 드는데요... 가능할까요?
아!! 이거 할때 초기에 했던것이라서 잊었던 부분이군요 ^^;;
맞습니다 그부분에서 걸리는데 primary 값하고 autoindex 값을 해제한 디비를 사용했었습니다
DB 에서 그값만 해제시켜주면 됩니다.
좋은 플러그인이군요. 이것때문에 다중사용자모드로 설치해서 사용하는데 불편해 죽겠더라구요. 저의 고민을 깔끔하게 해결해 주셨군요. 감사합니다.
죄송합니다만.. 질문좀 드려도 될런지요..
아래 부분에서...
$user_id = "자신의 USERID";
$admin = "구분할숫자"; // 다른것과 같게 하지말고 전의 사용자의 admin 에서 1을 증가해서 넣는다
$email="이메일주소"; // 사용할아이디
$password = "패스워드";
$name = "이름";
$time = time();
$host = "자신의 호스트번호";
이메일주소, 패스워드, 이름은 다른 사람의 로그인 정보를 넣는것일테고..
그 외의 부분...
자신의 userid, 구분할숫자.. 호스트번호에는 뭘 넣어야 할지가 막막합니다..
기존에 사용하던 제보보드는 나름대로 이거저거 많이 수정해가면서 사용해왔는데..
태터는 초짜라.. 이거 원 무슨 소리인지.. ㅡㅡ;;
참고로 현재 혼자 사용중이며.. 집사람 로긴 정보를 넣어볼려고 하는 중입니다..
즉, 사용자 1명 추가를 할려고 하는 상태이죠..
간단하게 다음과 같은 php 문을 실행하면됩니다
;
;
;
;
<?php
include "../config.php";
$user_id = "자신의 로그인하는 이메일주소";
$email="이메일주소"; // 사용할아이디
$password = "패스워드";
$name = "이름";
$chakani_sql = mysql_connect($database['server'],$database['username'],$database['password']);
mysql_select_db($database['database']) or die("Fail Select DB"
$Uresult = mysql_query("SELECT * FROM ".$database['prefix']."Users WHERE loginid='$user_id'"
$Urow = mysql_fetch_array($Uresult);
$Aresult = mysql_query("SELECT * FROM ".$database['prefix']."Users WHERE userid='$Urow[userid]' ORDER BY admin DESC"
$Arow = mysql_fetch_array($Aresult);
$admin = $Arow[admin]+1;
$time = time();
mysql_query("INSERT INTO `$database['prefix']Users` (`userid`, `admin`, `loginid`, `password`, `name`, `created`, `lastLogin`, `host`) VALUES ('$Urow[userid]', '$admin', '$email', MD5('$password'), '$name', '$time', '0', '$Urow[host]')"
mysql_close($chakani_sql);
?>
히궁.. 이것두 실패했습니다.. 오류가 나오네요...
그리고 새로 올려주신것 봤습니다..
그걸로 다시 해봐야겠습니다.. ^^
신경써주셔서 감사합니다..
이것만 성공하면.. 태터로 갈아탈 준비가 거의 되어가는데~~
그니//같이 사용할 태터 관리자(운영자?)의 DB정보를 보면 호스트번호와 userid의 숫자가 있습니다. 그 숫자를 동일하게 넣어주면 됩니다...
요청 드릴께 있어서 왔다가 답을 달고 가네요 +__+;;
차칸아이님 먼저 위에 올렸었던 질문은 DB에서 primar값과 autoindex값을 해제해서 넘어갔습니다. 그런데 추가한 사용자로 로그인을 하고 새로운글을 남기면 원 블로그의 주인의 이름으로 표시가 되더군요... 아무래도 글을 저장할때 세션의 유저명을 넣지 않고 사전에 db에서 불러온 원 사용자의 이름을 저장하는것 같습니다. (개인적인 생각이니 틀렸따고 미워하지는 말아주세요 ㅠ ㅜ)
저 부분도 수정하셔서 올려주시면 더욱 완벽하게 될것 같아서 요청을 드립니다.
가능할까요?
이름이 표시되는 부분은 방명록하고 리플에 관해서 패치가되어있습니다
포스팅에서 이름을 표시할려면(DB 에 이름을 넣는 부분없이 onwer 변수로 구분하기때문에) DB 안에 새로운 테이블 하나를 추가해야하는 문제가 발생합니다
만약 테이블을 추가해도 괜찮다면 작업에 착수하겠습니다 ^^
리플 달아주시길..ㅎㅎ
신경써주셔서 감사합니다. ㅠ ㅜ
감동의 눈물입니다..흑흑~
어차피 이미 테이블은 추가된 상태니까요 ^^ 더 추가된다 해도 문제될껀 없습니다.
단지 차칸아이님의 시간을 뺴앗게 되는게 죄송스러울 따름입니다.
그럼 죄송스럽지만 부탁을 드리겠습니다. ^^ 감사합니다~!!!
새로 패치해서 글을 올렸습니다
최신글에서 확인해주세요 ^^
(원하시던 내용을 제대로 잘 구현했는지 모르겠네요 ^^;
테터툴즈 플러그인 자료실에 있는 팀블로깅 패치와 이거랑 다른건가요?
저도 와이프랑 같이 테터툴즈를 사용하고 싶어서요...
죄송하지만..답변 부탁드려요..수고하세요...
태터툴즈 플러그인 게시판에 발표한것의 모태라고나 할수있습니다
이것을 시작으로 팀블로그를 만들었거든요
현재의 포스팅은 태터툴즈 1.0.5 에만 적용할수있는것이고 그기능역시 상당히 제약적입니다
최신버전을 참고하시는게 좋을것 같아요 ^^