32일차

32일차

홈으로 돌아가기

미션1
접속한 사람의 ip를 확인할 수 있는 로그 프로그램을 만들어라
테이블명 log
idx 숫자, ip 문자, page문자, regdate 날짜
1 192.168.0.1 news>index.php 2025-02-01

클래스명 : Log
함수명 : index,create,edit,delete
routes>
ci4.st.kr/log/
ci4.st.kr/log/create  저장완료후 ci4.st.kr/log/success로 이동
ci4.st.kr/log/edit/1
ci4.st.kr/log/delete/1

CREATE TABLE logs (
    idx int(11) NOT NULL AUTO_INCREMENT,
    ip varchar(128) NOT NULL,
    page varchar(128) NOT NULL,  
    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (idx),
);


Logs.php
	public function edit($value): string
    {

	if ($this->request->getMethod() === 'POST') {
		echo "수정 예정";
	} else {
		$model = model(LogsModel::class);
		if ($model->getLogs($value)){
			echo "있다";

			$data = [
			'logs'  => $model->getLogs($value),
			'title' => '로그 보기',
		];
			return view('logs/edit',$data);
		} else {
			return redirect()->to('/log');
		}
		}

	}

use App\Models\LogsModel;

$model = model(LogsModel::class);
	$data = [
	'ip' => $_SERVER['REMOTE_ADDR'],
	'page' => 'Home>message.php',
	];
$model->save($data);

log페이지 만들기

필터기능 넣기
$routes->get('/intro/profile', 'Home::profile',['filter'=>'auth']);

config -> filters에 auth와 경로 추가
'auth'   => \App\Filters\AuthFilter::class,

App-> Filters에 AuthFilter 만들기

namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;

class AuthFilter implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        // 세션에서 로그인 여부 확인
        if (!session()->get('isLoggedIn')) {
            return redirect()->to('/auth/')->with('error', '로그인이 필요합니다.');
        }
    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        // 로그인 후에는 추가 조치를 하지 않음
    }
}

세션이 없으면 auth로 보내줌
-> 로그인 창으로 보내주는 것

#업로드가 가능한 게시판
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
);


    public function create(): string
    {   
      $file=$this->request->getFile('upfile'); 
      if ($this->request->getMethod() === 'POST' && $file )
      {
         if($file->isValid()  && !$file->hasMoved()) {

            $allowedExtensions = ['jpg', 'png', 'gif', 'pdf'];

            if (!in_array($file->getExtension(), $allowedExtensions)) {
               return "허용되지 않는 파일 형식입니다!";
            }

            $newName = $file->getRandomName(); // 랜덤한 파일명 생성
            echo $newName;
            //exit;

            $file->move('uploads', $newName); // 파일 이동
            return "파일 업로드 성공: " . base_url("uploads/$newName");
         }
      } else  {
         echo "GET";
         echo "파일을 선택해주세요";
      }
      
      return view('templates/header')
         .view('board/create')
         .view('templates/footer');
   }