<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>댓글 수정 기능</title>
    <style>
        .comment-box {
            border: 1px solid #ddd;
            padding: 10px;
            margin: 10px 0;
        }
        .edit-area {
            display: none; /* 처음에는 안 보이도록 설정 */
            margin-top: 10px;
        }
    </style>
</head>
<body>

    <div id="comments">
        <div class="comment-box" data-id="1">
            <p class="comment-text">이것은 첫 번째 댓글입니다.</p>
            <button class="edit-btn">수정</button>
            <div class="edit-area">
                <textarea class="edit-input" rows="3" cols="50"></textarea>
                <button class="save-btn">저장</button>
            </div>
        </div>

        <div class="comment-box" data-id="2">
            <p class="comment-text">이것은 두 번째 댓글입니다.</p>
            <button class="edit-btn">수정</button>
            <div class="edit-area">
                <textarea class="edit-input" rows="3" cols="50"></textarea>
                <button class="save-btn">저장</button>
            </div>
        </div>
    </div>

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            // 모든 "수정" 버튼을 가져옴
            const editButtons = document.querySelectorAll(".edit-btn");

            editButtons.forEach(button => {
                button.addEventListener("click", function() {
                    const commentBox = this.closest(".comment-box"); // 해당 댓글 박스 찾기
                    const commentText = commentBox.querySelector(".comment-text").innerText; // 기존 댓글 내용 가져오기
                    const editArea = commentBox.querySelector(".edit-area"); // textarea 영역 찾기
                    const editInput = commentBox.querySelector(".edit-input"); // textarea 찾기

                    editInput.value = commentText; // textarea에 기존 댓글 내용 넣기
                    editArea.style.display = "block"; // textarea 보이게 하기
                });
            });

            // 모든 "저장" 버튼에 이벤트 추가
            const saveButtons = document.querySelectorAll(".save-btn");

            saveButtons.forEach(button => {
                button.addEventListener("click", function() {
                    const commentBox = this.closest(".comment-box");
                    const editInput = commentBox.querySelector(".edit-input");
                    const commentText = commentBox.querySelector(".comment-text");

                    commentText.innerText = editInput.value; // 댓글 내용 업데이트
                    commentBox.querySelector(".edit-area").style.display = "none"; // textarea 숨기기
                });
            });
        });
    </script>

</body>
</html>

PHP  개발할때 많이 사용하는 PHPStorm(유료) 프로그램을 회사에서 사용중이다.

프로젝트가 2개정도 있는데 프로젝트마다 창을 분리하니 불편해서 하나의 창에 여러개의 프로젝트를 등록하는 방법을

찾아봤는데 검색해도 안나와서 Chatgpt에 물어보니 방법을 알려줬다.

[File] - [Open]해서 프로젝트가 있는 폴더를 선택하면 작은 창이 하나뜨는데 거기에서 Attach를 눌러주면 하나의 창에 

여러개의 프로젝트가 등록이 가능하다.

PHP를 공부해본 사람이라면 XAMPP에 대해서 잘 알거라고 생각된다.

Apache, PHP, MySQL을 한번에 설치해주는 유용한 프로그램인데 XAMPP를 설치를 하고, Apache를 실행했을때

' 프로시저 시작 지점 SSL_CTX_set_post_handshake_auth을(를) DLL E:\xampp\php\ext\php_curl.dll에서 찾을 수 없습니다.' 

이런 오류가 발생하면 E:\xampp\php에 있는 php.ini 파일을 메모장이나 편집기로 연다. (저는 E드라이브에 XAMPP를 설치를 했는데 다른 드라이브에 설치를 하면 다른드라이브로 들어가시면 됩니다)

편집기에서 찾기 기능을 이용하여 'extension=curl'을 검색하면 나오게 되는데 주석표시인 ';(세미콜론)'을 앞에다가 붙여주고 다시 XAMPP 제어판을 실행해서 Apache를 Start하면 제대로 동작이 될것입니다.

 

[모델]

// app/Models/ItemModel.php
namespace App\Models;
use CodeIgniter\Model;

class ItemModel extends Model
{
    protected $table = 'items'; // 테이블 이름
    protected $primaryKey = 'id';
    protected $allowedFields = ['title', 'content']; // 컬럼 설정

    // 데이터 가져오기 (limit, offset 사용)
    public function getItems($limit, $offset)
    {
        return $this->orderBy('id', 'DESC')
                    ->findAll($limit, $offset);
    }
}

 

[컨트롤러]

// app/Controllers/ItemController.php
namespace App\Controllers;
use App\Models\ItemModel;

class ItemController extends BaseController
{
    public function index()
    {
        $model = new ItemModel();
        $data['items'] = $model->getItems(3, 0); // 처음 3개만 로드
        return view('items_view', $data);
    }

    public function loadMore()
    {
        $offset = $this->request->getPost('offset'); // AJAX로 받은 offset
        $model = new ItemModel();
        $items = $model->getItems(3, $offset); // 3개씩 추가로 가져오기

        return view('load_more_items', ['items' => $items]);
    }
}

[뷰]

// app/Controllers/ItemController.php
namespace App\Controllers;
use App\Models\ItemModel;

class ItemController extends BaseController
{
    public function index()
    {
        $model = new ItemModel();
        $data['items'] = $model->getItems(3, 0); // 처음 3개만 로드
        return view('items_view', $data);
    }

    public function loadMore()
    {
        $offset = $this->request->getPost('offset'); // AJAX로 받은 offset
        $model = new ItemModel();
        $items = $model->getItems(3, $offset); // 3개씩 추가로 가져오기

        return view('load_more_items', ['items' => $items]);
    }
}

[추가뷰]

<!-- app/Views/load_more_items.php -->
<?php foreach ($items as $item): ?>
    <div class="item">
        <h3><?= esc($item['title']) ?></h3>
        <p><?= esc($item['content']) ?></p>
    </div>
<?php endforeach; ?>

Total
Today
Yesterday