상세 컨텐츠

본문 제목

[PHP] 로그인 select email

php

by 2hansoul 2021. 10. 29. 19:00

본문

반응형

join.php

<form name="myform" method="POST" action="joinact.php" onsubmit="check()">
      <input type="text"  class="fadeIn first"  name="id" value="<?=$idMsg ?>" maxlength="12" placeholder="아이디">
      <input type="password"  class="fodeIn second" name="pass" value="<?= $passMsg ?>" maxlength="15" placeholder="비밀번호">
      <input type="password"  class="fodeIn second" name="passcheck" value="<?=$passcheckMsg ?>" maxlength="15" placeholder="비밀번호확인">
	  <input type="text" class="fadeIn third" name="name" value="<?=$nameMsg ?>" placeholder="이름" >
      <input type="text1" class="fadeIn fourth " name="email" value="<?=$emailMsg ?>" placeholder="메일" >
	  @<select name ="emailadress">
	  <option value ="">메일을 선택해주세요</option>
	  <option value ="naver.com">naver.com</option>
	  <option value ="google.com">google.com</option>
	  <option value ="daum.net">daum.net</option>
	  </select>


      <input type="submit" id="submit" class="fadeIn fourth" value="회원가입">
    </form>

select 선택하여 name을 지정 해주면 된다 input value는 빼도 된다 값 검증 때문에 넣어둔 거라서 필요없음 

css가 들어있긴 한데 상관없고 input class를 빼주고 돌려주면 된다 

 

join.php

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


//입력값 검증  (입력한 값=받아온 값이 일치하냐)?
//post로 입력한 값
$idMsg = $passMsg = $passcheckMsg = $nameMsg = $emailMsg  = "";
//form id값
$id = $pass = $passcheck = $name = $email = $emailadress = "";

// 클라이언트에서 요청한 방식이 post가 맞냐(METHOD=방식)?
if($_SERVER["REQUEST_METHOD"] == "POST"){
   //empty 빈값이면 true 아니면 false post_id 값이 비어 있냐? 그러면 공백이니까 입력하고 아니면 넘어가
   if(empty($_POST["id"])){
	echo "<script>alert('아이디를 입력해주세요');history.back();</script>";
	return false; //return false 기존기능을 없애고 if다시 시작 하게(안하면 if만 체크하고 다음으로 넘어감)
   }else{
	 //입력한 아이디 값을 저장
    $id=$_POST['id'];
   }
   //아이디 유효성 체크 preg_match(정규식 표현작성,검색대상문자열,배열변수반환(매칭된 값을 배열로저장 반환값 trun=1 false=0)
   //정규식이 일치하면 통과 근데 나는 불일치를 원하니까 ! 붙여서 걸러야지
   if(!preg_match("/^[a-zA-z0-9]{6,12}$/",$id)){
      echo "<script>alert('아이디는 숫자+영문자로 조합 해주세요');history.back();</script>";
	   return false;
   }
   //id 중복 검사
   // mysqli_num_rows  sql문에 id값 총  개수를 구해준다 중복검사 total>0 total가 0보다 크면 중복된 값이 있다는 소리이기때문에 알림창 후 뒤로가기
	$sql="select id from login where id='$id'";
	$row=mysqli_query($conn,$sql);
	$total = mysqli_num_rows($row);
	if($total>0){
	echo "<script>alert('아이디가 중복입니다');history.back();</script>";
	 return false;
	}
   //password 공백
  if(empty($_POST['pass'])){
	echo "<script>alert('비밀번호 입력해주세요');history.back();</script>";
   return false;
   }else{
    $pass=$_POST['pass'];
   }
   //passcheck 공백
   if(empty($_POST['passcheck'])){
	echo "<script>alert('비번입력');history.back();</script>";
    return false;
   }else{
    $pass=$_POST['passcheck'];
   }
   //pass=passcheck 검증
   if($_POST['pass'] != $_POST['passcheck']){
    echo "<script>alert('비밀번호 불일치');history.back();</script>";
	return false;
   }
   //pass 유효성
   if(!preg_match("/^[a-zA-z0-9]{6,12}$/",$pass)){
      echo "<script>alert('비번은 영문자+숫자로 입력');history.back();</script>";
	   return false;
   }
   //name 공백
   if(empty($_POST['name'])){
	echo "<script>alert('이름입력');history.back();</script>";
   return false;
   }else{
    $name=$_POST['name'];
   }
   //email 공백
   if(empty($_POST['email'])){
	echo "<script>alert('메일 입력');history.back();</script>";
   return false;
   }else{
    $email=$_POST['email'];
   }
   //이메일주소 체크 공백
   if(empty($_POST['emailadress'])){
	echo "<script>alert('메일 입력');history.back();</script>";
   return false;
   }else{
    $email=$_POST['emailadress'];
   }





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




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

     //  filter변수에  array생성  (위 쪽에 받아온 post값 그대로 사용해도 되지만 sql인젝션 방어 하기 위해 나중에 설정 할 예정)
    //sql 인젝션 조치
	$filter= array(
	"id"=>addslashes($id),
    "pass"=>$encrypted_passwd,
	"name"=>addslashes($name),
	"email"=>addslashes($email) .'@'. $_POST['emailadress']
	);





	$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('회원가입을 축하합니다')</script>";


}//if 입력값 검증
?>

코드 분석

더보기

$idMsg = $passMsg = $passcheckMsg = $nameMsg = $emailMsg  = "";
//form id값
$id = $pass = $passcheck = $name = $email = $emailadress = "";

이부분은 별루 필요없을 것 같다 그냥 $id=S_POST['id'] 이렇게 받아줘도 충분함

 

더보기

$encrypted_passwd = password_hash($pass,PASSWORD_DEFAULT);

비밀번호는 post로 값을 받아도 암호화를 사용하여 db에 저장을 해줘야 한다

더보기

//sql 인젝션 조치
$filter= array(
"id"=>addslashes($id),
    "pass"=>$encrypted_passwd,
"name"=>addslashes($name),
"email"=>addslashes($email) .'@'. $_POST['emailadress']
);

sql 인젝션을 막기위해 addslashes 사용 하여 /, '', "" 인젝션에 사용되는 것 들을 막아 준다

"email"=>addslashes($email) .'@'. $_POST['emailadress'] 같은 디비속에 저장을 해야 되기 때문에 이어서 설정 해준다 emailadress 같은 경우는 addslashes 사용하지 않아도 보안에는 문제 될게 없어서 굳이 설정은 안해줌 

디비에 pass는 암호화 상태로 메일은 저렇게 들어간다면 완성 (메일이 유효성 검사도 추가해야됌 다음에)

 

반응형

관련글 더보기

댓글 영역