개요
우리가 만든 웹에플리케이션은 글의 목록을 가져오고, 선택한 목록에 대한 자세한 정보를 보여주는 읽기 중심이다. 이것만으로는 웹서비스라고하기에 부족하다. 이번 과제는 추가 기능을 구현하는 것이다. 아래는 생각의 흐름이다.
구상
index.php
opentutorials.org에서는 글을 토픽이라고 부른다. 그래서 '추가'란 토픽을 데이터베이스에 추가하는 것을 의미하다. 토픽추가라는 버튼을 어디에 둘 것인가를 먼저 생각해보자. 필자는 토픽 목록의 상단에 '토픽추가'라는 이름의 링크를 만들고 이것을 클릭했을 때 토픽을 추가할 수 있는 화면(add.php)으로 이동하게 할 생각이다. 아래와 같이 토픽추가 링크가 토픽목록 위에 나타나도록 index.php 파일을 수정하자.
add.php
토픽추가 화면인 add.php의 화면 구성은 기본적으로 index.php와 같다. 차이점이 있다면 본문 영역에 제목과 본문의 내용을 입력 할 수 있는 양식이 나타난다는 점이다. 아래는 add.php 파일을 열었을 때의 화면으로 제출 버튼을 누르면 제목과 본문이 서버로 전송된다.이것을 하기 위해서는 사용자가 입력한 정보를 서버로 전송하는 방법을 알아야 한다. 그 때 사용하는 것이 form이라는 것인데, 생활코딩 HTML 수업에 폼에 대한 수업이 있다. 그것을 참고하자. 생활코딩 form 수업 바로가기
사용자가 제출버튼을 눌렀을 때 제목과 본문의 데이터를 서버로 전송하기 위해서는 이 정보를 받을 서버쪽 페이지가 필요하다. 필자는 add_process.php 라는 파일로 데이터를 전송 할 것이다. 어떻게 해야할까? 직접 생각해보자.
add_process.php
필자는 add.php 파일에서 전송한 데이터를 받아서 그 정보를 데이터베이스에 추가하는 목적으로 add_process.php 파일을 만들 것이다. 이 파일 내의 로직의 흐름과 이것을 이해하기 위해서 필요한 지식은 아래와 같다.
- add.php에서 사용자가 입력한 정보를 받는다.
사용자가 입력한 정보를 받아서 처리하는 방법을 알아야 한다. PHP 수업 사용자 데이터를 참고한다.
생활코딩 PHP 수업 사용자 데이터 편 바로가기 - 데이터베이스에 접속한다.
- 사용자가 입력한 정보와 SQL 문을 조합해서 데이터를 추가하기 위한 쿼리를 생성한다.
데이터를 삽입하는 SQL 문은 INSERT이다. INSERT에 대한 내용은 MYSQL 수업을 참고한다.
생활코딩 MySQL 수업 삽입 편 바로가기 - 쿼리를 데이터베이스에 전송한다.
쿼리를 데이터베이스에 전송하면 add_process 페이지가 해야 할일이 모두 끝난다. 하지만 아직 두가지 할 일이 더 남아 있는데 아래와 같다.
- 사용자에게 데이터가 잘 저장 되었음을 알려준다.
필자는 자바스크립트의 alert를 이용해서 삽입에 성공했음을 알려줄 계획이다. - 사용자가 입력한 토픽의 페이지로 페이지를 이동시킨다.
이 작업을 위해서는 사용자가 입력한 토픽이 데이터베이스 상에서 어떤 id 값을 가지고 있는지 알아내야한다.
이 때 사용할 수 있는 것이 mysql_insert_id()이다. 이 명령을 호출하면 PHP는 insert 문을 통해서 삽입한 데이터의 id 값을 돌려준다. PHP 메뉴얼을 참고한다.
PHP 메뉴얼 - mysql_insert_id 편 바로가기
필자의 코드
정답은 없다. 그리고 엔지니어링이란 수단과 방법을 가리지 않고 목적을 달성하는 것이다. 필자의 코드를 공유하기는 하지만 그것은 필자가 목적을 달성하기 위해서 선택한 수단일 뿐 정답은 아니다. 더 좋은 방법은 얼마든지 있을 수 있다. 그러니까 자신감을 가지고 문제를 해결해보자.