4/18일 수정 내용 --- view_board.php에 작성 중 오류 인 write_error을 추가로 코딩했습니다 맨 밑에 보시면 있습니다
write_process_board.php 내용도 조금 수정했습니다. 수정되면 수정되었습니다
나오게 하게 했습니다.
안녕하세요!
이번엔 전에 만든 게시판에서 자신의 게시물이면 수정이 가능하고 삭제, 검색 기능까지 넣겠습니다.
.
.
.
.
수정 기능부터 만들겠습니다.
새로운 php 파일이 필요하겠네요! 저는 fix_board.php 을 만들겠습니다.
#sudo touch fix_board.php
그리고 수정 버튼을 만들어야 되겠죠!
view_board.php에 로그인 한 사람이랑 작성된 게시물의 ID가 같으면 수정 버튼 생기게 만들겠습니다
while 문 안에다가 넣겠습니다!
//게시물 출력
while($row = mysqli_fetch_assoc($result)) {
echo '<p>ID: '.$row['id'].'</p>';
echo '<p>Title: '.$row['title'].'</p>';
echo '<p>Detail: '.$row['detail'].'</p>';
echo '<p>Date: '.$row['date'].'</p>';
//로그인한 사용자의 정보 가져온다
$user_id = $_SESSION['login_id'];
//게시물 작성자와 로그인한 ID와 일치한 경우
if($row['id'] == $user_id) {
//게시물 수정 버튼을 보여준다
echo "<form method='POST' action='fix_board.php'>
<input type='hidden' name='board_id' value='".$row['board_id']."'>
<button type='submit'>게시물 수정</button>
</form>";
}
}
input 타입 hidden 형식에 board_Id을 보냈습니다.
한번 확인해보겠습니다
이제 fix_board.php로 가겠습니다
write_board.php을 가져 와서 조금 수정하겠습니다!
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>게시판 수정 중</title>
</head>
<body>
<?php
session_start(); //세션 시작
if(!isset($_SESSION['login_id'])) {
//로그인하지 않은 사용자
header("Location: login.php"); //login 화면으로 바꾼다
exit(); //이 페이지를 바로 닫는다
}
$index = $_POST['board_id'];
?>
<form action="write_process_board.php" method="POST">
<p><input type="text" name="title" maxlegth="44" placeholder="제목 입력, 최대 44자까지 가능합니다"></p>
<p><textarea name="detail" rows="20" cols="20" maxlength="254" placeholder="내용 작성,최대 254자 가능합니다"></textarea></p>
<p><input type="submit" value="올리기"></p>
</form>
<?php
echo '<p><a href="view_board.php?index='.$index.'">수정</p>';
?>
<p>
<?php session_start();
if (isset($_SESSION['write_error'])) {
echo $_SESSION['write_error'];
unset($_SESSION['write_error']);
}
?>
</p>
</body>
</html>
POST로 보내진 board_id를 board_id으로 저장하고 수정에 URL에 'index=$board_id' 보내게 했습니다!
이렇게 하는 이유는 수정하기 누르면 바로 수정된 게시물을 보게 하기 위함입니다.
.
.
.
이제 저희는 중간에 있는 form에 있는 코드를 고치면 되겠죠
board_id 을 알고 있으니 저는 데이터베이스 통해 가져오겠습니다.
include 'DB_INFO.php'; //데이터 베이스 정보
//데이터베이스 연결
$conn = mysqli_connect($host,$username,$password,$db_board);
//데이터베이스 오류시 종료
if(mysqli_connect_errno()) {
die("데이터 베이스 오류: ". mysqli_connect_error());
}
//POST방식으로 board_id 받기
$board_id = $_POST['board_id'];
//작성된 게시물들 조회 문
$sql = "SELECT * FROM $db_board WHERE board_id = '$board_id' ";
//쿼리문 실행
$result = mysqli_query($conn, $sql);
//결과값 가져오기
$row = mysqli_fetch_assoc($result);
이렇게요
그리고 form에 원래 있던 내용들을 각각 출력하고 write_process_board.php 보낼때 board_id 값도 같이 보내겠습니다!
<form action="write_process_board.php" method="POST">
<p><input type="text" name="title" maxlength="44" value="<?php echo $row['title']; ?>" placeholder="제목 입력, 최대 44자까지 가능합니다"></p>
<p><textarea name="detail" rows="20" cols="20" maxlength="254" placeholder="내용 작성,최대 254자 가능합니다"><?php echo $row['detail']; ?></textarea></p>
<p><input type="submit" value="수정하기"></p>
<input type="hidden" name='board_id' value="<?php echo $row['board_id']; ?>">
</form>
이렇게요
그리고 수정하는 것은 sql문에 update을 써야만 합니다
그러니 write_process_board.php의 코드를 수정하겠습니다
우선 post로 보내어진 board_id을 받습니다
//POST로 전달된 정보 받기
if(isset($_POST['board_id'])){
$board_id = mysqli_real_escape_string($conn,$_POST['board_id']);
} else {
$board_id = null; //board_id가 없으면 null로 지정
}
$title = mysqli_real_escape_string($conn,$_POST['title']);
$detail = mysqli_real_escape_string($conn,$_POST['detail']);
이렇게 추가해서 수정합니다
그리고 if else 이용해서 수정인지 추가인지 구별하고 sql문을 작성하겠습니다
if(isset($board_id)) {
//board_id가 있다는 것은 수정을 의미
$sql = "UPDATE $db_board SET title = '$title', detail='$detail' WHERE board_id='$board_id' ";
}
else {
//board_id가 없으니 새로 만드는 sql문
$sql = "INSERT INTO $db_board (id, title, detail) VALUES ('$user_id', '$title', '$detail')";
}
이렇게요
됬습니다! 수정은 이렇게 하고 실행해보겠습니다
그리고 나가서 확인을 하면
이대로 하면 좋긴 한데 그래도 조금 수정하겠습니다.
만약 수정을 한다면 바로 수정된 게시판을 볼 수 있게 코딩을 하겠습니다.
//sql문 실행
if(mysqli_query($conn,$sql)) {
//수정인 경우 바로 게시판 보이게 함
if(isset($board_id)) {
$_SESSION['write_error'] = '수정되었습니다!';
header("Location: view_board.php?index=$board_id");
}
else {
$board_id = mysqli_insert_id($conn); // 새로 생성한 게시물의 id를 가져옴
$_SESSION['write_error'] = '작성되었습니다!';
header("Location: view_board.php?index=$board_id");
}
} else {
$_SESSION['write_error'] = '작성 중 오류가 발생하였습니다.';
header("Location: view_board.php");
}
이렇게 하면 되겠죠
실행 해보겠습니다
좋습니다! 이렇게 해서 수정하기를 마치겠습니다
.
.
.
.
.
그 다음으로 게시판 삭제 기능을 넣겠습니다.
마찬가지로 로그인 한 사람과 게시물의 ID가 같으면 삭제 버튼이 보이게 하겠습니다.
그러니 view_board.php 에 추가 코딩 하겠습니다!
//게시물 작성자와 로그인한 ID와 일치한 경우
if($row['id'] == $user_id) {
//게시물 수정 버튼을 보여준다
echo "<form method='POST' action='fix_board.php'>
<input type='hidden' name='board_id' value='".$row['board_id']."'>
<p><button type='submit'>게시물 수정</button></p>
</form>";
//게시물 삭제 버튼을 보여준다
echo "<form method='POST' action='delete_board.php'>
<input type='hidden' name='board_id' value='".$row['board_id']."'>
<p><button type='submit'>삭제</button></p>
</form>";
}
그리고 삭제 해주는 php을 또 만들겠습니다.
#sudo touch delete_board.php
그리고 오로지 삭제만 하면 되니 그냥 php 구문만 만들겠습니다.
일단 session과 데이터베이스 연결을 하겠습니다.
그러고 난뒤에 POST값을 받고 sql 문을 작성하면 되겠죠!
<?php
include 'DB_INFO.php'; //데이터 베이스 정보
session_start(); //세션 시작
if(!isset($_SESSION['login_id'])) {
//로그인하지 않은 사용자
header("Location: login.php"); //login 화면으로 바꾼다
exit(); //이 페이지를 바로 닫는다
}
//게시판 데이터베이스 연결
$conn = mysqli_connect($host,$username,$password, $db_board);
//데이터베이스 오류시 종료
if(mysqli_connect_errno()) {
die("데이터 베이스 오류: ". mysqli_connect_error());
}
//POST로 전달된 정보 받기
$board_id = mysqli_real_escape_string($conn,$_POST['board_id']);
//session으로 유저 이름 받기
$user_id = $_SESSION['login_id'];
//삭제용 sql문 작성
$sql = "DELETE FROM $db_board WHERE board_id=$board_id";
//실행
if(mysqli_query($conn,$sql)) {
//실행 후 게시판으로 이동
header("Location: board.php");
} else {
//오류 발생 시 메시지 호출
$_SESSION['write_error'] = '삭제하는데 실패했습니다! 조금 있다 하십시오';
header("Location: view_board.php");
}
exit();
?>
이렇게요
한번 실행해보곘습니다
좋아요 이렇게 삭제 기능을 마치겠습니다.
.
.
.
.
.
.
.
.
다음으로 검색 기능을 넣겠습니다.
board.php에서 검색 기능을 넣으면 되겠죠!
일단 text박스을 만들고
<form method ="POST" action="board.php">
<input type = "text" name="search" placeholder="검색">
<input type="submit" value="검색">
</form>
그리고 if와 isset으로 검색이 된 경우을 구별하겟습니다
그리고 sql문 저장
//검색이 입력된 경우
if(isset($_POST['search']) && !empty($_POST['search'])) {
$search = mysqli_real_escape_string($conn, $_POST['search']);
$sql = "SELECT board_id,id,title FROM $db_board WHERE title LIKE '%$search%'";
}
LIKE는 뒤에 이 문자가 포함 되어 있으면 전부 검색 되게 하는 겁니다!
%가 아무 문자을 뜻 합니다. 즉 %$search%는 앞 뒤로 아무 문자 와도 $search가 포함 되면 검색되게 하는 겁니다
그리고 실행 해보겠습니다!
.
.
.
이렇게 게시판 작성에 추가를 했습니다.
다음엔 게시판 페이징도 추가 하겠습니다!
이렇게 글을 마치겠습니다 감사합니다!
.
.
.
.
.
-board.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome!</title>
</head>
<body>
<h1>MENU</h1>
<form method ="POST" action="board.php">
<input type = "text" name="search" placeholder="검색">
<input type="submit" value="검색">
</form>
<p>
<?php
include 'DB_INFO.php'; //데이터 베이스 정보
//데이터베이스 연결
$conn = mysqli_connect($host,$username,$password,$db_board);
//데이터베이스 오류시 종료
if(mysqli_connect_errno()) {
die("데이터 베이스 오류: ". mysqli_connect_error());
}
session_start(); //세션 시작
if(!isset($_SESSION['login_id'])) {
//로그인하지 않은 사용자
header("Location: login.php"); //login 화면으로 바꾼다
exit(); //이 페이지를 바로 닫는다
}
//작성된 게시물들 조회 문
$sql = "SELECT board_id,id,title FROM $db_board";
//검색이 입력된 경우
if(isset($_POST['search']) && !empty($_POST['search'])) {
$search = mysqli_real_escape_string($conn, $_POST['search']);
$sql = "SELECT board_id,id,title FROM $db_board WHERE title LIKE '%$search%'";
}
//쿼리문 실행
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0) {
//게시물 출력
while($row = mysqli_fetch_assoc($result)) {
$index = $row['board_id'];
$id = $row['id'];
$title = $row['title'];
echo '<p><a href="view_board.php?index='.$index.'">'.$title.'</a> : '.$id.'작성함</p>';
}
} else {
echo "게시물이 없습니다!";
}
?>
</p>
<p></p>
<form action="write_board.php" method="POST">
<p><input type="submit" name="write" value="게시판 작성"></p>
</form>
<form action="only_login.php">
<p><input type="submit" value="메인페이지로"></p>
</form>
</body>
</html>
-view_board.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>게시물 보는중</title>
</head>
<body>
<p>
<?php
include 'DB_INFO.php'; //데이터 베이스 정보
//데이터베이스 연결
$conn = mysqli_connect($host,$username,$password,$db_board);
//데이터베이스 오류시 종료
if(mysqli_connect_errno()) {
die("데이터 베이스 오류: ". mysqli_connect_error());
}
session_start(); //세션 시작
if(!isset($_SESSION['login_id'])) {
//로그인하지 않은 사용자
header("Location: login.php"); //login 화면으로 바꾼다
exit(); //이 페이지를 바로 닫는다
}
//GET방식으로 전달된 index 받는다
$board_id = $_GET['index'];
//작성된 게시물들 조회 문
$sql = "SELECT * FROM $db_board WHERE board_id = '$board_id' ";
//쿼리문 실행
$result = mysqli_query($conn, $sql);
//게시물 출력
while($row = mysqli_fetch_assoc($result)) {
echo '<p>ID: '.$row['id'].'</p>';
echo '<p>Title: '.$row['title'].'</p>';
echo '<p>Detail: '.$row['detail'].'</p>';
echo '<p>Date: '.$row['date'].'</p>';
//로그인한 사용자의 정보 가져온다
$user_id = $_SESSION['login_id'];
//게시물 작성자와 로그인한 ID와 일치한 경우
if($row['id'] == $user_id) {
//게시물 수정 버튼을 보여준다
echo "<form method='POST' action='fix_board.php'>
<input type='hidden' name='board_id' value='".$row['board_id']."'>
<p><button type='submit'>게시물 수정</button></p>
</form>";
//게시물 삭제 버튼을 보여준다
echo "<form method='POST' action='delete_board.php'>
<input type='hidden' name='board_id' value='".$row['board_id']."'>
<p><button type='submit'>삭제</button></p>
</form>";
}
}
?>
</p>
<p>
<?php session_start();
if (isset($_SESSION['write_error'])) {
echo $_SESSION['write_error'];
unset($_SESSION['write_error']);
}
?>
</p>
<p></p>
<form action="write_board.php" method="POST">
<p><input type="submit" name="write" value="게시판 작성"></p>
</form>
<form action="board.php">
<p><input type="submit" value="메인페이지로"></p>
</form>
</body>
</html>
-fix_board.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>게시판 수정 중</title>
</head>
<body>
<?php
include 'DB_INFO.php'; //데이터 베이스 정보
//데이터베이스 연결
$conn = mysqli_connect($host,$username,$password,$db_board);
//데이터베이스 오류시 종료
if(mysqli_connect_errno()) {
die("데이터 베이스 오류: ". mysqli_connect_error());
}
session_start(); //세션 시작
if(!isset($_SESSION['login_id'])) {
//로그인하지 않은 사용자
header("Location: login.php"); //login 화면으로 바꾼다
exit(); //이 페이지를 바로 닫는다
}
//POST방식으로 board_id 받기
$board_id = $_POST['board_id'];
//작성된 게시물들 조회 문
$sql = "SELECT * FROM $db_board WHERE board_id = '$board_id' ";
//쿼리문 실행
$result = mysqli_query($conn, $sql);
//결과값 가져오기
$row = mysqli_fetch_assoc($result);
?>
<form action="write_process_board.php" method="POST">
<p><input type="text" name="title" maxlength="44" value="<?php echo $row['title']; ?>" placeholder="제목 입력, 최대 44자까지 가능합니다"></p>
<p><textarea name="detail" rows="20" cols="20" maxlength="254" placeholder="내용 작성,최대 254자 가능합니다"><?php echo $row['detail']; ?></textarea></p>
<p><input type="submit" value="수정하기"></p>
<input type="hidden" name='board_id' value="<?php echo $row['board_id']; ?>">
</form>
<p>
<?php session_start();
if (isset($_SESSION['write_error'])) {
echo $_SESSION['write_error'];
unset($_SESSION['write_error']);
}
?>
</p>
</body>
</html>
-delete_board.php
<?php
include 'DB_INFO.php'; //데이터 베이스 정보
session_start(); //세션 시작
if(!isset($_SESSION['login_id'])) {
//로그인하지 않은 사용자
header("Location: login.php"); //login 화면으로 바꾼다
exit(); //이 페이지를 바로 닫는다
}
//게시판 데이터베이스 연결
$conn = mysqli_connect($host,$username,$password, $db_board);
//데이터베이스 오류시 종료
if(mysqli_connect_errno()) {
die("데이터 베이스 오류: ". mysqli_connect_error());
}
//POST로 전달된 정보 받기
$board_id = mysqli_real_escape_string($conn,$_POST['board_id']);
//session으로 유저 이름 받기
$user_id = $_SESSION['login_id'];
//삭제용 sql문 작성
$sql = "DELETE FROM $db_board WHERE board_id=$board_id";
//실행
if(mysqli_query($conn,$sql)) {
//실행 후 게시판으로 이동
header("Location: board.php");
} else {
//오류 발생 시 메시지 호출
$_SESSION['write_error'] = '삭제하는데 실패했습니다! 조금 있다 하십시오';
header("Location: view_board.php");
}
exit();
?>
-write_process_board.php
<?php
include 'DB_INFO.php'; //데이터 베이스 정보
session_start(); //세션 시작
if(!isset($_SESSION['login_id'])) {
//로그인하지 않은 사용자
header("Location: login.php"); //login 화면으로 바꾼다
exit(); //이 페이지를 바로 닫는다
}
//게시판 데이터베이스 연결
$conn = mysqli_connect($host,$username,$password, $db_board);
//데이터베이스 오류시 종료
if(mysqli_connect_errno()) {
die("데이터 베이스 오류: ". mysqli_connect_error());
}
//POST로 전달된 정보 받기
if(isset($_POST['board_id'])){
$board_id = mysqli_real_escape_string($conn,$_POST['board_id']);
} else {
$board_id = null;
}
$title = mysqli_real_escape_string($conn,$_POST['title']);
$detail = mysqli_real_escape_string($conn,$_POST['detail']);
if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_FILES['file'])) {
// 업로드된 파일 정보 가져오기
$file_name = $_FILES['file']['name'];
$timestamp = time(); // 현재 시간을 초로 반환
$new_file_name = $timestamp . '_' . $file_name; // 현재 시간과 원래 파일 이름을 합쳐 새로운 파일 이름 생성
$file_tmp_name = $_FILES['file']['tmp_name'];
$file_size = $_FILES['file']['size'];
$file_error = $_FILES['file']['error'];
$allowed_mime_types = ['image/jpeg', 'image/png', 'image/gif','txt','zip','hwp','word']; //MIME 허락 된 것
// 파일 업로드가 정상적으로 처리되었는지 확인
if ($file_error === UPLOAD_ERR_OK) {
// 파일 MIME 타입 확인
$file_mime_type = mime_content_type($file_tmp_name);
if (in_array($file_mime_type, $allowed_mime_types)) {
// 파일 저장 경로
$upload_path = '/path/to/upload/directory/' . $new_file_name;
// 파일 이동 및 저장
if (move_uploaded_file($file_tmp_name, $upload_path)) {
echo '파일 업로드 성공';
} else {
echo '파일 업로드 실패';
}
} else {
echo '잘못된 파일 형식입니다';
}
} else {
echo '파일 업로드 실패';
}
}
//session으로 유저 이름 받기
$user_id = $_SESSION['login_id'];
echo $board_id;
if(isset($board_id)) {
//board_id가 있다는 것은 수정을 의미
$sql = "UPDATE $db_board SET title = '$title', detail='$detail' WHERE board_id='$board_id' ";
}
else {
//board_id가 없으니 새로 만드는 sql문
$sql = "INSERT INTO $db_board (id, title, detail) VALUES ('$user_id', '$title', '$detail')";
}
//sql문 실행
if(mysqli_query($conn,$sql)) {
//수정인 경우 바로 게시판 보이게 함
if(isset($board_id)) {
$_SESSION['write_error'] = '수정되었습니다!';
header("Location: view_board.php?index=$board_id");
}
else {
$board_id = mysqli_insert_id($conn); // 새로 생성한 게시물의 id를 가져옴
$_SESSION['write_error'] = '작성되었습니다!';
header("Location: view_board.php?index=$board_id");
}
} else {
$_SESSION['write_error'] = '작성 중 오류가 발생하였습니다.';
header("Location: view_board.php");
}
exit();
?>
'개발과제' 카테고리의 다른 글
[노말틱 모의 해킹 취업반 8주차 개발과제 ] 게시판 만들기(4) - 파일 업로드 (0) | 2023.04.18 |
---|---|
[노말틱 모의 해킹 취업반 7주차 개발과제 ] 게시판 만들기(3) - 페이징 (0) | 2023.04.17 |
[노말틱 모의 해킹 취업반 5주차 개발과제 ] 게시판 만들기(1) - 리스트 확인, 읽기, 쓰기 (0) | 2023.04.13 |
[노말틱 모의 해킹 취업반 4주차 개발과제 (2/2)] 회원가입 만들기-2 (0) | 2023.04.12 |
[노말틱 모의 해킹 취업반 4주차 개발과제 (2/2)] 회원가입 만들기 (0) | 2023.04.11 |