PHP 프로그래밍

본문 바로가기
사이트 내 전체검색


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>&nbsp;</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='저장' >&nbsp;&nbsp;

        <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)

 직접 해보시기 바랍니다.

 

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.