Hugh_휴 님의 블로그
웹 프로그래밍 - 데이트 코스 만들기3(Apache+PHP+MariaDB) 본문
<웹 프로그래밍 과제 기준>
이번 블로그에서는 아래의 기준 중 5번까지 진행한 내용을 담고 있다.
1) login.html => login_check.php 연동 후 DB내의 kisec / kisec123와 검증
2) board_write.php 구현하기
저장 버튼 -> 게시글 저장
취소 버튼 -> board_list.php 페이지로 돌아가기
3) board_list.php 구현하기
게시글 작성 버튼 구현 -> board_write.php
특정 게시글 열기 기능 구현(게시글 제목 클릭 시) -> board_view.php
4) board_view.php 구현하기
특정 게시글 열었을 때 해당 게시글 보여주도록 구현
게시글 수정 버튼 -> board_update.php
게시글 삭제 버튼 -> board_delete.php
5) board_update.php 구현하기
특정 게시글 수정 기능 구현
수정 버튼 / 취소 버튼 구현
6) board_delete.php 구현하기
특정 게시글 삭제 기능 구현
7) 맛집 리스트 DB와 연동하기
우선 MariaDB 데이터베이스 생성 및 테이블을 생성한다. (수업에서는 조금 다르게 했다.)
$mysql -u root -p
MariaDB[(none)]> create database sch;
MariaDB[(sch_]> show databases;
MariaDB[(sch_]> use sch;
MariaDB[(sch_]> create table login (idx int not null auto_increment primary key,
-> id varchar(20), pw varchar(20));
MariaDB[(sch_]> show tables;
MariaDB[(sch_]>insert into login (id, pw) values ("sch", "sch123"), ("kisec", "kisec123"), ("admin", "toor");
MariaDB[(sch_]> select * from login;
<sudo vi /var/www/html/test.php>
: 화면을 띄운다.
$sudo vi /var/www/html/test.php
<?php
include "db_conn.php";
// DB 연결 설정 파일
$query = "select * from login";
// login 테이블의 모든 컬럼 데이터를 선택함
$result = mysqli_query($conn, $query);
// 작성한 SQL 명령을 실제로 DB 서버에 전송, 실행
$re_cnt = mysqli_num_rows($result);
// 결과물에 담긴 전체 데이터 행 개수를 확인함
if($re_cnt > 0) {
// 가져온 데이터가 1개 이상 존재할 경우에만 실행
while($row = mysqli_fetch_array($result)) {
// 데이터를 한 행씩 가져와서 배열 형태로 $row 변수에 담음 (데이터가 없을 때까지 반복)
echo "<br>Num.", $row['idx'];//idx컬럼 값 출력
echo "<br>ID :", $row['id'];//id 컬럼 값 출력
echo "<br>PW :", $row['pw'];//pw 컬럼 값 출력
}
}
else {
echo "Not Found Result!";//결과 찾을 수 없다는 메세지 화면출
}
mysqli_free_result($result); //데이터 점유 메모리 공간 해제.
mysqli_close($conn); //서버와의 연결 종료
?>
<sudo vi /var/www/html/db_conn.php>
: DB 연결할 때 파일을 포함하여 자동으로 연결하기
$sudo vi /var/www/html/db_conn.php
<?php
$conn = mysqli_connect("localhost","root","kisec123","kisec");
//접속할주소, 계정명, 비밀번호, 접속할 데이터베이스 이름
// mysqli_connect("<DB IP>", "<DB 계정>", "<DB 비밀번호>", "<Database>";
if(!$conn) { //연결 안되었을 때
echo "Error Unable to connect to Mariadb.";
//접속 실패 메세지 출력
exit;
}
mysqli_query($conn, "SET NAMES utf8");
//한글 깨짐 방지설정
?>
<sudo vi /var/www/html/test.html>
: <form>태그에서 아이디, 비밀번호 실제로 확인할 php파일로 데이터 전달 옵션을 추가한다.
$sudo vi /var/www/html/test.html
<!DOCTYPE html>
<html>
<head>
<meta charset ="UTF-8">
<title>Login Form</title>
</head>
<body>
<form method="POST" name="Login_form" action="/login_check.php">
사용자ID : <input type=text name="id" value-""><br>
비밀번호 : <input type=password name="passwd" value=""><br>
<input type=submit value="Login" onClick=check()>
</form>
<script>
function check(){
if(Login_form.id.value == "" || Login_forn.passwd.value == ""){
alert("아이디 및 비밀번호가 ㅇ효하지 않습니다.")'
Login_form.id.value="";
Login_form.passwd.value="";
}
}
</script>
</body>
</html>
<sudo vi /var/www/html/login_check.php>
: 전달 받은 데이터를 MairaDB 연결해서 로그인 처리수행 파일 만듦.
$sudo vi /var/www/html/login_chek.php
<?php
$id=$_POST['id']; //로그인 창에서 보낸 아이디, 비번 변수 저장
$pw=$_POST['passwd'];
if(empty($id) || empty($pw)){//둘 중 하나라도 비어있으면 empty실행
echo "<script> window.location.href='/login.html'; </script>";
//로그인 페이지로 강제 이동.
}
include "db_conn.php"; //db연결 설정 파일 불러오기
$query = "SELECT * FROM login WHERE id='$id'";
//id와 일치하는 행 찾기
$result = mysqli_query($conn, $query);
//db서버에 명령 실행하고 $result를 얻음.
$re_cnt = mysqli_num_rows($result);
//0보다 많은지 확인
if($re_cnt > 0) {
$row = mysqli_fetch_array($result);
//일치하는 아이디 있으면, 유저 정보 가져와서 $row에 저장.
if($row['pw'] == $pw){//db저장 비번과 사용자 입력 비번 같은지 비교
mysqli_free_result($result);
mysqli_close($conn);
echo "<script> window.location.href='/login_success.html';</script>";
}
}
mysqli_free_result($result);//메모리 연결을 닫는다.
mysqli_close($conn);
//로그인 실패창 띄우고 로그인 페이지로 돌려보냄.
echo "<script>
alert(\"Login Failed! Check Your ID and Password!!\");
window.location.href='/login.html';
</script>
";
?>
제대로 작성한다면 아래와 같은 화면을 볼 수 있다.


게시판에 사용할 DB 테이블을 생성해준다.
$mysql -u root -p
MariaDB[(none)]> use sch;
MariaDB[(none)]> create table board(idx int not null auto_increment primary key, name varchar(20) not null, email varchar(30) not null, pw varchar(12) not null, title varchar(100) not null, content text not null, wdate TIMESTAMP DEFAULT NOW());
MariaDB[(none)]> desc board;
[게시판 폼, 입력]
<sudo vi /var/www/html/write.php>
: 게시판 글 쓰기 구현(이름, 이메일, 비번, 제목, 내용 입력 란 만들기)
$sudo vi /var/www/html/write.php
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">//문자 인코딩 설정
<title>게시판 글쓰기</title>//제목
</head>
<body>
<form action="/input_write.php" method="post">
//사용자 입력 값들을 하나의 묶음으로 만들어 서버로 보내는 역할
이름 : <input type="text" name="name"><br>
이메일 : <input type="text" name="email"><br>
비밀번호 : <input type="password" name="passwd"><br>
제목 : <input type="text" name="title"><br>
내용 : <textarea rows="10" cols="50" name="content"></textarea><br>
<input type="button" value="취소" onClick = "history.go(-1);"><input type="submit" value="저장">
//버튼 누르면 action의 php파일로 모든 데이터가 전송된다.
</form>
</body>
</html>

<sudo vi /var/www/html/input_write.php>
: 게시글 입력 가능하게 하기
$sudo vi /var/www/html/input_write.php
<?php
include "db_conn.php"; //데이터베이스 연결 설정 파일을 불러옴
$name = $_POST['name'];
//양식에서 입력한 name을 변수 $name에 저장.
//email, passwd, title, content도 똑같음.
$email = $_POST['email'];
$passwd = $_POST['passwd'];
$title = $_POST['title'];
$content = $_POST['content'];
$query = "insert into board (name, email, pw, title, content) values ('$name', '$email', '$passwd', '$title', '$content')";
//board테이블의 각 컬럼에 입력한 값들을 넣겠다는 것.
$result = mysqli_query($conn, $query);
//작성한 명령을 실제로 DB서버에 전송하여 실행
if($result){
echo "<script> alert(\"Write Success!!!!\"); </script>";
//화면에 성공 알림창
}
else {
echo "<script> alert(\"Board Write Error!\"); </script>";
//화면에 에러 알림창
}
mysqli_close($conn); //DB와의 연결 종료
echo "<script> window.location.href='/list.php'; </script>";
//게시판 리스트 페이지 list.php로 화면 이동.
?>

제대로 글 입력이 되는 걸 확인할 수 있다.

[리스트]
<sudo vi /var/www/html/list.php>
: 게시판 리스트 만들기
$sudo vi /var/www/html/list.php
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>게시판 목록</title>
</head>
<body>
<?php //지금부터 php언어로 명령내리니까 준비해! 신호주는 시작버
include "db_conn.php";
//db연결 설정
$query = "select idx, name, title, wdate from board order by idx desc";
//board 테이블에서 값 가져오기
$result = mysqli_query($conn, $query);
//작성한 명령을 실행
?>
<table border=1>
<caption>게시판 목록</caption>
<thead>
<tr>
<th>번호</th>
<th>작성자</th>
<th>제목</th>
<th>날짜</th>
</tr>
</thead>
<tbody>
<?php
$re_cnt = mysqli_num_rows($result);//가져온 데이터 몇줄인지 세봄
if($re_cnt > 0) {//1개 이상 존재 시 실
while($row = mysqli_fetch_array($result)) {
//데이터 없을때까지 반복 한줄씩 $row에 담아서 꺼낸다.
?>
<tr>
<td><?php echo $row['idx']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><a href="view.php?num=<?php echo $row['idx']; ?>"><?php echo $row['title']; ?></a></td>
<td><?php echo $row['wdate']; ?></td>
</tr>
<?php
}
}
mysqli_free_result($result);
mysqli_close($conn);
?>
</tbody>
</table>
</body>
</html>

[게시판 글 확인]
<sudo vi /var/www/html/view.php>
: 게시판 글 볼 수 있게 만들기
$sudo vi /var/www/html/view.php
<html>
<body>
<?php
include "db_conn.php";//db 연결 설정
$query = "select title, name, email, wdate, content from board where idx=" .$_GET['num'];
//이름, 이메일 등 입력된 번호와 일치하는 글 정보를 가져오는것
$result = mysqli_query($conn, $query);//명령 실행
$re_cnt = mysqli_num_rows($result);//가져온 데이터 개수 확인
if($re_cnt > 0) {//데이터 있으면 실행
$row = mysqli_fetch_array($result);
//찾은 글의 정보를 $row에 담
?>
<table>
<tr>
<td>제목</td>
<td><?php echo $row['title']?></td>
//db에서 가져온 진짜 title값 적기. 아래도 똑같음.
</tr>
<tr>
<td>이름</td>
<td><?php echo $row['name']?></td>
//db에서 가져온 진짜 name값 적기.
</tr>
<tr>
<td>이메일</td>
<td><?php echo $row['email']?></td>
//db에서 가져온 진짜 email값 적기.
</tr>
<tr>
<td>날짜</td>
<td><?php echo $row['wdate']?></td>
//db에서 가져온 진짜 wdate값 적기.
</tr>
<tr>
<td>내용</td>
<td><?php echo $row['content']?></td>
//db에서 가져온 진짜 content값 적기.
</tr>
</table>
<?php
}
mysqli_free_result($result);
mysqli_close($conn);
?>
<a href="/list.php">[목록으로]</a>
<a href="/modify.php?num=<?php echo $_GET['num']; ?>">[글/수정]</a>
<a href="/delete.php?num=<?php echo $_GET['num']; ?>">[글/삭제]</a>
</body>
</html>

[수정]
<sudo vi /var/www/html/modify.php>
: 게시판 글 수정
$sudo vi /var/www/html/modify.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 수정</title>
</head>
<body>
<?php
include "db_conn.php"; //db연결 설정
$idx = $_GET['num'];
//주소창에서 수정하고 싶은 글 번호 가져와서 $idx 변수에 저장
$query = "select title, name, email, wdate, content, pw from board where idx=$idx";
$result = mysqli_query($conn, $query); //명령 실행
$re_cnt = mysqli_num_rows($result); //찾아온 정보 개수 확인
if($re_cnt > 0) {
$row = mysqli_fetch_array($result);
//찾아온 글 한줄씩 읽을 수 있게 하기
?>
<form action="input_modify.php" method="post">
<table>
<tr>
<td>제목</td>
<td><input type=text name="title" value="<?php echo $row['title']?>"></td>
</tr>
<tr>
<td>이름</td>
<td><?php echo $row['name']?></td>
</tr>
<tr>
<td>이메일</td>
<td><?php echo $row['email']?></td>
</tr>
<tr>
<td>날짜</td>
<td><?php echo $row['wdate']?></td>
</tr>
<tr>
<td>내용</td>
<td><textarea rows="10" cols="50" name="content"><?php echo $row['content']?></textarea></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="passwd"></td>
</tr>
</table>
<input type="hidden" name="num" value="<?php echo $idx ?>">
<input type="submit" value="저장">
</form>
<?php
}
mysqli_free_result($result);
mysqli_close($conn);
?>
<input type="button" value="[뒤로가기]" onClick="history.go(-1)">
</body>
</html>

<sudo vi /var/www/html/input_modify.php>
: 게시판 글 수정 데이터 처리.
$sudo vi /var/www/html/input_modify.php
<?php
include "db_conn.php"; //db연결 설정
$pw = $_POST['passwd']; //사용자 입력한것 변수에 저장
$idx = $_POST['num']; //사용자 입력한것 변수에 저장
$title = $_POST['title']; //사용자 입력한것 변수에 저장
$content = $_POST['content']; //사용자 입력한것 변수에 저장
$query = "select pw from board where idx=$idx";
// board 테이블에서 글 번호(idx)가 일치하는 데이터의 비밀번호(pw)를 찾는 명령서를 작성함
$result = mysqli_query($conn, $query);
//실행
$re_cnt = mysqli_num_rows($result); //몇개?
if($re_cnt > 0){ //1개 이상 존재하면 실행
$row = mysqli_fetch_array($result);
//한 줄을 꺼내 배열 형태로 $row 변수에 담기
if($pw != $row['pw']){
echo"
<script>
alert(\"비밀번호가 틀렸습니다. 다시 입력하세요!\");
history.go(-1);
</script>
";
}
else { //비밀번호 일치하면 실행
$query = "update board set title='$title', content='$content' where idx='$idx'";
mysqli_query($conn, $query);
echo"
<script>
alert(\"Modify Success!!!!\");
window.location.href='/list.php';
</script>
";
}
}
mysqli_free_result($result); //사용 끝난 결과 데이터가 점유하는 메모리 공간 해제
mysqli_close($conn); //db 서버와 연결 통로 닫고 종료
?>


[삭제]
<sudo vi /var/www/html/delete.php>
: 게시판 글 삭제 구현
$sudo vi /var/www/html/delete.php
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>글 삭제</title>
</head>
<body>
<form action="/input_delete.php" method="post">
비밀번호 : <input type="password" name="passwd">
<input type="hidden" value=<?php echo $_GET['num']; ?> name="num">
<input type="submit" value="확인">
</form>
<input type="button" value="[뒤로가기]" onClick = "history.go(-1)>
</body>
</html>
<sudo vi /var/www/html/input_delete.php>
: 게시판 글 삭제 데이터 처리.
$sudo vi /var/www/html/input_delete.php
<?php
include "db_conn.php";
$pw = $_POST['passwd']; //삭제 페이지(?)에서 POST방식으로 보낸 비밀번호 데이터를 $pw에 저장
$idx = $_POST['num']; //똑같이 삭제 대상 글 번호를 $idx 변수에 저장.
$query = "select pw from board where idx=$idx";
//board 테이블에서 글번호가 일치하는 행의 비밀번호 컬럼만 조회하라는 명령을 작성함
$result = mysqli_query($conn, $query);
//실행 결과로 얻은 데이터 행 개수 계산하여 담기
$re_cnt = mysqli_num_rows($result);
if($re_cnt > 0) { //1개 이상 존재하면 실행
$row = mysqli_fetch_array($result);
//한 행을 꺼내 배열 형태로 변수에 할당
if($pw != $row['pw']){//비밀번호가 다른 경우 알림창 출력하고 브라우저 이전 페이지로 가기
//echo는 데이터를 화면에 출력하라는 가장 기본적인 명령문.
echo"
<script>
alert(\"비밀번호가 틀렸습니다. 다시 입력하세요!\");
history.go(-1);
</script>
";
}
else { //비밀번호 같을 경우 실
$query = "delete from board where idx='$idx'";
//board 테이블에서 해당 글 번호($idx)와 일치하는 데이터를 완전히 삭제하는 명령을 작성
mysqli_query($conn, $query);
//삭제 성공 알림창 출력하고 게시판 목록 페이지로 주소 이동시키는 명령 실행
echo"
<script>
alert(\"Delete Success!!!!\");
window.location.href='list.php';
</script>
";
}
}
mysqli_free_result($result); //데이터의 메모리 점유 해제
mysqli_close($conn); //종료
?>


이제 게시판 로그인, 글 작성, 수정, 삭제 처리가 가능하다. 나머지 6, 7번 기준은 다음 글에서 작성하도록 하겠다. 7번까지 하게 된다면, 앞서 만들었던 고양시 데이트 코스 웹과 연동이 가능하게 된다.
'실습 연습' 카테고리의 다른 글
| 웹 프로그래밍 - 데이트 코스 만들기2(Apache+PHP+MariaDB) (1) | 2026.04.16 |
|---|---|
| 웹 프로그래밍 - 데이트 코스 만들기(Apache+PHP+MariaDB) (0) | 2026.04.15 |
| 파이썬 함수 연습(문제 포함)(난이도 0-3) (0) | 2026.04.09 |
| C언어 코드 공부3(if문, switch문, 가위바위보) (0) | 2026.04.03 |
| C언어 코드 공부2(while, do_while, star) (0) | 2026.04.03 |