wr_content 내용이 길 경우 mediumtext 그누보드5 변경된 방식 > 그누보드5 팁자료실

그누보드5 팁자료실

wr_content 내용이 길 경우 mediumtext 그누보드5 변경된 방식 정보

wr_content 내용이 길 경우 mediumtext 그누보드5 변경된 방식

본문

wr_content의 내용이 길어서 불가피하게 DB 설정을 mediumtext로 변경하는 경우가 있습니다.

보통은 DB에서 mediumtext로 변경해주면 해결이 되는데,
아무리 DB에서 wr_content 의 형식을 mediumtext나 longtext로 변경을 해봐도,
항상 저장되는 내용은 text 크기인 65536byte만 저장이 되더라구요.


이리저리 원인을 찾다가 write_update.php 소스를 열어보니,
17번째 줄부터

$wr_content = '';
if (isset($_POST['wr_content'])) {
    $wr_content = substr(trim($_POST['wr_content']),0,65536);
}

이런 소스가 첨부가 되어 있더라구요,
그래서 DB 설정을 아무리 바꿔봐도 안되었던 것 같습니다.

혹시나 참고하실 분들이 생길까봐 팁자료실에 메모 남겨둡니다.
추천
3

댓글 11개

헉.. 꼭 수정되어야할 내용이군요.
보통 제가 한글파일로 작성해서 그대로 붙여넣기하는경우가 많은데,
내용이 조금 긴경우 64kb가 넘어갑니다. 모르고 있었으면 한참 찾을뿐했네요.
좋은 정보 감사합니다.
1. 테이블의 wr_content 필드 속성을 text 에서 MEDIUMTEXT 또는 LONGTEXT 로 변경합니다.

참고로 필드 속성에 따라 저장되는 글자수는 다음과 같습니다.
tinytext                  256 bytes
text                  65,535 bytes ~64kb
mediumtext  16,777,215 bytes ~16MB
longtext  4,294,967,295 bytes ~4GB


2. / bbs / write_update.php 의 17줄

if (isset($_POST['wr_content'])) {
    $wr_content = substr(trim($_POST['wr_content']),0,65536);
}

를 아래와 같이 변경합니다.

if (isset($_POST['wr_content'])) {
    $wr_content = substr(trim($_POST['wr_content']),0,65536);
    if ($is_admin) { // 관리자일때는 65,535자 이상 ... 물론 디비 필드 속성을 상향한 경우에만 사용하세요.
      $wr_content = $_POST['wr_content'];
    }
}


3. / lib / editor.lib.php 의 11줄

    return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\" maxlength=\"65536\">$content</textarea>";

를 아래와 같이 변경

  if ($is_admin) { // 해피정닷컴 추가 (2014-03-02)
    return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\">$content</textarea>";
  } else { // 해피정닷컴 추가 (2014-03-02)
    return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\" maxlength=\"65536\">$content</textarea>";
  } // 해피정닷컴 추가 (2014-03-02)



4. 향후 생성되는 게시판은 모두 긴 내용이 입력되도록 할때는
/ adm / sql_write.sql 의  12라인 내용을 변경합니다.

  `wr_content` text NOT NULL,

를 아래와 같이 변경

  `wr_content` mediumtext NOT NULL,

이후업데이트는 아래 경로에서 확인할수 있습니다. 중복자료가 될수 있기에 별도 팁으로 올리지 않습니다.
http://www.happyjung.com/bbs/board.php?bo_table=lecture&wr_id=1656
좋은 정보 감사합니다
님이 쓰신 대로 해보았는데요
제가 초보라 말씀하신대로 실행이 되지 않고 있습니다
님의 홈페이지에도 가 보았는데요
글을 쓰신 이후에 내용이 변한것이라도 있는지해서 조언 부탁드립니다
삽입된 소스이고요, 종류는 mediumtext로 변경하였습니다

**** /www/bbs/write_update.php

if (isset($_POST['wr_content'])) { $wr_content = $_POST['wr_content'];  // 해피정닷컴 수정 (2015-05-18)
    //$wr_content = substr(trim($_POST['wr_content']),0,65536);
    $wr_content = preg_replace("#[\\\]+$#", "", $wr_content);
 }

**** /www/lib/editor.lib.php

    return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\">$content</textarea>";  // 해피정닷컴 수정 (2015-05-18)
음... 특별히 변동된것은 없구요.
사이트 제작하면서 코드 변경이 있는경우엔 제 홈페이지에 업데이트를 합니다.
웹에이전시를 운영중이라서 적용할때마도 제가 정리한 코드를 찾아서 적용하고, 오류가 있으면 확인후 업데이를 하고는 있습니다.


/* /lib/common.lib.php에 추가 */

function get_wr_content_size()
{
	$sql = "SELECT COLUMN_TYPE 
		FROM INFORMATION_SCHEMA.COLUMNS
		WHERE TABLE_NAME = '%s'
		AND COLUMN_NAME = '%s' 
		AND TABLE_SCHEMA = '%s'";

	$sql = sprintf($sql, $GLOBALS['write_table'], 'wr_content', G5_MYSQL_DB);

	$query = mysql_query($sql);
	$row = mysql_fetch_array($query, MYSQL_NUM);

	switch (strtolower($row[0])) {
		case 'tinytext': return 256;
		case 'text': return 65535;
		case 'mediumtext': return 16777215;
		case 'longtext': return 4294967295;
	}
}



/* /bbs/write_update.php 의 17줄 */
$wr_content = substr(trim($_POST['wr_content']),0,get_wr_content_size()); 



/* /lib/editor.lib.php 의 11줄 */

	return '<textarea id="'.$id.'" name="'.$id.'" style="width:100%;" maxlength="'.get_wr_content_size().'">'.$content.'</textarea>';



Edit: 2016.03.10 오후 7:08. 오타가 있었는데 아무도 말이 없었네요.
전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT