ME

[PHP] 게시판 작성, 읽기, 수정, 삭제 구현 본문

웹개발/PHP

[PHP] 게시판 작성, 읽기, 수정, 삭제 구현

본캐 2022. 12. 29. 08:00

 

글 쓰기

더보기

 

 

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에서 쿼리가 실행되면 글이 작성되고 

 

게시판 페이지로 돌아간다.

 

 

 

 

 

 

 

 

test444 / test444 로그인

 

 

 

 

게시판 페이지

 

 

 

 

글 작성

 

 

 

 

정상적으로 글 작성 완료

 

 

 

 

게시판 확인

 

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() 함수로 사용자가 실수로 누를 수 있기에 한번 더 물어보게 만들었다.

 

 

 

 

읽기 페이지

 

 

 

삭제 중

 

 

 

삭제

 

 

 

Comments