웹 애플리케이션 만들기

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. 강경호
    감사합니다
    170225
    컴퓨터가 후져서 그런가 자꾸 적용되는 것이 늦네요
  2. JJUN
    여기까지하고 java랑 php랑 mysql 배우고 다시 갑니다.
  3. 프로그래밍초보
    이고잉형 사랑해여 이고잉형 수고하세여 저 너무 똒똒해서 청출어람할꺼같에요. 저 나중에 회사차리면 스카웃 해드릴게여.
  4. hello world!
    소중한 강의.
    너무 감사드립니다 ㅠㅠ
  5. 빙삼
    $conn = mysqli_connect("localhost", "root", "비밀번호", "opentutorials", "8080");
    이 부분에서 포트번호인 8080을 보통 mysql가 쓰는 포트인 3306으로 바꿔서 해보는 것이 도움이 될 것 같습니다.
    대화보기
    • 빙삼
      크롬의 시크릿 창 열기로 브라우저를 띄워서 localhost를 열면 적용이 될 겁니다
      대화보기
      • helloworld
        그 반대 아닌가요..?
        대화보기
        • springstar@daum.net
          내가 직접 하면 안되구... 고잉엉아꺼 복사해서 테스트하면 잘 되구...
          미치겠네요 ㅋㅋㅋ

          고잉엉아의 잘못이겟쬬? --+
          수고하세요 ^^
        • 후이메이
          계속 warning떠서 댓글을 보면서 해결책을 찾고있었는데
          $conn = mysqli_connect('localhost','root',"비밀번호",'opentutorials','3307')
          또는 자신의 포트번호에 맞게
          $conn = mysqli_connect('localhost','root',"비밀번호",'opentutorials',8080")
          로 고치시고
          // mysqli_select_db($conn, "opentutorials");
          이부분은 지워주시면 실행이 되네요!
        • 송원근
          mysqli 의 api형식이 바뀐듯하네요.
          $conn = mysqli_connect("localhost", "root", "비밀번호", "opentutorials", "8080");
          첫줄을 이렇게 바꿔보세요. 맨뒤에 추가 된 2개는 db이름이랑 포트번호에요.
          대화보기
          • Jake
            Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in C:\Bitnami\wampstack-5.6.29-1\apache2\htdocs\mysqlphp\index1.php on line 2
            - password가 틀린것이 아닌가 싶네요.

            Warning: mysqli_select_db() expects parameter 1 to be mysqli, boolean given in C:\Bitnami\wampstack-5.6.29-1\apache2\htdocs\mysqlphp\index1.php on line 3
            - datebase 이름이 exam으로 맞게 하셨다면, double quotation mark로 변경하셔야 할듯합니다.
            Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in C:\Bitnami\wampstack-5.6.29-1\apache2\htdocs\mysqlphp\index1.php on line 4
            Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\Bitnami\wampstack-5.6.29-1\apache2\htdocs\mysqlphp\index1.php on line 5
            Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\Bitnami\wampstack-5.6.29-1\apache2\htdocs\mysqlphp\index1.php on line 10
            - 3개 모두 경우, table이 제대로 생성이 되었는지 다시 확인해보시는게 좋을 듯 합니다.
            line 5, 10 은 id의 struture의 null부분이 no로 되어 있는지 다시 확인 해보시는게 좋을 듯합니다.

            제 생각으로 error라고 생각한 부분 말씀드렸는데, 도움 되었는지 모르겠네요.
            대화보기
            • lightcircle
              $conn=mysqli_connect('localhost','root',"000000");
              mysqli_select_db($conn,'exam');
              $result=mysqli_query($conn,"SELECT*FROM topic");
              $row = mysqli_fetch_assoc($result);
              echo $row['id'];
              echo $row['title'];

              echo "<br/>";
              $row = mysqli_fetch_assoc($result);
              echo $row['id'];
              echo $row['title'];

              강좌 대로 이렇게 쳤는데,

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

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

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

              Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\Bitnami\wampstack-5.6.29-1\apache2\htdocs\mysqlphp\index1.php on line 5


              Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\Bitnami\wampstack-5.6.29-1\apache2\htdocs\mysqlphp\index1.php on line 10

              에러가 뜨네요. 어떤이유인지좀 아시는 분 있나요 ??
            • 잘보고갑니다
              저케 해보거 꼭 mvc 공부해서 코딩 하세요
              꼭요 저런 코딩 보면 좀 혈압올라요
            • 그랑로그
              완강 3일목표로 했는데, 힘드네요.^^ 좋은 강의 감사드립니다. 이제 10개 강좌 남았습니다. 아자!!
            • 응딩
              와 정말 감사합니다!!!!
              대화보기
              • 민쨩
                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 누르셔서 모든 데이터를 지운 후 새로고침 해보세요.
                      대화보기
                      • 한 가지 궁금한 점이 있습니다
                        계속해서 크롬으로 작업을 했었는데 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");
                              버전 관리
                              egoing
                              현재 버전
                              선택 버전
                              graphittie 자세히 보기