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. 23.12.18 델리트 잘못하면 인생이 달라져욬ㅋ
  2. pmxsg
    2022.01.11. 수강
  3. 외노자111111
    php8 의 버전의 문제인지 디버그내용을 웹브라우저에 표시 혹은 에러가생길시에 무조건 페이지접속이 안되게되어있네요.. http error500 어찌어찌 꾸역꾸역하고는있습니다만... 나중이 걱정입니다.
  4. 마법의미늘갑옷
    변수 설정 $sql하고 mysqli_query($conn, $sql)하면 왜 오류날까요 ㅠㅠ?

    두번째 인자에 $sql 넣지 않고
    mysqli_query($conn, "
    INSERT INTO topic
    (title, description, created)
    VALUES(
    '{$_POST['title']}',
    '{$_POST['description']}',
    NOW()
    )
    ";

    변수 값 그대로 넣으면 제대로 실행되는데 ㅠㅠ
  5. dlwogmlz
    mac에서 mamp로 연동해서 성공했습니다 까지 띄웠는데 정작 mysql topic테이블에는 값이 안들어가네요...
    mamp 버전이 높아서 그런건가요? 낮으면 제대로 작동한다고 알고있는데 버전을 낮춰서 설치를해야 되는지 모르겠네요..
  6. chimhyangmoo
    21.06.21
  7. 감사합니다
  8. jwoh
    21-04-25
  9. jeisyoon
    2021.04.16 글생성 - OK
  10. hanel_
    21.2.25
  11. Jace
    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
        완료!
      • simon
        안녕하세요, 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이 뜨는 이유는 뭘까요,,