●32일차(20250201032.php)
미션1. (29일차 참고)
접속한 사람의 IP를 확인할 수 있는 로그 프로그램을 만들어라
테이블명 log
idx(숫자),ip(문자),page(문자),regdate(날짜)
1 192.168.0.1 news>index.php 2025-02-01
2 192.168.0.1 news>delete.php 2025-02-01
클래스명 logs
함수명 index create edit delete
routes
메서드: getLog()
ci4.st.kr/log/
ci4.st.kr/log/create 저장완료후 ci4.st.kr/log/sucess로 이동
ci4.st.kr/log/edit/1
ci4.st.kr/log/delete/1
1. 데이터베이스, 테이블 추가
CREATE TABLE log (
id int(11) NOT NULL AUTO_INCREMENT,
ip varchar(128) NOT NULL,
page varchar(128) NOT NULL,
regdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
INSERT INTO log VALUES
(1,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(2,'192.168.0.1','log>index.php','2025-02-01 00:00:00');
(3,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(4,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(5,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(6,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(7,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(8,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(9,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(10,'192.168.0.1','log>index.php','2025-02-01 00:00:00'),
(11,'192.168.0.1','log>index.php','2025-02-01 00:00:00')
2. 코드
2-1. 목록
app/config/Routes.php
app/controllers/Logs.php
app/Models/LogsModel.php
app/Views/log/index.php
> News 참고해서 만듦
2-2. 링크 걸기
app/Views/log/index.php
> idx에 링크 걸어줌
app/config/Routes.php
> edit에 segment를 붙혀서 수정
app/Views/log/edit.php
> 만들어줌
app/controllers/Logs.php
> edit 함수를 만들어줌
-> segment 별로 화면이 나옴
2-3. 데이터가 링크를 누르면 나왔으면 함
app/controllers/Logs.php
> 데이터가 있는지 확인해서 모델에 있는 함수를 쓰는 함수 추가
> 데이터가 있으면 목록 안에 있는 데이터를 보여주고 없으면 목록 페이지로 돌아가도록 만듦
app/Views/log/edit.php
> 조금 더 이쁘게 수정해줌
2-4. 링크 클릭 > 수정 클릭 > 수정하는 페이지가 뜨게
app/Views/log/edit.php
> 수정할 수 있는 칸을 만들어줌(ip와 page)
app/config/Routes.php
> 수정해서 넘어가는 페이지는 POST 방식 다르게 추가해서 수정
app/controllers/Logs.php
> POST 방식인지 확인하고 맞으면 "수정예정"이 반환
> 아니라면 GET 방식이라는 뜻이므로 링크를 누르면 처음으로 나오는 화면이 나오게 됨
2-5. 자동으로 접속한 IP가 뜨게 만듦
app/controllers/Home.php
use App\Models\LogsModel;
$model = model(LogsModel::class);
$data = [
'ip' => $_server['REMOTE_ADDR'],
'page' => 'News>index.php',
];
$model->save($data);
app/controllers/News.php
수정
app/controllers/Logs.php
폼으로부터 전달된 값 확인 코드
drop table log
select * from log;
idx가 안됨 > id로 바꿔서 다시 만듦(코드까지)
2-6. 삭제를 하자
app/Views/log/index.php
<td><a href="/log/delete/<?= esc($logs_item['id']) ?>"><?= esc($logs_item['id']) ?></a></td>
> 추가
app/controllers/Logs.php
> delete 함수 추가
최종 화면
2-7. 필터를 걸자
ci4.st.kr에 들어가면 위에 header가 뜨는데 소개(intro/profile.php)에 들어가려면 로그인이 되어야 들어갈 수 있도록
필터를 걸어줄것(로그인이 안되어있으면 auth/login.php로 넘어감)
app/config/Routes.php
$routes->get('/intro/profile', 'Home::profile',['filter'=>'auth']);
> 추가
app/controllers/Home.php
public function profile(): string
{
return view('templates/header')
.view('intro/profile')
.view('templates/footer');
}
> profile 함수 추가
> 굳이 intro/profile 안하고 그냥 profile해줘도 됨
> app/Views 아래에 profile.php 만들어도 됨
return view('templates/header')
.view('welcome_message',$data)
.view('templates/footer');
> index 함수에 추가
app/views/intro/profile.php
> 내용 없어도 됨
app/config/Filter.php
'auth' => \App\Filters\AuthFilter::class,
> 추가
app/Filters/AuthFilter.php
> 코드 추가
> error를 받아서 로그인이 필요합니다가 뜨게 할 것이다

> 소개를 눌러

> intro/profile로 넘어가야하지만 로그인 창으로 넘어감
2-8. 업로드
app/config/Routes.php
board 경로추가
board 테이블 추가
mysql
use ci4;
CREATE TABLE board (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
upfile VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
app/Views/board/create.php
> form
app/Views/board/index.php
> 내용 없어도 됨
app/Controllers/Board.php
> index, create, edit, delete 함수 추가
> create 함수에 POST 방식으로 들어오고 파일이 올라오고
> 파일 형식이 유효하고 파일이 hasmoved가 안되면
> 이름을 랜덤하게 변경하여 uploads에 올려라 라는 함수 작성
> 업로드 하면 uploads라는 디렉토리에 파일이 올라감
> public_html/public/uploads를 만들어서 chmod 777 해줌
> jpg,png,gif,pdf 이외에 올라오지 못하게 만들었다
> 이외에 파일을 올리면 허용되지 않는 파일 형식이라며 올라오지 않는다

> 랜덤한 파일명