31
11 장 장장장 장장

11 장 낙서장 제작

  • Upload
    cira

  • View
    94

  • Download
    0

Embed Size (px)

DESCRIPTION

11 장 낙서장 제작. 낙서장 기능 낙서장 DB 테이블 설계 세션 변수 활용하여 특정 사용자에게만 삭제 권한 부여 페이지 내비게이션 기능 낙서장 / 덧글의 저장과 삭제. 낙서장 개요 DB 테이블 설계 및 생성 낙서장 페이지 제작 낙서장 페이지 기능 구현. 1.1 결과 화면과 요구사항. [ 그림 11-1] 낙서장 페이지. 1.1 결과 화면과 요구사항. 요구사항 로그인 상태에서만 글쓰기 가능 덧글 달기 기능 추가 메인글과 덧글을 한 화면에 출력 - PowerPoint PPT Presentation

Citation preview

Page 1: 11 장  낙서장  제작

11 장 낙서장 제작

Page 2: 11 장  낙서장  제작

IT CookBook,PHP 웹 프로그래밍 입문 ( 개정판 )

[ 강의교안 이용 안내 ]• 본 강의교안의 저작권은 한빛아카데미㈜에 있습니다 . • 이 자료를 무단으로 전제하거나 배포할 경우 저작권법 136 조에 의거하여 최고 5 년

이하의 징역 또는 5 천만원 이하의 벌금에 처할 수 있고 이를 병과 ( 倂科 ) 할 수도 있습니다 .

Page 3: 11 장  낙서장  제작

학습목표 낙서장 기능 낙서장 DB 테이블 설계 세션 변수 활용하여 특정 사용자에게만 삭제

권한 부여 페이지 내비게이션 기능 낙서장 / 덧글의 저장과 삭제

Page 4: 11 장  낙서장  제작

목차1. 낙서장 개요2. DB 테이블 설계 및 생성3. 낙서장 페이지 제작4. 낙서장 페이지 기능 구현

Page 5: 11 장  낙서장  제작

1.1 결과 화면과 요구사항

[ 그림 11-1] 낙서장 페이지

Page 6: 11 장  낙서장  제작

1.1 결과 화면과 요구사항• 요구사항

로그인 상태에서만 글쓰기 가능 덧글 달기 기능 추가 메인글과 덧글을 한 화면에 출력 닉네임 , 작성일 및 시간 , 글 내용 추력 작성자와 관리자만 메인글 삭제 가능 덧글의 작성자와 관리자만 덧글 삭제 가능

Page 7: 11 장  낙서장  제작

1.2 준비 파일과 페이지 구성

구분 파일명 기능

데이터베이스

memo.sql 메인글 데이터베이스 테이블 생성

memo_ripple.sql

덧글 데이터베이스 테이블 생성

페이지 memo.php 낙서장 페이지

기능

insert.php 메인글 저장

insert_ripple.php

덧글 저장

delete.php 메인글 삭제

delete_ripple.php

덧글 삭제

[ 표 11 -1] 낙서장 페이지 제작 실습에 사용하는 파일 목록

Page 8: 11 장  낙서장  제작

1.2 준비 파일과 페이지 구성

[ 그림 11-2] 낙서장의 페이지 흐름

Page 9: 11 장  낙서장  제작

2.1 낙서장 메인글 DB 테이블 설계 및 생성

필드명 타입 추가 사항 설명

num int not null,auto_increment, primary key

일련번호

id char(15)

not null 아이디

name char(10)

not null 이름

nick char(10)

not null 닉네임

content text not null 글 내용

regist_day char(20)

작성일 및 시간

[ 표 11-2] 낙서장 메인글의 데이터베이스 테이블 ( 테이블명 : memo)

Page 10: 11 장  낙서장  제작

memo 데이터베이스 테이블 생성 memo.sql

create table memo ( num int not null auto_increment, id char(15) not null, name char(10) not null, nick char(10) not null, content text not null, regist_day char(20), primary key(num) );

Page 11: 11 장  낙서장  제작

2.2 낙서장 덧글 DB 테이블 설계 및 생성

필드명 타입 추가 사항 설명

num int not null,auto_increment,primary key

일련번호

parent int not null 메인글의 일련번호

id char(15)

not null 아이디

name char(10)

not null 이름

nick char(10)

not null 닉네임

content text not null 글 내용

regist_day char(20)

작성일 및 시간

[ 표 11-3] 낙서장 덧글의 데이터베이스 테이블 ( 테이블명 : memo_ripple)

Page 12: 11 장  낙서장  제작

memo_ripple 데이터베이스 테이블 생성 memo_ripple.sql

create table memo_ripple ( num int not null auto_increment, parent int not null, id char(15) not null, name char(10) not null, nick char(10) not null, content text not null, regist_day char(20), primary key(num) );

Page 13: 11 장  낙서장  제작

3. 낙서장 페이지 생성

[ 그림 11-7] 낙서장 페이지

Page 14: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

001 <? 002 session_start(); 003004 $scale=5; // 한 화면에 표시되는 글의 개수005 include "../lib/dbconn.php";006 007 $sql="select * from memo order by num desc";008 $result=mysql_query($sql, $connect);009 $total_record=mysql_num_rows($result); // 전체 글의 개수010 011 // 전체 페이지 수 ($total_page) 계산012 if($total_record % $scale==0) 013 $total_page=floor($total_record/$scale); 014 else015 $total_page=floor($total_record/$scale) + 1; 016 017 if(!$page) // 페이지 번호 ($page)가 0 일 때018 $page=1; // 페이지 번호를 1 로 초기화019

Page 15: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

020 // 페이지 번호 ($page) 에 따른 시작 레코드 ($start) 계산021 $start=($page - 1) * $scale; 022 $number=$total_record-$start;023 ?>024025 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN“ "http://www.w3.org/TR/html4/loose.dtd">026 <html>027 <head>

<!-- 생략 -->031 </head>032033 <body>

<!-- 생략 -->049 <div id="col2"> 050 <div id="title">051 <img src="../img/title_memo.gif">052 </div> <!-- end of title -->053

Page 16: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

054 <div id="memo_row1">055 <form name="memo_form" method="post" action="insert.php"> 056 <div id="memo_writer"><span >▷ <?=$usernick ?></span></div>057 <div id="memo1"><textarea rows="6" cols="95" name="content"></textarea></div>058 <div id="memo2"><input type="image" src="../img/memo_button.gif"></div>059 </form>060 </div> <!– end of memo_row1-->061 <?062 for($i=$start; $i<$start+$scale && $i<$total_record; $i++) 063 {064 mysql_data_seek($result, $i); 065 $row = mysql_fetch_array($result); 066067 $memo_id=$row[id];068 $memo_num=$row[num];069 $memo_date=$row[regist_day];070 $memo_nick=$row[nick];071

Page 17: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

072 $memo_content=str_replace("\n", "<br>", $row[content]);073 $memo_content=str_replace(" ", "&nbsp;", $memo_content);074 ?>075 <div id="memo_writer_title">076 <ul>077 <li id="writer_title1"><?= $number ?></li>078 <li id="writer_title2"><?= $memo_nick ?></li>079 <li id="writer_title3"><?= $memo_date ?></li>080 <li id="writer_title4"> 081 <? 082 if($userid=="admin" || $userid==$memo_id)083 echo "<a href='delete.php?num=$memo_num'>[ 삭제 ]</a>"; 084 ?>085 </li>086 </ul>087 </div> <!-- end of memo_wirte_title -->088 <div id="memo_content"><?= $memo_content ?>089 </div> <!-- end of memo_content -->

Page 18: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

090 <div id="ripple"> 091 <div id="ripple1"> 덧글 </div>092 <div id="ripple2">093 <?094 $sql="select * from memo_ripple where parent='$memo_num'";095 $ripple_result=mysql_query($sql);096 097 while ($row_ripple=mysql_fetch_array($ripple_result))098 {099 $ripple_num=$row_ripple[num];100 $ripple_id=$row_ripple[id];101 $ripple_nick=$row_ripple[nick];102 $ripple_content=str_replace("\n", "<br>", $row_ripple[content]); 103 $ripple_content=str_replace(" ", "&nbsp;", $ripple_content);104 $ripple_date=$row_ripple[regist_day];105 ?>

Page 19: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

106 <div id="ripple_title">107 <ul>108 <li><?= $ripple_nick ?> &nbsp;&nbsp;&nbsp; <?= $ripple_date ?></li>109 <li id="mdi_del">110 <? 111 if($userid=="admin" || $userid==$ripple_id)112 echo "<a href='delete_ripple.php?num=$ripple_num'> 삭제 </a>";113 ?>114 </li>115 </ul>116 </div> <!– end of ripple_title -->117 <div id="ripple_content"> <?= $ripple_content ?></div>118 <?119 } // while 문 종료 (97 행 )120 ?>

Page 20: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

121 <form name="ripple_form" method="post" action="insert_ripple.php"> 122 <input type="hidden" name="num" value="<?= $memo_num ?>"> 123 <div id="ripple_insert">124 <div id="ripple_textarea">125 <textarea rows="3" cols="80" name="ripple_content"></textarea>126 </div> <!-- end of ripple_textarea -->127 <div id="ripple_button"><input type="image“ src="../img/memo_ripple_button.png"></div>128 </div> <!-- end of ripple_insert -->129 </form>130131 </div> <!-- end of ripple2 -->132 <div class="clear"></div>133 <div class="linespace_10"></div>

Page 21: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

134 <?135 $number--;136 } // for 문 종료 (62 행 )137 mysql_close();138 ?>139 <div id="page_num"> ◀ 이전 &nbsp;&nbsp;&nbsp;&nbsp; 140 <?141 // 게시판 목록 하단에 페이지 번호 링크 출력142 for($i=1; $i<=$total_page; $i++)143 {144 if($page==$i) // 현재 페이지 번호 링크 안함145 {146 echo "<b> $i </b>";147 }148 else149 { 150 echo "<a href='memo.php?page=$i'> $i </a>";151 }152 }153 ?>

Page 22: 11 장  낙서장  제작

예제 11-1 낙서장 페이지 memo.php

154 &nbsp;&nbsp;&nbsp;&nbsp; 다음 ▶ </div><!-- end of page_num -->155 </div> <!-- end of ripple -->156 </div> <!-- end of col2 -->157 </div> <!-- end of content -->158 </div> <!-- end of wrap -->159 </body>160 </html>

Page 23: 11 장  낙서장  제작

floor() 함수• 형식 float floor (float value) - 인자 : 유리수

• 기능 floor() 함수는 첫 번째 인자인 value 값을 소수점에서 내림한 정수를 반환한다 .

• 사용 예 <? echo floor(3.8); // 실행 결과 : 3 echo floor(9.999); // 실행 결과 : 9 ?>

mysql_data_seek() 함수• 형식 int mysql_data_seek (int result_identifier, int row_number) - 첫 번째 인자 : select 명령 실행 결과 - 두 번째 인자 : 가리킬 레코드의 순번

• 기능 대상 레코드 (result_identifier) 중에서 해당 순번 (row_number) 에 해당하는 레코드를 가리킨다 .

Page 24: 11 장  낙서장  제작

str_replace() 함수• 형식 mixed str_replace (mixed search, mixed replace, mixed subject) - 첫 번째 인자 : 문자열 또는 배열 형태의 교체 대상 - 두 번째 인자 : 바꾸려는 문자 - 세 번째 인자 : 첫 번째 인자가 포함된 문자열

• 기능 str_replace() 함수는 문자열을 처리하는 데 많이 사용한다 . 세 번째 인자(subject) 에서 첫 번째 인자 (search) 를 찾아서 모두 두 번째 인자 (replace) 로 치환한다 .

• 사용 예 변수 $a 의 문자열 중에서 / 을 –로 변경한다 .

<? $a="/localhost/memo/memo.php"; $b=str_replace("/", "-", $a); // 실행결과 : -localhost-memo-memo.php echo $b; ?>

Page 25: 11 장  낙서장  제작

예제 11-2 낙서장 글 저장 insert.php

01 <? session_start(); ?>02 <meta charset="euc-kr">03 <?04 if(!$userid)05 {06 echo("07 <script>08 window.alert(' 로그인 후 이용해 주세요 .')09 history.go(-1)10 </script>11 ");12 exit;13 }14

Page 26: 11 장  낙서장  제작

예제 11-2 낙서장 글 저장 insert.php

15 if(!$content)16 {17 echo("18 <script>19 window.alert(' 내용을 입력하세요 .')20 history.go(-1)21 </script>22 ");23 exit;24 }25 26 $regist_day=date("Y-m-d (H:i)"); // 현재의 ' 년 - 월 - 일- 시 - 분 ' 을 저장27 28 include "../lib/dbconn.php"; // dconn.php 파일을 불러옴 29

Page 27: 11 장  낙서장  제작

예제 11-2 낙서장 글 저장 insert.php

30 $sql="select * from member where id='$userid'";31 $result=mysql_query($sql, $connect);32 $row=mysql_fetch_array($result);3334 $name=$row[name];35 $nick=$row[nick];36 37 $sql="insert into memo (id, name, nick, content, regist_day) ";38 $sql.="values('$userid', '$name', '$nick', '$content', '$regist_day')"; 39 mysql_query($sql, $connect); // $sql 에 저장된 명령 실행40 41 mysql_close(); // 데이터베이스 연결 끊기42 43 echo ("44 <script>45 location.href = 'memo.php';46 </script>47 ");48 ?>

Page 28: 11 장  낙서장  제작

예제 11-3 덧글 저장 insert_ripple.php

01 <?02 session_start();03 ?>04 <meta charset="euc-kr">05 <?06 if(!$userid) 07 {08 echo("09 <script>10 window.alert(' 로그인 후 이용하세요 .')11 history.go(-1)12 </script>13 ");14 exit;15 }16

Page 29: 11 장  낙서장  제작

예제 11-3 덧글 저장 insert_ripple.php

17 if(!$ripple_content)18 {19 echo("20 <script>21 window.alert(' 내용을 입력하세요 .')22 history.go(-1)23 </script>24 ");25 exit;26 }27 28 include "../lib/dbconn.php"; // dconn.php 파일을 불러옴29 30 $sql="select * from member where id='$userid'";31 $result=mysql_query($sql, $connect);32 $row=mysql_fetch_array($result);33 34 $name=$row[name];35 $nick=$row[nick];36

Page 30: 11 장  낙서장  제작

예제 11-3 덧글 저장 insert_ripple.php

37 $regist_day=date("Y-m-d (H:i)"); // 현재의 ' 년 - 월 - 일- 시 - 분 ' 을 저장

3839 // 덧글 삽입 명령40 $sql="insert into memo_ripple(parent, id, name, nick, content, regist_day) ";41 $sql.="values($num, '$userid', '$name', '$nick', '$ripple_content', '$regist_day')"; 42 43 mysql_query($sql, $connect); // $sql 에 저장된 명령 실행44 mysql_close(); // db 연결 끊기45 46 echo ("47 <script>48 location.href = 'memo.php';49 </script>50 ");51 ?>

Page 31: 11 장  낙서장  제작

예제 11-4 낙서장 메인글 삭제 delete.php

01 <?02 include "../lib/dbconn.php";03 04 $sql="delete from memo where num = $num";05 mysql_query($sql, $connect);06 07 mysql_close();08 09 echo ("10 <script>11 location.href = 'memo.php';12 </script>13 ");14 ?>