웹 애플리케이션 만들기

라이브러리 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. 정준원
    이고잉님! 강좌 감사드립니다! 질문 하나 드릴게요~ 혹시 이고잉님께서는 프로그래밍 할때 코드 완성 후에 정리하면서 저런 중복을 제거하시나요 아니면 중복이 생기기 전에 미리 이러한 펑션은 많이 쓰일것 같으니 미리 만들어두자 라는 개념하에 프로그래밍 하시나요? 후자쪽일 경우네는 프로그래밍에 대한 경험과 실력에 따라서 그런게 차이가 날듯 싶네요 만들어지는 속도도 훨씬 빨라질 것 같구요. 추가해서 예전에 index.php 와 write.php 에서 html 코드에 대한 중복이 발생한다는걸 예전에 느꼈었는데 이부분에 대해서는 간단하게 수정할 수 있는 방법이 있나요??
  2. 감사합니다. 이제 원리를 찾으면 될 것 같네요.
    대화보기
    • 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 완료료료!
            • Scia
              라이브러리는 수학에서의 방정식 이다.
              라는 느낌이 드네요.
              각각 있던 값(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은 데이터베이스를 선택하고 접속하는 코드이다 ^^잘 들었습니다^^
              • momo
                감사합니다!
                또는, 간단하게 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 만 바꾸면, 이를 가져다쓰는 모든 코드가 변경내용을 적용.
                • 박재은
                  차근차근 중복을 제거하는 과정을 따라해보니 왜 여러 파일로 코드를 나눠서 하는지 이해가 되네요.
                  강의 잘 들었습니다!
                • ggang
                  잘 봤습니다!!
                • 김대관
                  잘봣씁니다
                • 코딩학습생
                  잘 봤습니다.
                • charl
                  완료~!
                • 임영선
                  강의 잘 들었습니다!
                  이번 실습에서는 제가 스필링을 잘못 넣었는지 $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 자세히 보기