선생님을 위한 프로그래밍 수업

부록 : 복습

토픽 선생님을 위한 프로그래밍 수업 > 웹 애플리케이션 만들기
지금까지 공부한 내용을 총정리하는 내용입니다. 전체 수업을 복습하는 것 보다는 압축된 본 수업을 반복학습하실 것을 권합니다.  부록 : 복습2에서는 본 내용을 다시 압축해서 20분 동안 정리한 내용이 있습니다. 적당한 수준을 선택하셔서 경제적으로 복습을 하셨으면 좋겠습니다.  

본 수업의 예제 파일은 아래의 github를 참고해주세요.

 https://github.com/codingeverybody/makewebapp/tree/master/practice1

댓글

댓글 본문
  1. 검정고무신
    마지막 $sql 변수에 담긴 첫번째 id 를 삭제 해야할것같네요, 아니면 values( NULL ,...... ) 이렇게 하던가
    저도 비전공자에 초보라 맞는 답변인지 궁금합니다. 시간이 많이 지났지만.. 해결하셨길
    대화보기
    • 이수완
      210220..
    • nkang
      오! 저도 동일한 오류가 나서 구글에 검색해서 $result 변수 행을 $result = mysqli_query($conn, $query) or die(mysqli_error($conn)); 로 고치니까 실행이 되었어요... 왜 되는지는 모르겠어요 ㅜㅜ 그러고 나서 or die( ) 부분을 지우고 저장하고 다시 실행해보니까 정상 작동되는 이상한 현상이..? 일어나는데 왜 그런지 아시는 분이 계신가요...?
      제가 참고한 사이트는 https://lunaticlobelia.tistory.com/465 여기입니다
      대화보기
      • 김민수
        db에 있는 정보를 가져올 것이 아니라면 그냥 html파일에 js를 잘 조합해서 사용하시면 될거 같은데요.
        아니면 추후 db와 연동을 할것이지만 당장은 보여주시만 하면 된다고 한다면
        <?php
        print('hello');
        ?>
        라던가 혹시 ajax로 작업을 하실 예정이라면 별도 호출할 예정인 파일을 만들어서
        (xhr.php)
        <?php
        echo('{"data":["data1","data2","data3"]}');
        ?>
        라는 식으로 만들어서 html파일에서 ajax통신으로 xhr.php를 비동기 혹은 동기로 호출하고, 그 결과를
        let xhr = new XMLHttpRequest();
        xhr.open("GET", "xhr.php", "true");
        xhr.send();
        //true는 비동기방식, false는 동기방식 차이는 비동기는 응답결과에 상관없이 밑에 코드가 계속 실행이 되지만,
        //동기는 xhr.php의 데이터가 와야지 밑에가 실행되요.
        xhr.onreadystatechange=()=>{
        if(xhr.readyState === 4 && xhr.status === 200) {
        alert("가져온 데이터의 0번째는 " + JSON.parse(xhr.responseText).data[0] + "입니다.");
        } else {
        alert("가져온 데이터가 없어요.");
        }
        };
        이게 ajax를 이용한 동적 표현이고, xhr.php 파일 대신 db에 접속해서 데이터를 자료구조로 응답해주는 파일을 만들어서 관리하기 편하게 하는 방법을 사용하시면 좋을거 같네요.
        보통 html 코드에 다 박아서 사용하기보단, 일차적으로 디자인 할때는 코드로 박아놓고, 그런뒤 ajax로 응답받은 데이터를 사용하여 웹화면을 완성시키는 방법도 있으니, 좀 더 배우시면 유연한 표현이 가능하실겁니다.
        대화보기
        • WYEONG
          안녕하세요. 복습 3강 실습을 하다가 에러가 났는데, 다른 사람과 비슷한 에러인 것 같습니다.

          mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in C:\Bitnami\wampstack-7.3.16-2\apache2\htdocs\practice1\index.php on line 6

          라는 에러가 났는데,

          while문으로 시작을 합니다.

          댓글에 유사한 에러로 password값을 NULL값으로 설정을 해도 해결이 되지 않습니다...
          -----------------------------------------------------------------------------------------------------------------
          +추가로 line 6 에러 말고도

          Notice: Undefined index: id in C:\Bitnami\wampstack-7.3.16-2\apache2\htdocs\practice1\index.php on line 9

          Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in C:\Bitnami\wampstack-7.3.16-2\apache2\htdocs\practice1\index.php on line 13

          라는 에러가 있구요.

          line 9는 $id = $_GET['id']; 로 시작되고,

          line 13은 $row = mysqli_fetch_assoc($result); 으로 시작이 됩니다.

          답변해주시면 감사하겠습니다!!! 너무 궁금합니다 ㅜㅜㅜ
        • 산노을
          danke scheon!
        • 지아아빠
          process.php
          <?php
          // 사용자가 보낸 post 데이터를 배열로 받는다.
          // test를 보내면 출력물은 Array ( [title] => test [author] => test [description] => test )

          // 데이터베이스 접속
          require_once('./conn.php');
          // 저자가 user 테이블에 존재하는지 여부를 체크
          $author = mysqli_real_escape_string($conn, $_POST['author']);
          $password = mysqli_real_escape_string($conn, $_POST['password']);
          // $sql = "SELECT * FROM `user` WHERE `name` = '".$author."'";
          $sql = "SELECT * FROM `user` WHERE `name` = '{$author}'";
          // echo $sql;
          $result = mysqli_query($conn, $sql);
          // var_dump($result->num_rows);
          if($result->num_rows > 0){
          // 존재한다면 user.id을 알아낸다.
          $row = mysqli_fetch_assoc($result);
          $user_id = $row['id'];
          } else {
          // 존재하지 않는다면 저자를 user 추가 후 id를 알아낸다.
          $sql="INSERT INTO user (id, name, password) VALUES(NULL, '{$author}', '{$password}');";
          $result = mysqli_query($conn, $sql);
          $user_id = mysqli_insert_id($conn);
          }
          // 제목, 저자, 본문 등을 topic 테이블에 추가
          $title = mysqli_real_escape_string($conn, $_POST['title']);
          $description = mysqli_real_escape_string($conn, $_POST['description']);
          $sql = "INSERT INTO `topic` (`id`, `title`, `description`, `author`, `created`) VALUES (NULL, '{$title}', '{$description}', '{$user_id}', now())";
          mysqli_query($conn, $sql);
          // 사용자를 index.php로 이동
          header('Location: http://localhost......hp');

          ?>

          코드 한줄 더 입력햇더니 정상으로 진행됩니다.
        • 킵고잉
          웹페이지 본문 내용을 db에서 가져오는게 아니라 별도 php파일을 만들어서 보여주고 싶은데.. 아시는분 알려주시면 감사하겠습니다!
        • Undefined index: author
          phpmyadmin에서 password값을 기본값없음에서 NULL로 바꿨는데도 process.php에서 author 값을 못가져오네요.. 해결방법 알고계시면 알려주시면 감사하겠습니다
          대화보기
          • Undefined index: author
            phpmyadmin에서 password값을 기본값없음에서 NULL로 바꿨는데도 process.php에서 author 값을 못가져오네요.. 해결방법 알고계시면 알려주시면 감사하겠습니다
          • 셜리
            완료!
          • 답답맨
            정리 8번 데이터 베이스 안에 정보를 삽입하는 부분(25:49) 에서 description을 입력했지만 자꾸
            Notice: Undefined index: description in /Applications/mampstack-5.4.40-0/apache2/htdocs/practice/process.php on line 22

            Notice: Undefined variable: user_id in /Applications/mampstack-5.4.40-0/apache2/htdocs/practice/process.php on line 26
            INSERT INTO `topic` (`id`, `title`, `description`, `author`, `created`) VALUES ('1','','', now());

            이문구가 뜨네요.
            혹시 뭐가 문제인지 알수있을까요?
            코딩은 이렇게 했습니다.

            <?php
            print_r($_POST);

            //데이터베이스 접속
            $conn = mysqli_connect('localhost','root','901108');
            mysqli_select_db($conn,'opentutorials2');

            //저자가 유저 테이블에 존재하는지 여부 체크
            $author = mysqli_real_escape_string($conn, $_POST['author']);
            $sql = "SELECT * FROM `user` WHERE `name` ='{$author}'";
            $result = mysqli_query($conn, $sql);

            if ($result->num_rows>0) {
            //존재한다면 유저의 아이디 값을 알아내면 된다.
            $row=mysqli_fetch_assoc($result);
            $user_id= $row['id'];
            }else {
            //존재하지 않는다면 저자를 유저 테이블에 추가해야한다. 추가후 아이디를 알아낸다.

            }
            $title = mysqli_real_escape_string($conn, $_POST['title']);
            $description = mysqli_real_escape_string($conn, $_POST['description']);
            $sql = "INSERT INTO
            `topic`
            (`id`, `title`, `description`, `author`, `created`)
            VALUES ('{$title}','{$description}','{$user_id}',
            now());";
            echo $sql;
            //제목 저자 본문등을 토픽 테이블에 추가한다.

            ?>
          • jongsuns
            새로운 author로 전송하면 $user_id 가 계속 0인 문제를 해결을 못하겠네요.
            user table에서 password NULL 허용해주고 스크립트에서 password value ''를 넣어줘도 안됩니다.
          • 살길바라냐
            Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\Bitnami\wampstack-5.6.37-2\apache2\htdocs\practice1\index.php on line 60

            Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\Bitnami\wampstack-5.6.37-2\apache2\htdocs\practice1\index.php on line 64

            60 ->> $id = mysqli_real_escape_string($_GET['id']);
            64->> $row = mysqli_fetch_assoc($result);

            이거 해결방법 아시는 분 없나요?
          • 신명진
            저도 이걸로 고생좀 했는데요.
            mysql 에 password 값이 NULL 로 셋팅이 되어 있지 않아서 입니다.
            쿼리문 작성할 때 password 값을 넣어 주던지, 아니면 mysql 에서 password 를 NULL 로 지정해 주면 됩니다.

            지금쯤 이미 해결 하셨겠네요 ㅎㅎ

            혹시 다른분 고생하고 계시다면 참고하시기 바랍니다.
            대화보기
            • 제갈량
              phpMyAdmin을 사용하시려면
              phpMyAdmin 공식 홈페이지에 들어가셔서
              phpMyAdmin을 다운을 받으시면 압축 파일로 되어 있습니다.
              압축을 풀어내고, Bitnami가 깔린 폴더에 htdocs폴더 안에
              압축을 풀어낸 phpMyAdmin을 옮겨 놓습니다.
              주소창에 localhost/phpMyAdmin/index.php 치시면
              (단, 주소창에 입력을 하실 때 "M", "P"가 대문자여야 합니다.)
              사용자 이름과 비밀번호를 입력하시면 영상에서와 같은 페이지가 뜨게 됩니다.

              아래 주소는 phpMyAdmin공식 홈페이지입니다.
              https://www.phpmyadmin.net/
            • marion
              정주행 후 계속 복습중입니다.

              한가지 궁금한게 있어서 질문드립니다.
              게시판을 1개 만드는 건 이제 잘 따라하는데

              만약,

              게시판이 여러개일때 (게시판 1, 게시판 2, 게시판 3..)
              해당 게시판(게시판 1, 게시판 2, 게시판 3,)에 모두 write.php를 만들진 않을꺼라 생각합니다.
              그렇다면 데이터를 불러올때 게시판의 전체 목록을 불러와서 클릭시 해당 게시판을 변수로 넣을 수 있을거라 생각하는데... 그렇게 되면 게시판이 100개여도 쓰기와 수정등 해당 게시판에서만 사용해야하는 기능을 이용할 수 있을 것 같습니다. 혹시 게시판(게시판 내용이아님)전체 목록을 불러오는 sql문과 그걸 변수로 이용하여 쓰기와 수정등을 만드는 방법을 알 수 있을까요?


              <?php
              $conn = mysqli_connect('localhost', 'root', '111111');
              mysqli_select_db($conn, 'Opentutorials');
              $sql="SELECT * FROM `topic`"
              $result = mysqli_query($conn,$sql);
              ?>

              제가 강의 내용을 이해못해서 그런것인지 궁금하네요 ㅎㅎ
            • 알려주세요 ㅠㅠ
              phpmyadmin에서 edit inline으로 sql문을 수정했는데요. 다시 리로드하면 수정한게 저장이안되고 원래 SQL문인SELECT * FROM `topid`으로 바껴집니다.;; 어떻게 해결해야할지 모르겠네요 ㅠㅠ
              대화보기
              • 신동동
                궁금한게 있습니다 phpmyadmin에서 테이블 조인 시키는건 가능한데 수정하고 새로고침하면 원래대로 돌아옵니다 이유는 뭐인지 알 수 있을까요>??
              • 냥냥
                안녕하세요 정리6 영상에서 버튼에 궁금한 게 있습니다.
                화이트가 기본이고 블랙 버튼을 누르면 배경이 블랙으로 변하는 것까지는 되는데
                다른 페이지로 이동하니 자동을 화이트로 돌아가네요.
                (예: about Javascript 페이지에서 블랙 버튼 눌러 검은 배경화면 적용 -> Variables 페이지로 이동하면 화이트로 돌아옴)
                한 번 버튼을 누르면 다른 페이지에서도 계속 동일하게 적용되어 있어야할 것 같은데
                이 부분은 어떻게 해야할까요?
              • 이상윤
                강의 감사합니다.
                픽셀 px 대신에 15% 20% 와 같이 퍼센트를 줘도 되네요 ㅎㅎ 감사합니다.
              • 바실로마첸코
                이거는 복습이라기보단 새로운 강의 같네요 근데 너무길다능 ㅠㅠ
              • hswangel
                egoing님!
                정말 감사합니다.

                정주행 하긴 했는데
                역시나 뭔가 엄청 하긴 한 느낌인데
                명확하게 '이거다!'라고 말하기 어려운 기분!

                이런 마음과 기분까지 고려하셔서
                이렇게 복습 강의까지 올려주시니 그저 감사할 따름입니다.
                정말 감사합니다.

                egoing님!
                항상 건강하시고
                날마다 행복하세요~ ^^
              • 서성진
                2번 완주했습니다.
                다만,, ㅠㅠ 어렵네요.
                그래도 이렇게 복습까지 할 수 있어서 정말 좋습니다.
                어떻게 해야 이렇게까지 친절하실 수 있는건가요?
                그저 감읍할 따름입니다.
              • 푸른하늘
                감사합니다
              • 박인호
                12-02
                수강완료.
                다시 한 번 정리가 됐습니다. 감사합니다.
              • Gweonsu Kim
                user table 추가가 되지 않는 현상에 대한 글입니다.

                밑에 Sara 님과 같은 현상을 겪었습니다.

                $sql = "INSERT INTO `user` (`id`, `name`,`password`) VALUES (NULL, '$author','000')";

                버전 차이인 것인지는 확실치 않습니다만, 위 구문과 같이 password 란을 채워 넣으면 해결이 되더군요.
              • 유상원
                2017-11-11 완료!
              • Sara
                user 테이블에 없는 user가 글을 등록하면 user테이블에 등록되는 코드가 작동을 안하네요ㅜㅜ
                $sql = "INSERT INTO user (id, name) VALUES(NULL, '{$author}');";
                는 뜨는거 확인했는데

                안돼서 github의 코드를 그대로 사용해도
                user가 등록되지는 않고 topic에 author가 0이고 이름 없이 토픽에 글만 등록됩니다.

                더 확인해보니 $result가 false
                $user_id가 0으로 받아져서
                topic 테이블에 id값은 0이고 author는 빈칸으로 글이 등록되네요ㅜㅜ

                저랑 같은 상황 겪으신 분 계신가요 ㅜㅠ
              • SanFrancisco
                복습강의까지 감사드려요 ㅎㅎ 강의를 들으니까 지금까지 배웠던 내용들이 더 잘 머리에 박히네요 ^^
              • 스콜스
                전반적인 웹애플레이션 동작 방법을 배운거 같아요. 양질의 강의 감사드립니다.
              • Eastone
                같은 오류때문에 헤매다가 방법을 찾았네요
                $sql = "select * from 'topic'"; 에서 'topic'을 작은 따옴표가 아니라
                물결표 위에 있는 그레이브 엑센트 바꿔주세요 `topic` 아니면 그냥 topic으로 해도 되더군요
                대화보기
                • svastica
                  잘 들었어요. 감사합니다~~
                • YeonHoon Jeong
                  topic 테이블에 값이 없는 것 같은데요?
                  혹시 topic 테이블만 만드시고 컬럼은 삽입하셨는지요?
                  컬럼 삽입을 하지 않으셨다면, 테이블 내부에 값이 없어서 다음과 같은 오류메시지가 나타나는 것 같습니다.
                  대화보기
                  • webmario
                    수고하셨습니다~!!! 감사합니다!
                  • 카라멜팝콘
                    수고 많으셨습니다!
                  • 피피
                    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\Bitnami\wampstack-5.6.31-0\apache2\htdocs\practice1\aa.php on line 6

                    저도 이 오류로 진행이 안되고 있어요. 2번째 영상과 똑같이 하고 있는데도 이 오류가 나서 며칠째 머물러있네요 ㅜ
                    제가 적은 코드는 이렇습니다. 라인6은 $row = mysqli_fetch_assoc($result); 부분이에요.

                    <?php
                    $conn = mysqli_connect('localhost','root','111111');
                    mysqli_select_db($conn,'opentutorials2');
                    $sql = "select * from 'topic'";
                    $result = mysqli_query($conn,$sql);
                    $row = mysqli_fetch_assoc($result);
                    print_r($row);

                    ?>
                    대화보기
                    • Jaehyun Kim
                      감사합니다!^^
                    • GoldPenguin
                      완료했습니다.
                    • Baekkyu Han
                      본 요약본 보다는 전체를 보면서 복습 실시.
                    • 마건
                      이제는 가볍게 시간날때마다 힐링한다는 생각으로 부록편을 시청하겠습니다.
                    • 한종운
                      복습 길이도 만만치 않네요.
                      준비, 제공에 감사!
                    • nevertoolate
                      오매~~~ 내 컴에 이런 php admin이 있는 줄 몰랐네요.
                      마치 보석이 숨겨져 있었던 것 같아요. 캬~~ 복습 하길 잘 했다.
                    • Kisoo Ahn
                      이전과는 좀더 근대적인 방법으로 복습 잘했습니다.
                      요약정리 감사드립니다.
                    • sheis
                      잘 봤습니다^^
                    • Kang Hokyung
                      질문을 계속 하려니 언제나 염치없는 마음입니다.
                      다시 보면서 만들고 싶은 것을 만들기 시작했는데, 첫 단계에서 막히고 있습니다.

                      위 두번째 동영상 말미에 가르쳐 주신 db 에서 원하는 필드값을 하나씩 화면에 호출하는 것을 실습까지 마쳤습니다.
                      <?php
                      $sql = "SELECT * FROM category";
                      $result = mysqli_query($conn, $sql);
                      while($row = mysqli_fetch_assoc($result)){
                      echo $row['category'].'<br />';
                      }
                      ?>
                      이 부분입니다.

                      제가 하고 싶은 것은 php로 sql db 에서 읽어 낸 특정 필드의 모든 값을 (약 11개) html 의 select tag 의 옵션에 할당하고 싶은데, 어떻게 해야 할지 아무리 검색해 봐도 모르겠습니다.
                      php 반복문을 통해 한 반복에서 하나씩 리턴되는 결과를 select 의 option 으로 각각 지정하려면 php 의 반복문과 html tag 의 코드가 번갈아 섞여 버리게 되고 그렇게 되면 작동하지 않습니다.

                      이고잉님 이메일을 받으며 언제나 '무지 바쁘겠다' 고 생각하면서 더 바쁘게 하는 것 같습니다.
                    • Kuon
                      phpmyadmin에 들어가질 못해서 비트나미를 재설치 했더니 들어는 가지는데 생성부분이 막혀서 결국 실습은 못했습니다. 오류 해결되는대로 실습도 하고 싶네요
                    • JUNY
                      완료!
                    • Seonwu Kim
                      음, 이것도 차차 해보아야 겠습니다.
                    • 스타일C
                      복습합니다 .