PHP/4단계 PHP 닌자비법서

CH4 MySQL 데이터와 웹출력

에혀 2020. 2. 9.

 

 

HOME 화면 index.php home.html.php
글 등록 addjoke.php addjoke.html.php
조회 및 삭제 joke.php jokes.html.php (폼액션 deletejoke.php)

아웃풋버퍼

ob_start();

ob_get_clean();

 

조회할 때 $jokes = $pdo->query($sql);
insert, delete 할 때 $stmt = $pdo->prepare($sql); 
$stmt->bindValue(':id', $_POST['id']); 
$stmt->execute();
 

$stmt = $pdo->prepare($sql);

$stmt->bindValue(':joketext'$_POST['joketext']);

$stmt->execute();

public templates

index.php

jokes.php

addjoke.php

deletejoke.php

home.html.php

addjoke.html.php

jokes.html.php

 layout.html.php

 

jokes.php

jokes.php

<?php


try {
  $pdo = new PDO('mysql:host=localhost;dbname=ninja;charset=utf8', 'db id', '패스워드');
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  
  $sql = 'SELECT `joketext`, `id` FROM `joke`';
  $jokes = $pdo->query($sql);


  $title = '유머 글 목록';


  ob_start();


  include  __DIR__ . '/../templates/jokes.html.php';


  $output = ob_get_clean();


}
catch (PDOException $e) {
  $title = '오류가 발생했습니다';


  $output = '데이터베이스 오류: ' . $e->getMessage() . ', 위치: ' .
  $e->getFile() . ':' . $e->getLine();
}


include  __DIR__ . '/../templates/layout.html.php';

jokes.html.php

jokes.html.php

<?php foreach ($jokes as $joke): ?>
<blockquote>
<p>
<?=htmlspecialchars($joke['id'],ENT_QUOTES, 'UTF-8')?>
<?=htmlspecialchars($joke['joketext'],ENT_QUOTES, 'UTF-8')?>
<form action="deletejoke.php" method="post">
<input type="hidden" name="id" value="<?=$joke['id']?>">
<input type="submit" value="삭제">
</form>
</p>
</blockquote>
<?php endforeach; ?>

deletejoke.php

deletejoke.php

<?php

try {
  $pdo = new PDO('mysql:host=localhost;dbname=ninja;charset=utf8', 'db id', '패스워드');
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


  $sql = 'DELETE FROM `joke` WHERE `id` = :id';
 
  $stmt = $pdo->prepare($sql);

  $stmt->bindValue(':id', $_POST['id']);
  $stmt->execute();

  header('location: jokes.php');
}
catch (PDOException $e) {
  $title = '오류가 발생했습니다';

  $output = '데이터베이스 서버에 접속할 수 없습니다: ' . $e->getMessage() . ', 위치: ' .
  $e->getFile() . ':' . $e->getLine();
}

//include  __DIR__ . '/../templates/layout.html.php';
layout.html.php

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="jokes.css">
    <title><?=$title?></title>
  </head>
  <body>
  <nav>
    <header>
      <h1>인터넷 유머 세상</h1>
    </header>
    <ul>
      <li><a href="index.php">Home</a></li>
      <li><a href="jokes.php">유머 글 목록</a></li>
      <li><a href="addjoke.php">유머 등록</a></li>
    </ul>
  </nav>

  <main>
  <?=$output?>
  </main>

  <footer>
  &copy; IJDB 2017
  </footer>
  </body>
</html>

이번 장은 주로 PHP 데이터 객체PHP Data Objects, PDO를 다뤘다.

 PDO, PDOException, PDOStatement 등의 PHP 내장 클래스로 객체를 생성하고 각 객체의 다양한 메서드를 사용 해 MySQL 데이터베이스를 다루는 법을 배웠다.

그와 동시에 자연스럽게 객체 지향 프로그래밍object-oriented programming, OOP의 기초적인 개념도 익혔다.

PHP 초심자에 있어 대단한 성과다.  ㅠㅠ

절차형으로 쭉 만들고, 리팩토링 하는 방법에 익숙해져있다가, 머리가 잘 안돌아간다. ㅠㅠ 참아야 하느니라....ㅠ

 

PDO 객체는 데이터베이스 기반 웹사이트의 핵심 요소다. PDO를 사용해 ijdb 데이터베이스의 내용을 공개하고, 웹에서 유머 글을 등록하며 삭제하는 기능을 구현했다.

이번 장을 사용해 데이터베이스 기반 웹사이트 구축이라는 목표를 어느 정도 달성했다고 여겨도 좋다.

 물론 지금까지 배운 내용은 가장 핵심적인 뼈대에 해당한다. 앞으로 남은 내용을 배우며 이 뼈대에 살을 붙여나갈 것이다.
다음 장에서는 관계형 데이터베이스 이론을 배운다. 유머 글을 등록한 사용자의 정보를 추가로 저장하고 이를 유머 글 정보와 조합한다. 이렇듯 더 복잡한 형태의 정보를 처리하는 고급 SQL 쿼리를 배운다.

 

그래도, 이게 젤 어려우면서.... 사실 어려운 것도 아닌데. ㅠㅠ

그래. 그냥 하기 싫었던건가.. 하........

댓글