[ PHP + MySQL ] CRUD 구현하기

php mysql

PHP + MySQL을 이용한 insert, update, delete, select 구현하기

해당 포스팅을 실습하기 이전에 XAMPP가 설치되어있어야 합니다.
설치하기

1. DATABASE 세팅

  • 일단 xampp control panel 실행 후, Apache와 MySQL을 활성화 합니다
    xampp
  •  그 후 http://127.0.0.1/phpmyadmin 혹은 http://localhost/phpmyadmin 으로 접속합니다. 그 다음 "데이터베이스" 탭을 클릭합니다.
    db 세팅 1
  • 그 다음 DB명과 데이터정렬 방식 (문자셋)을 선택합니다.
    db 세팅 2
  • DB 명은 오늘 날짜를 입력하고
    문자셋은 utf8_general_ci로 선택합니다.
    utf8_general_ci ==> 유니코드 기본 문자셋
    db 세팅 3
  • 그 후 테이블을 만듭니다.
    테이블 명은 comment로 입력합니다. 컬럼은 idx, content, date 등 3개가 만들어질 예정이므로 3 이상의 숫자를 입력하기만 하면 상관없습니다.
    db 세팅 4
  • idx ( int / primary / Auto_increment ) : 정수형 / 기본키 / 자동증가
    content ( text ) : 문자열
    date ( datetime 혹은 date ) : 날짜형
    db 세팅 5
  • 이렇게 table을 간단하게 생성할 수 있습니다.
    db 세팅 6

2. html 코드 입력

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="" method="post">
    <fieldset><legend>입력폼</legend>
        <input type="hidden" name="action" value="insert">
        <input type="text" name="content" size="60" placeholder="내용입력">
        <input type="submit" value="전송">
    </fieldset>
</form>
<form action="" method="post">
    <fieldset><legend>수정폼</legend>
        <input type="hidden" name="action" value="update">
        <input type="text" name="idx" size="10" placeholder="글번호">
        <input type="text" name="content" size="60" placeholder="내용">
        <input type="submit" value="전송">
    </fieldset>
</form>
<form action="" method="post">
    <fieldset><legend>삭제폼</legend>
        <input type="hidden" name="action" value="delete">
        <input type="text" name="idx" size="10" placeholder="글번호">
        <input type="submit" value="전송">
    </fieldset>
</form>
</body>
</html>

form은 사용자가 데이터를 요청하기 위해 입력하는 필드입니다.
form 말고 input만 쓰면 데이터를 전송할 수 없습니다.
form 안에 input 태그를 사용 후, input태그에 데이터를 입력하거나 선택하면 서버로 데이터를 전송할 수 있습니다.

  • input 태그에서 각 속성의 의미하는 내용은
    • type
      • text : 글자입력
      • password : 비밀번호 입력
      • radio : 단일선택
      • checkbox : 다중선택
      • button : 버튼
      • reset : 리셋버튼
      • submit : 전송버튼
      • hidden : 고정값 전송(사용자 입력 X)
    • name
      • 전송될 데이터가 저장될 변수 이름
      • name="action" 일 때 method 방식에 따라서 $_GET['action'] 혹은 $_POST['action']에 저장된다
    • value
      • 전송되는 값

즉 <input type="text" name="content"> 태그에 값을 입력 후 전송하면
form의 method 방식이  post 이므로
$_POST['content']에 입력된 값이 저장됩니다.

3. php 코드 입력

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
  $db = new PDO("mysql:host=127.0.0.1;dbname=0911;charset=utf8","root","");
  if(isset($_POST['action'])){
    switch($_POST['action']){
      case 'insert' :
        $sql = "INSERT INTO comment (idx,content,reg_date) values(null,'{$_POST['content']}',now())";
      break;
      case 'update' :
        $sql = "UPDATE comment set content='{$_POST['content']}' where idx='{$_POST['idx']}'";
      break;
      case 'delete' : 
        $sql = "DELETE FROM comment where idx='{$_POST['idx']}'";
      break;
    }
    $db->query($sql);
  }
  $data = $db->query("SELECT * FROM comment")->fetchAll();
  foreach($data as $list){
    echo "<p>{$list['idx']} / {$list['content']} / {$list['reg_date']}</p>";
  }
?>
<form action="" method="post">
  <fieldset><legend>입력폼</legend>
    <input type="hidden" name="action" value="insert">
    <input type="text" name="content" size="60" placeholder="내용입력">
    <input type="submit" value="전송">
  </fieldset>
</form>
<form action="" method="post">
  <fieldset><legend>수정폼</legend>
    <input type="hidden" name="action" value="update">
    <input type="text" name="idx" size="10" placeholder="글번호">
    <input type="text" name="content" size="60" placeholder="내용">
    <input type="submit" value="전송">
  </fieldset>
</form>
<form action="" method="post">
  <fieldset><legend>삭제폼</legend>
    <input type="hidden" name="action" value="delete">
    <input type="text" name="idx" size="10" placeholder="글번호">
    <input type="submit" value="전송">
  </fieldset>
</form>
</body>
</html>

위의 내용에서 중요한 내용만 요약하자면

  • $db = new PDO("mysql:host=127.0.0.1;dbname=0911;charset=utf8","root","");
    • mysql 사용
    • db명 : 0911
    • 문자셋 : 유니코드(utf8)
    • 데이터베이스 서버 id : root
    • 데이터베이스 서버 pw : 없음
    • 해당 정보로 DB에 접근한다.
  • $sql = "INSERT INTO comment (idx,content,reg_date) values(null,'{$_POST['content']}',now())";
    • comment 테이블에 해당 내용을 추가시킨다.
      • idx=null : null은 빈값을 의미하는데, 어차피 자동으로 값이 정해지게 된다. (auto_increment에 의해)
      • content='{$_POST['content']}' : 사용자가 입력한 내용
      • date=now() : 현재 시간
  • $sql = "UPDATE comment set content='{$_POST['content']}' where idx='{$_POST['idx']}'";
    • comment 테이블에서 해당 내용을 수정한다.
      • where idx='{$_POST['idx']}' : 사용자가 입력한 comment 번호, 즉 변경될 comment의 번호
      • content='{$_POST['content']}' : 사용자가 입력한 comment 내용
  • $sql = "DELETE FROM comment where idx='{$_POST['idx']}'";
    • comment 테이블에서 해당 내용을 삭제한다.
      • where idx='{$_POST['idx']}' : 사용자가 입력한 comment 번호, 즉 삭제될 comment의 번호
  • $db->query($sql);
    • 명령문을 DB에 전달 및 실행한다.
  • $data = $db->query("SELECT * FROM comment")->fetchAll();
    • SELECT * FROM comment는 comment 테이블에 있는 모든 내용을 가져오는 명령문이다.
    • 이 때 가져온 데이터를 fetchAll()을 이용하여 $data 변수에 배열의 형태로 담는다.
  • foreach($data as $list)
    • $data의 배열 변수의 갯수 만큼 반복한다.
    • 이 때 $data[0], $data[1], $data[2] 등의 배열 변수가 차례대로 $list에 할당된다.