생활코딩

Coding Everybody

코스 전체목록

닫기

라이브러리 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. 김영준
    강의 감사합니다~
    lib.php에서 DB 정보들을 왜 다시 config.php에서 변수처리하는지 이해가 잘 안가네요 ^^;;;
  2. 중복의제거 끝장판 라이브러리?
  3. 김익수
    잘 들었습니다. 쫒아오느라 힘들었지만 그냥 꾸준히 보고 있습니다
  4. 이지훈
    잘 보았습니다.^^
  5. 이용국
    허윤//
    function db_init 을 수행했을 때 return $conn; 구문으로 인하여
    앞서 수행된 function의 데이터의 값 "db_init($host, $duser, $dpw, $dname)"
    을 $conn 에 저장해두는것 이라고 생각합니다.

    설명이 도움 될 지 모르겠으나..라이브러리2 영상의 5:45 ~ 7:00 부분을 다시 보시면 될것같습니다.
  6. JUNY
    완료!
  7. 허윤
    return $conn을 하는 이유가 뭔가요???
  8. Amore Chang
    lib

    중복의 제거 & 재활용

    **require
  9. Qjsdur Qkf
    이렇게 직접 답변해주셔서 정말 감사합니다.

    지금까지의 제가 했던 공부방법은 1챕터가 이해가 되면 2챕터로

    2챕터가 이해가 되지않으면 3챕터로 넘어가지 않았던 방식이었던거 같아요

    박찬울님의 말씀대로 다 이해해야 한다는 강박이 많이 커서 더 답답했던것 같습니다.

    저도 오랜 취준기간을 거친 뒤 무엇가를 제 손으로 해야겠다는 생각이 들어 공부를 시작했는데

    나이가 있다보니 조급함이 많이 생겼던거 같아요

    답변 정말 도움이 많이 되었습니다.

    앞으로 하시는 일 다 잘되시기를 빌겠습니다. 감사합니다.
    대화보기
    • Qjsdur Qkf
      감사합니다.

      나중에 걷잡을 수 없이 이해되기 시작하면서 재미가 쏠쏠하게 되는 그 시점까지

      참고 공부해보도록 하겠습니다.

      이렇게 직접 답변주셔서 정말 감사합니다. 폭스킴님
      대화보기
      • 와.. 너무 확어려워지네용 ㅠ
      • Michelle Kim
        히힛! finish line 을 향해서 go go!!!
      • 김호진
        감사합니다. 글을 읽고 상당히 많은 도움이 됐습니다.
        대화보기
        • 황성준
          잘봤어요!
        • Bank in
          좋은 내용 감사합니다.
        • 으아아아 구세주십니다!!
          대화보기
          • 권광범
            고지가 보입니다.
          • 황성준
            잘봤어요!
          • egoing
            박찬울님 정성껏 다른 분을 도우시려는 마음이 보기에 좋습니다. 고맙습니다.
            대화보기
            • 박찬울
              저도 작게나마 힘을 실어드릴 수 있을까 하여 몇 자 적어봅니다.

              폭스킴님처럼 저 또한 3년 전에 본 수업의 전신인 '작심 20/40시간' 수업을 접했고,
              대충 하다가 이게 뭔소리인가 싶었던 때가 있었습니다.

              그러다가 작년 초가 되어서야 수업을 제대로 들어볼 여유(결단?)가 생겨서 본 수업을 완주했고,
              '복습'편을 5번 반복했습니다. 여기까지가 작년 그리나까 2016년 초겨울 즈음입니다.

              그리고 올해 '야학'을 계기로 다시 수강하게 되었는데요.
              그럼에도 불구하고 여전히 이해가 되질 않고 아직 많이 부족하다는 생각을 많이 하게 됩니다.

              강의 중간 중간 이고잉님께서 자주 강조하시는 부분이 있습니다.
              "이해가 되지 않으시면 넘어가도 괜찮다."
              그만큼 본 수업은 '큰 그림'을 그리시는게 목적인 것입니다.

              아마 모든걸 이해하고 넘어가야겠다고 생각하시는 강박이 있으시다면 잠시 내려놓으시는건 어떨까요?
              또 다시 돌려보면 (웹 애플리케이션 만들기 수업은 짧고, 게다가 유튜브는 영상 빨리 보기, 즉 배속 기능을 제공합니다.) 이전에는 이해가 되지 않았던 부분이 퍼즐이 맞춰지듯 점점 선명하게 다가올 것이라고 생각합니다.
              (심지어 본 과정은 '복습'을 제공합니다. 학습법에 조금 관심이 있는 사람으로서 복습과정을 제공하는 것은 이고잉님의 뛰어난 인사이트를 대변하는 부분이라고 생각합니다. 복습과정 또한 수업의 전 과정을 2시간에 압축해서 설명하고 있고, 복습2는 모든 수업을 30분 이내에 정리해주십니다.)

              게다가 지금 이 과정까지 오셨다는 것 자체가 대단한 것이라고 평가하고 싶습니다.
              저도 평소 나름 컴퓨터에 관심을 가지고 있는 사람이고, 수번의 실습에 이어 두 번째 수업을 듣는 중이지만 DB부터는 역시 어렵습니다... (물론 저도 충분히 노력을 한 것은 아니라고 생각합니다.)

              글이 이렇게 길어질줄은 몰랐는데... 주변에서 관련 분야의 사람들은 마치 날아다니는 것 같은데(저에겐 마치 수퍼맨과 같은 존재...) 나이가 많아 불안한 취준생으로서 공감되는 부분이 있어 몇 자 적어봅니다.

              (추가)
              이해가 되지 않으신다면, 직접 누군가에게 설명해보시는건 어떨까요? 설명은 스스로의 실력을 늘리는데 상당히 효과적인 방법입니다. (없다면 가상의 누군가에게 해보세요. 이고잉님께서도 강의를 만드시는 목적이 정보 제공의 목적도 있겠지만 스스로의 실력 향상에도 도움이 된다고 말씀하셨어요.) 파이팅입니다. ^^
              대화보기
              • sayboy1018
                강의 잘듣고갑니다.
              • 폭스킴
                프로그래밍이라는 게 결국 하나의 대학 전공이 따로 있는 분야일 정도로 원래 어려운 거예요~ 이고잉님 강의가 쉽다는 건 이 어려운 걸 이만큼 쉽게 가르칠 수 있는 사람이 없다는 뜻입니다. 또 여기 강의들으시는 분들 중에 전공자나 컴퓨터를 오래 쓰신 분들도 많이 계십니다. 그런 분들 댓글은 가려 읽으시길~ 처음엔 어려운 데 조금씩 갈피를 잡으시면 걷잡을 수 없이 이해되기 시작하면서 재미가 쏠쏠하실 겁니다. ^^ 저는 작년에 완주하고 또 듣는데도 헷갈린답니다 ㅋㅋ 완전 초심자이시면 C언어책을 보시지 않는 게 나을 것으로 사료됩니다. 더 좌절하실 수 있어요.
                대화보기
                • 이희태
                  6월 28일 라이브러리1 수강완료하였습니다
                • skekogo
                  오늘도 강의 잘 들었습니다!
                • 백곰몬
                  완료! 오늘도 감사합니다
                  대충 이해는 되지만 추후 나중에 따로 제가 프로그래밍을 하게 된다면 못할것 같아요 ㅠ
                • qudwn
                  완료!
                • 치우천황
                  강의 잘들었습니다.
                  기초적인 중복 제거를 알게 되었습니다.
                • Kuon
                  중복을 제거하는건 단지 제거뿐만이 아니라 이후의 수정을 용이하기 위해서도 더 절실한 것 같습니다.
                • Gaehwan
                  이번엔 require가 안 먹었네요 ㅠㅠ;
                  get_required_files로 대신 써봤는데 이것도 안 되고...
                • 제리
                  require를 통해서 두개의 php파일에서 필요정보를 들고 오는 것을 이해했습니다.
                  그리고 db.php파일도 성공적으로 연동했고요
                  그런데 config.php파일을 require해서 연동할때 syntax오류가 index.php파일 3번째 줄
                  즉, require(lib/db.php); 이 라인이 문법적으로 에러가 있다고 하는데 도저히 고쳐지지가 않습니다.

                  오늘 라이브 강의에서 꼭 답변해주셨으면합니다!!
                • 편한 마음(?)으로 따라가겠습니다. 오늘도 감사히^^
                • 스타일C
                  감사합니다.
                • Lydia
                  프로그래머는 아니지만 대학원생이라 코딩을 할 일이 종종 있는데, 중복이 있으면 수정 할 때마다 같은 코드를 다 찾아서 넣어야 하는 피곤함을 실제로 경험해봤기에 이번 수업도 중요한 내용이라는 생각이 듭니다. 항상 감사해요~
                • egoing
                  이번 강의의 내용은 이해 못하셔도 전혀 지장이 없습니다. 지금까지 배운 것만으로도 많은 것을 할 수 있습니다. 그러니 너무 부담 갖지 마시고 앞으로 갈수록 중요하고 원천적이라는 것을 계속 상기하면서 공부 진로를 결정하시면 좋겠습니다.
                  대화보기
                  • Qjsdur Qkf
                    친절한 답변 너무 감사합니다.

                    말씀하신대로 씨언어책 하나라도 끼고 한번 씨름을 벌여봐야겠습니다.

                    많은 힘이 되었습니다.

                    정말 감사합니다!!
                    대화보기
                    • 좋은 강의 감사합니다.
                    • yangjh05
                      걱정 말고 힘내세요!!!
                      대화보기
                      • 정상입니다.
                        다른 사람과 비교하지 마시고 '나' 자신과 계속 비교하면서 공부해보세요.
                        해당 강의로 이해가 안된다면 뭐가 문제일까 생각해본 후 부족한 점을 채우시거나
                        그래도 이해 못하겠다! 싶으시면 중고 서점에 가셔서 완전 기초 책 하나 훑어보시고 이해가는 책을 하나 구매해보세요.
                        완전 기초 서적(보통은 C언어를 추천)으로 공부한 후 다시 이 강의를 들으시면 충분히 이해하실 수 있어요.
                        (요즘은 애기들을 위한 컬러+그림으로 된 책도 있습니다. 기초 이론을 공부하시기에 매우 좋아요.)
                        또한, 인터넷으로 웹 프로그래밍만 검색해봐도 기초부터 알려주는 곳이 정말 많아요!

                        세상에 어려운 것은 없습니다. 생소한 것이 많고 내가 모르는게 많아서 어려워 보이는거지
                        시간과 노력만 있다면 어려운 것은 없습니다.
                        저도 처음엔 많이 힘들었고 헷갈리고 바보같아서 프로젝트하면서 울기도 하고 때려치울까 고민도 많이 했습니다.
                        하지만 포기하기엔 시간이 아까워서 노력하다보니 아직까지 개발하며 살고 있네요 ㅋㅋ
                        정말 뻔한 답은 '시간이 해결줍니다.'

                        저는 배움의 속도가 느리고 호기심이 많아서 관련된 지식을 어느정도 얻어야 이해하는 타입인데,
                        주입식 교육과 빠른 공부 속도를 못 좇아가서 정말 큰 자괴감을 느꼈습니다.
                        주변 사람들은 다 하는데 왜 나는 못하는가?라는 질문을 정말 많이 던졌고 시간이 지나서야 깨달은 것은
                        다른 사람과 나를 비교하지말고, 내 스타일을 찾아 공부하는 연습을 해보는 것 뿐이었습니다.

                        다른분들도 완전 처음 배우시는 분들도 계시겠지만, 어느정도 공부를 하고 오신 분이라던지
                        개발에 참여했다가 장시간 휴식 후 다시 돌아오신 분들 등등 배움의 환경이나 조건이 다를 겁니다.

                        제가 정답일 수 없지만, 제 글을 읽고 현재 고민을 훌훌 털어버리셨으면 좋겠네요.
                        확실한 건 Qjsdur Qkf님이 생각하시는 것만큼 자신의 가치가 낮지 않고,
                        사람마다 스타일이 다르고 방식이 달라서 이해 못할 수 있다는 걸 당연하게 생각하셨으면 좋겠네요.

                        이고잉님께서도 강의 중간중간 계속 말씀해주시지만 포기하지마시고 완주하시고 다른 방법으로도 공부해보세요.
                        그런 후 다음에 또 강의를 봐보세요. 그때되면 보는 시야가 달라지고 좀 더 이해할 수 있습니다.
                        기운내세요.
                        대화보기
                        • Qjsdur Qkf
                          프로그래밍에 '프'자도 모르는 사람입니다. 이고잉님의 강의로 공부는 하고 있습니다만

                          들어도 들어도 무슨 말인지 모르겠고... 밑에 달린 리플을 봐도 다들 무슨 말하지는 모르겠고...

                          다들 알아 듣는데 나만 모르는듯한 바보가 된 느낌이네요..

                          이런느낌이 정상인건지

                          아님 제가 진짜 이해력이 딸리는건지 혼란이 오네요.. 무엇인가를 공부하면서 남들보다 이해력이

                          떨어진다는 느낌은 받아본적이 없는데 여기에 오면 한없이 작아지고 초라해지네요
                          (특히 이고잉님만큼 쉽게 가르쳐주시는 분이 없어요 라는 댓글을 볼때마다..)

                          이렇게 동영상 강의를 봐도 모르는데 독학으로 해오신분들은 도대체 얼마나 대단한분들인건지

                          감이 안오네요.. 사람에 따라 안맞는 영역이 있다는데

                          그게 여기인건지 싶습니다.

                          북유럽이나 중국에서는 초등학교때부터 코딩교육을 시작한다는데...내가 초등학교 수준의 이해력도 안되는건가

                          라는 느낌도 들고...

                          인터넷상에 리플달거나 개인적인 이야기를 해본적이 없는데 첫강의부터 지금 라이브러리까지 오는순간

                          느꼇던 개인적인 답답함을 하소연해봤습니다.

                          죄송합니다.
                        • kamuron
                          복잡한 개념이군요
                        • 정미정
                          잘들었습니다!
                        • 김민성
                          잘들었습니다
                        • seetower
                          하다가 막혀서 소스코드 그냥 복사해서 붙이기 했는데 이런 에러 메세지가 나옵니다..뭐가 문제일까요??

                          Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\Bitnami\wampstack-5.6.29-0\apache2\htdocs\index.php on line 37
                        • 유혀누
                          잘들었습니다~~~^^
                        • 나효진
                          17/6/5 완료
                        • Seo Yun Seok Tudoistube
                          저는 폴더를 다르게 만들어서 require() 함수를 호출하는 파일의 입장에서 찾아들어가야 되네요. 감사합니다^_____^
                        • 공삼이육
                          감사합니다 꼭 비번을 매번 틀리네요 저도.. ㅜㅜ
                          대화보기
                          • 우탄
                            감사합니다~
                            방황과 문제는 내 인생의 또 다른 소스 기억하시나요~?
                          • 14번째
                            4.4.
                          • Sunho Lee
                            [Thu Mar 23 16:44:08.216077 2017] [:error] [pid 20150] [client ::1:57522] PHP Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in /Applications/mampstack-5.6.30-1/apache2/htdocs/lib/db.php on line 3, referer: http://localhost......php
                            [Thu Mar 23 16:44:08.216268 2017] [:error] [pid 20150] [client ::1:57522] PHP Warning: mysqli_select_db() expects parameter 1 to be mysqli, boolean given in /Applications/mampstack-5.6.30-1/apache2/htdocs/lib/db.php on line 4, referer: http://localhost......php
                            [Thu Mar 23 16:44:08.216291 2017] [:error] [pid 20150] [client ::1:57522] PHP Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in /Applications/mampstack-5.6.30-1/apache2/htdocs/index.php on line 5, referer: http://localhost......php
                            [Thu Mar 23 16:44:08.216309 2017] [:error] [pid 20150] [client ::1:57522] PHP Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in /Applications/mampstack-5.6.30-1/apache2/htdocs/index.php on line 21, referer: http://localhost......php

                            맥 사용환경에서.. 이것때매 한참 멍청하게 뒤졌네요
                            line 3 에러만 고쳐주니 해결

                            자신의 config.php 에 "dpw"=>"비밀번호" 비밀번호 부분을 자신의 mysql 비번으로 수정해주세요 영상만보고 하다가 이고잉님의 비번을 따라쳐버린...
                          버전 관리
                          egoing
                          현재 버전
                          선택 버전
                          graphittie 자세히 보기