게시판 만들기 2
자 잘 지내셨는지요.
이제 list.php를 만들어 보겠습니다.
리스트 부분은 화면에 가장먼저 나오는 부분이고 해야할것도 엄청나게 많습니다.
우선 이번은 그냥 화면에 나오는 것만 쓰겠습니다.
나중에 다시 페이지분할과 검색창을 이용한 검색부분을 별도로 설명드리겠습니다.
리스트도 처음에는 DB를 읽어 들여야겠죠? !!
<%
set dDB = Server.CreateObject("ADODB.Connection")
dDB.Open("DSN=MySDB;uid=sa;pwd=pw;")
dtCnt = "Select count(dNm) from vTB" 'DB의 갯수를 센다.
set dCnt = dDB.execute(dtCnt) 'DB에서 바로 갯수를 세는 레코드셋을 구한다.
dCntTot = dCnt(0) '총 게시물 수
set dRS = Server.CreateObject("ADODB.RecordSet")
dSql = "Select * From vTB Order By dNm Desc"
dRS.Open dSql, dDB
%>
자 위에것은 ASP에서 DB를 읽어 들이는 것이고, 아래것이 PHP에서 DB를 읽는 것입니다.
<?php
$user_db = "MyDB";
$dDB = mysql_connect("localhost", "root", "pw") or die('SQL서버에 연결할수 없습니다');
mysql_select_db($user_db, $dDB); // db 열기
$dtSql = "Select * From vTB Order By dNm Desc";
$dSql = mysql_query( $dtSql, $dDB );
$dCntTot = mysql_affected_rows(); // 총게시물 수
?>
그럼 화면에 나오도록 구성을 하겠습니다.
<TABLE border="0" width=620 noResize cellpadding=0 cellspacing=0>
<tr> <th> 번호 </th>
<th> 제목 </th>
<th> 성함 </th>
<th> 전자우편 </th>
<th> 입력날짜 </th> </tr>
<!--****- 화면에 보여주는 리스트 한줄 시작 *****-->
<%
if dCntTot > 0 then '데이터가 있다면
for d=0 to dCntTot Step 1
%>
<tr>
<td> <%=dRS("dNm")%> </td>
<td> <a href = 'view.asp?Nm=<%=dRS("dNm")%>'> <%=dRS("dTitle")%> </a> </td>
<td> <%=dRS("dIrum")%> </td>
<td> <%=dRS("dEmail")%> </td>
<td> <%=mid(dRS("rInday"),0,10)%> </td>
<%
dRS.moveNext
Next
%>
<!--****- 화면에 보여주는 리스트 한줄 끝 *****-->
<% else '데이터가 없다면 %>
<tr> <td colspan=5><b> 입력값이 없네요... ㅇ.ㅇ; </b></td>
<% end if %>
</TABLE>
자 이게 리스트를 보여주는곳 입니다.
다 아시리라 생각되지만 잠깐 설명하자면, 데이터 베이스로 불려들인것을 테이블로 만들어서,
제목줄을 먼저 쓰시고, 그 다음줄 부터 DB의 내용을 한줄씩 보여주는 겁니다.
if 문이 쓰인것은 총게시물이 0클때는 보여주고 아닐때, 즉 없을때는 화면에 '입력이 없음'을 나타내도록 쓴것입니다.
for 문은 한줄씩 보이면서 dRS.moveNext 를 만나서 다음줄로 이동하면서
next를 만나서 총게시물 수만큼 반복하여 출력하는 것입니다.
데이터를 읽어 드릴때는 간단하게 <%=dRS("...")%> 이런 형식으로 쓰입니다.
여기서 '=' 는 response.write를 나타내는 화면 출력을 말하고,
dRS("...")은 데이터를 레코드 셋으로 만들어서 각 필드마다 출력하도록 하는 것입니다.
그리고 mid 함수는 문자열을 나눌때 쓰는 것인데, 여기서 쓴 이유는 화면에서 시간, 분, 초 까지 표시하면
지저분해지기에 년-월-일만 표시하게 한 것입니다.
그럼 다음은 php로 짜는 방식입니다.
<TABLE border="0" width=620 noResize cellpadding=0 cellspacing=0>
<tr> <th> 번호 </th>
<th> 제목 </th>
<th> 성함 </th>
<th> 전자우편 </th>
<th> 입력날짜 </th> </tr>
<!--****- 화면에 보여주는 리스트 한줄 시작 *****-->
<?
if( $dCntTot > 0) { // 게시물 출력
mysql_data_seek( $dSql, $dCntTot );
for( $d = 0; $d < $dCntTot; $d++ ) {
$dRS = mysql_fetch_array($dSql); // 한개의 레코드셋 지정- 필드명으로
$tInday = substr($dRS[dInday],0,10);
echo("
<tr>
<td> $dRS[dNm] </td>
<td><a href = 'view.php?Nm=$dRS[dNm]'> $dRS[dTitle] </a></td>
<td> $dRS[dIrum] </td>
<td> $dRS[dEmail] </td>
<td> $tInday </td>
");
} //for문장의 끝
} else {
echo ("
<tr>
<td colspan=5><b> 입력값이 없네요... ㅇ.ㅇ; </b></td>
</tr>
");
}
?>
<!--****- 화면에 보여주는 리스트 한줄 끝 *****-->
</TABLE>
이것이 php로 리스트를 보여주는 것입니다. 하는 방식은 asp와 동일하게 되어있습니다.
다만 틀린것이 있다면 php에서는 반복문 쓰기전에 mysql_data_seek(); 라는 함수를 써서
레코드셋 위치를 먼저 지정하셔야 한다는 것입니다. 이것을 안하면 아주 이상하게 됩니다.
그리고 asp 에서는 레코드 셋이 한번 지정하면 그냥 사용하시면 되는데 반해 php 는 제가 몰라서 그런지
레코드셋을 그때그때마다 따로 만드셔야 한다는 것입니다. 즉 $dRS 라는 부분이 반복문 안에 있어야만 합니다.
화면에 출력하는 response.write 대신 php는 echo(" ... "); 라는 함수를 주는데
좋은 부분은 그 안에다가 테이블을 짜넣으셔도 되고 변수명을 주시면 변수가 출력이됩니다.
다만 이것이 나쁜점이 '$dInday한글' 이렇게 날짜가 나오고 바로 다음에 문자를 넣으시면 변수명으로 읽어드립니다.
그러기 때문에 '$dInday 한글' 이렇게 쓰셔야하는데 이러면 한칸이 띄어지게 되있습니다.
이것도 어찌해야 할지를 모르겠더군요.
위에보면 substr(); 이라는 함수가 나오는데 이것은 asp의 mid() 함수와 같은 기능입니다.
자 마지막으로 DB를 닫고, in 부분만 링크시켜놓으면 list는 끝이 납니다.
물론 해야 할게 많이 남았지만 단지 화면에 보여주는 것이라면 이정도만 있어도 되리라 봅니다.
<%
dRS.close
set dRS = nothing
dDB.close
set dDB = nothing
%>
<a href = 'in.asp'> 입력폼으로 </a>
<?
mysql_close($dDB);
?>
<a href = 'in.asp'> 입력폼으로 </a>
자 이것으로 간단하게 list를 설명드렸습니다. asp와 크게 다른점은 없었으리라 생각됩니다.
다음에는 view.php를 설명드리겠습니다.
그럼 안녕히 주무시기바랍니다.
Copyright ⓒ 2000 - 2001
Drif. Co., Ltd.
All rights reserved.
Mail to Master
카페 게시글
토론방
게시판 list.php 만들기
다음검색