write_update.php ϱ ӽ÷ ϱ

Ҵ   
   ȸ 19466   õ 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 10/28
2011-11   15348   Ҵ
2011-10   14218   Ҵ
2011-10   14094   Ҵ
2011-10   14405   Ҵ
2011-10   15249   Ҵ
2011-10   13195   Ҵ
2011-10   14275   Ҵ
2011-10   14362   Ҵ
2011-10   18198   Ҵ
2011-10   14843   Ҵ
2011-10   14070   Ҵ
2011-10   14169   Ҵ
2011-10   13156   Ҵ
2011-10   15293   Ҵ
2011-10   11074   Ҵ
2011-10   12921   Ҵ
2011-10   10459   Ҵ
2011-10   11584   Ҵ
2011-10   11523   Ҵ
2011-10   19467   Ҵ