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. クレヨンしんちゃん
    ㅇㄹ
  2. 김남규
    아마도 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 자세히 보기