본문 바로가기
PHP 게시판 만들기

4. 데이터베이스에 가입정보 저장하기

by 똑똑한 영장류 2012. 12. 11.

Chap 4.


앞서 회원가입 페이지에서 필요한 정보들을 입력받을 수 있도록 했습니다.

이제 그 정보들을 mysql 데이터베이스(이하 DB)에 저장하는 방법을 알아보겠습니다.


우선 DB에 정보들을 저장할 공간을 마련해 둬야겠지요.


회원 가입 정보들을 저장할 ap_member  라는 이름의 테이블을 만들고, 몇개의 필드들을 설정해 놓겠습니다.


phpMyAdmin 이라는 웹툴을 이용해서 DB에 테이블 생성 작업을 할 수 있습니다. 사용방법은 각자 찾아보시구요.




위 형태로 일단 간단하게 가봅시다.


signup.php 에서 form 에 사용되었던 값들과 ap_member  테이블의 필드와 연관성은 아래와 같습니다.



 회원가입 폼

 ap_member 테이블의 필드

user_id

 id

 user_pw

 pw

 user_email

email


그럼, 이제 signup_check.php 를 작성해 봅시다.


php의 mysql 관련 함수들이 하나씩 나오기 시작할텐데요. 간단 사용예들은 PHP 카테고리에서 살펴볼 수 있습니다.


첫번째: php 가 mysql 에게 관련 작업을 시키려면 권한이 필요한데요, 거창하지만, 사용할 수 있는 DB로 접근할 수 있는 계정 정보가 필요하다는 말입니다. 


www 디렉토리에 config.php 파일을 만들어서 계정 정보를 설정해 줍시다.


<?php
$DB['host'] = 'localhost';
$DB['db'] = 'db_name';
$DB['id'] = 'user_id';
$DB['pw'] = 'xxxxxxxxx';
?> 


위에서 작성한 config.php 는 DB 작업을 하려면 반드시 필요한 정보입니다. 여러 파일들에서 공통적으로 사용될 수 있지요. 작성하는 파일마다 매번 적어줄게 아니라, config.php 파일 하나로 만들어 주고, 필요하면 include() 함수를 이용해서 포함시키는 방법이 효율적이겠죠.



php.net 가서 mysql 관련 검색을 해보니, 이젠 mysqli 를 사용하라고 강력히 권장하는군요. 공부할게 늘었습니다. ㅎㅎ


php 는 mysqli 를 통해서 mysql 서버와 상호 작용을 합니다. 그러니까, 앞서 이야기한 DB 접근할 수 있는 계정 정보를 이용해서 서버와 연결한 후, 그 연결의 끈을 놓으면 안 되겠네요.


접속하는 방법 :


$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);


연결의 끈이 $mysqli 입니다. 이름이 마음에 안 들면 원하시는대로 ㅎㅎ

이 변수를 이용해서 DB 관련 작업들을 수행하게 됩니다.


접속 끊는 방법 :


$mysqli->close();



signup_check.php 에 아래 내용이 우선 필요하겠군요.


<?php
include_once ('../config.php');
$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

$mysqli->close();
?> 


mysql 서버 접속시에 에러가 발생할 경우 메세지를 출력하고 실행을 중단하는 코드가 추가되었습니다.



signup.php 에서 form을 통해 전달된 값들을 signup_check.php 는 어떻게 얻어낼 수 있을까요?


웹에서 값을 전달하는 방법은 두가지가 있습니다.


앞서 signup.php 의 form에는 method='post' 라고 되어있지요. 브라우저의 주소창에 값이 표시되지않는 방법입니다.


그리고, 다른 방법은 get 방법입니다. 이 방법은 브라우저의 주소창에 전달되는 값들이 노출됩니다. 아래의 형태로 전달되는 겁니다.


http://mydomain.com/signup_check.php?user_id=myid


그럼, 전달 받은 쪽에서는 그 값을 이용하기 위해서 php 변수로 담기 위한 작업을 해야하겠지요?


POST 방식으로 전달된 값은 아래와 같이 값을 가져올 수 있습니다.


$user_id = $_POST['user_id'];


GET 방식으로 전달되었다면, 아래처럼 하면 됩니다.


$user_id = $_GET['user_id'];


전달받은 내용을 위의 방법처럼 하나하나 변환할 수도 있겠지만, 더 쉬운 방법이 있습니다.


다음의 함수를 이용해서 post 또는 get 방식으로 전달된 내용을 php 변수에 담아낼 수 있습니다.


extract($_POST);

extract($_GET);


각 배열의 인덱스명대로 변수가 생성됩니다.


우리의 예에서 extract($_POST); 를 실행하면, $user_id, $user_pass, $user_pass2, $user_email 이라는 변수가 자동으로 생기며 전달된 값을 가지고 있습니다.


signup_check.php 를 아래와 같이 작성하고 테스트를 해봅시다.


<?php
include_once ('../config.php');
$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

extract($_POST);

echo $user_id. '<br />';
echo $user_pass. '<br />';
echo $user_pass2. '<br />';
echo $user_email. '<br />';


$mysqli->close($mysqli);
?> 



signup.php


signup_check.php



값을 전달하고, 전달된 값을 변수로 뽑아낼 수 있게 되었습니다.


이제 전달된 값을 DB 에 저장을 해 봅시다.


mysqli 을 이용해서 저장을 위한 쿼리를 실행하면 됩니다.


SQL Query 도 내용이 방대하니, 나올 때마다 조금씩 살펴보겠습니다.


DB에 데이터를 입력할 때 사용하는 쿼리는 INSERT 입니다.


예>

INSERT INTO 테이블명 (속성1, 속성2,...) VALUES (값1, 값2, ...)



우리의 예에서는 아래처럼 됩니다.


$q = "INSERT INTO ap_member ( id, pw, email ) VALUES ( '$user_id', '$user_pass', '$user_email' )";


그리고, 이 쿼리를 실행시키는 방법은 아래와 같습니다.


$mysqli->query( $q);


여기까지의 signup_check.php는 아래와 같습니다.



<?php
include_once ('../config.php');
$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

extract($_POST);

echo $user_id. '<br />';
echo $user_pass. '<br />';
echo $user_pass2. '<br />';
echo $user_email. '<br />';

$q = "INSERT INTO ap_member ( id, pw, email ) VALUES ( '$user_id', '$user_pass', '$user_email' )";

$mysqli->query( $q);

$mysqli->close();
?> 



테스트를 해 봅시다.


signup.php


signup_check.php




phpMyAdmin 을 통해서 확인할 수 있습니다.



이상! ㅎㅎ






댓글