728x90

목차

  1. CRUD 결과물 미리보기
  2. DB 구조 / 사용한 명령어
  3. php와 MySQL 연동
  4. Create 구현
  5. Read 구현
  6. Update 구현
  7. Delete 구현

[바로가기] SQL 기본 문법
[바로가기] PHP 기본 문법


1. CRUD 결과물 미리보기

[목차로 이동]

* 웹브라우저로 데이터베이스에 학생들의 프로그래밍 성적을 입력하고 수정, 삭제할 수 있다.


2. DB 구조 / 사용한 명령어

[목차로 이동]

 

DESC gradeInfo;
SELECT * FROM gradeInfo;

CREATE DATABASE grade;

USE grade;

CREATE TABLE gradeinfo (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name varchar(10) NOT NULL,
  python INT(3) NOT NULL,
  java INT(3) NOT NULL,
  c INT(3) NOt NULL,
  PRIMARY KEY(id)
);

INSERT INTO gradeInfo(name, python, java, c) VALUES('사나','92','90','99');
INSERT INTO gradeInfo(name, python, java, c) VALUES('미나','88','82','81');
INSERT INTO gradeInfo(name, python, java, c) VALUES('모모','77','72','71');

3. php와 MySQL 연동

[목차로 이동]

 

<?php
  $link = mysqli_connect('localhost:3306', 'root', '*******', 'grade');
  $sql = "SELECT * FROM gradeinfo";
  $result = mysqli_query($link, $sql);
?>

* mysqli_connect('ip', 'user', 'password', 'database')로 데이터베이스와 php가 연결된다.
* 전체 내용을 조회할 수 있는 sql쿼리문을 $sql 변수에 담아 mysqli_query에 mysqli_connet와 함께 넣어준다.  
* php와 데이터베이스가 연결되고 $sql에 담긴 sql쿼리문이 실행 됨


4. Create 구현

[목차로 이동]

 

read.php
process_create.php

* read.php에서 이름과 성적을 입력하고 submit을 누르면 form태그에 있는 값들이 post형식으로 ?name=''&python=''&java=''&c=''로 process_create.php에 전달된다.
* process_create.php에서 url로 파라미터들을 post형식으로 전달받으면 배열형식으로 바꿔주고(노란박스) sql쿼리문을 만들어서 데이터베이스에 명령을 내려주고 read.php로 다시 돌아간다. create 기능 구현 끝

//process_create.php

<?php
  $link = mysqli_connect('localhost:3306', 'root', '************', 'grade');

  $filtered = array(
    'name'=>mysqli_real_escape_string($link, $_POST['name']),
    'python'=>mysqli_real_escape_string($link, $_POST['python']),
    'java'=>mysqli_real_escape_string($link, $_POST['java']),
    'c'=>mysqli_real_escape_string($link, $_POST['c'])
  );

  $sql ="
    INSERT INTO gradeinfo
      (name, python, java, c)
      VALUES (
        '{$filtered['name']}',
        '{$filtered['python']}',
        '{$filtered['java']}',
        '{$filtered['c']}'
        )
  ";

  $result = mysqli_query($link, $sql);
  if($result === false){

    echo '저장하는 과정에서 문제가 생겼습니다.';
  } else {
    header('Location: ../read.php');
  }
?>

5. Read 구현

[목차로 이동]

 

read.php

* while( ) { .. } 문으로 해당 데이터베이스에 있는 모든 자원을 출력할 건데,
데이터베이스의 정보를 mysqli_fetch_array를 통해 배열의 형태로 가져온다.
while문의 조건이 한번 실행될 때마다 데이터베이스에 있는 테이블을 한 행씩 가져오고 테이블의 행을 모두 가져오면 while문의 조건은 NULL이 되며, 반복문이 종료된다.
* 테이블에서 한 행씩 가져온 자원을 각각 id, name, python, java, c에 연관배열의 형태로 정의해준다.
( $filtered = array(...); )
( id는 유저에게는 보여줄 필요가 없으므로 따로 출력을 하진 않고, '수정', '삭제' 기능 구현에서 사용함 )  
* <?=$filtered['name']?> 을 통해 각 자원을 출력해주면 read 기능 구현 끝

//read.php

<?php
  $link = mysqli_connect('localhost:3306', 'root', '********', 'grade');
  $sql = "SELECT * FROM gradeInfo";
  $result = mysqli_query($link, $sql);
?>

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>PHP_MySQL 연동</title>
    <script type="text/javascript">
      function update(id, name, python, java, c){
        document.getElementById("update_id").value = id;
        document.getElementById("update_name").value = name;
        document.getElementById("update_python").value = python;
        document.getElementById("update_java").value = java;
        document.getElementById("update_c").value = c;
      }
    </script>
  </head>
  <body>
    <div>
      <table border="1" style="margin : 0 auto;">
        <tr style="background-color:#D8D8D8; text-align : center;">
          <td style="width : 70px;">이름</td>
          <td style="width : 70px;">파이썬</td>
          <td style="width : 70px;">자바</td>
          <td style="width : 70px;">C/C#</td>
          <td style="width : 50px;">수정</td>
          <td style="width : 50px;">삭제</td>
        </tr>
      <?php
        while ($row = mysqli_fetch_array($result)) {
          $filtered = array(
            'id' => htmlspecialchars($row['id']),
            'name' => htmlspecialchars($row['name']),
            'python' => htmlspecialchars($row['python']),
            'java' => htmlspecialchars($row['java']),
            'c' => htmlspecialchars($row['c'])
          );?>
        <tr style="text-align : center;">
          <td><?=$filtered['name']?></td>
          <td><?=$filtered['python']?></td>
          <td><?=$filtered['java']?></td>
          <td><?=$filtered['c']?></td>
          <td>
            <input type="button" name="" value="수정"
             onclick="update('<?=$filtered['id']?>', '<?=$filtered['name']?>',
             '<?=$filtered['python']?>', '<?=$filtered['java']?>', '<?=$filtered['c']?>')" >
          </td>
          <td>
            <form class="" action="./process/process_delete.php" method="post">
              <input type="hidden" name="id" value="<?=$filtered['id']?>">
              <input type="submit" value="삭제">
            </form>
          </td>
        </tr>
      <?php
       }
      ?>
      </table>
    </div>  <!-- table div-->
    <table style="margin : 0 auto;">
      <tr>
        <td>
          <div style="border : 1px solid black; width : 150px; height : 180px;">
            <form action="./process/process_create.php" method="post">
              <table border="1" style="margin : 0 auto;">
                <caption>성적입력</caption>
                <tr>
                  <td>이름</td>
                  <td ><input style="width : 50px" type="text" name="name"></td>
                </tr>
                <tr>
                  <td>파이썬</td>
                  <td><input style="width : 50px" type="text" name="python"></td>
                </tr>
                <tr>
                  <td>자바</td>
                  <td><input style="width : 50px" type="text" name="java"></td>
                </tr>
                <tr>
                  <td>C/C#</td>
                  <td><input style="width : 50px" type="text" name="c"></td>
                </tr>
              </table>
              <div style="text-align : center;">
                <input type="submit" value="성적입력">
              </div>
            </form> <!-- form -->
          </div> <!-- grade create div-->
        </td> <!-- grade create td-->
        <td>
          <div style="border : 1px solid black; width : 150px; height : 180px;">
            <form class="" action="./process/process_update.php" method="post">
              <table border="1" style="margin : 0 auto;">
                <caption>성적수정</caption>
                  <input type="hidden" name="id" id="update_id" value="">
                <tr>
                  <td>이름</td>
                  <td ><input style="width : 50px" type="text" name="name" id="update_name" value=""></td>
                </tr>
                <tr>
                  <td>파이썬</td>
                  <td><input style="width : 50px" type="text" name="python" id="update_python" value=""></td>
                </tr>
                <tr>
                  <td>자바</td>
                  <td><input style="width : 50px" type="text" name="java" id="update_java" value=""></td>
                </tr>
                <tr>
                  <td>C/C#</td>
                  <td><input style="width : 50px" type="text" name="c" id="update_c" value=""></td>
                </tr>
              </table>
              <div style="text-align : center;">
                <input type="submit" value="성적수정">
              </div>
            </form> <!-- form -->
          </div> <!-- grade update div -->
        </td> <!-- grade update td -->
      </tr>
    </table><!-- create update table -->
  </body>
</html>

6. Update 구현

[목차로 이동]

 

* '수정버튼'을 누르면 해당 행의 정보들이 '성적수정' 칸으로 복사되고, '성적수정 버튼'을 누르면 최종적으로 데이터베이스에 수정된 값들이 전달된다.

read.php
read.php
read.php

* '수정' 버튼을 누르면 자바스크립트로 구현한 update 함수에 id, name, python, java, c에 해당하는 값들을 파라미터로 전달해 준다. 
* update함수에 전달된 파라미터들을 '성적입력' 칸으로 복사된다.
* 복사된 행을 원하는 값으로 수정하고 '성적수정'을 누르면 form태그에 있는 값들이 post형식으로 ?name=''&python=''&java=''&c=''로 process_update.php에 전달된다.
** id는 사용자에게 노출될 필요는 없지만 데이터베이스에서 행을 수정할 때 필요하므로 hidden으로 숨겨주고 form태그 안에 넣어준다. 따라서 submit버튼을 누르면 process_update.php에 전달됨.

process_update.php

* process_update로 전달된 파라미터들을 sql쿼리문으로 만들어서 데이터베이스에 전달하고 read.php로 돌아가면 update기능 구현 끝

//process_update.php

<?php
$link = mysqli_connect('localhost:3306', 'root', '**********', 'grade');

$filtered = array(
  'id' => mysqli_real_escape_string($link, $_POST['id']),
  'name' => mysqli_real_escape_string($link, $_POST['name']),
  'python' => mysqli_real_escape_string($link, $_POST['python']),
  'java' => mysqli_real_escape_string($link, $_POST['java']),
  'c' => mysqli_real_escape_string($link, $_POST['c'])
);

$sql ="
  UPDATE gradeinfo
  SET
    name='{$filtered['name']}',
    python='{$filtered['python']}',
    java='{$filtered['java']}',
    c='{$filtered['c']}'
  WHERE
    id='{$filtered['id']}';
";

$result = mysqli_query($link, $sql);

if (result === false) {
  echo "저장하는 과정에서 문제가 생겼습니다.";
} else {
  header('Location: ../read.php');
}
?>

 


7. Delete 구현

[목차로 이동]

 

read.php

* process_delete.php로 id 값만 전달해 주면되므로, form태그안에 hidden으로 감춰준다. 따라서 submit를 누르면 process_delete.php로 id값이 post형식으로 전달됨

process_delete,php

* process_delete.php로 전달된 id는 sql쿼리 문을 만들 때 사용되며, 데이터베이스에 전달됨. delete 기능 구현 끝

//process_delete.php

<?php
$link = mysqli_connect('localhost:3306', 'root', '*********', 'grade');

$filtered = array(
  'id'=>mysqli_real_escape_string($link, $_POST['id'])
);

$sql ="
  DELETE FROM gradeInfo
  WHERE id = {$filtered['id']};
";

$result = mysqli_query($link, $sql);

if ($result===false) {
  echo '저장하는 과정에서 문제가 발생했습니다.';
} else {
  header('Location: ../read.php');
}
?>

728x90

+ Recent posts