php와 MySQL을 사용하여 사용자가 정보를 입력하면 DB에 저장하고 DB에 있는 정보를 찾는 검색 기능을 구현해보려고 한다.
다음과 같은 파일을 만드려고 한다.
join.html - 회원정보 입력 사이트join_process.php - 회원정보 처리 서버search.html - 회원정보 검색 사이트search_process.php - 회원정보 검색 서버
<body>
<p><a href="join.html">[회원정보 입력하기]</a> <a href="search.html">[회원정보 검색하기]</a></p>
<h1>회원정보 입력하기</h1>
<fieldset>
<form action="join_process.php" method="post">
<label for="uname">이 름: </label><input type="text" name="uname" id="uname" /><br />
<label for="phone">전 화: </label><input type="tel" name="phone" id="phone" /><br />
<label>
성 별:
<input type="radio" name="gender" value="male" id="male" />남자
<input type="radio" name="gender" value="female" id="female" />여자
</label>
<br />
<label for="birth">생년월일: </label><input type="date" name="birth" id="birth" /><br />
<input type="submit" value="입력완료" />
</form>
</fieldset>
</body>

<body>
<p>
<a href="join.html">[회원정보 입력하기]</a>
<a href="search.html">[회원정보 검색하기]</a>
</p>
<h1>회원정보 검색하기</h1>
<fieldset>
<form action="search_process.php" method="post">
<label for="uname">이 름: </label><input type="text" name="uname" id="uname" /><br />
<label for="gender">성 별: </label>
<select name="gender" id="gender">
<option value="all">모두</option>
<option value="male">남성만</option>
<option value="female">여성만</option>
</select>
<br />
<input type="submit" value="검색" />
</form>
</fieldset>
</body>
사용자에게 이름, 전화번호, 성별, 생년월일 정보를 받아서 저장하려고 한다.
다음과 같이 user 테이블을 생성하였다.
create table user(
num int auto_increment primary key,
uname char(20),
phone char(15),
gender char(6),
birth date
);

num 컬럼을 추가로 생성해 auto_increment 속성으로 사용자에게 값을 받지 않아도 자동으로 1씩 증가하는 primary key를 갖게 하였는데, 검색 시 보여지진 않고 내부 키 값으로만 사용될 것이다.
MySQL과 php를 연동할 때 4단계 과정이 반드시 필요하다.
DB연결 mysqli_connect();
$dbcon = mysql_connect('호스트', '계정', '패스워드', 'DB명');
호스트MySQL서버가 실행 중인 서버의 주소. 로컬서버일 경우 'localhost'
계정MySQL 계정
패스워드MySQL 패스워드
DB명사용할 DB명 이름
반환 값으로는 MySQL 연결 객체가 제공된다.
DB선택 mysqli_select_db();
mysqli_select_db($dbcon, 'DB명');연결 객체와 DB명이 인자로 필요하다.
1번 DB연결에서 4번째 인자 'DB명'을 적었을 경우 이 코드는 생략 가능하다.
DB쿼리 mysqli_query();
$query = "SELECT * FROM 테이블명"; $result = mysqli_query($dbcon, $query);연결 객체와 실행할 쿼리문이 필요하다.
mysqli_query()안에 직접 쿼리를 넣을 수도 있지만 보통$query변수에 쿼리를 저장하여 넣는다.
쿼리가 정상적으로 실행되면 쿼리의 결과를 나타내는 객체가 반환된다.
DB종료 mysqli_close();
$mysqli_close($dbcon);연결 객체가 인자로 필요하다.
MySQL서버와 연결을 종료하는 함수이다.
<?php
$uname = $_POST['uname'];
$phone = $_POST['phone'];
$gender = $_POST['gender'];
$birth = $_POST['birth'];
//DB연결
$dbcon = mysqli_connect('localhost', 'root', '');
//DB선택
mysqli_select_db($dbcon, 'myDB');
//DB 쿼리
$query = "insert into user values (null, '$uname', '$phone', '$gender', '$birth')";
//쿼리가 정상적으로 실행되면 if문 실행
$check = mysqli_query($dbcon, $query);
if ($check) echo "환영합니다. <b><i>$uname</i></b> 님의 정보가 잘 입력되었습니다.";
else echo "DB오류가 발생하였습니다. 관리자에게 문의하세요.";
//DB연결 종료
mysqli_close($dbcon);
?>
사용자가 정보를 입력하고 입력완료 버튼을 누르면
insert into user valeus()쿼리가 실행되어 DB에 해당 정보가 저장된다.
실행화면





<?php
$uname = $_POST['uname'];
$gender = $_POST['gender'];
$count = 0;
//DB연결
$dbcon = mysqli_connect('localhost', 'root', '');
//DB선택
mysqli_select_db($dbcon, 'ktest');
//DB 질의문
if($uname and $gender !='all'){
$query = "select * from user where uname like '%$uname%' and gender = '$gender'";
} else if($uname and $gender == 'all'){
$query = "select * from user where uname like '%$uname%'";
} else if(!$uname and $gender != 'all'){
$query = "select * from user where gender = '$gender'";
} else{
$query = "select * from user";
}
$result = mysqli_query($dbcon, $query);
echo "<table border = '1'>";
while($row = mysqli_fetch_array($result)){
$count++;
echo "<tr>";
for ($i=1; $i < 5; $i++) {
echo "<td>".$row[$i]."</td>";
}
echo "</tr>";
}
echo "</table>";
echo "$count 건의 검색결과가 있습니다.";
//DB연결 종료
mysqli_close($dbcon);
?>
$result 쿼리 결과의 객체가 담겨있음
$row = mysqli_fetch_array($result) 결과를 한 행씩 배열로 변수에 저장
for문으로 $row 데이터 출력
사용자가 선택한 조건에 따라 쿼리를 실행시켜 검색결과를 사용자에게 제공한다.
실행화면
공백 + 모두

공백 + 남성만

공백 + 여성만

검색어 + 모두

검색어 + 남성만

검색어 + 여성만
