5주차 과제(WEB)

Peroro·2023년 5월 3일
0
post-custom-banner

결과물

  • read_index.php 페이지이다. 아직 페이지가 완성되지 않아, DB에는 여러 게시글이 있지만, 게시글 하나만 출력하는 모습이다.

  • read.php 페이지이다. css를 적용하지 않아 보기 흉하지만, 쿼리문을 통해 서버로부터 데이터를 잘 읽어오는 것을 알 수 있다.
  • 수정, 삭제 버튼에서 문제가 생겨 작동하지 않는다. javascript쪽 문제인 듯하다.

  • write.php이다. 이 페이지에는 로그인 해야 들어올 수 있고, GET 메소드로 bid를 받게 되면 게시글을 수정하게 된다.(read.php 수정버튼)

  • write_action.php 파일이다. 성공적으로 게시글이 올라간 것을 확인할 수 있다.

코드

//write.php

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Write</title>
</head>
<body>
    <?php
    session_start();
    if(isset($_SESSION['id'])){
        $id = $_SESSION['id'];
    }
    else{
        echo "<script>alert('Wrong path!');</script>";
        echo "<script>histroy.back();</script>";
        exit;
    }
    # 로그인 해야 접근 가능
    $title = '';
    $detail = '';
    $bid = $_GET['bid'];

    if(!empty($bid)){# modify
        $username = $_SESSION['id'];
        $mysqli = new mysqli('localhost', 'conn', 'Testnote!%89', 'test');
        $q = "SELECT * from board where bid = '$bid'";
        $row = ($mysqli->query($q))->fetch_array(MYSQLI_ASSOC);

        if($row['id'] != $username){
            echo "<script>alert('Wrong path!');</script>";
            echo "<script>location.replace('read_index.php')</script>";
            exit;
        }
        $title = $row['title'];
        $detail = $row['detail'];
    }
    ?>
    <form method="post" action="write_action.php" class = "writeForm" >
        <div>
            <input type="text" name = "title" style="witdh:600px" id = "title" class = "titleFrom" value = <?php echo $title; ?> >
        </div>
        <div>
            <input type="text" name = "detail" style="witdh:600px;height:400px" id = "detail" class = "detailForm" value = <?php echo $detail; ?> >
        </div>
        <div>
            <input type="hidden" name="bid" id = "bid" value = <?php echo $bid; ?> >
        </div>
            <button type="submit">작성</button>
            <button type="button" name = "cancel" id = "name" onclick="location.href='read_index.php'">취소</button>
    </form>
</body>
</html>
//write_action.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
        session_start();
        if(!isset($_SESSION['id'])){
            echo "<script>alert('Wrong path!');</script>";
            echo "<script>history.back();</script>";
            exit;
        }
        $id = $_SESSION['id'];
        # 로그인을 해야만 접근 가능
        $mysqli = new mysqli('localhost', 'conn', 'Testnote!%89', 'test');//host, user, pw, db_name, you need to make table
        $bid = $_POST['bid'];
        $title = $_POST['title'];
        $detail = $_POST['detail'];
        if(!empty($bid)){# modify
            $q = "SELECT id from board where bid = $bid" # 전달 받은 bid 값이 올바른 값인지 확인
            $result = ($mysqli->query($q))->fetch_array(MYSQLI_ASSOC);
            if($result['id'] != $_SESSION['id']){
                echo "<script>alert('Wrong path!')</script>";
                echo "<script>location.replace('read_index.php');</script>";
                exit;
            }
            $q = "UPDATE board SET title = '$title', detail = '$detail' where bid = '$bid'";
        }
        else{# write
            $q = "INSERT INTO board(id, title, detail, created) VALUES ('$id', '$title', '$detail', default)";
        }
        $result = $mysqli->query($q);
        if($result){
            echo "<script>alert('Your request is successfully posted!')</script>";
        }
        else{
            echo "<script>alert('Something is wrong with the server...')</script>";
        }
    ?>
</body>
</html>
  • POST, GET 메소드에 인자가 없더라도 isset함수에는 인자가 있는 것으로 판단되어서, empty 함수를 사용했다.
  • bid가 있다면 수정, 없다면 일반적인 작성으로 판단했다.
  • Session을 확인해 로그인을 안했을 경우에 대한 접근을 차단했다.

문제점

  • read_index.php에서 여러 게시글이 목록에 올라오지 않고 하나만 올라와 있다.
  • read.js에 문제가 생겼는지 수정과 삭제가 되지 않는다.
  • update할 때 db의 board table이 갱신되게 설정을 했는지 접속할 때마다 날짜가 바뀐다.
profile
오늘 공부한 것을 올리는 공간 / 일주일에 글 3개 / 블로그 이전 : https://perorochan321.tistory.com/
post-custom-banner

0개의 댓글