웹 애플리케이션 만들기

MySQL 실습

MySQL 실습 1 

MySQL 실습 2

MySQL 실습 3

MySQL 실습 4

MySQL 실습 5

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 * FROM topic WHERE id='.$_GET['id'];
      $result = mysqli_query($conn, $sql);
      $row = mysqli_fetch_assoc($result);
      echo '<h2>'.$row['title'].'</h2>';
      echo $row['description'];
  }
  ?>
  </article>
</body>
</html>

 write.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>
    <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
$conn = mysqli_connect("localhost", "root", 111111);
mysqli_select_db($conn, "opentutorials");
$sql = "INSERT INTO topic (title,description,author,created) VALUES('".$_POST['title']."', '".$_POST['description']."', '".$_POST['author']."', 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;
}

header{
  border-bottom:1px solid gray;
  padding:20px;
}
nav {
  border-right:1px solid gray;
  width:200px;
  height:600px;
  float:left;
}
nav ol{
  list-style:none;
  padding:0;
}
article{
  float:left;
  padding:20px;
  width:500px;
}
#control{
  float:right;
}
header img{
  float:right;
  height:100px;
}

소스코드

github

댓글

댓글 본문
작성자
비밀번호
  1. 잘보고갑니다
    저케 해보거 꼭 mvc 공부해서 코딩 하세요
    꼭요 저런 코딩 보면 좀 혈압올라요
  2. 그랑로그
    완강 3일목표로 했는데, 힘드네요.^^ 좋은 강의 감사드립니다. 이제 10개 강좌 남았습니다. 아자!!
  3. 응딩
    와 정말 감사합니다!!!!
    대화보기
    • 민쨩
      http://naver.me/xmGh29Cf

      안녕하세요!
      우선 덕분에 너무 재밌는거 배우고 있어서 감사드립니다^^

      질문이 있는데...
      Atom에서 style.css에 Nav ol이랑 Article에 패딩값, width등등 적용했는데 하나도 반영이 안되네요ㅠㅠ
      이거 왜 이런 걸까요...ㅠㅠㅠ
      저장도 되어있고 index.php에 잘 연결도 되어 있는데...ㅜㅜ
    • 문돌이
      `id`이 부분 끝에 AUTO_INCREMENT 를 사용했을 경우
      자동으로 수가 1씩 늘어나게 된다고 말씀해주셨습니다.
      이것은 그래서 각 정보를 분별하는데 분별값으로 사용된다고도 말씀해주셨구요.
      대화보기
      • 제이
        안녕하세요

        반복문을 이용해서 데이터들을 출력할때 첫번째 $row['id']에는 1이들어가고
        별도의 조치 없이 두번째 $row['id']에는 2가 들어가는 이유가 혹시 처음에
        `id` int(11) NOT NULL AUTO_INCREMENT
        이라고 선언해서 그런건가요?

        다른 언어들의 반복문에선 i = i+1 이라는 형태로 한번씩 증가시켜주었던것같아서요
        이 코드가 처음에 테이블 만들 때 빈 id 부분을 채워주는 역할만 하는게 아닌가요?

        이게 아니라면 그냥 단순히 데이터베이스를 출력하는 법칙이 그런거라고 이해하면 될까요?
      • jin100035@naver.com
        여쭤보고 싶은게 있는데

        if(empty($_GET['id']) === false ) {
        $sql = 'SELECT * FROM topic WHERE id='.$_GET['id'];
        $result = mysqli_query($conn, $sql);
        $row = mysqli_fetch_assoc($result);
        echo '<h2>'.$row['title'].'</h2>';
        echo $row['description'];

        동영상 3번에서 마지막 article 부분에 있어서 database를 적용시킬 때
        index.php부분인 홈으로 돌아가는 버튼을 누를 경우

        Notice: Undefined index: id in C:\Bitnami\wampstack-5.6.29-0\apache2\htdocs\index.php on line 36

        이러한 문구가 뜨게 됩니다.
        오류인 건가요? 원래는 저 화면에 아무것도 뜨지 않는 게 맞다고 생각하는데..자꾸 뜨게 되네요.
        뭐가 문제일까요..동영상부분에서는 저 부분을 눌러주시지 않아서...어떻게 떠야하는지 궁금해서 이렇게 올립니다.
      • 아무리 찾아도 안보였는데... 감사합니다!
        대화보기
        • 호미타
          <form action"http://localhost:8080/php/3.php" method="GET">
          여기에
          = <-요게 빠져서 그런거 같아요
          <form action="http:// ~
          대화보기
          • 수업 너무 좋아요
            3.html 에서 제출을 눌러도 3.php로 가지않고 그대로

            /3.html?title=title&description=desc

            이렇게 3.html에 머무르는데 왜 이럴까요...?

            밑에는 제 코드 전문이에요
            <!DOCTYPE html>
            <html>
            <head>
            <meta charset="utf-8">
            </head>
            <body>
            <form action"http://localhost:8080/php/3.php" method="GET">
            <p>제목 : <input type="text" name="title"></p>
            <p>본문 : <textarea name="description">
          • 행인
            브라우저에 css파일이 캐쉬 되어있는게 원인인 것 같습니다.
            간단히 Ctrl+F5 를 누르시거나.
            Ctrl+Shift+Delete 누르셔서 모든 데이터를 지운 후 새로고침 해보세요.
            대화보기
            • kkyy
              한 가지 궁금한 점이 있습니다
              계속해서 크롬으로 작업을 했었는데 index.php 작업 할 때 부터는
              style.css 에 있는 css 코드들이 제대로 적용이 안 되는거 같더라구요
              아무리 해도 안되길래 익스플로러에서는 정상적으로 적용이 되서 출력이 되구요
              왜 이런지 궁금하네요 ㅠ
            • 소라맛과자
              엄청 헤매다가.. 예제를 복사하니 뙇되네요.
              띄어쓰기도 중요한 것인가요?

              정말 하나하나 봐가며 한 3시간 넘게 본듯합니다.
              마지막으로 한번 예제 코드문 복붙하니.. 제대로 돌아가네요.

              차이를 보니. 띄어쓰기;;;

              $sql="INSERT into..
              $sql = "INSERT into...

              허무함이 ㅠㅠ
            • 멈멍
              비번의 소중함... 아래 문제 해결했습니다^^;
            • 멈멍
              안녕하세요 ㅠㅠ 비트나미 비번을 까먹어서 언인스톨하고 다시 설치했습니다.. hdocs는 그대로 폴더채 복사해서 들고왔는데..지금까지 잘 불려오던 localhost 파일들이 하나도 안불려옵니다. 403에러가 뜨구요.. 혹시 어떻게 해야하는지 알려주실 분 있나요..
            • 이성진
              수강 완료!
              좋은 강의 항상 감사 드립니다~
            • Jeonghyun Woo
              Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in C:\Bitnami\wampstack_\apache2\htdocs\index.php on line 2

              해당 에러에 대해서 새로운 해결방법 찾았습니다.

              mysqli_connect의 사용법을 찾아보니

              mysqli_connect([아이피], [아이디], [비밀번호], [DB명], [포트]);
              [출처] PHP MySQL 연결하기 (mysqli_connect / mysqli_close)|작성자 창공

              위와 같더라구요


              저는 비트나미 설치할때 포트를 8080으로 설정해놓아서 다음과 같이 입력했습니다.
              $conn = mysqli_connect("localhost", "root", "111111", "opentutorials", "8080");

              이렇게 연결하면 이 펑션에 디비선택까지 포함되서 자연스럽게 본래 스크립트에
              DB를 선택하는 펑션은 자연스럽게 생략했습니다.
              <mysqli_select_db($conn, "opentutorials"); >

              이렇게 하니까 되더라구요..

              여태껏 큰따옴표 작은따옴표 그런것 가지고만 한 두시간 씨름하다가..
              (저는 패스워드가 숫자일때는 큰타옴표, 작은따옴표, 따옴표 없이도 다 작동했습니다.)
              비트나미 지웠다가 다시도 깔아보고.. 포트번호도 바꾸고 별짓을 다하고..

              디비이름 생략하고 계속 아래같이 입력도 해보다가
              $conn = mysqli_connect("localhost", "root", "111111", "8080");

              여튼 반나절만에 해결됬네요;

              )
            • 복숭해
              ` 그레이브 액센트 - 문법적인 것이 아님을 알려주기 위해 사용하는데 컬럼의 이름, 테이블의 이름 등을 입력할 때 사용. MySQL monitor에서 다뤘음.
              ' 단 따옴표 - 문자를 입력할 때 사용. MySQL monitor에서 다뤘을 때 기준.
              " 쌍 따옴표 - 파일을 데이터베이스로 교체하는 작업(MySQL)을 mysqli(PHP에 내장 된 API)를 사용하여 구축할 때 '단 따옴표랑 사실상 차이 없음. '단 따옴표 "쌍 따옴표 중 아무거나 사용해도 무관하다고 동영상에 담겨 있습니다. 서로 다른 것을 감싸고 있다는 것을 구분해주기 위해서 단 따옴표 쌍 따옴표를 번갈아 가면서 사용해주신 것 같습니다.
            • 나홀로문도리
              아~~~ 어떻게 어떻게 해서 여기까지 잘 들었습니다!
              끝까지 가보겠습니다~~~ 좋은 강의 정말 감사해요~~~^^*
            • 박인우
              쌍따옴표와 따옴표의 차이는 무엇인가요?

              if(empty($_GET['id'])===false){
              $sql='SELECT * FROM topic WHERE id='.$_GET['id'];
              $result=mysqli_query($conn, $sql);
              $row=mysqli_fetch_assoc($result);
              echo '<h2>'.$row['title'].'</h2>';
              echo $row['description'];

              여기서는 따옴표를 하나 쌍따옴표를 하나 모두 작동합니다만

              $sql="INSERT INTO topic (title, description, author, created) VALUES('".$_POST['title']."','".$_POST['description']."','".$_POST['author']."',now())";
              echo $sql;

              여기서는 엄청나게 헷갈립니다.....

              sql문 양쪽에는 무조건 쌍따옴표라고 알고 있으면 될까요?
            • 이면
              어떤 경우에 "를 쓰고 '를 쓰는지. 그레이브 엑센트는 언제 쓰는건지 정리가 잘 안됩니다..
            • 김하나
              자꾸 오류가나서 찾다보니 깨달음 띄어쓰기의중요성!!
              $result = mysqli_query($conn,"SELECT*FROM topic")or die(mysqli_error($conn));

              SELECT*FROM topic 토픽앞에 띄어쓰기안하면 에러남 ㅠㅠ 감사합니다 이고잉님^^
            • 이병정
              비밀번호에는 "******" 쌍따옴표를 넣어야 작동합니다.^^);;
            • 블로그 검색하다가 찾았습니다
              http://blog.naver.com......004
              대화보기
              • <?php
                $conn = mysqli_connect("localhost", "root", "****");
                mysqli_select_db($conn, "open161116_MySQL");
                $result = mysqli_query($conn, "SELECT * FROM topic");
                $row = mysqli_fetch_assoc($result);
                echo $row['id'];
                echo $row['title'];

                echo '<br/>';
                ?>

                Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\Bitnami\wampstack-5.6.27-0\apache2\htdocs\161116_MySQL\index.php on line 5

                $row = mysqli_fetch_assoc($result); 여기서 어떤것이 문제인건가요......?
              • 화이팅
                mysql 비번 영어로 설정해놓으셨다면

                111111 -> '영어' (작은따옴표)로 사용해보세요.

                한참을 고생하다 되네요.
              • ㅠㅠㅠㅠ
                Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\Bitnami\wampstack-5.6.27-0\apache2\htdocs\index.php on line 5

                $row= mysqli_fetch_assoc($result);
                echo $row['id'];

                여기서 에러가나는데 수정방법좀 가르쳐주세요....
              • bnbn888@naver.com
                PHP Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\\Bitnami\\wampstack-5.6.27-0\\apache2\\htdocs\\php\\2.php on line 5

                이 에러의 해결법은 무엇인가요..?
              • 안녕겨울
                어렵네용
              • hyoone033@gmail.com
                아 점점 힘들어집니다...ㅎ
              • 강의 잘듣고 있습니다.정말 감사합니다.
                process.php를 새로 고침 했는데, 같은 데이터 한줄이 더 생기더군요.
                그래서 데이터 삭제 하는법 찾아 봤습니다.
                커멘드 창에서
                DELETE FROM 테이블명 WHERE 필드명 = '조건';

                라고 하면 삭제 됩니다.

                Ex) DELETE FROM topic WHERE id = '6';
                이렇게 하면 위에 있는 loop 가 삭제 되겠지요...?

                그런데... 커멘드 창이 아닌 코딩으로 해결할수 있는 방법이 있나요..?
                예를 들어서 댓글 올리는 창처럼 수정/ 삭제 가능한 창으로 말이죠.. 어디서 배우면 될까요?? ㅎ
              • jinlee
                이런 error가 뜨는데 어떻게 해결해야할지 도통 감이 안오네요.
                스택오버 플로우 찾았더니 set global max_allowed_packet 이런 명령어를 조정하라그래서 조정했는데도 해결이 안돼요.

                Warning: mysqli_connect(): MySQL server has gone away in C:\Bitnami\wampstack-5.6.26-2\apache2\htdocs\index.php on line 2

                Warning: mysqli_connect(): Error while reading greeting packet. PID=11124 in C:\Bitnami\wampstack-5.6.26-2\apache2\htdocs\index.php on line 2

                Warning: mysqli_connect(): (HY000/2006): MySQL server has gone away in C:\Bitnami\wampstack-5.6.26-2\apache2\htdocs\index.php on line 2

                Warning: mysqli_select_db() expects parameter 1 to be mysqli, boolean given in C:\Bitnami\wampstack-5.6.26-2\apache2\htdocs\index.php on line 3

                Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in C:\Bitnami\wampstack-5.6.26-2\apache2\htdocs\index.php on line 4
              • 맹세열
                해결되셨다니 다행이네요! 화이팅입니다~
                대화보기
                • 임지호
                  감사합니다 덕분에 문제 잘해결했습니다 ㅎㅎ 복받으세요~
                  대화보기
                  • 활화산
                    구경하고 넘어 갑니다
                  • 맹세열
                    쿼리문이 제대로 수행안된거 같은대용? 32~35번 라인 코드도 있으면 보기 편할거 같은데ㅠ 없어서 로그로만 짐작해보자면 쿼리문 쓰실때 띄워쓰기가 제대로 되었는지 한번 확인해보세요!
                    대화보기
                    • 임지호
                      Notice: Undefined index: id in C:\Bitnami\wampstack-5.6.25-0\apache2\htdocs\php\index.php on line 32

                      Notice: Undefined index: id in C:\Bitnami\wampstack-5.6.25-0\apache2\htdocs\php\index.php on line 33

                      Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\Bitnami\wampstack-5.6.25-0\apache2\htdocs\php\index.php on line 35

                      뭐가 문제일까요 ㅠㅠ
                    • 히스토
                      [에러 로그] 접속이 거절되었습니다
                      Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in C:\Bitnami\wampstack-5.6.26-2\apache2\htdocs\index.php on line 2

                      [해결법] 비밀번호를 작은 또는 큰 따음표로 묶어주세요.
                      $conn=mysqli_connect("localhost","root",123456);
                      =>
                      $conn=mysqli_connect("localhost","root","123456");
                    • Hongseon Kim
                      설치시 비밀번호에 영어소문자가 들어간 문제 해결 방법입니다.
                      cmd 실행하고

                      C:\Bitnami\wampstack-5.6.26-2\mysql\bin/mysqladmin -p -u root password 111111

                      입력하면(앞부분은 mysqladmin 파일의 주소입니다.) 비밀번호 입력창이 나옵니다.
                      거기에 기존 비밀번호 입력하면 패스워드가 111111로 변경됩니다.

                      그리고 mysql 서버를 restart 하면 제대로 작동합니다.
                    • 저도 같은 현상이 있어 비밀번호 변경없이 해결했습니다.

                      $conn = mysqli_connect('localhost','root','232323','opentutorials','3307') 으로 해보세요.

                      매게변수로 "DB이름"과 "포트번호"를 넣어 주었습니다.

                      저같은 경우는 기존 mysql이 설치되어 있어 bitnami MySQL의 경우 port가 3307로 설정되었습니다.

                      DECIMO님도 확인해보세요.
                      (포트번호는 bitnami WAMP stack managet tool에서 MySQL configure에서 확인할 수 있습니다)

                      아래 글에서 mysqli의 기본port가 3306이라면 connect시 port설정을 해주면 되겠지요...

                      잘 됐음 좋겠네요 ㅎㅎ
                      대화보기
                      • DECIMO
                        ㅠㅠ 어엉
                        저도 똑같은 현상이 나타났어요. 그래서 님 댓글보고 CMD창에서 비번도 바꾸어 봤는데요. ㅜㅜ 어엉엉 그래도 똑같은 에러가 뜨네요. 이거 어쩜 좋은지.....

                        원래의 MySQL 비밀번호가 111111이였는데 제가 232323으로 바꾸었습니다. 하지만 똑같은 에러가 뜨고 있어요

                        Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in C:\Bitnami\wampstack-5.6.26-1\apache2\htdocs\index.php on line 2

                        Warning: mysqli_select_db() expects parameter 1 to be mysqli, boolean given in C:\Bitnami\wampstack-5.6.26-1\apache2\htdocs\index.php on line 3

                        Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in C:\Bitnami\wampstack-5.6.26-1\apache2\htdocs\index.php on line 4

                        고수님들~ 이거 어떻게 해야하는걸까요??
                        대화보기
                        • egoing
                          Bitnami mysql password change로 검색 한번 해보셔요~
                          대화보기
                          • 정훈
                            선생님! 좋은 강의 항상 감사드립니다.
                            질문이 있어 댓글 올립니다.
                            제가 Bitnami 설치할 때 패스워드에 영어소문자를 포함시켜 놓아서,
                            위의 예제 실행 시에 페이지에 에러문자가 뜨는데요,
                            없앨 수 있는 방법이 있을까요?..
                            아니면 bitnami를 새로 설치해야 할까요?
                            답변 주시면 감사하겠습니다.
                          • 2016/9/23 완료!
                          • html어려워
                            OMG!!!!

                            감사합니다 1달만에 해결됬네요 엉엉 ㅠㅠ
                            대화보기
                            • gaf3119
                              세미콜론 빠진거 추가요.
                              대화보기
                              • tinybit
                                한달전에 하신 질문이신데 혹시나 해서 남겨봅니다. 저는 에러 로그파일을 한번씩 내용을 지우고 있어요. 이미 확인이 끝난 에러는 필요없으니까요. 내용은 삭제하셔도 문제없어요. 에러 로그파일이라는것 자체가 에러가 발생했을때 그 파일의 마지막에 내용을 추가하는것이니까 내용을 삭제하시면 에러가 발생했을때 다시 첫줄부터 새로운 에러내용이 추가된답니다.
                                대화보기
                                • tinybit
                                  저는 비밀번호에 ""를 붙이니까 111111이 아닌데도 잘되었어요.
                                  $conn = mysqli_connect("localhost","root","testpassword1");
                                  혹시나해서 적어둡니다.
                                  대화보기
                                  • tinybit
                                    $result = mysqli_query(SELECT * FROM topic)
                                    -> $result = mysqli_query($conn, "SELECT * FROM topic");
                                    윗쪽이 html어려워님의 소스이고 이고잉님 소스는 아래와같습니다.
                                    먼저 $conn이 빠져있고, 두번째로 sql쿼리에 ""가없네요. 한번 아래와같이 바꿔서 해보시겠어요?
                                    대화보기
                                    • html어려워
                                      네..ㅠㅠ 해보니 비번 문제는 아닌거 같구(cmd로 들어가면 됐으니까) 큰따옴표 작은따옴표 둘다 해봤는데 안되더군요..ㅠㅜ
                                      대화보기
                                      버전 관리
                                      egoing
                                      현재 버전
                                      선택 버전
                                      graphittie 자세히 보기