일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 게시판 검색 기능 구현
- 주소검색기능구현
- Lord of SQLinjection 1
- 게시판 구현
- php 다운로드
- 로그아웃
- 게시판 리스트
- PHP로그아웃
- 우편주소DB
- PHP회원가입
- 우편주소검색
- php #쓰기 #읽기 #수정 #삭제 #게시판
- LOS 3
- 검색 기능
- 다운로드 구현
- gremlin
- LOS 2
- mysqli_fetch_row
- 로그인 기능
- php주소검색기능구현
- mysqli_fetch_assoc
- Goblin
- 간단한 로그인 구현
- Lord of SQLinjection 2
- php
- Lord of SQLinjection 3
- mysqli_fetch_array
- 파일 업로드
- LOS 1
- cobolt
- Today
- Total
ME
[PHP] 게시판 작성, 읽기, 수정, 삭제 구현 본문
글 쓰기
write.php - 기본적인 폼 구현 (회원인지 검사)
write_ok.php - 작성한 내용을 DB에 저장 (회원인지 검사)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1. 글 쓰기 폼 구현
write.php (전체 코드)
<?php
session_start();
if(!isset($_SESSION['uid']) || !isset($_SESSION['name'])) {
echo "<script>alert('비회원입니다!');";
echo "location.replace('list.php');</script>";
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>write</title>
</head>
<body>
<form action="write_ok.php" method="POST">
<table width=800 border="1">
<tr>
<th>제목</th>
<td><input type="text" name="title" style="width:100%;"></td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea name="memo" style="width:100%; height:300px;"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<div style="float:right;">
<input type="submit" value="저장">
</div>
</td>
</tr>
</table>
</form>
</body>
</html>

위 코드를 적용하면 사진 처럼 폼이 구현된다.
설명
<?php
session_start();
if(!isset($_SESSION['uid']) || !isset($_SESSION['name'])) {
echo "<script>alert('비회원입니다!');";
echo "location.replace('list.php');</script>";
exit;
}
?>
로그인을 하지않고 글 작성을 하면 세션을 불러오지 못해 작성자에 들어갈 내용이 비어 버린다.
그러므로 세션을 발급받지 않고 글을 작성하려하면 이용을 할 수 없게 조건문을 적용했다.

로그인 하지않고 글쓰기 버튼을 누르면

경고창이 뜨고 다시 게시판 페이지로 돌아간다.
<!DOCTYPE html>
<html lang="en">
<head>
<title>write</title>
</head>
<body>
<form action="write_ok.php" method="POST">
<table width=800 border="1">
<tr>
<th>제목</th>
<td><input type="text" name="title" style="width:100%;"></td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea name="memo" style="width:100%; height:300px;"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<div style="float:right;">
<input type="submit" value="저장">
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
제목과 내용을 적은 후 저장버튼을 누르면
write_ok.php 로 제목과 내용이
POST 방식으로 보내진다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
2. 글 정보 DB에 저장
write_ok.php (전체 코드)
<?php
include '../db.php';
session_start();
if(!isset($_SESSION['uid']) || !isset($_SESSION['name'])) {
echo "<script>alert('비회원입니다!');";
echo "location.replace('list.php');</script>";
exit;
}
$name = $_SESSION['name'];
$title = $_POST['title'];
$memo = $_POST['memo'];
date_default_timezone_set('Asia/Seoul');
$date = date("Y-m-d H:i:s");
$q = "INSERT INTO board (title, name, memo, date) VALUES ('$title', '$name', '$memo', '$date')";
mysqli_query($conn, $q);
?>
<script>alert("정상적으로 글이 작성되었습니다!");</script>
<script>location.href="list.php";</script>
설명
$name = $_SESSION['name'];
$title = $_POST['title'];
$memo = $_POST['memo'];
date_default_timezone_set('Asia/Seoul');
$date = date("Y-m-d H:i:s");
$q = "INSERT INTO board (title, name, memo, date) VALUES ('$title', '$name', '$memo', '$date')";
mysqli_query($conn, $q);
?>
<script>alert("정상적으로 글이 작성되었습니다!");</script>
<script>location.href="list.php";</script>
$name = 세션에 저장된 이용자의 name.
$title, $memo = 글 작성 페이지에서 작성한 제목과 내용을 POST 방식으로 받아온 데이터.
$date = 현재 날짜 시간.
$q = INSERT 명령어를 사용해서 DB에 정보를 추가.
정상적으로 DB에서 쿼리가 실행되면 글이 작성되고
게시판 페이지로 돌아간다.





11번 번호로 안녕하세요~ 라는 글이 생기고
작성자도 이용자의 name이 정상적으로 적용된걸 확인 할 수 있다
글 읽기
게시판 읽기 기능은 read.php에 폼을 만들고,
파라미터로 idx 번호만 전달 받아
DB에서 해당하는 정보를 불러와 출력하는 거 밖에 없어서 구현이 아주 간단하다.
read.php (전체 코드)
<?php
include '../db.php';
session_start();
$idx = $_GET['idx'];
$q = "SELECT * FROM board WHERE idx='$idx'";
$data = mysqli_query($conn, $q);
$row = mysqli_fetch_array($data);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>read</title>
</head>
<body>
<form action="write_ok.php" method="POST">
<table width=800 border="1" cellpadding=5>
<tr>
<th>작성자</th>
<td><?=$row['name'];?></td>
</tr>
<tr>
<th>제목</th>
<td><?=$row['title']?></td>
</tr>
<tr>
<th>내용</th>
<td><?=nl2br($row['memo'])?></td>
</tr>
<?php
if($_SESSION['name'] == $row['name']) { ?>
<tr>
<td colspan="2">
<div style="float:right;">
<a href="delete.php?idx=<?=$idx?>" onclick="return confirm('정말 삭제할까요?')">삭제</a>
<a href="update.php?idx=<?=$idx?>">수정</a>
</div>
<a href="list.php">목록</a>
</td>
</tr>
<?php } else { ?>
<tr>
<td colspan="2">
<a href="list.php">목록</a>
</td>
</tr>
<?php } ?>
</table>
</form>
</body>
</html>

위 코드를 적용하면 사진 처럼 폼이 구현된다.
설명
$idx = $_GET['idx'];
게시판 번호를 GET 방식으로 받아온다.
$q = "SELECT * FROM board WHERE idx='$idx'";
board 테이블에 있는 idx 컬럼이 $idx 와 같으면 해당하는 정보를 전부 조회한다.
<?php
if ($_SESSION['name'] == $row['name']) { ?>
<tr>
<td colspan="2">
<div style="float:right;">
<a href="delete.php?idx=<?=$idx?>" onclick="return confirm('정말 삭제할까요?')">삭제</a>
<a href="update.php?idx=<?=$idx?>">수정</a>
</div>
<a href="list.php">목록</a>
</td>
</tr>
<?php } else { ?>
<tr>
<td colspan="2">
<a href="list.php">목록</a>
</td>
</tr>
<?php } ?>
DB에 저장된 name과 이용자의 name이 같으면
목록, 삭제, 수정 버튼이 생기게 만들어 줬고,
같지 않다면 목록 버튼만 생기게 만들어 줬다.


삭제 수정버튼이 있다.

삭제 수정 버튼이 없다.
글 수정
update.php - 폼 구현
update_ok.php - DB 정보 업데이트
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1. 글 수정 폼 구현
update.php (전체 코드)
<?php
include '../db.php';
$idx = $_GET['idx'];
$q = "SELECT * FROM board WHERE idx='$idx' ";
$data = mysqli_query($conn, $q);
$row = mysqli_fetch_array($data);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>update</title>
</head>
<body>
<form action="update_ok.php" method="POST">
<input type="hidden" name='idx' value="<?=$idx?>">
<table width=800 border="1">
<tr>
<th>제목</th>
<td><input type="text" name="title" style="width:100%;" value="<?=$row['title']?>"></td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea name="memo" style="width:100%; height:300px;" ><?=nl2br($row['memo'])?></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<a href="list.php">목록</a>
<div style="float:right;">
<input type="submit" value="저장">
</div>
</td>
</tr>
</table>
</form>
</body>
</html>

위 코드를 적용하면 사진 처럼 폼이 구현된다.
설명
$idx = $_GET['idx'];
게시판 번호를 GET 방식으로 받아온다.
$q = "SELECT * FROM board WHERE idx='$idx' ";
$q = board 테이블에 있는 idx 컬럼이 $idx 와 일치하면 해당하는 정보를 전부 조회한다.
<form action="update_ok.php" method="POST">
<input type="hidden" name='idx' value="<?=$idx?>">
GET방식으로 받아온
idx를 form 태그 를 이용해서 POST 방식으로 넘겨 줄 수 있다.
input 태그의 type을 hidden으로 설정해서 보이지 않게 받아줄 수 있다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
2. DB Update
update.php (전체 코드)
<?php
include '../db.php';
session_start();
$idx = $_POST['idx'];
$title = $_POST['title'];
$name = $_SESSION['name'];
$memo = $_POST['memo'];
$date = date("Y-m-d H:i:s");
$q = "UPDATE board SET title = '$title',
name = '$name',
memo = '$memo'
WHERE idx = '$idx' ";
mysqli_query($conn, $q);
?>
<script>alert("정상적으로 글이 수정되었습니다.");</script>
<script>location.href="list.php";</script>
설명
$idx = $_POST['idx'];
$title = $_POST['title'];
$name = $_SESSION['name'];
$memo = $_POST['memo'];
$date = date("Y-m-d H:i:s");
$q = "UPDATE board SET title = '$title',
name = '$name',
memo = '$memo'
WHERE idx = '$idx' ";
mysqli_query($conn, $q);
$idx = POST 방식으로 넘겨 받은 idx.
$title, $memo = 글 수정 페이지에서 작성한 제목과 내용.
$name = 이용자의 name.
$date = 현재 날짜 시간.
$q = UPDATE 명령어로 DB 정보 수정.
정상적으로 DB에서 쿼리가 실행되면 글이 수정되고
게시판 페이지로 돌아간다





글 삭제
delete.php (전체 코드)
<?php
include '../db.php';
session_start();
if(!isset($_SESSION['uid']) && !isset($_SESSION['name'])) {
echo "<script>alert('비회원입니다!');";
echo "location.replace('list.php');</script>";
exit;
}
$idx = $_GET['idx'];
$q = "DELETE FROM board WHERE idx = '$idx' ";
$data = mysqli_query($conn, $q);
?>
"<script>alert('정상적으로 글이 삭제되었습니다.');</script>";
"<script>location.href='list.php';</script>";
설명
if(!isset($_SESSION['uid']) && !isset($_SESSION['name'])) {
echo "<script>alert('비회원입니다!');";
echo "location.replace('list.php');</script>";
exit;
}
URL 에 직접 주소를 치고 들어오면 삭제가 가능하기에
직접 접속을 해도 회원이 아니면 접근을 못하게 조건문을 적용했다.
$idx = $_GET['idx'];
$q = "DELETE FROM board WHERE idx = '$idx' ";
GET 방식으로 idx를 받고,
board 테이블에 있는 idx 와 $idx 가 일치하면 관련 정보를 삭제한다.
read.php (일부코드)
<a href="delete.php?idx=<?=$idx?>" onclick="return confirm('정말 삭제할까요?')">삭제</a>
confirm() 함수로 사용자가 실수로 누를 수 있기에 한번 더 물어보게 만들었다.



'웹개발 > PHP' 카테고리의 다른 글
[PHP] 게시판 업로드 기능 구현 (0) | 2023.01.06 |
---|---|
[PHP] 게시판 검색 기능 구현 (0) | 2023.01.01 |
[PHP] 게시판 리스트 구현 (0) | 2022.12.28 |
주소 검색 구현 [1] - 우편주소 DB 저장 (0) | 2022.12.12 |
[PHP] 회원가입, 로그아웃 기능 구현 (0) | 2022.10.26 |