> For the complete documentation index, see [llms.txt](https://westsilver.gitbook.io/study-script/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://westsilver.gitbook.io/study-script/php/php-mysql/undefined-2.md).

# 회원가입

## 회원가입(Join)

{% hint style="info" %}

### 회원가입 파일생성

**create**/createMember.php

**login**/join.php, joinSave.php
{% endhint %}

### 회원가입 TABLE 생성

1. &#x20;create/createMember.php

```php
<?php
    include "../connect/connect.php";

    $sql = "CREATE TABLE studyMember (";
	$sql .= "studyMemberID int(10) unsigned NOT NULL AUTO_INCREMENT,";
	$sql .= "youEmail varchar(40) NOT NULL,";
	$sql .= "youName varchar(10) NOT NULL,";
	$sql .= "youPass varchar(20) NOT NULL,";
	$sql .= "youBirth varchar(10) NOT NULL,";
	$sql .= "youPhone varchar(11) NOT NULL,";
	$sql .= "regTime int(15) NOT NULL,";
	$sql .= "PRIMARY KEY (studyMemberID)) CHARSET=utf8";

    $result = $connect -> query($sql);

    if( $result ){  
        echo "Create Table Complete";
    } else {
        echo "Create table false";
    }
?>
```

{% hint style="info" %}

### 회원가입 파일생성

login/join.php, joinSave.php&#x20;
{% endhint %}

&#x20;   2\. login/join.php (HTML 양식저장)

{% file src="/files/-MjyXz5jzvCbsQrVoDbQ" %}
join.php 양식
{% endfile %}

&#x20;   3\. login/joinSave.php&#x20;

{% hint style="info" %}

### 회원가입

1. 회원가입 데이터 입력
2. 이메일/비밀번호/이름/생년월일/폰번호 유효성 검사
3. 이메일/폰번호 중복검사
4. 회원가입 절차 진행
   {% endhint %}

{% file src="/files/-Mjy\_-eIZAehrYeFT\_y4" %}

* 회원가입 기본 데이터

```php
<?php
    include "../connect/connect.php";
    
    $youEmail = $_POST['youEmail'];
    $youPass = $_POST['youPass'];
    $youPassC = $_POST['youPassC'];
    $youName = $_POST['youName'];
    $youBirth = $_POST['youBirth'];
    $youPhone = $_POST['youPhone'];
    $regTime = time();
```

* 메세지 출력

```php
function msg($alert){
    echo "<p class='sub'>{$alert}</p>";
}
```

* 유효성 검사

(이메일 검사 : 정규식 표현)

{% hint style="danger" %}
현재는 HTML의 input태그의 type요소 속성에 적용되어 있기 때문에 사용하지 않음
{% endhint %}

```php
$check_email = preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $youEmail);
//0-9a-zA-Z 작성 가능 범위 : 0~9, a~z, A~Z의 범위를 뜻함
```

&#x20;   1\. 이메일 검사 : 내장 함수

| 내장함수            | Description                 |
| --------------- | --------------------------- |
| **var\_dump**   | 변수의 정보를 출력                  |
| **filter\_var** | 변수의 정보를 필터링하여 유효성을 검사할 때 사용 |

```php
//var_dump(filter_var('sample@example.com', FILTER_VALIDATE_EMAIL));

$check_email = filter_var($youEmail, FILTER_VALIDATE_EMAIL);

if( $check_email == false ){
    msg("이메일이 잘못되었습니다. <br> 올바른 이메일을 적어주세요!");
    exit;
}
//정보의 필터링이 유효하면 true - 데이터반환
//정보의 필터링이 실패하면 false - 메세지출력
```

&#x20;  2\. 비밀번호 검사

```php
//비밀번호 확인 
if( $youPass !== $youPassC ){
    msg("비밀번호가 일치하지 않습니다. <br> 다시 한번 확인해주세요!");
    exit;
}

//비밀번호 암호화
$youPass = sha1('web'.$youPass);
```

&#x20;  3\. 이름 검사

```php
$check_name = preg_match("/^[가-힣]{1,}$/", $youName);

if( $check_name == false ){
    msg("이름이 정확하지 않습니다. <br> 한글로 적어주세요!");
    exit;
}
```

&#x20;  4\. 생년월일 유효성 검사

```php
$check_birth = preg_match("/^(19[0-9][0-9]|20\d{2})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $youBirth);

if( $check_birth == false ){
    msg("생년월일이 잘못되었습니다. <br> 올바른 생년월일(YYYY-MM-DD) 적어주세요!");
    exit;
}
```

&#x20;  5\. 휴대폰 번호 유효성 검사

```php
$check_number = preg_match("/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}$/", $youPhone);

if( $check_number == false ){
    msg("번호가 잘못되었습니다. <br> 올바른 번호(000-0000-0000)를 적어주세요!");
    exit;
}
```

&#x20;  6\. 중복 검사

* 이메일 중복 검사

```php
$isEmailCheck = false;

$sql = "SELECT youEmail FROM studyMember WHERE youEmail = '$youEmail'";
$result = $connect -> query($sql);

if( $result ){
    $count = $result -> num_rows;

    if( $count == 0 ){
        $isEmailCheck = true;
    } else {
        msg("회원가입을 했었네요!!!. 로그인을 해주세요!!");
        exit;
    }
} else {
    msg("에러발생01(youEmail) : 관리자에게 문의하세요!!");
    exit;
}
```

* 휴대폰 번호 중복 검사

```php
$isPhoneCheck = false;

$sql = "SELECT youPhone FROM studyMember WHERE youPhone = '$youPhone'";
$result = $connect -> query($sql);

if( $result ){
    $count = $result -> num_rows;

    if( $count == 0 ){
        $isPhoneCheck = true;
    } else {
        msg("회원가입을 했었네요!!!. 로그인을 해주세요!!");
    }
} else {
    msg("에러발생02(youPhone) : 관리자에게 문의하세요!!");
    exit;
}
```

&#x20;  9\. 회원가입 절차 진행 (이메일과 휴대폰번호의 중복검사가 통과되었을 때)

```php
//회원 가입
    if($isEmailCheck == true && $isPhoneCheck == true){
        
        $sql = "INSERT INTO studyMember(youEmail, youName, youPass, youBirth, youPhone, regTime) VALUES('$youEmail', '$youName', '$youPass', '$youBirth', '$youPhone', '$regTime')";
        $result = $connect -> query($sql);

        if($result){
            msg("회원가입을 축하합니다. 로그인 해주세요!!!");
        } else {
            msg("에러발생03 : 관리자에게 문의하세요!!");
            exit;
        }
    } else {
        msg("다시 한번 확인하고 회원가입해주세요!!");
        exit;
    }
?>
```
