본문 바로가기

3강. PHP 프로세스에서 FORM으로 넘겨 받은 데이터를 MySQL 데이터베이스에 저장하기(Insert)

728x90
반응형

2강 https://zibsin.net/2536에서 간단하게 입력 폼을 작성 했다. 지금까지는 클라이언트(PC)에서 HTML을 주로 테스트 했다면 이제 PHP에서 HTML 파일과 PHP를 작성하고 브라우저의 URL을 이용해 웹서버에서 파일을 실행한다.

우리가 많이 사용하는 윈도우에는 IIS라는 웹서버 프로그램을 기본으로 제공하고 있다. 하지만 IIS는 ASP와 MSSQL을 사용하기에 적합한 환경을 제공하기에 PHP를 실행하는데 무리가 있다. 윈도우에서 실행 가능한 Apache와 MySQL 있기 때문에 PC에 웹서버를 구축해 프로그램을 테스트 할 수 있다. 일단 우리가 프로그램 테스트 하기 위해 웹서버 구축을 연습해야 하지만 많은 시간이 필요하다. 웹서버 관리만 또 하나의 전문화 된 분야이기에 서버의 원리와 홈페이지 작동 원리를 이해하고 실습은 무료로 제공하는 웹호스팅 회사의 계정을 신청한다.

웹호스팅이란?

웹서버에서 가상호스트를 빼놓을 수 없다. 가상 호스트란 서버 한 대에 여러 사용자가 각자의 사용 공간을 할당받아 개인 서버처럼 사용 할 수 있는 환경을 말한다. 물리적인 서버는 한 대이지만 이 곳에 여러 사용자 계정을 만들어 독립된 환경에서 다른 사용자와의 충돌 없이 공간을 자유롭게 사용 할 수 있다. 웹서버의 공간을 논리적 분할을 이용해 여러 사용자가 동시에 사용 가능하도록 기능을 제공하는 것이 아파치의 기능 중 하나라 볼 수 있다.

웹서버를 개인이 구축하고 운영하기 위해서는 많은 비용이 들기 때문에 이렇게 서버의 일정 공간을 빌려주고 홈페이지를 구동 할 수 있게 서비스를 제공하는 걸 웹호스팅이라고 한다. 우리나라는 아사달, 카페24 등 많은 웹호스팅 전문 회사들이 있다. 비용을 지불하고 가상 공간을 제공 받을 수 있지만 몇몇 업체에서는 미리 서비스를 체험 할 수 있도록 일정기간 무료로 사용 할 수 있다.

연습을 위해 무료 웹호팅 받기
http://www.hosting.kr 무료 웹호스팅을 제공하고 있는 호스팅케이알에 회원 가입을 한다. 웹호스팅 서비스를 하는 업체에서는 테스트를 위한 무료 호스팅을 제공하는 곳이 여럿 있다.

 

회원가입을 끝냈다면 상단의 메뉴 중에서 웹호스팅을 선택하자. 웹호스팅 페이지에서 오른쪽 서브 메뉴를 보면 무료체험호스팅이 있다. 단, 호스팅 케이알에서 무료 호스팅을 신청하기 위해서는 본인의 도메인이 있어야 하거나 신규로 도메인을 등록 해야 한다.

FTP프로그램 준비하기

클라이언트에서 작성한 프로그램 파일을 웹서버로 전송하기 위해서는 FTP 프로그램이 필요하다. FTP 프로그램은 종류가 다양하며 국내에서는 파일질라(https://filezilla-project.org/)나 알FTP(알드라이브 http://www.altools.co.kr/Download/ALDrive.aspx)를 자주 사용한다. 알드라이브가 준비 됐다면 2강에서 작성한 test.html과 save.php 파일을 서버로 전송한다.

프로그램 실행하기

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>명함관리</title>

<style>
body { text-align:center; }
form { margin:0; padding:0; }

.namecard_box { width:700px; padding:10px; margin:auto; text-align:left; border:1px solid #AEAEAE; } /* 테두리 */
.namecard_box > div { clear:both; }
.namecard_box div div.item { float:left; width:20%; margin:0 auto; } /* 항목 이름*/
.namecard_box div div.val { float:left; width:80%; margin:0 auto; } /* 입력 값 */
.namecard_box .btnbox { clear:both; padding:30px; text-align:center; } /* 버튼 */
</style>
</head>
<body>
 <div class="namecard_box">
 <form name="form_name" method="post" onsubmit="return senddata(this);">
 <div>
  <div class="item">이름</div>
  <div class="val"><input type="text" name="name" size="20"></div>
 </div>
 <div>
  <div class="item">성별</div>
  <div class="val"><input type="radio" name="sex" value="1">남 <input type="radio" name="sex" value="2">여</div>
 </div>
 <div>
  <div class="item">생년월일</div>
  <div class="val"><input type="text" name="birth" size="10" maxlength="8"> 예)19991019</div>
 </div>
 <div>
  <div class="item">소개</div>
  <div class="val"><textarea name="intro" rows="5" cols="50"></textarea></div>
 </div>
 <div class="btnbox"><input type="submit" value="저장"></div>
 </form>
 </div> <!-- endof namecard_box -->



<script>
function senddata(f){
 if(f.name.value == "") {
  alert("이름을 입력하지 않았습니다.");
  return false;
 }
 if(!f.sex[0].checked && !f.sex[1].checked) {
  alert("성별을 입력하지 않았습니다.");
  return false;
 }
 if(f.birth.value == "") {
  alert("생년월일을 입력하지 않았습니다.");
  return false;
 }
 if(f.intro.value == "") {
  alert("소개를 입력하지 않았습니다.");
  return false;
 }

 f.action = "save.php";
 f.submit();
}
</script>
</body>
</html> 

이 파일은 test.html로 저장하고 정보를 입력받는 양식이다.

 

<?php
echo $_POST[name] . $_POST[sex] . $_POST[birth] . $_POST[intro];
extract($_POST);

echo "<br>";
echo "이름 :" . $name . ", 성별 : " . $sex . ", 생년월일 : " . $birth . ", 소개 : " . $intro;

//-- DB 연결하기
//-- DB 정보는 웹호스팅을 받는 경우 업체에서 메일 등으로 발송해 준다.
$mysql_host = '127.0.0.1'; //-- 또는 localhost
$mysql_user = 'temp';
$mysql_password = 'temp1234';
$mysql_db = 'temp';

//-- 사용 할 DB를 선택하고 연결한다.
$conn = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("데이터베이스 연결에 실패하였습니다!"); 
mysql_select_db($mysql_db, $conn); // DB 선택

//-- 테이블 생성
/*
CREATE TABLE `namecard` (
 `record` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 40 ) NOT NULL ,
`sex` VARCHAR( 1 ) NOT NULL ,
`birth` VARCHAR( 8 ) NOT NULL ,
`intro` TEXT NOT NULL ,
PRIMARY KEY ( `record` )
)

테이블은 이미 만들어져 있기 때문에 생략
*/


//-- 저장하기
$sql = "insert into namecard set name='$name', sex='$sex', birth='$birth', intro='$intro'";
mysql_query($sql);

//-- 읽어오기
$sql = "select * from namecard";
$rs = mysql_query($sql);
while($rd = mysql_fetch_array($rs)) {
 echo "<br>" . "이름 :" . $rd[name] . ", 성별 : " . $rd[sex] . ", 생년월일 : " . $rd[birth] . ", 소개 : " . $rd[intro];
}
?>

이 파일은 save.php로 저장한다. form의 action에 지정된 프로그램 파일이며 여기서는 DB에 연결하고 테이블에 자료를 저장하는 것까지 수행한다. DB 연결에 필요한 ID, PASSWORD 정보들은 웹호스팅 회사에서 제공한다.

mysql에서 가장 많이 사용하는 구문은 select, insert, update, delete가 있다. DB에서 가장 기본이 되는 것이 정보를 읽어오기, 추가하기, 수정하기, 삭제하기이다.

select 필드 from 테이블 [where];

레코드를 읽어올 때 가장 기본 형식이다. 뒤에 where 절이 있다면 조건에 맞는 레코드만 읽어오게 된다.

select * from namecard where name="홍길동";은 namecard라는 테이블에서 모든 필드를 읽어 오는데 name이라는 필드의 값이 "홍길동"인 것만 불러오게 된다.

insert into 테이블 set 필드1='값1', 필드2='값2', 필드3='값3'...
레코드를 삽입 할 때 구문이다. 각 필드에 해당하는 값을 대응한다.
insert into 테이블 (필드1, 필드2, 필드3) values ('값1', '값2', '값3); 처럼 사용하기도 한다.

update 테이블 set 필드1='값1', 필드2='값2'... [where]

레코드를 수정 할 때 사용한다. update에서는 where 구문이 중요한 역할을 하는데 조건문이 제대로 설정되지 않으면 엉뚱한 레코드의 정보가 수정되기 때문에 항상 수정하고자 하는 레코드의 조건에 유념해야 한다. 만약 where문이 생략 된다면 모든 레코드를 수정하게 된다.

delete from 테이블 [where];

레코드를 삭제 한다. update와 마찬가지로 where 문의 조건이 중요하다. 엉뚱한 레코드를 삭제하는 일이 없도록 조건문을 잘 계산해야 한다. where문이 없다면 모든 레코드를 삭제한다.

728x90
반응형