회원가입시 register_form_update.php 질문요 채택완료
파일 위치: 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개
이거슨... G5였군. G4에서 아무리 찾아도 없어서 혹시나 하고 G5를 열어 봤네요. ㅡㅡ; 저는 G4 세대라...
이 구문에서는 HP, 즉 휴대폰 인증을 사용 여부를 따지고 그 조건에 종속 되어 또 인증을 성공했느냐 못했느냐를 따지는 비교구문인 듯합니다.
생일과 성별에 '' Null 문자를 넣는 경우는 두 가지입니다.
휴대폰 인증을 사용하지 않거나 인증에 실패했을 때.
이때는 검증되지 않은 개인정보를 DB에 기록 할 수는 없죠.
그래서 세션에 임의로 저장한 개인정보를 날려 버립니다.
질문에서는 이 문장 때문에 그 뒤에 insert나 update에서 생년월일과 성별을 인증 그런 거 따지지 않고 수정 가능하게 하고 싶은데 필드가 중복 기재 되니 에러가 난다 하는 것 같습니다.
그럴 땐 빨간 부분 된 것을 지워 주시면 됩니다.
insert는 회원 가입시 한번만 실행 되니 문제가 안 되는데 update는 회원정보 수정일테니 휴대폰인증을 사용 할 때는 지웠을 때 원치 않는 결과를 초래 할 수도 있습니다.
이건 경우의 수를 다 따져봐야 하기 때문에 설명 드리면 매우 길어지구요,
일단 휴대폰 인증을 사용하지 않는다는 조건이면 빨간색 부분은 삭제 하셔도 됩니다.
그리고 성별과 생년월일은 그 아래 구문에서 직접 다루시면 되구요.
만약 휴대폰 인증을 사용하면서 생년월일과 성별을 수정 해야 한다면 다시 질문 주세요.
답변에 대한 댓글 5개
용도를 말씀하시는 건지 목적을 말씀하시는 건지 역할을 말씀하시는 건지 ㅡㅡ?
$_SESSION[]은 배열 형태로 저장 되는데 ss_crt_no은 배열의 키 열할을 합니다.
목적은 세션을 저장하기 위한 것이고
용도는 프로세스에서 임의로 생성한 구분 키를 저장하는 것이죠.
이런 것이 왜 필요하냐면 만약 동시에 여러 사람이 같은 인증을 시도 했을 때 사람마다 고유 키가 없다면 개인에게 전송 된 인증번호를 구분할 키워드가 없게 되죠.
그래서 랜덤으로 발생한 유니크한 키워드를 해싱해서 세션에 저장하게 됩니다.
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']) {
본인확인설정을 했고 && ?????? && 세션넘버가 세팅되었으면 같은데요
문맥 흐름상 예상은 되지만 섣부른 답변은 혼란을 가중 할 거 같습니다. 말씀 드린대로 저는 G4 세대라... ㅎㅎ
다만 예상을 해 보자면 인증을 요구한 사용자, 인증 방식, 인증 구분자(?) 등의 값이 존재 한다면 아래 조건문을 실행 하라는 것으로 추측이 가능합니다.
댓글을 작성하려면 로그인이 필요합니다.
딱히 위 구문은 에러가 날 이유가 없어 보이네요..
해당 Insert나 Update쪽에서 나는 에러가 아닌지 의심드네요..
가능하시면 insert 나 Update 소스나 에러 구문을 보여주시는게 좋을거 같습니다.
답변에 대한 댓글 1개
insert 구문에서는 inseret 하다가 이미 있는 필드를 또 삽입하려고 한다는
중복된 필드라는 에러가 납니다.
댓글을 작성하려면 로그인이 필요합니다.
빈값이기 보다는 초기화라고 생각하면 편할듯합니다
기존에 값이 있을 경우 없애는 용도로 사용하고 있는 듯 합니다
페이지의 용도가 등록과 수정이 같이 되는 페이지니까요
답변에 대한 댓글 2개
해당 필드를 두 번 insert한다고 오류가 나서요^^
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
질문요 : ss_cert_no 는 뭔가요??