웹마스터 팁
게시판 글 엑셀로 출력하기(확장변수 포함)
2014.07.17 11:30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | <?php //url 로 직접 불러오는것을 방지 if (! strstr ( $_SERVER [ 'HTTP_REFERER' ], $_SERVER [ 'SERVER_NAME' ])&& ! strstr ( $_SERVER [ 'HTTP_REFERER' ], 'out_excel.php' )) exit ; $info = array ( "host" => "localhost" , "user" => "db명" , "pass" => "db비번" , "db" => "xe테이블명" , "table" => "xe_documents" , "module_srl" => "출력할게시판slr" , ); $getFields = array ( "title" , "regdate" , "content" ); //출력원하는 칼럼을 배열로 입력 header( "Content-type: application/vnd.ms-excel" ); header( "Content-Disposition: attachment; filename=doc_" . date ( 'Ymd' ). ".xls" ); $con = mysql_connect( $info [host], $info [user], $info [pass]) || die (mysql_error()); mysql_query( "set names utf8" ); $con_db = mysql_select_db( $info [db]) || die (mysql_error()); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" <head> <meta http-equiv=Content-Type content=text/html; charset= "utf-8" > </head> <body> <table border=1> <tr align=center> <?php //제목 불러오기 $fields = mysql_list_fields( "$info[db]" , "$info[table]" ); $columns = mysql_num_fields( $fields ); for ( $i =0 ; $i < $columns ; $i ++ ) { $field [ $i ]=mysql_field_name( $fields , $i ); if ( in_array( $field [ $i ], $getFields ) ) echo "<th>" . $field [ $i ]. "</th>" ; } //확장변수의 타이틀은 값이므로 $result = mysql_query( "select var_name from xe_document_extra_keys where module_srl = $info[module_srl]" ); while ( $data = mysql_fetch_array( $result ) ) { echo "<th>" .htmlspecialchars( $data [var_name]). "</th>" ; } echo "</tr>" ; //데이터 불러오기 $result = mysql_query( "select * from $info[table] where module_srl = $info[module_srl]" ); while ( $data = mysql_fetch_assoc( $result ) ) { echo "<tr>" ; foreach ( $data as $key => $val ) { if ( in_array( $key , $getFields ) ) { if ( $key == 'regdate' ) { echo "<td style='mso-number-format:\"0_ \";' >" .htmlspecialchars( $val ). "</td>" ; } elseif ( $key == 'content' ){ //내용 출력할경우 태그가 그대로 출력됨 //echo "<td>".$val."</td>"; //셀이 두칸이상으로 늘어남 echo "<td >" .htmlspecialchars( strip_tags ( str_replace ( " " , "" , $val ))). "</td>" ; } else { echo "<td>" .htmlspecialchars( $val ). "</td>" ; } } if ( $key == 'document_srl' ){ //확장변수 불러올때 사용 $d_srl = $val ; } } //확장변수 출력 //////////////////////////////////////////// //eid리스트를 불러온다 $query =mysql_query( "select eid from xe_document_extra_keys where module_srl = $info[module_srl]" ); while ( $extra_title =mysql_fetch_array( $query )) { echo "<td>" ; $egetFields = array ( "value" , "eid" ); //확장변수 값을 불러와 eid값이 같은곳에 출력 $extra_result = mysql_query( "select * from xe_document_extra_vars where document_srl = $d_srl" ); while ( $edata = mysql_fetch_assoc( $extra_result ) ) { $extra_str = "" ; foreach ( $edata as $key => $val ){ if ( in_array( $key , $egetFields ) ){ $extra_str = $val . "," . $extra_str ; } } $extra_arr = explode ( "," , $extra_str ); if ( $extra_title [eid]== $extra_arr [0]){ //전화번호값은 "|@|" 를 "-" 로 변경 if ( $extra_title [eid]== "mb_phone_Number" ){ echo str_replace ( "|@|" , "-" ,htmlspecialchars( $extra_arr [1])); //기타 배열값들은 ',' 로 변경 } elseif ( $extra_title [eid]== "mb_incomplete" || $extra_title [eid]== "mb_cs" ){ echo str_replace ( "|@|" , "," ,htmlspecialchars( $extra_arr [1])); } else { echo htmlspecialchars( $extra_arr [1]); } } } echo "</td>" ; //eid값이 없으면 빈칸입력 } ///////////////////////////////////////////////////////////////////// echo "</tr>" ; } ?> </table> </body> </html> |
확장변수 출력부분만 끼워넣었습니다.
url로 실행안되고 사이트내에서 링크로 불러오게 했고요
저 같은경우는 리스트 아래 검색버튼옆에 버튼방식으로 추가해서 사용중입니다.(루트에 위 php 파일이 있고)
<a cond="$grant->manager" class="btn" href="out_excel.php" title="엑셀 출력"> 엑셀출력</a>
전화번호출력과 기타배열들 출력부분은 해당 확장변수 eid값으로 변경해주시면됩니다.
댓글 15
-
파워뭉치
2014.08.13 16:47
-
파워뭉치
2014.08.13 17:35
다른 정보들은 위의 소스로 다 가져오던데 분류 이름은 저장이 안되네요..
아래와 같이 칼럼을 추가하니 분류번호로만 출력되네요.. 분류 이름으로 출력하는 방법이 없을까요?
$getFields
=
array
("category_srl",
"title"
,
"regdate"
,
"content"
);
//출력원하는 칼럼을 배열로 입력
-
한이73
2014.08.19 11:41
xe_documents 테이블에는 카테고리 srl 만 저장이 되니
분류번호로 분류이름을 따로 매칭 시키면 될것 같네요 (많지 않다면)
분류가 많다면
xe_document_categories 테이블에서 찾아야 할텐데...복잡해지겠네요
-
dodosy
2016.07.04 13:03
아직 초보입니다~
그럼 이소스는 수정은 어디로 들어가서 수정해야하나요??
게시판생성후 내용 엑셀출력하면 정보 호환이 잘안되네요; 매번 게시판생성할때마다 엑셀수정해야하나요?
-
Paul
2014.08.15 05:16
먼저 좋은 정보 등록해주셔서 감사합니다. 한가지 궁금한게 있는데요. 위의 코드에서 database 정보 입력하는 곳에서 아래의 부분이 맞는건지 다시한번 확인 부탁드립니다.
"host" => "localhost" // 호스트네임 입력하는 곳.
"user" => "db명" // db명인가요? 아니면 db 유저네임?
"pass" => "db비번" // db 비밀번호 입력하는 곳.
"db" => "xe테이블명" // xe테이블명인가요? 아니면 db명?
"table" => "xe_documents" // 이곳은 table명을 입력하는 곳.
"module_srl => "출력할게시판slr" // 게시판 "모듈명"을 입력하는 것이 맞는지요?
확인부탁 드립니다. 감사합니다.
-
한이73
2014.08.19 11:45
user --> db ID
db --> db명
module_srl --> 게시판 번호 라고 해야겟네요
(ex:
자유게시판 => module_srl = 120
공지사항 => moduel_srl = 110
)
-
Paul
2014.08.19 12:04
감사합니다. 이제 잘 작동하네요. ^^ module_srl 이 게시판 번호였군요. 저는 게시판 모듈 이름인줄 알았었습니다. 감사합니다.
-
꿈틀잉
2015.07.09 11:30
익스플로러에서는 엑셀로 저장되는데 크롬에서는 그냥 php로 저장이 되는부분을 수정할려면
어떻게 해야되나여
-
Xe재미나게
2015.12.13 12:44
와우!! 정말 감사합니다. 잘 되네요. 짱짱!!! 복받으실겁니다.
저도 언젠간 도움이 되는 사람이 되어야 할텐데....
-
아기만세
2016.03.01 12:58
module_srl 은 DB 테이블을 직접 확인하시면 됩니다.
-
제민이아빠
2016.06.14 14:18
이파일을 링크를 걸어놓으려고 list.html 파일에 넣었는데 관리자만 보이는건 왜 그럴까요? ㅠ
-
아스
2016.06.17 11:08
관리자만 보이게 조건이 들어가 있어서 그렇습니다. cond="$grant->manager"를 빼면 다 보일겁니다.
-
아. 한다고 했는데, 정말 아무것도 모르겠습니다. ㅠㅠㅠ 도와주실분 계신가요. 정말 궁금합니다.
-
php 7.0에서는 이 팁이 안먹힐겁니다.
아직 공개된 팁도 없을겁니다.
-
디자인플렉스
2020.04.24 23:33
좋은정보 감사합니다.
정말 필요했던건데 상세히 잘 설명해주셨네요..
좋은 정보 너무 감사드려요^^