웹 애플리케이션 만들기

MySQL 실습

MySQL 실습 1 

실습환경으로 codeanywhere를 쓰고 계신 분은 아래 영상의 13:30 즈음의 영상의 코드를 다음와 같이 바꿔서 사용하시면 됩니다. 비밀번호를 지정하지 않으면 됩니다. $conn = mysqli_connect('localhost', 'root', '');

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

Sound of coding

sound of coding 전체 보기 

댓글

댓글 본문
  1. pmxsg
    2022.01.05
  2. 악당이기자
    감사합니다. Sanso Park님.
    덕분에 생활코딩 Facebook 그룹에 문의글 남겼습니다. 검토 대기 중이고요.

    질문글 작성 후 어느 블로그에서 문제①에 대한 해결방법으로 '브라우저 인터넷 사용기록 삭제' 방법을 만났습니다. 의문은 남지만 일단은 해당 문제를 해결할 수 있었습니다.

    문제②에 대한 해결은 생활코딩 Facebook그룹에서 도움받을 수 있기를 기대해 봅니다.
    대화보기
    • Sansol Park
      https://www.facebook.com......ody 생활코딩 페이스북에 질문을 남겨주시면 다른 분들이 도움을 주실거에요! :)
      대화보기
      • 악당이기자
        문제 ① : VS code에서 index.php에 연동된 style.css 를 수정해도 index.php에 바로 반영이 되지 않습니다.

        문제 ② VS code alert : Can not validate since a PHP installation could not be found. Use the setting 'php.validate.executablePath' to configure the PHP executable. [PHP설치를 찾을 수 없어 유효하지 않습니다. PHP 실행될 수 있도록 환경설정을 하기 위해 'php.validate.executablePath' 를 설정하세요.]

        ①의 원인이 ②라고 생각해 VS code 홈페이지 안내에 따라 Mac OS에 해당하는 설정을 아래와 같이 시도했습니다.
        "settingsSync.ignoredSettings": [
        "-php.validate.executablePath": "/Applications/mampstack-8.1.1-0/php"
        ]

        하지만 문제가 해결되지 않네요. 블로그, 유튜브에서도 해결법을 찾지 못했습니다. 혹시 해결 방법을 아는 분 계시나요?
      • 검정고무신
        혹시 mysql 에 접속 하신후에 copy & paste 해 보셨나요??
        저도 계속 에러 뜨다가 혹시나 하고 mysql 접속 후에 해보니
        성공했습니다.
        대화보기
        • 안제경
          css를 알려주신 데로 페딩 0을 했는데도 적용이 안되서 아예 복사 붙여 넣기 했는데도 안되요 왜그런걸까요?
        • 안제경
          Use of undefined constant 비번 - assumed '비번' (this will throw an Error in a future version of PHP) in C:\Bitnami\wampstack-7.4.16-3\apache2\htdocs\index.php on line 2
          이라 뜨던데 이건 뭔가요?
        • heyri
          210616
        • 목담과
          mysql 따로 설치 한게 있어서, $conn = mysqli_connect("localhost", "root", "111111"); 만으로 하니 기존 mysql 서버로 들어가서 database 이름을 못찾아서 오류를 뿜내요.(Fatal error: Uncaught TypeError: mysqli_fetch_assoc(): Argument #1 ($result) must be of type mysqli_result) 한참 해맸는데 저같은분 계시다면 참고하셔요. bitnami stack manager tool 실행하셔서 manage servers-> mysql ->configure 들어가시면 포트나옵니다. 저같은 경우 3307이였는데 (기존껀 3306) $conn = mysqli_connect("localhost:3307", "root", "111111"); 이런식으로 변경해주니 정상 작동합니다.
        • James Hanjoo Park
          감사합니다...쉽지않은 수업이었습니다.
        • coding_prince
          감사합니다.
        • 늦은나이가아님
          2020.12.14 감사합니다 후아
        • 박병진
          드디어 성공했다!! HTML을 MYSQL로 데이터 베이스화 해서 웹페이지에 출력했다! 3일동안 고생했는데!
        • 사랑우주인
          진짜 진짜 진짜 감사합니다!!!! 그걸로 1시간 삽질했는데 전혀 SHIFT F5 가 해결책일 줄 꿈에도 몰랐습니다.
          대화보기
          • 안다민
            Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in 두번째 강의 에러 해결하신 분 있나요.. 멕 기준이고 찾아봐도 너무 안 나오네요.
          • 10/10 mysql 넘 어려버 ㄷ
          • 박성수
            2020.10.08
          • 허우룩
            2020.09.15
          • 이상원
            sql 문만 바꾸면 되지않나요?
            대화보기
            • 김재령
              혹시 데이터베이스에서 삭제하는방법 알려주실 능력자분 계시나요?
            • HyeonHui Jeong
              5/16
            • 열심히사는사람
              와 이번편 진짜 어렵네요 나중에 다시한번 봐야할것 같네요 오류도 많이 뜨기도하고
            • 산노을
              thank you!!!!!!!!!!!!!!!!!!
            • 와...따라오긴 했지만 이런 간단한 기능을 표현하는데도 이렇게 어렵다는거 배웠네요....
            • mong
              github이용해서 htdocs를 저장?하시는 분들,
              실습2번하실때에 mysqli_connect()에서 비번같은거 코드내에 있게 하기 싫으신분들은

              include(".. /outside-webroot/db_settings.php");
              $conn = mysqli_connect('localhost',$db_user,$db_pass);
              unset($db_user,$db_pass);

              이런식으로 하시면 돼요.
              htdocs위의 경로로 가셔서 outside-webroot폴더 만드시고 그 하위에 db_settings.php만든 뒤에
              <?php
              $db_user = 'root';
              $db_pass = '나의비번';
              ?>
              이렇게 하시면 돼요.


              참고한 사이트 : https://cnpnote.tistory.com......%8C
            • ping9oo
              선생님 마지막에 process.php에서요

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

              이 부분에서 계속 오류가 나서 계속 틀린 곳을 찾아봤는데, 틀린곳이 없었어요. 한시간째 여기서 헤메고 있어서
              선생님 코드 복사해서 붙혀넣기를 했는데 복사 붙혀넣기를 해도 똑같이

              Parse error: syntax error, unexpected '$sql' (T_VARIABLE) in C:\Bitnami\wampstack-7.3.13-0\apache2\htdocs\process.php on line 4

              이렇게 오류가 나는데 이건 뭐가 문제인건가요ㅜ 도저히 알수가 없네요ㅜ
            • 태양의마태차
              mysqli_connect 하실때 각종 에러 뜨시는 분들 mysql 포트번호 뭘로 설정했는지 기억하시나요?
              mysqli로 접속하려고 할때 디폴트 포트가 3306으로 설정 되어 있더라구요. 저는 mysql 포트를 8080으로 설정 해놨는데
              자꾸 3306으로 접속하려고 해서 엄청난 삽질을 하다가
              $conn = mysqli_connect("localhost:8080","root", "password");
              이런식으로 해서 문제를 해결했습니다. 고통에 빠져계신분들 참고하세요.
            • 아르하트
              감사합니다^^.
            • myjin
              완료!!
            • 엄청잘될꺼야
              감사합니다. 완료
            • 로토스
              저는 mysql 워크벤치를 쓰면서 따로 서버를 쓰고있는데 혹시 비트나미 sql 서버말고 접속을 어떻게하나요???? 절대경로를 부여해야하나요?
            • 들국화
              감사합니다 잘봤습니다
            • 링도브
              바꾼 css가 바로 적용이 안된다면
              브라우저 캐시의 문제입니다.

              그냥 새로고침이 아니라 shift + f5로 새로고침을 하면 적용 됩니다.
            • 고딩
              자꾸 2번째 줄에서 오류있다고 뜨네요ㅜㅜ
              저는 iis로 하고있습니다

              PHP Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in D:\kimjihoon\iis\html\php\index.php:2
              Stack trace:
              #0 {main}
              thrown in D:\kimjihoon\iis\html\php\index.php on line 2

              1 <?php
              2 $conn = mysqli_connect("localhost","root","*******");
              3 mysqli_select_db($conn,"opentutorials");
              4 $result = mysqli_query($conn,"SELECT * FROM topic");
              5 ?>
            • 셜리
              정말 어려웠네요.. 익숙치 않아서 이전 수업 왔다갔다...암튼 완료했습니다!
            • 민턴쟁이
              codeanywhere 에서 시간이 좀 지나면 제한걸려서 turn off 되는데 유료로 업 해야 하는지요?
            • 민턴쟁이
              codeanywhere로 mysql의 topic데이터베이스 만들고 실습하는 중인데
              index.php파일을 리로드 하면 아래와 같은 메세지만 뜨네요 ㅜㅜ
              도와 주세요

              Warning: mysqli_connect(): (HY000/2002): ��� ��ǻ�Ϳ��� ���� �ź�����Ƿ� ������� ���߽��ϴ�. in C:\Bitnami\wampstack-5.6.38-1\apache2\htdocs\php_mysql\index.php on line 2

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

              Fatal error: Call to undefined function mysqli_qyery() in C:\Bitnami\wampstack-5.6.38-1\apache2\htdocs\php_mysql\index.php on line 4


              아래는 아톰에서의 .php입니다.
              <?php
              $conn = mysqli_connect('localhost', 'root', '');
              mysqli_select_db($conn, "opentutorials");
              $result = mysqli_qyery($conn,"SELECT * FROM topic");
              $row = mysqli_fetch_assoc($result);
              echo $row['id'];
              ?>
              <!DOCTYPE html>
              <html>
              <head>
              <meta charset="utf-8">
              <link rel="stylesheet" type="text/css" href="http://localhost/php_mysql/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/php_mysql/index.php">JavaScript</a></h1>
              </header>
              <nav>
              <ol>
              <?php
              echo file_get_contents("list.txt");
              ?>
              </ 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'" />
              </div>
              <article>
              <?php
              if( empty($_GET['id']) == false ) {
              echo file_get_contents($_GET['id'].".txt");
              }
              ?>
              </article>
              </body>
              </html>
            • 정후이
              실습4에서 긴 본문의 내용을 오류없이 전송하기 위해 POST방식을 사용할 때,
              3.html 파일에서 method="POST"
              그리고 3.php파일에서 각각 $_POST['title'] , $_POST['description']으로 바꾸시는 것을 보여주셨는데요
              3.php 파일에서 포스트 형식을 취하게 되면
              Notice: Undefined index: title in C:\Bitnami\wampstack-7.1.19-1\apache2\htdocs\php\3.php on line 2
              Notice: Undefined index: description in C:\Bitnami\wampstack-7.1.19-1\apache2\htdocs\php\3.php on line 4
              이러한 오류 메세지가 뜹니다.

              저의 경우에는 3.html파일에서 포스트형식을 적고 3.php파일에서 겟방식을 쓸 때 본문의 내용이
              에러가 없이 뜨는데요.
              이것은 왜 그런 건가요??
            • 임재욱
              정말 감사합니다!
              대화보기
              • 켈리
                index.php 파일에 있는 두번째줄
                $conn = mysqli_connect("localhost", "root", 111111);


                index.php의 2번째줄에 서버 암호가 11111로 설정되어 있지 않으시다면,
                서버에 접속되지 않으므로 본문내용을 출력해주지 않습니다.
                사용자가 설정한 비밀번호로 바꾸시고 저장하시고 시도해보시기 바랍니다.
                서버에 접속을 할수 없으므로 서버에 저장된 정보를 가져올수 없기 때문입니다.
                대화보기
                • 코딩해보자
                  MySQL 실습3을 진행하는데 article이 데이터베이스와 연동이 되어있는거 같습니다. 수업을 순차적으로 진행하였는데 article은

                  <article>
                  <?php
                  if(empty($_GET['id'])==false){
                  echo file_get_contents($_GET['id'].".txt");
                  }
                  ?>
                  </article>

                  인 상태로 남아있습니다. 혹시 제가 수업을 놓친거라면 어느 수업을 놓친지 알려주실 수 있을까요? 정말 열심히 찾아보았는데 안보이네요. 감사합니다.


                  제가 동영상을 마저 안보고 너무 성급하게 생각했네요..실습3 영상에서 후에 수정하시는 내용 확인했습니다!
                  혹시 저같이 성질 급한 사람들 있을까봐 댓글은 남겨두겠습니다.
                • alich
                  감사합니다!!
                • 제갈량
                  WEB3 - PHP & MySQL
                  배우고 하는 것이기 떄문에 공부하는데 수월하게 했네요.
                  그래도 어렵기는 마찬가지 ㅋㅋㅋ;;;
                  많은 도움이 되었습니다 ^^
                • Kocaine
                  감사합니다. 덕분에 에러 해결했습니다.
                  대화보기
                  • 점에 대한 궁금증
                    안녕하세요
                    '".$_POST['description']."', '".$_POST['author']."' 의 경우
                    따옴표와 쌍따옴표는 이해를 한거 같아요
                    그런데 두가지 질문이 있습니다

                    첫번째는
                    .(점)으로 구지 $_POST 를 감싸주는 이유가 궁금합니다
                    문자열을 연결하고자 점을 쓰지 않아도 "(쌍따옴)과 '(따옴)으로 묶여 sql문으로 문자처리가 되는게 아닌가요?
                    $_POST[ ]가 따옴표들로 묶인 후
                    쉼표로 나열되는데
                    점이 무슨 의미가 있는건지 잘 모르겠습니다

                    두번째로
                    앞이나 뒤 둘중 한 곳이 아닌 양쪽에 점으로 감싸주는 이유도 궁금합니다
                    desctription 부분의 뒤에 점을 붙였는데
                    author 부분 앞에 왜 점을 또다시 붙여야 하나요??
                    (혹시 description과 author의 문자열을 이어주는 역할로 점의 쓰임새를 이해한 것이 틀린건가요??)

                    구글링의 힘으로도 모르겠어서 질문드립니다
                    문법에 너무 집착하지말아야하나요 ㅠㅠ?
                  • egoing
                    vim으로 열어보시면 잘 열릴거에요.
                    http://www.vim.org/
                    대화보기
                    • 아톰 에러
                      안녕하세요 아톰으로 error.log 파일이 용량문제로 열리지가 않습니다
                      Atom will be unresponsive during the loading of very large files.
                      라는 내용입니다 (100메가 조금 넘습니다)

                      구글링해보니 깃허브라는 사이트에 같은문제 언급된 해결방법이 있긴 한데
                      영어로 된 내용이 용어까지 생소하여 해석을 해도 어떻게 고쳐야할지 전혀 모르겠습니다

                      이건 어떻게 고쳐야하는건가요???
                    • 코딩잘하고싶어요 ㅎ
                      제가....해냈다는 것이... 믿겨지지가.... 않습니다....

                      제가 처음 프로그래밍을 접했을 때 저에게 있어서 데이터베이스는 높은 벽과도 같은 존재였습니다.

                      지금도 데이터베이스라는 것이 조금 어렵고 추상적으로 느껴지긴 하지만... 벽을 허물고 나니 좀 덜 추상적으로 느껴지고 덜 어렵게 느껴지는 감이 없지 않아 있는 듯 합니다... ㅎㅎㅎ..

                      이제 제 최종목표는 이 내용을 응용해서 수정, 삭제기능을 구현하는 것이겠군요.
                      (이전에는 데이터베이스를 쓰지 않고 파일, php, html을 이용해서 구현했더니 확실히 난이도가... 있더라고요.. 데이터베이스로 한다고 해서 더 쉬워질거란 보장은 없겠지만 말이죠...ㅠㅠ)

                      아무튼, 감사합니다. ㅎㅎㅎ
                    • Midoriya
                      Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in C:\Bitnami wamp\apache2\htdocs\index.php on line 2
                      발생 시
                      $conn = mysqli_connect("localhost","root",그리고 처음에 Enter password에서 입력했던 비밀번호 예를들어 1111이라고 하면 "1111");
                      이렇게 코드를 수정해주시면 됩니다.
                      대화보기
                      • <?php
                        $conn = mysqli_connect("localhost", "root", "youym1963");
                        mysqli_select_db($conn, 'opentutorials');
                        $result =mysqli_query($conn, "SELECT * FROM topic");
                        ?>
                        질문이 있습니다. 여기서 각각의 구문의 의미가 뭔가요? 응용해보려하는데 저 구문들의 역할을 제대로 모르겠네요.
                      버전 관리
                      egoing
                      현재 버전
                      선택 버전
                      graphittie 자세히 보기