qordpsem 2024. 7. 29. 01:35

#회원수정 오류

package com.topflix.action;

import com.topflix.domain.User;
import com.topflix.repository.UserRepository;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class UpdateUserOKAction implements Action {
    @Override
    public String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        UserRepository userRepository = new UserRepository();
        request.setCharacterEncoding("UTF-8");

        String email = request.getParameter("email");
        String newPassword = request.getParameter("password");
        String newPhone = request.getParameter("phone");

        User user = userRepository.getUserByEmail(email);
        HttpSession session = request.getSession();
        if (user != null) {
            if (newPassword != null && !newPassword.trim().isEmpty()) {
                user.setPassword(newPassword);
            }
            if (newPhone != null && !newPhone.trim().isEmpty()) {
                user.setPhone(newPhone);
            }

            int updateResult = userRepository.update(user);


            if (updateResult > 0) {
                session.setAttribute("message", "회원수정이 완료되었습니다.");
                return "myPage.do"; 
            } else {
                session.setAttribute("message", "회원수정에 실패했습니다. 다시 시도해주세요.");
                return "updateUser.do";
            }
        } else {
            session.setAttribute("message", "사용자를 찾을 수 없습니다.");
            return "updateUser.do"; 
        }
    }
}

 

회원 수정이 안됨 (오류원인도 모르겠음)

 

 

 

 

 

 

 

 String newPhone = request.getParameter("phone");

        User user = userRepository.getUserByEmail(email);

이 사이에 아래 코드 넣어서 프린트해봄

System.out.println("Received email: " + email);
System.out.println("Received password: " + newPassword);
System.out.println("Received phone: " + newPhone);

 

 

 

email 값이 null 이어서 그랬다

 

 

 

 

 

 

원래 jsp 코드는 아래와 같았는데

<body>
<%@ include file="/includes/header.jsp" %>
<div class="form-container">
    <h1 style="color:white;">회원수정</h1>
    <form action="updateUserOK.do" method="post">
        <div class="input-group">
            <label>이메일</label>
            <span>${user.email}</span> 
        </div>
        <div class="input-group">
            <label>이름</label>
            <span>${user.name}</span>
        </div>
        <div class="input-group">
            <input type="password" name="password" placeholder="비밀번호" required class="full-width">
        </div>
        <div class="input-group">
            <input type="password" name="confirm_password" placeholder="비밀번호 확인" required class="full-width">
        </div>
        <div class="input-group">
            <input type="text" name="phone" placeholder="핸드폰 번호" required class="full-width">
        </div>
        <div class="input-group">
            <label>생년월일</label>
            <span>${user.birthday}</span>
        </div>
        <button type="submit" id="btn-submit" class="btn-submit">수정하기</button>
        <button type="button" id="btn-cancel" class="btn-cancel" onclick="window.location.href='mainPage.jsp';">취소</button>
        <div id="password-feedback"></div>
    </form>
</div>
<%@ include file="/includes/footer.jsp" %>
</body>

 

 

 

 

 

<label>이메일</label>
            <span>${user.email}</span>

코드 밑에

 

아래 코드 한줄을 추가해서 해결

<input type="hidden" name="email" value="${user.email}">

 

 

 

 

*input type="hidden"

폼 제출 시 사용자 눈에 보이지않게 데이터를 서버로 전달가능

 

 

 


 

#세션 속성 일관성 지키지 않아서

 

 

로그인 액션 (SignInOKAction.class) 에

로그인 시  세션에 사용자 이메일을 "userEmail" 로 저장

 

session.setAttribute("userEmail", email);

 

 

며칠 후, 회원탈퇴 액션 (DeleteUserOKAction.class) 에

탈퇴 시 세션 만료 시킬 때 현재 로그인된 사용자 이메일을 세션에서 가져오려는데

 

String email = (String) session.getAttribute("email");

로 하는 바람에 계속 세션이 안가져와졌다

 

getAttribute("userEmail"); 로 변경하고 해결함

 

email, user_email, userEmail 등 컬럼명 변수명 속성명 이 비슷한게 많아서 헷갈렸음,,

세션 안 가져와지면 세션 속성 이름 맞게 되어있는지 확인 해보기,,