ITmembers.net 아카이브 · 2002–2009

질문과 답변

흠 번호

번호가 1번으로 안나오고 11번부터 시작 하는 거라서 질문이요



어떤 건지 몰라서 list, view 둘 다 올립니다.
list.php
<?
//db에 연결하는 부분입니다. 항상 반복 되는 부분이니 꼭 암기!!
mysql_connect("localhost","phpbbs","phpbbs") or die(mysql_error());
mysql_select_db("itmembers");

//게시판 목록 보기에 필요한 각종 변수 초기값을 설정
$tablename="bbs";//테이블 이름
if($page=='') $page=1;//페이지 번호가 없다면 1
$list_num=10;//한페이지에 보여줄 목록 갯수
$page_num=10;//한화면에 보여줄 페이지 링크(묶음) 개수
$offset=$list_num*($page-1);//한 페이지의 시작 글 번호(listnum수만큼 나누었을 떄 시작하는 글의 번호

//전체 글 수를 구한다.(쿼리문을 사용 결과를 배열로 저장하는 일반적인 방법)
$query="select count(*) from $tablename";//bbs 테이블의 레코드 수를 구하는 쿼리문을 $query 변수에 저장한 것입니다.
$result=mysql_query($query) or die(mysql_error());//위의 쿼리문을 실행하여 결과를 result에 대입,실패하면 에러 메시지 표시
$row=mysql_fetch_row($result);//$row=mysql_fetch_row($result); 와 같이 하였다면,$row[0]에 실행 결과의 처음 값이 들어가겠죠. 15행의 쿼리 결과는 전체 레코드 수를 구하는 것이므로 하나의 값만 리턴하게 되므로 결국 $row[0]의 값만 있으면 되는 겁니다. 만약 24행에서의 같은 쿼리라면 그 결과로 $row[0], $row[1], $row[2]... 와 같이 차례대로 저장이 될 것입니다. 단 이 함수는 하나의 레코드에에만 해당되므로 여러 레코드의 결과 값을 차례대로 얻을려면 레코드 수만큼 반복해야 합니다.63행은 보면 while 문을 사용하여 레코드 수만큼 반복하여 그 결과값을 배열로 저장하는 예가 되겠습니다.

$total_no=$row[0];//배열의 첫번째 요소의 값, 즉 테이블의 전체 글 수를 저장!

//전체 페이지 수와 현재 글 번호를 구한다.
$total_page=ceil($total_no/$list_num);//전체 글수를 페이지당 글수로 나눈 값의 올림값을 구함..즉 전체 글 수가 55개라면, 55/10 = 5.5 이므로 올림 수이니까 6이 되겠죠.즉 55개의 글을 모두 표시하려면 6페이지가 필요하다는 겁니다.
$cur_num=$total_no-$list_num*(page-1);//현재 글 번호

//bbs테이블에서 목록을 가져 옵니다.(위의 쿼리문 사용예와 비슷!
$query="select * from $tablename order by number desc limit $offset, $list_num";//bbs 테이블에서 모든 것을 불러오되, number 필드(컬럼)를 기준으로 내림차순으로 정렬하여 표시하라는 문장입니다. 단 $offset 행부터 $list_num 개만큼 불러오라는 뜻입니다. $offset 변수에는 한 페이지의 시작 글 번호가 저장되어 있고, $list_num에는 한 페이지에 표시할 목록의 개수가 저장되어 있습니다.


$result=mysql_query($query) or die(mysql_error());//쿼리문을 실행 결과
//쿼리 결과를 하나씩 불러와 실제 html에 나타내는 것은 html문 중간에 삽입!
?>

<html>
<head>
<meta http-equiv=content-type content=text/htm; charset=euc-kr>
<title>글목록 보기</title>
<STYLE TYPE=text/css>
BODY,TD,SELECT,input,div,form,TEXTAREA,center,option,pre,blockqute{font-family:굴림;font-size:9pt;color:#555555;}
A:link {color:black;text-decoration:none;}
A:active{color:black;text=decoration:none;}
A:hover{color:gray;text-decoration:none;}
</STYLE>
</head>
<body background=/image/body_bg.gif>
<img src=./images/maintitle.gif>
<table border=1 cellspacing=0 width=680 bordercolordark=white bordercolorlight=#999999>
        <tr>
           <td width=30 bgcolor=#CCCCC>
              <p align=center>no</p>
            </td>
            <td bgcolor=#CCCCC width=490>
              <p align=center> subject</p>
            </td>
            <td width=60 bgcolor=#CCCCC>
              <p align=center>name</p>
             </td>
             <td width=80 bgcolor=#CCCCC>
               <p align=center>date</p>
              </td>
              <td width=30 bgcolor=#CCCCC>
                 <p align=center>hit</p>
                </td>
        </tr>
<?
while($array=mysql_fetch_array($result))//mysql_fetch_array() 함수는 전 시간에 다루었던 mysql_fetch_row()와 마찬가지로 쿼리의 결과를 배열 형태로 <u>한 줄씩</u> 리턴하는 기능을 합니다.
{
        $date=date("Y/m/d",$array[writetime]);//$array[wirtetime]의 값을 년(Y)/월(m)/일(d)의 형태로 표시하라는 뜻입니다.


        echo"
        <tr>
          <td width=30>
             <p align=center>$cur_num</p>
           </td>
           <td width=490>
              <p><a href='view.php?page=$page=$page&number=$array[number]'>$array[subject]</p>
           </td>
           <td width=60>
              <p align=center>$array[name]</p>
            </td>
            <td width=70>
                <p align=center>$date</p>
            </td>
            <td width=30>
                <p align=center>$array[count]</p>
            </td>
          </tr>";

          $cur_num--;
}
?>
       <tr>
          <td width=100% colspan=5>
                <?
                //여기서 부터 각종 페이지 링크>
                //먼저 한 화면에 보이는 블록($page_num 기본값 이상일 때 블록으로 나뉘어짐)
        $total_block=ceil($total_page/$page_num);//게시판 전체 블록수를 구하는 법
                $block=ceil($page/$page_num);//현재 블록

                $first=($block-1)*$page_num;//페이지 블록이 시작되는 첫 페이지
                $last=$block*$page_num;//페이지 블록의 끝 페이지

                if($block>=$total_block){
                        $last=$total_page;
                }

                echo"
                        $nbs  <p align=center>";
        //[처음][*개앞]
        if($block>1){
                 $prev=$first-1;
                 echo"<a href=list.php?page=1>[처음],</a> ";
                 echo"<a href=list.php?page=$prev>[$page_num 개 앞]</a>";
        }

        //[이전]
        if($page>1){
                $go_page=$page-1;
                echo"<a href='list.php?page=$go_page'>[이전]</a> ";
        }

        //페이지 링크
        for($page_link=$first+1;$page_link<=$last;$page_link++){
                if($page_link==$page){
                        echo"<font color=green><b>$page_link</b></font>";
                }
                else{
                        echo"<a href='list.php?page=$page_link'>[$page_link]</a>";
                }
        }

        //다음
        if($total_page>$page){
                 $go_page=$page+1;
                 echo" <a href='list.php?page=$go_page'>[다음]</a>";
        }

        //[*개뒤][마지막]
        if($block<$total_block){
                        $next=$last+1;

echo",a href='list.php?page=$next'>[$page_num 개 뒤]</a> ";
echo"<a href='list.php?page=$total_page'>[마지막]</a></p>";

        }
        ?>
        </td>
        </tr>
        <tr>
                <td width=100% colspan=5>
                  <p align=center><a href='write.php'>[글쓰기]</a></p>
                  </td>
                 </tr>
                </table>
                </body>
                </html>


view.php

<?
mysql_connect("localhost","phpbbs","phpbbs") or die(mysql_error());
mysql_select_db("itmembers");


$tablename="bbs";
$query="select * from $tablename where number='$number'";//글번호를 가지고 조회를 한다.
$result=mysql_query($query) or die(mysql_error());
$array=mysql_fetch_array($result);

//백슬러쉬 제거, 특수문자 변환(html용),개형(<br>처리 등
$array[name]=stripslashes($array[name]);
$array[subject]=stripslashes($array[subject]);
$array[memo]=stripslashes($array[memo]);

$array[subject]=htmlspecialchars($array[subject]);
$array[memo]=htmlspecialchars($array[memo]);
$array[memo]=nl2br($array[memo]);

//조회수 카운터 증가
$query="update $tablename set count=count+1 where number=$number";
mysql_query($query);
?>

<html>
<head>
<title>PHP게시판 프로젝트-보기></title>
<STYLE TYPE="text/css">
BODY,TD,SELECT,input,DIV,form,TEXTAREA,center,option,pre,blockquote{font-family:굴림;font-size:9pt;color:#555555;}
A:link {color:black;text-decoration:none;}
A:visited{color:black;text-decration:none;}
A:active{color:black;text-decoration:none;}
A:hover{color:gray;text-decoration:none;}
</STYLE>
</head>
<body bgcolor=white background=./images/body_bg.gif>
<img src=./images/maintitle.gif>
<table border=0 cellspacing=1 cellpadding="3" width=670>
        <tr>
                <td align=center>
                <font color=green><b>내용보기 화면입니다.<b></font>
                </td>
        </tr>
        <tr>
        <td bgcolor="#EAC3EA">
        <table border=0 cellspacing=1 cellpadding=0 width=670 bgcolor="white">
        <tr>
        <td width="100">
        <p align="right"><b>이름 </b></p>

        </td>
        <td width="400">
                <p><? echo $array[name];?></p>
        </td>
        <td width="100">
                <p align="right"><b>조회수  </b><p>
                </td>
                <td>
                        <p><? echo $array[count];?></p>
                </td>
                </tr>
                        <tr>
                <td width="100">
                        <p align="right"><b>전자우편 </b></p>
                </td>
                <td colspan="3"
                        <p><? echo $array[email];?></p>
                </td>
                        </tr>
                        <tr>
                <td width="100">
                        <p align="right"><b>홈페이지  </b></p>
                </td>
                <td colspan="3">
                        <p><? echo $array[homepage];?> </p>
                </td>
                        </tr>
                        <tr>
                <td width="100">
                        <p align="right"><b>제목 ></b></p>
                </td>
                <td colspan="3">
                        <p><? echo $array[subject];?></p>
                </td>
                        </tr>
                <tr>
                <td width="100">
                        <a align="right"><b>내용 </b></p>
                </td>
                <td colspan="3">
                        <p><? echo $array[memo]?></p>
                </td>
                </tr>
        </table>

        <p align="center"><a href="list.php?page=<?echo $page; ?>">[목록]</a> [쓰기] [수정]  [삭제]</p>
        </td>
</tr>
</table>
<body>
</html>


-------------------------------------------------
  에고, 빠른 답변 감사드립니다.
  제가 " 빼먹어서 안되었군요. 그거 때문에 2시간을 허비했습니다. 철푸덕@_@;;;

  그리고 학원에서 이번달 수업 내용이 홈페이지 만들기라서 모르는 php문을 열심히 보고 있는데요.

  사이트를 보다 보면 보안에 대한 이야기가 많더라고요.

  현재 제가 지금 열심히 짜고 있는 건 회원 가입 부분인데요.

  예를 들어서 사이트 주소가 aa.co.k/   이라고 하면

  /~~~~ 이 뒤에 게시판이나 내용 보면 엄청나게 길게 나오지 않습니까.

  근데 전 / 이 뒤에 부분을 모두 없애고 언제나 어디서나(...) 도메인 주소만 보이게 하고 싶거든요. 어떻게 하면 그렇게 될까요. 어떤 분 말씀으로는 히든을 사용하라고 하는데......

  에고... 모르는게 있으면 언제나 올리겠습니다@_@;;

  엄청 귀찮게 해드릴 것 같네요(....)



댓글 2