채택완료

회원가입 폼을 수정하였는데 가입 완료 후 아무런 경고창 없이 메인으로 이동합니다.

https://gnustudy.com/bbs/board.php?bo_table=gnu_tip&wr_id=134

해당 팁을 참고하여 아이디를 메일 형식으로 받는 식으로 코드를 수정하였습니다.

그런데 register.lib.php에서 기존에 

function valid_mb_id($reg_mb_id)
{
    if (preg_match("/[^0-9a-z_]+/i", $reg_mb_id))
        return "회원아이디는 영문자, 숫자, _ 만 입력하세요.";
    else
        return "";
}
 

이렇게 되어있는 부분을 

function valid_mb_id($reg_mb_id)

{

    if (!preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/i", $reg_mb_id))

        return "이메일 형식에 맞지 않습니다.";

    else

        return "";

}

이렇게 변경하니 

register_form_update.php 에 

goto_url(G5_HTTP_BBS_URL.'/register_result.php'); 이 부분을 거치지 않고

바로 메인으로 이동해버리는데 무엇이 문제일까요? 회원가입은 정상적으로 됩니다.

위 register.lib.php 코드 부분을 원래 소스로 돌리면 문제 없이 가입완료 페이지가 뜹니다

|

답변 2개 / 댓글 6개

채택된 답변
+20 포인트
2025-01-08 (수) 13:46:38

register_form_update.php 소스코드 하단에는 어떤 소스코드 있나요?

답변에 대한 댓글 6개

[code]
if ($w == '') {
$sql = " insert into {$g5['member_table']}
set mb_id = '{$mb_id}',
mb_password = '".get_encrypt_string($mb_password)."',
//중략..

// 이메일 인증을 사용하지 않는다면 이메일 인증시간을 바로 넣는다
if (!$config['cf_use_email_certify'])
$sql .= " , mb_email_certify = '".G5_TIME_YMDHIS."' ";
sql_query($sql);

// 회원가입 포인트 부여
insert_point($mb_id, $config['cf_register_point'], '회원가입 축하', '@member', $mb_id, '회원가입');

// 추천인에게 포인트 부여
if ($config['cf_use_recommend'] && $mb_recommend)
insert_point($mb_recommend, $config['cf_recommend_point'], $mb_id.'의 추천인', '@member', $mb_recommend, $mb_id.' 추천');

// 회원님께 메일 발송
if ($config['cf_email_mb_member']) {
$subject = '['.$config['cf_title'].'] 회원가입을 축하드립니다.';

// 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용
if ($config['cf_use_email_certify']) {
$mb_md5 = md5(pack('V*', rand(), rand(), rand(), rand()));
sql_query(" update {$g5['member_table']} set mb_email_certify2 = '$mb_md5' where mb_id = '$mb_id' ");
$certify_href = G5_BBS_URL.'/email_certify.php?mb_id='.$mb_id.'&mb_md5='.$mb_md5;
}

ob_start();
include_once ('./register_form_update_mail1.php');
$content = ob_get_contents();
ob_end_clean();

$content = run_replace('register_form_update_mail_mb_content', $content, $mb_id);

mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $mb_email, $subject, $content, 1);

run_event('register_form_update_send_mb_mail', $config['cf_admin_email_name'], $config['cf_admin_email'], $mb_email, $subject, $content);

// 메일인증을 사용하는 경우 가입메일에 인증 url이 있으므로 인증메일을 다시 발송되지 않도록 함
if($config['cf_use_email_certify'])
$old_email = $mb_email;
}

// 최고관리자님께 메일 발송
if ($config['cf_email_mb_super_admin']) {
$subject = run_replace('register_form_update_mail_admin_subject', '['.$config['cf_title'].'] '.$mb_nick .' 님께서 회원으로 가입하셨습니다.', $mb_id, $mb_nick);

ob_start();
include_once ('./register_form_update_mail2.php');
$content = ob_get_contents();
ob_end_clean();

$content = run_replace('register_form_update_mail_admin_content', $content, $mb_id);

mailer($mb_nick, $mb_email, $config['cf_admin_email'], $subject, $content, 1);

run_event('register_form_update_send_admin_mail', $mb_nick, $mb_email, $config['cf_admin_email'], $subject, $content);
}

// 메일인증 사용하지 않는 경우에만 로그인
if (!$config['cf_use_email_certify']) {
set_session('ss_mb_id', $mb_id);
if(function_exists('update_auth_session_token')) update_auth_session_token(G5_TIME_YMDHIS);
}

set_session('ss_mb_reg', $mb_id);

if($cert_type == 'ipin' && get_session('ss_cert_hash') == md5($mb_name.$cert_type.get_session('ss_cert_birth').$md5_cert_no)) { // 아이핀일때 hash 값 체크 hp미포함)
insert_member_cert_history($mb_id, $mb_name, $mb_hp, get_session('ss_cert_birth'), get_session('ss_cert_type') ); // 본인인증 후 정보 수정 시 내역 기록
}else if($cert_type != 'ipin' && get_session('ss_cert_hash') == md5($mb_name.$cert_type.get_session('ss_cert_birth').$mb_hp.$md5_cert_no)) { // 간편인증, 휴대폰일때 hash 값 체크 hp포함
insert_member_cert_history($mb_id, $mb_name, $mb_hp, get_sess
[/code] 하단 소스는 이렇습니다.
그러면 제일 하단에 goto_url(G5_HTTP_BBS_URL.'/register_result.php'); 주석 처리 부터 하시고
소스코드 내에서 에러 나오는지 좀 확인 해보셔야될것 같은데요
말씀주신것처럼 goto_url(G5_HTTP_BBS_URL.'/register_result.php'); 을 주석처리하니 /bbs/register_form_update.php 이 링크로 이동되고 화면에는 아무것도 뜨지 않습니다.
아이디가 필요 없는거죠? 아이디쪽을 주석처리 하고 이메일쪽 검증만 수정하면될것같은데요
해결했습니다!
register.lib.php 내 function valid_mb_id($reg_mb_id)
{
if (!preg_match("/([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/i", $reg_mb_id))
return "이메일 형식에 맞지 않습니다.";
else
return "";
}
양식과 common.lib.php 회원 정보 항목에 있는 id 양식 값이 맞지않아 생긴 오류였습니다!

그러면 제일 하단에 goto_url(G5_HTTP_BBS_URL.'/register_result.php'); 주석 처리 부터 하시고
소스코드 내에서 에러 나오는지 좀 확인 해보셔야될것 같은데요

이렇게 말씀해주신게 큰 도움이 됏습니다 감사합니다
다행입니다~ 작업 하실때 주소 이동하는 함수는 주석 처리 부터 하고 윗부분에 alert 이나 검증 하는 함수 등 있어여 그부분 주석처리 꼭 해주셔야되요
그리고 sql_query($sql,true); 하면 에러가 표시되구요

지금 확인해보니 메인으로 튕기는 것은 물론 비밀번호가 틀리다고 계속 뜹니다.

register.lib.php 기존 소스로 복원하면 또 정상적으로 가입도 되고 가입완료페이지도 뜨고 로그인했을 때 패스워드가 틀렸다는 경고창도 뜨지않네요...

register.lib.php 에서는 하단 영역만 변경하였습니다.

function valid_mb_id($reg_mb_id)
{
    if (preg_match("/[^0-9a-z_]+/i", $reg_mb_id))
        return "회원아이디는 영문자, 숫자, _ 만 입력하세요.";
    else
        return "";
}

답변을 작성하려면 로그인이 필요합니다.