WEB2 - PHP

PHP에서 글생성 기능 구현하기

수업소개

PHP를 이용해서 불특정 다수가 웹을 통해서 글을 제출하는 방법을 살펴보겠습니다. 

 

 

변경사항

index.php


<?php
function print_title(){
  if(isset($_GET['id'])){
    echo $_GET['id'];
  } else {
    echo "Welcome";
  }
}
function print_description(){
  if(isset($_GET['id'])){
    echo file_get_contents("data/".$_GET['id']);
  } else {
    echo "Hello, PHP";
  }
}
function print_list(){
  $list = scandir('./data');
  $i = 0;
  while($i < count($list)){
    if($list[$i] != '.') {
      if($list[$i] != '..') {
        echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
      }
    }
    $i = $i + 1;
  }
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>
      <?php
      print_title();
      ?>
    </title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
      print_list();
      ?>
    </ol>
    <a href="create.php">create</a>
    <h2>
      <?php
      print_title();
      ?>
    </h2>
    <?php
    print_description();
     ?>
  </body>
</html>

create.php

<?php
function print_title(){
  if(isset($_GET['id'])){
    echo $_GET['id'];
  } else {
    echo "Welcome";
  }
}
function print_description(){
  if(isset($_GET['id'])){
    echo file_get_contents("data/".$_GET['id']);
  } else {
    echo "Hello, PHP";
  }
}
function print_list(){
  $list = scandir('./data');
  $i = 0;
  while($i < count($list)){
    if($list[$i] != '.') {
      if($list[$i] != '..') {
        echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
      }
    }
    $i = $i + 1;
  }
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>
      <?php
      print_title();
      ?>
    </title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
      print_list();
      ?>
    </ol>
    <a href="create.php">create</a>
    <form action="create_process.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>

create_process.php

<?php
file_put_contents('data/'.$_POST['title'], $_POST['description']);
header('Location: /index.php?id='.$_POST['title']);
?>

 

댓글

댓글 본문
  1. 정진훈
    완료
  2. Cpt.MJ
    I'm here!
  3. 23.12.03 Create 구현 재밋다냥!
  4. 코딩두
    23.08.10 1분부터
  5. xogk1128
    22.07.20 완료
  6. 드림보이
    2022.02.24. WEB2 - PHP - PHP에서 글생성 기능 구현하기 파트 수강완료
  7. pmxsg
    2022.01.04 수강
  8. 뭉치우석
    호호호
  9. acs0209
    <?php
    file_put_contents('data/'.$_POST['title'] , $_POST['description']);
    header('Location : /index4.php?id='.$_POST['title']);
    ?>

    <?php
    file_put_contents('data/'.$_POST['title'], $_POST['description']);
    header('Location: /index4.php?id='.$_POST['title']);
    ?>
    첫번째 코드와 두번째 코드의 차이가 있나요?? 두번째 코드는 잘 작동하는 반면에 첫번째 코드는 작동하면
    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator at admin@example.com to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log. 이렇게 뜹니다 대체 왜 이게 뜨는지 알려주실분 없나요ㅠㅠ
  10. chimhyangmoo
    21.05.30
  11. jwoh
    21-04-25
  12. jeisyoon
    2021.04.13 글생성 기능 구현 - OK
  13. hanel_
    감사합니다. 21.2.18
  14. kkn1125
    21.01.05.화 완료~!
  15. 윤지
    완료
  16. 우성짱
    좋아요
  17. siver
    완료
  18. developer
    웹 너어어무 재밌어요. 감사합니다 .
  19. 이서연
    완료
  20. 아자요
    HTML, Java Script 완강 후 새로운 도전시작

    20.05.13일 / 완료
  21. Lucas Trowman
    완료!
  22. OneJae EE
    20.04.11 토 / 37세 비전공자 / 완료
  23. 스티븐잡숴
    완료
  24. moon
    정말 감사합니다.!!
  25. 김은혁
    create 하고 나면 본문 부분에 파일로 확인하면 제가 적어놓은 부분만 써져 있는데 웹페이지에서 확인하면
    제가 쓴 부분 후에 Lorem 글이 붙인 채로 나오는데 왜 그런 걸까요..?
  26. 햄쮸맨
    근데 크리에이트 버튼 누르면 다른거 변화없이 입력 창이 뿅 하고 뜨는게 걍 듀플리케이트 해서 페이지를 복사한 경우였군요..전 무슨 다른 함수가 있는 줄 알았어요 ㅎㅅㅎ)..
  27. 햄쮸맨
    아..이번 시간은 헤더태그 빼면 배운 것들 응용하는 단계여서 중간에 멈추고 직접 해볼걸 그랬네요..그냥 따라가면서 다 했더니 조금 아쉽네용 ㅎㅅㅎ) 뭔가 후회가 된달까?
  28. 몽글몽글솜사탕
    감사합니다
  29. 일리
    file_put_contents함수를 이용해도 새로운 파일이 생기지를 않습니다ㅠㅠ 경로도 맞는데 새 파일이 생기지를 않네요....
  30. 허공
    190507 감사합니다.
  31. 저는 header('Location: ./index.php?id='.$_POST['title']); 이렇게 하니까 되네요!
  32. 운림
    성공적으로 완료. 감사합니다.
  33. 신입
    header('Location: /index.php?id=' . $_POST['title']);
    header('Location: ../index.php?id=' . $_POST['title']);
    header('Location: /data/index.php?id=' . $_POST['title']);
    header('Location: ../data/index.php?id=' . $_POST['title']);

    이 모든 경우가 다 안돼요ㅠㅠ 왜그런거죠..? 사실 전에 실습할때도 강의에서는 /data/ 로 하는 경우가 저는 실행이 안돼서 ../data/로 바꿔서 실습했었습니다 그래서 이번에도 /index.php가 안되길래 ../index.php로 했는데 왜안되는거죠ㅠㅠㅠ

    파일은 정상적으로 잘 생깁니다! create_process에서 저 코드만 안돼요ㅠㅠ
  34. 훈도
    변마야 고맙다 ㅎ
  35. Gihoon Pomme Ryu
    완료. 고맙습니다.
  36. 로버트한
    감사합니다.^^
  37. scott
    아 그렇군요 감사합니다 상대폴더 개념이군요^^ 감사합니다
    대화보기
    • ByungHyuk Jeon
      저는 폴더 구조를 htdocs/Web/ 안에 만들어서 실습하고있는데요, '/index..' 라고 하시면 htdocs 폴더 부터 상대적으로 가는것 같아요. 그래서 not found가 뜹니다.
      그런데 그냥 index... 라고 하시거나 './index' 를 하시면 create_process.php 파일이 있는 폴더를 기준으로 찾기 때문에 문제 없이 해당 파일을 찾을 수 있는것 같네요.

      즉 scott님의 경우는 htdocs 폴더 안에 저 파일들이 존재해서 상관없이 동작하는 거라고 볼 수 있을 것 같네요.
      대화보기
      • scott
        동영상 강의 잘보고있습니다 제가 궁금한게 있어서 글을 올려봅니다.

        간단하게
        A : header('Location: /index.php?id='.$_POST['title']); 와
        B : header('Location: index.php?id='.$_POST['title']); 차이가 무엇인지 궁금합니다.

        A는 되지 않았고 B로 수정했을때는 정상으로 동작했습니다 ' / ' 가 있고 없고 차이가 무엇인가요??
      • 참고
        저 같은 경우에는 글쓰기 기능을 사용해도 파일이 생성되지 않고 아무 반응이 없었는데
        데이터를 저장하는 디렉토리(예: data)의 일반사용자 쓰기권한을 주고 나니까 파일이 생성되고 글쓰기 기능이 제대로 실행됬습니다. 리눅스 서버를 사용하시는 분은 참고해주세요.
      • 오셔
        저도 그랬었는데 Location: 이 부분 띄어쓰기 고치니까 되네요! 확인해보세요~
        대화보기
        • egoing
          error_log 파일을 확인해보셨나요?
          대화보기
          • 생활코딩짱짱
            Internal Server Error
            The server encountered an internal error or misconfiguration and was unable to complete your request.

            Please contact the server administrator at admin@example.com to inform them of the time this error occurred, and the actions you performed just before this error.

            More information about this error may be available in the server error log.

            Additionally, a 302 Found error was encountered while trying to use an ErrorDocument to handle the request.

            이런 에러가 발생했는데... 혹시 왜그러는 걸까요?ㅠㅠ
          • 생활눈코입딩
            아직 잘 모르지만. 폼의 전송방식이 핵심이네요
            즉 GET방식으로 url을 누군가에게 보여준다면...원하지않는 글쓰기가 된다.
            그래서 post 방식으로 url이 숨겨진 상태로 만들어야 사용자가 정상적으로 페이지를 방문한다....??
            사용자의 불편함을 줄이기 위해 사용자가 전송을 하고나면 그 페이지에 머무르게 하지말고 다시 메인홈페이지로
            보내버린다~이게 리 다이렉션이군요!!
          • 제갈량
            사용자가 웹 브라우저에서 서버에게 작업을 요청하면
            서버는 그것을 받아 처리하여서 사용자한테 제공하는 거였군요.
            단순해 보이지만, 여기에는 눈에 보이지 않는 뭔가가 존재하는데
            이건 우리가 알기에는 어렵다는 생각이 듭니다.
            그나마 웹 브라우저와 서버가 통신을 어떻게 하는지 조금은 알게되서 좋습니다.
            감사합니다. ^^
          • 마샤
            해결했어요

            파일명이 'PHP 6 ', 스페이스 한 칸이 뒤에 들어가 있어서 그랬어요 고맙습니다
            대화보기
            • egoing
              파일을 찾을 수 없다는 말이에요. 경로 잘 찾아보서요~
              대화보기
              • Dong-In Andy Kang
                학생들의 심리를 어떻게 이렇게 잘 파악하시는지... 작지만 강의를 계속해 나갈 수 있는 윤활유와도 같은 이고잉님의 격려!!
              • masa
                PHP 6, PHP 7처럼 한 칸 띄어져 있는 이름을 클릭하면 경고창이 뜨면서 본문은 뜨지 않네요

                Warning: file_get_contents(data/PHP 7): failed to open stream: No such file or directory in /Applications/mampstack-7.1.13-0/apache2/htdocs/index.php on line 11

                왜 그런지 아는 분 계신가요?
              • egoing
                그런 파일이 없다는 말이네요~ 파일의 경로를 잘 확인해보셔요
                대화보기