1

PHP - 회원가입 중복검사

PHP - 회원가입 중복검사

노아의 블로그

    목차
반응형

회원가입을 만들었으나 같은 회원을 계속 생성할 수 있다는 점이 있었죠!
그래서 회원가입 중복검사를 해보겠습니다.
중복 검사는 어떻게 할까요?
 
우리가 출석부에서 똑같은 이름을 가진 사람을 어떻게 구별하죠?
네. 먼저 출석부를 한번 훑어보고 누가 중복되었나 보죠.
 
똑같습니다.
 
DB에서 Select(조회)를 하고 사용자가 입력한 ID를 비교(확인) 하면 되는것이죠!
 
이런식으로 사용자가 입력한 Id를 먼저 DB에서 찾아보고 

<?php 
    $id = $_POST['id'];
    $password = $_POST['password'];
    $name = $_POST['name'];
    if($id != null && $password != null && $name != null){
    	$sql = "SELECT * FROM test_tbl where id = '$id'";
    	$sql2 = "INSERT INTO test_tbl(id,pass,name) values('" . $id . "','" .      $password . 	"','" . $name . "')"; 
    	}
    	
    	$result = mysqli_query($conn,$sql);
    	if (mysqli_num_rows($result) > 0) { //id
    		echo "<script>alert('id check');</script>";
    	}
    	
    	else{ //register
    		$result = mysqli_query($conn, $sql2); //sql 실행
    if($result){
	echo "<script>alert('register success');";
	echo "window.location.href = 'login.php';</script>";	
    }
    if(mysqli_error($conn)){
    	echo "<script>alert('register failed.. check error message');";
    }
    		
    }	
?>

결과가 나올시 사용자가 입력한 ID를 가진 유저가 이미 있다, 중복이다라는 말입니다.
중복이 아닐시 회원가입을 진행하는 코드를 입력하면 되죠!
 
하지만 표면상 중복 방지이지 속에서는 중복 방지가 안되있습니다.
바로 DB에서 insert를 하면 실수로 중복이 될수도 있기 때문이죠.
 
이를 해결하려면 제약조건에 대해서 알아봐야합니다.
제약조건이란 DB에서 데이터의 무결성 보장을 위해 쓰는 제약입니다.
(일관성,중복성,정확성)
 
그 중에서 PK 제약조건을 알아봅시다.
PK란 PRIMARY KEY의 약자로 기본키라는 뜻입니다.
 
기본키는 인덱스를 생성해 데이터 검색시간을 단축시키고 중복을 방지합니다. (고유한 값임)
(인덱스는 나중에 설명)
 
어쨋든. 고유한 값을 가진다는 제약조건이므로 다음과 같이 ID를 PK로 설정하시면 됩니다!
 

 
여기서는 ALTER를 쓰는데요. ALTER는 테이블을 수정할때 주로 사용합니다.
저희는 이미 테이블을 만들었으니까 또 만들어버리면 오류도 나고 시간이 많이걸리지요. 그니까 수정을 해봅시당.
 
여기서는 test_tbl에 add constraint(제약조건)을 추가한다. 제약조건 이름은 id_pk고 제약조건은 primary key이다.
pk로 지정할 컬럼은 id다. 라고 설정하는겁니다.
 
정상적으로 실행이 되었다면 똑같은 데이터 두개를 넣어볼까요?

select를 해서 조회를 하구요.
name id pass라는 데이터가 있네요.
 
그러면 id='id'를 넣어서 중복값을 넣어보니까
오류가 나네요. 네 test_tbl의 primary키 제약조건(중복)을 위배했다는 오류입니다.
 
그러면 오류가 뜬다면? 중복
오류가 안뜬다면? 통과 이런식으로 구현이 가능하죠.
코드가 더 짧아집니다.
 


<?php 
    $id = $_POST['id'];
    $password = $_POST['password'];
    $name = $_POST['name'];
    if($id != null && $password != null && $name != null){
    	$sql = "INSERT INTO test_tbl(id,pass,name) values('" . $id . "','" .      $password . 	"','" . $name . "')"; 
    	}
    	$result = mysqli_query($conn,$sql);
            	if (mysqli_error($conn)) { //id
    		echo "<script>alert('id check');</script>";
    	}
    if($result){
	echo "<script>alert('register success');";
	echo "window.location.href = 'login.php';</script>";	
    }
?>

 
완료!

반응형

'WEB > PHP' 카테고리의 다른 글

PHP - 코드 간결화  (0) 2023.04.22
PHP - 회원가입 구현  (0) 2023.04.22
PHP - 로그아웃 구현  (0) 2023.04.22