웹 애플리케이션 만들기

라이브러리 2 (타인의 것 사용하기, tb)

트위터 브트스트랩(twitter bootstrap)을 이용해서 타인이 만든 라이브러리를 사용하는 방법을 알아보겠습니다.

홈페이지 및 다운로드

라이브러리 3-1

라이브러리 3-2

라이브러리 3-3

라이브러리 3-4

라이브러리 3-5

 소스코드

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">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
  <link rel="stylesheet" type="text/css" href="http://localhost/style.css">

  <link href="http://localhost/bootstrap-3.3.4-dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body id="target">
  <div class="container">

    <header class="jumbotron text-center">
      <img src="https://s3.ap-northeast-2.amazonaws.com/opentutorials-user-file/course/94.png" alt="생활코딩" class="img-circle" id="logo">
  		<h1><a href="http://localhost/index.php">JavaScript</a></h1>
    </header>
    <div class="row">

        <nav class="col-md-3">
          <ol class="nav nav-pills nav-stacked">
          <?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 class="col-md-9">

          <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>
          <hr>
          <div id="control">
            <div class="btn-group" role="group" aria-label="...">
              <input type="button" value="white" onclick="document.getElementById('target').className='white'" class="btn btn-default  btn-lg"/>
              <input type="button" value="black" onclick="document.getElementById('target').className='black'" class="btn btn-default btn-lg"/>
            </div>
            <a href="http://localhost/write.php" class="btn btn-success  btn-lg">쓰기</a>
          </div>
        </div>
    </div>




  </div>


  <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="http://localhost/bootstrap-3.3.4-dist/js/bootstrap.min.js"></script>
</body>
</html>

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">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
  <link rel="stylesheet" type="text/css" href="http://localhost/style.css">

  <link href="http://localhost/bootstrap-3.3.4-dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body id="target">
  <div class="container">

    <header class="jumbotron text-center">
      <img src="https://s3.ap-northeast-2.amazonaws.com/opentutorials-user-file/course/94.png" alt="생활코딩" class="img-circle" id="logo">
  		<h1><a href="http://localhost/index.php">JavaScript</a></h1>
    </header>
    <div class="row">

        <nav class="col-md-3">
          <ol class="nav nav-pills nav-stacked">
          <?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 class="col-md-9">

          <article>
            <form action="process.php" method="post">

              <div class="form-group">
                <label for="form-title">제목</label>
                <input type="text" class="form-control" name="title" id="form-title" placeholder="제목을 적어주세요.">
              </div>

              <div class="form-group">
                <label for="form-author">작성자</label>
                <input type="text" class="form-control" name="author" id="form-author" placeholder="작성자를 적어주세요.">
              </div>

              <div class="form-group">
                <label for="form-author">본문</label>
                <textarea class="form-control" rows="10" name="description"  id="form-author" placeholder="본문을 적어주세요."></textarea>
              </div>

              <input type="submit" name="name" class="btn btn-default  btn-lg">
            </form>
          </article>
          <hr>
          <div id="control">
            <div class="btn-group" role="group" aria-label="...">
              <input type="button" value="white" onclick="document.getElementById('target').className='white'" class="btn btn-default  btn-lg"/>
              <input type="button" value="black" onclick="document.getElementById('target').className='black'" class="btn btn-default btn-lg"/>
            </div>
            <a href="http://localhost/write.php" class="btn btn-success  btn-lg">쓰기</a>
          </div>
        </div>
    </div>
  </div>
  <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="http://localhost/bootstrap-3.3.4-dist/js/bootstrap.min.js"></script>
</body>
</html>

process.php

<?php
require("config/config.php");
require("lib/db.php");
$conn = db_init($config["host"], $config["duser"], $config["dpw"], $config["dname"]);
$sql = "SELECT * FROM user WHERE name='".$_POST['author']."'";
$result  = mysqli_query($conn, $sql);
if($result->num_rows == 0){
  $sql = "INSERT INTO user (name, password) VALUES('".$_POST['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('".$_POST['title']."', '".$_POST['description']."', '".$user_id."', now())";
$result = mysqli_query($conn, $sql);
header('Location: http://localhost/index.php');
?>

style.css

body.white{
  background-color:white;
  color:black;
}
body.black{
  background-color:black;
  color:white;
}
#logo {
  width:100px;
}
.container{
  padding-top:20px;
}
#control{
  margin-bottom:40px;
}

소스코드

github 

댓글

댓글 본문
작성자
비밀번호
  1. 만토리
    2016/11/29 완료
  2. souLTrain
    화이팅님!
    저도 같은 현상이 있어서 해결했습니다. (이 해결방법이 맞는 방법인지는 모르겠습니다만...)

    웹 브라우져의 과거 열람페이지를 전부 삭제했습니다. (브라우져 설정화면에 있죠?)
    브라우져는 크롬입니다.
    대화보기
    • 화이팅
      css 수정하고 저장뒤 localhost/index.php 새로고침을 했는데 왜 바로 적용이 안되는걸까요..?
      한번은 css 경로를 새로 만든뒤 바꾼 경로로 수정하니까 적용이 됐었고 또 한번은 그것도 안되길래
      쓰기버튼을 눌러서 localhost/write.php 화면에 들어갔다가 다시 index.php 화면으로 들어가니까 적용이 되었어요 ㅜㅜ
      어찌어찌 해결은 됐지만 왜 저런문제가 생기는건지 모르겠네요..
    • 폭스킴
      아악~ 내 눈~ ㅎ
    • 히스토
      와.. 험난한 mysql 뒤에 이렇게 재미난 코너를 준비해두셨다니!
    • 김남진
      감사합니다
    • 김종엽
      2016.08.10 완료!
    • 라꿍차타
      오 이거예요 이거 제가 원했던거!!! 드디어 도착했네요!! 대박ㅜㅜ
      감사합니다 이고잉님 ㅠㅠ
      듣는중인데 심장이 두근거립니다!
      감사합니다!!
    • 오타가있었네요 ㅎㅎ
      대화보기
      • 저는 이상하게

        제목 텍스트칸부터 article영역에 없고 길게 밑에 배치되네요 소스도 같은데 왜 그런건지 ㅠㅠ
      • Wookiiis
        잘 보았습니다. :)
      • JustStudy
        고맙습니다 2.
      • JuHui Lee
        php 강좌중에 작성자님도 말씀해주신 건데요,
        php.ini파일에 있는 내용을 소폭 수정하셔야 합니다.
        일단 php.ini를 여시고요
        (경로는 C:\Bitnami\wampstack-5.6.21-2\php이고요
        ini라는 확장자가 안보이시면 윈도우 사용중이시라면 위쪽에 보기 메뉴 > 파일확장자 체크하시면 보입니다)
        그 파일에서 opcache를 검색하시면 그중 opcache.enable=0으로 되어있는 게 있어요.
        이 0을 1로 해주시면 변경된 정보가 바로바로 반영됩니다ㅎ
        대화보기
        • Sy Kim
          <나만의 이해> 부트스트랩이라는 것은 그냥 class="~~" 이렇게 생긴 명령어임. 다만, 예쁘거나.. 반응형 디자인이거나.. 많이 쓰는 기능을 담은 것으로.. 다른 사람들이 계속 만들어서 늘어나고 있는... 최신 웹 디자인 명령어 사전임..
        • Rhys Jung
          이번강의 보고 희망이 넘쳐나네요...ㅜㅜ
          그런데 궁금한점이
          트위터 개발자드이 부트스트랩을 만들었다는게 잘 접목이 안되네요

          개인적으로 다음강에 나오는 호스팅 업체에서 개발을 해서
          유포한다면 이해가 되겠는데...ㅜㅜ
        • 우와 대박 이번강의 정말 대박
        • 맨밥
          와 첫 강의부터 쭉 보고 있었는데 이번 강의가 제일 설렜어요ㅋㅋㅋ무엇보다 앞에서 쭉 기본적이고 본질적인 면을 배우다 이런 식의 편리함을 접하니까 느낌이 남다른 것 같습니디ㅏ!! 항상 잘 듣고 있어요 이런 강의 해주셔서 정말로 감사드려요ㅠㅠㅠㅜ
        • 초짜다
          동물사랑님 같은경우 ..강좌내용에도 있었지만

          php.ini 파일의 내용중 opcache.enable=1 을 opcache.enable=0 으로 바꾸고 아파치 재시작하면

          된다고 하네요.
        • 이주환
          2016. 04. 15.
          정독했습니다.
          라이브러리의 도움을 받는것도 많은 도움이되지요.
          저는 예전에 jquery mobile를 사용해본적이있어서 부트스트랩이 어색하지않네요 ㅎ
        • JustStudy
          고맙습니다
        • 동물사랑
          강좌 너무 잘 보고 있습니다.

          안내해 주신대로 비트나미로 PHP, 아파치 사용중입니다.


          그런데 수정된 php 내용의 업데이트가 늦게 되는 거 같습니다.

          localhost/index.php 내용은 2~3분 뒤 변경 내용이 반영이 되고,

          일반 index.html 파일을 열면 수정 후 바로 반응을 합니다.

          어떻게 해결 방법이 없을까요?
        • 트위터 부트스트랩 라이브러리는 자바스크립트와 CSS, 폰트파일들로 구성되어있습니다.
          즉, 트위터 부트스트랩 라이브러리로 디자인한다는 게 결국 CSS를 사용한다는 것이죠!

          잘 보시면, 위 예제에서
          HTML(PHP) 소스코드에는 디자인 적인 세부사항(색상, 크기, 여백 등등)이
          전혀 들어있지 않음을 알 수 있습니다(CSS에서 해주기 때문이죠!).

          개체들의 배치순서와 클래스 지정 등이 디자인 적인 요소라서 HTML에서 빠져야 한다고 생각하실 수
          있지만, 모든 디자인 작업을 CSS가 담당할 수는 없습니다.

          '설계적 디자인'(design)은 HTML이 담당하고, '심미적 디자인'(graphic art)을 CSS가 담당한다고 보시면
          조금 더 명확하지 않을까 싶습니다.

          클라이언트 입장에서 -
          HTML : 디자인(설계), 내용(정보, 데이터)
          JS : 동작
          CSS : 미적 요소

          이렇게 구분하시면 어떨까요?
          대화보기
          • 색종
            유익한 강의 항상 고맙습니다~
          • 해앵인
            감사합니다! 그런데 트위터 부트스트랩을 쓰면 전에 이고잉님이 강조하셨던 html의 정보로서의 기능이 퇴색하는 것 아닌가 하는 의문이 듭니다. css를 도입한 목적이 정보와 디자인을 분리하기 위해서였잖아요? 이번 강의를 통해 예전으로 퇴보하는 건 아닌가요? 궁금해요!
          • 김트라슈
            우오오... 동공지진입니다.... 감사합니다.
          • openarms
            Twitter Bootstrap 으로 쉽게 스타일을 지정할 수 있겠네요. 굿!
          • 티거리스
            라이브러리 강의를 듣는순간 신세계를 접하게되네요 ㅋㅋㅋ
          • ironboy
            라이브러리 들어와서는진짜 재밌네요.ㅋㅋㅋㅋ
          • 오빠는다르다
            항상감사합니다!!!
          • Moon Hee Bae
            좋은 강의 감사드립니다. ^^
          • Cherry Jeon
            와...이번 강의가 진짜 제일 재미있었어요!! ㅋㅋㅋ진찌 언제쯤 이 웹사이트를 예쁘게 꾸밀까 했는데 드디어..!! 진짜 왠만한 웹사이트 못지않게 예쁘네요 빨리 더 꾸미고 싶지만요ㅋㅋㅋ 진짜 5개 강의나 되는 긴 강의였는데도 하나도 안 지루하게 달려온거같아요!! 정말 많은 것을 배웠네요 ㅎㅎ 항상 쉽고 재미있게 가르쳐주셔서 감사합니다:)
          • dkfkcl5
            그럴싸하게 꾸미다 보니깐 정말 재미있네요^^
            '개발자는 생산성을 추구해야되기 때문에 만들어져있는 라이브러리를 적절히 이용할 줄 알아야하는 것이
            선택이 아닌 필수'라는 말에 많이 배웠습니다~~
          • SK Kim
            도장 쾅!
          • adslbna2@naver.com
            좋은강의 감사합니다
          • 남상민
            잘 봤습니다.
            여기가 최 정점인 것 같습니다!
            여러번 따라해야 익숙해질 것 같아요
            좋은강의 감사합니다.
          • googler
            제출버튼 누르면 누르고 제목이 옆에 생성되면 그거 누를때 다른사름은 못들어가고 저혼자볼수있게하려고

            <?php
            while( $row = mysqli_fetch_assoc($result)){
            echo '<li><a href="/index.php?id='.$row['id'].'">'.htmlspecialchars($row['title']).'</a></li>'."\n";
            }
            ?> 이부분에서

            <a href="/index.php?id='.$row['id'].'"> 이 제출하면 생길텐데 이안에 코드를써서 링크 누를때 비번입력하는 식으로 저혼자 보게 하려고하는데 어떻게해야할까요? 이안에 쓰는게 아니라면 방법 좀 알려주세요 ㅠㅠ
          • 안광현
            모방은 창조의 어머니. 라이브러리를 이용하고 따라하면서 빨리 실력을 쌓아야겠네요~!
          • 정민규
            와 정신 나갔던 멘탈이 다시 제자리를 찾네요~ 물을 먹여주기 보다는 오아시스까지 안내해주는
            친절한 강의 넘 감사드립니다 ^^ 이정도 컨텐츠면 중간중간 지치셨을 듯도 해서 짠하게 수업 듣고 있는
            1인입니다.
          • Hunmin Koh
            넘 재밌어요
          • 비티민C플러스
            감사합니다^.^
            날씨가 많이 쌀쌀하네요. 감기 조심하세요!!
          • soonsoobr
            어렵지만 신기하고 재밌어요~~!!!!!
          • 준맹
            너무 재밌었습니다. 좋은강의 감사드려요.
          • 컴플러스
            egoing 님.
            최고입니다.
          • 코딩!
            부트스탭이 대세이근요!
          • 허니버터
            좋은 라이브러리 알고 갑니다.
            고맙습니다~
          • takkk
            저 찾기는 어떻게하나요?
          • egoinggood
            항상 좋은강의 감사드립니다.
            그런데 3-2에서 bootstrap적용은 잘되는데 요소검사하면 아무것도 안뜨네요? 왜그럴까요??
          • 일곱번째난쟁이
            5장 본문 부분에
            <label for="form-author">본문</label>
            <textarea class="form-control" rows="10" name="description" id="form-author" placeholder="본문을 적어주세요."></textarea>

            form-author <<=== 이부분은 description 으로 안바꿔줘도 되나요?
          • 흑인랩퍼
            정말 재미있게 공부하고 있어요. 감사합니다!
          • 이준헹
            좋은강의 감사합니다! 잘듣고가요!!
          버전 관리
          egoing
          현재 버전
          선택 버전
          graphittie 자세히 보기