WEB3 - PHP & MySQL

활용 - 글생성

수업소개

mysqli API를 활용해서 MySQL에 글을 생성하는 방법을 알아봅니다.

 

 

강의

 

예제

변경사항

index.php

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>WEB</title>
  </head>
  <body>
    <h1>WEB</h1>
    <ol>
      <li>HTML</li>
    </ol>
    <a href="create.php">create</a>
    <h2>Welcome</h2>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit
  </body>
</html>

create.php

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>WEB</title>
  </head>
  <body>
    <h1>WEB</h1>
    <ol>
      <li>HTML</li>
    </ol>
    <form action="process_create.php" method="POST">
      <p><input type="text" name="title" placeholder="title"></p>
      <p><textarea name="description" placeholder="description"></textarea></p>
      <p><input type="submit"></p>
    </form>
  </body>
</html>

process_create.php

<?php
$conn = mysqli_connect(
  'localhost',
  'root',
  '111111',
  'opentutorials');
$sql = "
  INSERT INTO topic
    (title, description, created)
    VALUES(
        '{$_POST['title']}',
        '{$_POST['description']}',
        NOW()
    )
";
$result = mysqli_query($conn, $sql);
if($result === false){
  echo '저장하는 과정에서 문제가 생겼습니다. 관리자에게 문의해주세요';
  error_log(mysqli_error($conn));
} else {
  echo '성공했습니다. <a href="index.php">돌아가기</a>';
}
?>

 

댓글

댓글 본문
  1. jeisyoon
    2021.04.16 글생성 - OK
  2. hanel_
    21.2.25
  3. localhost 뒤에 :3306 혹은 :3307 을 넣어보세요. 감사합니다
    대화보기
    • kkn1125
      21.01.07.목 완료~!
    • junghuckjun2010
      페이지가 요청을 처리 할수 없다고 뜨는데요?
      어떻게 해결할수 있을까요???
      아무리 해도 같은 문구가 뜹니다..................
      제발 해결할수 있는 방안을 주세요.
    • クレヨンしんちゃん
      ㅇㄹ
    • 김남규
      아마도 NOW()의 함수가 중복되는거같은데요...
      대화보기
      • 오우승
        안된다고 하시는 덧글 많아서 예제 실행해봤는데, 문제 없이 추가됩니다.
        제가 사용한 버전은 Bitnami WAMP Stack 7.3.13-0 (php 7.3.13, mysql 8.0.18) 입니다.
      • Dale Lee
        안녕하세요. 이제 막 php와 mysql 공부를 시작한 개린이입니다.

        다름이 아니라,
        현재 MAMP로 php 7.0.33 과 MySQL 5.7.26 버전으 환경에서 예제 연습 중인데요.

        위 예제 실행 시 row 데이터값이 빈값과 함께 2개씩 생성 되어지는데 이유를 알 수 있을까요?


        | id | title | description | created |
        +----+--------+--------------+---------------------+
        | 3 | MY SQL | MT SQL is... | 2020-06-23 12:07:07 |
        | 4 | | | 2020-06-23 12:07:08 |
        +----+--------+--------------+---------------------+
      • jaehyunlee
        05/31 고3 완료
      • Lucas Trowman
        완료!
      • 안녕하세요, create.php 의 입력양식에 입력후 submit 버튼 클릭하면
        process_create.php 로 넘어가서 화면에
        성공, 실패 메세지가 나오지 않고
        process_create.php 파일 내용이 화면에
        표시 됩니다.
        무엇이 문제 일까요?
      • 지나가는 학생
        웹을 실행해봤는데 error500 나오면서 안되는데 위에 나오는 코드를 복붙했는데 실행을 하고 제가 작성한 코드는 작동되지 않는데 위에있는 코드하고 비교 하면서 찾아가는데 이유를 찾지 못하겠어요...

        $conn = mysqli_connect(
        'localhost',
        'root',
        'password',
        'test1');
        $sql = "INSERT INTO topic(
        title,description,created)
        VALUES(
        '{$_POST['title']',
        '{$_POST['description']}',
        NOW()
        )
        ";
      • 티아
        안녕하세요! 취미 프로그래머입니다.
        성공 문구 및 돌아가기까지 잘 되는데 실제로 MY SQL DB내 테이블에 자료가 저장되지 않는데요..
        왜 그런지 아시는 분 조언 부탁드립니다
      • 모범생
        아래에 경고가 뜨는 부분은
        php.ini 설정이 교육내에서 제대로 했다는 가정하에

        $conn = mysqli_connect(
        'localhost',
        'root',
        '111111',
        'opentutorials');

        여기에서 'localhost' ----> '127.0.0.1:3306' 또는 '127.0.0.1:3307'등 DB 포트를 변경해서 사용해 보시길 권장드립니다.
      • 허공
        190508 감사합니다.
      • incursio
        감사합니다
      • Hanseon Gim
        mysqli_query는 이미 정의 된 함수이고, mysqli_query(...); 는 함수를 호출(실행)하는 것으로
        같은 데이터를 가지고 함수를 두번 실행시키니 같은 값이 두번 들어갈 수밖에 없습니다^^;

        mysqli_query($conn, $sql);

        $result = mysqli_query($conn, $sql);
        대화보기
        • Hanyoul Choi
          process_create.php 이후 아래와 id 55, 56번 처럼 2개씩 동시에 DB에 insert 됩니다.
          그리고 $result 부터 주석 처리하면 하나씩 드러가구요...
          어떤부분에 문제가 있는지 한번 봐주세요...
          --------------------------------------------------------------------------------
          <?php
          $conn = mysqli_connect("192.168.105.235","root","test","opentutorials");
          $sql = "INSERT INTO topic (title, description, created) values('{$_POST['title']}','{$_POST['description']}', NOW())";
          mysqli_query($conn, $sql);

          $result = mysqli_query($conn, $sql);
          if($result === false){
          echo '저장하는 과정에서 문제가 생겼습니다. 관리자에게 문의해주세요';
          error_log(mysqli_error($conn));
          } else {
          echo '성공했습니다. <a href="index.php">돌아가기</a>';
          }
          ?>
          ---------------------------------------------------------------------------
          mysql> SELECT * FROM topic;
          +----+--------------+--------------+---------------------+-----------+
          | id | title | description | created | author_id |
          +----+--------------+--------------+---------------------+-----------+
          | 56 | create query | create query | 2018-12-24 16:14:16 | NULL |
          | 55 | create query | create query | 2018-12-24 16:14:16 | NULL |
          | 54 | aaa | aaa is ... | 2018-12-24 16:06:34 | NULL |
          | 53 | MySQL | MySQL is ... | 2018-12-24 15:59:08 | NULL |
          +----+--------------+--------------+---------------------+-----------+
          4 rows in set (0.00 sec)
        • Sungwoong Pyeon
          저도 port를 81번을 썼는데 opentutorials database가 있음에도 불구하고 비슷한 error가 나서 삭제하고 다시 설치했습니다. 물론 모든 비트나미서버를 삭제해서 지금 PHP서버를 디폴트 포트로 다시 변경했구요.
          대화보기
          • dlaruddnrsla@naver.com
            $result === false 문은 저장을 하는 sql문이 아니라 php 문법입니당
            if($result === false) 에서
            if 만약
            $result 변수에 저장된 값이
            === false false 라면
            TRUE를 반환하라는 php 문법이에요
            대화보기
            • 쭈글
              $result === false 이 문법 맞나요? 성공으로 나오는데 저장안되는거같네요 데이터베이스는 잘 모르니 헷갈리네요
            • egoing
              그것은 데이터베이스를 인식 못한다는 것이기 때문에 데이터베이스 서버에 접속을 못하는 문제는 아닐 것 같습니다. use opentutorials;를 통해서 opentutorials가 존재하는지 확인해보시겠어요?
              대화보기
              • cmj88@naver.com
                "Warning: mysqli_connect(): (HY000/1049): Unknown database 'opentutorials' in C:\Bitnami\wampstack-7.1.14-0\apache2\htdocs\process_create.php on line 6" 이란 메시지가 계속뜨고 db를 인식하지 못하는 것 같습니다.. 제가 pc에서 실행시킬 때 localhost:81/process_create.php 이렇게 하고 있는데 81번 포트 지정이 문제가 되나요?
                logs의 error파일에도 동일한 설명만 나오니 답답하네요.
              • 박영수
                windows mysql 접속시에는 mysql 의 bin 디렉토리에서 c:\mySql\mysql.exe -uroot -p111111 ojoj(디비네임) 으로 접속 가능합니다. 디베를 생성하지 않으신 경우는 기본적으로 sys 디비가 있을꺼예요... 유닉스와 윈도우 환경의 차이가 좀 있는데요... export 와 같은 환경 변수를 사용할 경우는 디비명을 생략 할 수가 있는데... 그렇지 않은 경우는 지정을 해 줘야 하는것 같습니다... 윈도우 같은 경우는요... 혹시 도움이 될까 해서 몇 글자 적습니다...
              • webster
                합니다 -> 갑니다
              • webster
                php초보님, 혹시 에러 해결하셨나요? 이미 해결하셨다면 축하드리고요!ㅎㅎ
                아니라면 에러코드에 나온대로
                process_create.php파일의 6번째 줄과, 16번째 줄을 한번 더 살펴보심이 좋을것같아요.

                제 생각에는
                1. egoing님과 다른 pw를 사용하고 계신데, 코드를 그대로 가져다쓰셔서 비밀번호가 불일치하는지,
                2. 만들어 두신 topic table, column의 자료형은 적잘하게 지정되어 있는지 등을 살펴보세요~

                많으 에러가 아주 사소한 오타때문에 발생하기도 하니, 에러가 없나도 한번 주의깊게 살펴보시면 좋을것같습니다.

                같이 공부해나가는 학생입장에서 좌절하여 앞으로 못나아가실까봐 조금은 도움이 될까 싶어서 댓글남기고합니다.
              • php초보
                sucess는 뜨는데, mysql에 데이터가 저장되지 않네요,,,

                Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) in C:\Bitnami\wampstack-7.1.12-0\apache2\htdocs\WEB3\process_create.php on line 6

                Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in C:\Bitnami\wampstack-7.1.12-0\apache2\htdocs\WEB3\process_create.php on line 16

                라는 에러 코드가 뜨는데 말씀하신데로 다 했는데 Boolean이 뜨는 이유는 뭘까요,,
              버전 관리
              egoing
              현재 버전
              선택 버전
              graphittie 자세히 보기