본문 바로가기

웹 개발

웹 개발 공부 일기장 4 과제 (마이페이지)

게시판을 만들어 보기 전에 마이페이지 먼저 만들어보도록 하겠습니다.

 

마이페이지는 데이터베이스에 있는 사용자의 정보를 출력해주고 수정할 수 있도록 만들어 보겠습니다.

<?php 
require_once('views/includes/head.php'); // 중복되는 헤드 가져오기
require_once('models/user-model.php'); // user에 대한 함수 가져오기 (내가 만듦)
require_once('config/cookie.php'); // 쿠키에 관한 함수 가져오기 (내가 만듦)
?>
<link rel="stylesheet" href="static/css/mypage.css">
<title>Home</title>
</head>
<body>
    <?php 
    $userId = getCookie($_COOKIE); // 쿠키를 넣어주면 쿠키에 포함되어있는 userid를 가져옴
    $user = getUser($userId);?> // userid를 넣어주면 해당 user의 데이터를 가져옴
    <section id="mypage">
        <h1><?=$userId ?> Page</h1>
        <hr style="width: 80%; margin: 1rem auto;">
        <ul>
        // user의 정보를 출력
            <li>이름 : <?= $user['name'] ?></li> 
            <li>아이디 : <?= $user['id'] ?></li>
            <li>이메일 : <?= $user['email'] ?></li>
            <li>전화번호 : <?= $user['phone'] ?></li>
            <li>생년월일 : <?= $user['birth'] ?></li>
        </ul>
        // 회원정보를 변경하고 싶을 때 링크 클릭 시 수정할 수 있는 페이지로 이동
        <p id="edit"><a href="/mypage-edit.php" class="link-primary link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover">회원정보 변경</a></p>
    </section>
</body>
</html>

 

위와 같이 작성하여 마이페이지를 만들어 주었습니다. <?= 변수 ?>를 넣어주면 php에서 생성한 변수를 html에서 출력할 수 있습니다.

이것을 통해 user 정보를 출력했습니다. 결과 페이지를 보겠습니다.

마이페이지

회원가입할 때 이름, 아이디, 이메일만 적어주었기 때문에 전화번호와 생년월일은 비어있습니다. 이것을 채워주기 위해 회원정보 변경에서 추가할 수 있도록 만들어 보겠습니다.

<?php 
require_once('views/includes/head.php'); // 중복되는 헤드 가져오기
require_once('config/cookie.php'); // 쿠키에 관한 함수 가져오기 (내가 만듦)
require_once('models/user-model.php'); // user에 관한 함수 가져오기 (내가 만듦)
$userId = getCookie($_COOKIE); // 쿠키를 가져와 쿠키에 저장되어있는 userId를 가져오기
$user = getUser($userId); // userid를 넣으면 데이터베이스에서 user 데이터를 가져오기
?>
<link rel="stylesheet" href="static/css/signup.css">
<title>Sign Up</title>
</head>

<body>
    <div class="card">
        <div class="card-body">
            <h2>마이페이지</h2>
            <form method="post">
                <div class="form-floating mb-3">
                    <input type="text" class="form-control" id="nameInput" name="name" placeholder="Name" value="<?= $user['name'] ?>" required>
                    <label for="nameInput">이름</label>
                </div>
                <div class="form-floating mb-3">
                    <input type="text" class="form-control" id="idInput" name="id" placeholder="Id" value="<?= $user['id'] ?>" required>
                    <label for="idInput">아이디</label>
                </div>
                <div class="form-floating mb-3">
                    <input type="email" class="form-control" id="emailInput" name="email"
                        placeholder="name@example.com" value="<?= $user['email'] ?>" required>
                    <label for="emailInput">이메일</label>
                </div>
                <div class="form-floating mb-3">
                    <input type="text" class="form-control" id="phoneInput" name="phone" placeholder="phone" value="<?= $user['phone'] ?>" required>
                    <label for="phoneInput">전화번호</label>
                </div>
                <div class="form-floating mb-3">
                    <input type="date" class="form-control" id="birthInput" name="birth" placeholder="birth" value="<?= $user['birth'] ?>" required>
                    <label for="birthInput">생년월일</label>
                </div>
                <hr>
                <div class="form-floating mb-3">
                    <input type="password" class="form-control" id="floatingPassword" name="confirmPassword"
                        placeholder="Password" required>
                    <label for="floatingPassword">비밀번호 확인</label>
                </div>
                <div>
                    <button type="submit" id="signup" class="btn btn-outline-primary">수정하기</button>
                </div>
            </form>
        </div>
    </div>
</body>

<?php
// post 메소드일 경우 회원정보를 수정할 코드 가져오기
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    require_once('mypage-editfunc.php');
}
?>

</html>

 

 

따로 설명할 것은 없고 input의 value값을 넣어주면 기본적으로 해당 값을 채워줍니다. value값에 각 맞는 user의 정보를 넣어 변경 시 현재 데이터베이스에 들어있는 정보를 채워 매 번 입력할 필요없게 만들어 주었습니다.

<?php
require_once('data/database.php');
$db_conn = connectDb(); // 데이터베이스 연결
if (!$db_conn) {
    exit;
}

$enteredName = $_POST['name'];
$enteredId = $_POST['id'];
$enteredEmail = $_POST['email'];
$enteredPhone = $_POST['phone'];
$enteredBirth = $_POST['birth'];
$enteredConfirmPassword = $_POST['confirmPassword'];

// 비밀번호가 틀릴경우 수정할 수 없게 만들기
$hashedPassword = hash('sha256', $enteredConfirmPassword);
if ($user['password'] !== $hashedPassword) {
    echo '비밀번호가 틀렸습니다.';
    exit;
}

// 입력받은 정보를 update를 사용하여 데이터베이스 수정후 마이페이지로 이동
$query = "update users set name='$enteredName', id='$enteredId', email='$enteredEmail', phone='$enteredPhone', birth='$enteredBirth' where id='$userId'";
mysqli_query($db_conn, $query);
mysqli_close($db_conn);
header('location: mypage.php');
?>

 

post할 경우 실행할 코드입니다. 입력받은 정보로 비밀번호를 검사하고 비밀번호가 맞을 경우에만 회원정보를 수정할 수 있게 하였습니다.

마이페이지 수정

저장되어있는 회원정보는 input안에 자동으로 채워져있는 것을 확인할 수 있습니다.

수정 후 마이페이지

회원정보 수정도 정상적으로 작동하네요!!!

 

혹시나 따로 만든 user-model 함수와 cookie에 관한 함수가 궁금할 수 도 있으니 같이 올려놓겠습니다.

// cookie.php 함수
<?php
	// 쿠키를 받아 쿠키안의 세션에서 userid를 가져오는 함수
    function getCookie($cookie) {
        $phpSessionId = $cookie['PHPSESSID'];
        if ($phpSessionId) {
            session_start();
            if ($_SESSION['id']) {
                $userId = $_SESSION['id'];
                return $userId;
            } else return false;
        } else return false;
    }
?>

//user-model.php
<?php 
    require_once('data/database.php');
    // userid를 입력받아 userid의 데이터베이스안의 정보를 모두 가져오는 함수
    function getUser($id) {
        $db_conn = connectDb();
        $query = "select * from users where id='$id'";
        $result = mysqli_query($db_conn, $query);
        return mysqli_fetch_array($result);
    }
?>

 

다음에는 게시판을 만들어보겠습니다.