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>
이 부분은 책 목록 화면에서 아래와 같이 표시될 겁니다.
바로 이 부분을 클릭하면 삭제확인 페이지로 넘어가는 것이지요.
아직은 클릭해도 오류가 나실 겁니다. 아직 삭제확인 페이지를 안 만들었거든요.
이제 삭제 확인 페이지 소스를 아래와 같이 구성해 주세요. 컨트롤러 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박자가 완성되었습니다.
여기까지 완성되었다면 이제 책을 자유롭게 추가, 편집, 삭제할 수가 있게 되었는데요.
웬만한 기능은 되었는데 끝났다고 볼 수 있을까요?
아직 여기서 만족할 수는 없지요. 다음과 같은 기능이 필요하지 않을까요?
만일 이 기능을 사용할 관리자가 편의성을 요구할 부분을 상상하자면 아래와 같을 겁니다.
- 책이 많을 때 여러페이지에 나눠서 보는 기능
- 책이 많을 때 책 제목의 일부나 저자명을 입력하여 검색하는 기능
- 관리자 전용 로그인 기능 / 관리자만 책 편집 권한 배정
- 회원 입력 관리 기능
- 책 선택, 회원 선택하여 책을 대여/회수하는 기능
- 대여된 책은 목록에 나오지 않게 하는 기능
:
앞으로 꼭 이런 방향으로 간다는 건 아니고 그냥 하나의 구상안이니 한번 독자분들도 상상해 보세요 :)
오늘도 여기까지 봐주시느라 수고하셨습니다.
도전하시는 모든 분들께 응원 메시지 드립니다!
감사합니다~
'코드이그나이터와 php7와 mysql' 카테고리의 다른 글
코드이그나이터4, 검색! (0) | 2020.06.14 |
---|---|
코드이그나이터4, 페이징 기술 (4) | 2020.05.02 |
코드이그나이터4에서 책 정보를 편집해볼까요? (2) | 2020.04.23 |
MySQL과 친해지는 phpmyadmin (3) | 2020.03.30 |
해킹을 막아라! MySQL인젝션 보안 (0) | 2020.03.15 |