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. incursio
    감사합니다
  2. 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 자세히 보기