본문 바로가기
Programming

[PHP 강좌] 34. 관계형 게시판 만들기 2 - (사용자 정의 함수 파일 과 공통 include 만들기)

by Mizix 2010. 2. 11.
반응형
지난시간에는 게시판에 사용할 디비를 설계 하였습니다.

오늘은 게시판에서 항상 include 하여 사용할 사용자 함수들의 파일과 공통으로 include 되는 파일을 만들겠습니다.

여기에 나와있는 것들의 대부분은 지난번 메모장 만들때 사용하던 것입니다.

<?
// 1. DB 관련 변수 정리
$db_host = "localhost";
$db_user = "handsome";
$db_pass = "12345";
$db_name = "handsome_db";

// 2. 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("handsome_db") or die(mysql_error());
    return $result;
}

// 3. 디비 관련 기타 사용자 함수
// 쿼리 함수
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;
}

// 4. 페이징 사용자 함수
function paging($page, $page_row, $page_scale, $total_count, $ext = '')
{
    // 4-1. 전체 페이지 계산
    $total_page  = ceil($total_count / $page_row);

    // 4-2. 페이징을 출력할 변수 초기화
    $paging_str = "";

    // 4-3. 처음 페이지 링크 만들기
    if ($page > 1) {
        $paging_str .= "<a href='".$_SERVER[PHP_SELF]."?page=1&'".$ext.">처음</a>";
    }

    // 4-4. 페이징에 표시될 시작 페이지 구하기
    $start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;

    // 4-5. 페이징에 표시될 마지막 페이지 구하기
    $end_page = $start_page + $page_scale - 1;
    if ($end_page >= $total_page) $end_page = $total_page;

    // 4-6. 이전 페이징 영역으로 가는 링크 만들기
    if ($start_page > 1){
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".($start_page - 1)."&'".$ext.">이전</a>";
    }

    // 4-7. 페이지들 출력 부분 링크 만들기
    if ($total_page > 1) {
        for ($i=$start_page;$i<=$end_page;$i++) {
            // 현재 페이지가 아니면 링크 걸기
            if ($page != $i){
                $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".$i."&'".$ext."><span>$i</span></a>";
            // 현재페이지면 굵게 표시하기
            }else{
                $paging_str .= " &nbsp;<b>$i</b> ";
            }
        }
    }

    // 4-8. 다음 페이징 영역으로 가는 링크 만들기
    if ($total_page > $end_page){
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".($end_page + 1)."&'".$ext.">다음</a>";
    }

    // 4-9. 마지막 페이지 링크 만들기
    if ($page < $total_page) {
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".$total_page."&'".$ext.">맨끝& lt;/a>";
    }

    return $paging_str;
}
?>
[lib.php 소스]

위에서 지난번 메모 만들때와 변경된 부분이 있습니다.

첫번째는 mysql_query90 함수를 에러메세지를 표시하도록 sql_query() 함수로 정의했습니다.

 mysql_errno() 는 mysql 에러의 번호 , mysql_error() 은 에러 메세지를 나타내주는 명령어 입니다.

두번째는 페이징은 검색관련 변수들을 전달하기 위해 $ext 를 추가한 변화가 있습니다.


다음은 공통 include 파일입니다.

<?
// 1. 세션사용은 위한 초기화
session_start();

// 2. 사용자 정의 함수 include
include ("./lib.php");

// 3. DB 연결
$connect = sql_connect($db_host, $db_user, $db_pass, $db_name);

// 4. head 부분
?>
<table style="width:1000px;height:50px;border:5px #CCCCCC solid;">
    <tr>
        <td align="center" valign="middle" colspan="3" style="font-zise:15px;font-weight:bold;">
        PHPer's Heaven 샘플 게시판
        </td>
    </tr>
    <tr>
        <td align="center" valign="middle" style="font-size:12px;"><a href="./board_list.php">목록보기</a></td>
        <td align="center" valign="middle" style="font-size:12px;">
        <?
        // 5. 세션을 이용한 로그인 여부에 따른 링크
        if($_SESSION[user_id]){
        ?>
        <a href="./board_logout.php">로그아웃</a>
        <?}else{?>
        <a href="./board_login.php">로그인</a>
        <?}?>
        </td>
        <td align="center" valign="middle" style="font-size:12px;">
        <?
        // 6. 세션을 이용한 로그인 여부에 따른 링크
        if($_SESSION[user_id]){
        ?>
        <a href="./board_write.php">회원정보수정</a>
        <?}else{?>
        <a href="./board_register.php">회원가입</a>
        <?}?>
        </td>
    </tr>
</table>

[include.php 소스]

이번 게시판에서는 쿠키가 아닌 세션을 이용해서 로그인 관리를 할 예정입니다.

쿠키는 본인 컴퓨터에 정보들이저장되기 때문에 조작될 가능성이 높습니다. 세션은 서버에 데이터들이 저장이 됩니다.

1번 부분이 세션을 사용하기 위해 제일 처음 세션을 초기화 하는 함수 session_start() 입니다.

이 함수 전에는 어떠한 출력도 있어서는 안되기 때문에 제일 처음에 사용해 줍니다.

5번과 6번은  세션중 user_id (로그인 시 세션에 기록하는 사용자 아이디) 값의 존재 유무로 로그인 여부를 구분하고

로그인한 경우면 로그아웃,글쓰기 메뉴를 보여주고 로그인하지 않은 경우면 로그인,회원가입 메뉴를 보여줍니다.

다음시간에는 회원 가입,회원정보수정,로그인,로그아웃 방법을 배워보도록 하겠습니다.

출처: http://handsome.pe.kr/

반응형