답변 4개
꼭 바꾸셔야 한다면
/lib/common.lib.php 2086 줄에서
$key = date('YmdHis', time()) . str_pad((int)(microtime()*100), 2, "0", STR_PAD_LEFT);
==>
$key = date('YmdHis', time()), 2, "0", STR_PAD_LEFT);
요렇게 하시면 줄겁니다.
근데 되도록이면 시스템은 안건디는게 좋긴하죠
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
if (!defined('_GNUBOARD_')) exit;
/*************************************************************************
**
** 일반 함수 모음
**
*************************************************************************/
// 마이크로 타임을 얻어 계산 형식으로 만듦
function get_microtime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
// 현재페이지, 총페이지수, 한페이지에 보여줄 행, URL
function get_paging($write_pages, $cur_page, $total_page, $url, $add="")
{
$str = "";
if ($cur_page > 1) {
$str .= "처음";
//$str .= "[이전]";
}
$start_page = ( ( (int)( ($cur_page - 1 ) / $write_pages ) ) * $write_pages ) + 1;
$end_page = $start_page + $write_pages - 1;
if ($end_page >= $total_page) $end_page = $total_page;
if ($start_page > 1) $str .= " 이전";
if ($total_page > 1) {
for ($k=$start_page;$k<=$end_page;$k++) {
if ($cur_page != $k)
$str .= " $k";
else
$str .= " $k ";
}
}
if ($total_page > $end_page) $str .= " 다음";
if ($cur_page < $total_page) {
//$str .= "[다음]";
$str .= " 맨끝";
}
$str .= "";
return $str;
}
// 변수 또는 배열의 이름과 값을 얻어냄. print_r() 함수의 변형
function print_r2($var)
{
ob_start();
print_r($var);
$str = ob_get_contents();
ob_end_clean();
$str = preg_replace("/ /", " ", $str);
echo nl2br("$str");
}
// 메타태그를 이용한 URL 이동
// header("location:URL") 을 대체
function goto_url($url)
{
echo "";
exit;
}
// 세션변수 생성
function set_session($session_name, $value)
{
if (PHP_VERSION < '5.3.0')
session_register($session_name);
// PHP 버전별 차이를 없애기 위한 방법
$$session_name = $_SESSION["$session_name"] = $value;
}
// 세션변수값 얻음
function get_session($session_name)
{
return $_SESSION[$session_name];
}
function sql_old_password($value)
{
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = sql_fetch(" select old_password('$value') as pass ");
return $row[pass];
}
// 쿠키변수 생성
function set_cookie($cookie_name, $value, $expire)
{
global $g4;
setcookie(md5($cookie_name), base64_encode($value), $g4[server_time] + $expire, '/', $g4[cookie_domain]);
}
// 쿠키변수값 얻음
function get_cookie($cookie_name)
{
return base64_decode($_COOKIE[md5($cookie_name)]);
}
// 경고메세지를 경고창으로
function alert($msg='', $url='')
{
global $g4;
if (!$msg) $msg = '올바른 방법으로 이용해 주십시오.';
//header("Content-Type: text/html; charset=$g4[charset]");
echo "";
echo "";
if ($url)
// 4.06.00 : 불여우의 경우 아래의 코드를 제대로 인식하지 못함
//echo "";
goto_url($url);
exit;
}
// 경고메세지 출력후 창을 닫음
function alert_close($msg)
{
global $g4;
echo "";
echo "";
exit;
}
// way.co.kr 의 wayboard 참고
function url_auto_link($str)
{
global $g4;
global $config;
// 속도 향상 031011
$str = preg_replace("/</", "\t_lt_\t", $str);
$str = preg_replace("/>/", "\t_gt_\t", $str);
$str = preg_replace("/&/", "&", $str);
$str = preg_replace("/"/", "\"", $str);
$str = preg_replace("/ /", "\t_nbsp_\t", $str);
$str = preg_replace("/([^(http:\/\/)]|\(|^)(www\.[^[:space:]]+)/i", "\\1http://\\2\" TARGET='$config[cf_link_target]'>\\2", $str);
//$str = preg_replace("/([^(HREF=\"?'?)|(SRC=\"?'?)]|\(|^)((http|https|ftp|telnet|news|mms):\/\/[a-zA-Z0-9\.-]+\.[\xA1-\xFEa-zA-Z0-9\.:=_\?\/~\+%@;\-\|\,]+)/i", "\\1\\2", $str);
// 100825 : () 추가
// 120315 : CHARSET 에 따라 링크시 글자 잘림 현상이 있어 수정
if (strtoupper($g4['charset']) == 'UTF-8') {
$str = preg_replace("/([^(HREF=\"?'?)|(SRC=\"?'?)]|\(|^)((http|https|ftp|telnet|news|mms):\/\/[a-zA-Z0-9\.-]+\.[가-힣\xA1-\xFEa-zA-Z0-9\.:=_\?\/~\+%@;\-\|\,\(\)]+)/i", "\\1\\2", $str);
} else {
$str = preg_replace("/([^(HREF=\"?'?)|(SRC=\"?'?)]|\(|^)((http|https|ftp|telnet|news|mms):\/\/[a-zA-Z0-9\.-]+\.[\xA1-\xFEa-zA-Z0-9\.:=_\?\/~\+%@;\-\|\,\(\)]+)/i", "\\1\\2", $str);
}
// 이메일 정규표현식 수정 061004
//$str = preg_replace("/(([a-z0-9_]|\-|\.)+@([^[:space:]]*)([[:alnum:]-]))/i", "\\1", $str);
$str = preg_replace("/([0-9a-z]([-_\.]?[0-9a-z])*@[0-9a-z]([-_\.]?[0-9a-z])*\.[a-z]{2,4})/i", "\\1", $str);
$str = preg_replace("/\t_nbsp_\t/", " " , $str);
$str = preg_replace("/\t_lt_\t/", "<", $str);
$str = preg_replace("/\t_gt_\t/", ">", $str);
return $str;
}
// url에 http:// 를 붙인다
function set_http($url)
{
if (!trim($url)) return;
if (!preg_match("/^(http|https|ftp|telnet|news|mms)\:\/\//i", $url))
$url = "http://" . $url;
return $url;
}
// 파일의 용량을 구한다.
//function get_filesize($file)
function get_filesize($size)
{
//$size = @filesize(addslashes($file));
if ($size >= 1048576) {
$size = number_format($size/1048576, 1) . "M";
} else if ($size >= 1024) {
$size = number_format($size/1024, 1) . "K";
} else {
$size = number_format($size, 0) . "byte";
}
return $size;
}
// 게시글에 첨부된 파일을 얻는다. (배열로 반환)
function get_file($bo_table, $wr_id)
{
global $g4, $qstr;
$file["count"] = 0;
$sql = " select * from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no ";
$result = sql_query($sql);
while ($row = sql_fetch_array($result))
{
$no = $row[bf_no];
$file[$no][href] = "./download.php?bo_table=$bo_table&wr_id=$wr_id&no=$no" . $qstr;
$file[$no][download] = $row[bf_download];
// 4.00.11 - 파일 path 추가
$file[$no][path] = "$g4[path]/data/file/$bo_table";
//$file[$no][size] = get_filesize("{$file[$no][path]}/$row[bf_file]");
$file[$no][size] = get_filesize($row[bf_filesize]);
//$file[$no][datetime] = date("Y-m-d H:i:s", @filemtime("$g4[path]/data/file/$bo_table/$row[bf_file]"));
$file[$no][datetime] = $row[bf_datetime];
$file[$no][source] = addslashes($row[bf_source]);
$file[$no][bf_content] = $row[bf_content];
$file[$no][content] = get_text($row[bf_content]);
//$file[$no][view] = view_file_link($row[bf_file], $file[$no][content]);
$file[$no][view] = view_file_link($row[bf_file], $row[bf_width], $row[bf_height], $file[$no][content]);
$file[$no][file] = $row[bf_file];
// prosper 님 제안
//$file[$no][imgsize] = @getimagesize("{$file[$no][path]}/$row[bf_file]");
$file[$no][image_width] = $row[bf_width] ? $row[bf_width] : 640;
$file[$no][image_height] = $row[bf_height] ? $row[bf_height] : 480;
$file[$no][image_type] = $row[bf_type];
$file["count"]++;
}
return $file;
}
// 폴더의 용량 ($dir는 / 없이 넘기세요)
function get_dirsize($dir)
{
$size = 0;
$d = dir($dir);
while ($entry = $d->read()) {
if ($entry != "." && $entry != "..") {
$size += filesize("$dir/$entry");
}
}
$d->close();
return $size;
}
/*************************************************************************
**
** 그누보드 관련 함수 모음
**
*************************************************************************/
// 게시물 정보($write_row)를 출력하기 위하여 $list로 가공된 정보를 복사 및 가공
function get_list($write_row, $board, $skin_path, $subject_len=40)
{
global $g4, $config;
global $qstr, $page;
//$t = get_microtime();
// 배열전체를 복사
$list = $write_row;
unset($write_row);
$list['is_notice'] = preg_match("/[^0-9]{0,1}{$list['wr_id']}[\r]{0,1}/",$board['bo_notice']);
if ($subject_len)
$list['subject'] = conv_subject($list['wr_subject'], $subject_len, "…");
else
$list['subject'] = conv_subject($list['wr_subject'], $board['bo_subject_len'], "…");
// 목록에서 내용 미리보기 사용한 게시판만 내용을 변환함 (속도 향상) : kkal3(커피)님께서 알려주셨습니다.
if ($board['bo_use_list_content'])
{
$html = 0;
if (strstr($list['wr_option'], "html1"))
$html = 1;
else if (strstr($list['wr_option'], "html2"))
$html = 2;
$list['content'] = conv_content($list['wr_content'], $html);
}
$list['comment_cnt'] = "";
if ($list['wr_comment'])
$list['comment_cnt'] = "($list[wr_comment])";
// 당일인 경우 시간으로 표시함
$list['datetime'] = substr($list['wr_datetime'],0,10);
$list['datetime2'] = $list['wr_datetime'];
if ($list['datetime'] == $g4['time_ymd'])
$list['datetime2'] = substr($list['datetime2'],11,5);
else
$list['datetime2'] = substr($list['datetime2'],5,5);
// 4.1
$list['last'] = substr($list['wr_last'],0,10);
$list['last2'] = $list['wr_last'];
if ($list['last'] == $g4['time_ymd'])
$list['last2'] = substr($list['last2'],11,5);
else
$list['last2'] = substr($list['last2'],5,5);
$list['wr_homepage'] = get_text(addslashes($list['wr_homepage']));
$tmp_name = get_text(cut_str($list['wr_name'], $config['cf_cut_name'])); // 설정된 자리수 만큼만 이름 출력
if ($board['bo_use_sideview'])
$list['name'] = get_sideview($list['mb_id'], $tmp_name, $list['wr_email'], $list['wr_homepage']);
else
$list['name'] = "$tmp_name";
$reply = $list['wr_reply'];
$list['reply'] = "";
if (strlen($reply) > 0)
{
for ($k=0; $k $list['reply'] .= ' '; } $list['icon_reply'] = ""; if ($list['reply']) $list['icon_reply'] = " $list['icon_link'] = ""; if ($list['wr_link1'] || $list['wr_link2']) $list['icon_link'] = " // 분류명 링크 $list['ca_name_href'] = "$g4[bbs_path]/board.php?bo_table=$board[bo_table]&sca=".urlencode($list['ca_name']); $list['href'] = "$g4[bbs_path]/board.php?bo_table=$board[bo_table]&wr_id=$list[wr_id]" . $qstr; //$list['href'] = "$g4[bbs_path]/board.php?bo_table=$board[bo_table]&wr_id=$list[wr_id]"; if ($board['bo_use_comment']) $list['comment_href'] = "javascript:win_comment('$g4[bbs_path]/board.php?bo_table=$board[bo_table]&wr_id=$list[wr_id]&cwin=1');"; else $list['comment_href'] = $list['href']; $list['icon_new'] = ""; if ($list['wr_datetime'] >= date("Y-m-d H:i:s", $g4['server_time'] - ($board['bo_new'] * 3600))) $list['icon_new'] = " $list['icon_hot'] = ""; if ($list['wr_hit'] >= $board['bo_hot']) $list['icon_hot'] = " $list['icon_secret'] = ""; if (strstr($list['wr_option'], "secret")) $list['icon_secret'] = " // 링크 for ($i=1; $i<=$g4['link_count']; $i++) { $list['link'][$i] = set_http(get_text($list["wr_link{$i}"])); $list['link_href'][$i] = "$g4[bbs_path]/link.php?bo_table=$board[bo_table]&wr_id=$list[wr_id]&no=$i" . $qstr; $list['link_hit'][$i] = (int)$list["wr_link{$i}_hit"]; } // 가변 파일 $list['file'] = get_file($board['bo_table'], $list['wr_id']); if ($list['file']['count']) $list['icon_file'] = " return $list; } // get_list 의 alias function get_view($write_row, $board, $skin_path, $subject_len=125) { return get_list($write_row, $board, $skin_path, $subject_len); } // set_search_font(), get_search_font() 함수를 search_font() 함수로 대체 function search_font($stx, $str) { global $config; // 문자앞에 \ 를 붙입니다. $src = array("/", "|"); $dst = array("\/", "\|"); if (!trim($stx)) return $str; // 검색어 전체를 공란으로 나눈다 $s = explode(" ", $stx); // "/(검색1|검색2)/i" 와 같은 패턴을 만듬 $pattern = ""; $bar = ""; for ($m=0; $m if (trim($s[$m]) == "") continue; // 태그는 포함하지 않아야 하는데 잘 안되는군. ㅡㅡa //$pattern .= $bar . '([^<])(' . quotemeta($s[$m]) . ')'; //$pattern .= $bar . quotemeta($s[$m]); //$pattern .= $bar . str_replace("/", "\/", quotemeta($s[$m])); $tmp_str = quotemeta($s[$m]); $tmp_str = str_replace($src, $dst, $tmp_str); $pattern .= $bar . $tmp_str . "(?![^<]*>)"; $bar = "|"; } // 지정된 검색 폰트의 색상, 배경색상으로 대체 $replace = "\\1"; return preg_replace("/($pattern)/i", $replace, $str); } // 제목을 변환 function conv_subject($subject, $len, $suffix="") { return cut_str(get_text($subject), $len, $suffix); } // OBJECT 태그의 XSS 막기 function bad120422($matches) { $tag = $matches[1]; $code = $matches[2]; if (preg_match("#\bscript\b#i", $code)) { return "$tag 태그에 스크립트는 사용 불가합니다."; } else if (preg_match("#\bbase64\b#i", $code)) { return "$tag 태그에 BASE64는 사용 불가합니다."; } return $matches[0]; } // 내용을 변환 function conv_content($content, $html) { global $config, $board; if ($html) { $source = array(); $target = array(); $source[] = "//"; $target[] = ""; if ($html == 2) { // 자동 줄바꿈 $source[] = "/\n/"; $target[] = "
"; } // 테이블 태그의 갯수를 세어 테이블이 깨지지 않도록 한다. $table_begin_count = substr_count(strtolower($content), " $table_end_count = substr_count(strtolower($content), " for ($i=$table_end_count; $i<$table_begin_count; $i++) { $content .= ""; } $content = preg_replace($source, $target, $content); $content = bad_tag_convert($content); // XSS (Cross Site Script) 막기 // 완벽한 XSS 방지는 없다. // 이런 경우를 방지함 $content = preg_replace("#\/\*.*\*\/#iU", "", $content); // object, embed 태그에서 javascript 코드 막기 $content = preg_replace_callback("#<(object|embed)([^>]+)>#i", "bad120422", $content); $content = preg_replace("/(on)([a-z]+)([^a-z]*)(\=)/i", "on$2$3$4", $content); $content = preg_replace("/(dy)(nsrc)/i", "dy$2", $content); $content = preg_replace("/(lo)(wsrc)/i", "lo$2", $content); $content = preg_replace("/(sc)(ript)/i", "sc$2", $content); $content = preg_replace_callback("#<([^>]+)#", create_function('$m', 'return "<".str_replace("<", "<", $m[1]);'), $content); $content = preg_replace("/\<(\w|\s|\?)*(xml)/i", "", $content); // 플래시의 액션스크립트와 자바스크립트의 연동을 차단하여 악의적인 사이트로의 이동을 막는다. // value="always" 를 value="never" 로, allowScriptaccess="always" 를 allowScriptaccess="never" 로 변환하는데 목적이 있다. $content = preg_replace("/((?<=\]+)(\s*=\s*[\'\"]?)always([\'\"]?)([^>]+(?=\>))/i", "$1$2never$3$4", $content); // 이미지 태그의 src 속성에 삭제등의 링크가 있는 경우 게시물을 확인하는 것만으로도 데이터의 위변조가 가능하므로 이것을 막음 $content = preg_replace("/<(img[^>]+delete\.php[^>]+bo_table[^>]+)/i", "*** CSRF 감지 : <$1", $content); $content = preg_replace("/<(img[^>]+delete_comment\.php[^>]+bo_table[^>]+)/i", "*** CSRF 감지 : <$1", $content); $content = preg_replace("/<(img[^>]+logout\.php[^>]+)/i", "*** CSRF 감지 : <$1", $content); $content = preg_replace("/<(img[^>]+download\.php[^>]+bo_table[^>]+)/i", "*** CSRF 감지 : <$1", $content); $pattern = ""; $pattern .= "(e|(x65|101);?)"; $pattern .= "(x|(x78|120);?)"; $pattern .= "(p|(x70|112);?)"; $pattern .= "(r|(x72|114);?)"; $pattern .= "(e|(x65|101);?)"; $pattern .= "(s|(x73|115);?)"; $pattern .= "(s|(x73|115);?)"; $pattern .= "(i|(x6a|105);?)"; $pattern .= "(o|(x6f|111);?)"; $pattern .= "(n|(x6e|110);?)"; $content = preg_replace("/".$pattern."/i", "__EXPRESSION__", $content); } else // text 이면 { // & 처리 : & 등의 코드를 정상 출력함 $content = html_symbol($content); // 공백 처리 //$content = preg_replace("/ /", " ", $content); $content = str_replace(" ", " ", $content); $content = str_replace("\n ", "\n ", $content); $content = get_text($content, 1); $content = url_auto_link($content); } return $content; } // 검색 구문을 얻는다. function get_sql_search($search_ca_name, $search_field, $search_text, $search_operator='and') { global $g4; $str = ""; if ($search_ca_name) $str = " ca_name = '$search_ca_name' "; $search_text = strip_tags(($search_text)); $search_text = trim(stripslashes($search_text)); if (!$search_text) { if ($search_ca_name) { return $str; } else { return '0'; } } if ($str) $str .= " and "; // 쿼리의 속도를 높이기 위하여 ( ) 는 최소화 한다. $op1 = ""; // 검색어를 구분자로 나눈다. 여기서는 공백 $s = array(); $s = explode(" ", $search_text); // 검색필드를 구분자로 나눈다. 여기서는 + $tmp = array(); $tmp = explode(",", trim($search_field)); $field = explode("||", $tmp[0]); $not_comment = $tmp[1]; $str .= "("; for ($i=0; $i // 검색어 $search_str = trim($s[$i]); if ($search_str == "") continue; // 인기검색어 $sql = " insert into $g4[popular_table] set pp_word = '$search_str', pp_date = '$g4[time_ymd]', pp_ip = '$_SERVER[REMOTE_ADDR]' "; sql_query($sql, FALSE); $str .= $op1; $str .= "("; $op2 = ""; for ($k=0; $k // SQL Injection 방지 // 필드값에 a-z A-Z 0-9 _ , | 이외의 값이 있다면 검색필드를 wr_subject 로 설정한다. $field[$k] = preg_match("/^[\w\,\|]+$/", $field[$k]) ? $field[$k] : "wr_subject"; $str .= $op2; switch ($field[$k]) { case "mb_id" : case "wr_name" : $str .= " $field[$k] = '$s[$i]' "; break; case "wr_hit" : case "wr_good" : case "wr_nogood" : $str .= " $field[$k] >= '$s[$i]' "; break; // 번호는 해당 검색어에 -1 을 곱함 case "wr_num" : $str .= "$field[$k] = ".((-1)*$s[$i]); break; case "wr_ip" : case "wr_password" : $str .= "1=0"; // 항상 거짓 break; // LIKE 보다 INSTR 속도가 빠름 default : if (preg_match("/[a-zA-Z]/", $search_str)) $str .= "INSTR(LOWER($field[$k]), LOWER('$search_str'))"; else $str .= "INSTR($field[$k], '$search_str')"; break; } $op2 = " or "; } $str .= ")"; $op1 = " $search_operator "; } $str .= " ) "; if ($not_comment) $str .= " and wr_is_comment = '0' "; return $str; } // 게시판 테이블에서 하나의 행을 읽음 function get_write($write_table, $wr_id) { return sql_fetch(" select * from $write_table where wr_id = '$wr_id' "); } // 게시판의 다음글 번호를 얻는다. function get_next_num($table) { // 가장 작은 번호를 얻어 $sql = " select min(wr_num) as min_wr_num from $table "; $row = sql_fetch($sql); // 가장 작은 번호에 1을 빼서 넘겨줌 return (int)($row[min_wr_num] - 1); } // 그룹 설정 테이블에서 하나의 행을 읽음 function get_group($gr_id) { global $g4; return sql_fetch(" select * from $g4[group_table] where gr_id = '$gr_id' "); } // 회원 정보를 얻는다. function get_member($mb_id, $fields='*') { global $g4; return sql_fetch(" select $fields from $g4[member_table] where mb_id = TRIM('$mb_id') "); } // 날짜, 조회수의 경우 높은 순서대로 보여져야 하므로 $flag 를 추가 // $flag : asc 낮은 순서 , desc 높은 순서 // 제목별로 컬럼 정렬하는 QUERY STRING function subject_sort_link($col, $query_string='', $flag='asc') { global $sst, $sod, $sfl, $stx, $page; $q1 = "sst=$col"; if ($flag == 'asc') { $q2 = 'sod=asc'; if ($sst == $col) { if ($sod == 'asc') { $q2 = 'sod=desc'; } } } else { $q2 = 'sod=desc'; if ($sst == $col) { if ($sod == 'desc') { $q2 = 'sod=asc'; } } } return ""; } // 관리자 정보를 얻음 function get_admin($admin='super') { global $config, $group, $board; global $g4; $is = false; if ($admin == 'board') { $mb = sql_fetch("select * from $g4[member_table] where mb_id in ('$board[bo_admin]') limit 1 "); $is = true; } if (($is && !$mb[mb_id]) || $admin == 'group') { $mb = sql_fetch("select * from $g4[member_table] where mb_id in ('$group[gr_admin]') limit 1 "); $is = true; } if (($is && !$mb[mb_id]) || $admin == 'super') { $mb = sql_fetch("select * from $g4[member_table] where mb_id in ('$config[cf_admin]') limit 1 "); } //echo "select * from $g4[member_table] where mb_id in ('$config[cf_admin]') limit 1"; return $mb; } // 관리자인가? function is_admin($mb_id) { global $config, $group, $board; if (!$mb_id) return; if ($config['cf_admin'] == $mb_id) return 'super'; if ($group['gr_admin'] == $mb_id) return 'group'; if ($board['bo_admin'] == $mb_id) return 'board'; return ''; } // 분류 옵션을 얻음 // 4.00 에서는 카테고리 테이블을 없애고 보드테이블에 있는 내용으로 대체 function get_category_option($bo_table='') { global $g4, $board; /* $sql = " select bo_category_list from $g4[board_table] where bo_table = '$bo_table' "; $row = sql_fetch($sql); $arr = explode("|", $row[bo_category_list]); // 구분자가 , 로 되어 있음 */ $arr = explode("|", $board[bo_category_list]); // 구분자가 , 로 되어 있음 $str = ""; for ($i=0; $i if (trim($arr[$i])) $str .= "\n"; return $str; } // 게시판 그룹을 SELECT 형식으로 얻음 function get_group_select($name, $selected='', $event='') { global $g4, $is_admin, $member; $sql = " select gr_id, gr_subject from $g4[group_table] a "; if ($is_admin == "group") { $sql .= " left join $g4[member_table] b on (b.mb_id = a.gr_admin) where b.mb_id = '$member[mb_id]' "; } $sql .= " order by a.gr_id "; $result = sql_query($sql); $str = " for ($i=0; $row=sql_fetch_array($result); $i++) { $str .= ""; } $str .= ""; return $str; } // '예', '아니오'를 SELECT 형식으로 얻음 function get_yn_select($name, $selected='1', $event='') { $str = " if ($selected) { $str .= ""; $str .= ""; } else { $str .= ""; $str .= ""; } $str .= ""; return $str; } // 포인트 부여 function insert_point($mb_id, $point, $content='', $rel_table='', $rel_id='', $rel_action='') { global $config; global $g4; global $is_admin; // 포인트 사용을 하지 않는다면 return if (!$config[cf_use_point]) { return 0; } // 포인트가 없다면 업데이트 할 필요 없음 if ($point == 0) { return 0; } // 회원아이디가 없다면 업데이트 할 필요 없음 if ($mb_id == "") { return 0; } $mb = sql_fetch(" select mb_id from $g4[member_table] where mb_id = '$mb_id' "); if (!$mb[mb_id]) { return 0; } // 이미 등록된 내역이라면 건너뜀 if ($rel_table || $rel_id || $rel_action) { $sql = " select count(*) as cnt from $g4[point_table] where mb_id = '$mb_id' and po_rel_table = '$rel_table' and po_rel_id = '$rel_id' and po_rel_action = '$rel_action' "; $row = sql_fetch($sql); if ($row[cnt]) return -1; } // 포인트 건별 생성 $sql = " insert into $g4[point_table] set mb_id = '$mb_id', po_datetime = '$g4[time_ymdhis]', po_content = '".addslashes($content)."', po_point = '$point', po_rel_table = '$rel_table', po_rel_id = '$rel_id', po_rel_action = '$rel_action' "; sql_query($sql); // 포인트 내역의 합을 구하고 $sql = " select sum(po_point) as sum_po_point from $g4[point_table] where mb_id = '$mb_id' "; $row = sql_fetch($sql); $sum_point = $row[sum_po_point]; // 포인트 UPDATE $sql = " update $g4[member_table] set mb_point = '$sum_point' where mb_id = '$mb_id' "; sql_query($sql); return 1; } // 포인트 삭제 function delete_point($mb_id, $rel_table, $rel_id, $rel_action) { global $g4; $result = false; if ($rel_table || $rel_id || $rel_action) { $result = sql_query(" delete from $g4[point_table] where mb_id = '$mb_id' and po_rel_table = '$rel_table' and po_rel_id = '$rel_id' and po_rel_action = '$rel_action' ", false); // 포인트 내역의 합을 구하고 $sql = " select sum(po_point) as sum_po_point from $g4[point_table] where mb_id = '$mb_id' "; $row = sql_fetch($sql); $sum_point = $row[sum_po_point]; // 포인트 UPDATE $sql = " update $g4[member_table] set mb_point = '$sum_point' where mb_id = '$mb_id' "; $result = sql_query($sql); } return $result; } // 회원 레이어 function get_sideview($mb_id, $name="", $email="", $homepage="") { global $config; global $g4; $email = base64_encode($email); $homepage = set_http($homepage); $name = preg_replace("/\'/", "", $name); $name = preg_repla
";
";
";
";
";
";
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
근데 혹시 영카트4 기준으로 알려주신거가요?
영카트4는 1589줄이 끝이라서요 ㅜㅜ