본문 바로가기
스터디/php

[PHP] '뇌를 자극하는 PHP 프로그래밍' 방명록

by 깝태 2013. 1. 25.


'뇌를 자극하는 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'>이전&nbsp;&nbsp;</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 앱 개발해봐야겠어요 ㅎㅎㅎ