write_update.php 하기전에 글을 임시로 저장하기

불당   
   조회 18657   추천 0     비추천 0    

글을 쓰다가 "쓰기" 버튼을 눌렀는데 alert 날리면서 모든 글이 휘리릭?
돌아 버리죠. ㅎㅎ
이 문제는 write_update.php에서 alert를 날리기 때문 입니다.
alert를 하면 java script로 history -1을 하게 되구요.
이 방법을 해결 하기 위한 편법으로 쿠키나 session 정의 변경을 하는데 모두 보안 문제 있구요.
 
그래서, write_update.php의 앞부분에 무조건 값을 저장하는 코드를 넣어두고,
다시 write를 하려고 하면, 저장된 값을 읽어서를 넣어줍니다.
 
naver나 다음의 임시저장 기능이 편할거 같은데, 실제로 저도 거의 안쓰는데
지금 안쓰면 나중에 별로 쓸 생각이 안나니까요. ㅎㅎ
 
이 기능은
쓰다가 웹브라우져가 죽어서 날라가는 것은 천재지변이라 모른척 하고,
첨부파일이나 link 같은거 날아가는 것도 모른척 합니다.
딱, 제목과 글 내용만 그대로 복구 됩니다.
 
config.php에 테이블을 등록 합니다.
 
$g4[tempsave_table]         = $g4['table_prefix'] . "tempsave";           // 임시저장 테이블
 
phpmyadmin으로 db를 생성합니다.
 
CREATE TABLE IF NOT EXISTS `g4_tempsave` (
  `tmp_id` int(11) NOT NULL AUTO_INCREMENT,
  `mb_id` varchar(255) NOT NULL,
  `bo_table` varchar(255) NOT NULL,
  `wr_id` int(11) NOT NULL,
  `wr_subject` varchar(255) NOT NULL,
  `wr_content` text NOT NULL,
  `wr_datetime` datetime NOT NULL,
  `ip_addr` varchar(255) NOT NULL,
  `wr_session` varchar(255) NOT NULL,
  PRIMARY KEY (`tmp_id`),
  KEY `mb_id` (`mb_id`),
  KEY `wr_session` (`wr_session`),
  KEY `bo_table` (`bo_table`)
)
 
 
write.php에서 write.skin.php 올리기 전에 아래 코드를 추가 합니다.
 
// 불당팩 - 임시저장, session을 만들어준다.
if ($_SESSION[ss_tempsave] == "") {
    set_session("ss_tempsave", $g4[server_time]);
} else {
    $ss_tempsave = $_SESSION[ss_tempsave];
    // 여유 있게, 5분 이내의 세션만 유효한걸루 인정한다. 실제로는 1분 이내만 인정하는게 맞는거다. 가끔 웹 브라우저가 죽기도 하니 5분 주는거다.
    $new_time = date("Y-m-d H:i:s", $g4['server_time'] - 60*5 - 1);
    $sql = " select * from $g4[tempsave_table] where wr_session = '$ss_tempsave' and bo_table='$bo_table' and wr_id='$wr_id' and wr_datetime > '$new_time' order by tmp_id desc limit 1";
    $wr = sql_fetch($sql);
    if ($wr) {
        $content = get_text(trim($wr[wr_content]), 0);
        $subject = get_text(trim($wr[wr_subject]), 0);
    }
}
 
 
bbs/write_update.php의 앞에 아래 코드를 추가하고
 
// 불당팩 - 이전에 저장된 것은 싹~ 지우고, 임시저장 DB에 저장을 해줍니다.
$ss_tempsave = $_SESSION[ss_tempsave];
$sql = " delete from $g4[tempsave_table] where wr_session='$ss_tempsave' ";
sql_query($sql);
$sql = " delete from $g4[tempsave_table] where bo_table='$bo_table' and mb_id = '$member[mb_id]' ";
sql_query($sql);
$sql = " insert into $g4[tempsave_table]
            set
                bo_table='$bo_table',
                wr_id='$wr_id',
                wr_subject='$wr_subject',
                wr_content='$wr_content',
                mb_id='$member[mb_id]',
                wr_datetime='$g4[time_ymdhis]',
                ip_addr = '$remote_addr',
                wr_session='$ss_tempsave' ";
sql_query($sql);
// 임시 DB 복구를 위해서 돌아갈 url을 정의해 줍니다.
if ($w == "r")
    $goto_url = "$g4[bbs_path]/write.php?bo_table=$bo_table&w=r&wr_id=$wr_id";
else if ($w == "u")
    $goto_url = "$g4[bbs_path]/write.php?bo_table=$bo_table&w=u&wr_id=$wr_id";
else
    $goto_url = "$g4[bbs_path]/write.php?bo_table=$bo_table";
 
bbs/write_update.php의 마지막에 아래 코드를 추가 합니다.
 
// 불당팩 - 임시저장된 것을 지워주고 세션도 날립니다.
$sql = " delete from $g4[tempsave_table] where wr_session = '$ss_tempsave' ";
sql_query($sql);
set_session("ss_tempsave", "");
 
 
마지막으로 bbs/write_update.php의 alert 함수중에, 두번째 인자가 없는 것에 $goto_url을 넣어줍니다.
단, 아래의 alert는 수정하면 안됩니다. 파일 용량이 넘치기 때문에 인자가 전달 안되서 goto_url 못 씁니다.
 
if (empty($_POST))
    alert("파일 또는 글내용의 크기가 서버에서 설정한 값을 넘어 오류가 발생하였습니다.\\n\\npost_max_size=".ini_get('post_max_size')." , upload_max_filesize=$upload_max_filesize\\n\\n게시판관리자 또는 서버관리자에게 문의 바랍니다.");
 
예)
 alert("비밀글 미사용 게시판 이므로 비밀글로 등록할 수 없습니다.", $goto_url); 
 
 
참 쉽죠??? ^^
- opencode.co.kr -
쫠스 2013-06
와 이거 너무 좋을거 같습니다.
제 사이트가 5분단위로 리플레쉬 하게 만들어놨는데
꼭 필요할거 같네요~~!! 정말 고마운 소스 ^^
     
불당 2013-06
이렇게 고치면 어느순간 불당팩이 됩니다. ㅎㅎ
제가 불당팩 배포를 하게 된 이유가... 버전업때마다 소스 수정하기 귀챦아서였죠.

그리고, redis. 그거 적용하세요.
200% 만족할 겁니다.


제목Page 11/28
2011-10   12857   불당
2011-09   11047   불당
2011-09   14307   불당
2011-09   13861   불당
2011-09   10787   불당
2012-04   11568   불당
2011-09   11061   불당
2011-09   13328   불당
2011-09   11752   불당
2011-09   14437   불당
2011-09   19141   불당
2011-08   27385   불당
2011-08   11597   불당
2011-08   12823   불당
2011-08   14549   불당
2011-07   11862   불당
2011-07   12569   불당
2011-07   13677   불당
2011-07   15472   불당
2011-07   14535   테스터