백엔드 개발/PHP

[PHP]PHP를 이용한 정보수정

독학하는 정호빈 2022. 2. 12. 14:55

안녕하세요. 코딩을 독학하고 있는 정호빈입니다.

이전에 로그인환경을 구현해보았는데요 이어서 로그인이 완료되면 정보를 수정할 수 있다면 좋을 것입니다. 그래서 정보수 정과정을 추가로 구현해보았습니다. 이전 과정이 궁금하시다면 아래 링크를 참조해주세요.

https://seongjangjhb.tistory.com/32

 

[PHP]PHP를 이용한 로그인환경 구현

이번 글에서는 로그인 파트를 다루어 보겠습니다. (데이터베이스는 MariaDB를 사용중에 있습니다. 테이블은 따로 설명하지않겠습니다.) 이전에 설명드렸던 함수들을 사용해서 로그인환경을 구현

seongjangjhb.tistory.com

 

 

 

로그인을 마친 기본화면이였습니다.

로그인 화면에서 정보 수정 버튼을 클릭해보겠습니다.

 

현재 자신의 정보가 뜨는 것을 볼 수 있고, 해당 정보들은 로그인할 때 쿠키로 다 받아왔었기 때문에 그 부분을 출력하도록 하였습니다. 코드를 살펴보겠습니다.

 

modify.php입니다.

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="model2.css">
    <title>정보수정</title>
</head>

<body>
    <h1 class="title"><?= $_COOKIE['nickname'] ?>님의 정보</h1>
    <div class="main_login">
        <form action="modifydata.php" method="POST">
            <br>이름<br><br>
            <?= $_COOKIE['name'] ?><br><br>
            아이디<br><br>
            <?= $_COOKIE['userid'] ?><br><br>
            현재 비밀번호<br><br>
            <input class="input1" type="password" name="oldpw"><br><br>
            새로운 비밀번호<br><br>
            <input class="input1" type="password" name="newpw"><br><br>
            email<br>
            <input class="input1" type="text" name="newemail" value="<?= $_COOKIE['email'] ?>"><br><br>
            닉네임<br>
            <input class="input1" type="text" name="newnick" value="<?= $_COOKIE['nickname'] ?>"><br><br>
            전화번호<br>
            <input class="input1" type="text" name="newnumber" value="<?= $_COOKIE['phone'] ?>"><br><br>
            <p>
                <input class="submit1" style='cursor:pointer' type="submit" value="수정">
            </p>
            <p>
                <a href="index.php"><span class="a1">홈으로</span></a>
            </p>
        </form>
    </div>
</body>

</html>

 

한번 전화번호와 이메일을 바꾸어 보겠습니다.

수정을 한 뒤에 정보 수정 버튼을 눌러보면 정보가 수정된 것을 알 수 있습니다. 바꾸고 싶지 않은 정보는 그대로 내버려두고 현재 비밀번호가 틀릴 시에는 수정이 이루어지지 않습니다. 새로운 비밀번호도 바꾸고 싶지 않다면 현재 비밀번호를 입력하도록 만들었습니다. 그러면 이 과정을 코드로 살펴보겠습니다.

 

 

modifydata.php입니다.

<?php
$oldpw = $_POST['oldpw'];
if (!(password_verify($oldpw, $_COOKIE['pw']))) {
?>
    <script>
        alert("비밀번호가 다릅니다.");
        location.replace("modify.php");
    </script>
<?php } else {
    $pw = $_POST['newpw'];
    $e_pw = password_hash($pw, PASSWORD_DEFAULT);
    $email = $_POST['newemail'];
    $phone = $_POST['newnumber'];
    $nickname = $_POST['newnick'];
    $id = $_COOKIE['userid'];

    $conn = mysqli_connect('', '', '', '','');
    $qry = "UPDATE logintest SET pw='{$e_pw}', email='{$email}',
        phone='{$phone}', w_nickname='{$nickname}'
        WHERE w_id='{$id}'";

    if ($result = mysqli_query($conn, $qry)) {

        setcookie('email', $email, time() + 10800);
        setcookie('phone', $phone, time() + 10800);
        setcookie('nickname', $nickname, time() + 10800);
        setcookie('pw', $e_pw, time() + 10800);
        echo "<script>alert('수정 성공')</script>";
        echo "<script>location.replace('index.php')</script>";
    } else {
        switch (mysqli_errno($conn)) {
                //아이디중복 1062
            case 1062:
                echo "<script>alert('중복된 닉네임 입니다.')</script>";
                echo "<script>location.replace('modify.php')</script>";
                break;
            default:
                echo "<script>alert('오류입니다. 다시 시도해주세요.')</script>";
                echo "<script>location.replace('modify.php')</script>";
                break;
        }
    }
}
?>

새롭게 바뀐 정보들을 다시 쿠키 정보에 삽입시켜주어서 정보가 바뀌도록 하였습니다. 새롭게 바뀐 정보들도 중복이 되면 안 되기 때문에 중복 코드를 검출하는 것까지 구현해보았습니다.

 

 

 

여기까지가 정보 수정 과정이었습니다. 다음에는 게시판을 구현해보도록 할 건데요 게시판은 공지 게시판으로 사용하기 위해 글쓰기는 마스터만 사용할 수 있도록 구현해보겠습니다. 감사합니다.