$sql2 = "select * from
".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_num =
'".$data[b_num]."' and b_reply like '".$data[b_reply]."%' order by
b_reply desc limit 1"; $result2 = sql_query($sql2); $data2 =
mysql_fetch_array($result2);
$sql2 = "select * from
".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_num =
'".$data[b_num]."' and b_reply like '".$data[b_reply]."%' order by
b_reply desc limit 1"; $result2 = sql_query($sql2); $data2 =
mysql_fetch_array($result2);
// 3. 글 데이터 불러오기 $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);
// 4. 글이 없으면 메세지 출력후 되돌리기 if(!$data[b_idx]){
alert("존재하지 않는 글입니다."); }
// 5.
본인의 글이 아니면 메세지 출력후 되돌리기 if($data[m_id] != $_SESSION[user_id]
&& $u_level != 9){ alert("본인의 글이 아닙니다."); }
// 6. 게시판 상단 이미지 출력 $dir =
"./data/board_config"; $head_file =
$dir."/".$board_config[bc_idx]."_head";
// 3. 글 데이터 불러오기 $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);
// 4. 글이 없으면 메세지 출력후 되돌리기 if(!$data[b_idx]){
alert("존재하지 않는 글입니다."); }
// 5.
본인의 글이 아니면 메세지 출력후 되돌리기 if($data[m_id] != $_SESSION[user_id]
&& $u_level != 9){ alert("본인의 글이 아닙니다."); }
// 6. 넘어온 변수 검사 if(trim($_POST[b_title])
== ""){ alert("글제목을 입력해 주세요."); }
// 3. 글 데이터 불러오기 $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);
// 4. 글이 없으면 메세지 출력후 되돌리기 if(!$data[b_idx]){
alert("존재하지 않는 글입니다."); }
// 5.
본인의 글이 아니면 메세지 출력후 되돌리기 if($data[m_id] != $_SESSION[user_id]
&& $u_level != 9){ alert("본인의 글이 아닙니다."); }
// 6. 파일 과 댓글 삭제하기 $file_sql = "select *
from ".$_cfg['board_table']." where bc_code = '".$bc_code."' and b_num =
'".$data[b_num]."' and b_reply like '".$data[b_reply]."%'"; $file_result
= sql_query($file_sql);
//
6-2 댓글 삭제 $comment_delete = "delete from
".$_cfg['comment_table']." where b_idx = '".$file_data[b_idx]."'";
sql_query($comment_delete); }
// 7. 글
삭제하기 $sql_delete = "delete from ".$_cfg['board_table']." where
bc_code = '".$bc_code."' and b_num = '".$data[b_num]."' and b_reply like
'".$data[b_reply]."%'"; sql_query($sql_delete);
// 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;
// 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("존재 하지 않는 글입니다."); }
// 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("존재 하지 않는 글입니다."); }
//
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)){
// 22. 댓글데이터가 하나도
없으면 if($i == 0){ ?> <tr>
<td align="center" valign="middle" colspan="4"
style="height:50px;background-color:#FFFFFF;">댓글이 하나도
없습니다.</td> </tr> <? } } // 댓글
목록 권한 체크 및 출력 결정 끝
// 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("존재 하지 않는 글입니다."); }
// 9.
페이지 변수 설정 if($_GET[page] && $_GET[page] > 0){ //
현재 페이지 값이 존재하고 0 보다 크면 그대로 사용 $page = $_GET[page]; }else{ // 그
외의 경우는 현재 페이지를 1로 설정 $page = 1; } // 한
페이지에 보일 글 수 $page_row = 10; // 한줄에 보여질 페이지 수 $page_scale = 10; // 페이징을
출력할 변수 초기화 $paging_str = "";
// 10.
전체 글 갯수 알아내기 $sql = "select count(*) as cnt from
".$_cfg['board_table']." where bc_code = '".$bc_code."' "; $total_count
= sql_total($sql);
// 11.
페이지 출력 내용 만들기 $paging_str = paging($page, $page_row, $page_scale,
$total_count, "bc_code=".$bc_code);
//
12. 시작 열을 구함 $from_record = ($page - 1) * $page_row;
// 13. 글목록 구하기 $query = "select *
from ".$_cfg['board_table']." where bc_code = '".$bc_code."' order by
b_num desc, b_reply asc limit ".$from_record.", ".$page_row; $result =
mysql_query($query, $connect);
//
14.데이터 갯수 체크를 위한 변수 설정 $i = 0;
//
15.데이터가 있을 동안 반복해서 값을 한 줄씩 읽기 while($data = mysql_fetch_array($result)){
// 16. 댓글 앞에 붙을 기호 만들기
$reply_str = ""; $reply_depth = strlen($data[b_reply]); if
($reply_depth > 0){ for ($k=0; $k<$reply_depth;
$k++){ $reply_str .= ' ';
} $reply_str .= "┗"; }
// 17. 게시글 링크 및 비밀글표시 만들기 $mark_secret = "";
if($data[b_is_secret]){ $mark_secret = "[비밀글] "; } //
게시글을 볼 권한 여부에 따라서 if($u_level >=
$board_config[bc_read_level]){ // 비밀글 여부 따지기
if($data[b_is_secret]){ // 글쓴이와 관리자 여부 따지기
if($_SESSION[user_id] == $data[m_id] || $_SESSION[user_id] == 9 ||
($_SESSION[user_id] == $board_config[bc_admin] &&
$board_config[bc_admin])){ $article_link =
"./board_view.php?bc_code=".$bc_code."&b_idx=".$data[b_idx]."&page=".$page;
}else{ $article_link =
"./board_password.php?bc_code=".$bc_code."&b_idx=".$data[b_idx]."&page=".$page;
} }else{ $article_link =
"./board_view.php?bc_code=".$bc_code."&b_idx=".$data[b_idx]."&page=".$page;
} }else{ $article_link =
"javascript:alert('글을 읽을 권한이 없습니다.');"; }
// 4. 같은 아이디가 있는지 검사
$chk_sql = "select * from bd__member where m_id =
'".trim($_POST[m_id])."'";
$chk_result = sql_query($chk_sql);
$chk_data = mysql_fetch_array($chk_result);
// 4. 같은 아이디가 있는지 검사 $chk_sql
= "select * from bd__member where m_id = '".trim($_POST[m_id])."'"; $chk_result
= sql_query($chk_sql); $chk_data = mysql_fetch_array($chk_result);
들어간 소스들은 지난시간의 게시판 관리 부분과 크게 차이가 없으니 설명은 생량하도록 하겠습니다.
<? // 1. 공통 인클루드 파일 include
"./admin_head.php";
// 2.
페이지 변수 설정 if($_GET[page] && $_GET[page] > 0){ //
현재 페이지 값이 존재하고 0 보다 크면 그대로 사용 $page = $_GET[page]; }else{ // 그
외의 경우는 현재 페이지를 1로 설정 $page = 1; } // 한
페이지에 보일 글 수 $page_row = 10; // 한줄에 보여질 페이지 수 $page_scale = 10; // 페이징을
출력할 변수 초기화 $paging_str = "";
// 3.
전체 회원 갯수 알아내기 $sql = "select count(*) as cnt from bd__member where 1"; $total_count
= sql_total($sql);
// 4.
페이지 출력 내용 만들기 $paging_str = paging($page, $page_row, $page_scale,
$total_count);
// 5. 시작 열을 구함 $from_record
= ($page - 1) * $page_row;
// 2. 회원
존재여부 검사 $sql = "select * from bd__member where m_idx =
'".$_POST[m_idx]."'"; $data = sql_fetch($sql); if(!$data[m_idx]){
alert("없는 회원입니다."); }
// 3.
넘어온 변수 검사 if(trim($_POST[m_name]) == ""){ alert("회원이름을 입력해
주세요."); }
$m_idx =
$_POST[m_idx];
// 4. 회원 저장 $sql =
"update bd__member set m_name =
'".trim($_POST[m_name])."', m_level = '".$_POST[m_level]."'
where m_idx = '".$m_idx."' "; sql_query($sql);
// 5.
이름이 바귀었으면 회원 글과 코멘트의 이름 수정 if($data[m_name] != trim($_POST[m_name])){
$sql = "update bd__board set m_name ='".trim($_POST[m_name])."' where
m_id = '".$data[m_id]."'"; sql_query($sql);
$sql = "update bd__comment set m_name
='".trim($_POST[m_name])."' where m_id = '".$data[m_id]."'";
sql_query($sql); }
// 6. 회원목록 페이지로 보내기 alert("회원이 수정
되었습니다.", "./admin_member_list.php"); ?>
[admin_member_modify_save.php 소스]
<? // 1. 공통 인클루드 파일 include
"./admin_head.php";
// 2. 회원 존재여부 검사 $sql = "select * from
bd__member where m_idx = '".$_GET[m_idx]."'"; $data =
sql_fetch($sql); if(!$data[m_idx]){ alert("없는
회원입니다."); }
$m_idx =
$_GET[m_idx];
// 4. 회원 삭제 $sql =
"delete from bd__member where m_idx = '".$m_idx."'"; sql_query($sql);
// 5. 글에 딸린 코멘트 및 파일 삭제를 위한 게시글 목록 구하기 $sql =
"select * from bd__board where m_id = '".$data[m_id]."'"; $data1 =
sql_list($sql);
// 6.
게시글 삭제 $sql = "delete from bd__board where m_id = '".$data[m_id]."'"; sql_query($sql);
// 7. 게시글에 딸린 코멘트 및 게시물 파일 삭제 for($i=0;$i<count($data1);$i++){
$sql = "delete from bd__comment where b_idx = '".$data1[b_idx]."'";
sql_query($sql);
// 4. 같은 아이디가 있는지 검사 $chk_sql
= "select * from bd__member where m_id = '".trim($_POST[m_id])."'"; $chk_result
= sql_query($chk_sql); $chk_data = mysql_fetch_array($chk_result);
이제 게시판 목록을 출력하고 각 게시판의 생성 및 설정을 변경하는 부분을 만들어 보겠습니다.
게시판 목록
<? // 1. 공통 인클루드 파일 include
"./admin_head.php";
// 2.
페이지 변수 설정 if($_GET[page] && $_GET[page] > 0){ //
현재 페이지 값이 존재하고 0 보다 크면 그대로 사용 $page = $_GET[page]; }else{ // 그
외의 경우는 현재 페이지를 1로 설정 $page = 1; } // 한
페이지에 보일 글 수 $page_row = 10; // 한줄에 보여질 페이지 수 $page_scale = 10; // 페이징을
출력할 변수 초기화 $paging_str = "";
// 3.
전체 게시판 갯수 알아내기 $sql = "select count(*) as cnt from
bd__board_config where 1"; $total_count = sql_total($sql);
// 4. 페이지 출력 내용 만들기 $paging_str =
paging($page, $page_row, $page_scale, $total_count);
// 5. 시작 열을 구함 $from_record = ($page -
1) * $page_row;
//DB 접속 및 데이터 베이스 선택 사용자 함수 function
sql_connect($db_host, $db_user, $db_pass, $db_name) {
$result = mysql_connect($db_host, $db_user, $db_pass) or
die(mysql_error()); mysql_select_db($db_name) or
die(mysql_error()); return $result; }
// 쿼리 함수 function sql_query($sql) {
global $connect; $result = @mysql_query($sql, $connect)
or die("<p>$sql<p>" . mysql_errno() . " : " . mysql_error()
. "<p>error file : $_SERVER[PHP_SELF]"); return $result; }
// 갯수 구하는 함수 function sql_total($sql) {
global $connect; $result_total = sql_query($sql,
$connect); $data_total = mysql_fetch_array($result_total);
$total_count = $data_total[cnt]; return $total_count; }
// 쿼리를 실행한 후 결과값에서 한행을 구하는 함수 function
sql_fetch($sql, $error=TRUE) { $result = sql_query($sql, $error);
$row = mysql_fetch_array($result); return $row; }
// 쿼리를 실행 한 후 결과값의 목록을 배열로 구하는 함수 function
sql_list($sql)
{
$sql_q = sql_query($sql);
$sql_list = array();
while($sql_r = mysql_fetch_array($sql_q)){
$sql_list[]= $sql_r;
}
return $sql_list;
}
// 회원정보 구하는 함수 function
get_member($uer_id)
{
global $_cfg;
$member = sql_fetch("select * from ".$_cfg[member_table]." where
m_id = '".$uer_id."'");
return $member;
}
// 경고창 띄우고 이동시키는 함수
function alert($msg='', $url='')
{
if (!$msg) $msg = '올바른 방법으로 이용해 주십시오.';
echo "<script language='javascript'>alert('$msg');";
echo "</script>";
if($url){
goto_url($url);
}else{
echo "<script language='javascript'>history.back();";
echo "</script>";
}
exit;
}
// 페이지 이동시키는 함수 function
goto_url($url) { echo "<script
language='JavaScript'> location.replace('$url'); </script>";
exit; }
// 파일 읽어서 변수로 내용 저장하기 function
file_read($file) { $handle = fopen($file, "r");
$contents = fread($handle, filesize($file)); fclose($handle);
return $contents; }
// 접근
권한 체크하는 함수 $this_level = 허용레벨 function check_level($this_level) {
if($_SERVER[user_level] >= $this_level){ $result =
true; }else{ $result = false; }
return $result; }
// 페이징
사용자 함수 function paging($page, $page_row, $page_scale, $total_count,
$ext = '') { // 1. 전체 페이지 계산 $total_page =
ceil($total_count / $page_row);
//
2. 페이징을 출력할 변수 초기화 $paging_str = "";
// 3. 처음 페이지 링크 만들기 if
($page > 1) { $paging_str .= "<a
href='".$_SERVER[PHP_SELF]."?page=1&'".$ext.">처음</a>"; }
// 4. 페이징에 표시될 시작 페이지 구하기
$start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;
// 5. 페이징에 표시될 마지막 페이지 구하기
$end_page = $start_page + $page_scale - 1; if ($end_page
>= $total_page) $end_page = $total_page;
// 6. 이전 페이징 영역으로 가는 링크 만들기 if ($start_page
> 1){ $paging_str .= " <a
href='".$_SERVER[PHP_SELF]."?page=".($start_page -
1)."&'".$ext.">이전</a>"; }
// 7. 페이지들 출력 부분 링크 만들기 if ($total_page
> 1) { for ($i=$start_page;$i<=$end_page;$i++) {
// 현재 페이지가 아니면 링크 걸기 if ($page != $i){
$paging_str .= " <a
href='".$_SERVER[PHP_SELF]."?page=".$i."&'".$ext."><span>$i</span></a>";
// 현재페이지면 굵게 표시하기 }else{
$paging_str .= " <b>$i</b> ";
} } }
// 8. 다음 페이징 영역으로 가는 링크 만들기 if ($total_page > $end_page){
$paging_str .= " <a
href='".$_SERVER[PHP_SELF]."?page=".($end_page +
1)."&'".$ext.">다음</a>"; }
// 9. 마지막 페이지 링크 만들기 if ($page <
$total_page) { $paging_str .= " <a
href='".$_SERVER[PHP_SELF]."?page=".$total_page."&'".$ext.">맨끝&
lt;/a>"; }
return $paging_str; } ?>
[inc/lib.php 소스]
1. DB 접속 및 데이터 베이스 선택 사용자 함수
function sql_connect($db_host,
$db_user, $db_pass, $db_name) { $result = mysql_connect($db_host,
$db_user, $db_pass) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error()); return $result; }
DB에 접속하기 위한 함수입니다.
디비서버명, 디비아이디 , 디비비밀번호,디비명 을 인자로 받아서 디비연결과, 디비 선택을 한수 연결값을 리턴하는 함수입니다.
2. 쿼리 함수
function sql_query($sql) {
global $connect; $result = @mysql_query($sql, $connect)
or die("<p>$sql<p>" . mysql_errno() . " : " . mysql_error()
. "<p>error file : $_SERVER[PHP_SELF]"); return $result; }
쿼리문을 인자로 받아서 mysql_query 문을 실행하고 에러나면 쿼리문과 에러가 난 파일을 보여주게 합니다.
성공하면 결과를 리턴합니다.
3. 갯수 구하는 함수
function sql_total($sql) {
global $connect; $result_total = sql_query($sql,
$connect); $data_total = mysql_fetch_array($result_total);
$total_count = $data_total[cnt]; return $total_count; }
갯수를 구하는 쿼리문을 받아서 갯수를 구해 리턴하는 함수입니다.
쿼리문은 "select count(*) as cnt from 테이블명 where 조건" 의 형식이여야 합니다.
쿼리문을 실행해서 목록을 배열로 저장해서 리턴하는 함수
리턴되는 변수의 1차 배열에는 한줄의 데이터가 배열로 저장이 되어 있어 2차 배열로 리턴됩니다.
6. 회원정보 구하는 함수
function get_member($uer_id)
{
global $_cfg;
$member = sql_fetch("select * from ".$_cfg[member_table]." where
m_id = '".$uer_id."'");
return $member;
}
회원 아이디를 인자로 받아 회원디비에서 회원정보를 구해 배열의 형태로 리턴합니다.
$_cfg 는 config 파일에서 설정을 정의할때 사용할 변수입니다.
이 변수를 global 즉 전역 변수로 받아서 처리합니다.
7. 자바스크립트 경고창 띄우고 이동시키는 함수
function alert($msg='', $url='')
{
if (!$msg) $msg = '올바른 방법으로 이용해 주십시오.';
echo "<script language='javascript'>alert('$msg');";
echo "</script>";
if($url){
goto_url($url);
}else{
echo "<script language='javascript'>history.back();";
echo "</script>";
}
exit;
}
메세지를 인자로 받아 자바스크립트의 alert() 함수를 실행해 주는 함수입니다.
$url인자로 받은 경로가 있으면 경로로 이동을 없으면 바로전으로 이동시킵니다.
8. 페이지이동함수
function goto_url($url) {
echo "<script language='JavaScript'> location.replace('$url');
</script>"; exit; }
이동할 주소를 인자로 받아 페이지를 이동하는 자바스크립트의 location.replace() 함수를 실행해주는 함수입니다.
접근허용 레벨을 인자로 받아 세션에 기록된 사용자 레벨과 비교해서 권한이 있으면 true , 없으면 false 를 리턴합니다.
10. 페이징 함수
function paging($page, $page_row,
$page_scale, $total_count, $ext = '') { // 1. 전체 페이지 계산
$total_page = ceil($total_count / $page_row);
// 2. 페이징을 출력할 변수 초기화 $paging_str = "";
// 3. 처음 페이지 링크 만들기 if
($page > 1) { $paging_str .= "<a
href='".$_SERVER[PHP_SELF]."?page=1&'".$ext.">처음</a>"; }
// 4. 페이징에 표시될 시작 페이지 구하기
$start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;
// 5. 페이징에 표시될 마지막 페이지 구하기
$end_page = $start_page + $page_scale - 1; if ($end_page
>= $total_page) $end_page = $total_page;
// 6. 이전 페이징 영역으로 가는 링크 만들기 if ($start_page
> 1){ $paging_str .= " <a
href='".$_SERVER[PHP_SELF]."?page=".($start_page -
1)."&'".$ext.">이전</a>"; }
// 7. 페이지들 출력 부분 링크 만들기 if ($total_page
> 1) { for ($i=$start_page;$i<=$end_page;$i++) {
// 현재 페이지가 아니면 링크 걸기 if ($page != $i){
$paging_str .= " <a
href='".$_SERVER[PHP_SELF]."?page=".$i."&'".$ext."><span>$i</span></a>";
// 현재페이지면 굵게 표시하기 }else{
$paging_str .= " <b>$i</b> ";
} } }
// 8. 다음 페이징 영역으로 가는 링크 만들기 if ($total_page > $end_page){
$paging_str .= " <a
href='".$_SERVER[PHP_SELF]."?page=".($end_page +
1)."&'".$ext.">다음</a>"; }
// 9. 마지막 페이지 링크 만들기 if ($page <
$total_page) { $paging_str .= " <a
href='".$_SERVER[PHP_SELF]."?page=".$total_page."&'".$ext.">맨끝&
lt;/a>"; }
return $paging_str; }
현재페이지, 한페이지에 표시될 글 수, 페이지표시부분에 표시될 페이지의 갯수, 전체글수, 추가로 붙는 get 부분을 인자로 받아서
페이징 부분을 만들어 리턴해주는 함수입니다.
여기까지 게시판에서 주로 사용될 사용자 함수들을 만들어봤습니다.
이제 중요한 설정들을 미리 해 놓고 모든 파일에서 include 하는 inc/config.php 페이지를 만들어 보겠습니다.
// db.php 파일의 존재유무로 설치 했는지 확인 (존재하면 설치한것임)
if(!file_exists("./db.php")){
?>
<meta http-equiv="Content-Type" content="text/html;
charset=euc-kr">
<script>
alert("설치가 되지 않았습니다.");
location.replace("./install/index.php");
</script>
<?
exit;
}
[inc/config.php 소스]
db.php에 db 설정을 설치시 적어주게 됩니다.
이 db.php 파일의 존재 여부에 따라서 존재하지 않으면 설치가 되지 않은 상태, 존재하면 설치가 완료된 상태를 의미합니다.
file_exists() 함수로 파일 존재여부를 가려낸 후 존재하지 않으면 설치 디렉토리의 정보입력 페이지로 보냅니다.
이제 본격적으로 설치 파일들을 만들어 보겠습니다.
먼저 install/index.php 파일입니다.
이 파일은 설치 관련된 정보를 입력받아 설치를 진행하는 파일로 넘겨주는 역할을 합니다.
<? //###################################### // //
설치데이터 입력파일 : install/index.php // //###################################### // 1.
db.php 파일의 존재유무로 설치 했는지 확인 (존재하면 설치한것임) if(file_exists("../db.php")){
?> <meta http-equiv="Content-Type" content="text/html;
charset=euc-kr"> <script> alert("이미 설치가 되어
있습니다."); location.replace("../index.php");
</script> <? exit; }
// 2. 게시판의 최상단 디렉토리가 쓰기가능인지 검사 if
(!is_writeable("..")) { ?> <html>
<head> <meta http-equiv="Content-Type"
content="text/html; charset=euc-kr">
<title></title> </head> <script>
alert("최상위 디렉토리의 퍼미션을 707 이나 777 로 변경하여 주세요."); </script>
<body> 최상위 디렉토리의 퍼미션을 707 이나 777 로 변경하여 주세요.
</body> </html> <? exit; }
1번에서 db.php 의 존재여부를 따져 존재하면 설치가 된 경우므로 상위디렉토리의 초기화면으로 보냅니다.
2번은 설치가 안되었을 경우 is_writable() 함수로 상위 디렉토리가 쓰기 가능인지를 확인합니다.
쓰기가 가능하지 않으면 db.php 파일과 이미지 저장 디렉토리인 data 디렉토리를 생성하지 못하므로 설치를 진행하지 못합니다.
3번부터는 입력받는 부분이므로 설명은 생략합니다.
입력이 완료되면 install/install.php 파일로 입력받은 정보를 보냅니다.
<? //###################################### // //
설치실행파일 : install/install.php // //###################################### // 1.
db.php 파일의 존재유무로 설치 했는지 확인 (존재하면 설치한것임) if(file_exists("../db.php")){
?> <meta http-equiv="Content-Type" content="text/html;
charset=euc-kr"> <script> alert("이미 설치가 되어
있습니다."); location.replace("../index.php");
</script> <? exit; }
// 2. 게시판의 최상단 디렉토리가 쓰기가능인지 검사 if
(!is_writeable("..")) { ?> <html>
<head> <meta http-equiv="Content-Type"
content="text/html; charset=euc-kr">
<title></title> </head> <script>
alert("최상위 디렉토리의 퍼미션을 707 이나 777 로 변경하여 주세요."); </script>
<body> 최상위 디렉토리의 퍼미션을 707 이나 777 로 변경하여 주세요.
</body> </html> <? exit; }
CREATE TABLE 테이블명 - 테이블을 만든다는 부분
( 필드명 데이타형(길이) 필드속성, ...... , - 테이블의 필드들의 이름과 데이타형, 길이 그외 속성 들을 적습니다.
PRIMARY KEY (프라이머리필드명) ) - PRIMARY KEY 나 INDEX 들을 적어줍니다.
ENGINE=MyISAM - MySql 의 DB엔진입니다. 여러가지가 있지만 보편적으로는 MyISAM 을 사용합니다.
DEFAULT CHARSET=euckr - 기본 캐릭터셋을 적어줍니다.
AUTO_INCREMENT=1 - auto increment 가 있다면 시작하는 번호를 적어줍니다.
phpmyadmin 에서 쉽게 만들던게 복잡해 보일겁니다.
쉽게 알아보시려면 phpmyadmin 의 내보내기 메뉴에서 내보내기를 해보면 저 문장을 쉽게 얻으실수 있습니다.
전시간에 설계한 테이블들을 위의 구문대로 만들어 갑니다.
7번에서 테이블들이 다 만들어 졌는지 검사를 합니다.
8. 넘어온 운영자 정보를 회원테이블에 적어 넣습니다. 이 부분은 예전에 설명 드린 내용입니다.
9 운영자 정보가 적혔는지 검사합니다.
10. 이제 db.php 파일을 만듭니다.
전시간에는 우리가 파일을 직접 만들어서 적어준 내용인데 이번에는 설치이므로 넘어온 데이터들을 이용해 파일을 만듭니다.
fopen() 으로 w 모드로 열면 파일이 생성된다는건 기억하시죠?
chmod(파일 , 퍼미션) 은 파일이나 디렉토리의 퍼미션을 변경할때 사용합니다.
11. 첨부 파일을 저장할 디렉토리인 data 디렉토리를 mkdir()함수로 만들어 줍니다.
퍼미션은 707 즉 누구라고 쓰기가 가능하다는 이야기 입니다.
여기까지 하고나면 설치가 완료된것입니다.
이제 다음시간에는 설정파일 inc/config.php 과 게시판에서 사용할 함수들을 담고 있는 inc/lib.php 파일을 만들어
보도록 하겠습니다.