์จ๋ผ์ธ ๊ฐ์
>PHP - ์ค๊ธ
๐ PHP ์ค๊ธ - 3์ฃผ์ฐจ: ๊ฒ์ํ CRUD ๊ตฌํ (๊ธฐ๋ณธ) - 03 ํ์ด์ง ์ฒ๋ฆฌ
์๋ฃ ๊ธฐ๋ณธ์ ๋ณด
์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ์กฐํ: 156
- ๋ค์ด: 1
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-07-23 08:20:33
- ์ค๋ช
๐ PHP ์ค๊ธ - 3์ฃผ์ฐจ: ๊ฒ์ํ CRUD ๊ตฌํ (๊ธฐ๋ณธ) - 03 ํ์ด์ง ์ฒ๋ฆฌ
์๋ ํ์ธ์! ์ง๋ ์๊ฐ์ #PHP #๊ฒ์ํ์ #CRUD ๊ธฐ๋ฅ์ ๊ตฌํํด ๋ณด์์ฃ . ์ค๋์ #๊ธ ๋ชฉ๋ก์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋ฐ ํ์์ ์ธ #ํ์ด์ง_์ฒ๋ฆฌ(Pagination)๋ฅผ ์์ธํ ๋ค๋ค๋ณผ ๊ฑฐ์์. #ํ์ด์ง ์ฒ๋ฆฌ๋ #๋ฐ์ดํฐ๊ฐ ๋ง์ ๋ ์นํ์ด์ง์ #์ฑ๋ฅ์ ์ต์ ํํ๋ ์ค์ํ ๋ฐฉ๋ฒ์ ๋๋ค.
1. ํ์ด์ง ์ฒ๋ฆฌ์ ํ์์ฑ
#๊ฒ์ํ์ #๊ธ์ด ์์ฒ, ์๋ง ๊ฐ ์์ธ๋ค๊ณ ์์ํด ๋ณด์ธ์. ๋ชจ๋ #๊ธ์ ํ ๋ฒ์ ๋ถ๋ฌ์์ ์นํ์ด์ง์ ํ์ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด์.
๋๋ฆฐ ๋ก๋ฉ ์๋: #๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ง์ #๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , #์นํ์ด์ง์ ๋ ๋๋งํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ์ด๋ ์ฌ์ฉ์์๊ฒ ์ข์ง ์์ ๊ฒฝํ์ ์ค๋๋ค.
์๋ฒ ๋ถํ ์ฆ๊ฐ: ํ ๋ฒ์ ๋ชจ๋ #๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ผ #์๋ฒ์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์ฌ์ฉ์ ๊ฒฝํ ์ ํ: ์ฌ์ฉ์๊ฐ ์คํฌ๋กค์ ๋์์ด ๋ด๋ ค์ผ ํ๋ฏ๋ก ์ํ๋ #์ ๋ณด๋ฅผ ์ฐพ๊ธฐ ์ด๋ ต๊ณ ๋ถํธํฉ๋๋ค.
#ํ์ด์ง_์ฒ๋ฆฌ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , #๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ๋จ์๋ก ๋๋์ด ํ์ํจ์ผ๋ก์จ #์นํ์ด์ง์ #์ฑ๋ฅ๊ณผ #์ฌ์ฉ์_๊ฒฝํ์ ๋์์ ๊ฐ์ ํฉ๋๋ค.
2. ํ์ด์ง ์ฒ๋ฆฌ์ ํต์ฌ ์๋ฆฌ
#ํ์ด์ง_์ฒ๋ฆฌ์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์์.
์ด #๊ฒ์๋ฌผ_์ ํ์ : #๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ์ ์ฒด #๊ฒ์๋ฌผ ์๋ฅผ ๋จผ์ ์์๋ ๋๋ค.
ํ ํ์ด์ง๋น #๊ฒ์๋ฌผ_์ ์ค์ : ํ ํ์ด์ง์ ๋ช ๊ฐ์ #๊ธ์ ๋ณด์ฌ์ค์ง ์ ํฉ๋๋ค. (์: 10๊ฐ, 20๊ฐ)
์ด #ํ์ด์ง_์ ๊ณ์ฐ: ์ด #๊ฒ์๋ฌผ ์๋ฅผ ํ์ด์ง๋น #๊ฒ์๋ฌผ ์๋ก ๋๋์ด ์ ์ฒด #ํ์ด์ง ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
ํ์ฌ #ํ์ด์ง ๋ฒํธ ํ์ : ์ฌ์ฉ์๊ฐ ๋ณด๊ณ ์ ํ๋ #ํ์ด์ง ๋ฒํธ๋ฅผ #URL ํ๋ผ๋ฏธํฐ(์:
list.php?page=2) ๋ฑ์ ํตํด ๊ฐ์ ธ์ต๋๋ค.#LIMIT๊ณผ #OFFSET ์ฌ์ฉ: #SQL ์ฟผ๋ฆฌ์์ #LIMIT๊ณผ #OFFSET์ ์ฌ์ฉํ์ฌ ํ์ฌ #ํ์ด์ง์ ํด๋นํ๋ #๋ฐ์ดํฐ๋ง #๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์ต๋๋ค.
3. ํ์ด์ง ์ฒ๋ฆฌ ์ฝ๋ ๊ตฌํ (list.php ์์ )
์ง๋๋ฒ list.php ์ฝ๋์ #ํ์ด์ง_์ฒ๋ฆฌ #๋ก์ง์ ์ถ๊ฐํ์ฌ ์์ ํด ๋ณผ๊ฒ์.
PHP
query("SELECT COUNT(*) FROM board");
$total_posts = $total_posts_stmt->fetchColumn(); // ์ ์ฒด ๊ฒ์๊ธ ์๋ฅผ ์ซ์๋ก ๊ฐ์ ธ์ด
// 5. ์ด ํ์ด์ง ์ ๊ณ์ฐ
// ceil() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์ดํ๋ฅผ ์ฌ๋ฆผ (์: 20.1๊ฐ๋ฉด 21ํ์ด์ง ํ์)
$total_pages = ceil($total_posts / $posts_per_page);
// 6. ํ์ฌ ํ์ด์ง์ ํด๋นํ๋ ๊ฒ์๊ธ ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ
// ORDER BY created_at DESC: ์ต์ ๊ธ๋ถํฐ ์ ๋ ฌ
// LIMIT :offset, :limit: offset๋ถํฐ limit ๊ฐ์๋งํผ์ ๊ฒ์๊ธ ๊ฐ์ ธ์ค๊ธฐ
$stmt = $conn->prepare("SELECT id, title, author, created_at FROM board ORDER BY created_at DESC LIMIT :offset, :limit");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT); // OFFSET ๋ฐ์ธ๋ฉ (์ ์ํ)
$stmt->bindParam(':limit', $posts_per_page, PDO::PARAM_INT); // LIMIT ๋ฐ์ธ๋ฉ (์ ์ํ)
$stmt->execute();
$posts = $stmt->fetchAll(); // ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๊ฐ์ ธ์ด
} catch(PDOException $e) {
echo "์ค๋ฅ: " . $e->getMessage();
$posts = []; // ์ค๋ฅ ๋ฐ์ ์ ๊ฒ์๊ธ ๋ฐฐ์ด์ ๋น์๋
$total_pages = 1; // ์ค๋ฅ ์ ์ด ํ์ด์ง ์๋ฅผ 1๋ก ์ค์
}
?>
๊ฒ์ํ ๊ธ ๋ชฉ๋ก
๊ฒ์ํ ๊ธ ๋ชฉ๋ก
ID
์ ๋ชฉ
์์ฑ์
์์ฑ์ผ
0): ?>
์์ง ์์ฑ๋ ๊ธ์ด ์์ต๋๋ค.
4. ์ฝ๋ ์ค๋ช ๋ฐ ๋ณด์ถฉ
$posts_per_page: ํ ํ์ด์ง์ ๋ช ๊ฐ์ #๊ฒ์๊ธ์ ๋ณด์ฌ์ค์ง ์ค์ ํ๋ ๋ณ์์์. ํ์์ ๋ฐ๋ผ ์กฐ์ ํ ์ ์์ต๋๋ค.$current_page: ํ์ฌ ์ฌ์ฉ์๊ฐ ์์ฒญํ #ํ์ด์ง ๋ฒํธ๋ฅผ$_GET['page']๋ก ๊ฐ์ ธ์์. #URL์?page=์ซ์ํํ๋ก ์ ๋ฌ๋ฉ๋๋ค.(int)๋ก ํ ๋ณํํ์ฌ #๋ณด์์ ๊ฐํํ๊ณ ๋น์ ์์ ์ธ ๊ฐ์ ๋ง์ต๋๋ค.$offset: #SQL์ #LIMIT ์ ์์ ์ฌ์ฉํ ์์ ์์น๋ฅผ ๊ณ์ฐํด์. ์๋ฅผ ๋ค์ด 2ํ์ด์ง๋ฅผ ์์ฒญํ๊ณ ํ์ด์ง๋น 10๊ฐ์ #๊ธ์ ๋ณด์ฌ์ค๋ค๋ฉด,(2-1) * 10 = 10์ด ๋์ด 11๋ฒ์งธ #๊ธ๋ถํฐ 10๊ฐ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค.COUNT(*): #๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ์์ #๊ฒ์ํ์ #์ด_๊ธ_์(#total_posts)๋ฅผ ๊ฐ์ ธ์์. #PDO์fetchColumn()์ ์ฌ์ฉํ๋ฉด ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ ๊ฐ(์ฌ๊ธฐ์๋ COUNT(*))์ ๋ฐ๋ก ์ป์ ์ ์์ต๋๋ค.ceil(): #PHP์ceil()ํจ์๋ ์์์ ์ดํ๋ฅผ ๋ฌด์กฐ๊ฑด ์ฌ๋ฆผ ํด์. ์๋ฅผ ๋ค์ด ์ด #๊ธ์ด 21๊ฐ์ด๊ณ ํ์ด์ง๋น 10๊ฐ๋ผ๋ฉด,21 / 10 = 2.1์ด ๋๊ณ ,ceil(2.1)์ 3์ด ๋์ด ์ด 3ํ์ด์ง๊ฐ ํ์ํ๋ค๊ณ ์ ํํ ๊ณ์ฐ๋ฉ๋๋ค.LIMIT :offset, :limit: #SQL์์ ํน์ ๋ฒ์์ #๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๋ ๊ตฌ๋ฌธ์ ๋๋ค.OFFSET์ผ๋ก ์์ ์์น๋ฅผ,LIMIT์ผ๋ก ๊ฐ์ ธ์ฌ ๊ฐ์๋ฅผ ์ง์ ํด์. #์ค๋น๋_๊ตฌ๋ฌธ(Prepared Statement)์ ์ฌ์ฉํด #SQL_์ธ์ ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ณPDO::PARAM_INT๋ก ์ ์ํ์์ ๋ช ์ํ์ฌ #๋ณด์์ ๊ฐํํฉ๋๋ค.#ํ์ด์ง๋ค์ด์ _๋งํฌ:
for๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ 1๋ถํฐ$total_pages๊น์ง์ #ํ์ด์ง_๋งํฌ๋ฅผ ๋์ ์ผ๋ก ์์ฑํฉ๋๋ค. ํ์ฌ #ํ์ด์ง์๋activeํด๋์ค๋ฅผ ์ถ๊ฐํ์ฌ ์๊ฐ์ ์ผ๋ก ๊ฐ์กฐํ์ด์.
์ด #ํ์ด์ง_์ฒ๋ฆฌ #๋ก์ง์ ์ ์ฉํ๋ฉด #๊ฒ์ํ์ด ์๋ฌด๋ฆฌ ์ปค์ ธ๋ #์นํ์ด์ง๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก #๊ธ ๋ชฉ๋ก์ ๋ณด์ฌ์ค ์ ์์ ๊ฑฐ์์. ๋ค์ ์ฃผ์ฐจ์๋ #๊ฒ์ํ์ ๋ค๋ฅธ ์ ์ฉํ ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค!
๊ฒ์ํ CRUD ํ์ด์ง PHP ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL ์ฑ๋ฅ ์ฌ์ฉ์๊ฒฝํ