Hugh_휴 님의 블로그

웹 프로그래밍 - 데이트 코스 만들기3(Apache+PHP+MariaDB) 본문

실습 연습

웹 프로그래밍 - 데이트 코스 만들기3(Apache+PHP+MariaDB)

Hugh_휴 2026. 4. 17. 09:34

<웹 프로그래밍 과제 기준>

이번 블로그에서는 아래의 기준 중 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번까지 하게 된다면, 앞서 만들었던 고양시 데이트 코스 웹과 연동이 가능하게 된다.