Posted in

PHP İle Güvenli Form İşleme ve MySQL’e Veri Ekleme: Örnek Çalışma

Web uygulamalarında, kullanıcıların veri girişi yapabileceği formlar sıkça kullanılır. Bu yazıda, PHP ve MySQL kullanarak bir form oluşturmayı ve bu formdan gelen verileri güvenli bir şekilde veritabanına eklemeyi adım adım göstereceğiz. Ayrıca, Bootstrap ile formun görünümünü iyileştireceğiz.

HTML Form Oluşturma İlk olarak, Bootstrap kullanarak öğrenci ekleme formunu oluşturuyoruz. Bu form, öğrencinin adını, soyadını ve telefon numarasını girmesini ve veritabanına kaydetmesini sağlar.

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Öğrenci Ekle</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-dark w-75 mx-auto my-4">
<div class="card">
    <div class="card-body">
        <h1 class="text-center mt-1">ÖĞRENCİ EKLE</h1>
        <form method="post" class="row">
            <div class="col-sm-6">
                <input type="text" required name="name" placeholder="Öğrenci Adı" class="form-control my-2">
            </div>
            <div class="col-sm-6">
                <input type="text" required name="lastname" placeholder="Öğrenci Soyadı" class="form-control my-2">
            </div>
            <div class="col-sm-12">
                <input type="text" required name="phone" placeholder="Öğrenci Telefonu" class="form-control my-2">
            </div>
            <div class="col-sm-12">
            <?php
            if (
                $_SERVER["REQUEST_METHOD"] == "POST" &&
                !empty($_POST["name"]) &&
                !empty($_POST["lastname"]) &&
                !empty($_POST["phone"])
            ) {
                // Veritabanı bağlantısı için gerekli bilgiler
                $servername = "localhost";
                $username = "root";
                $password = ""; // Use a strong password
                $dbname = "exzample";

                try {
                    // Veritabanına bağlanma işlemleri
                    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
                    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                    // Formdan gelen verileri al ve doğrula
                    $ad = htmlspecialchars($_POST["name"]);
                    $soyad = htmlspecialchars($_POST["lastname"]);
                    $telefon = htmlspecialchars($_POST["phone"]);

                    // Verileri ekleme sorgusu
                    $sql =
                        "INSERT INTO `students` (`name`, `lastname`, `phone`) VALUES (:name, :lastname, :phone)";
                    $stmt = $conn->prepare($sql);
                    $stmt->bindParam(":name", $ad);
                    $stmt->bindParam(":lastname", $soyad);
                    $stmt->bindParam(":phone", $telefon);
                    $stmt->execute();

                    echo "<div class='alert alert-success mt-2 mb-0'>Veri başarıyla eklendi!</div>";
                } catch (PDOException $e) {
                    echo "<div class='alert alert-danger mt-2 mb-2'>Veritabanı bağlantı hatası: " . $e->getMessage() . "</div>";
                }
            }
            ?>
            </div>
            <div class="container">
                <button class="btn btn-success w-100 mt-2" type="submit">EKLE</button>
            </div>
        </form>
    </div>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Veri Ekleme Kodu: Aşağıdaki PHP kodu, formdan gelen ad, soyad ve telefon numarası gibi bilgileri alır, bu bilgileri güvenli hale getirir ve ardından MySQL veritabanına ekler. Kod, kullanıcıdan gelen verileri doğrulamak ve güvenli bir şekilde işlemek için çeşitli önlemler içerir.


<?php
if (
    $_SERVER["REQUEST_METHOD"] == "POST" &&
    !empty($_POST["name"]) &&
    !empty($_POST["lastname"]) &&
    !empty($_POST["phone"])
) {
    // Veritabanı bağlantısı için gerekli bilgiler
    $servername = "localhost";
    $username = "root";
    $password = ""; // Use a strong password
    $dbname = "exzample";

    try {
        // Veritabanına bağlanma işlemleri
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // Formdan gelen verileri al ve doğrula
        $ad = htmlspecialchars($_POST["name"]);
        $soyad = htmlspecialchars($_POST["lastname"]);
        $telefon = htmlspecialchars($_POST["phone"]);

        // Verileri ekleme sorgusu
        $sql =
            "INSERT INTO `students` (`name`, `lastname`, `phone`) VALUES (:name, :lastname, :phone)";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(":name", $ad);
        $stmt->bindParam(":lastname", $soyad);
        $stmt->bindParam(":phone", $telefon);
        $stmt->execute();

        echo "<div class='alert alert-success mt-2 mb-0'>Veri başarıyla eklendi!</div>";
    } catch (PDOException $e) {
        echo "<div class='alert alert-danger mt-2 mb-2'>Veritabanı bağlantı hatası: " . $e->getMessage() . "</div>";
    }
}
?>

Bu kod, aşağıdaki güvenlik önlemlerini içerir:

  1. Form Verilerini Doğrulama: POST yöntemi kullanılarak form gönderildiğinde, ad, soyad ve telefon numarası alanlarının boş olup olmadığı kontrol edilir.
  2. PDO Kullanımı: PDO (PHP Data Objects) kullanılarak veritabanına bağlanır. Bu, SQL enjeksiyonu saldırılarına karşı korunma sağlar.
  3. htmlspecialchars() Kullanımı: Formdan gelen veriler, HTML özel karakterleri için güvenli hale getirilir. Bu, XSS (Cross-Site Scripting) saldırılarına karşı koruma sağlar.
  4. Bağlantı ve Sorgu Hatalarının İzlenmesi: Bağlantı ve sorgu işlemlerinde oluşabilecek hataların izlenmesi ve kullanıcıya uygun bir hata mesajı gönderilmesi sağlanır.

Bu şekilde PHP kodunun güvenli bir şekilde form verilerini işlediğini ve MySQL veritabanına güvenli bir şekilde eklediğini görebilirsiniz. Bu önlemler, uygulamanızın güvenliğini artırmaya yardımcı olur.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir