1

PHP - 회원가입 구현

PHP - 회원가입 구현

노아의 블로그

    목차
반응형

전시간에는 로그인과 로그아웃을 만들어봤습니다.
하지만 회원이 없으면 로그인과 로그아웃은 무용지물이죠.
 
그러므로 회원가입 페이지를 만들어봅시다.
 
먼저 login.php html부분에 form 태그를 하나 더 넣어줘서 register.php로 이동하게 만듭니다.

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
	    <form method="post" action="login.php">
    	id:<input type="text" name="id" value="<?php echo $_COOKIE["userid"]?>"> <br>
    	password:<input type="text" name="password"> <br>
    	<input type="submit" value="Login">
    </form>
    
     <form method="post" action="register.php">
    	<input type="submit" value="Register">
    </form>
</body>
</html>

잘 작동 되시는지 확인 하시구요.
 
이제 register.php를 작성할겁니다.
login은 id 와 pw를 입력받아서 조회하는것이고 
register는 id 와 pw를 입력받아서 삽입하는것이죠.
 
조회와 삽입. 그렇죠 쿼리문이 달라집니다.
쿼리문만 달라진다는 소리이므로 register.php에 loginpage의 요소들을 복붙해줍시다.(약간의 수정은 필요)
 

<?php
$servername = "localhost"; //서버주소
$username = "user1234"; //MYSQL 사용자 이름
$password = "1234Qwert!"; //MYSQL 사용자 비번
$dbname = "test"; //접속할 DB 이름

$conn = mysqli_connect($servername,$username,$password,$dbname); //mysql 연결

// 연결 확인
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error()); //에러메시지
}
?>


<?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 . "')"; 
    }
    echo $sql;
    $result = mysqli_query($conn, $sql); //sql 실행
    if($result){
    	header('Location: login.php');
    }
    if(mysqli_error($conn)){
    	echo"register error";
    }
?>

<!DOCTYPE html>
<html>
<head>
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
	    <form method="post" action="">
    	id:<input type="text" name="id"> <br>
    	password:<input type="text" name="password"> <br>
    	name:<input type="text" name="name"> <br>
    	<input type="submit" value="Register">
    </form>
</body>
</html>

 
자 이런식으로 만들어보았습니다.
핵심만 봅시다.

<?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 . "')"; 
    }
    echo $sql;
    $result = mysqli_query($conn, $sql); //sql 실행
    if($result){
    	header('Location: login.php');
    }
    if(mysqli_error($conn)){
    	echo"register error";
    }
?>

사용자가 입력한 id와 password name을 각각의 변수로 받고있습니다.
다만 입력하지 않았음에도 실행되는것을 막기 위해서 모두 다 채워졌을시에만 sql문을 만들게 하였습니다.
 
밑에 코드는 어짜피 sql이 없으니까 실행해도 암것도 못합니다.
 
정상적으로 회원가입이 성공했으면 login.php로 이동해서 사용자의 로그인을 유도합니다.
비정상적인 결과가 나왔으면 사용자에게 error 메시지를 보여줍니다.
 
완벽하게 코드가 작동합니다.
다만 사용자는 회원가입시 아무 메시지도 받지 않고 로그인 페이지로 이동하니까 회원가입이 되었는지 안되었는지
의문일겁니다. 
 
이같은 문제를 담당하는것이 프론트죠.
문제를 해결하기 위해서 자바스크립트로 메시지 창을 띄워봅시다.
 

<?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 . "')"; 
    }
    echo $sql;
    $result = mysqli_query($conn, $sql); //sql 실행
    if($result){
	echo "<script>alert('register success');</script>";

    	header('Location: login.php');
    	
    }
    if(mysqli_error($conn)){
    	echo"register error";
    }
?>

 
자바스크립트는 <script> 태그 안에 넣습니다.
알림창을 띄우려면 alert('띄울 메시지'); 를 하면 됩니다.
 
이 코드는 실행이 될까요?
..
아쉽게도 되지 않습니다.
header는 http응답헤더를 전송하는겁니다.(login.php로 가세요.)
echo "";는 http body에 해당하죠. 
 
따라서 순서가 echo가 먼저여도 어짜피 클라이언트에서는
헤더를 먼저 보기때문에 바디가 실행이 안되는겁니다.
 
그니까 대충 이런 느낌이라고 생각하심 됩니다.
 

아니 알림창을 띄울수 없는 구조네요..
어떻게 이동을 할까요?
 
자바스크립트에도 비슷한 기능이 있습니다.

window.location.href = 'login.php';

자바스크립트는 클라이언트측에서 실행되는 HTTP BODY에 속하는 코드입니다. 그러므로 
아까와는 달리 알림창을 띄우고 실행이 가능합니다.
 
window.location.href는
url을 바꾸고 그 주소로 새로 요청하는겁니다.
 

<?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 . "')"; 
    }
    echo $sql;
    $result = mysqli_query($conn, $sql); //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');";
    }
?>

이런식으로 고치면 완성입니다.

이러한 화면이 나오고 Ok를 누르면 login.php로 이동됩니다.
 
그리고 방금 입력한 id와 pw를 입력해서 로그인까지 성공
 

로그아웃까지 된다면 완벽합니다!
현재 같은 회원이 계속 늘어날수있다는 문제가 있습니다.
다음 시간에는 회원가입 중복 검사를 하도록 하겠습니다.

반응형

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

PHP - 회원가입 중복검사  (0) 2023.04.22
PHP - 로그아웃 구현  (0) 2023.04.22
PHP 로그인 인증 - Session  (0) 2023.04.22