🔎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">제출 »</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