생활코딩

Coding Everybody

코스 전체목록

닫기

관계형 데이터베이스 실습

실습1 

opentutorials.sql

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `topic`
-- ----------------------------
DROP TABLE IF EXISTS `topic`;
CREATE TABLE `topic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `description` text NOT NULL,
  `author` int(11) NOT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of topic
-- ----------------------------
INSERT INTO `topic` VALUES ('1', 'About JavaScript', '<h3>Desctiption</h3>\r\n<p>JavaScript  is a dynamic computer programming language. It is most commonly used as part of web browsers, whose implementations allow client-side scripts to interact with the user, control the browser, communicate asynchronously, and alter the document content that is displayed.</p>\r\n<p>\r\nDespite some naming, syntactic, and standard library similarities, JavaScript and Java are otherwise unrelated and have very different semantics. The syntax of JavaScript is actually derived from C, while the semantics and design are influenced by the Self and Scheme programming languages.\r\n</p>\r\n<h3>See Also</h3>\r\n<ul>\r\n  <li><a href=\"http://en.wikipedia.org/wiki/Dynamic_HTML\">Dynamic HTML and Ajax (programming)</a></li>\r\n  <li><a href=\"http://en.wikipedia.org/wiki/Web_interoperability\">Web interoperability</a></li>\r\n  <li><a href=\"http://en.wikipedia.org/wiki/Web_accessibility\">Web accessibility</a></li>\r\n</ul>\r\n', '1', '2015-03-31 12:14:00');
INSERT INTO `topic` VALUES ('2', 'Variable and Constant', '<h3>Desciption</h3>\r\n\r\nIn computer programming, a variable or scalar is a storage location paired with an associated symbolic name (an identifier), which contains some known or unknown quantity or information referred to as a value. The variable name is the usual way to reference the stored value; this separation of name and content allows the name to be used independently of the exact information it represents. The identifier in computer source code can be bound to a value during run time, and the value of the variable may thus change during the course of program execution.\r\n\r\n<h3>See Also</h3>\r\n<ul>\r\n<li>Non-local variable</li>\r\n<li>Variable interpolation</li>\r\n</ul>\r\n', '3', '2015-05-14 10:04:00');
INSERT INTO `topic` VALUES ('3', 'Opeartor', '<h2>Operator</h2>\r\n<h3>Description</h3>\r\n<p>Programming languages typically support a set of operators: constructs which behave generally like functions, but which differ syntactically or semantically from usual functions</p>\r\n<p>Common simple examples include arithmetic (addition with +, comparison with >) and logical operations (such as AND or &&). </p>\r\n', '1', '2015-06-18 05:00:00');
INSERT INTO `topic` VALUES ('4', 'Conditional', '<h3>Description</h3>\r\n<p>In computer science, conditional statements, conditional expressions and conditional constructs are features of a programming language which perform different computations or actions depending on whether a programmer-specified boolean condition evaluates to true or false. Apart from the case of branch predication, this is always achieved by selectively altering the control flow based on some condition.</p>\r\n<p>In imperative programming languages, the term \"conditional statement\" is usually used, whereas in functional programming, the terms \"conditional expression\" or \"conditional construct\" are preferred, because these terms all have distinct meanings.</p>\r\n<h3>See Also</h3>\r\n<ul>\r\n<li><a href=\"http://en.wikipedia.org/wiki/Branch_(computer_science)\" title=\"Branch (computer science)\">Branch (computer science)</a></li>\r\n<li><a href=\"http://en.wikipedia.org/wiki/Conditional_compilation\" title=\"Conditional compilation\">Conditional compilation</a></li>\r\n<li><a href=\"http://en.wikipedia.org/wiki/Dynamic_dispatch\" title=\"Dynamic dispatch\">Dynamic dispatch</a> for another way to make execution choices</li>\r\n<li><a href=\"http://en.wikipedia.org/wiki/McCarthy_Formalism\" title=\"McCarthy Formalism\">McCarthy Formalism</a> for history and historical references</li>\r\n<li><a href=\"http://en.wikipedia.org/wiki/Named_condition\" title=\"Named condition\" class=\"mw-redirect\">Named condition</a></li>\r\n<li><a href=\"http://en.wikipedia.org/wiki/Test_(Unix)\" title=\"Test (Unix)\">Test (Unix)</a></li>\r\n<li><a href=\"http://en.wikipedia.org/wiki/Yoda_conditions\" title=\"Yoda conditions\">Yoda conditions</a></li>\r\n</ul>', '2', '2015-07-25 00:00:00');
INSERT INTO `topic` VALUES ('5', 'Function', 'A function model or functional model in systems engineering and software engineering is a structured representation of the functions (activities, actions, processes, operations) within the modeled system or subject area.', '2', '0000-00-00 00:00:00');
INSERT INTO `topic` VALUES ('6', 'Object', 'In computer science, an object is a location in memory having a value and possibly referenced by an identifier. An object can be a variable, a data structure, or a function. In the class-based object-oriented programming paradigm, \"object\" refers to a particular instance of a class where the object can be a combination of variables, functions, and data structures. In relational database management, an object can be a table or column, or an association between data and a database entity (such as relating a person\'s age to a specific person)', '3', '0000-00-00 00:00:00');

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `password` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'egoing', '111111');
INSERT INTO `user` VALUES ('2', 'jin', '222222');
INSERT INTO `user` VALUES ('3', 'k8805', '333333');
INSERT INTO `user` VALUES ('4', 'sorialgi', '444444');
INSERT INTO `user` VALUES ('5', 'lily', '555555');
INSERT INTO `user` VALUES ('6', 'happydeveloper', '666666');

실습2

index.php

<?php
$conn = mysqli_connect("localhost", "root", 111111);
mysqli_select_db($conn, "opentutorials");
$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>
  <?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>'.$row['title'].'</h2>';
      echo '<p>'.$row['name'].'</p>';
      echo $row['description'];
  }
  ?>
  </article>
</body>
</html>

실습3

process.php

<?php
$conn = mysqli_connect("localhost", "root", 111111);
mysqli_select_db($conn, "opentutorials");
$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');
?>

소스코드

github

코드의 힘을 느껴봅시다

코드는 부품을 결합하는 접착제라고 할 수 있습니다. 부품이 강력해지면 코드의 힘도 강력해집니다. 단 몇줄의 코드를 추가하는 것으로 파일업로드라는 매우 어려운 기능을 웹사이트에 추가해보겠습니다. 이를 위해서 uploadcare라는 서비스를 활용할 것인데요. 주소는 아래와 같습니다. 물론 이 수업은 필수가 아니고 선택입니다. 흥미가 있는 분만 보시길 바래요. 

http://uploadcare.grsm.io/e/1Xl

참고로 위의 주소로 서비스에 방문하면 서비스에 수익이 발생했을 때 수익금의 일부가 생활코딩에게 지급됩니다. 생활코딩은 이 수익금 전액을 비영리 단체 오픈튜터리얼스의 후원금으로 사용합니다.  

수업보러가기

코드는 아래와 같습니다. 

write.php 파일 내용

변경된 내용은 아래와 같습니다. 

github 변경된 코드 보러가기

댓글

댓글 본문
작성자
비밀번호
  1. ㅊㅇㅇ
    저두용 그래서 변경해서 올렸어요
    대화보기
    • zydzyd
      datetime이 0000-00-00으로 되있으니 오류가 뜹니다.
      따로 시간을 바꿔줘야할듯.. 나만 그런가?
    • phils
      질문있습니다.
      if(!empty($_GET['id'])){
      }else{
      } <----이런 함수와 조건문을 사용할때

      주소가 php?id=0 과같이 id값에 0을 집어넣을 경우 else문이 실행이 되는데
      0의 값이 들어가면 NULL,false와 같이 값이 거짓인것으로 인정하나요?

      그리고 mysql에서 INSERT INTO 를 사용하여 강제로 id값이 0인 항목을 만들려고 시도해보았는데
      무시되고 id값이 자동으로 올라간 값으로 만들어지네요. mysql에서 프라이머리값으로 지정된항에는 0값은 불가한것인가요?
    • 슝태
      20180119
    • 백관렬
      2번째실습에서 전부 코드를 넣었는데 확인해보니 Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\Bitnami\wampstack-5.6.31-0\apache2\htdocs\index.php on line 36 이런 애러기떠요 해결방법좀알려주세요
    • PassionOfStudy
      18-01-09 11일차 - 1번째 강의

      수강완료!

      뒤로 갈 수록 이해하고 익숙해지는데 시간이 오래걸리네요 ㅠ_ㅠ;;
      너무 얕잡아본 것 같습니다. 하지만 꾸준히해서 이번 주 안에 완강하겠습니다.
      익숙해지자 익숙해지자~ 익숙해지자~~ 익숙해지자~~~ .......
    • 실습3 동영상의 21분28초 즈음에 sql문을 잘못 적으신 것 같습니다.

      SELECT * FROM topic WHERE name="egoing";

      이라고 적으셨습니다만 user테이블을 topic테이블로 잘못 적으신것 같습니다.
      강의듣던중에 제가 잘못된건가 잠깐 혼란이 왔습니다 영상밑에 오류 언급해주시면 감사하겠습니다.
    • 눈똥그리
      질문 있습니다.

      실습 2에서 sql 문법 차이를 알고 싶습니다.
      실습에서 작성한 문법은
      $sql = "SELECT topic.id,title,name,description FROM topic LEFT JOIN user ON topic.author = user.id WHERE topic.id=".$_GET['id'];

      $sql = 'select topic.id, topic.title, topic.description, user.name from topic, user where topic.author = user.id and topic.id = '.$_GET['id'] ;
      위와 같이 LEFT JOIN user ON topic.author = user.id 을 사용하는 방법과
      아래 where 절 topic.author = user.id and 조건절
      차이 점은 무었을까요?
      결과는 같습니다.
    • ㄷㅋ
      코드 애니웨어 사용하고있는데

      sql문을 전체 복사해서 붙여넣기 하면 제대로 데이터가 들어가지않아, 토픽과 유저를 따로 붙여넣으니 되더라구요..
    • 이근환
      2017-12-12 수강 15일차

      수강완료하였습니다.

      점차 난이도가 높아지지만

      포기하지 않고 잘 완주하겠습니다!!:)
    • Gwanghyeon Harry Gim
      지금까지 배운 내용 중 가장 어려웠고 헤맸지만 그만큼 성취감도 큽니다.

      저는 코드애니웨어를 통해 실습하고 있는데요, 실습1에서 이고잉님이 써주신 코드를 mysql이 인식 못하는 데이터가 몇 개 있었습니다. 고민하고 이것저것 시도해보던 중 전체 코드를 한 줄씩 써넣으니 다행히 작동이 됐고 그 뒤로 실습을 계속할 수 있었습니다.

      관계형 데이터베이스. 정말 어려운 내용이었고 앞으로 어떻게 새로운 내용을 받아들여야할지도 막막하게 느껴지지만 나중에 좀 더 깊이 이해할 수 있을 거란 기대감을 갖고 열심히 하산하겠습니다. 감사합니다.
    • 같은 문제
      저도 같은 문제가 있는데, 데이터베이스 user 표를 새로 만들어도, 기존 user표에 name들을 인식 못하고있습니다..
      실습 3번까지 다했지만, 새로운 작성자 이름을 추가할 경우 잘 실행이 되나/ 기존 user에 있는 이름을 작성자에 쓰면, 기존에 있는 id값을 가져오지않고, 마치 새로운 작성자처럼 추가를 합니다.. 어떻게 해야 할까요? 새롭게 다시 만드셨다고 하셨는데, 어떤걸 새롭게 만드신건가요?
      대화보기
      • 박인호
        11-27
        수강완료.
        이해하기 쉽지않은 만큼 이해했을때 생기는 뿌듯함과 희열은 더 큰 것 같네요.
        항상 감사드립니다.
      • 서성진
        후아. 어렵네요. 그래도.. 열심히 해볼랍니다.
        감사합니다.
      • 효천
        잘보고 배우고 나갑니다.
        조금 어렵긴 한데 의미는 알겠습니다.
      • 유상원
        2017-11-11 완료!
      • 김지원
        알아 냈어요!
        혹시 작성자를 아무 변수나 하지 않으셨나요??? 3번강의 16분의 내용은 아직 새로운 id를 가진 작성자에 관한 코드가 작성되지 않은 상태라서 기존에 없는 작성자를 적어 제출할 경우 null값이 뜨네요!

        그래서 강의에 나온대로 egoing이나 혹은 user리스트에 이미 올라온 다른 작성자를 이용해 제출하면 정상적으로 나오네요
        대화보기
        • Dongwon Shin
          수강완료했습니다.
        • Jungmoon Huh
          대장정이 마무리되어 가네요. 감사합니다!
        • Michael
          완료~
          감사합니다.
        • 송성태
          두 번 듣고 이해, 실행했습니다.
          코드는 정확히 작성자가 의도한 것만을 수행하는 군요.
          반복되는 변수 이름들이 어디서 왔는지 새기며 들으니 도움이 됩니다.
          이제 웹이 어떻게 작동하는지 어렴풋이 보입니다.
          웹 사이트 방문할 때 주소창에 보이는 'php?='란 구문을 보면 반가울 정도입니다. ^^
          소중한 지식 나누어 주셔서 감사드립니다.
          더 열심히 해서 저도 다른 이들에게 도움이 되도록 하겠습니다!
        • 왓떠뻐꺼
          완료했습니다. 감사합니다.
        • 크 ㅠㅠ php 어렵네요.. 함수도 외워야될것도 많고..
        • hunter10
          완료
        • DooNa Hwang
          opentutorials.sql 파일의 topic 테이블의 5,6번째 항목이 날짜가 0000-00-00으로 되어있어 error가 나오더라구요..ㅠㅠ 저만 목록이 4개 나와서 한참 헤매었네요.힝.. 소스 수정 부탁드립니다.
          이고잉 님 덕분에 앎의 기쁨을 만끽하고 있습니다.^^ 좋은 지식 나눔 감사드립니다.
          막연하게 홈페이지를 만들고싶다는 생각이었는데, 이렇게 숲을 보니 나무에 대한 공부에 조금 더 자신감이 생깁니다.
          건강하세요~^^
        • 완료...
        • 헬리사우드
          HTML줄바꿈하듯 줄바꿈하니 새롭게보이네요.
          <?php
          echo
          '<h2>
          '.$row['title'].'
          </h2>
          <br>
          <footer>
          Written by '.$row['author'].
          '</footer>
          <br>'
          .$row['description'].
          '<br>
          <small>
          Created:'.$row['created'].
          '</small>';
          ?>
        • 아이
          근데 이게 또 어려운데 진짜 재밌네요!
        • 주주맘마
          완료 - 실습3은 어렵네요. 한번 더 들어봐야겠어요.
        • 고고싱
          이거는 정말 비전공자는 쉽지않네여. 그냥 타이핑하는정도 ㅠㅠ
        • 고고싱
          여기까지가!!!! 끝인가보오~
        • 다시시작
          하..어렵지만 완료.
        • SanFrancisco
          이번 강의가 제일 어려운 것 같네요. 역시 데이터베이스는 어려워요 ㅠ
        • jayxwoo
          잘 봤습니다! 조금 어려워서 한번더 정리해서 해봐야겠네요. 강의 감사합니다.
        • Seongho Kim
          이고잉님께 진심으로 감사드립니다. 많은 걸 배웁니다. 점입가경의 명강의가 이어지는군요.
          아낌없이 노하우를 전하시는 모습에 깊이 감동받았습니다.
        • Youngil Jin
          실습3에서 author 에 id값을 못가져오는데 왜 일까요??
          잘따라 했는거 같은데...
          웹에서는 잘 만들어지는데 작성자이름이 안나오고....ㅜㅜ
          /////////////////
          고쳤습니다.
          새로 만들면 잘 받아오는데...
          고치기 전에 작성했던 user의 id 값을 author이 못 받아오네요..ㅡㅡ;
        • mysqli_insert_id($conn); 부분에서요
          이 내장함수는 이 함수가 실행되기 직전에 추가된 행의 아이디값을 구하는 함수라고 하셨는데
          입력값이 꼭 $conn이어야만 하는 이유가 있나요?
          $sql은 안되는 것인가요?
        • 초다
          맥에서 첫번째 시도는 성공 했는데 두번째부터는 cd Applications으로 들어가면 아무 디렉토리도 보이지 않아요.
          혹시 이문제 해결하신 분 계신가요? ㅜㅜ
        • 하늘가는대로
          여기까지 정주행 완료.~!!
        • qud4186
          finish.
        • svastica
          학습완료!!!
        • GaTMoe
          저도 같은증상이요ㅠㅠㅠ
          <?php
          $conn = mysqli_connect("localhost", "root", "alsdn3220");
          mysqli_select_db($conn, "opentutorials");
          $sql = "SELECT * FROM user WHERE name='".$_POST['author']."'";
          $result = mysqli_query($conn, $sql);
          $row = mysqli_fetch_assoc($result);
          var_dump($row);
          exit;
          $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......hp');
          ?>
          여기서 비밀번호를 따옴표로 감싸면 NULL이 나오고 따옴표 안하면 undefined 떠요
        • 비밀번호를 입력했는데 undefined constant라네요..?왜이럴까요ㅠㅜ
        • GoldPenguin
          완료했습니다.
        • 가영
          완료!
        • Baekkyu Han
          관계형 데이터베이스 실습
          실습1~3
          데이터 출력법
          데이터 추가
        • 박예지
          8월 10일 완료!!!
        • 김경태
          다시 시작! 잘봤습니다~
        • Myeongjin Ko
          완료
        • 완료 ^^
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기