[모든게시판에 필드 자동생성]3.07버전으로 업데이트-수정 > 그누3 팁자료실

그누3 팁자료실

[모든게시판에 필드 자동생성]3.07버전으로 업데이트-수정 정보

그누호환 [모든게시판에 필드 자동생성]3.07버전으로 업데이트-수정

본문

위의 제목이 꼭 약장사 같다는 생각이 드는군요.
아래의 소스를 복사해서 아무이름이나 저장을 하시고[ex) gnuboard_in.php]
업로드하셔서 아래와 같이 호출하세요.....

http://www.yourdomain.com/?doc=gnuboard_id.php
하시면 쥘쥘쥘 필드가 자동 삽입 생성이 됩니다....
그리고 해야 할일 잘 아실 텐데 .....
3.07버전의 변형된 파일들만 업하시면 님의 gnuboard는 3.07버전으로 새롭게 됩니다.
저는 성공을 했는데 잘 안되시는 분 게시면 코멘트 남기세요...그럼 같이 고민해보게요.....*^^*

root//님께 감사드립니다...*^^*

<?
//필드를 추가해야 할 때
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

define("_DOCTYPE_", "STYLE");

// 접근 권한 검사
if (!$member[mb_id]) {
  alert("로그인 하십시오.", "./?doc=$cfg[bbs_dir]/mblogin.php&url=" . urlencode("./?doc=$doc"));
} else if (_GNUADMIN_ == "DEFAULT" && $is_admin != 'default') {
  alert('최고관리자만 접근 가능합니다.', './');
} else {
  if (!($is_admin == 'default' || $is_admin == 'group')) {
      alert('그룹관리자 이상 접근 가능합니다.', './');
  }
}

/*
# 다양한 기능의 스킨 제작을 위하여 필드 추가
$sql = " ALTER TABLE $cfg[table_board]  ADD bo_1 VARCHAR( 255 ) NOT NULL ,
                                        ADD bo_2 VARCHAR( 255 ) NOT NULL ,
                                        ADD bo_3 VARCHAR( 255 ) NOT NULL ,
                                        ADD bo_4 VARCHAR( 255 ) NOT NULL ,
                                        ADD bo_5 VARCHAR( 255 ) NOT NULL ";
@mysql_query($sql);

$sql = " ALTER TABLE $cfg[table_member]  ADD mb_1 VARCHAR( 255 ) NOT NULL ,
                                        ADD mb_2 VARCHAR( 255 ) NOT NULL ,
                                        ADD mb_3 VARCHAR( 255 ) NOT NULL ,
                                        ADD mb_4 VARCHAR( 255 ) NOT NULL ,
                                        ADD mb_5 VARCHAR( 255 ) NOT NULL ";
@mysql_query($sql);
*/

//gb_write_로 생성된 모든 필드를 자동 생성합니다.

$sql = " select bo_table from $cfg[table_board] ";
$result = sql_query($sql);
for ($i=0; $row=mysql_fetch_array($result); $i++) {

    $sql_1 =  "
ALTER TABLE {$cfg[write_table_prefix]}{$row[bo_table]} ADD (wr_1 varchar(255) NOT NULL default '', wr_2 varchar(255) NOT NULL default '', wr_3 varchar(255) NOT NULL default '', wr_4 varchar(255) NOT NULL default '', wr_5 varchar(255) NOT NULL default '')
";
    $result1 = mysql_query($sql_1);

if($result1) echo "TABLE : $cfg[write_table_prefix]$row[bo_table]에 필드를 추가하였습니다.<br>"; //root님이 추가^^

}
mysql_free_result($result);


for ($i=0; $i<count($sql_1); $i++) {

    $result1 = @mysql_query($sql_1) or mysql_error();

}


echo "테이블에 필드을 추가 하였습니다..^^"
?>
추천
5
  • 복사

댓글 전체

제가 지금 게시판을 가지고 필드를 하나씩 추가할때 마다 ....
일일이 필드를 각 게시판 마다 추가해 주어야 하는데 ....
위에것을 바탕으로 임의로 만들어 보려고 했는데 잘 안되네요.
조언 좀 부탁 드립니다.
슬기넷님// 위소스 중에서 다음부분만 수정하시면 됩니다.

수정전 :
    // 현재 이것은 wr_1 varchar(255) NOT NULL default '' 라는 형식으로 5개의 필드를 추가하도록 되어있습니다.
  $sql_1 =  "
ALTER TABLE {$cfg[write_table_prefix]}{$row[bo_table]} ADD (wr_1 varchar(255) NOT NULL default '', wr_2 varchar(255) NOT NULL default '', wr_3 varchar(255) NOT NULL default '', wr_4 varchar(255) NOT NULL default '', wr_5 varchar(255) NOT NULL default '')
";

수정후 :
    // 위의 내용중 wr_1 varchar(255) NOT NULL default '' 내용만 원하시는 것으로 수정하시면 됩니다.
    // 예제 : my_field 로 사이즈 20 자리 추가할경우
  $sql_1 =  "ALTER TABLE {$cfg[write_table_prefix]}{$row[bo_table]} ADD (my_field varchar(20) NOT NULL default '')";
이미 처리했기 때문에 안나타나는것 아닌가요.
mysql 웹어더민에서 테이블 구조보기를 선택하신후 wr_1 ~ wr_5까지의 필드를 삭제하신후 프로그램 돌려보세요
그럼 필드 추가된 테이블만  필드 추가하였습니다가 나올겁니다.
이렇게 해서 실행한 결과 저는 이상이 없는데.. 어떤에러인지..
$result1 = mysql_query($sql_1);
if($result1) echo "TABLE : $cfg[write_table_prefix]$row[bo_table]에 필드를 추가하였습니다.<br>";

결과화면
TABLE : gb_write_L04R01에 필드를 추가하였습니다.
TABLE : gb_write_test에 필드를 추가하였습니다.
테이블에 필드을 추가 하였습니다..^^
44번째 라인  $result1 = sql_query($sql_1); 에있는 sql_query를 mysql_query로 변경해서
다음과 같이 하면 $result1 = mysql_query($sql_1); 위와 같은 에러메세지는 안나오는군요.

그리고 하나더 추가 하자면 위의 $result1 = mysql_query($sql_1); 다음라인에
if($result1) echo "TABLE : $cfg[write_table_prefix]$row[bo_table]에 필드를 추가하였습니다.<br>";를 하나 넣어서 어떤것이 변경되었는지도 보면 좋겠군요.

ps. 수작업으로 wr_? 필드중 일부만 만들어 사용하시던 분들이 위의 프로그램 돌리면 나머지 필드가 생성되지 않습니다.
      일부만 만들어서 사용하신 분들은 나머지 필드도 무도 수작업으로 만드셔야 합니다.
저의 팁을 사용해 주셔서 감사합니다....*^^*

그리고 root//님 제가 그 방법을 잘 모르는데 아시면 소스 수정해주세요..

====>  리턴값을 받아서 에러일시에는 그냥 건너뛰도록 처리가 추가 되어야 할듯 합니다.

음.... 위의 내용은 for문을 돌리면서 생기는 것 같은데

그러나 필드는 정확히 생기는 것이 확실합니다...
박갑성님 미워할꼬야~~~!
진작 올려주시지..........
벌써 게시판 전부 다 지우고 새로 게시판 만들었는데..... ㅠ.ㅠ
무식한자의 어쩔 수 없는 방법이었습니다.

저 같은 사람들을 위해서 꼭 필요한 정보인것 같습니다.
좋은팁 올려주셨군요.
wr_1~wr_5까지의 필드가 없는 테이블과 있는 테이블이 같이 있을경우 wr_1~wr_5까지의 필드가 있는 테이블에서 다음과 같은 에러가 납니다.
리턴값을 받아서 에러일시에는 그냥 건너뛰도록 처리가 추가 되어야 할듯 합니다.

ALTER TABLE gb_write_test ADD (wr_1 varchar(255) NOT NULL default '', wr_2 varchar(255) NOT NULL default '', wr_3 varchar(255) NOT NULL default '', wr_4 varchar(255) NOT NULL default '', wr_5 varchar(255) NOT NULL default '')

1060 : Duplicate column name 'wr_1'
그런데 이부분은 작동이 안되어서 첨가하지 않았습니다.
if($result1) echo "TABLE : $cfg[write_table_prefix]$row[bo_table]에 필드를 추가하였습니다.<br>";
******************************************************************

$sql = " select bo_table from $cfg[table_board] ";
$result = sql_query($sql);
for ($i=0; $row=mysql_fetch_array($result); $i++) {

    $sql_1 =  "
ALTER TABLE {$cfg[write_table_prefix]}{$row[bo_table]} ADD (wr_1 varchar(255) NOT NULL default '', wr_2 varchar(255) NOT NULL default '', wr_3 varchar(255) NOT NULL default '', wr_4 varchar(255) NOT NULL default '', wr_5 varchar(255) NOT NULL default '')
";
    $result1 = mysql_query($sql_1);

if($result1) echo "TABLE : $cfg[write_table_prefix]$row[bo_table]에 필드를 추가하였습니다.<br>";
}
mysql_free_result($result);


for ($i=0; $i<count($sql_1); $i++) {

    $result1 = @mysql_query($sql_1) or mysql_error();

}

?>

이렇게 했는데 안되는군요....ㅡ,ㅡ
© SIRSOFT
현재 페이지 제일 처음으로