본문 바로가기
[ Design ]/Flash

Flash-데이터베이스 연동(제로보드)

by 관이119 2012. 9. 13.
What you see is what you get | 아킨토스
http://blog.naver.com/etwas0227/60007168485
제로보드에서 데이터 뽑아오기

일단 php가 제로보드에서 데이터를 뽑아와야겠지요?

말이 제로보드지..제로보드에서 데이터를 뽑아온다는 말은 제로보드가 물론 디비와

연동하고 있으니 보여주는 부분만 우리가 살짝 가져와 보자는 말이지요!

서버에 제로보드가 잘 동작하고 있지요?

자..이제 메모장을 열어 php파일을 하나 만듭니다.

fcp.php******

<?

$connect = mysql_connect("localhost", "아이디", "암호");
mysql_select_db("db_board"); //저번에 입력한 디비 이름


$result=mysql_query("select * from zetyx_board_$bbs_id order by no desc") or die(mysql_error());
$i=0;
while($data=mysql_fetch_array($result))
{

if(strlen($data[subject])>16){
$a=substr($data[subject], 0, 16);
preg_match('/^([\x00-\x7e]|.{2})*/', $a, $r_str);

$r_str[0]=$r_str[0]."..";
}
else{
$r_str[0]=$data[subject];
}

$b_cut[$i]=$r_str[0];
$b_sub[$i]=$data[subject];
$b_date[$i]=date('Y-m-d',$data[reg_date]);
$b_no[$i]=$data[no];
$b_pic[$i]=$data[file_name1];
$i++;
}

echo"&b_sub=$b_sub[0]";
for($j=1;$j<5;$j++){
echo",$b_sub[$j]";}

echo"&b_cut=$b_cut[0]";
for($j=1;$j<5;$j++){
echo",$b_cut[$j]";}

echo"&b_date=$b_date[0]";
for($j=1;$j<5;$j++){
echo",$b_date[$j]";}

echo"&b_no=$b_no[0]";
for($j=1;$j<5;$j++){
echo",$b_no[$j]";}

echo"&b_pic=$b_pic[0]";
for($j=1;$j<5;$j++){
echo",$b_pic[$j]";}



?>

좀 길고 복잡하지만 자세히 보세요~ 그럼 한줄씩 풀어볼까요?

<?

$connect = mysql_connect("localhost", "아이디", "암호");
mysql_select_db("db_board");
//저번에 입력한 디비 이름

데이터 베이스에 로긴하는 과정입니다. mysql서버에 접속하신다고 생각하세요.

이 과정이 있어야 속에있는 데이터들을 요리 할 수 있겠지요?


$result=mysql_query("select * from zetyx_board_$bbs_id order by no desc") or die(mysql_error());

result라는 변수에 쿼리 결과를 담습니다. select..로 시작하는 스트링 구문이 SQL문인데요,

이에 대해서는 다음강좌에 간단히 설명하겠습니다.

위의 말은 zetyx_board_$bbs_id 라는 테이블에서($bbs_id 는 변수) 모든 필드를

가져 오라는 말입니다. 순서는 오름차순으로요..(맞나?-_-)

원래 쿼리문도 자기가 이용할려는 목적에 최적화 시켜서 해야하는데 그냥 가장

광범위한 데이터를 가져오도록했습니다.

여기까지는 일반적으로 php와 db사이에 쓰이는 부분이었구요.

여기서 부터가 플래시에 뿌려주는 부분입니다.

$i=0;
while($data=mysql_fetch_array($result))
{

레코드 셋이라고 보시면 됩니다. 쿼리 결과를 배열로 저장해줍니다.

if(strlen($data[subject])>16){
$a=substr($data[subject], 0, 16);
preg_match('/^([\x00-\x7e]|.{2})*/', $a, $r_str);
$r_str[0]=$r_str[0]."..";
}
else{
$r_str[0]=$data[subject];
}

여기까진 일단 생략하구요..제목이 길 경우 제목을 잘라주는 부분이거든요^^;

$b_cut[$i]=$r_str[0];

잘린 제목을 배열에 저장
$b_sub[$i]=$data[subject];

제목을 배열에 저장
$b_date[$i]=date('Y-m-d',$data[reg_date]);

날짜를 배열에 저장
$b_no[$i]=$data[no];

글번호를 배열에 저장
$b_pic[$i]=$data[file_name1];

파파일 이름을 배열에 저장 - 이부분도 필요 없습니다. 최근 게시물에 그림파일 불러오시려면 필요.
$i++;


}

data[] 속에 들어있는 이름들은 제로보드가 생성한 테이블의 필드 명입니다.

그속에 있는 데이터를 가져오는거져.

데이터를 배열로 만들었으면 뿌려야지요~ 플래시가 가져갈 수 있도록

echo"&b_sub=$b_sub[0]";
for($j=1;$j<5;$j++){
echo",$b_sub[$j]";}



echo"&b_cut=$b_cut[0]";
for($j=1;$j<5;$j++){
echo",$b_cut[$j]";}

echo"&b_date=$b_date[0]";
for($j=1;$j<5;$j++){
echo",$b_date[$j]";}

echo"&b_no=$b_no[0]";
for($j=1;$j<5;$j++){
echo",$b_no[$j]";}

echo"&b_pic=$b_pic[0]";
for($j=1;$j<5;$j++){
echo",$b_pic[$j]";}


들어온 데이터를 5개씩 (,) 로 묶어 뿌려줍니다. 잘 보시면 이해가 가실꺼에요.



?>

자..이제 루트 폴더에 파일을 저장하고 fcp.php를 실행해 봅니다.

암것도 안나오져?

여기서 잠시 저번에 우리가 어떤 게시판을 생성했는지 알아봅시다.

http://localhost/bbs/zboard.php?id=flash

이거였져?

뒤에 id가 flash입니다.

이걸 php파일의 $bbs_id 에 넣어줘야 해요!

이렇게 만든 이유는 나중에 여러게의 다른 아이디를 가지는 게시판이 생성되더라도

소스 수정없이 연동되게 할려고 합니다.

지금은 플래시가 완성이 된게 아니므로 테스트를 위해 php파일에 직접 변수를 주겠습니다.

다시 php파일을 열어서 두번째 라인에

$bbs_id="flash";

를 추가합니다.

저장하고 다시 테스트 해보면 뭔가 나올겁니다.

아...물론 제로보드에 5개 이상의 글을 써놔야 나오겠져?

나오는걸 확인했으면 php가하는일은 끝났습니다.

다시 2번째 줄을 지워주시고,

이제 플래시를 열어주세요.

<fieldset style="background: rgb(85, 85, 85); padding: 10px; border: 1px solid currentColor; width: 100%;">플래시에서 할일</fieldset>

제가 첨부한 파일의 코드를 보실까요?

밑에 낸 숙제의 도움으로 코드가 한결 간단해 졌습니다.

물론 loadVariables 하고 loadVariablesNum 으로도 테스트 해볼거지만.

오늘은 LoadVars 를 살펴보지요!

플래시는 간단합니다.

제목과 날짜를 보여주는 다이나믹 텍스트 필드가 있고

누르면 제로보드의 글을 보여줄수있는 버튼이 있습니다.

맨위에는 어떤게시판인지 알아볼 수 있도록 필드를 두었지요.

동작은 이렇게 됩니다.

똑같은 무비가 두개의 변수를 받아 (bbs_id ,bbs_nm)하나는 플래시에서 쓰고(bbs_nm)

하나는 다시 php로 보내줍니다 (bbs_id)

첫프레임의 코드를 보겠습니다.

System.useCodepage = true;

아시져? ^^;;
a_sub= new Array();
a_cut= new Array();
a_date= new Array();
a_pic= new Array();
a_no= new Array();

php에서 받아올 배열을 미리 선언합니다.

var dvar = new LoadVars();

LoadVars 객체 선언


dvar.load("http://localhost/fcp.php?bbs_id="+_root.bbs_id+"&noCache="+Math.random()*65000);

dvar 객체로 변수를 불러옵니다.

bbs_id를 플래시에있는 변수로 보내는걸 알수있져?

dvar.onLoad = function(suc) {

변수가 모두 로드될때까지 기다림.


if (suc) {

로드되면 화면에 뿌립니다.

_root.a_cut = this.b_cut.split(",");
_root.a_sub = this.b_sub.split(",");
_root.a_date = this.b_date.split(",");
_root.a_pic = this.b_pic.split(",");
_root.a_no = this.b_no.split(",");

php에서 보내온 변수를 (,로 묶인 문장들) ,단위로 끊어 배열에 저장합니다.


_root.s0=_root.a_sub[0];
_root.s1=_root.a_sub[1];
_root.s2=_root.a_sub[2];
_root.s3=_root.a_sub[3];
_root.s4=_root.a_sub[4];

텍스트 필드에 뿌려줍니다.

텍스트 필드에 이어진 변수명은 s0~s4까지 입니다. 요부분은

for(int i=0;i<5;i++){

_root["s"+i] = _root.a_sub[i];

}

로 바꿔주실 수 있습니다.


_root.loading._visible=false;
_root.back._visible=false;

요건 로딩되는 동안 화면을 가리고 있던(이쁘게 보일려구)것들을 치워주는 겁니다.


} else {
trace("전송 실패당..ㅠ.ㅠ");
}
};

이렇게 코드 분석이 끝났습니다.

이제 많이 아시겠져?

위에 보면 한가지 중요한 부분이 있습니다.

+"&noCache="+Math.random()*65000

이부분인데요. 요게 없으면 플래시가 한번 읽어온 파일(php)을 캐쉬에 저장하고있어서

서버쪽 페이지가 업데이트 되더라도 그 결과를 반영 못하는 경우가 생깁니다.

그래서 붙여주는 거지요.

우리같은 방식으로 디비 연동을 할때 중요한 부분이지요.

버튼은 보시면 이해하실 수 있을겁니다.

저는 링크가 제 홈피로 되어있는데요^^ 수정하세요~

이제 무비를 올려야 하는데..

무비를 실행해도 아무런 결과가 없습니다.

bbs_id가 php로 안넘어 갔기 때문이져.

우리가 플래시로 변수를 주는 방법은 간단합니다.

swf 뒤에 ?를 붙여서 변수를 넘기는 거져.

html파일에 swf를 붙여서 코드를 보면 로드되는 부분이 있습니다.

bbs_loader.swf 라고 되어있는부분을

bbs_loader.swf?bbs_id=flash&bbs_nm=제로보드연동

이렇게 바꿔줍니다.

자 결과가 나오나요?

두개의 변수가 플래시를 통해 하나는 php로 전달되었습니다.

하나는 제로보드연동이라는 변수로 쓰였지용.

----------------------------------------------------------------

출처: http://blog.naver.com/madoka22/120003957720

댓글