php, CRUD 글 생성 (feat. file_put_contents와 header 함수)

포스트 썸네일 이미지

이번에도 생활코딩 php 수업 내용을 바탕으로 웹 애플리케이션의 핵심인 CRUD 중, 데이터를 서버에 저장하는 글 생성(Create) 기능을 구현하는 방법에 대해 알아보겠다.






이전 포스트




웹앱 완성하기 예고


웹사이트의 게시판을 만들기 위해서 필요한 이런 기능들을 줄여서 CRUD라고 부른다.


  • C - Create 생성
  • R - Read 읽기
  • U - Update 수정
  • D - Delete 삭제


이제 이 CRUD 기능을 만들기 위한 공부들을 해나가 보겠다.

일단 이번 포스트에서는 Create 기능을 구현해 보자.





form과 POST


생활코딩의 php 수업 영상 중에서 가장 긴 영상이다.

아마 그만큼 가장 중요하면서 가장 복잡한 내용이기 때문일 거다.


영상에서 사용한 코드들을 하나씩 살펴보자.




<!DOCTYPE html>
<html>
<body>
    <form action="form.php" method="POST">
        <p><input type="text" name="title" placeholder="제목"></p>
        <p><textarea name="description"></textarea></p>
        <p><input type="submit"></p>
    </form>
</body>
</html>

이 코드는 사용자가 입력한 데이터를 서버로 전송하기 위한 HTML Form 양식이다.

사용자가 제목과 내용을 작성하고 제출Submit 버튼을 누르면, 그 데이터가 form.php라는 파일로 전달되도록 설계되어 있다.

(이 글의 카테고리는 php인데) HTML 코드이기 때문에 php와 관련된 부분들만 설명하겠다.


  • form action="form.php": 사용자가 제출 버튼을 눌렀을 때, 데이터를 받아 처리할 목적지 파일(form.php)을 지정한다.
  • form method="POST": 데이터를 전송하는 방식이다.
    POST 방식은 데이터가 URL에 노출되지 않고 본문에 포함되어 전송되므로, 글쓰기나 로그인처럼 데이터를 생성・수정할 때 주로 사용한다.
  • input type="text"textareaname 속성: 서버(php)에서 데이터를 받을 때 이 이름을 식별자로 사용한다. (예: $_POST['title'])


영상 속의 form.php에 사용된 내장 함수 file_put_contents()는 아래에서 정리하겠다.





글 생성


뭔가 복잡하게 코드를 이것저것 바꾸긴 했지만, 다 공부했던 것들이다.

위의 영상에서도 나왔던 내장 함수 file_put_contents()와 함께 header()에 대해서 설명하겠다.




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




1. file_put_contents()


file_put_contents() 함수는 사용자가 입력한 글을 실제 파일로 만들어 저장하는 역할을 한다.


  • 'data/'.$_POST['title'] (파일명): data/라는 디렉토리 안에 사용자가 입력한 제목(title)을 파일 이름으로 사용하겠다는 뜻이다.
  • $_POST['description'] (내용): 사용자가 본문에 입력한 데이터(description)를 파일의 내용으로 채운다.




2. header()


header() 함수는 브라우저에게 "지금 즉시 이 주소로 이동해."라고 명령하는 역할을 한다.

파일 저장이 끝난 후, 사용자가 방금 작성한 글을 바로 확인할 수 있도록 해당 글의 상세 페이지(index.php?id=제목)로 사용자를 강제 이동시킨다.




3. die 혹은 exit


생활코딩 수업 영상에서는 나오지 않은 die;(또는 exit;)는 php에서 "여기서 즉시 코드를 중단하라"고 명령하는 종료 스위치 같은 역할을 한다.

위의 코드처럼 header와 die가 코드의 맨 마지막에 위치한다면, die가 없어도 어차피 실행할 코드가 없으므로 겉으로 보기엔 차이가 없다.

기술적으로는 없어도 돌아가지만, 보안과 효율성을 위해 반드시 넣어주는 것이 관례다.




다음 포스트

이 글이 도움이 됐거나 유익했다면 스크롤을 조금만 더 내려서 댓글을 남겨주세요. (비로그인도 가능합니다!)
응원이나 피드백이 담긴 댓글은 제가 계속 블로그를 해나갈 수 있는 원동력이 됩니다. 😊

지인에게 보여주고 싶은 글이었다면 URL을 복사해서 메신저나 소셜 미디어에 공유해 주세요.

댓글 쓰기

0 Comments

문의하기 양식