[웹개발] 게시판 만들기

CHIKA·2024년 5월 14일

웹개발

목록 보기
5/9

📌글쓰기

🔎write.php

<main class="container">
  <div class="bg-body-tertiary p-5 rounded">

    <form action= "write_proc.php" method="post">
    <div class="mb-3">
    <label>제목</label>
    <input class="form-control" name="write_title" placeholder="제목을 입력하세요.">
    </div>

    <div class="mb-3">
    <label>내용</label>
    <textarea class="form-control" name ="write_content" rows="10" placeholder="내용을 입력하세요."></textarea>
    </div>
    <button type="submit" class="btn btn-success">제출 &raquo;</button>

    </form>
  </div>

</main>

🔎write_proc.php

<?php 
require("nVtop.php");
require("DB_conn.php");
$title = $_POST['write_title'];
$content = $_POST['write_content'];
$id = $_SESSION['username'];

// 데이터베이스에 글 추가
$sql= "INSERT INTO post_table(title,content,id) VALUES ('$title','$content','$id')";

$result = $conn->query($sql);
if ($result === TRUE) {
    echo '<script>alert("글이 성공적으로 등록되었습니다.");</script>';
    
} else {
    echo "오류: " . $sql . "<br>" . $conn->error;
}

// 데이터베이스 연결 닫기
$conn->close();

?>

<?php require("nVbottom.php");?>
<script>location.href = 'list.php';</script>

파일마다 복붙하려니 길고 불편해서 navvar,DB_conn 등을 나눠서 저장했다.
PHP에서 다른 파일을 현재 파일에 포함시키는 명령어를 알아보자.

📚현재 파일에 다른파일을 포함시키는 명령어
• include : 경고표시만 하고 계속 스크립트 실행.
• require :오류(Fatal error)를 발생시키고 중단 시킴.
• include_once, require_once : 포함하는 파일들이 현재 파일에 이미 포함되어 있는지를 파악해서 불러올 파일이 한 번만 포함되도록 해줌.

필자는 필수 파일들을 나눠놓은 것이라 require를 사용하였다.

write.php로부터 POST로 제목, 내용 값을 가져온다
post_table에 제목,내용,아이디를 insert 문을 이용해 저장할 것이다.

📚INSERT문

INSERT INTO 테이블명(컬럼1,컬럼2...) VALUES ('값1','값2'...)";

데이터베이스에 값이 들어가면 alert창으로 글이 등록되었음을 알려준다.

글이 등록되고 list.php로 넘어간다.

글이 제대로 저장되었다.

📢참고로 header(”location:list.php”)를 사용하면 script의 alert가 출력되지 않는다.
alert를 출력하고 싶으면 header대신 location.href 을 이용하자.

📚location.href

<script>location.href = '#';</script>

📌게시글 리스트 보기

🔎list.php

<?php
require("nVtop.php");
require("DB_conn.php");
$sql = mq("select * from post_table order by idx desc limit 0,10");

?>

<table class="table table-hover">
    <thead>
        <tr>
            <th scope="col">#</th>
            <th scope="col">제목</th>
            <th scope="col">글쓴이</th>
            <th scope="col">날짜</th>
        </tr>
    </thead>
    <tbody>
        <?php
        while ($board = $sql->fetch_array()) {
            //title변수에 DB에서 가져온 title을 선택
            $title = $board["title"];
            if (strlen($title) > 30) {
                //title이 30을 넘어서면 ...표시
                $title = str_replace($board["title"], mb_substr($board["title"], 0, 30, "utf-8") . "...", $board["title"]);
            }
        ?>
            <tr>
                <td><?php echo $board['idx']; ?></td>
                <td><a href="read.php?idx=<?php echo $board["idx"];?>
" class="text-reset text-decoration-none"><?php echo $title; ?></a></td>
                <td><?php echo $board['id']; ?></td>
                <td><?php echo $board['date']; ?></td>
            </tr>
        <?php } ?>
    </tbody>
</table>

</main>
<?php require("nVbottom.php");?>

select문 : post_table에서 idx내림차순으로 10개를 출력
while로 테이블의 행이 끝날 때까지 반복실행한다.

📌게시글보기

🔎read.php

<?php
require("nVtop.php");
require("DB_conn.php");

function mq($sql)
    {
    global $conn;
    return $conn->query($sql);
    }
    
$bno = $_GET['idx']; /* bno함수에 idx값을 받아와 넣음*/
	$sql = mq("select * from post_table where idx='".$bno."'"); /* 받아온 idx값을 선택 */
	$board = $sql->fetch_array();

?>

<!-- Page content-->
<main class="container">
<div class="bg-body-tertiary p-5 rounded">
    <div class="container mt-5">
        <div class="row">
        <div class="col-md-6">
        <!-- Post content-->
            <article>
            <!-- Post header-->
                <header class="mb-4">
                <!-- Post title-->
                    <h1 class="fw-bolder mb-1"><?php echo $board['title']; ?></h1>
                    <!-- Post meta content-->
                    <div class="text-muted fst-italic mb-2"><?php echo $board['date']; ?> 작성자: <?php echo $board['id']; ?> </div>

                </header>
                <!-- Post content-->

                <section class="mb-5">
                <?php echo nl2br("$board[content]"); ?>
                </section>

            </article>
    </div>
</div>
</div>
   
    <div class="d-grid gap-2 d-md-flex justify-content-md-end">
    <a class="btn btn-sm btn-success" href="modify.php?idx=<?= $bno?>" role="button" 
>수정</a>
    <a class="btn btn-sm btn-outline-success " href="delete.php?idx=<?= $bno?>" role="button" >삭제</a>
    
    </div>  
    </div>         
</div> 
</main>

idx값을 GET으로 받아와서 테이블의 같은 idx값을 가지는 행을 선택하여
선택한 행의 제목과 내용을 출력한다.
nl2br: 새로운 줄을 표시하는 기호를 HTML에서 인식할 수 있도록 br 태그로 변환해주는 역할.

📌게시글수정

수정전

🔎modify.php

<?php 
require("nVtop.php");
require("DB_conn.php");

function mq($sql)
    {
    global $conn;
    return $conn->query($sql);
    }

    $bno = $_GET['idx']; /* bno함수에 idx값을 받아와 넣음*/
	$sql = mq("select * from post_table where idx='".$bno."'"); /* 받아온 idx값을 선택 */
	$board = $sql->fetch_array();
    ?>

<main class="container">
  <div class="bg-body-tertiary p-5 rounded">

    <form action="modify_proc.php?idx=<?php echo $bno; ?>" method="post"
>
    <div class="mb-3">
    <label>제목</label>

    <input class="form-control" name= "write1_title" value="<?=$board['title']?>">
   
    
    </div>

    <div class="mb-3">
    <label>내용</label>
    <textarea class="form-control" name ="write1_content" rows="10"><?=$board['content']?></textarea>
    </div>
    
    <button type="submit" class="btn btn-sm btn-success" name="submit" value="modify">수정</button>
    </form>
  </div>

  
</main>

<?php require("nVbottom.php");?>

read.php와 동일하게 GET으로 idx를 받아 idx값이 같은 행을 찾는다.
수정전의 제목과 내용을 칸에 입력해놓는다.

수정후

🔎modify_proc.php


<?php
require("nVtop.php");
require("DB_conn.php");
$title = $_POST['write1_title'];
$content = $_POST['write1_content'];
$bno = $_GET['idx']; /* bno함수에 idx값을 받아와 넣음*/



$sql = "update post_table set title='".$title."',content='".$content."' where idx='".$bno."'"; 

$result = $conn->query($sql);

if ($result === TRUE) {
    echo '<script>alert("글이 성공적으로 수정되었습니다.");</script>';
    
} else {
    echo "오류: " . $sql . "<br>" . $conn->error;
}

    
// 데이터베이스 연결 종료
$conn->close();

?>

<?php require("nVbottom.php");?>
<script>location.href = 'list.php';</script>

update문으로 값을 갱신해준다.

📚 UPDATE

UPDATE 테이블명 SET 컬럼1="값1",컬럼2="값2"...;


📌게시글 삭제

🔎delete.php

<?php
require("nVtop.php");
require("DB_conn.php");
$bno = $_GET['idx'];
	$sql = "delete from post_table where idx='$bno'";
    $result = $conn->query($sql);

    if ($result === TRUE) {
        echo '<script>alert("글이 성공적으로 삭제되었습니다.");</script>';
        
    } else {
        echo "오류: " . $sql . "<br>" . $conn->error;
    }
    
        

    // 데이터베이스 연결 종료
    $conn->close(); 

?>
<?php require("nVbottom.php");?>
<script>location.href = 'list.php';</script>

📚delete문

DELETE FROM 테이블명 where 조건;


참고자료
https://blog.naver.com/bgpoilkj/220751401209
https://blog.naver.com/bgpoilkj/220759718278
https://codingeverybody.kr/php-include%EC%99%80-require-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95/
https://blog.naver.com/diceworld/220223672242

0개의 댓글