묻고답하기
게시판 엑셀로 변환 문의드립니다.
2016.01.09 19:47
코어 1.8.15 / 보드스킨 스케치북 최신버전
게시판에 내용(확장변수)을 엑셀로 가지고 오려고 합니다.
https://www.xpressengine.com/index.php?mid=tip&search_target=title_content&search_keyword=%EC%97%91%EC%85%80&document_srl=22795784
위팁으로 적용했는데.... 확장변수는 가지고 오지만 확장변수 값을 가지고 오지를 않아서요.
그래서 xe_documents 대신 xe_document_vars 로 변경하니 확장변수 값을 잘 가지고 옵니다.
(저는 타이틀,컨텐츠 보단 확장변수값이 중요해서요.)
근데 문제가.....
1. 확장변수값을 잘 가지고 오는데 중복해서 가지고 옵니다.
확장변수가 총20개이고 입력한 값(확장변수)이 15개라면 똑같은 내용을 15개 가지고 옵니다.
아래 테스트 그림입니다.
위 그림에서 홍길동은 30개 확장변수 중 25개를 입력하니까 홍길동이 25번 나오고
김*영은 30개 확장변수 중 24개를 입력하니까 24번이 나옵니다.
한번만 나오게 할 순 없을까요?
2. 휴대폰번호..... 팁소스에서 "|@|" -> "-" 변경된다고 나오는데 전 그대로 - 대신 |@| 로 나옵니다.
3. 삭제한 글도 엑셀 출력시 나옵니다. ㅜㅜ
아래 제가 등록한 소스입니다.
<?php
//url 로 직접 불러오는것을 방지
if(!strstr($_SERVER['HTTP_REFERER'],$_SERVER['SERVER_NAME'])&& !strstr($_SERVER['HTTP_REFERER'],'out_excel.php')) exit;
$info = array(
"host" => "localhost",
"user" => "입력",
"pass" => "입력",
"db" => "입력",
"table" => "xe_document_extra_vars",
"module_srl" => "240",
);
$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());
$con_db = mysql_select_db($info[db]) || die(mysql_error());
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="EN" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<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>
-----------------------
즐거운 주말되시고
고수님들 조언 좀 부탁드립니다. ^^;
기존팁이 안된다고 하시는데
제가 몇일전에 할때는 정상적으로 확장변수를 축출하고 있더군요.
이런 답변밖에는 드릴게 없어서...