본문 바로가기

App & Web

서버와 통신하는 하이브리드앱을 만들기 위해 필요한 php 필수함수

FROM http://blog.naver.com/t7ceo/20176656085



하이브리드앱에서 서버와 통신하고 서버의 자료를 가져와서 뿌려주고 서버측에 자료를 저장하는 것은 무엇보다 중요한 기능 입니다.

 

 

저는 하이브리드앱을 만들때 클라이언트 측에서 서버로 data를 보낼때는 GET 또는 POST 방식으로 자료를 보냅니다.

 

서버측에서는 php를 이용하여 클라이언트로 부터 받은 data를 처리하여 mysql에 저장 합니다.

그리고 서버에서 클라이언트로 자료를 보낼 때 data는 json 형태로 변환하여 클라이언트로 보냅니다.

 

오늘 설명할 때 필요한 DB 테이블은 앞의 포스트에서 만든 것을 사용 합니다. 

아래 링크에서 만들어진 테이블을 확인할 수 있습니다.

웹호스팅 계정의 설치와 mysql DB 테이블의 제작 : http://blog.naver.com/t7ceo/20176598937

 

 

 

 

 

 

서버측에서 사용하는 php에는 다양한 함수가 있지만 그동안의 경험으로 볼때 꼭 필요한 함수 몇개만 알면 누구나 서버측 프로그램을 만들 수 있습니다.

 

여기서는 꼭 필요한 함수의 사용법을 설명합니다. 

외우지 마시고 그냥 이해하고 넘어 가세요.

다음에 필요하면 찾아서 복사해서 사용하면 됩니다. 

우리가 천재도 아니고 모든 함수를 어떻게 외웁니까 전문가들도 함수의 레퍼런스를 항상 옆에 두고 찾아서 사용 합니다.

 

php 레퍼런스 : http://www.kr.php.net/manual/kr/function.mysql-connect.php

 

 

 

 

 

1. session_start();

로그인 기능이 있는 페이지를 만들 때 현재 사용자가 로그인 된 상태 인지 않된 상태인지를 구분할 수 있는 값을 서버에 저장하고 각 페이지에서 그 값을 불러와서 사용자의 로그인 여부를 판별할 수 있도로록합니다.

이때 서버에 저장하는 값을 세션값이라고 하고 이 세션값을 사용 할 수 있도록 선언 하는 것입니다.

지금은 이정도만 알고 다음에 관련 앱을 만들때 더 자세히 다루겠습니다.

 

 

 

2. mysql_connect();

아주 중요한 함수 입니다.

서버와 통신할 때 당신이 만든 웹호스팅 계정을 오픈하여 DB를 조작 할 수 있도록 데이트베이스 연결 객체를 만들어 줍니다.

 

일반적인 사용방법은 DB 경로, DB 아이디, DB 비밀번호, DB 이름을 변수에 먼저 저장하고 그 변수를 함수에 인자값으로 제공하여 DB 객체를 생성합니다.

 

php의 변수는 변수명 앞에 무조건 "$"기호를 붙여야 합니다.

그럼 위에서 말한 각각의 변수를 만들어 봅시다.

 

$host="localhost";          //DB 경로는 localhost 로 잡아 주세요.

$dbid="당신의 DB아이디";           //웹호스팅 신청 할때 만든 DB의 아이디를 입력하세요.

$dbpass="당신의 DB비밀번호";   //웹호스팅 신청 할때 만든 DB의 비밀번호를 입력하세요.

$dbname="당신의 DB이름";        //DB 이름은 보통 웹호스팅 신청 할때 만든 DB 아이디와 같습니다.

 

위에 보면 웹호스팅계정의 설치에 대한 링크가 있습니다. 그곳에서 웹호스팅을 신청하면 DB 아이디와 DB 비밀번호가 생성 됩니다.

 

 

 

 

 

$rs = mysql_connect($host,$dbid,$dbpass);

위와 같이 함수에 변수 값을 대입하여 호출 하면 $rs 라는 이름으로 DB 객체가 만들어 집니다.

아래 함수는 계정에서 만들어진 DB를 선택하는 함수 입니다.

mysql_select_db($dbname);  

 

 

 

3. mysql_close($rs);

DB를 열었다면 닫는 것도 있어야 겠지요.

위에서 만든 "$rs"라는 객체를 이용하여 열려진 DB를 닫는 함수 입니다.

 

 

 

4. mysql_query();

역시 아주 많이 사용하는 함수 입니다.

DB에서 원하는 data를 가져오거나, 넣거나, 지우거나, 수정 할때 사용 하는 함수 입니다.

$ss = "select * from member order by id limit 1";

위의 내용을 해석하자면 DB의 member 라는 테이블에 있는 자료들을 id 순서(order by id)로 정렬하여 첫번째 한개의 레코드(limit 1)에 들어 있는 모든 필드(*)의 값을 반환하라는 것입니다. 

이 내용을 $ss 라는 변수에 저장하고 $rr = mysql_query($ss,$rs);

위와 같이 명령하면 member 테이블에서 한개의 레코드를 받아서 $rr 에  저장 합니다.

 

위에서 우리는 member 테이블을 만들 때  id, memid, age 라는 3개의 필드를 만들었습니다.

 

특별한 조건을 달고 싶다면 where 명령을 아래와 같이 사용 합니다.

$ss = "select * from member where memid = 't7ceo' order by id limit 1";

$ss 가 처음 명령과 달라진것은 memid 가 't7ceo'인 레코드 중에서 id 순서로 정렬했을 때 제일 먼저나오는 레코드 한개의 모든 필드값을 반환하라는 내용으로 바꼈습니다.

 

where memid = 't7ceo' 에서 memid 필드에 들어 있는 값이 문자일 경우는 "" 또는 '' 로 값을 감싸야 한다.  숫자값일 경우는 "" 와 ''을 사용 하지 않고 바로 where age = 17 이라고 입력한다.

 

만약 member 테이블에서 나이가 22살인 회원을 모두 출력하고 싶다면 아래와 같이 쿼리를 사용해야 합니다.

 

$ss = "select * from member where age = 22";

$rr = mysql_query($ss,$rs);

 

위 쿼리의 정상적인 작동 여부를 확인 하기 위해서 위 쿼리의 바로 밑에 아래 코드를 붙입니다.

 

if(!$rr) die("쿼리 실패 입니다.".mysql_error());

쿼리의 결과에 에러가 있다면 $rr 변수에 null 값이 반환 되고 그때 if() 함수에서 서버쪽 프로그램을 강제로 종료하고 "쿼리 실패 입니다" 하는 내용을 에러코드와 함께 반환 합니다.

 

 

 

5. $row=mysql_fetch_array($rr);

위에서 정상적으로 쿼리가 실행되면 $rr 변수에 객체가 생성되고 $rr 객체에 있는 값을 배열의 형태로 $row 라는 변수에 저장해 주는 함수 입니다.

 

 정리하자면 

session_start();


$host="localhost";

$dbid="당신의 DB아이디";

$dbpass="당신의 DB비밀번호";

$dbname="당신의 DB이름"; 


$rs=mysql_connect($host,$dbid,$dbpass);

mysql_select_db($dbname);


 

$ss = "select * from member where age = 22";

$rr = mysql_query($ss,$rs);

if(!$rr) die("쿼리 실패 입니다.".mysql_error());


//정상적으로 쿼리 되면 아래의 함수가 실행 됩니다.

$row=mysql_fetch_array($rr); 

//$row 에는 member 테이블에서 나이가 22살인 모든 회원의 필드가 배열의 형태로 저장 됩니다.

//나이가 22살인 회원의 회원아이디를 확인 할려면 아래처럼 사용하여 $myid 라는 변수에 저장한다.

//차례로 각 필드의 값을 변수에 저장 합니다.

$myid = $row[memid];

$myage = $row[age];

$idgab = $row[id];


mysql_close($rs);


우리는 member 테이블에서 나이가 22살인 회원의 모든 필드값을 가져와서 각각 $myid 에는 회원의 아이디를 $myage 에는 회원의 나이를, $idgab 에는 레코드의 id 필드값을 저장하는 php 프로그램을 완성 했습니다.

 

위의 내용을 외우지 마시고 저렇게 테이블에서 값을 찾아서 오는 구나 사용하는 php 함수는 저런것들 이구나 하고 이해하시고 다음에 복사해서 사용 할 수 있도록 하세요.

 

이제 한가지 남았습니다.

$myid, $myage, $idgab 변수에 있는 값을 Json 형태로 변환하여 클라이언트(스마트폰)으로 넘기는 방법을 알아야 합니다.  - 그것도 어렵지 않아요 ^^

 

 

6. Json 변환 및 클라이언트로 전달

json 은 data 를 배열의 형태로 변환하여 클라이언트에게 전달 합니다.

$result = '{}';    //아무 값도 존재 하지 않는 json 기본 형태 입니다.

$result = '{"myJson":{"memid":"$myid"}}';     //memid 라는 키값으로 $myid 변수에 있는 값을 저장합니다.

 

필드 3개 전체의 값을 전달해야 한다면 아래처럼 사용 합니다.

$result = '{"myJson":{"memid":"$myid", "myage":$age, "idgab":$idgab}}';

$result 라는 변수에 mysql에서 가져온 필드의 모든 값을 json 형태로 저장 했습니다.

여기서도 문자값은 ""를 사용하고 숫자 값은 사용하지 않는 다는 것을 기억하세요.

 

한사람의 필드의 값을 json 형태로 변환 할때는 위에서 처럼 하면 되지만 만약 위의 쿼리결과 나이가 22살인 회원이 2명 이라면 어떻게 json 형태로 만들 까요?

기본 형태는 $result = '{"myJson":[{},{}]}'; 입니다. 배열형태이며 3명이면 "{}"이 3개가 되겠죠.

 

$result = '{"myJson":[{"memid":"$myid", "myage":$age, "idgab":$idgab},{"memid":"$myid", "myage":$age, "idgab":$idgab}]}';

 

간단하죠?

클라이언트로 보내는 것도 간단합니다.

 

echo($result);

위에서 data 가  Json 형태로 저장된 변수 $result 를 echo() 함수를 이용해서 클라이언트로 보냅니다.

 

 

최종완성

member 테이블에서 나이가 22살인 회원의 정보를 한개 가져와서 json으로 변경하고 클라이언트에게 전달하는 php 프로그램 입니다.

화일 이름을 getMember 라고 결정했다면 이클립스 또는 드림위버 같은 문서 편집 프로그램에 아래의 코드를 복사하고 getMember.php 로 저장하면 완성 입니다. 

php 의 코드는 <? 로 시작해서  ?> 로 끝납니다.

 

<?  //php 프로그램의 시작을 나타 냅니다.

session_start();

$host="localhost";

$dbid="당신의 DB아이디";

$dbpass="당신의 DB비밀번호";

$dbname="당신의 DB이름"; 

 $rs=mysql_connect($host,$dbid,$dbpass);

 mysql_select_db($dbname);

 

 

$ss = "select * from member where age = 22 limit 1";

$rr = mysql_query($ss,$rs);

if(!$rr) die("쿼리 실패 입니다.".mysql_error());

 

$row=mysql_fetch_array($rr); 

 

$myid = $row[memid];

$myage = $row[age];

$idgab = $row[id];

$result = '{"myJson":{"memid":"$myid", "myage":$age, "idgab":$idgab}}';

mysql_close($rs);

 

echo($result)

?>  //php 프로그램의 끝을 나타 냅니다.

 

 

$ss 에 들어가는 쿼리 내용에 따라서 다양한 결과 값을 받을 수 있겠지요.

 

몇가지 예를 들자면 

1. 새로운 자료를 저장한다.

$ss = "insert into member (memid, age) values('$myid', $myage)";

$rr = mysql_query($ss,$rs);

if(!$rr) die("자료 추가 실패".mysql_error());

 

 

2. 선택한 회원의 자료 삭제

나이가 22살 이고 아이디가 "t7ceo" 인 회원을 모두 삭제 한다.

$ss = "delete from member where memid = 't7ceo' and age = 22" 

$rr = mysql_query($ss,$rs);

if(!$rr) die("자료 삭제 실패".mysql_error());

 

 

3. 선택한 회원의 자료 수정

회원아이디가 "t7ceo" 인 회원의 정보를 나이는 25살로 아이디는 "AAA"로 변경합니다.

$ss = "update member set age=25, memid="AAA" where memid = 't7ceo' limit 1"

$rr = mysql_query($ss,$rs);

if(!$rr) die("자료 수정 실패".mysql_error());

 

 

4. 나이가 20살인 회원이 몆명인지 확인해 볼까요?

$ss = "select   count(memid) as memsu   from member where age = 20";

$rr = mysql_query($ss,$rs);

if(!$rr) die("자료 수정 실패".mysql_error());

 

$row=mysql_fetch_array($rr);

$row[memsu] 에 결과 값이 저장 되어 있습니다. 20살인 회원의 아이디를 count() 함수로 계산해서 memsu 변수에 담아서 반환 하는 것입니다.

 

 

이상으로 하이브리드앱에서 php 언어를 이용하여 mysql 에 있는 data 를 가져와서 json 형태로 변경하고 그것을 클라이언트에게 제공하는 과정을 마무리 합니다.

 

이번 과정은 지금 제작중인 "S2" App을 위해서 만든 것으로 "S1" 앱에서는 하이브리드앱의 화면구성과 페이지 전환, 디자인 등의 내용을 담아서 간단한 하이브리드앱을 스스로 만들어 볼 수 있도록 하였습니다.

 

"S2" App 에서는 다른 내용은 모두 빼고 하이브리드앱의 핵심 기술이라고 할 수 있는 서버와의 통신기능을 누구나 스스로 구현 할 수 있도록 하는 것입니다.

 

"S2" App 은 현재 제작 중이며 완성되면 다시 공지 하겠습니다.

 

S1, S2 앱으로 여러분 스스로 자신의 아이디어를 하이브리드앱으로 제작할 수 있는 세상 기대 합니다.





'App & Web' 카테고리의 다른 글

Css Tip  (0) 2016.12.26
App Store Review Guidelines  (0) 2016.12.26
Ajax 기초  (0) 2016.11.11
Using Visual Studio Code with Ionic  (0) 2016.11.11
하이브리드 앱 UI 프레임워크 대결: Ionic, Famo.us, F7, OnsenUI  (0) 2016.11.11