회원정보 찾기 수정 하는데 DB에 정보가 안들어갑니다 ㅠㅠ

회원정보 찾기 수정 하는데 DB에 정보가 안들어갑니다 ㅠㅠ

QA

회원정보 찾기 수정 하는데 DB에 정보가 안들어갑니다 ㅠㅠ

답변 2

본문

회원정보 찾기 방식을 아이디, 비밀번호 찾기를 분리해서 처리하려고 하는데 아이디 찾기 부분은 처리했습니다.

 

이름이랑 이메일 정보 받아서 이메일로 아이디를 쏴주는 방식으로 처리했는데 

 

비밀번호 찾기 부분에서 일단 이메일은 날라가는데 DB 에 임시비밀번호가 저장되지 않습니다.

 

$sql = " UPDATE {$g5['member_table']} SET mb_lost_certify = '{$mb_nonce} {$mb_lost_certify}' WHERE mb_id = '{$mb['mb_id']}'";

 

$sql = " UPDATE {$g5[member_table]} SET mb_lost_certify = '{$mb_nonce} {$mb_lost_certify}' WHERE mb_id = '아이디";

 

이렇게 입력하면 DB 에 들어가는데 id 를 직접 입력하면 들어가는데..

 

{$mb_['mb_id']} 이 방식이나 {$mb[mb_id]} 이 방식 2개다 적용해봤는데 안들어갑니다..

 

해당 구문을 alert으로 찍어봤는데 제데로 나오는거 확인했고 alert 창에 뜬 정보를 직접 db에 입력해봐도 문제가 없는데 php 에서 update 함수가 적용되지않는거같아요.

 

전체소스 입니다.


<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');
if ($is_member) {
    alert_close('이미 로그인중입니다.', G5_URL);
}

$id = trim($_POST['mb_id']);
$email = trim($_POST['mb_email']);
if (!$id)
    alert('아이디 오류입니다.', G5_URL);
if (!$email)
    alert('메일주소 오류입니다.', G5_URL);
$sql = " select mb_no, mb_id, mb_name, mb_nick, mb_email, mb_datetime from {$g5['member_table']} where mb_email = '$email' and mb_id = '$id'";
$mb = sql_fetch($sql);
if (!$mb['mb_id'])
    alert('존재하지 않는 회원입니다.');
else if (is_admin($mb['mb_id']))
    alert('관리자 아이디는 접근 불가합니다.');
// 임시비밀번호 발급
$change_password = rand(100000, 999999);
$mb_lost_certify = get_encrypt_string($change_password);
// 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용
$mb_nonce = md5(pack('V*', rand(), rand(), rand(), rand()));
// 임시비밀번호와 난수를 mb_lost_certify 필드에 저장
$sql = " UPDATE {$g5[member_table]} SET mb_lost_certify = '{$mb_nonce} {$mb_lost_certify}' WHERE mb_id = '{$mb['mb_id']}'";
sql_query($sql);
// 인증 링크 생성
$href = G5_BBS_URL.'/password_lost_certify.php?mb_no='.$mb['mb_no'].'&mb_nonce='.$mb_nonce;
$subject = "[".$config['cf_title']."] 요청하신 회원정보 찾기 안내 메일입니다.";
$content = "";
$content .= '<div style="margin:30px auto;width:600px;border:10px solid #f7f7f7">';
$content .= '<div style="border:1px solid #dedede">';
$content .= '<h1 style="padding:30px 30px 0;background:#f7f7f7;color:#555;font-size:1.4em">';
$content .= '회원정보 찾기 안내';
$content .= '</h1>';
$content .= '<span style="display:block;padding:10px 30px 30px;background:#f7f7f7;text-align:right">';
$content .= '<a href="'.G5_URL.'" target="_blank">'.$config['cf_title'].'</a>';
$content .= '</span>';
$content .= '<p style="margin:20px 0 0;padding:30px 30px 30px;border-bottom:1px solid #eee;line-height:1.7em">';
$content .= addslashes($mb['mb_name'])." (".addslashes($mb['mb_nick']).")"." 회원님은 ".G5_TIME_YMDHIS." 에 회원정보 찾기 요청을 하셨습니다.<br>";
$content .= '저희 사이트는 관리자라도 회원님의 비밀번호를 알 수 없기 때문에, 비밀번호를 알려드리는 대신 새로운 비밀번호를 생성하여 안내 해드리고 있습니다.<br>';
$content .= '아래에서 변경될 비밀번호를 확인하신 후, <span style="color:#ff3061"><strong>비밀번호 변경</strong> 링크를 클릭 하십시오.</span><br>';
$content .= '비밀번호가 변경되었다는 인증 메세지가 출력되면, 홈페이지에서 회원아이디와 변경된 비밀번호를 입력하시고 로그인 하십시오.<br>';
$content .= '로그인 후에는 정보수정 메뉴에서 새로운 비밀번호로 변경해 주십시오.';
$content .= '</p>';
$content .= '<p style="margin:0;padding:30px 30px 30px;border-bottom:1px solid #eee;line-height:1.7em">';
$content .= '<span style="display:inline-block;width:100px">회원아이디</span> '.$mb['mb_id'].'<br>';
$content .= '<span style="display:inline-block;width:100px">변경될 비밀번호</span> <strong style="color:#ff3061">'.$change_password.'</strong>';
$content .= '</p>';
$content .= '<a href="'.$href.'" target="_blank" style="display:block;padding:30px 0;background:#484848;color:#fff;text-decoration:none;text-align:center">비밀번호 변경</a>';
$content .= '</div>';
$content .= '</div>';
mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $mb['mb_email'], $subject, $content, 1);
alert($email.' 메일로 비밀번호를 인증할 수 있는 메일이 발송 되었습니다.\\n\\n메일을 확인하여 주십시오.', G5_URL.'/bbs/login.php');
?>

이 질문에 댓글 쓰기 :

답변 2

여기서는 이메일이 날아가면 해당 인증 링크를 클릭해야

/bbs/password_lost_certify.php 에서 임시비밀번호를 저장합니다.

즉 해당소스는 임시 비밀번호를 저장하지 않고 이메일 인증 링크만 제공합니다.

/bbs/password_lost_certify.php 에서는 get 방식으로 넘어온 회원번호, 인증용 변수값을 받아서

넘어온 회원번호로 정보를 구하고 db 에 있는 인증용 변수값이 제대로 있는지 체크하고 있어요.

제대로 있다면 글자 길이가 33 보다 길고 만약 짧다면 일치하지 않으니 Error 처리 합니다.

인증용 난수가 제대로 있으면 db에 저장된 난수값 제거하고 get 방식으로 받은 난수값이랑 기존에 db에 있던 값이랑 비교해서 일치하면 실제 비밀번호로 변경해주는 방식 입니다.

임시용 변수를 만들어서 db에 담아두는건 /bbs/password_lost2.php 에서 처리하고 있어요.

기존방식은 일치하는 이메일이 있다면 그 이메일로 아이디, 이름, 닉네임, 임시비밀번호를 전송해주고 있습니다.

임시용 변수를 만들어서 db 에 담아야 하는데 기존에 where 값으로 mb_id 를 사용하는데 위에서 가지고온 id 값을 그대로 써야하는데 안써져서 다른 변수에 기존에 가지고온 id 값을 담아서 처리 했습니다.



$get_id = $mb['mb_id'];

// 임시비밀번호와 난수를 mb_lost_certify 필드에 저장
$sql = " UPDATE {$g5[member_table]} SET mb_lost_certify = '{$mb_nonce} {$mb_lost_certify}' WHERE mb_id = '{$get_id}'";
sql_query($sql);



password_lost2 에서 대부분 처리하고 password_lost_cerify.php 에서는 제대로 값이 넘어왔는지, 일치하는 값이 있는지, 있다면 비밀번호를 변경해주고 있어요.

비밀번호 찾기라면, 로그인하기 전인 것 같은데..

로그인 전에 {$mb['mb_id']} 값이 있나요?

 

$sql = " select mb_no, mb_id, mb_name, mb_nick, mb_email, mb_datetime from {$g5['member_table']} where mb_email = '$email' and mb_id = '$id'";

$mb = sql_fetch($sql);

해당 구간에서 $mb 에 값을 담아두고 있습니다.

하단에서 이메일 발송할때 ID, 이름, 닉네임을 사용해야 해서 값을 가지고 있습니다.

이것저것 테스트 해보면서 만약에 $mb = sql_fetch($sql); 여기서 제대로 값을 못가지고왔다면 바로 하단에

else if (is_admin($mb['mb_id']))
    alert('관리자 아이디는 접근 불가합니다.');

이 오류는 절대 나올수가 없을텐데 관리자 아이디 치고 검색해보니 해당 오류가 나더라구요 ㅠㅠ

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 18
© SIRSOFT
현재 페이지 제일 처음으로