php와 MySQL 연동하기

박재휘·2024년 1월 13일

SQL

목록 보기
2/2
post-thumbnail

php와 MySQL을 사용하여 사용자가 정보를 입력하면 DB에 저장하고 DB에 있는 정보를 찾는 검색 기능을 구현해보려고 한다.

다음과 같은 파일을 만드려고 한다.

  1. join.html - 회원정보 입력 사이트
  2. join_process.php - 회원정보 처리 서버
  3. search.html - 회원정보 검색 사이트
  4. search_process.php - 회원정보 검색 서버



HTML

1. join.html 디자인


2. join.html 코드

  <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>

3. search.html 디자인


4. search.html 코드

  <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>


DB

1. 테이블 설계

사용자에게 이름, 전화번호, 성별, 생년월일 정보를 받아서 저장하려고 한다.

다음과 같이 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를 갖게 하였는데, 검색 시 보여지진 않고 내부 키 값으로만 사용될 것이다.


2. 연동

MySQL과 php를 연동할 때 4단계 과정이 반드시 필요하다.

  1. DB연결 mysqli_connect();

    $dbcon = mysql_connect('호스트', '계정', '패스워드', 'DB명');

    호스트 MySQL서버가 실행 중인 서버의 주소. 로컬서버일 경우 'localhost'
    계정 MySQL 계정
    패스워드 MySQL 패스워드
    DB명 사용할 DB명 이름
    반환 값으로는 MySQL 연결 객체가 제공된다.

  2. DB선택 mysqli_select_db();

    mysqli_select_db($dbcon, 'DB명');

    연결 객체와 DB명이 인자로 필요하다.
    1번 DB연결에서 4번째 인자 'DB명'을 적었을 경우 이 코드는 생략 가능하다.

  3. DB쿼리 mysqli_query();

    $query = "SELECT * FROM 테이블명";
    $result = mysqli_query($dbcon, $query);

    연결 객체와 실행할 쿼리문이 필요하다.
    mysqli_query() 안에 직접 쿼리를 넣을 수도 있지만 보통 $query변수에 쿼리를 저장하여 넣는다.
    쿼리가 정상적으로 실행되면 쿼리의 결과를 나타내는 객체가 반환된다.

  4. DB종료 mysqli_close();

    $mysqli_close($dbcon);

    연결 객체가 인자로 필요하다.
    MySQL서버와 연결을 종료하는 함수이다.


3. join_process.php 코드

<?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에 해당 정보가 저장된다.



실행화면


4. search_process.php 코드

  <?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 데이터 출력

사용자가 선택한 조건에 따라 쿼리를 실행시켜 검색결과를 사용자에게 제공한다.

실행화면
공백 + 모두

공백 + 남성만

공백 + 여성만

검색어 + 모두

검색어 + 남성만

검색어 + 여성만


profile
차곡차곡 열심히

0개의 댓글