로그인 폼에서 비밀번호가 맞는지 안 맞는지 검사하려고 합니다.
본문
안녕하세요? 항상 도움 받고 있습니다. login_check.php 부분 참고해서 코드를 만들었는데 암호화된 비밀 번호는 어떻게 해야 체크할 수 있는지 모르겠습니다. 도와주세요.
아래는 코드 입니다.
<?php
include_once('./_common.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');
if(isset($_POST['login_id']) && isset($_POST['mb_email']) && isset($_POST['mb_password'])) {
$login_id = $_POST['login_id'];
$mb_email = $_POST['mb_email'];
$mb_password = $_POST['mb_password'];
$sql = "SELECT * FROM g5_member WHERE mb_email = '$mb_email' AND mb_id = '$login_id' AND mb_password = '$mb_password'";
$row = sql_fetch($sql);
if (!$row['mb_id'] || !login_password_check($row, $mb_password, $row['mb_password'])) {
echo "id_or_password_not_found";
} else if (!$row['mb_email']) {
echo "email_not_found";
} else {
$certification_number = rand(100000, 999999); // 랜덤 인증번호 생성
$sql2 = " UPDATE g5_member SET mb_certification_number = '$certification_number' WHERE mb_email = '$mb_email' ";
sql_query($sql2);
// 이메일 발송 처리
$name = "마케팅코리아"; // 보내는 사람 이름
$fmail = "*** 개인정보보호를 위한 이메일주소 노출방지 ***"; // 보내는 사람 이메일 주소
$to = $mb_email;
$subject = "인증번호 안내";
$content = "인증번호는 $certification_number 입니다.";
$mailer_error = mailer($name, $fmail, $to, $subject, $content, 1); // mailer 함수 호출 후 결과 저장
if ($mailer_error) {
echo "success";
} else {
echo "error";
}
}
exit();
}
?>
답변 1
틀린 부분
$sql = "SELECT * FROM g5_member WHERE mb_email = '$mb_email' AND mb_id = '$login_id' AND mb_password = '$mb_password'";
이미 DB에 들어간 mb_password 는 암호화 되어 들어갔을테고.. $mb_password는 유저가 작성한 비밀번호 그대로 일텐데 DB에서 100% 비교가 안되겠지유?
보통 1차로 아이디를 체크 합니다.
$sql = "SELECT * FROM g5_member WHERE mb_email = '$mb_email' AND mb_id = '$login_id' DB의 값을 가져온 이후
작성 하신
if (!$row['mb_id'] || !login_password_check($row, $mb_password, $row['mb_password'])) { 를 비교하게 되어있는것이지요..
단, 저 조건에서는 mb_id가 존재 할 경우이지만 이미 상단에서 쿼리문을 던지기 전 나와야 햇을테니..
<?php
include_once('./_common.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');
if(isset($_POST['login_id']) && isset($_POST['mb_email']) && isset($_POST['mb_password'])) {
$login_id = $_POST['login_id'];
$mb_email = $_POST['mb_email'];
$mb_password = $_POST['mb_password'];
$sql = "SELECT * FROM g5_member WHERE mb_email = '$mb_email' AND mb_id = '$login_id' ";
$row = sql_fetch($sql);
if (!login_password_check($row, $mb_password, $row['mb_password'])) {
echo "id_or_password_not_found";
}
} else {
if (!$row['mb_email']) {
echo "email_not_found";
}
$certification_number = rand(100000, 999999); // 랜덤 인증번호 생성
$sql2 = " UPDATE g5_member SET mb_certification_number = '$certification_number' WHERE mb_email = '$mb_email' ";
sql_query($sql2);
으로 하시면 되겟지요