توی دنیای توسعه وب، یکی از پایه ترین مهارت ها، توانایی دریافت اطلاعات از کاربر و ذخیره امن اون تو پایگاه داده ست. اما خوبه که بدونی اجرای درست این کار، فقط به نوشتن یک دستور INSERT خلاصه نمیشه. توی این راهنما هم یاد می گیری چطوری افزودن رکورد به پایگاه داده MySQL با PHP انجام بدی، هم با مفاهیم امنیتی، شیوه های استاندارد کدنویسی، و دیدگاه هایی آشنا میشی که تو منابع سطحی تر کمتر راجب به اونا صحبت شده.
📌 چرا این آموزش متفاوته؟
ما در این مقاله در مورد موارد زیر هم قراره بحث کنیم:
- تفاوتهای PDO و mysqli با دید امنیتی و معماری
- کنترل خطا به روش درست (نمایش عمومی + لاگ حرفه ای)
- جلوگیری از SQL Injection بر اساس استانداردهای OWASP
- اعتبارسنجی داده ها بر اساس نوع، ساختار و زمینه استفاده
- مسیری برای ورود به مفاهیم پیشرفته تر مثل ORM و معماری MVC
نحوه اضافه کردن رکورد در دیتابیس
پیش نیازها: چی باید آماده باشه؟
برای اجرای کدها، به این موارد نیاز داری:
یک وبسرور مثل XAMPP/LAMP
PHP نسخه 7.4 یا بالاتر
MySQL و ساخت یک جدول ساده
🎯 نمونه ساخت جدول:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
مرحله اول: اتصال به دیتابیس با PDO
استفاده از PDO نه تنها امنیت بیشتری داره، بلکه شما رو آماده کار با معماری های مدرن تر (مثل MVC یا ORM ها) می کنه:
<?php $host = '127.0.0.1'; $db = 'my_database'; $user = 'root'; $pass = ''; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); } catch (PDOException $e) { http_response_code(500); error_log("DB Error: " . $e->getMessage()); die("Service temporarily unavailable."); } ?>
به جای اینکه خطا رو مستقیم نمایش بدی، از کد وضعیت HTTP مناسب استفاده کن و همچنین خطا رو تو لاگ ثبت کن.
مرحله دوم: طراحی فرم HTML + اعتبارسنجی اولیه
<form action="register.php" method="POST"> <input type="text" name="name" placeholder="Full Name" required> <input type="email" name="email" placeholder="Email" required> <input type="password" name="password" placeholder="Password" required> <button type="submit">Register</button> </form>
تو دنیای واقعی، فرم باید با اقدامات امنیتی مثل CSRF token و ریکپچا ترکیب بشه.
مرحله سوم: اعتبارسنجی، پاکسازی و همچنین نوشتن داده
<?php require 'db.php'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $name = trim(filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS)); $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); $password = $_POST['password'] ?? null; if ($name && $email && $password && strlen($password) >= 6) { $hashedPassword = password_hash($password, PASSWORD_BCRYPT); try { $stmt = $pdo->prepare("INSERT INTO users (name, email, password) VALUES (?, ?, ?)"); $stmt->execute([$name, $email, $hashedPassword]); echo "Registration successful."; } catch (PDOException $e) { if ($e->getCode() == 23000) { echo "This email is already registered."; } else { error_log($e->getMessage()); echo "An unexpected error occurred."; } } } else { echo "Please enter valid information."; } } ?>
نکات امنیتی حرفه ای (مطابق با OWASP)
برای امن سازی پروژه های واقعی، این توصیه ها رو جدی بگیر:
از prepared statements استفاده کن (همیشه، نه فقط برای فرم های ورود)
داده ها را هم قبل از ورود و هم قبل از نمایش پاکسازی کن
رمز عبور ررو هیچوقت به صورت plain در دیتابیس ذخیره نکن
از توکن CSRF در فرم ها استفاده کن (برای جلوگیری از ارسال مخفی فرم ها)
گزارش خطا رو تو فایل لاگ امن ذخیره کن، نه در خروجی به کاربر
حتماً SSL فعال باشه (مخصوصاً در پروژه های عملیاتی)
💡 تحلیل: چرا معماری مهمه؟
ممکنه این اسکریپت ساده باشه، ولی در پروژه های واقعی، باید کدت رو با معماری هایی مثل MVC یا حتی فریم ورک هایی مثل Laravel توسعه بدی.
مثلاً:
- فایل های مدل (Model) برای تعامل با دیتابیس
- فایل کنترلر (Controller) برای پردازش درخواست ها
- ویو ها (View) برای نمایش فرم و پیام ها
این ساختار باعث میشه پروژه هات مقیاس پذیر، قابل تست، و نگهداری پذیر باشن.
جمع بندی نهایی
افزودن رکورد به پایگاه داده کاری فراتر از اجرای یک دستور ساده SQL است. تو این آموزش:
- یاد گرفتی چطور از PDO برای اتصال امن استفاده کنی
- فرم HTML ساختی که داده رو دریافت کنه
- اطلاعات رو اعتبارسنجی و پاکسازی کردی
- داده رو به صورت کاملا امن وارد پایگاه داده کردی
اما مهمتر از همه، سعی کردیم نگاه حرفهای تری به موضوع داشته باشیم، چون برنامه نویس خوب کسیه که علاوه بر «چگونه؟»، به «چرا؟» و «چطور بهتر؟» هم فکر میکنه.
البته این فقط شروع کاره! پشت همین عملیات ساده کلی نکته مهم مثل امنیت، اعتبارسنجی داده ها و بهینه سازی وجود داره. پیشنهاد می کنم اگه جدی دنبال یادگیری هستی، حتماً یه نگاهی هم به مفاهیمی مثل جلوگیری از SQL Injection، استفاده از PDO یا MySQLi و اعتبارسنجی ورودی کاربر بندازی!