웹 애플리케이션 만들기

라이브러리 1 (직접 만들기)

라이브러리 1 : 개론

라이브러리 2 : 직접 만들기

 

index.php 

<?php
require("config/config.php");
require("lib/db.php");
$conn = db_init($config["host"], $config["duser"], $config["dpw"], $config["dname"]);
$result = mysqli_query($conn, "SELECT * FROM topic");
?>
<!DOCTYPE html>
<html>
<head>
     <meta charset="utf-8">
  <link rel="stylesheet" type="text/css" href="http://localhost/style.css">
</head>
<body id="target">
	<header>
    <img src="https://s3.ap-northeast-2.amazonaws.com/opentutorials-user-file/course/94.png" alt="생활코딩">
		<h1><a href="http://localhost/index.php">JavaScript</a></h1>
  </header>
	<nav>
		<ol>
    <?php
    while( $row = mysqli_fetch_assoc($result)){
      echo '<li><a href="http://localhost/index.php?id='.$row['id'].'">'.htmlspecialchars($row['title']).'</a></li>'."\n";
    }
    ?>
		</ ol>
	</nav>
  <div id="control">
    <input type="button" value="white" onclick="document.getElementById('target').className='white'"/>
    <input type="button" value="black" onclick="document.getElementById('target').className='black'" />
    <a href="http://localhost/write.php">쓰기</a>
  </div>
  <article>
  <?php
  if(empty($_GET['id']) === false ) {
      $sql = "SELECT topic.id,title,name,description FROM topic LEFT JOIN user ON topic.author = user.id WHERE topic.id=".$_GET['id'];
      $result = mysqli_query($conn, $sql);
      $row = mysqli_fetch_assoc($result);
      echo '<h2>'.htmlspecialchars($row['title']).'</h2>';
      echo '<p>'.htmlspecialchars($row['name']).'</p>';
      echo strip_tags($row['description'], '<a><h1><h2><h3><h4><h5><ul><ol><li>');
  }
  ?>
  </article>
</body>
</html>

lib/db.php

<?php
function db_init($host, $duser, $dpw, $dname){
  $conn = mysqli_connect($host, $duser, $dpw);
  mysqli_select_db($conn, $dname);
  return $conn;
}
?>

config/config.php

<?php
$config = array(
  "host"=>"localhost",
  "duser"=>"root",
  "dpw"=>"111111",
  "dname"=>"opentutorials"
);
?>

write.php

<?php
require("config/config.php");
require("lib/db.php");
$conn = db_init($config["host"], $config["duser"], $config["dpw"], $config["dname"]);
$result = mysqli_query($conn, "SELECT * FROM topic");
?>
<!DOCTYPE html>
<html>
<head>
     <meta charset="utf-8">
  <link rel="stylesheet" type="text/css" href="http://localhost/style.css">
</head>
<body id="target">
	<header>
    <img src="https://s3.ap-northeast-2.amazonaws.com/opentutorials-user-file/course/94.png" alt="생활코딩">
		<h1><a href="http://localhost/index.php">JavaScript</a></h1>
  </header>
	<nav>
		<ol>
    <?php
    while( $row = mysqli_fetch_assoc($result)){
      echo '<li><a href="http://localhost/index.php?id='.$row['id'].'">'.$row['title'].'</a></li>'."\n";
    }
    ?>
		</ ol>
	</nav>
  <div id="control">
    <input type="button" value="white" onclick="document.getElementById('target').className='white'"/>
    <input type="button" value="black" onclick="document.getElementById('target').className='black'" />
    <a href="http://localhost/write.php">쓰기</a>
  </div>
  <article>
    <form action="process.php" method="post">
      <p>
        제목 : <input type="text" name="title">
      </p>
      <p>
        작성자 : <input type="text" name="author">
      </p>
      <p>
        본문 : <textarea name="description"></textarea>
      </p>
      <input type="submit" name="name">
    </form>
  </article>
</body>
</html>

process.php

<?php
require("config/config.php");
require("lib/db.php");
$conn = db_init($config["host"], $config["duser"], $config["dpw"], $config["dname"]);

$title = mysqli_real_escape_string($conn, $_POST['title']);
$author = mysqli_real_escape_string($conn, $_POST['author']);
$description = mysqli_real_escape_string($conn, $_POST['description']);

$sql = "SELECT * FROM user WHERE name='".$author."'";
$result  = mysqli_query($conn, $sql);
if($result->num_rows == 0){
  $sql = "INSERT INTO user (name, password) VALUES('".$author."', '111111')";
  mysqli_query($conn, $sql);
  $user_id = mysqli_insert_id($conn);
} else {
  $row = mysqli_fetch_assoc($result);
  $user_id = $row['id'];
}
$sql = "INSERT INTO topic (title,description,author,created) VALUES('".$title."', '".$description."', '".$user_id."', now())";
$result = mysqli_query($conn, $sql);
header('Location: http://localhost/index.php');
?>

소스코드

github

댓글

댓글 본문
작성자
비밀번호
  1. 감사합니다. 이제 원리를 찾으면 될 것 같네요.
    대화보기
    • hodduck0121
      감사합니다
    • 슝태
      20180119
    • PassionOfStudy
      18-01-09 11일차 - 2번째 강의

      수강완료!


      -----------------------------------------------------------------------------------------------
      @ 중복의 제거
      - 유지보수의 편의성
      - 코드의 감소
      - 가독성 향상

      중복의 제거 -> 코드의 재사용성 -> 생산성의 향상
      Library : 중복해서 사용되는 로직을 재사용 할 수 있도록 부품화(모듈화) 시킨 것!
      -----------------------------------------------------------------------------------------------
    • 이도현
      윈도우에서 index.php가 루트 디렉토리에 안계시는 분들은 파일이 존재하지 않는다고 나올텐데
      db.php 속성에서 위치를 복사한후 /db.php를 추가하면 될듯해요.
      저 같은 경우는 C:\Bitnami\wampstack-7.1.12-0\apache2\htdocs\lib 에 db.php에 존재하기 때문에
      require("C:\Bitnami\wampstack-7.1.12-0\apache2\htdocs\lib/db.php")로 했습니다.
      리눅스에서만 작업하다가 윈도우에서 작업하는 것은 처음이라 이렇게 해도 되나? 했는데 되네요.
      굳이 ../ 를 쓰는 방법은 사람마다 디렉토리 구조가 다를 수 있어서 제 생각엔 이게 나아보입니다..
      혹시 저와 같은 사람이 있을까봐 올립니다. 감사합니다.
    • egoing
      동물사랑님 안녕하세요. 부족한 수업입니다면 이곳은 여러 사람들이 공부를 하는 곳이기 때문에 말씀을 순화해주셨으면 좋겠습니다. 더 좋은 수업이 될 수 있게 노력하고 있습니다. 계속 수업을 만들면서 개선해나갈 수 있도록 도와주세요. 부탁드립니다. 주말 잘 보내시고요.
      대화보기
      • 이근환
        2017-12-15 수강 17일차

        수강완료하였습니다.
      • 이근환
        2017-12-12 수강 15일차

        수강완료하였습니다!

        라이브러리의 장점을 모두 느낄수 있던 수업이였습니다!!:)
      • 박인호
        11-28
        수강완료.
        중복을 제거하는 것이 역시 중요하군요.
      • 서성진
        잘 봤습니다.
      • 유상원
        2017-11-11 완료!
      • 응아니야맨
        망했다
      • Theo Lee
        저도 최상위 디렉토리로 나와야한다는 것은 인지하고 있었는데.

        ../ 이것은 몰랐네요! 감사합니다!!
        대화보기
        • 송성태
          결국 추상화의 문제군요.
          가능한 추상화를 해서 수작업의 필요성을 줄이는 것이 핵심이군요.
          잘 배웠습니다!
        • 완료!
        • 왓떠뻐꺼
          완료했습니다. 감사합니다.
        • jayxwoo
          잘 들었습니다^^ 감사합니다.

          중복의 제거
          require 사용해서 파일을 분리. (중복 코드 제거)
          분리된 파일 안에서 함수를 정의, 그 함수를 호출하는 것을 통해서 특정코드를 여러번 여러군데에서 사용가능.
          데이터베이스에 접속하는 정보를 별도의 config라는 파일로 분리.
        • 다시시작
          완료
        • jayxwoo
          저같은 경우 index.php가 저장된 디렉토리에서 두번 빠져나와야해서 ("../../lib.php")이렇게 해결했습니다. YeonHoon Jeong님 의 덧글 보고 잘 해결했네요. 감사합니다^^
          대화보기
          • SanFrancisco
            라이브러리가 많아지면 연결 관계가 굉장히 헷갈리겠네요. 어쨌든, 이제 점점 마지막이 보이는 것 같습니다. ^^
          • 호로로로로롤
            저도 같은 문제 때문에 고민했는데 감사합니다!!
            대화보기
            • 김태윤
              봤어요
            • svastica
              완료입니다!
            • 가영
              완료!
            • GoldPenguin
              완료했습니다.
            • Myeongjin Ko
              완료
            • Baekkyu Han
              라이브러리 1 (직접 만들기)
              중복의 제거 생산성 향상 재사용
              중복 사용 로직을 재사용할 수 있도록 모듈화한것
            • 박예지
              8/13 완료료료!
            • 라이브러리는 수학에서의 방정식 이다.
              라는 느낌이 드네요.
              각각 있던 값(localhost, root, 111111, opentutorials)이 d가 붙은 문자들로 치환되네요.
            • Hyerin Cho
              혹시 "../lib/db.php" 로 수정해보시겠어요? 저는 이렇게 수정하니까 되더라구요
              대화보기
              • 김경태
                잘봤습니다~
              • 등촌동LPG
                수업을 따라하면서, lib/db.php 라이브러리 적용 후 index.php 페이지로 로딩하면

                HTTP 500 오류가 발생합니다.

                다시 conn 정보로 수정하면 정상 접속됩니다.
                $conn = mysqli_connect('localhost','root','rootroot'); //connection
                mysqli_select_db($conn,'opentutorials'); //use opentutorials

                이렇게 라이브러리 적용이 안되는 경우. 어떻게 해야 하는지 아시는분 조언 부탁드립니다.
              • 인재진
                db_init은 데이터베이스를 선택하고 접속하는 코드이다 ^^잘 들었습니다^^
              • 감사합니다!
                또는, 간단하게 lib/db.php 폴더+파일을 index.php 파일이 위치하는 폴더로 이동시켜주면 됩니다. ^^
                대화보기
                • 완료 ^^
                • 푸른바람9101
                  열심히...
                • 지구촌
                  쉬운게 하나도 없어요.
                • 김범진
                  완료!
                • 한종운
                  라이브러리 1 (직접 만들기)

                  라이브러리 1 : 개론
                  중복된 두줄 또는 수천줄의 코드를 하나의 내장함수화 하여 라이브러리로 사용

                  라이브러리 2 : 직접 만들기
                  require("lib/db.php");
                  $conn = db_init()

                  db값에 따라서 db.php는 변경없도록 변수 설정.
                  config.php의 작성. host. duser. dpw. dname 지정
                  이제 config.php 만 바꾸면, 이를 가져다쓰는 모든 코드가 변경내용을 적용.
                • 박재은
                  차근차근 중복을 제거하는 과정을 따라해보니 왜 여러 파일로 코드를 나눠서 하는지 이해가 되네요.
                  강의 잘 들었습니다!
                • 잘 봤습니다!!
                • 김대관
                  잘봣씁니다
                • 코딩학습생
                  잘 봤습니다.
                • 완료~!
                • 임영선
                  강의 잘 들었습니다!
                  이번 실습에서는 제가 스필링을 잘못 넣었는지 $result값이 NULL이 나와서 조금 힘들었네요;
                  결국 왜 NULL이 들어가있었는지는 알 수 없었지만 결국 홈페이지의 에러를 모두 없애고 강의를 완료했습니다!
                • 김대관
                  8/12 잘봤습니다
                • YeonHoon Jeong
                  수강완료 하였습니다.
                  혹시 require () 오류 때문에 어려움이 있는 분들을 위해 작게 끄적여봅니다.
                  저같은 경우도 require 에서 php파일을 찾을 수 없다는 오류가 있었습니다.
                  require("lib/db.php"); 이리 적었는데 오류가 떠서, a 태그에 href에 넣었던 방식으로
                  require("http://localhost/lib/db.php"); 이렇게도 코딩하였는데 오류가 뜨더라구요.
                  왜이러지 했는데, 한 10분동안 붙잡은 결과, 생각난것이 방금 적은 것은 말그대로 웹주소였어요.
                  require 안에 들어갈 것은 파일이름인데 말이죠. 그래서 저같은 경우는 index.php 파일과 db.php파일 위치의 수준이 다르더군요. egoing님의 경우 index.php파일이 htdocs 의 바로 밑에 있어서 require("lib/db.php");가 되는 것이구요. 저의 경우 index.php파일이 php디렉토리(폴더) 안에 있어서 안됬던 것이었습니다.
                  그래서 파일을 찾을때 php 디렉토리에서 한단계 빠져나와야하는데 그때 사용하는것이 .. 입니다.
                  ..은 현재 파일이 있는 디렉토리에서 한단계 전으로 빠져나오는것입니다.
                  결론적으로, 저같은 경우 require("../lib/db.php"); 이렇게 작성함으로써 문제를 해결하였습니다.
                  참고하시길 바랍니다.
                • aimerthis(이성민)
                  잘봤어용
                • 김우진
                  잘 들었습니당
                • 강동곤
                  잘 봤습니다 ㅎ
                버전 관리
                egoing
                현재 버전
                선택 버전
                graphittie 자세히 보기