본문 바로가기
코드이그나이터와 php7와 mysql

코드이그나이터4, 책을 지워봅시다. DELETE!

1. 오토셋 APM 인스톨러 ( apache + php7.2 + mariadb ) 설치 | https://itadventure.tistory.com/93

2. 코드이그나이터 4 ( codeigniter 4 ) 설치 | https://itadventure.tistory.com/95

3. 비주얼 스튜디오 코드 에디터 설치 & 한글 설정 | https://itadventure.tistory.com/96

4. 폴더열기 / 웹페이지 편집(1) | https://itadventure.tistory.com/97

5. 웹페이지 편집(2) | https://itadventure.tistory.com/101

6. 코드이그나이터4의 URL 규칙 | https://itadventure.tistory.com/105

7. php, 네임스페이스 [ namespace ] ?! | https://itadventure.tistory.com/118

8. 코드이그나이터의 네임스페이스, 그리고 모델 | https://itadventure.tistory.com/122

9. 코드이그나이터 뷰의 파라미터 전달 | https://itadventure.tistory.com/147

10. 코드이그나이터 뷰를 나눠 볼까요? | https://itadventure.tistory.com/174

11. MYSQL 이 뭐여? [ 마이에스큐엘은 서류철이다! ] | https://itadventure.tistory.com/175

12. MYSQL 콘솔에 접속해보자! | https://itadventure.tistory.com/178

13. MySql에 넣었다가 꺼냈다가, 뭘? | https://itadventure.tistory.com/265

14. 검색진열대 MYSQL | https://itadventure.tistory.com/267

15. 편집의 왕자 MySQL | https://itadventure.tistory.com/269

16. 코드이그나이터4, MYSQL과 손잡다. | https://itadventure.tistory.com/271

17. MySQL -> 컨트롤러 -> 뷰 트리플 패스! | https://itadventure.tistory.com/272

18. 코드이그나이터! MySQL 에 입력하다! ( insert ) | https://itadventure.tistory.com/273

19. 해킹을 막아라! MySQL인젝션 보안 | https://itadventure.tistory.com/274

20. MySQL과 친해지는 phpmyadmin | https://itadventure.tistory.com/277

21. 코드이그나이터4에서 책 정보를 편집해볼까요? | https://itadventure.tistory.com/280

22. 코드이그나이터4에서 책을 지워봅시다. DELETE!


지난 챕터에서는 책을 편집하는 부분을 다뤄보았었지요?
책을 추가, 수정하는 부분까지 되었으니 이번에는 책 정보를 삭제하는 부분까지 다루면 
기본 3단계는 모두 되는 듯 합니다.

책의 삭제 방법은 다음과 같이 이루어질 겁니다.
지난 편집 방식과 유사하게 책 목록 우측에 [삭제] 버튼을 추가하고,
이 삭제 버튼을 누르면 책정보를 보여주면서 최종적으로 [삭제확인] 버튼을 누르면 책이 삭제되는 방식인데요.
이번에도 마찬가지로 2개의 컨트롤러1개의 뷰 페이지가 추가됩니다.

우선 책 목록 페이지에 삭제 버튼을 추가해볼까요?
삭제할 책의 일련번호는 이미 컨트롤러에서 넘겨 받기 때문에
이번에는 책목록 뷰 페이지만 수정해주시면 됩니다

CodeIgniter4\App\Views\booklist.php

<style>
    .title_style { font-size:12pt; color:blue}
    .author_style { font-size:9pt; color:gray}
</style>
<u><b><?=$title?></b></u><br/>
<? foreach ($booklist as $book){?>
<span class=title_style><?= $book['title']?></span>
<span class=author_style>/ <?= $book['author']?></span>
<span class=author_style>/ <a href="bookEdit?number=<?= $book['number']?>">[편집]</a></span>
<span class=author_style>/ <a href="bookDelete?number=<?= $book['number']?>">[삭제]</a></span>
<br/>
<? } ?>

아래와 같은 부분이 추가되었지요?

<span class=author_style>/ <a href="bookDelete?number=<?= $book['number']?>">[삭제]</a></span>

이 부분은 책 목록 화면에서 아래와 같이 표시될 겁니다.
바로 이 부분을 클릭하면 삭제확인 페이지로 넘어가는 것이지요.
아직은 클릭해도 오류가 나실 겁니다. 아직 삭제확인 페이지를 안 만들었거든요.

http://localhost/bookList

이제 삭제 확인 페이지 소스를 아래와 같이 구성해 주세요. 컨트롤러 1개, 뷰 1개입니다.

CodeIgniter4\App\Controllers\BookDelete.php

<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class BookDelete extends Controller
{
    public function index()
    {
        // 편집할 책의 일련번호
        $number=$this->request->getVar("number");
        $db = \Config\Database::connect("default", false);
        $query = $db->query("SELECT * FROM book where number='".addslashes($number)."' limit 1");
        $results = $query->getResultArray();
        $data = [
            'book'=>$results[0]
        ];
    
        return view('bookdelete', $data);
    }
}

CodeIgniter4\App\Views\bookdelete.php

<b><u>책 정보 삭제</u></b><br/>
<form method=POST action="bookDeleteAct">
<div class=body_style>
<input type=hidden name=number value="<?= $book['number']?>">
    시스템 일련번호 : <?= $book['number']?><br/>
    제목 : <?= $book['title']?><br/>
    본문 : <?= $book['body']?><br/>
    페이지수 : <?= $book['totalpage']?><br/>
    작성자 : <?= $book['author']?><br/>
    <input type=submit value="삭제 확안">
</div>
</form>

그러고 나서 [삭제]버튼을 클릭하면 아래와 같은 페이지가 보이실 겁니다.

지난번 편집 페이지에서는 입력상자 안에 제목, 본문 등의 항목이 위치했는데 삭제 페이지는 좀 다릅니다.
편집할 필요가 없기 때문에 그냥 보여주기만 하는 것이지요.
컨트롤러 소스의 구성은 지난 편집 페이지의 컨트롤러와 거의 유사합니다.

뷰 페이지의 경우는 지난 챕터에 다른 편집 페이지와 다르게 number 항목 1개
<form> 에서 다음 페이지로 전송한다는 것이지요.
그 외에는 편집페이지와 비슷하니 자세한 설명은 건너뛰도록 하겠습니다.

<input type=hidden name=number value="<?= $book['number']?>">

[삭제확인] 버튼을 누르는 순간 bookDeleteAct 페이지가 호출되며 책이 삭제되는데,
역시 아직 [삭제확인] 버튼을 누르지는 마세요. 삭제액션 페이지가 아직 마련되지 않았기 때문입니다.

삭제 액션 페이지를 아래와 같이 구성해 주세요.

CodeIgniter4\App\Controllers\bookDeleteAct.php

<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class BookDeleteAct extends Controller
{
    public function index()
    {
        $number=$this->request->getPost("number");
        $db = \Config\Database::connect("default", false);
        $db->query("delete from book where number=".$number );
        return redirect()->to('./bookList');
    }
}

그리고 [삭제확인] 버튼을 누르는 순간 책이 삭제가 되고 목록 페이지로 되돌아와
한권이 책이 사라진 책 목록을 보여줄 겁니다.

어떤 원리인지 확인해볼까요?
우선 폼에서 전송된 number 값을 받는 부분과 DB 연결하는 부분은 지난번과 같으니 넘어가구요.

        $number=$this->request->getPost("number");
        $db = \Config\Database::connect("default", false);

그 다음줄이 책을 삭제하는 명령입니다. $number 값으로 넘어온 책의 정보를 삭제하는데,

        $db->query("delete from book where number=".$number );

$number 값이 14인 경우 아래와 같은 mysql 명령문을 만들어서 실행합니다

delete from book where number=14

14번 일련번호에 해당하는 책을 삭제해라~ 라는 명령입니다.

그리고 나서 다시 목록 페이지로 되돌아가는 명령 실행

return redirect()->to('./bookList');

그리고 나서 대망의(?) 삭제 동작이 끝납니다.

여기까지 3박자가 완성되었습니다.
여기까지 완성되었다면 이제 책을 자유롭게 추가, 편집, 삭제할 수가 있게 되었는데요.

웬만한 기능은 되었는데 끝났다고 볼 수 있을까요?
아직 여기서 만족할 수는 없지요. 다음과 같은 기능이 필요하지 않을까요?

만일 이 기능을 사용할 관리자가 편의성을 요구할 부분을 상상하자면 아래와 같을 겁니다.

- 책이 많을 때 여러페이지에 나눠서 보는 기능
- 책이 많을 때 책 제목의 일부나 저자명을 입력하여 검색하는 기능
- 관리자 전용 로그인 기능 / 관리자만 책 편집 권한 배정
- 회원 입력 관리 기능
- 책 선택, 회원 선택하여 책을 대여/회수하는 기능
- 대여된 책은 목록에 나오지 않게 하는 기능
               :

앞으로 꼭 이런 방향으로 간다는 건 아니고 그냥 하나의 구상안이니 한번 독자분들도 상상해 보세요 :)

오늘도 여기까지 봐주시느라 수고하셨습니다.
도전하시는 모든 분들께 응원 메시지 드립니다!

감사합니다~