[강좌] php+mysql 게시판 만들기 #쉬-3
안녕하세요. 디망쉬입니다.
자~ 자~ 이번엔 입력한 글을 읽어볼까요?
앗. 2000년 7월 4일자로 '쉬'편이 모두 다시 올라왔습니다. 그 이전에 갈무리 하신 분은 새로 갈무리하세요.
------------------------------------------------------------------------------------------------ '쉬'편은 모든 편이 서로 약간씩 관련이 되어 있으므로 모두를 한꺼번에 받으셔서 이 편 저 편 이동하시며 같이 읽는것이 좋습니다.^^;
이유가 각 부분마다 사용하는 변수가 많기 때문에 하나 하나 보시면 이 변수가 뭐에 쓰이는건지 헷갈릴 수 있거든요. 그래서 '쉬-짠1'편에서는 각 부분마다 사용되는 변수를 설명해놓고 있지만, 역시나 더 좋은 방법은 다른 편들을 이동하시며 보는 것입니다. :) '쉬'편의 짠들은 다음과 같으니 별도로 준비하셔서 참조하세요. ^^;
쉬-짠1 : 게시판 만들면서 사용되는 변수 정리 문서 쉬-짠2 : 게시판 만드는데 필요한 약간의 html tag 쉬-짠3 : 게시판 만들면서 만든 사용자 정의 함수 쉬-짠4 : 게시판 만드는데 사용된 php 함수 정리 쉬-짠5 : 게시판 만들면서 필요한 SQL 명령어 정리 ------------------------------------------------------------------------------------------------
쉬. 기능 붙이기
a. 글 내용 보기
매우 쉬운 부분이군요. 에헤헤. 다만 주의할 점만 잘 쓰면 될 듯. ^^;
글을 읽을 때 게시판은 어떠한 정보를 알아야만 사용자가 읽기를 희망하는 글을 찾아내서 출력할 수 있을까요? 단지 두 가지입니다. 바로 해당 게시판의 이름과 절대 글 번호, 즉 테이블 이름과 no attribute 입니다.
해당 글을 찾으려면 해당 글이 들어가있는 테이블을 알아야하고 그 글을 찾으려면 같은 숫자란 존재하지 않고 해당 숫자는 유일하게 존재하는 절대 글 번호인 no attribute 가 필요하죠.
그래서 list.php3 에서 글 제목을 <a> tag 로 링크를 걸 때 board=$board&no=$no 식이던가로 했습니다.
자 그럼 SQL 쿼리로는 어떻게 되나 볼까요? testboard 에서 13번 글을 읽으려 합니다. 그렇다면
SELECT * FROM testboard WHERE no=13 |
이라고 하면 끝납니다. ^^; 매우 간단하군요. 게시물 읽기 파일은 view.php3 소스를 미리 한 번 볼까요?
<? /*-------------------------- filename : view.php3 --------------------------*/ $connect = mysql_connect("localhost","아이디","비번"); mysql_select_db("사용DB?quot;,$connect);
$result = mysql_query("SELECT * FROM $board WHERE no=$no", $connect);
$view = mysql_fetch_array($result);
echo " 작성자명 : $view[usrname]<br> E-mail : $view[usremail]<br> 글 번호 : $view[num]<br> 글 제목 : $view[usrtitle]<br> 조회수 : $view[hit]<br> 본문 : <p> $view[contents] "; ?> |
에게? 벌써 끝? 네 맞습니다. 사실상 구현과 관련된 것은 이게 끝이지요. 하지만 이걸로 끝낼 순 없죠. 일단 글을 읽을 때마다 조회수가 증가해야합니다.
조회수를 증가한다는 것은 곧 현재의 조회수 숫자에 1을 더한 값으로 값을 '고친다'는 의미입니다. SQL 명령어로 고치는게 뭘까요? 그건 바로 UPDATE 문입니다. 글 읽을 때마다 조회수를 1씩 증가해서 조회수 기능을 넣어볼까요?
UPDATE $board SET hit = hit + 1 WHERE no=$no |
바로 이겁니다. 이걸로 끝나버리죠. ^^; 소스에도 적용시켜보겠습니다.
<? /*-------------------------- filename : view.php3 --------------------------*/ $connect = mysql_connect("localhost","아이디","비번"); mysql_select_db("사용DB명",$connect);
$updok = mysql_query("UPDATE $board SET hit = hit + 1 WHERE no=$no", $connect);
$result = mysql_query("SELECT * FROM $board WHERE no=$no", $connect);
$view = mysql_fetch_array($result);
echo " 작성자명 : $view[usrname]<br> E-mail : $view[usremail]<br> 글 번호 : $view[num]<br> 글 제목 : $view[usrtitle]<br> 조회수 : $view[hit]<br> 본문 : <p> $view[contents] "; ?> |
이걸로 게시물 읽기는 끝!
이제 중요한 걸 다뤄보겠습니다. 게시판, 특히 php 를 지원하는 웹 서버는 조심해줘야할 사항이 있습니다. 바로 본문이나 게시물 제목등 문자열이 들어가는데에 php 코드가 들어가는 것이지요.
누군가 악의를 품고 서버의 중요한 내용을 빼내기 위해 게시물 본문에 php 코드를 심어놓고 게시물 읽을 때 자동으로 데이터가 넘어오도록 할 수도 있습니다.
예를 들어 게시물 본문에
<? require "db.php3"; echo "$passwd"; ?> |
이런 코드를 심어놨다고 하죠. 그리고 db.php3 에는 db 관련 비밀 번호가 있고 이 비밀 번호가 저장된 변수가 $passwd 일 경우 게시물 읽는 것만으로 비밀 번호를 유출해서 알아올 수 있죠.
어때요. 위험하죠?
물론 php 에는 html tag 자체를 막아버리는 기능이 있습니다. < 로 시작하는 문자는 몽조리 없애버리죠. 하지만 html tag 를 지원하지 않으면 게시판이 너무 경직된 느낌이 들겠죠? 빈대 잡자고 에프킬라를 공기삼아 살 수도 없구.
기존의 여러 게시판들이 이러한 점으로 골머리를 앓곤 합니다. 제가 참여하고 있는 jsboard 나 이곳 저곳에서 쓰이는 zero board 등등 php 로 작성된 게시판들이 골머리를 앓고 있죠. 몇 몇 대안이 있지만 만족스러운 건 아니구요.
하지만 php 는 정말 멋지게도 대안 함수를 제공해줍니다. 그것은 바로 htmlspecialchars() !! 이 함수는 해당 변수내의 문자열 중 모든 < 나 > 를 < 나 > 로 바꿔줍니다. < 을 출력하는 코드가 바로 < 거든요. 즉 html 소스에서
라고 해주면 화면에는
라고 직접 출력됩니다. 이게 가장 무난한 방법입니다.
에. 참고로 말씀드리면 strip_tags() 라는 함수도 있는데 이건 앞서 말씀드린 것처럼 tag 를 모두 없애버리는 함수입니다.
자. 그럼 htmlspecialchars() 함수를 적용한 게시물 읽기로 해볼까요?
<? /*-------------------------- filename : view.php3 --------------------------*/ $connect = mysql_connect("localhost","아이디","비번"); mysql_select_db("사용DB명",$connect);
$updok = mysql_query("UPDATE $board SET hit = hit + 1 WHERE no=$no", $connect);
$result = mysql_query("SELECT * FROM $board WHERE no=$no", $connect);
$view = mysql_fetch_array($result);
$view[usrname] = htmlspecialchars($view[usrname]); $view[usremail] = htmlspecialchars($view[usremail]); $view[usrtitle] = htmlspecialchars($view[usrtitle]); $view[contents] = htmlspecialchars($view[contents]);
echo " 작성자명 : $view[usrname]<br> E-mail : $view[usremail]<br> 글 번호 : $view[num]<br> 글 제목 : $view[usrtitle]<br> 조회수 : $view[hit]<br> 본문 : <p> $view[contents] "; ?> |
이걸로 게시물 읽기는 끝! ^^; 뭐 해당 글 읽는 도중 글을 수정하거나 삭제할 수 있게 글 수정과 글 삭제를 넣죠 뭐. 이렇게.
<? /*-------------------------- filename : view.php3 --------------------------*/ $connect = mysql_connect("localhost","아이디","비번"); mysql_select_db("사용DB명",$connect);
$updok = mysql_query("UPDATE $board SET hit = hit + 1 WHERE no=$no", $connect);
$result = mysql_query("SELECT * FROM $board WHERE no=$no", $connect);
$view = mysql_fetch_array($result);
$view[usrname] = htmlspecialchars($view[usrname]); $view[usremail] = htmlspecialchars($view[usremail]); $view[usrtitle] = htmlspecialchars($view[usrtitle]); $view[contents] = htmlspecialchars($view[contents]);
echo " 작성자명 : $view[usrname]<br> E-mail : $view[usremail]<br> 글 번호 : $view[num]<br> 글 제목 : $view[usrtitle]<br> 조회수 : $view[hit]<br> 본문 : <p> $view[contents]
<hr width="90%"> | <a href="edit.php3?board=$board&no=$no">글 수정</a> | <a href="delete.php3?board=$board&no=$no">글 삭제</a> "; ?> |
이번 회는 여기서 끄읕! ^^;
날씨가 여름처럼 덥군요. 감기 조심하세요~! :) (에. 무슨 말이지)
다음 강좌에서 뵈요.
---------------------------- 함께하면 즐거운 사이트들 (-_-; 광고임 -_-;) http://game.creple.com/delthia http://creple.com http://coco.st ----------------------------
|