Web Programming >> PHP Programming
|
[목차] |
제14장 추천사이트 연결 프로그램(MySQL)
1. MySQL을 이용한 추천사이트 연결 프로그램 1. 추천사이트 링크 테이블(myhome) 만들기
CREATE TABLE myhome ( uid int(11) NOT NULL auto_increment, id varchar(20), email varchar(60), home varchar(100), subject varchar(100), content varchar(250), banner varchar(250), PRIMARY KEY (uid) );
2. 목록보기(list.html)
<? $ban_dir = "./data/";
########### 한 페이지당 출력할 게시물의 수 $num_per_page = 5;
########### 게시물 출력목록 하단에 링크를 걸 페이지의 개수 $page_per_block = 5;
########### 페이지 초기화 if(!$page) { $page = 1; }
########## 데이터베이스 서버에 연결한다. ########## $dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");
########## 작업 데이터베이스로 sample을 선택한다. ########## $status = mysql_select_db("sample",$dbconn); if(!$status) { $errNO = mysql_errno($dbconn); $errMSG = mysql_error($dbconn);
echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>"); echo("에러코드 $errNO : $errMSG<br>"); exit; }
$query = "SELECT uid,id,email,home,subject,content,banner FROM myhome ORDER BY uid DESC"; $result = mysql_query($query,$dbconn); if(!$result) { $errNO = mysql_errno($dbconn); $errMSG = mysql_error($dbconn);
echo("에러코드 $errNO : $errMSG<br>"); exit; }
$total_record = mysql_num_rows($result);
########## 현재의 페이지에서 출력할 게시물의 범위를 결정한다. ########## if(!$total_record) { $first = 1; $last = 0; } else { $first = $num_per_page*($page-1); $last = $num_per_page*$page;
$IsNext = $total_record - $last; if($IsNext > 0) { $last -= 1; } else { $last = $total_record - 1; } }
########## 전체 페이지수를 계산한다. ########## $total_page = ceil($total_record/$num_per_page);
echo " <HTML> <HEAD> <TITLE>My HomePage !!!</TITLE> </HEAD> <BODY BGCOLOR=eeeeee> <CENTER> <FONT SIZE=7 FACE='Comic Sans MS'>싸이트 링크</FONT><BR><BR> <TABLE BGCOLOR=eeeeee WIDTH=500> <TR> <TD ALIGN=LEFT WIDTH=50%><FONT SIZE=2>전체 싸이트 : $total_record</FONT></TD> <TD ALIGN=RIGHT WIDTH=50%><FONT SIZE=2>페이지 : $page/$total_page</FONT></TD> </TR> </TABLE>"; if(!$total_record) { echo("<font size=2 color=red> 등록된 홈페이지가 없습니다.</font>"); }
########## 게시물의 가상번호(게시물의 개수에 따른 일련번호) ########## $article_num = $total_record - $num_per_page*($page-1);
########## 테이블내 모든 레코드의 각 데이터 값을 각각의 변수에 저장하여 출력한다. ######### for($i = $first; $i <= $last; $i++) { $my_uid = mysql_result($result,$i,0); $my_id = mysql_result($result,$i,1); $my_email = mysql_result($result,$i,2); $my_home = mysql_result($result,$i,3); $my_subject = mysql_result($result,$i,4); $my_content = mysql_result($result,$i,5); $my_banner = mysql_result($result,$i,6);
$my_content=eregi_replace("\n","<BR>",$my_content); $my_content=stripslashes($my_content); $my_subject=stripslashes($my_subject); echo " <TABLE WIDTH=500 CELLSPACING=1 cellpadding=5 BGCOLOR=black> <TR> <TD BGCOLOR=ffffff align=center> <a href='http://$my_home' target='_new'>"; if($my_banner) echo"<img src='${ban_dir}$my_banner' border=0><br>"; echo "<FONT SIZE=2>$my_subject</a> </TD> </TR> <TR> <TD BGCOLOR=eeeeee align=center> <TABLE WIDTH=90% CELLSPACING=0> <TR> <TD BGCOLOR=eeeeee> <FONT SIZE=2>$my_content<BR> </FONT> <p> <FONT SIZE=2>주인장 : $my_id "; if(!$my_email) echo "<FONT COLOR=RED> </FONT>"; else echo "( <A HREF=mailto:$my_email>$my_email</A>)"; echo "<br> 홈페이지 : http://$my_home </TD> </TR> </TABLE>
</TD> </TR> </TABLE><BR>"; $article_num--;
} ?> <table width="500" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td colspan="6" align="center"> <? ########## 게시물 목록 하단의 각 페이지로 직접 이동할 수 있는 페이지링크에 대한 설정을 한다. $total_block = ceil($total_page/$page_per_block); $block = ceil($page/$page_per_block);
$first_page = ($block-1)*$page_per_block; $last_page = $block*$page_per_block;
if($total_block <= $block) { $last_page = $total_page; }
########## 이전페이지블록에 대한 페이지 링크 ########## if($block > 1) { $my_page = $first_page; echo("<font size=2><a href=\"$php_self?page=$my_page\" >[이전 ${page_per_block}개]</a></font>"); }
########## 현재의 페이지 블럭범위내에서 각 페이지로 바로 이동할 수 있는 하이퍼링크를 출력한다. for($direct_page = $first_page+1; $direct_page <= $last_page; $direct_page++) { if($page == $direct_page) { echo("<font size=2><b>[$direct_page]</b></font>"); } else { echo("<font size=2><a href=\"list.html?page=$direct_page\">[$direct_page]</a></font>"); } }
########## 다음페이지블록에 대한 페이지 링크 ########## if($block < $total_block) { $my_page = $last_page+1; echo("<font size=2><a href=\"list.html?page=$my_page\">[다음 ${page_per_block}개]</a></font>"); } ?> </td> </tr> </table>
<table width="500" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td align="left"> <a href="list.html"><FONT SIZE=2>목록</a> </td> <td align="right"> <a href="postform.html"><FONT SIZE=2>등록</a> | <? ########## 이전페이지가 존재할 경우 이전페이지로 가는 링크를 활성화시킨다. if ($page > 1) { $page_num = $page - 1; echo("<a href=\"list.html?page=$page_num\"><FONT SIZE=2>이전</a> | "); } else { echo("<FONT SIZE=2>이전 | "); }
########## 게시물이 다음페이지에도 존재할 경우 다음페이지로 가는 링크를 활성화시킨다. if ($IsNext > 0) { $page_num = $page + 1; echo("<a href=\"list.html?page=$page_num\"><FONT SIZE=2>다음</a></td>"); } else { echo("<FONT SIZE=2>다음</td>"); } ?>
</tr> </table> <? mysql_close(); ?>
3. 싸이트 링크(postform.html, post.html)
회원 가입 폼(postform.html) <HTML> <HEAD> <TITLE>싸이트 링크</TITLE> </HEAD> <BODY BGCOLOR=ffffff> <CENTER> <FONT SIZE=6 FACE='Comic Sans MS'>[ 싸이트 링크 ]</FONT><BR> <FORM NAME='signform' METHOD=POST ACTION='post.html' ENCTYPE='multipart/form-data'> <TABLE WIDTH=500 BGCOLOR=black CELLSPACING=1> <TR> <TD height=25 BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>주인장</TD> <TD BGCOLOR='eeeeee' WIDTH=400><INPUT TYPE=text NAME='id' value=""></TD> </TR> <TR> <TD height=25 BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>E-Mail</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=text NAME='email' value=""></TD> </TR> <TR> <TD height=25 BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>제 목</TD> <TD BGCOLOR='eeeeee'><INPUT TYPE=TEXT NAME='subject' SIZE=50 MAXLENGTH=100></TD> </TR> <TR> <TD height=25 BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>주소 </TD> <TD BGCOLOR='eeeeee'><FONT SIZE=2 COLOR='black'>http://<INPUT TYPE=TEXT NAME='home' SIZE=45 MAXLENGTH=100></TD> </TR> <TR> <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>내 용</TD> <TD BGCOLOR='eeeeee'><TEXTAREA NAME='content' ROWS=5 COLS=50></TEXTAREA></TD> </TR> <TR> <TD height=25 BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100> <FONT SIZE=2 COLOR='black'>배너파일</TD> <TD BGCOLOR='eeeeee'> <INPUT TYPE=FILE NAME=banner size=35></TD> </TR>
</TABLE> <TABLE WIDTH=500 BGCOLOR=ffffff> <TR> <TD ALIGN=CENTER> <INPUT TYPE='submit' VALUE='저장' > <INPUT TYPE='BUTTON' VALUE='취소' onclick='javascript:location = "<?echo("list.html?page=$page");?>"'></TD> </TR> </TABLE> </FORM>
</BODY> </HTML>
처리 프로그램(post.html) <? if(!$subject) { echo " <SCRIPT> alert('이름을 입력해주세요'); history.go(-1); </SCRIPT>"; } else if(!$id) { echo " <SCRIPT> alert('이름을 입력해 주세요.'); history.go(-1); </SCRIPT>"; } else if(!$content) { echo " <SCRIPT> alert('내용을 입력해 주세요.'); history.go(-1); </SCRIPT>"; } else {
$dbconn = mysql_connect("localhost","php","php99") or die("DB Server에 접속할 수 없습니다."); mysql_select_db("sample",$dbconn);
if($banner_size >= "50000") { echo " <SCRIPT> alert('50KB이하의 배너를 이용해주세요 !!!.'); history.go(-1); </SCRIPT>";
exit; }
$ban_dir = "./data/";
if($banner_name != "") { $file_name = substr( strrchr($banner_name , "."),1); if($file_name!=jpg && $file_name != jpeg && $file_name != gif) { echo " <SCRIPT> alert('.GIF나 .JPG 형식의 배너만 이용할 수 있습니다.'); history.go(-1); </SCRIPT>"; exit; }
$banner_name_id = $banner_name; $banner_id = 0; while(file_exists($ban_dir.$banner_name_id)) { $banner_name_id = $banner_id."_".$banner_name_id; $banner_id = $banner_id + 1; } $temp = $ban_dir."/".$banner_name_id; copy($banner , $temp); unlink($banner); }
$id = addslashes($id); $email = addslashes($email); $home = addslashes($home); $subject = addslashes($subject); $content = addslashes($content);
$query = "INSERT INTO myhome (id,email,subject,home,content,banner) VALUES ('$id','$email','$subject','$home','$content', '$banner_file')";
$result = mysql_query($query); if(!$result) { $errNO = mysql_errno($dbconn); $errMSG = mysql_error($dbconn);
echo("에러코드 $errNO : $errMSG<br>"); exit; }
echo " <BODY BGCOLOR=eeeeee> <SCRIPT> alert('자료가 성공적으로 등록 되었습니다.'); location.replace('list.html'); </SCRIPT> </HTML>"; } ?>
4. [문제] 수정 프로그램(modifyform.html, modify.html) 직접 해보시기 바랍니다.
5. [문제] 삭제 프로그램(deleteform.html, delete.html) 직접 해보시기 바랍니다.
|
[목차] |