PHP 와 MySQL 의연동 Jo, Heeseung
Content MySQL을지원하는 PHP API 함수 <form> 과변수값전달 DB 테이블생성과데이터읽기성적관리프로그램제작 2
1.2 DB 테이블생성과레코드삽입 데이터베이스테이블구조설계 [ 표 7-1] 명함관리데이터베이스테이블 ( 테이블명 : biz_card) 필드명 타입 추가사항 설명 num int primary key 일련번호 name char(10) 이름 company char(30) 회사 tel char(20) 전화번호 hp char(20) 휴대폰번호 address char(100) 주소 3
1.2 DB 테이블생성과레코드삽입 명령프롬프트에서데이터베이스테이블생성 biz_card 데이터베이스테이블생성 create table biz_card ( num int, name char(10), company char(30), tel char(20), hp char(20), address char(100), primary key(num) ); 4
1.2 DB 테이블생성과레코드삽입 biz_card.sql 에담긴 SQL 명령일괄실행 C: >cd \APM_Setup\htdocs C: APM_Setup\htdocs> mysql -ukdhong -p1234 -> kdhong_db < biz_card.sql 생성된데이터베이스테이블존재확인및구조보기 C: APM_Setup\htdocs> mysql -ukdhong -p1234 -> kdhong_db mysql> show tables; mysql> desc biz_card; 5
예제 7-1 API 함수를이용한레코드삽입 01 <meta http-equiv="content-type content="text/html; charset=euc-kr" /> 02 <? 03 $connect = mysql_connect("localhost","kdhong","1234"); 04 mysql_select_db("kdhong_db", $connect); 05 06 $sql = "insert into biz_card (num, name, company, tel, hp, address)"; 07 $sql.= " values (1, ' 원선우 ', ' 미래전자 ', '031-276-1829', "; 08 $sql.= " '010-8723-2837', ' 경기도용인시신갈동 388-23 번지 ')"; 09 10 $result = mysql_query($sql); 11 12 if ($result) 13 echo " 레코드삽입완료!"; 14 else 15 echo " 레코드삽입실패! 에러확인요망!"; 16 17 mysql_close($connect); 18?> 6
예제 7-1 API 함수를이용한레코드삽입 mysql_connect() 함수 형식 resource mysql_connect(string hostname [:port], string username, string password) - 첫번째인자 : 서버의호스트명 - 두번째인자 : 사용자계정 - 세번째인자 : 사용자계정의비밀번호 기능 PHP 와 MySQL 을연결한다. C:\> mysql -ukdhong -p1234 와같은기능이다. 반환값 - 성공 : 식별자번호 (resource) - 실패 : FALSE 설명 MySQL 에성공적으로연결하면 resource 라는시스템내부의식별자번호를반환한다. 식별자번호는시스템내부에서사용되므로우리가직접사용할일은별로없으며, 연결에성공하면 FALSE 가아닌값이설정된다고이해하면된다. 8
예제 7-1 API 함수를이용한레코드삽입 mysql_select_db() 함수 형식 bool mysql_select_db(string database_name, resource link_identifier) - 첫번째인자 : 사용할데이터베이스명 - 두번째인자 : 식별자번호 (mysql_connect() 함수의반환값 ) 기능사용할데이터베이스를선택 mysql> use kdhong_db; 와같은명령이다. 반환값 - 성공 : TRUE - 실패 : FALSE 설명 mysql_connect() 함수를통해 MySQL 과연결된후에는 mysql_select_db() 함수로사용할데이터베이스를선택한다. 9
예제 7-1 API 함수를이용한레코드삽입 mysql_query() 함수 형식 resouce mysql_query(string query, resource link_identifier) - 첫번째인자 : SQL 명령 - 두번째인자 : 식별자번호 (mysql_connect() 함수의반환값 ) 기능함수의인자에있는 SQL 명령을실행한다. 반환값 - 성공 : TRUE/ SQL 명령실행결과 - 실패 : FALSE 설명함수의두번째인자가생략되면가장최근에연결된데이터베이스에서명령을실행한다. 첫번째인자가 insert/delete/update 명령실행에성공하면 TRUE 를반환하고, 실패하면 FALSE 를반환한다. 만약 select 명령실행에성공하면해당레코드의정보를반환하고, 실패하면 FALSE 를반환한다. 10
예제 7-1 API 함수를이용한레코드삽입 mysql_close() 함수 형식 bool mysql_close(resource link_identifier) - 첫번째인자 : 식별자번호 기능 MySQL 과연결을종료한다. 반환값 - 성공 : TRUE - 실패 : FALSE 설명 mysql_connect() 함수로데이터베이스에접속한후작업이모두끝나면, 반드시 mysql _close() 함수로 MySQL 연결을종료해야한다. link_identifier 는 mysql_connect() 함수의반환값인식별자번호를의미한다. 만약함수의인자가생략된다면가장최근에연결된데이터베이스와서버의연결을종료한다. 11
2.1 회원가입페이지생성 12
예제 7-2 회원가입페이지 01 <html> 02 <head> 03 <meta http-equiv="content-type" content="text/html; charset=euc-kr" /> 04 </head> 05 <body> 06 <h2> 회원가입 </h2> 07 <form name="mem_form" method="post" action="mem_print.php"> 08 <input type="hidden" name="title" value=" 회원가입양식 "> 09 <table border="1" width="640" cellspacing="1" cellpadding="4"> 10 <tr> 11 <td align="right">* 아이디 :</td> 12 <td><input type="text" size="15" maxlength="12" name="id" value="guest"></td> 13 </tr> 14 <tr> 15 <td align="right" > * 이름 :</td> 16 <td><input type="text" size="15" maxlength="12" name="name"></td> 17 </tr> 13
예제 7-2 회원가입페이지 18 <tr> 19 <td align="right"> * 비밀번호 :</td> 20 <td><input type="password" size="15" maxlength="10" name="passwd" value="1234"></td> 21 </tr> 22 <tr> 23 <td align="right"> * 비밀번호확인 :</td> 24 <td><input type="password" size="15" maxlength="12" name="passwd_confirm"> </td> 25 </tr> 26 <tr> 27 <td align="right"> 성별 :</td> 28 <td><input type="radio" name="gender" value="m" checked> 남 29 <input type="radio" name=" gender " value="f"> 여 </td> 30 </tr> 14
예제 7-2 회원가입페이지 31 <tr> 32 <td align="right"> 휴대전화 :</td> 33 <td><select name="phone1"> 34 <option> 선택 </option> 35 <option value="010">010</option> 36 <option value="011">011</option> 37 <option value="017">017</option> 38 </select> - 39 <input type="text" size="4" name="phone2" maxlength="4"> - 40 <input type="text" size="4" name="phone3" maxlength="4"></td> 41 </tr> 42 <tr> 43 <td align="right"> 주소 :</td> 44 <td><input type="text" size="50" name="address"></td> 45 </tr> 15
예제 7-2 회원가입페이지 46 <tr> 47 <td align="right"> 취미 :</td> 48 <td> 49 <input type="checkbox" name="movie" value="yes" checked> 영화감상 50 <input type="checkbox" name="book" value="yes" > 독서 51 <input type="checkbox" name="shop" value="yes" > 쇼핑 52 <input type="checkbox" name="sport" value="yes" checked> 운동 53 </td> 54 </tr> 55 <tr> 56 <td align="right"> 자기소개 :</td> 57 <td><textarea name="intro" rows="5" cols="60"></textarea></td> 58 </tr> 59 </table> 60 <br> 61 <table border="0" width="640"> 16
예제 7-2 회원가입페이지 62 <tr><td align="center"> 63 <input type="submit" value=" 확인 "> 64 <input type="reset" value=" 다시작성 "></td> 65 </tr> 66 </table> 67 </form> 68 </body> 69 </html> 17
예제 7-2 회원가입페이지 <html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-kr" /> </head> <body> <h2> 회원가입 </h2> <form name="mem_form" method="post" action="mem_print.php"> <input type="hidden" name="title" value=" 회원가입양식 "> <table border="1" width="640" cellspacing="1" cellpadding="4"> <tr> <td align="right">* 아이디 :</td> <td><input type="text" size="15" maxlength="12" name="id" value="guest"></td> </tr> <tr> <td align="right" > * 이름 :</td> <td><input type="text" size="15" maxlength="12" name="name"></td> </tr> <tr> <td align="right"> * 비밀번호 :</td> <td><input type="password" size="15" maxlength="10" name="passwd" value="1234"></td> </tr> <tr> <td align="right"> * 비밀번호확인 :</td> <td><input type="password" size="15" maxlength="12" name="passwd_confirm"></td> </tr> <tr> <td align="right"> 성별 :</td> <td><input type="radio" name="gender" value="m" checked> 남 <input type="radio" name="gender" value="f"> 여 </td> </tr> <tr> <td align="right"> 휴대전화 :</td> <td><select name="phone1"> <option> 선택 </option> <option value="010">010</option> <option value="011">011</option> <option value="017">017</option> </select> - <input type="text" size="4" name="phone2" maxlength="4"> - <input type="text" size="4" name="phone3" maxlength="4"></td> </tr> <tr> <td align="right"> 주소 :</td> <td><input type="text" size="50" name="address"></td> </tr> <tr> <td align="right"> 취미 :</td> <td> <input type="checkbox" name="movie" value="yes" checked> 영화감상 <input type="checkbox" name="book" value="yes" > 독서 <input type="checkbox" name="shop" value="yes" > 쇼핑 <input type="checkbox" name="sport" value="yes" checked> 운동 </td> </tr> <tr> <td align="right"> 자기소개 :</td> <td><textarea name="intro" rows="5" cols="60"></textarea></td> </tr> </table> <br> <table border="0" width="640"> <tr><td align="center"> <input type="submit" value=" 확인 "> <input type="reset" value=" 다시작성 "></td> </tr> </table> </form> </body> </html> 18
예제 7-3 입력된회원정보출력 mem_print.php 01 <meta http-equiv="content-type" content="text/html; charset=euc-kr" /> 02 <? 03 echo " 아이디 : $id<br>"; 04 echo " 이름 : $name<br>"; 05 echo " 비밀번호 : $passwd<br>"; 06 echo " 비밀번호확인 : $passwd_confirm<br>"; 07 echo " 성별 : $sex<br>"; 08 echo " 휴대번호 : $phone1 - $phone2 - $phone3<br>"; 09 echo " 주소 : $address<br>"; 10 echo " 영화감상 : $movie<br>"; 11 echo " 독서 : $book<br>"; 12 echo " 쇼핑 : $shop<br>"; 13 echo " 운동 : $sport<br>"; 14 echo " 자기소개 : $intro<br>"; 15 echo " 제목 (hidden 타입에서전달 ) : $title<br>"; 16?> 19
2.2 회원정보확인 [ 예제 7-3] 실행결과 20
2.2 회원정보확인 변수전달방식 POST 방식 - <form> 태그에서사용된컨트롤의선택사항을 action 에명시된 URL 로전달 - 한컨트롤의 name 속성값을변수명으로, 폼양식에서사용자가입력한내용이나컨트롤의 value 속성값을그변수값으로전달 GET 방식 - 변수를통하여간단하게원하는값을전달할때사용하며, 이동하려는 URL 뒤에? 를붙이고변수명과값을한쌍으로묶어서정보를전달 - 전달하려는변수가여러개일경우에는 & 로구분 21
HTML input Tag <input> 태그 : 텍스트입력박스 형식및사용예 <input type="text" size="15" maxlength="12" name="id" value="guest"> - size: 입력박스의가로크기 - maxlength: 입력받을수있는최대글자개수 - name: 입력박스의이름 - value: 박스안의초깃값 기능텍스트입력박스를만든다. 참고박스안에 guest 가입력된상태로표시된다. 22
HTML input Tag <input> 태그 : 비밀번호입력박스 형식및사용예 <input type="password" size="15" maxlength="10" name="passwd" value="1234"> - size : 입력박스의가로크기 - maxlength : 입력받을수있는최대글자개수 - name : 입력박스의이름 - value : 박스안의초깃값 기능비밀번호입력박스를만든다. 참고박스안에 **** 가입력된상태로표시된다. 23
HTML input Tag <input> 태그 : 라디오버튼 형식및사용예 <input type= "radio" name="gender" value="m" checked> - name: 라디오버튼의이름 - checked: 초기선택값 ([ 그림 7-6] 의성별항목참고 ) - value: 라디오버튼에표시하면설정되는값 기능라디오버튼을만든다. 설명만약 value 값이 "M" 이고라디오버튼이체크되어있으면, 라디오버튼의값으로 M 이전달된다. 24
HTML input Tag <select><option> 태그 형식및사용예 <select name= "phone1"> <option value="010">010</option> <option value="011">011</option> </select> - name: 콤보박스의이름 - value: 콤보박스에서해당항목이선택되면설정되는값 기능라디오버튼을만든다. 25
HTML input Tag <input> 태그 : 체크박스 형식및사용예 <input type="checkbox" name="movie" value="yes" checked> - name: 체크박스의이름 - checked: 화면의초기선택값 - value: 체크박스가체크되면설정되는값 기능체크박스를만든다. 설명 value 값으로 "yes" 가설정되어있으면이체크박스컨트롤의값으로 "yes" 가전달된다. 26
HTML input Tag <textarea> 태그 형식및사용예 <textarea name="intro" rows="5" cols="60"> </textarea> - name: 여러행텍스트입력상의이름 - rows: 상자에입력할수있는행의개수, 상자의세로크기 - cols: 한행에입력할수있는글자의개수, 상자의가로크기 기능여러행텍스트입력박스를만든다. <input> 태그 : 이미지버튼 형식및사용예 <input type="image" src=" 이미지파일명 "> 기능이미지버튼을만든다. 설명 [ 예제 7-2] 63 행의확인버튼 (<input type="submit" value=" 확인 ">) 대신에특정이미지를버튼으로사용하고싶으면 src 옵션을사용한다. 27
2.2 회원정보확인 <input> 태그사용 <input type="submit"> <form> 문의 action 에설정된파일로이동 각컨트롤의속성인 name의값이변수값으로전달 Hidden 타입 : <input type="hidden"> 28
3.1 DB 테이블생성과레코드삽입 membership.sql 파일을 [htdocs] 폴더에복사 http://cslab.jbnu.ac.kr/course/2014_2/mp/7.membership.sql 29
3.1 DB 테이블생성과레코드삽입 membership.sql 을일괄실행 C:\>cd \APM_Setup\htdocs C:\APM_Setup\htdocs> mysql ukdhong p1234 -> kdhong_db < membership.sql 생성된테이블과레코드확인 C:\APM_Setup\htdocs> mysql ukdhong p1234 -> kdhong_db mysql> show tables; mysql> select * from membership; 30
예제 7-4 mysql_fetch_array() 함수를이용한데이터읽기 01 <meta http-equiv="content-type" content="text/html; charset=euc-kr" /> 02 <? 03 $connect = mysql_connect("localhost","kdhong","1234"); 04 $db_con = mysql_select_db("kdhong_db", $connect); 05 06 $sql = "select * from membership;"; 07 $result = mysql_query($sql, $connect); 08 09 $number = 1; 10?> 11 <h2> mysql_fetch_array() 를이용한데이터읽기 </h2> 12 <table width= "800" border="1" cellpadding="10"> 13 <tr align="center"> 14 <td bgcolor="#cccccc"> 일련번호 </td> 15 <td bgcolor="#cccccc"> 아이디 </td> 16 <td bgcolor="#cccccc"> 이름 </td> 17 <td bgcolor="#cccccc"> 우편번호 </td> 18 <td bgcolor="#cccccc"> 주소 </td> 19 <td bgcolor="#cccccc"> 전화번호 </td> 20 <td bgcolor="#cccccc"> 나이 </td> 21 </tr> 31
예제 7-4 mysql_fetch_array() 함수를이용한데이터읽기 22 <? 23 while ( $row = mysql_fetch_array($result)) 24 { 25 echo " 26 <tr> 27 <td> $number </td> 28 <td> $row[id] </td> 29 <td> $row[name] </td> 30 <td> $row[post_num] </td> 31 <td> $row[address] </td> 32 <td> $row[tel] </td> 33 <td> $row[age] </td> 34 </tr> 35 "); 36 $number++; 37 } 38 39 mysql_close(); 40?> 41 </table> 32
예제 7-4 mysql_fetch_array() 함수를이용한데이터읽기 mysql_fetch_array() 함수 형식 array mysql_fetch_array(resource result) - 인자 : 식별자번호 (mysql_query() 의반환값 ) 기능데이터베이스에서레코드의데이터를배열형태로가져온다. 반환값 - 성공 / 실패 : 배열형태의레코드데이터 /FALSE 설명가져온데이터는 $row[num], $row[id] 와같이레코드의필드명을배열인덱스에직접입력한형태로사용한다. 33
예제 7-5 mysql_fetch_row() 함수를이용한데이터읽기 01 <meta http-equiv="content-type" content="text/html; charset=euc-kr" /> 02 <? 03 $connect = mysql_connect("localhost","kdhong","1234"); 04 $db_con = mysql_select_db("kdhong_db", $connect); 05 06 $sql = "select * from membership where address like '% 서울 %' order by age;"; 07 $result = mysql_query($sql,$connect); 08 09 $fields=mysql_num_fields($result); 10 11 $number = 1; 12?> 34
예제 7-5 mysql_fetch_row() 함수를이용한데이터읽기 13 <h2> mysql_fetch_row() 를이용한데이터읽기 </h2> 14 <table width= "800" border="1" cellspacing="0" cellpadding="5"> 15 <tr align="center"> 16 <td bgcolor="#cccccc"> 일련번호 </td> 17 <td bgcolor="#cccccc"> 아이디 </td> 18 <td bgcolor="#cccccc"> 이름 </td> 19 <td bgcolor="#cccccc"> 우편번호 </td> 20 <td bgcolor="#cccccc"> 주소 </td> 21 <td bgcolor="#cccccc"> 전화번호 </td> 22 <td bgcolor="#cccccc"> 나이 </td> 23 </tr> 35
예제 7-5 mysql_fetch_row() 함수를이용한데이터읽기 24 <? 25 while ( $row = mysql_fetch_row($result)) 26 { 27 echo "<tr>"; 28 echo "<td> $number </td>"; 29 30 for ($i=0; $i < $fields; $i++) 31 { 32 echo "<td> $row[$i] </td>"; 33 } 34 35 echo "</tr>"; 36 37 $number++; 38 } 39 40 mysql_close(); 41?> 42 </table> 36
예제 7-5 mysql_fetch_row() 함수를이용한데이터읽기 mysql_fetch_row() 함수 형식 array mysql_fetch_row(resource result) - 인자 : 식별자번호 (mysql_query() 의반환값 ) 기능데이터베이스에서레코드의데이터를배열형태로가져온다. 반환값 - 성공 / 실패 : 배열형태의레코드데이터 /FALSE 설명 array mysql_fetch_array() 함수와동일한기능을수행하지만, 가져온데이터는레코드의필드번호를배열인덱스에입력한 $row[1], $row[$i] 와같은형태로사용하는점이다르다. 배열인덱스와필드대응관계예는 [ 표 7-2] 를참고한다. 37
예제 7-6 mysql_result() 함수를사용한데이터읽기 01 <meta http-equiv="content-type" content="text/html; charset=euc-kr" /> 02 <? 03 $connect = mysql_connect("localhost","kdhong","1234"); 04 $db_con = mysql_select_db("kdhong_db", $connect); 05 06 $sql = "select * from membership where address like '% 서울 %' order by age;"; 07 $result = mysql_query($sql,$connect); 08 09 $records = mysql_num_rows($result); 10 11 $fields=mysql_num_fields($result); 12 13 $number = 1; 14?> 38
예제 7-6 mysql_result() 함수를사용한데이터읽기 15 <h2> mysql_result() 를이용한데이터읽기 </h2> 16 <table width= "800" border="1" cellspacing="0" cellpadding="5"> 17 <tr align="center"> 18 <td bgcolor="#cccccc"> 일련번호 </td> 19 <td bgcolor="#cccccc"> 아이디 </td> 20 <td bgcolor="#cccccc"> 이름 </td> 21 <td bgcolor="#cccccc"> 우편번호 </td> 22 <td bgcolor="#cccccc"> 주소 </td> 23 <td bgcolor="#cccccc"> 전화번호 </td> 24 <td bgcolor="#cccccc"> 나이 </td> 25 </tr> 39
예제 7-6 mysql_result() 함수를사용한데이터읽기 26 <? 27 for ($i = 0; $i < $records; $i++) 28 { 29 echo "<tr>"; 30 echo "<td> $number </td>"; 31 32 for ($j = 0; $j < $fields; $j++) 33 { 34 $data = mysql_result($result, $i, $j); 35 echo "<td> $data </td>"; 36 } 37 echo "</tr>"; 38 $number++; 39 } 40 mysql_close(); 41?> 42 </table> 40
예제 7-6 mysql_result() 함수를사용한데이터읽기 mysql_result() 함수 형식 mixed mysql_result(resource result, int row, mixed field) - 첫번째인자 : 식별자번호 (mysql_query() 의반환값 ) - 두번째인자 : 레코드의행위치 - 세번째인자 : 레코드의열위치 기능레코드의특정위치에저장된값을가져온다. 반환값 - 성공 / 실패 : 해당위치에있는값 /FALSE 설명 mysql_fetch_row() 와 mysql_fetch_array() 함수가하나의레코드정보를가져오는반면, mysql_result() 함수는특정위치에해당하는값을가져온다. 세번째인자에는필드의일련번호 (0 부터시작 ) 와필드명을모두사용할수있고, 반환값의형태에따라반환값의타입이달라진다. 41
예제 7-6 mysql_result() 함수를사용한데이터읽기 mysql_num_fields() 함수 형식 int mysql_num_fields(resource result) - 인자 : 식별자번호 (mysql_query() 의반환값 ) 기능인자의필드개수를알려준다. 반환값 - 성공 / 실패 : 필드의개수 /FALSE 설명검색결과가저장된첫번째인자 result 의필드개수를알려준다. 42
예제 7-6 mysql_result() 함수를사용한데이터읽기 mysql_num_rows() 함수 형식 int mysql_num_rows(resource result) - 인자 : mysql_query() 의반환값 기능데이터베이스에있는레코드의개수를알려준다. 반환값 - 성공 / 실패 : 레코드의개수 /FALSE 설명 select 문의실행결과인함수의인자가가지고있는레코드의개수를알고싶을때사용한다. 43