묻고답하기
제로보드4에서 xe로 db 이전툴을 사용할때 extra_vars필드 문제...
2012.06.26 17:44
집주소와 직장주소,
*** 1. 집전화, 직장전화, 휴대전화 이렇게 5개가 문제입니다.
export.php 파일내에 해당 필드의 array부분을 그대로 1:1로 대응시키고,
회원정보입력설정에서도 text라인 1줄로 하면 문제가 없는데...
그렇지않고 주소도 주소형식, 전화번호도 전화번호형식으로 설정해놓으면,
데이터 이전을 며칠간 머리를 짜내어도 잘 안됩니다.
$obj->extra_vars = array(
'homeaddress' =>serialize(array(preg_replace('/[1-9\-]+$/','',$member_info->home_address),str_replace(preg_replace('/[1-9\-]+$/','',$member_info->home_address),'', $member_info->home_address))),
'hometel' => serialize(array(substr($member_info->home_tel,0,3),str_replace('-','',substr($member_info->home_tel,3,-4)), substr($member_info->home_tel,-4))),
'officeaddress' =>serialize(array(preg_replace('/[1-9\-]+$/','',$member_info->office_address),str_replace(preg_replace('/[1-9\-]+$/','',$member_info->office_address),'', $member_info->office_address))),
'officetel' => serialize(array(substr($member_info->office_tel,0,3),str_replace('-','',substr($member_info->office_tel,3,-4)),substr($member_info->office_tel,-4))),
'handphone' => serialize(array(substr($member_info->handphone,0,3),str_replace('-','',substr($member_info->handphone,3,-4)),substr($member_info->handphone,-4)))
);
이렇게 하면...
O:8:"stdClass":5:{s:11:"homeaddress";s:28:"a:2:{i:0;s:0:"";i:1;s:0:"";}";s:7:"hometel";s:33:"a:3:{i:0;b:0;i:1;s:0:"";i:2;b:0;}";s:13:"officeaddress";s:69:"a:2:{i:0;s:23:"XXXXXX" ";i:1;s:7:"XXXXX";}";s:9:"officetel";s:49:"a:3:{i:0;s:3:"XXX";i:1;s:3:"XXX";i:2;s:4:"XXXX";}";s:9:"handphone";s:50:"a:3:{i:0;s:3:"010";i:1;s:4:"XXXX";i:2;s:4:"XXXX";}";}
이런식으로 전화번호 배열에는 앞에 필요없는 s:수자"와 배열끝나는 부위에 쓸데없는 "가 붙어서 회원조회를 하면 a:어쩌구하는 문자만 보입니다.
만약 serialize함수를 안쓰면 회원 조회시 Array라는 문자만 뜨구요.
그래도 이건 양반입니다(쿼리나 php 정규식등으로 update쿼리로 해결할수 있을듯하니깐요).
주소배열은 딱 문자열의 형식에 벗어나면 아예 아무리 문자열개수를 정확히 지정했었어도 회원조회시 안나타나더군요.
이 문제 해결못하고 아직도 끙끙 앓고 있습니다.
*** 2. 그리고, 제로보드4는 쿼리, php, html등의 기본적 지식으로 어느정도 스크립트를 이해하는데...
XE는 xml에 쿼리정보나 기타 정보를 다 지정해놓고, class객체와 멤버를 이용한 스크립트 투성이라 너무 이해하기 힘듭니다.
스킨에 적용되는 코드도 생소하구요.
제로보드4보다 사용자편의에 맞게 수정하는 것은 거의 불가능한건가요?
특히 이런 회원정보테이블의 extra_vars문제같은 경우말입니다.
그냥 따로 필드를 생성해서 입력하면,
많은 스크립트를 수정해야할것 같은데 말입니다.
답변 미리 감사드립니다.
이상.
댓글 2
-
맥스222
2012.07.09 15:25
-
맘편한넘
2012.07.17 19:39
네 해결했습니다. 다소 복잡하게 내가 따로 스크립트를 만들었습니다. 지금 좀 시간이 없어서 나중에 또... -
맘편한넘
2012.07.18 05:23
<?
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
$link = mysql_connect('host이름', '계정이름', '비번');
$tablename = "테이블이름";
mysql_select_db('db이름', $link);
mysql_query("set names utf8;");
// 회원 데이타 변환
$result=mysql_query("select * from xe_member_o where user_id <> 'admin';",$link);
$i=0;
while($data=mysql_fetch_array($result))
{
$i++;
$user_id = $data[user_id];$data1 = unserialize($data[extra_vars]);
$array = array();
if (!is_object($data1)) {echo "이크";}
if (is_object($data1))
{
$array = get_object_vars($data1);
}
$o = sizeof($array);
$extra_s = 'O:8:"stdClass":'.$o.':{';
$jumin= $license = $major = $comment = $job = $hobby = $homeaddress = $hometel = $officeaddress = $officetel = $handphone = blank;
if($array[jumin]) {
$jumin = $array[jumin];
$extra_s .= 's:5:"jumin";'.serialize($jumin);
}
if($array[license]) {
$license = $array[license];
$extra_s .= 's:7:"license";'.serialize($license);
}
if($array[major]) {
$major = $array[major];
$extra_s .= 's:5:"major";'.serialize($major);
}
if($array[comment]) {
$comment = $array[comment];
$extra_s .= 's:7:"comment";'.serialize($comment);
}
if($array[job]) {
$job = $array[job];
$extra_s .= 's:3:"job";'.serialize($job);
}
if($array[hobby]) {
$hobby = $array[hobby];
$extra_s .= 's:5:"hobby";'.serialize($hobby);
}
if($array[homeaddress]) {
$homeaddress = $array[homeaddress];
$homeaddress = array(preg_replace('/[1-9\-]+$/','',$homeaddress),str_replace(preg_replace('/[1-9\-]+$/','',$homeaddress),'', $homeaddress));
$extra_s .= 's:11:"homeaddress";'.serialize($homeaddress);
}
if($array[hometel]) {
$hometel = $array[hometel];
$hometel = array(substr($hometel,0,3),str_replace('-','',substr($hometel,3,-4)), substr($hometel,-4));
$extra_s .= 's:7:"hometel";'.serialize($hometel);
}
if($array[officeaddress]) {
$officeaddress = $array[officeaddress];
$officeaddress = array(preg_replace('/[1-9\-]+$/','',$officeaddress),str_replace(preg_replace('/[1-9\-]+$/','',$officeaddress),'', $officeaddress));
$extra_s .= 's:13:"officeaddress";'.serialize($officeaddress);
}
if($array[officetel]) {
$officetel = $array[officetel];
$officetel = array(substr($officetel,0,3),str_replace('-','',substr($officetel,3,-4)), substr($officetel,-4));
$extra_s .= 's:9:"officetel";'.serialize($officetel);
}
if($array[handphone]) {
$handphone = $array[handphone];
$handphone = array(substr($handphone,0,3),str_replace('-','',substr($handphone,3,-4)), substr($handphone,-4));
$extra_s .= 's:9:"handphone";'.serialize($handphone);
}
$extra_s .= "}";$que = "update xe_member set extra_vars = '".$extra_s."' where user_id = '".$user_id."';";
mysql_query($que,$link);
}
echo "총 업데이트 쿼리 수:".$i;?>
혹시 해결 하셨나요?
저도 같은 문제로 고민중입니다^^; 해결 되셨다면 방법 공유 부탁드립니다.