웹 애플리케이션 만들기

라이브러리 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. heyri
    15:43 에서
    버전관리시스템에서 배우게 되면 다른 방식으로 푸는 방식을 배우게 된다고 하셨는데 그와 관련된 강의가 있을까요??
  2. James Hanjoo Park
    감사합니다, 수고하셨습니다,
  3. 박병진
    감사합니다. 2020.11.25 완료
  4. 10/15
  5. PARK
    2020.10.09
  6. 파프
    6/25 열심히 듣고 있습니다. 이번주 내로 이번 수업 끝내기가 목표!
  7. HyeonHui Jeong
    5/18 어렵다..ㅠㅠ
  8. 열심히사는사람
    완료
  9. 산노을
    감사!!!!!!!!!!!!!!!!!
  10. marine
    해매고 있었는데 정말 감사합니다! ㅠㅠ
    대화보기
    • myjin
      완료!!
    • 엄청잘될꺼야
      감사합니다. 완료
    • 들국화
      잘봤습니다^^
    • 셜리
      네, 갈수록 고생합니다. ㅎㅎㅎ 완료!
    • OHOHAOHO
      코더들이던 개발자던 해커던.. 내가 다 씹어 먹겠다!!!
    • ududndn77@naver.com
      감사합니다! 정말 이정보가 저에게 도움되었습니다!
      대화보기
      • 살길바라냐
        정말 하루하루 이해가 쏚쏙 되고 있어요 감사합니다
      • 정준원
        이고잉님! 강좌 감사드립니다! 질문 하나 드릴게요~ 혹시 이고잉님께서는 프로그래밍 할때 코드 완성 후에 정리하면서 저런 중복을 제거하시나요 아니면 중복이 생기기 전에 미리 이러한 펑션은 많이 쓰일것 같으니 미리 만들어두자 라는 개념하에 프로그래밍 하시나요? 후자쪽일 경우네는 프로그래밍에 대한 경험과 실력에 따라서 그런게 차이가 날듯 싶네요 만들어지는 속도도 훨씬 빨라질 것 같구요. 추가해서 예전에 index.php 와 write.php 에서 html 코드에 대한 중복이 발생한다는걸 예전에 느꼈었는데 이부분에 대해서는 간단하게 수정할 수 있는 방법이 있나요??
      • AErun
        감사합니다. 이제 원리를 찾으면 될 것 같네요.
        대화보기
        • 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

                    이렇게 라이브러리 적용이 안되는 경우. 어떻게 해야 하는지 아시는분 조언 부탁드립니다.