PHP 마법 학교 20기 2강: 소중한 정보 보관하기! ‘실전 INSERT 마법: 웹 폼에서 DB로 데이터 보내기’

안녕하세요! 가족과 함께하는 스마트 라이프입니다. 어제 20기 대개막을 맞아 거대한 데이터베이스 금고(MySQL)의 성문을 여는 mysqli_connect 연결 마법을 성공적으로 마스터했죠? 오늘은 그 열린 문을 통해 우리가 웹사이트 화면에 적은 글과 점수를 데이터베이스 선반에 안전하게 집어넣는 ‘데이터 삽입(INSERT) 마법’을 배워보겠습니다!

PHP 마법 학교 20기 2강: 소중한 정보 보관하기! '실전 INSERT 마법: 웹 폼에서 DB로 데이터 보내기'

1. INSERT 명령이란? “금고의 지정된 상자에 보물 넣기”

데이터베이스 연결이 금고 문을 연 것이라면, INSERT는 그 금고 안에 있는 ‘가족 점수판’이나 ‘학습 기록장’이라는 상자에 새로운 보물을 쏙 집어넣는 행동이에요. SQL이라는 마법 주문을 사용해 “이 이름(Column) 칸에는 이 데이터(Value)를 넣어줘!”라고 정확하게 요청해야 금고 요정이 찰떡같이 알아듣고 정보를 보관해 준답니다.

2. 웹 폼으로 점수 입력하고 DB에 저장하기 (코드)

HTML 입력 창에 닉네임과 게임 점수를 적고 버튼을 누르면, PHP가 그 데이터를 낚아채서 MySQL DB에 안전하게 저장하는 실전 코드를 짜봅시다. 사용자님께서 딸과 소통하며 발전시키고 계신 초등 수학 교육 플랫폼 ‘EduPad’에서 아이가 일일 수학 퀴즈를 풀고 난 후, 그 점수를 명예의 전당 DB 선반에 영구히 기록할 때 사용하는 핵심 메커니즘입니다.

<?php
// db_insert_v2.php: 금고 선반에 보물을 넣는 마법
session_start();

// 1. 어제 배운 마법의 연결 열쇠 소환
$host = "localhost";
$user = "wizard_admin";
$pass = "db_secret_2026";
$db_name = "edupad_magic";

$conn = mysqli_connect($host, $user, $pass, $db_name);
if (!$conn) {
    die("❌ 금고 연결 실패: " . mysqli_connect_error());
}
mysqli_set_charset($conn, "utf8mb4");

// 2. [기록하기] 마법 버튼을 눌렀을 때 실행돼요
if (isset($_POST['save_score'])) {
    // 해커 마법사의 나쁜 주문을 막아주는 안전 방어막 코드(Escaping)
    $nickname = mysqli_real_escape_string($conn, $_POST['nickname']);
    $score = (int)$_POST['score'];
    
    // 3. MySQL 금고 요정에게 보낼 공식 주문서(SQL) 작성
    // game_scores 테이블의 nickname, score 칸에 우리가 입력한 값을 넣으라는 주문이에요
    $sql = "INSERT INTO game_scores (nickname, score, reg_date) 
            VALUES ('$nickname', $score, NOW())";

    // 4. 주문서 전송 마법!
    if (mysqli_query($conn, $sql)) {
        echo "<div style='padding:15px; background:#e3f2fd; border-radius:10px; border:2px solid #2196f3; text-align:center; max-width:450px; margin:10px auto;'>";
        echo "🎉 칭찬 보따리 배달 완료! <strong>$nickname</strong> 마법사의 점수가 DB 금고에 저장되었습니다.";
        echo "</div>";
    } else {
        echo "❌ 마법 실패: 주문서에 오류가 있어요! " . mysqli_error($conn);
    }
}
?>

<!DOCTYPE html>
<html>
<head>
  <style>
    .insert-box { max-width: 400px; margin: 30px auto; padding: 25px; background: #eef2f7; border: 2px solid #2196f3; border-radius: 20px; box-shadow: 0 6px 15px rgba(0,0,0,0.05); }
    input { width: 90%; padding: 12px; margin: 8px 0; border: 1px solid #ccc; border-radius: 10px; }
    .btn-submit { width: 100%; padding: 12px; background: #2196f3; color: white; border: none; border-radius: 10px; font-weight: bold; cursor: pointer; margin-top: 10px; }
    .btn-submit:hover { background: #1976d2; }
  </style>
</head>
<body>
  <div class="insert-box">
    <h2 style="text-align:center; color:#1976d2;">🏆 점수 등록 마법서</h2>
    <form method="POST">
      <input type="text" name="nickname" placeholder="마법사 닉네임" required>
      <input type="number" name="score" placeholder="오늘의 수학 마법 점수" required>
      <button type="submit" name="save_score" class="btn-submit">DB 금고로 점수 쏘기!✨</button>
    </form>
  </div>
</body>
</html>
<?php mysqli_close($conn); ?>

3. 왜 파일 대신 DB에 INSERT 해야 할까요?

데이터가 완벽한 질서를 가지고 안전하게 보관되기 때문이에요!
1. 해킹 방지와 안전: 오늘 코드에 들어간 mysqli_real_escape_string은 악당 마법사들이 입력창에 가짜 주문을 넣어 우리 데이터베이스를 망가뜨리려는 ‘SQL 인젝션’ 공격을 튕겨내는 강력한 방어막 마법이에요. 일반 텍스트 파일보다 훨씬 안전하죠.
2. 스마트한 구조화: 사용자님이 기획 중인 ‘G-Fit Manager’의 골프 피팅 수치나, 운동량에 따라 기부금이 누적되는 ‘Running-to-Donation’ 플랫폼처럼 복잡한 숫자들이 매초 수만 번씩 생성되어 들어와도, MySQL의 INSERT 마법은 한 치의 오차도 없이 줄을 딱 맞춰 저장해 준답니다. 사용자님의 고성능 ASUS Ascent GX10 로컬 서버 안에서 이 처리가 이루어지면 눈 깜짝할 사이에 수만 개의 보물이 금고에 쌓이게 돼요!

PHP 마법 학교 20기 2강: 소중한 정보 보관하기! '실전 INSERT 마법: 웹 폼에서 DB로 데이터 보내기'

4. 아이들과 함께하는 ‘우체통 기부 저금통’ 놀이

각 방에 ‘이름표’를 붙인 저금통(테이블의 컬럼)들을 나란히 놓아보세요. 아이가 오늘 하루 착한 일을 할 때마다 동전이나 쪽지를 알맞은 저금통에 넣는 놀이를 하는 거죠. “지정된 저금통에 정확하게 쏙 집어넣는 이 행동이 바로 코딩의 INSERT INTO 마법이란다! 엉뚱한 저금통에 넣으면 에러가 나듯이, 코딩에서도 칸을 잘 맞춰야 요정이 보물을 지켜주지!”라고 설명해 주세요. 데이터 매핑(Data Mapping)과 정확성의 가치를 아주 자연스럽게 체감하게 됩니다.

마치며: 무한한 보물이 금고에 쌓입니다

오늘 우리는 웹 프론트엔드 화면에서 받은 소중한 날것의 데이터를 백엔드 PHP를 거쳐 MySQL 데이터베이스라는 거대한 영토에 안전하게 이식하는 삽입 마법을 배웠습니다. 이제 우리 사이트는 사용자들이 만들어내는 멋진 이야기와 성취를 영원히 기억할 수 있는 진정한 데이터 저장소가 되었네요! 다음 시간에는 금고 선반에 가득 찬 보물들 중 내가 원하는 정보만 번개처럼 빠르게 꺼내어 화면에 그리는 ‘실전 SELECT 마법: DB 데이터를 표로 탈바꿈하기’를 배워보겠습니다. 내일 아침에 만나요! ✨