'뇌를 자극하는 PHP 프로그래밍' 책을 보면서 방명록을 만들었습니다. 주석을 달아 소스공개합니당
물론 아직 미완성입니다. 제가 매일 시간을 조금씩밖에 투자하다보니깐ㅠ 바로바로 책 보지않고 필요한부분만 검색하면서 하다가
정답이 안 나오면 책을 보는식으로 공부하다보니 좀 느립니다, 그래도 이렇게 하면 좀 더 감이 빨리와서...ㅎ
소스가 조금 다르고 제껀 변수나 함수나 페이지나 좀 지저분합니다..ㅎ
[ db_info.php ]
<?php
$conn = mysql_connect("localhost", "root", "password"); // 접속합니다.
mysql_select_db("diary", $conn); // 데이터베이스 이름이 'diary' 입니다.
?>
[ index.php ]
<html>
<head><title>Baby</title></head>
<body><center>
<form name="login" action="diary_main.php" method="POST"> // index 페이지에서 로그인을 합니다.
<table border="2">
<tr>
<td><input type="text" name="login_id"></td>
<td><input type="password" name="login_pw"></td>
<td><input type="submit" value="로그인"></td>
</tr>
</table>
</form>
</body>
</html>
[ diary_main.php ]
<?php
include "db_info.php";
include "diary_login_.php";
$querylist = "SELECT * FROM guestbook ORDER BY id desc;"; // 게시글을 오름차순으로 받아와 정렬합니다.
$results = mysql_query($querylist, $conn);
$total = mysql_affected_rows(); // 받아온 쿼리의 총 행 수
//$rows = mysql_fetch_array($results);
$pagesize=3;
$pagestart=0;
?>
<html>
<head><title>다이어리</title></head>
<body>
<form action="diary_write.php" method="POST" name="write"> // 작성 테이블 입니다.
<table border=1>
<tr>
<td align="center">이름</td><td><input type="text" name="name"></td>
<td align="center">비밀번호</td><td><input type="password" name="pass"></td>
<td rowspan="3" align="center"><input type="submit" value="작성"></td>
</tr>
<tr>
<td colspan="4">
<textarea name="content" cols="80" rows="5"></textarea>
</td>
</tr>
</table>
</form>
----------------------------------------------------------------------------------
<br><br>
<?php
for($i=$_GET[no]; $i<$_GET[no] + $pagesize; $i++)
{
if ( $i < $total ) // 여기서 작성한 것과 총 행 수를 비교하여 오류가 나지 않게 합니다.
{
mysql_data_seek($results, $i);
$rows = mysql_fetch_array($results); // 레코드셋을 연관배열 형태로 저장합니다.
?>
<table border="1" width="500" height="60">
<tr height="30">
<td align="center">No. <?=$rows[id]?></td>
<td align="center">작성자 : <?=$rows[name]?></td>
<td rowspan="2" width="50"><center>
<a href="delete.php?id=<?=$rows[id]?>">삭제</a></td> // 삭제하기 위해 id 를 전송합니다.
</center>
</tr>
<tr>
<td align="center" colspan="2"><?=$rows[content]?></td>
</tr>
</table>
<?php
echo "<br>\n";
}
}
$back = $_GET[no] - $pagesize; // 전페이지
$next = $_GET[no] + $pagesize; // 앞페이지 - 이 부분은 어떻게 구현해야될지 몰라 책을 뺏겼습니다..ㅠ-ㅠ
if ($back >=0){
echo "<a href='$_SERVER[PHP_SELF]?no=$prev'>이전 </a>";
}
if ($next < $total){
echo "<a href='$_SERVER[PHP_SELF]?no=$next'>다음</a>";
}
?>
</body>
</html>
[ diary_login_.php ]
<?php
include "db_info.php";
$query = "SELECT count(*) FROM users where login_id = '$_POST[login_id]' && login_pw = '$_POST[login_pw]'";
$result = mysql_query($query, $conn); // 로그인검사 -> 메인페이지에서 인클루드하여 사용함
$row = mysql_fetch_array($result);
if($row[0] == 1)
{
echo "<center><br><br>";
echo "로그인에 성공하셨습니다. $_POST[login_id]님.<br>";
echo "<br><br>";
}
else
{
echo "<center><br><br>";
echo "로그인에 실패하셨습니다. $_POST[login_id]님.<br>";
echo "<br><br>";
}
?>
[ diary_write.php ]
<?php
include "db_info.php";
$query = "INSERT INTO guestbook ( name, pass, content ) VALUES ( '$_POST[name]', '$_POST[pass]', '$_POST[content]' )";
mysql_query($query, $conn); // 작성합니당
?>
<script>
alert("글을 성공적으로 작성하셨습니다.");
location.href = "diary_main.php";
</script>
[ diary_delete.php ]
<?php
include "db_info.php";
$query = "DELETE FROM guestbook WHERE id='$_GET[id]'"; // 앞서서 보냈던 id 데이터를 받아와 삭제합니다.
$result = mysql_query($query, $conn);
?>
<script>
alert("정상적으로 삭제되었..을 겁니다!?");
location.href = "diary_main.php";
</script>
세션을 이용한 로그인 유지 (쿠키는 이미 시도해봄)
이제 필요한건 글이 많을경우 쿼리를 너무 많이 받아오면 무리가 생길 수 있으므로 제한을 두는 기능과
게시글을 삭제할때 비밀번호를 검사하고
게시글을 삭제하면 id 또한 정상적으로 초기화가 되게 하고
디자인을 꾸미고
보안을 다지고
이렇게만 하면 될것같네요, 나머지 보안 쪽 공부는 여러 PHP 워게임 풀어가면서 하면 될것같습니다.
HTML, CSS 는 대충 알고 하니깐 이제 빨리 JSP 공부하는 일만 남았군요... 그나저나 JSP 공부하면 윈도우8 앱 개발해봐야겠어요 ㅎㅎㅎ
'스터디 > php' 카테고리의 다른 글
천 단위 이상의 숫자에 자동으로 쉼표를 붙여주는 함수 (0) | 2015.02.15 |
---|---|
[PHP] 만들고 있는 방명록 (0) | 2013.01.24 |
[SQL] mysql_data_seek() (0) | 2013.01.24 |
[SQL] 헷갈렸던 mysql_affected_rows(), mysql_num_rows() (0) | 2013.01.24 |
[PHP] Warning: World-writable config file '/etc/my.cnf' is ignored 에러 해결방법 (0) | 2013.01.19 |