이전 글에서 회원을 등록했으니 이번 글에서는 회원정보를 수정하는 기능을 구현해보자.
회원정보 수정은 로그인 성공 페이지에서 이동시키는 것으로 한다.
1. 먼저 로그인 성공 페이지에 회원정보 수정 화면으로 가는 링크를 만들자
<h2>Login Success!</h2>
<a href="member">멤버 페이지로 이동</a>
<a href="login/logout">Logout</a>
2. Member 관련된 처리를 할 컨트롤러를 만들어준다.
Controllers\Member.php
<?php
namespace App\Controllers;
use App\Models\UserModel;
class Member extends BaseController {
public function index() {
$session = session();
$user_no = $session->get('user_no');
// UserModel 인스턴스 생성
$user_model = new UserModel();
// user_no에 해당하는 사용자 정보 가져오기
$user_info = $user_model->where('user_no', $user_no)->first();
unset($user_info['user_pw']); // user_pw 필드 제거
// 가져온 사용자 정보를 뷰에 전달
return view('member/member', ['userInfo' => $user_info]);
}
}
3. Routes.php를 수정해 Member 컨트롤러의 index 메소드를 찾도록 해준다.
$routes->get('member', 'Member::index', ['filter' => 'auth']);
4. Member 컨트롤러의 index 메소드가 호출하는 view를 작성한다.
연습을 위해 별다른 검증 없이 여기선 사용자 이름과 비밀번호를 수정할 수 있도록 한다.
보통 2차 인증 처리를 해준다.
<h1>인증 받은 사용자 페이지</h1>
<form method="POST" action="member_modify">
<label for="user_name">이름:</label>
<input type="text" id="user_name" name="user_name" value="<?= esc($userInfo['user_name']) ?>"><br>
<label for="user_id">사용자 ID:</label>
<input type="text" id="user_id" name="user_id" value="<?= esc($userInfo['user_id']) ?>" readonly><br>
<label for="user_pw">비밀번호:</label>
<input type="password" id="user_pw" name="user_pw" value=""><br>
<input type="hidden" name="user_no" value="<?= esc($userInfo['user_no']) ?>">
<button type="submit">수정하기</button>
</form>
<script>
document.addEventListener("DOMContentLoaded", function() {
document.querySelector("form").addEventListener("submit", function(e) {
// 필요한 모든 입력 필드 선택
var userName = document.getElementById("user_name").value.trim();
var userPw = document.getElementById("user_pw").value.trim();
// 필드 검증
if (!userName || !userPw) {
e.preventDefault(); // 폼 제출 방지
alert("모든 필드를 입력해주세요.");
return false;
}
});
});
</script>
5. form으로 POST 전송의 목적지인 member_modify 메소드를 Member컨트롤러에 만들고, Routes에도 추가를 해주자.
수정이 완료되면 다시 회원정보 수정화면으로 돌려보내준다. 이때 변경된 값으로 돌려준다
Controllers\Member.php
<?php
namespace App\Controllers;
use App\Models\UserModel;
class Member extends BaseController {
public function index() {
$session = session();
$user_no = $session->get('user_no');
// UserModel 인스턴스 생성
$user_model = new UserModel();
// user_no에 해당하는 사용자 정보 가져오기
$user_info = $user_model->where('user_no', $user_no)->first();
// 가져온 사용자 정보를 뷰에 전달
return view('member/member', ['userInfo' => $user_info]);
}
public function member_modify() {
$session = session();
$userNo = $session->get('user_no');
// POST 데이터 검증
$userName = $this->request->getPost('user_name');
$userPw = $this->request->getPost('user_pw');
if (!$userName || !$userPw) {
return redirect()->back()->with('error', '모든 필드를 입력해주세요.');
}
// UserModel 인스턴스 생성
$userModel = new UserModel();
// 비밀번호 암호화
$encryptedPassword = password_hash($userPw, PASSWORD_DEFAULT);
// 데이터베이스 업데이트
$userModel->update($userNo, [
'user_name' => $userName,
'user_pw' => $encryptedPassword
]);
// 수정 성공 메시지와 함께 리다이렉트
return redirect()->to('member')->with('success', '사용자 정보가 수정되었습니다.');
}
}
Routes.php
//생략
$routes->post('member_modify', 'Member::member_modify', ['filter' => 'auth']);
6. 결과
참고로 비밀번호는 보안문제로 변경만 되고 노출되지 않게 했다
반응형
'개발 > php' 카테고리의 다른 글
코드이그나이터4 - 단순 회원가입 기능 구현 (3) (0) | 2024.03.12 |
---|---|
코드이그나이터4 - 단순 로그인 기능 구현 DB 연결 (2) (0) | 2024.03.11 |
코드이그나이터4 - 단순 로그인 기능 구현 (1) (0) | 2024.03.06 |
코드이그나이터 4 (2) - 시작 페이지 변경, 공통 페이지, 정적 파일 관리 (1) | 2024.02.28 |
코드이그나이터 4 (1) - 시작하기 (0) | 2024.02.27 |
댓글