본문 바로가기
WEB HACKING/웹 해킹[실습]

Php로 웹 개발하기 : 마이페이지(2)

by madevth 2021. 12. 10.
반응형

저번 포스팅에 이어서 마이페이지 조회 / 수정 기능을 마무리지어보자.

 

① 데이터 조회

우선 마이페이지에 들어갔을 때 아이디와 생일을 확인하기 위해 MySQL에 연결하여 데이터를 가져온 후, 이를 placehoder 값으로 넣어주자.

[mypage.php]

<?php
    session_start();
    $id = $_SESSION['id'];

    $conn = mysqli_connect('localhost', 'ID', 'PW', 'DBname');
    $sql = "SELECT birthday FROM personal_info where login_id = '$id'";
    $row = mysqli_fetch_array(mysqli_query($conn, $sql));
    $birthday = $row[0];

    mysqli_close($conn);
?>
<input name = "id" type = "text" placeholder="<?=$id?>"/>
<input name = "birthday" type = "text" placeholder="<?=$birthday?>"/>

가독성을 위해 CSS 코드는 제외하였다.

placeholder로 값을 넣은 이유는, 굳이 변경 페이지를 따로 만들지 않기 위해서이다. 아이디와 생일을 확인하면서 동시에 수정할 수 있게 하기 위해 placeholder에 값을 넣어주었다.

 

② 현재 비밀번호 입력받기

개인정보, 특히 비밀번호를 변경하기 위해서는 현재 비밀번호를 인증하는 과정을 거쳐야 한다.

어떤 방식으로 현재 비밀번호를 넘겨줄지 고민하다가, update 버튼에 onclick 이벤트로 prompt를 띄워서 현재 비밀번호를 입력받기로 했다.

<form method = "post" action = "mypage_update.php">
    <input name = "id" type = "text" placeholder="<?=$id?>"/>
    <input name = "birthday" type = "text" placeholder="<?=$birthday?>"/>
    <input name = "pw" type = "password" placeholder="변경할 비밀번호"/>
    <input name = "current_pw" id = "current_pw" type = "hidden"/>
    <input type = "submit" value = "Update" onClick="document.getElementById('current_pw').value = prompt('현재 비밀번호를 입력해주세요.', '비밀번호')"/>
</form>

코드를 간단히 설명하자면, 게시판 만들기 때 input 값으로 입력받지 않는 id 값을 넣어주기 위해서 input type = "hidden"을 사용했었다. 이번에도 현재 비밀번호 값을 hidden으로 준 후, update 버튼을 눌렀을 때 onclick 이벤트로 프롬프트 창을 띄워서 현재 비밀번호를 입력받은 후, hidden으로 주었던 current_pw의 값을 해당 프롬프트 창에서 받은 값으로 넘겨주는 것이다.

 

[mypage_update.php]

<?php
    echo $_POST['current_pw'];
?>

mypage_update.php를 위와 같이 작성한 후, 현재 비밀번호가 잘 전달되는지 확인해보자.

업데이트 버튼을 누르면, 위와 같이 현재 비밀번호를 입력해달라는 창이 뜬다.

비밀번호를 아무거나 입력하면, 인자가 잘 전달되는 것을 확인할 수 있다.

 

③ 인증 과정 및 데이터 변경

이제 입력받은 비밀번호가 해당 유저의 비밀번호와 일치한다면, 데이터를 변경해주어야 한다.

<?php
    $cur_pw = $_POST['current_pw'];
    session_start();
    $id = $_SESSION['id'];
    $login_sql = "SELECT * FROM login where login_id = '$id' and login_pw = '$cur_pw';";
    if($result = mysqli_fetch_array(mysqli_query($conn, $sql))){
            // 업데이트
    } else{
        echo "<script>alert('비밀번호가 일치하지 않습니다.')</script>";
        echo "<script>window.location.href='mypage.php';</script>";
    }
    mysqli_close($conn);
>

잘못된 비밀번호를 입력하면 알람창이 뜨고 다시 마이페이지로 돌아간다.

 

이제 업데이트 기능을 구현해보자.

아이디, 생일, 비밀번호 모두 아무것도 입력하지 않고 업데이트를 하면 NULL 값이 전달되기 때문에, NULL인 경우는 기존의 값을 넣어주어야한다.

if($result = mysqli_fetch_array(mysqli_query($conn, $login_sql))){
    if($_POST['id'] != NULL){
        $new_id = $_POST['id'];
    }else{
        $new_id = $id
    }
    if($_POST['birthday'] != NULL){
        $new_birthday = $_POST['birthday'];
    } else{
        $sql = "SELECT birthday FROM personal_info where login_id = '$id'";
        $row = mysqli_fetch_array(mysqli_query($conn, $sql));
        $new_birthday = $row[0];
    }
    if($_POST['pw'] != NULL){
        $new_pw = $_POST['pw'];
    }else{
        $sql = "SELECT login_pw FROM login where login_id = '$id'";
        $row = mysqli_fetch_array(mysqli_query($conn, $sql));
        $new_pw = $row[0];
    }
    echo $new_id;
    echo $new_birthday;
    echo $new_pw;
}

테스트를 위해 아이디는 그대로 두고, 생일을 111, 비밀번호를 12345로 입력한 후 변경 버튼을 눌러보자.

값이 잘 설정되는 것을 확인할 수 있다.

반응형

댓글