글을 작성하면 DB에 내용을 저장하는 코드를 짠다.
post.php에서 글을 작성한 뒤, save.php에서 실제 DB에 넣게 된다.
사실 별거 없다.
웹 프로그래밍이라고 되게 어렵게만 생각했는데, 차근차근 나눠서 생각해 보니 그리 어려울 것 같지도 않다.
- HTML : 화면에 보이는 것을 설계한다.
- 자바스크립트 : 간단한 HTML 관련 제어 (클라이언트에서 실행)
- PHP : 실질적인 로직. DB를 제어하는 것 외엔 특별한게 없다. (서버에서 실행)
<post.php>
<html>
<head>
<meta HTTP-EQUIV="CONTENT-TYPE" content="text/html;charset=EUC-kr">
<title>글쓰기</title>
<script language="JavaScript">
<!--
function send()
{
if (document.write_form.title.value.length <1) {
alert("제목을 입력하십시오.");
document.write_form.title.focus();
return false;
} else if (document.write_form.content.value.length <1) {
alert("본문 내용이 없습니다.");
document.write_form.content.focus();
return false;
}
document.write_form.submit();
}
-->
</script>
</head>
<body bgcolor=#ffffff>
<div align="center">
<table border="0">
<tr>
<td><font color="red">글쓰기</font></td>
</tr>
</table>
<form name="write_form" action="save.php" method="post">
<table cellspacing="0" border="0">
<tr>
<td align="left">글쓴이 </td>
<td align="left">
<input type="text" name="name" size="12" maxlength="12">
</td>
</tr>
<tr>
<td align="left">패스워드</td>
<td align="left">
<input type="password" name="passwd" size="12" maxlength="12">
</td>
</tr>
<tr>
<td align="left" valign="center">제 목 </td>
<td align="left">
<input type="text" name="title" size="30" maxlength="30"></td>
</tr>
<tr>
<td align="center" colspan="2">
<textarea name="content" rows="17" cols="75"></textarea></br></font>
</td>
</tr>
</table>
<tr>
<td colspan="2">
<input onclick="send()" value="입력" type="button"><input value="취 소" type="reset">
<input onclick="javascript:(document.location.replace('list.php'));" value="글 목록보기" type="button">
</td>
</tr>
</form>
</div>
</body>
</html>
post.php는 단순히 HTML과 자바스크립트로만 구성이 되어있다.
다음에 나올 save.php에서 실제적으로 DB에 저장한 뒤 list.php로 자동 이동한다. (list.php는 아직 작성하지 않았다.)
<form></form> 태그 사이에 있는 내용이 save.php로 전달될 것이다.
action에 save.php가 있고, 넘기는 방식은 post를 사용한다.
post 방식으로 하면 http 헤더에 같이 내용이 전달되어 넘겨지는 내용이 보이지 않는다.
get 방식으로 하면 주소창에 넘어가는 내용들이 다 보인다.(그리고 길이에 제약이 있다.)
따라서, 외부에 드러나면 안되는 내용이라면 post 방식으로 넘긴다.
하지만 post 방식으로는 <a href=...> 태그로 연결되는 것은 넘길 수가 없기 때문에 get 방식을 사용한다.
<save.php>
<?
//include common functions to connect to DB
include 'db_connect.php';
$title = $_POST[title];
$name = $_POST[name];
$content = $_POST[content];
$passwd = $_POST[passwd];
// get highest number of board
$query = "SELECT main_no FROM board ORDER BY main_no DESC LIMIT 1";
$result = mysql_query($query);
//if it is not the first post, plus 1 on the highest number.
if ($row = mysql_fetch_array($result))
$main_no = $row[main_no]+1;
//if it is the first post...
else
$main_no = 1;
//insert into DB, be aware of inserting order.
$sql = "INSERT INTO board ( main_no, title, name, content, passwd )
VALUES ( $main_no, '$title', '$name', '$content', '$passwd' )";
mysql_query($sql) or dbError(mysql_error());
?>
<html>
<head>
<title>입력 중</title>
<script language="JavaScript">
function send() {
alert("저장되었습니다.");
document.location.replace("list.php");
}
</script>
</head>
<body onload="send()" bgcolor=ffffff>
</body>
</html>
save.php를 보면 맨 앞 줄엔 DB에 연결할 때마다 번거로운 함수들을 별도의 파일로 저장해서 필요할 때마다 불러와 포함시킨다.
그런데 어찌하다보니 post.php에서 작성한 내용이 save.php로 전달되지 않는다.
ASP에서는 request.form() 함수가 있어 내용을 받을 수 있는데, PHP에서는 어떻게 하는지 모르겠다.
며칠을 고생하다 우연히 알았다.
$_POST[] 를 이용해서 post 방식으로 넘겨받은 내용을 가져올 수 있다.
get 방식으로 전달됐다면 $_GET[]으로 받으면 된단다.
깔끔하게 전달된다.
먼저 DB에 저장된 글이 있는지 확인해서 글번호를 가져온다.
있으면 그 번호에 +1을 해서 글번호를 하나씩 증가시킨다.
그리고 최종적으로 INSERT문을 이용해서 DB에 저장한다.
save.php가 처음 실행될 때 자바스크립트 send()가 실행되도록 한다.
<db_connect.php>
<?
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("bbs", $con) or die( "Unable to select database");
?>
'PHP > 게시판 만들기' 카테고리의 다른 글
테이블 구조 변경하기 (0) | 2008.11.12 |
---|---|
글 내용보기 작성 (0) | 2008.11.12 |
글 목록보기 작성 (0) | 2008.11.12 |
데이터베이스 생성하기 (0) | 2008.11.10 |
개념 설계 (0) | 2008.11.05 |