테스트 사이트 - 개발 중인 베타 버전입니다

회원가입시 register_form_update.php 질문요 채택완료

멋진남자임 10년 전 조회 4,865

파일 위치: bbs/register_form_update.php

 

질문배경: 저는 회원가입시 성별, 생일을 입력하게, 회원 수정시 성별 생일을 수정하게, 추가로 항목을 폼에 넣었습니다.

따라서 아래 소스 이후의  insert 구문 mb_birth, mb_sex 에 값을 넣어주고  update 구문에 mb_birth, mb_sex 의 값을 수정하게 합니다.

 

문제 : 문제는 아래 소스에 붉은 부분처럼

mb_birth, mb_sex의 값을 왜 빈값으로 지정했는지...그게 이해가 안갑니다.

그것때문에... 아래 소스의 이후에...insert구문과 update 구문에도 역시 mb_birth, mb_sex 가 나와서

mb_birth, mb_sex 가 두번씩 나와서.. 프로그래밍이 에러가 납니다.

 

질문요지 : 아래 소스(붉은 부분)에서  왜 mb_birth, mb_sex 에 빈값을 넣어주고 있습니까?

 

내용시작 ====================

$sql_certify = '';

$md5_cert_no = $_SESSION['ss_cert_no'];

$cert_type = $_SESSION['ss_cert_type'];

if ($config['cf_cert_use'] && $cert_type && $md5_cert_no) { 

    // 해시값이 같은 경우에만 본인확인 값을 저장한다.

    if ($_SESSION['ss_cert_hash'] == md5($mb_name.$cert_type.$_SESSION['ss_cert_birth'].$md5_cert_no)) {

        $sql_certify .= " , mb_hp = '{$mb_hp}' ";

        $sql_certify .= " , mb_certify  = '{$cert_type}' ";

        $sql_certify .= " , mb_adult = '{$_SESSION['ss_cert_adult']}' ";

        $sql_certify .= " , mb_birth = '{$_SESSION['ss_cert_birth']}' ";

        $sql_certify .= " , mb_sex = '{$_SESSION['ss_cert_sex']}' ";

        $sql_certify .= " , mb_dupinfo = '{$_SESSION['ss_cert_dupinfo']}' ";

        if($w == 'u')

            $sql_certify .= " , mb_name = '{$mb_name}' ";

    } else {

        $sql_certify .= " , mb_hp = '{$mb_hp}' ";

        $sql_certify .= " , mb_certify  = '' ";

        $sql_certify .= " , mb_adult = 0 ";

        $sql_certify .= " , mb_birth = '' ";

        $sql_certify .= " , mb_sex = '' ";

    }

} else {

    if (get_session("ss_reg_mb_name") != $mb_name || get_session("ss_reg_mb_hp") != $mb_hp) {

        $sql_certify .= " , mb_hp = '{$mb_hp}' ";

        $sql_certify .= " , mb_certify = '' ";

        $sql_certify .= " , mb_adult = 0 ";

        $sql_certify .= " , mb_birth = '' ";

        $sql_certify .= " , mb_sex = '' ";

    }

}

  

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

답변 3개

채택된 답변
+20 포인트
바보천사
10년 전

이거슨... G5였군. G4에서 아무리 찾아도 없어서 혹시나 하고 G5를 열어 봤네요. ㅡㅡ; 저는 G4 세대라...

 

이 구문에서는 HP, 즉 휴대폰 인증을 사용 여부를 따지고 그 조건에 종속 되어 또 인증을 성공했느냐 못했느냐를 따지는 비교구문인 듯합니다.

생일과 성별에 '' Null 문자를 넣는 경우는 두 가지입니다.

휴대폰 인증을 사용하지 않거나 인증에 실패했을 때.

이때는 검증되지 않은 개인정보를 DB에 기록 할 수는 없죠.

그래서 세션에 임의로 저장한 개인정보를 날려 버립니다.

 

질문에서는 이 문장 때문에 그 뒤에 insert나 update에서 생년월일과 성별을 인증 그런 거 따지지 않고 수정 가능하게 하고 싶은데 필드가 중복 기재 되니 에러가 난다 하는 것 같습니다.

그럴 땐 빨간 부분 된 것을 지워 주시면 됩니다.

insert는 회원 가입시 한번만 실행 되니 문제가 안 되는데 update는 회원정보 수정일테니 휴대폰인증을 사용 할 때는 지웠을 때 원치 않는 결과를 초래 할 수도 있습니다.

 

이건 경우의 수를 다 따져봐야 하기 때문에 설명 드리면 매우 길어지구요,

일단 휴대폰 인증을 사용하지 않는다는 조건이면 빨간색 부분은 삭제 하셔도 됩니다.

그리고 성별과 생년월일은 그 아래 구문에서 직접 다루시면 되구요.

만약 휴대폰 인증을 사용하면서 생년월일과 성별을 수정 해야 한다면 다시 질문 주세요. 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

멋진남자임
10년 전
정말 감사합니다^^

질문요 : ss_cert_no 는 뭔가요??
바보천사
10년 전
ss_cert_no
용도를 말씀하시는 건지 목적을 말씀하시는 건지 역할을 말씀하시는 건지 ㅡㅡ?

$_SESSION[]은 배열 형태로 저장 되는데 ss_crt_no은 배열의 키 열할을 합니다.
목적은 세션을 저장하기 위한 것이고
용도는 프로세스에서 임의로 생성한 구분 키를 저장하는 것이죠.
이런 것이 왜 필요하냐면 만약 동시에 여러 사람이 같은 인증을 시도 했을 때 사람마다 고유 키가 없다면 개인에게 전송 된 인증번호를 구분할 키워드가 없게 되죠.
그래서 랜덤으로 발생한 유니크한 키워드를 해싱해서 세션에 저장하게 됩니다.
멋진남자임
10년 전
1. 이것을 한글로 풀어보면 무슨 말인가요?
if ($config['cf_cert_use'] && $cert_type && $md5_cert_no) {

위의 조건은 아래와 같은데요

$_SESSION['ss_cert_type'] 는 무슨 뜻입니까? ss_cert_type의 세션은 어디에서 어떻게 정해졌습니까?
찾기가 어렵네요^^;
그것을 몰라서 아래 내용이 어떤 조건인지 감이...-_-;

if ($config['cf_cert_use'] && $_SESSION['ss_cert_type'] && $_SESSION['ss_cert_no']) {
본인확인설정을 했고 && ?????? && 세션넘버가 세팅되었으면 같은데요
바보천사
10년 전
제가 G5를 다 살펴 본 게 아니라서 정확히 문맥을 파악 하기는 어렵습니다. 나중에 시간 내서 다시 살펴 볼 필요가 있습니다.
문맥 흐름상 예상은 되지만 섣부른 답변은 혼란을 가중 할 거 같습니다. 말씀 드린대로 저는 G4 세대라... ㅎㅎ

다만 예상을 해 보자면 인증을 요구한 사용자, 인증 방식, 인증 구분자(?) 등의 값이 존재 한다면 아래 조건문을 실행 하라는 것으로 추측이 가능합니다.
멋진남자임
10년 전
천사님 귀중한 시간내주셔서 정말 감사합니다.^^

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

10년 전

딱히 위 구문은 에러가 날 이유가 없어 보이네요..

 

해당 Insert나 Update쪽에서 나는 에러가 아닌지 의심드네요..

 

가능하시면 insert 나 Update 소스나 에러 구문을 보여주시는게 좋을거 같습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

멋진남자임
10년 전
죄송합니다 update 구문은 아직 테스트 안해봤지만
insert 구문에서는 inseret 하다가 이미 있는 필드를 또 삽입하려고 한다는
중복된 필드라는 에러가 납니다.

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

빈값이기 보다는 초기화라고 생각하면 편할듯합니다

기존에 값이 있을 경우 없애는 용도로 사용하고 있는 듯 합니다

페이지의 용도가 등록과 수정이 같이 되는 페이지니까요 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

멋진남자임
10년 전
저 소스 아래로 insert 구문을 만나는데요... 저 빨간 소스때문에
해당 필드를 두 번 insert한다고 오류가 나서요^^
불량학생
10년 전
오류날만한 구문이 아닌데요 여기는 다른오류가 있는지 확인을 해보셔야 하지 않을까 싶습니다

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

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

로그인