야매강좌 php11강 : 게시판 리스트 작성(종합선물세트)
안녕하세요. 이번 강의 준비가 좀 오래걸렸습니다. 마음 단단히 먹으시기 바랍니다. 생각보다 많은 시간이(하루이틀 넘게) 걸리실 수도 있으니까요. 프로그래밍이라는 게 초보단계에선 그렇게 쉬울 수가 없지만, 나중에는 양도 많아지고 이것저것 복잡해지죠.
오늘 제목은 게시판 리스트 출력, 그리고 종합선물세트입니다. 오늘 강의 내용을 요리조리 변형해서 모든 사이트가 만들어지는 거라서요.
차근히 전진해보세요. 힘들면 쉬면서 하시고요.
(서론 1) PHP를 쓰는 이유
뜬금없이 PHP를 쓰는 이유를 얘기해보고 싶네요. HTML을 쓰면 되는데 왜 PHP를 쓸까요.
쉽게 말해 HTML은 어떤 고정된 페이지라서 유저 개입이 안됩니다. 사이트 운영자가 파일을 만지작거려야 바뀌는거죠.
근데 자유게시판, 블로그, 카페, 페이스북 같은 건 모두 유저 개입이 됩니다. 고정된 게 아니어서 유저들이 이것저것 찔러넣으면 수정이 되죠. 이게 큰 차이점이에요.
그러니까 PHP로 3가지 정도를 구현하면 됩니다. (이건 뭐 어디서 들은 것도 아니고 그냥 제 개인적 생각입니다)
하나, 입력. 유저가 뭔가를 입력하고요.
둘, 처리. 그게 DB에 들어가고요.
셋, 출력. DB 내용을 화면에 뿌려주면(나타내주면) 됩니다.
(서론 2) 게시판 리스트 출력을 해보자
결국 입력-처리-출력 을 만들자는 거죠. 그런 의미에서 오늘 php파일을 3개 만들겁니다.
입력의 input.php, 처리의 input2.php, 출력의 list.php죠.
형태는 게시판으로 합니다.
먼저 사용자가 텍스트박스에 글을 쓰면(input), 그걸 DB에 넣고(input2), DB값을 출력하는거죠(list).
이렇게 한 번 만들고 나면 사실 PHP의 기초를 다 배운겁니다.
모든 사이트는 입력-처리-출력의 기본 원리를 이리저리 바꾼 버젼에 지나지 않을테니까요.
서론이 길었네요.
(1/3) input.php
먼저 글 입력창을 만들어봅시다. 이건 사실 야매강좌 6강과 9강을 합친겁니다. 하지만 기억해내서 만들어보세요~ 라고 하면 당연히 못 만드니까 저랑 같이 다시 해봅시다.
▼ 이런 화면을 만들면 됩니다
|
설명> 주석에 대해서 얘기해보죠.
주석이란 프로그램 작동에는 전혀 영향을 끼치지 않는 부분을 말합니다. 참고용으로 뭔가 적을 때 주석으로 적으면 됩니다. HTML 언어에서 주석은 <!– 로 열고 –> 로 닫습니다. PHP 언어와 자바스크립트 언어에서 주석은 // 뒤에 이것저것 쓰면 됩니다. 그러니까 언어가 바뀔 때마다 주석도 바꿔줘야 합니다. |
input.php
|
<!–input.php–> <html> <!–헤드열기. 헤드에는 title도 들어가지만 나중에 쓰일 함수(펑션)을 만들어 놓으면 됩니다–> <script language=”JavaScript”> //그런 의미에서 자바스크립트 시작 //이 함수는 비어있는 텍스트박스가 있으면 메시지를 출력하고, //그렇지 않을경우(else) 전송하는(submit) 함수입니다
else if (document.HGB.passwd.value == ”)
else if (document.HGB.email.value == ”)
else if (document.HGB.url.value == ”)
else if (document.HGB.title.value == ”)
else if (document.HGB.content.value == ”)
else { document.HGB.submit(); } } //함수 닫기 </head><!–헤드 닫기–>
<!–폼이름은 HGB(흑곰보드), 전송방식 포스트, 연관 파일을 설정해줍니다–> <!–표–> </body> |
글을 제대로 입력했다면 버튼을 누르는 즉시 폼(HGB)에 있는 박스 내용들이 전송됩니다.
참고로 홈페이지는 http://a 이런식으로 쓰면 되고, 메일은 a@a 이런식으로 쓰면 됩니다.
(2/3) input2.php
이 파일은 DB처리하는 내용을 넣을게요. 이 파일은 전체적으로 php를 썼습니다.
다시 말해 파일의 시작은 <?php, 파일의 끝은 ?>로 끝납니다.
다만 중간중간 html이나 자바스크립트가 들어가는데요. 이럴 땐 echo 함수를 이용해서 html과 자바스크립트를 표현합니다.
input2.php
|
<?php //input2.php. 전체를 php문서로 작성해봤습니다. //에러 함수————— //아까처럼 html의 헤드 안에 함수를 만들자. 함수 만들 땐 자바스크립트를 활용하는거다. //이해가 안된다고? 될 때까지 다시 읽어라. function error($msg)
//DB 연결 //변수 넘겨받기 //문자열 사이에 역슬래쉬를 넣는 함수다. //ex) ‘ 는 그대로 DB에 넣으면 오류가 나며 \’ 로 입력해야 한다. //반드시 addslashes로 처리하면 됨.
$passwd = $_POST[“passwd”]; //위와 동일. 변수 넘겨받은 후,
$email = $_POST[“email”];
$url = $_POST[“url”];
$title = $_POST[“title”];
$content = $_POST[“content”]; //초기값 설정 //미안하지만 복사-붙여넣기를 추천한다 //정규 표현식을 이용해서 문자열을 검사 //$변수가 비었을 경우라는 뜻이다. //복잡하니까 복사해다 쓰면 된다
if(!ereg(“(^[0-9a-zA-Z]{4,8}$)”, $passwd)) //영문, 숫자만 받는다. 4~8글자
if($email != ” && !ereg(“(^[_0-9a-zA-Z-]+(\.[_0-9a-zA-Z-]+)*@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*$)”, $email)) //이걸 외울생각이라면 말리고 싶다. 중간에 @가 들어가야 한다
if($url != ” && !ereg(“http://([0-9a-zA-Z.\@~?&=_])”, $url)) //http://를 앞에 붙여야 한다
if(!ereg(“([^[:space:]])”, $title))
if(!ereg(“([^[:space:]])”, $content))
//갖고 있는 변수를 데이터베이스에 입력하고 싶다면? 다시 말해 변수->DB 하고 싶다면? //insert into 테이블이름 (넣을 필드이름) values (넣고싶은값) //테이블 A의 aa 필드에 변수 cc가 들어가고, bb 필드에 변수 dd가 들어간다.
//sql로 쿼리요청 또는 실패시 에러
//글 목록 페이지로 이동하기 //페이지 이동할 때 : location.href=’이동할주소’; //메시지 띄울 때 : self.window.alert(‘내용’); |
(3/3) list.php
이제 마지막 한 파일만 남았습니다. 조금 더 집중 해봅시다.
▼ 아래 그림을 기억해주세요.
list.php
|
<?php //list.php 파일 산뜻하게 시작! //에러 함수———— //아까도 만들었으니 자세한 설명을 생략한다 //————————– //db연결
//여기서부터 엄청 중요! 집중 //초기값 설정
$sql = “select count(*) from $tablename”; //전설의 셀렉트문. 셀렉트문은 php의 꽃이라 할 수 있다. 알아보자. //(머리 아프면 읽지 않아도 된다. 자연히 알게되겠지 뭐) //(1) select * from board; 모든 데이터를 가져온다 //(2) select * from board where name=’흑곰’; 이름이 흑곰인 모든 데이터를 가져온다 //(3) select * from board where no=2; 2번째 게시글을 가져온다 //(4) select no, name, title from board; 데이터 중에서도 번호, 이름, 제목 열만 가져온다 //(5) select no, daytime from board order by daytime; 글 입력 시간으로 오름차순 //(6) select no, count from board order by count desc, no; 카운트로 내림차순 후 넘버로 오름차순. order by ~ 하면 오름차순이고, order by ~ desc하면 내림차순인 것 //(7) select count(*) from board; 전체 게시물의 수를 가져온다 $result = mysql_query($sql) or die (mysql_error()); //알아내는 함수로 기억하자. 자세한 내용은 다음에 다루겠다. //그냥 원래 이런식으로 쓰는거다. $total_no = $row[0]; //전체 글 수 $total_page = ceil($total_no/$listnum); //페이지번호 계산 //(참고 : ceil 올림, floor 내림, round 반올림)
//board 테이블에서 목록 가져오기, $offset(초기넘버)에서 $listnum(게시글 수)만큼
//유저에게 보이는 페이지 시작————————- <table width=’600′ border=’0′>
while($row = mysql_fetch_array($result)) { $title = $_POST[“title”]; $daytime = $_POST[“daytime”];
//순번, 이름, 제목, 조회수, 날짜 순으로 출력한다
//페이지 계산 $first = ($block-1) * $pagenum; if($block >= $total_block) //페이지링크 //페이지 링크 echo(“ </center> “); |
(마치며)
짝짝짝! 이걸 끝까지 따라하셨다면 대단합니다.
전 예전에 프로그래밍이 어떤 마법같다고 생각했어요. 마법처럼 이렇게 저렇게 해라~하면 되는 줄 알았죠.
하지만 그런건 없습니다.
화면에 나타나는 하나 하나가 여러 줄의 코드인 것이죠. 자동으로 되는건 없어요.
오늘 배운 11강은 입력-처리-출력가 나오는 핵심부입니다.
나중에 필요할 거 같은 부분은 복사해서 잘 추려두시기 바랍니다. 수고하셨습니다.