japanese site
온라인강좌책메일다운로드동아리쇼핑기술지원기업정보갤러리동영상 블로그
『신개념 4단계 리눅스기술지원 시스템 공개』

※ 『무료 리눅스 배포판 배송서비스』 ※

 
쉬. 기능붙이기 -3 글 내용 읽기
조회 : 2,794  


[강좌] 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() !!
이 함수는 해당 변수내의 문자열 중 모든 < 나 > 를 &lt; 나 &gt; 로 바꿔줍니다. < 을 출력하는 코드가
바로 &lt; 거든요. 즉 html 소스에서

&lt;font size="2"&gt;

라고 해주면 화면에는

<font size="2">

라고 직접 출력됩니다. 이게 가장 무난한 방법입니다.

에. 참고로 말씀드리면 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
----------------------------



[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=584


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
디망쉬
E-mail : dimanche@coco.st

Homepage : http://dimanche.coco.st

 
   
 


『신개념 4단계 리눅스기술지원 시스템 공개』

CentOS 리눅스 전문서적 국내최초출시

 
회사소개 | 보도기사 | 채용안내 | 광고안내 | 이용약관 | 개인정보취급방침 | 책임한계와 법적고지 | 불편사항 신고하기 | 사이트맵
ㅇ 서울 : 서울특별시 강남구 노현로79길 66, 402호(역삼동,청송빌딩)  ㅇ 부산 : 부산광역시 해운대구 우동 1470 에이스하이테크21 914호
ㅇ 대표 : 1544-8128 ㅇ부산직통 : 051-744-0077 ㅇ서울직통 : 02-856-0055 ㅇ FAX : 02-6280-2663
ㅇ 사업자번호 : 128-86-68239 ㅇ 통신판매업 신고번호 : 2013-부산금정-0035호 ㅇ 개인정보책임자 : 이재석
ㅇ 상호명 : (주) 수퍼유저 ㅇ 대표자 : 박성수
Copyright ⓒ (주)수퍼유저. All rights reserved.

 아 이 디
 비밀번호
회원 가입 | 비밀번호 찾기

블로그~
 
▷ 웹개발언어
PHP
JSP
python
기타
책제목
리눅스서버관리실무바이블v3.0


저자 박성수
페이지수 2,032 pages
펴낸곳(주)수퍼유저

리눅스 서버 구축 및 관리에 필요한 거의 모든 부분과 전반적인 실무 기법들을 다루고 있음
책제목
리눅스보안관리실무(2/E)


저자홍석범
페이지수 820 pages
펴낸곳(주)수퍼유저

리눅스 보안에 관련된 내용을 종합적으로 쓴 책. 저자의 명성 그대로 보안관련의 모든 내용이 그대로 담겨져 있다.