반응형
안녕하세요.
새해 복많이 받으시길 바라며 오늘도 강좌를 이어가겠습니다.
이번 강좌는 게시판의 글보기 부분입니다.
먼저 글보기 전 비밀번호를 체크 하는 부분입니다.
입력한 비밀번호를 체크하는 파일입니다.
10번에서 비밀번호가 맞으면 세션에 저장을 하는데 세션의 이름을 b_pass_글번호 로 저장을 합니다.
글보기 부분 파일입니다.
10번을 보면 비밀번호 체크후 저장된 세션을 체크해서 비밀버호 체크가 이루어지지 않았으면 경고 후 되돌립니다.
13번 부분은 댓글을 사용하는지 여부를 체크 한 후 댓글 목록과 댓글쓰기를 출력합니다.
댓글 저장부분입니다.
다운로드 파일입니다.
글보기 파일에서 업로드한 파일이 있으면 다운로드 파일로 링크가 됩니다.
파일을 다운로드 시킬때는 파일이 html 이 아니라 다운로드라는 부분을 보내게 됩니다.
이것을 헤더라고 하는데요 header() 함수를 이용해 파일의 헤더를 만듭니다.
헤더는 브라우저 버전마다 다 다른데요. 일반적으로 Content-type, 파일길이, 파일명, 출력방식(다운로드니 binary 등의 것들입니다.), 캐쉬여부, 등을 출력해 줍니다.
또 여기 사용된 flush() 함수는 php에서 만든 내용을 끝까지 기다리지 말고 바로 출력하란느 내용입니다.
파일의 크기가 클때는 다 출력이 되지않기 때문에 그때그때 파일을 읽어서 내보내는 즉시 출력해 보리는 것입니다.
간단하게 설명을 드렸습니다.
이쯤되면 각 함수들에 대해서는 php 매뉴얼을 통해서도 알아볼수 있어야 합니다.
질문은 댓글을 이용해 남겨주시면 되구요.
다음 시간에는 답글달기와 글삭제를 배우도록 하겠습니다.
새해 복많이 받으시길 바라며 오늘도 강좌를 이어가겠습니다.
이번 강좌는 게시판의 글보기 부분입니다.
먼저 글보기 전 비밀번호를 체크 하는 부분입니다.
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 게시판 코드 검사
$bc_code = $_GET[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_read_level]){
alert("권한이 없습니다.", "./index.php");
}
// 6. 게시판 상단 이미지 출력
$dir = "./data/board_config";
$head_file = $dir."/".$board_config[bc_idx]."_head";
if($board_config[bc_head_file] && file_exists($head_file)){
?>
<br/>
<img src="<?=$head_file?>">
<?
}
// 7. 게시판 상단 내용 출력
if($board_config[bc_head]){
?>
<br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="middle" style="font-zise:15px;"><?=$board_config[bc_head]?></td>
</tr>
</table>
<?
}
// 8. 페이징 변수 설정
if($_GET[page] && $_GET[page] > 0){
// 현재 페이지 값이 존재하고 0 보다 크면 그대로 사용
$page = $_GET[page];
}else{
// 그 외의 경우는 현재 페이지를 1로 설정
$page = 1;
}
// 9. 글정보 가져오기
$b_idx = $_GET[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
// 10. 해당 글이 있는지체크
if(!$data[b_idx]){
alert("존재 하지 않는 글입니다.");
}
// 11.비밀번호 입력 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">글보기 비밀번호 확인</td>
</tr>
</table>
<br/>
<form name="passForm" method="post" action="./board_password_chk.php" style="margin:0px;">
<input type="hidden" name="bc_code" value="<?=$bc_code?>">
<input type="hidden" name="b_idx" value="<?=$b_idx?>">
<input type="hidden" name="page" value="<?=$_GET[page]?>">
<table style="width:1000px;height:50px;border:0px;">
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">비밀번호< /td>
<td align="left" valign="middle" style="width:800px;height:50px;"><input type="password" name="b_pass" style="width:380px;"></td>
</tr>
<!-- 12. 글보기 버튼 클릭시 입력필드 검사 함수 pass_chk 실행 -->
<tr>
<td align="center" valign="middle" colspan="2"><input type="button" value=" 글보기 " onClick="pass_chk();"> <input type="button" value=" 취소 " onClick="history.back();"></td>
</tr>
</table>
</form>
<script>
// 13.입력필드 검사함수
function pass_chk()
{
// 14.form 을 f 에 지정
var f = document.passForm;
if(f.b_pass.value == ""){
alert("비밀번호를 입력해 주세요.");
return false;
}
// 15.검사가 성공이면 form 을 submit 한다
f.submit();
}
</script>
<?
// 16. 게시판 하단 내용 출력
if($board_config[bc_tail]){
?>
<br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="middle" style="font-zise:15px;"><?=$board_config[bc_tail]?></td>
</tr>
</table>
<?
}
// 17. 게시판 하단 이미지 출력
$dir = "./data/board_config";
$tail_file = $dir."/".$board_config[bc_idx]."_tail";
if($board_config[bc_tail_file] && file_exists($tail_file)){
?>
<br/>
<img src="<?=$tail_file?>">
<?
}
?>
[board_password.php 소스]// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 게시판 코드 검사
$bc_code = $_GET[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_read_level]){
alert("권한이 없습니다.", "./index.php");
}
// 6. 게시판 상단 이미지 출력
$dir = "./data/board_config";
$head_file = $dir."/".$board_config[bc_idx]."_head";
if($board_config[bc_head_file] && file_exists($head_file)){
?>
<br/>
<img src="<?=$head_file?>">
<?
}
// 7. 게시판 상단 내용 출력
if($board_config[bc_head]){
?>
<br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="middle" style="font-zise:15px;"><?=$board_config[bc_head]?></td>
</tr>
</table>
<?
}
// 8. 페이징 변수 설정
if($_GET[page] && $_GET[page] > 0){
// 현재 페이지 값이 존재하고 0 보다 크면 그대로 사용
$page = $_GET[page];
}else{
// 그 외의 경우는 현재 페이지를 1로 설정
$page = 1;
}
// 9. 글정보 가져오기
$b_idx = $_GET[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
// 10. 해당 글이 있는지체크
if(!$data[b_idx]){
alert("존재 하지 않는 글입니다.");
}
// 11.비밀번호 입력 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">글보기 비밀번호 확인</td>
</tr>
</table>
<br/>
<form name="passForm" method="post" action="./board_password_chk.php" style="margin:0px;">
<input type="hidden" name="bc_code" value="<?=$bc_code?>">
<input type="hidden" name="b_idx" value="<?=$b_idx?>">
<input type="hidden" name="page" value="<?=$_GET[page]?>">
<table style="width:1000px;height:50px;border:0px;">
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">비밀번호< /td>
<td align="left" valign="middle" style="width:800px;height:50px;"><input type="password" name="b_pass" style="width:380px;"></td>
</tr>
<!-- 12. 글보기 버튼 클릭시 입력필드 검사 함수 pass_chk 실행 -->
<tr>
<td align="center" valign="middle" colspan="2"><input type="button" value=" 글보기 " onClick="pass_chk();"> <input type="button" value=" 취소 " onClick="history.back();"></td>
</tr>
</table>
</form>
<script>
// 13.입력필드 검사함수
function pass_chk()
{
// 14.form 을 f 에 지정
var f = document.passForm;
if(f.b_pass.value == ""){
alert("비밀번호를 입력해 주세요.");
return false;
}
// 15.검사가 성공이면 form 을 submit 한다
f.submit();
}
</script>
<?
// 16. 게시판 하단 내용 출력
if($board_config[bc_tail]){
?>
<br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="middle" style="font-zise:15px;"><?=$board_config[bc_tail]?></td>
</tr>
</table>
<?
}
// 17. 게시판 하단 이미지 출력
$dir = "./data/board_config";
$tail_file = $dir."/".$board_config[bc_idx]."_tail";
if($board_config[bc_tail_file] && file_exists($tail_file)){
?>
<br/>
<img src="<?=$tail_file?>">
<?
}
?>
입력한 비밀번호를 체크하는 파일입니다.
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 게시판 코드 검사
$bc_code = $_POST[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_read_level]){
alert("권한이 없습니다.", "./index.php");
}
// 6. 페이징 변수 설정
if($_POST[page] && $_POST[page] > 0){
// 현재 페이지 값이 존재하고 0 보다 크면 그대로 사용
$page = $_POST[page];
}else{
// 그 외의 경우는 현재 페이지를 1로 설정
$page = 1;
}
// 7. 글정보 가져오기
$b_idx = $_POST[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
// 8. 해당 글이 있는지체크
if(!$data[b_idx]){
alert("존재 하지 않는 글입니다.");
}
// 9. 비밀번호가 맞는지 체크
if($data[b_pass] == $_POST[b_pass]){
// 10. 맞으면 해당글의 비밀번호 체크 여부를 세션에 저장하고 이동
$_SESSION["b_pass_".$b_idx] = true;
goto_url("./board_view.php?bc_code=".$bc_code."&b_idx=".$b_idx."&page=".$_POST[page]);
}else{
alert("비밀번호가 다릅니다.");
}
?>
[board_password_chk.php 소스]// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 게시판 코드 검사
$bc_code = $_POST[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_read_level]){
alert("권한이 없습니다.", "./index.php");
}
// 6. 페이징 변수 설정
if($_POST[page] && $_POST[page] > 0){
// 현재 페이지 값이 존재하고 0 보다 크면 그대로 사용
$page = $_POST[page];
}else{
// 그 외의 경우는 현재 페이지를 1로 설정
$page = 1;
}
// 7. 글정보 가져오기
$b_idx = $_POST[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
// 8. 해당 글이 있는지체크
if(!$data[b_idx]){
alert("존재 하지 않는 글입니다.");
}
// 9. 비밀번호가 맞는지 체크
if($data[b_pass] == $_POST[b_pass]){
// 10. 맞으면 해당글의 비밀번호 체크 여부를 세션에 저장하고 이동
$_SESSION["b_pass_".$b_idx] = true;
goto_url("./board_view.php?bc_code=".$bc_code."&b_idx=".$b_idx."&page=".$_POST[page]);
}else{
alert("비밀번호가 다릅니다.");
}
?>
10번에서 비밀번호가 맞으면 세션에 저장을 하는데 세션의 이름을 b_pass_글번호 로 저장을 합니다.
글보기 부분 파일입니다.
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 게시판 코드 검사
$bc_code = $_GET[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_read_level]){
alert("권한이 없습니다.", "./index.php");
}
// 6. 게시판 상단 이미지 출력
$dir = "./data/board_config";
$head_file = $dir."/".$board_config[bc_idx]."_head";
if($board_config[bc_head_file] && file_exists($head_file)){
?>
<br/>
<img src="<?=$head_file?>">
<?
}
// 7. 게시판 상단 내용 출력
if($board_config[bc_head]){
?>
<br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="middle" style="font-zise:15px;"><?=$board_config[bc_head]?></td>
</tr>
</table>
<?
}
// 8. 페이징 변수 설정
if($_GET[page] && $_GET[page] > 0){
// 현재 페이지 값이 존재하고 0 보다 크면 그대로 사용
$page = $_GET[page];
}else{
// 그 외의 경우는 현재 페이지를 1로 설정
$page = 1;
}
// 9. 글정보 가져오기
$b_idx = $_GET[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
// 10. 해당 글이 있는지 와 비밀글이면 비밀번호 입력여부 체크체크
if(!$data[b_idx]){
alert("존재 하지 않는 글입니다.");
}
if($data[b_is_secret] && !$_SESSION["b_pass_".$b_idx] && $_SESSION[user_id] != $data[m_id] && $u_level != 9){
alert("비밀번호를 입력하여 주세요.");
}
// 11.글내용 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">글보기</td>
</tr>
</table>
<table style="width:1000px;height:50px;border:0px;">
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">글제목</td& gt;
<td align="left" valign="middle" style="width:800px;height:50px;"><?=$data[b_title]?></td>
</tr>
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">작성자명< /td>
<td align="left" valign="middle" style="width:800px;height:50px;"><?=$data[m_name]?></td>
</tr>
<?
// 12. 파일 업로드를 사용하면 파일 입력
if($board_config[bc_use_file] && $data[b_filename]){
?>
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">첨부파일< /td>
<td align="left" valign="middle" style="width:800px;height:50px;"><a href="./download.php?bc_code=<?=$bc_code?>&b_idx=<?=$b_idx?>"><?=$data[b_filename]?></a></td>
</tr>
<?
}
?>
<tr>
<td align="center" valign="middle" style="width:200px;height:200px;background-color:#CCCCCC;">글내용< /td>
<td align="left" valign="middle" style="width:800px;height:200px;"><?=nl2Br($data[b_contents])?></td>
</tr>
</table>
<br/>
<table style="width:1000px;height:50px;">
<tr>
<td align="center" valign="middle"><input type="button" value=" 목록보기 " onClick="location.href='./board_list.php?bc_code=<?=$bc_code?>&page=<?=$page?>';"></td>
<?// 13. 권한 체크 후 답글쓰기 보여주기?>
<?if($board_config[bc_use_reply ] && $u_level >= $board_config[bc_reply_level]){?>
<td align="center" valign="middle"><input type="button" value=" 답글쓰기 " onClick="location.href='./board_reply.php?bc_code=<?=$bc_code?>&b_idx=<?=$b_idx?>&page=<?=$page?>';"></td>
<?}?>
<?// 13. 권한 체크 후 글수정 보여주기?>
<?if($_SESSION[user_id] == $data[m_id] || $u_level == 9){?>
<td align="center" valign="middle"><input type="button" value=" 글수정 " onClick="location.href='./board_modify.php?bc_code=<?=$bc_code?>&b_idx=<?=$b_idx?>&page=<?=$page?>';"></td>
<?}?>
<?// 13. 권한 체크 후 글삭제 버튼 보여주기?>
<?if($_SESSION[user_id] == $data[m_id] || $u_level == 9){?>
<td align="center" valign="middle"><input type="button" value=" 글삭제 " onClick="location.href='./board_delete.php?bc_code=<?=$bc_code?>&b_idx=<?=$b_idx?>&page=<?=$page?>';"></td>
<?}?>
</tr>
</table>
<?
// 13. 댓글 부분 권한 체크 및 출력 결정
if($board_config[bc_use_comment]){
// 14. 댓글 권한 체크 후 댓글쓰기 부분 출력
if($u_level >= $board_config[bc_comment_level]){
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">댓글작성</td>
</tr>
</table>
<br/>
<form name="bWriteForm" method="post" enctype="multipart/form-data" action="./board_comment_save.php" style="margin:0px;">
<input type="hidden" name="bc_code" value="<?=$bc_code?>">
<input type="hidden" name="b_idx" value="<?=$b_idx?>">
<input type="hidden" name="page" value="<?=$page?>">
<table cellspacing="1" style="width:1000px;height:50px;border:0px;background-color:#999999;">
<tr>
<td align="center" valign="middle" width="100" style="height:30px;background-color:#CCCCCC;">이름</td>
<td align="center" valign="middle" width="800" style="height:30px;background-color:#CCCCCC;">댓글내용</td>
<td align="center" valign="middle" width="100" style="height:30px;background-color:#CCCCCC;"> </td>
</tr>
<tr>
<td align="center" valign="middle" width="100" style="height:30px;background-color:#FFFFFF;">
<input typr="text" name="m_name" <?if($_SESSION[user_idx]){ echo " value='".$_SESSION[user_name]."' readOnly";}?> style="width:90px;">
</td>
<td align="center" valign="middle" width="800" style="height:30px;background-color:#FFFFFF;"><input type="text" name="co_contents" style="width:780px;"></td>
<td align="center" valign="middle" width="100" style="height:30px;background-color:#FFFFFF;"><input type="button" value=" 댓글쓰기 " onClick="write_save();"></td>
</tr>
</table>
<script>
function write_save()
{
var f = document.bWriteForm;
if(f.m_name.value == ""){
alert("이름을 입력해 주세요.");
return false;
}
if(f.co_contents.value == ""){
alert("댓글내용을 입력해 주세요.");
return false;
}
f.submit();
}
</script>
</form>
<?
}
// 15. 댓글 목록 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">댓글목록</td>
</tr>
</table>
<br/>
<table cellspacing="1" style="width:1000px;height:50px;border:0px;background-color:#999999;">
<tr>
<td align="center" valign="middle" width="5%" style="height:30px;background-color:#CCCCCC;">번호</td>
<td align="center" valign="middle" width="60%" style="height:30px;background-color:#CCCCCC;">댓글내용</td>
<td align="center" valign="middle" width="15%" style="height:30px;background-color:#CCCCCC;">글쓴이</td>
<td align="center" valign="middle" width="20%" style="height:30px;background-color:#CCCCCC;">작성일</td>
</tr>
<?
// 16. 전체 댓글 갯수 알아내기
$sql = "select count(*) as cnt from ".$_cfg['comment_table']." where b_idx = '".$b_idx."' ";
$total_count = sql_total($sql);
// 17. 댓글목록 구하기
$query = "select * from ".$_cfg['comment_table']." where b_idx = '".$b_idx."' order by co_idx desc ";
$result = mysql_query($query, $connect);
// 18.데이터 갯수 체크를 위한 변수 설정
$i = 0;
// 19.데이터가 있을 동안 반복해서 값을 한 줄씩 읽기
while($data_commnent = mysql_fetch_array($result)){
?>
<tr>
<td align="center" valign="middle" style="height:30px;background-color:#FFFFFF;"><?=($total_count - $i )?></td>
<td align="left" valign="middle" style="height:30px;background-color:#FFFFFF;"> <?=$data_commnent[co_contents]?></td>
<td align="center" valign="middle" style="height:30px;background-color:#FFFFFF;"><?=$data_commnent[m_name]?></td>
<td align="center" valign="middle" style="height:30px;background-color:#FFFFFF;"><?=substr($data_commnent[co_regdate],0,10)?></td>
</tr>
<?
// 21.데이터 갯수 체크를 위한 변수를 1 증가시킴
$i++;
}
// 22. 댓글데이터가 하나도 없으면
if($i == 0){
?>
<tr>
<td align="center" valign="middle" colspan="4" style="height:50px;background-color:#FFFFFF;">댓글이 하나도 없습니다.</td>
</tr>
<?
}
}
// 댓글 목록 권한 체크 및 출력 결정 끝
// 20. 게시판 하단 내용 출력
if($board_config[bc_tail]){
?>
<br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="middle" style="font-zise:15px;"><?=$board_config[bc_tail]?></td>
</tr>
</table>
<?
}
// 21. 게시판 하단 이미지 출력
$dir = "./data/board_config";
$tail_file = $dir."/".$board_config[bc_idx]."_tail";
if($board_config[bc_tail_file] && file_exists($tail_file)){
?>
<br/>
<img src="<?=$tail_file?>">
<?
}
?>
[board_view.php 소스]// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 게시판 코드 검사
$bc_code = $_GET[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_read_level]){
alert("권한이 없습니다.", "./index.php");
}
// 6. 게시판 상단 이미지 출력
$dir = "./data/board_config";
$head_file = $dir."/".$board_config[bc_idx]."_head";
if($board_config[bc_head_file] && file_exists($head_file)){
?>
<br/>
<img src="<?=$head_file?>">
<?
}
// 7. 게시판 상단 내용 출력
if($board_config[bc_head]){
?>
<br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="middle" style="font-zise:15px;"><?=$board_config[bc_head]?></td>
</tr>
</table>
<?
}
// 8. 페이징 변수 설정
if($_GET[page] && $_GET[page] > 0){
// 현재 페이지 값이 존재하고 0 보다 크면 그대로 사용
$page = $_GET[page];
}else{
// 그 외의 경우는 현재 페이지를 1로 설정
$page = 1;
}
// 9. 글정보 가져오기
$b_idx = $_GET[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
// 10. 해당 글이 있는지 와 비밀글이면 비밀번호 입력여부 체크체크
if(!$data[b_idx]){
alert("존재 하지 않는 글입니다.");
}
if($data[b_is_secret] && !$_SESSION["b_pass_".$b_idx] && $_SESSION[user_id] != $data[m_id] && $u_level != 9){
alert("비밀번호를 입력하여 주세요.");
}
// 11.글내용 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">글보기</td>
</tr>
</table>
<table style="width:1000px;height:50px;border:0px;">
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">글제목</td& gt;
<td align="left" valign="middle" style="width:800px;height:50px;"><?=$data[b_title]?></td>
</tr>
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">작성자명< /td>
<td align="left" valign="middle" style="width:800px;height:50px;"><?=$data[m_name]?></td>
</tr>
<?
// 12. 파일 업로드를 사용하면 파일 입력
if($board_config[bc_use_file] && $data[b_filename]){
?>
<tr>
<td align="center" valign="middle" style="width:200px;height:50px;background-color:#CCCCCC;">첨부파일< /td>
<td align="left" valign="middle" style="width:800px;height:50px;"><a href="./download.php?bc_code=<?=$bc_code?>&b_idx=<?=$b_idx?>"><?=$data[b_filename]?></a></td>
</tr>
<?
}
?>
<tr>
<td align="center" valign="middle" style="width:200px;height:200px;background-color:#CCCCCC;">글내용< /td>
<td align="left" valign="middle" style="width:800px;height:200px;"><?=nl2Br($data[b_contents])?></td>
</tr>
</table>
<br/>
<table style="width:1000px;height:50px;">
<tr>
<td align="center" valign="middle"><input type="button" value=" 목록보기 " onClick="location.href='./board_list.php?bc_code=<?=$bc_code?>&page=<?=$page?>';"></td>
<?// 13. 권한 체크 후 답글쓰기 보여주기?>
<?if($board_config[bc_use_reply ] && $u_level >= $board_config[bc_reply_level]){?>
<td align="center" valign="middle"><input type="button" value=" 답글쓰기 " onClick="location.href='./board_reply.php?bc_code=<?=$bc_code?>&b_idx=<?=$b_idx?>&page=<?=$page?>';"></td>
<?}?>
<?// 13. 권한 체크 후 글수정 보여주기?>
<?if($_SESSION[user_id] == $data[m_id] || $u_level == 9){?>
<td align="center" valign="middle"><input type="button" value=" 글수정 " onClick="location.href='./board_modify.php?bc_code=<?=$bc_code?>&b_idx=<?=$b_idx?>&page=<?=$page?>';"></td>
<?}?>
<?// 13. 권한 체크 후 글삭제 버튼 보여주기?>
<?if($_SESSION[user_id] == $data[m_id] || $u_level == 9){?>
<td align="center" valign="middle"><input type="button" value=" 글삭제 " onClick="location.href='./board_delete.php?bc_code=<?=$bc_code?>&b_idx=<?=$b_idx?>&page=<?=$page?>';"></td>
<?}?>
</tr>
</table>
<?
// 13. 댓글 부분 권한 체크 및 출력 결정
if($board_config[bc_use_comment]){
// 14. 댓글 권한 체크 후 댓글쓰기 부분 출력
if($u_level >= $board_config[bc_comment_level]){
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">댓글작성</td>
</tr>
</table>
<br/>
<form name="bWriteForm" method="post" enctype="multipart/form-data" action="./board_comment_save.php" style="margin:0px;">
<input type="hidden" name="bc_code" value="<?=$bc_code?>">
<input type="hidden" name="b_idx" value="<?=$b_idx?>">
<input type="hidden" name="page" value="<?=$page?>">
<table cellspacing="1" style="width:1000px;height:50px;border:0px;background-color:#999999;">
<tr>
<td align="center" valign="middle" width="100" style="height:30px;background-color:#CCCCCC;">이름</td>
<td align="center" valign="middle" width="800" style="height:30px;background-color:#CCCCCC;">댓글내용</td>
<td align="center" valign="middle" width="100" style="height:30px;background-color:#CCCCCC;"> </td>
</tr>
<tr>
<td align="center" valign="middle" width="100" style="height:30px;background-color:#FFFFFF;">
<input typr="text" name="m_name" <?if($_SESSION[user_idx]){ echo " value='".$_SESSION[user_name]."' readOnly";}?> style="width:90px;">
</td>
<td align="center" valign="middle" width="800" style="height:30px;background-color:#FFFFFF;"><input type="text" name="co_contents" style="width:780px;"></td>
<td align="center" valign="middle" width="100" style="height:30px;background-color:#FFFFFF;"><input type="button" value=" 댓글쓰기 " onClick="write_save();"></td>
</tr>
</table>
<script>
function write_save()
{
var f = document.bWriteForm;
if(f.m_name.value == ""){
alert("이름을 입력해 주세요.");
return false;
}
if(f.co_contents.value == ""){
alert("댓글내용을 입력해 주세요.");
return false;
}
f.submit();
}
</script>
</form>
<?
}
// 15. 댓글 목록 출력
?>
<br/>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
<tr>
<td align="center" valign="middle" style="font-zise:15px;font-weight:bold;">댓글목록</td>
</tr>
</table>
<br/>
<table cellspacing="1" style="width:1000px;height:50px;border:0px;background-color:#999999;">
<tr>
<td align="center" valign="middle" width="5%" style="height:30px;background-color:#CCCCCC;">번호</td>
<td align="center" valign="middle" width="60%" style="height:30px;background-color:#CCCCCC;">댓글내용</td>
<td align="center" valign="middle" width="15%" style="height:30px;background-color:#CCCCCC;">글쓴이</td>
<td align="center" valign="middle" width="20%" style="height:30px;background-color:#CCCCCC;">작성일</td>
</tr>
<?
// 16. 전체 댓글 갯수 알아내기
$sql = "select count(*) as cnt from ".$_cfg['comment_table']." where b_idx = '".$b_idx."' ";
$total_count = sql_total($sql);
// 17. 댓글목록 구하기
$query = "select * from ".$_cfg['comment_table']." where b_idx = '".$b_idx."' order by co_idx desc ";
$result = mysql_query($query, $connect);
// 18.데이터 갯수 체크를 위한 변수 설정
$i = 0;
// 19.데이터가 있을 동안 반복해서 값을 한 줄씩 읽기
while($data_commnent = mysql_fetch_array($result)){
?>
<tr>
<td align="center" valign="middle" style="height:30px;background-color:#FFFFFF;"><?=($total_count - $i )?></td>
<td align="left" valign="middle" style="height:30px;background-color:#FFFFFF;"> <?=$data_commnent[co_contents]?></td>
<td align="center" valign="middle" style="height:30px;background-color:#FFFFFF;"><?=$data_commnent[m_name]?></td>
<td align="center" valign="middle" style="height:30px;background-color:#FFFFFF;"><?=substr($data_commnent[co_regdate],0,10)?></td>
</tr>
<?
// 21.데이터 갯수 체크를 위한 변수를 1 증가시킴
$i++;
}
// 22. 댓글데이터가 하나도 없으면
if($i == 0){
?>
<tr>
<td align="center" valign="middle" colspan="4" style="height:50px;background-color:#FFFFFF;">댓글이 하나도 없습니다.</td>
</tr>
<?
}
}
// 댓글 목록 권한 체크 및 출력 결정 끝
// 20. 게시판 하단 내용 출력
if($board_config[bc_tail]){
?>
<br/>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="middle" style="font-zise:15px;"><?=$board_config[bc_tail]?></td>
</tr>
</table>
<?
}
// 21. 게시판 하단 이미지 출력
$dir = "./data/board_config";
$tail_file = $dir."/".$board_config[bc_idx]."_tail";
if($board_config[bc_tail_file] && file_exists($tail_file)){
?>
<br/>
<img src="<?=$tail_file?>">
<?
}
?>
10번을 보면 비밀번호 체크후 저장된 세션을 체크해서 비밀버호 체크가 이루어지지 않았으면 경고 후 되돌립니다.
13번 부분은 댓글을 사용하는지 여부를 체크 한 후 댓글 목록과 댓글쓰기를 출력합니다.
댓글 저장부분입니다.
<?
// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 게시판 코드 검사
$bc_code = $_POST[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_comment_level]){
alert("권한이 없습니다.");
}
// 6. 해당 글이 있는지체크
$b_idx = $_POST[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
if(!$data[b_idx]){
alert("존재 하지 않는 글입니다.");
}
// 7. 넘어온 변수 검사
if(trim($_POST[m_name]) == ""){
alert("이름을 입력해 주세요.");
}
if(trim($_POST[co_contents]) == ""){
alert("댓글내용을 입력해 주세요.");
}
// 8. 글저장
$sql = "insert into ".$_cfg['comment_table']." set b_idx = '".$b_idx."', m_id = '".$_SESSION[user_id]."', m_name = '".addslashes(htmlspecialchars($_POST[m_name]))."', co_contents = '".addslashes(htmlspecialchars($_POST[co_contents]))."', co_regdate = now()";
sql_query($sql);
// 9. 글보기 페이지로 보내기
alert("댓글이 저장 되었습니다.", "./board_view.php?bc_code=".$bc_code."&b_idx=".$b_idx."&page=".$_POST[page]);
?>
[board_comment_save.php 소스]// 1. 공통 인클루드 파일
include ("./head.php");
// 2. 게시판 코드 검사
$bc_code = $_POST[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_comment_level]){
alert("권한이 없습니다.");
}
// 6. 해당 글이 있는지체크
$b_idx = $_POST[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
if(!$data[b_idx]){
alert("존재 하지 않는 글입니다.");
}
// 7. 넘어온 변수 검사
if(trim($_POST[m_name]) == ""){
alert("이름을 입력해 주세요.");
}
if(trim($_POST[co_contents]) == ""){
alert("댓글내용을 입력해 주세요.");
}
// 8. 글저장
$sql = "insert into ".$_cfg['comment_table']." set b_idx = '".$b_idx."', m_id = '".$_SESSION[user_id]."', m_name = '".addslashes(htmlspecialchars($_POST[m_name]))."', co_contents = '".addslashes(htmlspecialchars($_POST[co_contents]))."', co_regdate = now()";
sql_query($sql);
// 9. 글보기 페이지로 보내기
alert("댓글이 저장 되었습니다.", "./board_view.php?bc_code=".$bc_code."&b_idx=".$b_idx."&page=".$_POST[page]);
?>
다운로드 파일입니다.
<?
// 1. 공통 인클루드
include "./inc/config.php";
// 2. 출력 헤더 만들기
$alert_header = "
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=euc-kr'>
<title></title>
</head>
";
// 3. 게시판 코드 검사
$bc_code = $_GET[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
echo $alert_header;
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
echo $alert_header;
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_read_level]){
echo $alert_header;
alert("권한이 없습니다.", "./index.php");
}
// 6. 글정보 가져오기
$b_idx = $_GET[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
// 7. 해당 글이 있는지 와 비밀글이면 비밀번호 입력여부 체크체크
if(!$data[b_idx]){
echo $alert_header;
alert("존재 하지 않는 글입니다.");
}
if($data[b_is_secret] && !$_SESSION["b_pass_".$b_idx] && $_SESSION[user_id] != $data[m_id] && $u_level != 9){
echo $alert_header;
alert("비밀번호를 입력하여 주세요.");
}
// 8. 파일이 등록되어 있는지 검사
if(!$data[b_filename]){
echo $alert_header;
alert("파일이 존재 하지 않습니다.");
}
// 9. 파일 이름과 실제 파일
$dir = "./data";
$file_path = $dir."/".$b_idx;
$original = $data[b_filename];
// 10.파일이 있으면
if (file_exists($file_path)) {
// 11. 다운로드 헤더 만들기
if(eregi("(MSIE 5.0|MSIE 5.1|MSIE 5.5|MSIE 6.0)", $HTTP_USER_AGENT))
{
if(strstr($HTTP_USER_AGENT, "MSIE 5.5"))
{
header("Content-Type: doesn/matter");
header("Content-disposition: filename=$original");
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 5.0"))
{
Header("Content-type: file/unknown");
header("Content-Disposition: attachment; filename=$original");
Header("Content-Description: PHP3 Generated Data");
header("Pragma: no-cache");
header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 5.1"))
{
Header("Content-type: file/unknown");
header("Content-Disposition: attachment; filename=$original");
Header("Content-Description: PHP3 Generated Data");
header("Pragma: no-cache");
header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 6.0"))
{
Header("Content-type: application/x-msdownload");
Header("Content-Length: ".(string)(filesize("$file_path")));
Header("Content-Disposition: attachment; filename=$original");
Header("Content-Transfer-Encoding: binary");
Header("Pragma: no-cache");
Header("Expires: 0");
}
} else {
Header("Content-type: doesn/matter");
Header("Content-Length: ".(string)(filesize("$file_path")));
Header("Content-Disposition: attachment; filename=$original");
Header("Content-Description: PHP3 Generated Data");
Header("Pragma: no-cache");
Header("Expires: 0");
}
flush();
// 12. 파일을 읽어 내보내기
if (is_file($file_path)) {
$fp = fopen($file_path, "rb");
while(!feof($fp)) {
echo fread($fp, 100*1024);
flush();
}
fclose ($fp);
flush();
}
} else {
echo $alert_header;
alert("파일이 존재 하지 않습니다.");
}
?>
[download.php 소스]// 1. 공통 인클루드
include "./inc/config.php";
// 2. 출력 헤더 만들기
$alert_header = "
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=euc-kr'>
<title></title>
</head>
";
// 3. 게시판 코드 검사
$bc_code = $_GET[bc_code];
if($bc_code){
// 3. 게시판 코드가 있으면 게시판 설정 불러오기
$b_config_sql = "select * from ".$_cfg['config_table']." where bc_code = '".$bc_code."'";
$board_config = sql_fetch($b_config_sql);
}else{
echo $alert_header;
alert("게시판 코드가 없습니다.");
}
// 4. 존재하는 게시판인지 확인
if(!$board_config[bc_idx]){
echo $alert_header;
alert("존재 하지 않는 게시판입니다.");
}
// 5. 게시판 권한 체크
if($_SESSION[user_level]){
$u_level = $_SESSION[user_level];
}else{
$u_level = 0;
}
if($u_level < $board_config[bc_read_level]){
echo $alert_header;
alert("권한이 없습니다.", "./index.php");
}
// 6. 글정보 가져오기
$b_idx = $_GET[b_idx];
$sql = "select * from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_idx = '".$b_idx."'";
$data = sql_fetch($sql);
// 7. 해당 글이 있는지 와 비밀글이면 비밀번호 입력여부 체크체크
if(!$data[b_idx]){
echo $alert_header;
alert("존재 하지 않는 글입니다.");
}
if($data[b_is_secret] && !$_SESSION["b_pass_".$b_idx] && $_SESSION[user_id] != $data[m_id] && $u_level != 9){
echo $alert_header;
alert("비밀번호를 입력하여 주세요.");
}
// 8. 파일이 등록되어 있는지 검사
if(!$data[b_filename]){
echo $alert_header;
alert("파일이 존재 하지 않습니다.");
}
// 9. 파일 이름과 실제 파일
$dir = "./data";
$file_path = $dir."/".$b_idx;
$original = $data[b_filename];
// 10.파일이 있으면
if (file_exists($file_path)) {
// 11. 다운로드 헤더 만들기
if(eregi("(MSIE 5.0|MSIE 5.1|MSIE 5.5|MSIE 6.0)", $HTTP_USER_AGENT))
{
if(strstr($HTTP_USER_AGENT, "MSIE 5.5"))
{
header("Content-Type: doesn/matter");
header("Content-disposition: filename=$original");
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 5.0"))
{
Header("Content-type: file/unknown");
header("Content-Disposition: attachment; filename=$original");
Header("Content-Description: PHP3 Generated Data");
header("Pragma: no-cache");
header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 5.1"))
{
Header("Content-type: file/unknown");
header("Content-Disposition: attachment; filename=$original");
Header("Content-Description: PHP3 Generated Data");
header("Pragma: no-cache");
header("Expires: 0");
}
if(strstr($HTTP_USER_AGENT, "MSIE 6.0"))
{
Header("Content-type: application/x-msdownload");
Header("Content-Length: ".(string)(filesize("$file_path")));
Header("Content-Disposition: attachment; filename=$original");
Header("Content-Transfer-Encoding: binary");
Header("Pragma: no-cache");
Header("Expires: 0");
}
} else {
Header("Content-type: doesn/matter");
Header("Content-Length: ".(string)(filesize("$file_path")));
Header("Content-Disposition: attachment; filename=$original");
Header("Content-Description: PHP3 Generated Data");
Header("Pragma: no-cache");
Header("Expires: 0");
}
flush();
// 12. 파일을 읽어 내보내기
if (is_file($file_path)) {
$fp = fopen($file_path, "rb");
while(!feof($fp)) {
echo fread($fp, 100*1024);
flush();
}
fclose ($fp);
flush();
}
} else {
echo $alert_header;
alert("파일이 존재 하지 않습니다.");
}
?>
글보기 파일에서 업로드한 파일이 있으면 다운로드 파일로 링크가 됩니다.
파일을 다운로드 시킬때는 파일이 html 이 아니라 다운로드라는 부분을 보내게 됩니다.
이것을 헤더라고 하는데요 header() 함수를 이용해 파일의 헤더를 만듭니다.
헤더는 브라우저 버전마다 다 다른데요. 일반적으로 Content-type, 파일길이, 파일명, 출력방식(다운로드니 binary 등의 것들입니다.), 캐쉬여부, 등을 출력해 줍니다.
또 여기 사용된 flush() 함수는 php에서 만든 내용을 끝까지 기다리지 말고 바로 출력하란느 내용입니다.
파일의 크기가 클때는 다 출력이 되지않기 때문에 그때그때 파일을 읽어서 내보내는 즉시 출력해 보리는 것입니다.
간단하게 설명을 드렸습니다.
이쯤되면 각 함수들에 대해서는 php 매뉴얼을 통해서도 알아볼수 있어야 합니다.
질문은 댓글을 이용해 남겨주시면 되구요.
다음 시간에는 답글달기와 글삭제를 배우도록 하겠습니다.
반응형
'Programming' 카테고리의 다른 글
[PHP Tip] PHP 함수를 Javascript 에서 사용하기 (0) | 2010.02.12 |
---|---|
[PHP 강좌] 47. 설치형 게시판 10 - 답글달기, 글수정, 글삭제 (0) | 2010.02.11 |
[PHP 강좌] 45. 설치형 게시판 만들기 8 - 게시판 목록보기, 글쓰기 (0) | 2010.02.11 |
[PHP 강좌] 44. 설치형 게시판 만들기 7 - 사용자 로그인, 로그아웃, 정보수정 (0) | 2010.02.11 |