Copy
// 임시비밀번호와 난수를 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);
이 구간에서 임시비밀번호와 난수를 g5_member 테이블 mb_lost_certify 필드에 값이 들어가야 하는데 값이 들어가지 않습니다.
기존 아이디 비밀번호 찾기를 아이디찾기 따로 비밀번호 찾기 따로 만들었는데 아이디 찾기는 정상적으로 작동하나 비밀번호 찾기는 mb_lost_certify 해당 필드에 값이 들어가지 않습니다 ..
Copy
$sql = " update {$g5['member_table']} set mb_lost_certify = 'ABC' where mb_id = '{$mb['mb_id']}' ";
이렇게 처리하면 ABC 라는 값은 정상적으로 들어가는걸 보아하니 다른쪽 문제가 아니라
mb_lost_certify 값으로 사용될 변수 $mb_nonce, $mb_lost_certify 가 들어가지 않습니다..
Copy
// 임시비밀번호 발급
$change_password = rand(100000, 999999);
$mb_lost_certify = get_encrypt_string($change_password);
// 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용
$mb_nonce = md5(pack('V*', rand(), rand(), rand(), rand()));
혹시 $mb_nonce, $mb_lost_certify 이 2개의 값에 문제가 있는지 확인하려고 alert 으로 값을 띄워보니 값은 정상적으로 들어가있는데 이상하게 DB 에만 들어가지 않습니다 ㅠㅠ
답변 2개 / 댓글 11개
채택된 답변
+20 포인트
값이 정확히 있다면 이렇게 해보세요
$sql = " update {$g5['member_table']} set mb_lost_certify = '".$mb_nonce." ".$mb_lost_certify."' where mb_id = '{$mb['mb_id']}' ";
sql_query($sql);
답변에 대한 댓글 10개
[code]
<?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);
}
$email = trim($_POST['mb_email']);
if (!$email)
alert_close('메일주소 오류입니다.');
$sql = " select count(*) as cnt from {$g5['member_table']} where mb_email = '$email' ";
$row = sql_fetch($sql);
if ($row['cnt'] > 1)
alert('동일한 메일주소가 2개 이상 존재합니다.\\n\\n관리자에게 문의하여 주십시오.');
$sql = " select mb_no, mb_id, mb_name, mb_nick, mb_email, mb_datetime from {$g5['member_table']} where mb_email = '$email' ";
$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_close($email.' 메일로 회원아이디와 비밀번호를 인증할 수 있는 메일이 발송 되었습니다.\\n\\n메일을 확인하여 주십시오.');
?>
[/code]
이게 수정 안한 /bbs/password_lost2.php 파일 입니다.
<?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);
}
$email = trim($_POST['mb_email']);
if (!$email)
alert_close('메일주소 오류입니다.');
$sql = " select count(*) as cnt from {$g5['member_table']} where mb_email = '$email' ";
$row = sql_fetch($sql);
if ($row['cnt'] > 1)
alert('동일한 메일주소가 2개 이상 존재합니다.\\n\\n관리자에게 문의하여 주십시오.');
$sql = " select mb_no, mb_id, mb_name, mb_nick, mb_email, mb_datetime from {$g5['member_table']} where mb_email = '$email' ";
$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_close($email.' 메일로 회원아이디와 비밀번호를 인증할 수 있는 메일이 발송 되었습니다.\\n\\n메일을 확인하여 주십시오.');
?>
[/code]
이게 수정 안한 /bbs/password_lost2.php 파일 입니다.
[code]
<?php
include_once('./_common.php');
// 오류시 공히 Error 라고 처리하는 것은 회원정보가 있는지? 비밀번호가 틀린지? 를 알아보려는 해킹에 대비한것
$mb_no = trim($_GET['mb_no']);
$mb_nonce = trim($_GET['mb_nonce']);
// 회원아이디가 아닌 회원고유번호로 회원정보를 구한다.
$sql = " select mb_id, mb_lost_certify from {$g5['member_table']} where mb_no = '$mb_no' ";
$mb = sql_fetch($sql);
if (strlen($mb['mb_lost_certify']) < 33)
die("Error");
// 인증 링크는 한번만 처리가 되게 한다.
// 이 부분에서 인증용 난수 + 임시비밀번호 값을 비우고 있습니다.
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");
// 인증을 위한 난수가 제대로 넘어온 경우 임시비밀번호를 실제 비밀번호로 바꿔준다.
if ($mb_nonce === substr($mb['mb_lost_certify'], 0, 32)) {
$new_password_hash = substr($mb['mb_lost_certify'], 33);
sql_query(" update {$g5['member_table']} set mb_password = '$new_password_hash' where mb_no = '$mb_no' ");
alert('비밀번호가 변경됐습니다.\\n\\n회원아이디와 변경된 비밀번호로 로그인 하시기 바랍니다.', G5_BBS_URL.'/login.php');
}
else {
die("Error");
}
?>
[/code]
이 페이지는 수정할 필요가 없어서 그냥 사용하고 있습니다.
/bbs/password_lost_certify.php 파일 입니다.
이 부분에서 인증용 난수 + 임시비밀번호 값을 비우고 있습니다.
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");
메일 발송하면 /bbs/password_lost_certify.php?mb_no=14&mb_nonce=b4ba680da517c0e64aed86e54079ab75
이런식으로 링크가 날라오는데 password_lost_certify.php 에 접근해야 위에 코드가 작동할텐데 메일 발송한 시점에서 값이 안들어가있습니다 ㅠㅠ
<?php
include_once('./_common.php');
// 오류시 공히 Error 라고 처리하는 것은 회원정보가 있는지? 비밀번호가 틀린지? 를 알아보려는 해킹에 대비한것
$mb_no = trim($_GET['mb_no']);
$mb_nonce = trim($_GET['mb_nonce']);
// 회원아이디가 아닌 회원고유번호로 회원정보를 구한다.
$sql = " select mb_id, mb_lost_certify from {$g5['member_table']} where mb_no = '$mb_no' ";
$mb = sql_fetch($sql);
if (strlen($mb['mb_lost_certify']) < 33)
die("Error");
// 인증 링크는 한번만 처리가 되게 한다.
// 이 부분에서 인증용 난수 + 임시비밀번호 값을 비우고 있습니다.
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");
// 인증을 위한 난수가 제대로 넘어온 경우 임시비밀번호를 실제 비밀번호로 바꿔준다.
if ($mb_nonce === substr($mb['mb_lost_certify'], 0, 32)) {
$new_password_hash = substr($mb['mb_lost_certify'], 33);
sql_query(" update {$g5['member_table']} set mb_password = '$new_password_hash' where mb_no = '$mb_no' ");
alert('비밀번호가 변경됐습니다.\\n\\n회원아이디와 변경된 비밀번호로 로그인 하시기 바랍니다.', G5_BBS_URL.'/login.php');
}
else {
die("Error");
}
?>
[/code]
이 페이지는 수정할 필요가 없어서 그냥 사용하고 있습니다.
/bbs/password_lost_certify.php 파일 입니다.
이 부분에서 인증용 난수 + 임시비밀번호 값을 비우고 있습니다.
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");
메일 발송하면 /bbs/password_lost_certify.php?mb_no=14&mb_nonce=b4ba680da517c0e64aed86e54079ab75
이런식으로 링크가 날라오는데 password_lost_certify.php 에 접근해야 위에 코드가 작동할텐데 메일 발송한 시점에서 값이 안들어가있습니다 ㅠㅠ
네 ㅠㅠ 수정 안한 소스도 값이 안들어가고 있습니다..
메일은 정상적으로 날라오는데 DB 확인해보면 값이 없고
링크 클릭하면
[code]
if (strlen($mb['mb_lost_certify']) < 33)
die("Error");
[/code]
해당 부분에서 값이 없어서 Error 출력하고 종료합니다.
서버 환경은 카페 24 호스팅 받고 있고 os 는 리눅스 사용중입니다.
php 버전은 5.5.17 사용중입니다.
메일은 정상적으로 날라오는데 DB 확인해보면 값이 없고
링크 클릭하면
[code]
if (strlen($mb['mb_lost_certify']) < 33)
die("Error");
[/code]
해당 부분에서 값이 없어서 Error 출력하고 종료합니다.
서버 환경은 카페 24 호스팅 받고 있고 os 는 리눅스 사용중입니다.
php 버전은 5.5.17 사용중입니다.
도움주셔서 감사합니다 ㅠㅠ
제가 잘못이해하고 있는건지..
순서가
1. 비밀번호 찾기 버튼 누르면 /bbs/password_lost2.php 실행
2. $email 이 제대로 넘어왔는지 체크
3. 중복된 이메일이 있는지
4. 없다면 해당 이메일로 회원정보 조회 후 쿼리 발송
5. $mb 에 값을 담아두고 mb_id 값이 비어있는지 체크 or 관리자 계정인지 체크
6. 임시비밀번호 발급 후 get_encrypt_string 로 암호화
7. 인증용 난수 생성
8. 난수 + 임시비밀번호 값 mb_lost_certify 필드에 저장
9. 이메일 발송
이 /bbs/password_lost2.php 이 파일에서 작동하는 순서가 아닌가요 ?
그 이후 메일에 있는 비밀번호 변경 버튼을 누르면
/bbs/password_lost_certify.php?mb_no=14&mb_nonce=e9d5a413325c8028d4132f39ce61100b
1. /bbs/password_lost_certify.php 실행
2. 회원번호로 회원정보 조회
3. $mb 에 값을 담아두고 mb_lost_certify 의 필드값 길이가 33 글자가 넘어가는지 체크 or 짧다면 Error 출력
4. 인증용 mb_password 필드값 제거
5. GET 방식으로 받아온 mb_nonce 와 db 에 등록되어있는 mb_lost_certify 0 ~ 32 자리 값 비교 후 일치하면 33 ~ 끝자리 까지 비밀번호로 사용 DB 등록
6. 비밀번호 변경 후 alert 처리.
이 순서가 아닌가요 ?
/bbs/password_lost_certify.php 이 페이지가 실행되야
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");
해당 쿼리가 작동해야 하는거같은데.. 혹시 제가 틀린건가요 ?
제가 잘못이해하고 있는건지..
순서가
1. 비밀번호 찾기 버튼 누르면 /bbs/password_lost2.php 실행
2. $email 이 제대로 넘어왔는지 체크
3. 중복된 이메일이 있는지
4. 없다면 해당 이메일로 회원정보 조회 후 쿼리 발송
5. $mb 에 값을 담아두고 mb_id 값이 비어있는지 체크 or 관리자 계정인지 체크
6. 임시비밀번호 발급 후 get_encrypt_string 로 암호화
7. 인증용 난수 생성
8. 난수 + 임시비밀번호 값 mb_lost_certify 필드에 저장
9. 이메일 발송
이 /bbs/password_lost2.php 이 파일에서 작동하는 순서가 아닌가요 ?
그 이후 메일에 있는 비밀번호 변경 버튼을 누르면
/bbs/password_lost_certify.php?mb_no=14&mb_nonce=e9d5a413325c8028d4132f39ce61100b
1. /bbs/password_lost_certify.php 실행
2. 회원번호로 회원정보 조회
3. $mb 에 값을 담아두고 mb_lost_certify 의 필드값 길이가 33 글자가 넘어가는지 체크 or 짧다면 Error 출력
4. 인증용 mb_password 필드값 제거
5. GET 방식으로 받아온 mb_nonce 와 db 에 등록되어있는 mb_lost_certify 0 ~ 32 자리 값 비교 후 일치하면 33 ~ 끝자리 까지 비밀번호로 사용 DB 등록
6. 비밀번호 변경 후 alert 처리.
이 순서가 아닌가요 ?
/bbs/password_lost_certify.php 이 페이지가 실행되야
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");
해당 쿼리가 작동해야 하는거같은데.. 혹시 제가 틀린건가요 ?
조건절이 틀리지 않았을까요?
해당 값이 어디로 들어가야 하는지 살펴보세요....
답변을 작성하려면 로그인이 필요합니다.
$sql = " update {$g5['member_table']} set mb_lost_certify = '".$mb_nonce."' where mb_id = '{$mb['mb_id']}' ";
이렇게 한개만 넣으면 잘 들어갑니다..
근데 $sql = " update {$g5['member_table']} set mb_lost_certify = '".$mb_lost_certify."' where mb_id = '{$mb['mb_id']}' ";
이 값은 안들어갑니다.
alert 으로 값이 있나 체크해봤는데 값은 정상적으로 들어가있고 alert 으로
alert($mb_nonce."여백".$mb_lost_certify); 하면 문제없이 값 2개가 잘 나옵니다 ㅠㅠ