MySQL 연동 PHP 프로그래밍 기초 순천향대학교 정보기술공학부 이상정
기본적인 HTML 태그
HTML 테이블 예 순천향대학교 정보기술공학부 이 상 정 3
HTML 소스 <html> <title>MySQL+PHP 연동 프로그램입니다.</title> <body> <center><h1>학생 리스트</h1> <table border=2 bgcolor=white> <tr> <td>학번</td><td>이름</td><td>학과</td><td>전화번호</td> </tr> <td>S006</td> <td>황정숙</td> <td>사학과</td> <td>678-9012</td> <td>S005</td> <td>김상진</td> 순천향대학교 정보기술공학부 이 상 정 4
HTML 소스 <td>사학과</td> <td>567-8901</td> </tr> <tr> <td>S002</td> <td>최민국</td> <td>컴퓨터공학과</td> <td>234-5678</td> <td>S001</td> <td>박소명</td> <td>123-4567</td> </table> </center> </body> </html> 순천향대학교 정보기술공학부 이 상 정 5
HTML 태그 태 그 설 명 <html> … </html> HTML 문서의 시작과 끝을 나타낸다. <title> … </title> 웹 브라우저 윈도우 창의 제목을 나타낸다. <body> … </body> HTML 문서의 본문을 나타낸다. <center>… </center> 문자열을 가운데 정렬하여 나타낸다. <table>… </table> 테이블 형태로 데이터를 표현한다. <tr> … </tr> 테이블의 한 행을 표현한다. <td> … </td> 행의 한 컬럼 데이터를 표현한다. 순천향대학교 정보기술공학부 이 상 정 6
MySQL 관련 PHP 함수
MySQL 연동 PHP 프로그램 구성 MySQL 서버와 연결 설정 데이터베이스 선택 SQL 실행 버퍼 해제 MySQL 서버와 연결 종료 순천향대학교 정보기술공학부 이 상 정 8
PHP와 MySQL 연동 함수 MySQL 연결 데이터베이스 선택 SQL 실행 연결변수 = mysql_connect(호스트, 사용자이름, 패스워드); $db = mysql_connect(“localhost”,“sjlee”,“pppp”); 데이터베이스 선택 mysql_select_db(데이터베이스, 연결변수); mysql_select_db(“education”, $db); SQL 실행 결과변수 = mysql_query(SQL 명령, 연결변수); $result = mysql_query(“select * from student”, $db); 순천향대학교 정보기술공학부 이 상 정 9
PHP와 MySQL 연동 함수 SQL 수행결과 레코드 추출, 컬럼 추출 버퍼해제 연결종료 mysql_result(결과변수,인덱스,필드명); mysql_result($result, $i, scode); 레코드변수 = mysql_fetch_array(결과변수); $row = mysql_fetch_array($result); 레코드변수[필드이름] 또는 레코드변수[인덱스] $row[scode] 또는 $row[0] 버퍼해제 mysql_free_result(결과변수); 연결종료 mysql_close(연결변수); 순천향대학교 정보기술공학부 이 상 정 10
학생 테이블 출력 프로그램 <html> <title>MySQL+PHP 연동 프로그램입니다.</title> <body> <?php // 화일명 : 학생 리스트를 출력하는 liststudent.php echo "<center><h1>학생 리스트</h1>\n"; $conn = mysql_connect('localhost','sjlee',‘ppppp') or die("MySQL 서버 연결 에러"); mysql_select_db('education',$conn) or die("DB 오픈 에러"); $result = mysql_query("select * from student",$conn); echo "<table border=2 bgcolor=white>\n"; echo "<tr>\n"; echo "<td>학번</td><td>이름</td><td>학과</td><td>전화번호</td>\n"; echo "</tr>\n"; $rows = mysql_num_rows($result); // 전체 레코드의 수 반환 $i = 0; 순천향대학교 정보기술공학부 이 상 정 11
학생 테이블 출력 프로그램 while ( $i < $rows ) { echo "<tr>\n"; echo "\t<td>" . mysql_result($result, $i, scode) . "</td>\n"; echo "\t<td>" . mysql_result($result, $i, sname) . "</td>\n"; echo "\t<td>" . mysql_result($result, $i, sdept) . "</td>\n"; echo "\t<td>" . mysql_result($result, $i, sphone) . "</td>\n"; echo "</tr>\n"; $i++; } echo "</table>\n"; echo "</center>\n"; mysql_free_result($result); mysql_close($conn); ?> </body> </html> 순천향대학교 정보기술공학부 이 상 정 12
폼 입력 값을 통한 데이터 검색
FORM 태그 HTML에서 사용자 입력을 받는 태그 METHOD <FORM NAME=“폼이름” METHOD=[POST|GET] ACTION=“실행문서”> <INPUT TYPE=[TEXT|PASSWORD…] NAME=“변수명” VALUE=“초기값”> <INPUT TYPE=[SUBMIT|RESET] VALUE=“버튼이름”> </FORM> METHOD 사용자 입력을 웹서버에 전달하는 방식을 지정 POST 방식은 웹 브라우저의 주소입력 부분에 입력 값이 표시되지 않는다. GET 방식은 입력값이 표시 순천향대학교 정보기술공학부 이 상 정 14
FORM 태그 ACTION INPUT 태그 SUBMIT 버튼 클릭 시 실행되는 웹 서버 상의 프로그램 지정 입력변수의 데이터 타입, 크기 등과 같은 속성 지정 문자열 입력 시 TYPE 속성은 “TEXT” 암호 입력 시 TYPE 속성은 “PASSWORD” NAME 속성으로 입력변수 지정 순천향대학교 정보기술공학부 이 상 정 15
학생 검색 화면 웹 브라우저 화면에서 학생 이름을 입력받아 학생에 대한 신상 데이터를 검색 출력하는 프로그램 입력화면 순천향대학교 정보기술공학부 이 상 정 16
select.html <html> <title>폼 입력 예제......</title> <body> <center> <h3>검색하려는 학생 이름을 입력하세요</h3> <form name="PHP" method=post action="select.php"> 학생이름 : <input type=text name="fname"><br><br> <input type=submit value="검색"> <input type=reset value="취소"> </form> </center> </body> </html> 순천향대학교 정보기술공학부 이 상 정 17
select.php <html> <title> 학생 검색 </title> <body> <center> <?php // 화일명 : select.php echo "입력된 폼 변수값 : " . $fname . "<br><br>\n"; $conn = mysql_connect('localhost',‘sjlee','pppp'); mysql_select_db('education',$conn); $result = mysql_query("select * from student where sname = '$fname'",$conn); echo "검색된 결과 ===><br><br>\n"; 순천향대학교 정보기술공학부 이 상 정 18
select.php while ( $row = mysql_fetch_array($result) ) { echo "학번: " . $row[scode] . "<br>\n"; echo "이름: " . $row[sname] . "<br>\n"; echo "학과: " . $row[sdept] . "<br>\n"; echo "전화: " . $row[sphone] . "<br>\n"; } mysql_free_result($result); mysql_close($conn); ?> </center> </body> </html> 순천향대학교 정보기술공학부 이 상 정 19
실행결과 순천향대학교 정보기술공학부 이 상 정 20
데이터 입력 처리 프로그램
입력 화면 순천향대학교 정보기술공학부 이 상 정 22
insert-st.html <html> <meta http-equiv="Content-Type" content="text/html; charset=euc-kr"> <title>학생 레코드 입력...</title> <body> <center> <h3>학생 카드 입력</h3> <form name="PHP" method=post action="insert-st.php"> 학번 : <input type=text name="scode"><br> 이름 : <input type=text name="sname"><br> 학과 : <input type=text name="sdept"><br> 전화 : <input type=text name="sphone"><br><br> <input type=submit value="저장"> <input type=reset value="취소"> </form> </center> </body> </html> 순천향대학교 정보기술공학부 이 상 정 23
insert-st.php <html> <title> 학생 레코드 저장 </title> <body> <center> <?php // 화일명 : insert-st.php $conn = mysql_connect('localhost',‘sjlee',‘pppp'); mysql_select_db('education',$conn); $sql = "insert into student (scode, sname, sdept, sphone) "; $sql = $sql . " values ('$scode', '$sname', '$sdept', '$sphone')"; $result = mysql_query($sql,$conn); $result = mysql_query("select * from student where sname = '$sname'",$conn); 순천향대학교 정보기술공학부 이 상 정 24
insert-st.php echo "저장된 학생 레코드 ===><br><br>\n"; while ( $row = mysql_fetch_array($result) ) { echo "학번: " . $row[scode] . "<br>\n"; echo "이름: " . $row[sname] . "<br>\n"; echo "학과: " . $row[sdept] . "<br>\n"; echo "전화: " . $row[sphone] . "<br>\n"; } mysql_free_result($result); mysql_close($conn); ?> </center> </body> </html> 순천향대학교 정보기술공학부 이 상 정 25
실행결과 순천향대학교 정보기술공학부 이 상 정 26
데이터 수정 처리 프로그램
데이터 수정 절차 검색된 레코드의 변경할 필드를 입력받아 수정 수정절차 update-st.php 변경하려는 레코드가 테이블에 있는지 확인 기존의 필드들을 출력 데이터 수정을 위해 새로운 필드값 입력 입력받은 필드값으로 테이블 수정 update-st.php Form 태그와 php 액션 프로그램을 같은 파일 => $PHP_SELF 이용 INPUT 태그의 hidden 속성, readonly 속성 사용 순천향대학교 정보기술공학부 이 상 정 28
수정처리 화면 1 순천향대학교 정보기술공학부 이 상 정 29
수정처리 화면 2 순천향대학교 정보기술공학부 이 상 정 30
update-st.php <html> <title> 학생 레코드 수정 </title> <body> <center> <font size=+1><b>학생 카드 검색 및 수정</b></font> <form name="search" method=post action="<?php echo $PHP_SELF; ?>"> 이름 : <input type=text name="sname" value="<?php echo $sname;?>"><br> <input type=hidden name=mode value='search'><br> <input type=submit value="검색"> <input type=reset value="취소"> </form> <hr><br> <?php // 화일명 : update-st.php 순천향대학교 정보기술공학부 이 상 정 31
update-st.php if ( $sname ) { $conn = mysql_connect('localhost','prof','phpmysql'); mysql_select_db('education',$conn); if ( $mode == 'update' ) { $sql = "update student set scode='$scode', sname='$sname',"; $sql = $sql . " sdept='$sdept', sphone='$sphone' where scode='$scode'"; $result = mysql_query($sql,$conn); } $result = mysql_query("select * from student where sname = '$sname'",$conn); $row = mysql_fetch_array($result); echo "<font size=+1><b>학생 카드 수정</b></font>\n"; echo "<form name=update method=post action=$PHP_SELF>\n"; echo "학번 : <input type=text name=scode "; echo " readonly value=$row[scode]><br>\n"; 순천향대학교 정보기술공학부 이 상 정 32
update-st.php echo "이름 : <input type=text name=sname value=$row[sname]><br>\n"; echo "학과 : <input type=text name=sdept value=$row[sdept]><br>\n"; echo "전화 : <input type=text name=sphone value=$row[sphone]><br><br>\n"; echo "<input type=hidden name=mode value='update'>\n"; echo "<input type=submit value='수정'> "; echo "<input type=reset value='취소'>\n"; echo "</form>"; echo "<hr><br>\n"; mysql_free_result($result); mysql_close($conn); $sname = ""; } ?> </center> </body> </html> 순천향대학교 정보기술공학부 이 상 정 33
데이터 삭제 처리 프로그램
데이터 삭제 절차 레코드의 이름을 입력받아 삭제 수정절차 delete-st.php 삭제하려는 레코드가 테이블에 있는지 확인 기존의 필드들을 출력 데이터 삭제 delete-st.php 앞의 데이터 수정과 유사 SQL로 DELETE 문장 사용 순천향대학교 정보기술공학부 이 상 정 35
삭제 화면 순천향대학교 정보기술공학부 이 상 정 36
delete-st.php <html> <title> 학생 레코드 삭제 </title> <body> <center> <font size=+1><b>학생 카드 검색 및 삭제</b></font> <form name="search" method=post action="<?php echo $PHP_SELF; ?>"> 이름 : <input type=text name="sname" value="<?php echo $sname;?>"><br> <input type=hidden name=mode value='search'><br> <input type=submit value="검색"> <input type=reset value="취소"> </form> <hr><br> <?php // 화일명 : delete-st.php 순천향대학교 정보기술공학부 이 상 정 37
delete-st.php if ( $sname ) { $conn = mysql_connect('localhost','prof','phpmysql'); mysql_select_db('education',$conn); if ( $mode == 'delete' ) { $sql = "delete from student where scode = '$scode'"; $result = mysql_query($sql,$conn); } $result = mysql_query("select * from student where sname = '$sname'",$conn); $row = mysql_fetch_array($result); echo "<font size=+1><b>학생 카드 삭제</b></font>\n"; echo "<form name=delete method=post action=$PHP_SELF>\n"; echo "학번 : <input type=text name=scode readonly value=$row[scode]><br>\n"; echo "이름 : <input type=text name=sname readonly value=$row[sname]><br>\n"; echo "학과 : <input type=text name=sdept readonly value=$row[sdept]><br>\n"; echo "전화 : <input type=text name=sphone readonly value=$row[sphone]><br><br>\n"; 순천향대학교 정보기술공학부 이 상 정 38
delete-st.php echo "<input type=hidden name=mode value='delete'>\n"; echo "<input type=submit value='삭제확인'> "; echo "<input type=reset value='취소'>\n"; echo "</form>"; echo "<hr><br>\n"; mysql_free_result($result); mysql_close($conn); $sname = ""; } ?> </center> </body> </html> 순천향대학교 정보기술공학부 이 상 정 39
테이블 레코드를 출력하는 SQL 문장 처리기
SQL 문장 처리기 구성 SELECT 문장을 입력 받아서 실행시킨 결과를 스프레드시트 형태로 출력하는 프로그램 프로그램 파일 구성 스타일 정의 파일(style.inc) SQL 문장을 입력받아 데이터베이스를 검색하는 메인 구동 파일(sqltest.php) 검색결과 출력형식에 관한 라이브러리 파일(table.inc) 순천향대학교 정보기술공학부 이 상 정 41
실행화면 예 table title table head table row 순천향대학교 정보기술공학부 이 상 정 42
스타일 시트 스타일 시트는 태그에 사용될 속성을 미리 정의하여 전체 페이지의 일관성 유지 style.inc 스타일 파일 <A> 태그 속성 마우스가 앵커(anchor) 텍스트 위로 움직이면 밑줄 그려짐 <H1>,<H2>, <BODY>,<TD>,<TH> 태그 속성 폰트의 종류, 크기 지정 순천향대학교 정보기술공학부 이 상 정 43
style.inc <STYLE TYPE="text/css"> <!-- A { text-decoration: none; } A:hover { text-decoration: underline; } H1 { font-family: arial,helvetica,sans-serif; font-size: 18pt; font-weight: bold;} H2 { font-family: arial,helvetica,sans-serif; font-size: 14pt; font-weight: bold;} BODY,TD { font-family: arial,helvetica,sans-serif; font-size: 10pt; } TH { font-family: arial,helvetica,sans-serif; font-size: 11pt; font-weight: bold; } --> </STYLE> 순천향대학교 정보기술공학부 이 상 정 44
SQL 문장 처리기(sqltest.php) style.inc, table.inc 포함 require 문 form 문으로 sql 문장 입력 받아서 action으로 자신의 프로그램 호출 stripslashes() 함수 호출 Php는 폼 변수의 입력된 문자 중 ‘, “ 는 \’, \”로 입력 받기 때문에 이를 제거 ereg_replace() 함수 호출 SQL 의 끝에 붙은 ; 제거 mysql_query() 함수로 SQL 실행 mysql_list_result() 함수 호출하여 테이블 출력 순천향대학교 정보기술공학부 이 상 정 45
sqltest.php 1 <?php // 화일명 : SELECT SQL 실행 sqltest.php ?> <html> <head> <title> Select SQL 문장 실행</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-kr"> </head> <body> require("style.inc"); require("table.inc"); <center> <form name="PHP" method=post action="<?php echo $PHP_SELF; ?>"> SELECT 문장<br> <textarea name='sql' rows=4 cols=50 ></textarea><br><br> 순천향대학교 정보기술공학부 이 상 정 46
sqltest.php 2 <input type=submit value="실행"> <input type=reset value="취소"> </form> </center> <center> <?php /* http://www.php.net/manual/function.addslashes.php Php doesn't strip the slashes when info comes out of the database. The difference here is that php4 automatically adds slashes to incomming variables (from a post/get) and php3 didn't. So if you're adding slashes manually, suddenly you have double. Either drop your second addslashes() or add a stripslashes to the beginning to all the variables that come in. */ if ( $sql ) { $sql = stripslashes($sql); $sql = ereg_replace ("\;","",$sql); // ';' 문자 제거 순천향대학교 정보기술공학부 이 상 정 47
sqltest.php 3 $conn = mysql_connect('localhost','sjlee','pppp') or die("MySQL 서버 연결 실패"); mysql_select_db('education',$conn) or die("DB 선택 실패"); $result = mysql_query($sql,$conn); if ( $result ) { mysql_list_result ($sql, $result, $head); mysql_free_result($result); } mysql_close($conn); $sql = ""; ?> </center> </body> </html> 순천향대학교 정보기술공학부 이 상 정 48
테이블 출력 라이브러리 함수(table.inc) mysql_list_result() 검색 결과를 테이블 형태로 출력 검색어 타이틀, 검색결과, 테이블 헤딩을 인수로 받음 mysql_data_seek(): 검색결과의 레코드의 위치 지정 mysql_num_fields(): 검색된 레코드의 필드 개수 반환 mysql_field_name(): 지정된 필드 이름 반환 mysql_fetch_row(): 검색 결과를 한 레코드 씩 읽기 table_title_tr(): 타이틀 출력하고 테이블 태그 속성 지정 table_head_array(): 테이블의 헤딩을 출력 table_row_array(): 테이블의 내용을 출력 table_end(): 테이블의 끝 표시 순천향대학교 정보기술공학부 이 상 정 49
기타 함수(table.inc) table_title(): 타이틀 출력하고 테이블 태그 속성 지정 table_title_tab(): 타이틀을 별도의 테이블로 출력 table_head(): 가변 인수의 테이블 헤드 출력 table_row(): 가변인수의 테이블 내용 출력 list_vars(): 배열변수를 테이블 형태로 표시 alist_vars(): 배열 변수 속에 배열이 있는 경우 리스트 blist_vars(): 연관배열 중에서 숫자 인덱스는 제외하고 테이블로 표시 순천향대학교 정보기술공학부 이 상 정 50
table.inc 1 <?php // 테이블 관련 출력 라이브러리 : table.inc function table_title( $title ) { echo "<h2>$title</h2>\n"; echo "<table border=0 cellpadding=3 cellspacing=1"; echo " width=400 bgcolor='#000000'>\n"; } function table_end( ) { echo "</table>\n"; function table_head ( ) { echo "<tr valign='bottom' bgcolor='#9999CC'>\n"; $numargs = func_num_args(); for ( $i = 0 ; $i < $numargs; $i++ ) { echo "<th>"; echo func_get_arg($i) . "</th>\n"; echo "</tr>\n"; 순천향대학교 정보기술공학부 이 상 정 51
table.inc 2 function table_row ( ) { echo "<tr valign='baseline' bgcolor='#CCCCCC'>\n"; $numargs = func_num_args(); for ( $i = 0 ; $i < $numargs; $i++ ) { echo "<td bgcolor='#CCCCFF'>"; echo func_get_arg($i) . "</td>\n"; } echo "</tr>\n"; // 배열 변수를 테이블 형태로 표시 function list_vars ( $title, $vars ) { if ( $vars ) { reset($vars); table_title($title); table_head("변수명","변수값"); 순천향대학교 정보기술공학부 이 상 정 52
table.inc 3 while ( list($key,$value) = each($vars) ) { table_row($key,$value); } table_end(); // 배열 변수 속에 배열이 있는 경우 리스트 function alist_vars ( $title, $vars ) { if ( $vars ) { reset($vars); table_title($title); table_head("변수명","변수값"); if ( gettype($value) == "array" ) $array_vars[$key] = $value; 순천향대학교 정보기술공학부 이 상 정 53
table.inc 4 reset($array_vars); while ( list($key,$value) = each($array_vars) ) { list_vars($key, $value); } // 연관 배열 중에서 숫자 인덱스 필드는 제외하고 테이블 형태로 표시 function blist_vars ( $title, $vars ) { if ( $vars ) { reset($vars); table_title($title); table_head("변수명","변수값"); while ( list($key,$value) = each($vars) ) { if ( is_numeric( $key ) ) continue; table_row($key,$value); table_end(); 순천향대학교 정보기술공학부 이 상 정 54
table.inc 5 // MySQL result를 spreadsheet 형태로 표시 function mysql_list_result ( $title, $result, $head ) { if ( $result ) { mysql_data_seek($result, 0); if ( !$head ) { $num = mysql_num_fields( $result ); for ( $i = 0 ; $i < $num ; $i++ ) { $head[$i] = mysql_field_name ( $result, $i); } $num = sizeof ( $head ); table_title_tr($title, $num); // table_title_tab($title, $num); table_head_array ( $head ); $i = 0; 순천향대학교 정보기술공학부 이 상 정 55
table.inc 6 while ( $row = mysql_fetch_row($result) ) { if ( $i % 2 ) $color = '#CCCCFF'; else $color = '#e4e4e4'; table_row_array( $row, $color); $i++; } table_end(); function table_title_tr( $title, $colspan ) { echo "<table border=0 cellpadding=3 cellspacing=1"; echo " width=400 bgcolor='#000000'>\n"; echo "<tr align='left' valign='middle' bgcolor='#9999CC'>\n"; echo "<td valign='middle' colspan=$colspan bgcolor='#333366'>"; echo "<h2><font color='#ffffff'>$title</font></h2>"; // echo "<table><tr><h2>$title</h2></tr></table>"; // echo "<font size=+1>$title</ font>"; echo "</td>"; echo "</tr>\n"; 순천향대학교 정보기술공학부 이 상 정 56
table.inc 7 function table_title_tab ( $title, $colspan ) { echo "<table width=400 border=0 cellspacing=0 cellpadding=0 "; echo "bordercolorlight=#FFFFFF bordercolordark=#333333>\n"; echo "<tr bgcolor='#333366'>\n"; echo "<td colspan=$colspan height=25> "; echo "<font color='#FFFFFF' size=3>"; echo "<b> $title</b></font>\n"; echo "</td>\n"; echo "</tr>\n"; echo "</table>\n"; echo "<table border=0 cellpadding=3 cellspacing=1 width=400"; echo " bgcolor='#000000'>\n"; } function table_head_array ( $head ) { echo "<tr valign='bottom' bgcolor='#9999CC'>\n"; $numargs = sizeof ( $head ); for ( $i = 0 ; $i < $numargs; $i++ ) { echo "<th>"; echo $head[$i] . "</th>\n"; 순천향대학교 정보기술공학부 이 상 정 57
table.inc 8 echo "</tr>\n"; } function table_row_array ( $row, $color = '#CCCCFF' ) { echo "<tr valign='baseline' bgcolor='#CCCCCC'>\n"; $numargs = sizeof ( $row ); for ( $i = 0 ; $i < $numargs; $i++ ) { echo "<td bgcolor=$color>"; echo $row[$i] . "</td>\n"; ?> 순천향대학교 정보기술공학부 이 상 정 58
실행화면 예 순천향대학교 정보기술공학부 이 상 정 59