상세 컨텐츠

본문 제목

[PHP] 간단한 회원가입 중복처리 비밀번호 암호화

php

by 2hansoul 2021. 10. 21. 17:21

본문

반응형
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="login.css">

<script>
      //체크 함수 생성
      function check() {
       //myfrom 이름 설정
        var f = document.myform;
 /*
         //id가 공백이면
        if (f.id.value == "") {
            alert("아이디를 입력해주십시오");
            f.id.focus();
			console.log(f);
            return false;
        }

         //아이디 유효성 체크 idlength변수 생성 해주고 범위가 맞으면 true니까 ! 넣어줘서 범위가 맞지 않는다고 해줘야 실행이 된다
		 var idlength = /^[a-zA-z0-9]{6,12}$/;

		 if(!idlength.test(f.id.value)){
		 alert("아이디는 영문대/소문자 숫자6~12입력해주세요");
		 f.id.focus();
		 return false;
		 }


		  if (f.pass.value == "") {
            alert("비밀번호를 입력해주세요");
            f.pass.focus();
            return false;
        }

        if (f.passcheck.value == "" ) {
            alert("비밀번호를 입력해주세요");
            f.pass.focus();
            return false;
        }
		//틀리면 클리어 시킨다 해야겠찌?
		if(f.pass.value !=f.passcheck.value){
		 alert("비빌번호 확인");
		 f.passcheck.focus();
		 f.passcheck.value= "";
		 return false;
		}
		 //비밀번호 유효성 체크 처음에는 passcheck까지 || 넣어주려고 했는데 굳이 그럴필요가 없네 어짜피 한쪽이 안 맞으면 안되니까
		 var passlength=/^[a-zA-z0-9]{6,15}$/;
		 if(!passlength.test(f.pass.value)){
		 alert("비밀번호는 영문대/소문자 숫자6~15입력해주세요");
		 f.pass.focus();
		 return false;
		 }

		  if (f.name.value == "") {
            alert("이름을 입력해주세요");
            f.name.focus();
            return false;
        }


		  if (f.email.value == "") {
            alert("메일을 확인해주세요");
            f.email.focus();
            return false;
        }
		*/
}
</script>






<div class="wrapper fadeInDown">
  <div id="formContent">
    <!-- Tabs Titles -->
    <h2 class="inactive underlineHover"><a href="login.php"> 로그인 </h2></a>
    <a href="join.php"><h2 class="active">회원가입 </h2></a>

    <!-- Icon -->

     <!-- Login Form -->
	<!--submit버튼을 누르면 onsubmit이 실행되어
		check함수가 실행되고
		check함수의 return 값이 true일 경우에만 폼을 전송합니다.
		onsubmit 이벤트 속성에 들어가는 함수는 반드시
		전송해야 할 경우 true를 반환하고
		하지말아야 할 경우 false를 반환하는 형식이어야 합니다. -->
    <form name="myform" method="POST" action="joinact.php" onsubmit="return check()">
      <input type="text"  class="fadeIn first"  name="id" maxlength="12" placeholder="아이디">
      <input type="password"  class="fodeIn second" name="pass" maxlength="15" placeholder="비밀번호">
      <input type="password"  class="fodeIn second" name="passcheck" maxlength="15" placeholder="비밀번호확인">
	  <input type="text" class="fadeIn third" name="name" placeholder="이름" >
      <input type="text" class="fadeIn fourth " name="email" placeholder="메일" >
      <input type="submit" id="submit" class="fadeIn fourth" value="회원가입">
    </form>


    <!-- Remind Passowrd -->
    <div id="formFooter">
      <a class="underlineHover" href="#">Forgot Password?</a>
    </div>

  </div>
</div>
</head>
</html>

 

기본적인 회원가입form 위쪽에는 script설정을 해놔서 from name을 준 것 script 주석은 그냥 지우고 쓰면 된다

post방식으로 데이터를 넘김

<?php
include("dbconn.php");
include("password.php");

    $id=$_POST['id'];
	$pass=$_POST['pass'];
	$name=$_POST['name'];
	$email=$_POST['email'];

$sql="select id from login where id='$id'";
$row=mysqli_query($conn,$sql);
/*mysqli_fetch_array 연관배열에서 키값,번호중 아무거나 잡아서 사용 가능하다 select 쿼리의 결과값으로 사용되고 한번에 한개의 데이터행을 배열의 행태로 가져옴
더이상 반환 데이터가 없을 때 가지 true를 반환한다
login디비에서 모든 데이터를 검사후 없으면 true를 반환 하게 된다 그러면 id와 동일한 값은 없다는 소리 false면 동일한 id 값이 있다는
## 애초에 sql문에 조건을 걸어놨는데 모든배열에 데이터를 다시 검사할 필요없이 있는지 없는지만 판단 하면 되니 fetch를 사용할 필요가 없다  */

// mysqli_num_rows  sql문에 총 개수를 구해준다 중복검사 total>0 total가 0보다 크면 중복된 값이 있다는 소리이기때문에 알림창 후 뒤로가기
$total = mysqli_num_rows($row);
if($total>0){
 echo "<script>alert('id already');history.back();</script>";
}else {

// 비밀번호 암호화
$encrypted_passwd = password_hash($pass,PASSWORD_DEFAULT);

  //  filter변수에  array생성  (위 쪽에 받아온 post값 그대로 사용해도 되지만 sql인젝션 방어 하기 위해 나중에 설정 할 예정)

	$filter= array(
	"id"=>$id,
    "pass"=>$encrypted_passwd,
	"name"=>$name,
	"email"=>$email
	);


	$sql="insert into login (id,pass,name,date,email) values (	'{$filter['id']}',
																 '$encrypted_passwd',
																'{$filter['name']}',
																NOW(),
																'{$filter['email']}'
																)";
	$row=mysqli_query($conn,$sql);

	$result=mysqli_fetch_array($row);
	    //알림창 띄우고 성공알림창 누르면 로그인 페이지로 이동
		echo "<script>alert('join success wellcome');document.location.href='login.php';</script>";

}
?>



    <!--알림창 띄우고 성공알림창 누르면 로그인 페이지로 이동
    echo "<script>
			alert('축하');
			document.location.href='login.php';
		</script>"; -->

https://hansoul.tistory.com/83 암호화 include파일은 여기서 복사 하시면 됩니다 

post데이터를 받아오고 insert 하기전에 아이디 중복 검사를 실행한다 주석을 달아놓긴 했는데

모르는 부분 있으면 아는 한 최대한 답 하겠습니다

테스트 하기 위해 script유효성 검사 주석 한거라 해제 하면 정상적으로 사용 가능 합니다

반응형

관련글 더보기

댓글 영역