Veritabanı (SQL) Olmadan PHP ve CSS ile Üye Kayıt ve Giriş Sistemi Yapımı

Bir web projesi geliştirirken kullanıcı kayıt ve giriş (login/register) sistemi yapmak için her zaman ağır ve karmaşık SQL veritabanlarına (MySQL, PostgreSQL vb.) ihtiyacınız yoktur. Özellikle küçük projeler, okul ödevleri veya portfolyo siteleri için kullanıcı verilerini basit bir JSON dosyasında saklamak son derece pratik ve hızlı bir çözümdür.

Bu makalede, hiçbir veritabanı bağlantısı kurmadan, sadece PHP ve CSS kullanarak şık ve modern bir üyelik sistemini sıfırdan nasıl kodlayacağınızı adım adım gösteriyoruz.

Sistemin Çalışma Mantığı

Veritabanı kullanmadığımız için kullanıcıların belirlediği kullanıcı adı ve şifreleri sunucumuzdaki bir metin dosyasında (users.json) saklayacağız. PHP ile bu dosyayı okuyup yazarak kayıt ve giriş işlemlerini kontrol edeceğiz.

  • Kayıt (Register): Formdan gelen şifre güvenli bir şekilde şifrelenir (hash) ve yeni kullanıcı JSON dosyasına eklenir.
  • Giriş (Login): Formdan gelen bilgiler JSON dosyasındaki verilerle eşleştirilir. Doğruysa, bir PHP Session (oturum) başlatılır.

1. Adım: Şık Bir CSS ve HTML Formu Hazırlamak (index.php)

Kullanıcıların göreceği ön yüzü oluşturuyoruz. Basit ve modern bir görünüm için aşağıdaki HTML ve CSS yapısını kullanabilirsiniz:


<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Giriş ve Kayıt</title>
    <style>
        body { font-family: Arial, sans-serif; background-color: #2c3e50; color: #fff; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; }
        .form-container { background: #34495e; padding: 30px; border-radius: 10px; box-shadow: 0 4px 15px rgba(0,0,0,0.3); width: 300px; text-align: center; }
        input { width: 90%; padding: 10px; margin: 10px 0; border: none; border-radius: 5px; }
        button { width: 100%; padding: 10px; background: #f1c40f; border: none; border-radius: 5px; cursor: pointer; font-weight: bold; color: #2c3e50; }
        button:hover { background: #d4ac0d; }
    </style>
</head>
<body>
    <div class="form-container">
        <h2>Sisteme Giriş</h2>
        <form action="islem.php" method="POST">
            <input type="text" name="kullanici" placeholder="Kullanıcı Adı" required>
            <input type="password" name="sifre" placeholder="Şifre" required>
            <button type="submit" name="giris_yap">Giriş Yap</button>
            <br><br>
            <button type="submit" name="kayit_ol" style="background: #27ae60; color: white;">Kayıt Ol</button>
        </form>
    </div>
</body>
</html>
    

2. Adım: PHP ile JSON Üzerinden İşlemleri Yapmak (islem.php)

Form gönderildiğinde verileri alacak, JSON dosyamızı (veritabanı yerine geçen dosya) yönetecek PHP kodumuz. Not: Kodun bulunduğu dizinde users.json adında boş bir dosya oluşturun veya kodun oluşturmasına izin verin.


<?php
session_start();

$dosya_yolu = 'users.json';

// Dosya yoksa boş bir JSON formatıyla oluştur
if (!file_exists($dosya_yolu)) {
    file_put_contents($dosya_yolu, json_encode([]));
}

// Formdan gelen verileri al
$kullanici = $_POST['kullanici'] ?? '';
$sifre = $_POST['sifre'] ?? '';

// Mevcut kullanıcıları JSON dosyasından oku
$veri = file_get_contents($dosya_yolu);
$kullanicilar = json_decode($veri, true);

// KAYIT OLMA İŞLEMİ
if (isset($_POST['kayit_ol'])) {
    if (isset($kullanicilar[$kullanici])) {
        echo "Bu kullanıcı adı zaten alınmış!";
    } else {
        // Şifreyi güvenlik için hashliyoruz
        $kullanicilar[$kullanici] = password_hash($sifre, PASSWORD_DEFAULT);
        file_put_contents($dosya_yolu, json_encode($kullanicilar));
        echo "Kayıt başarılı! Şimdi giriş yapabilirsiniz.";
    }
}

// GİRİŞ YAPMA İŞLEMİ
if (isset($_POST['giris_yap'])) {
    if (isset($kullanicilar[$kullanici]) && password_verify($sifre, $kullanicilar[$kullanici])) {
        // Şifre eşleşti, oturum başlat
        $_SESSION['oturum_acik'] = true;
        $_SESSION['aktif_kullanici'] = $kullanici;
        header("Location: panel.php");
        exit();
    } else {
        echo "Hatalı kullanıcı adı veya şifre!";
    }
}
?>
    

3. Adım: Güvenli Yönetim Paneli (panel.php)

Giriş başarılı olduktan sonra kullanıcının yönlendirileceği ve oturum kontrolünün yapıldığı sayfa:


<?php
session_start();

// Kullanıcı giriş yapmamışsa index.php'ye geri gönder
if (!isset($_SESSION['oturum_acik'])) {
    header("Location: index.php");
    exit();
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Yönetim Paneli</title>
</head>
<body>
    <h1>Hoş Geldin, <?php echo htmlspecialchars($_SESSION['aktif_kullanici']); ?>!</h1>
    <p>Başarıyla giriş yaptınız. Veritabanı olmadan PHP ve JSON sistemi kusursuz çalışıyor.</p>
    <a href="cikis.php">Çıkış Yap</a>
</body>
</html>
    

Sıkça Sorulan Sorular

Bu yöntem büyük ve profesyonel projelerde kullanılır mı?

Hayır. JSON dosyasıyla veri saklamak küçük uygulamalar, demolar veya öğrenme aşaması için harikadır. Ancak aynı anda binlerce kişinin kayıt olduğu büyük bir e-ticaret sitesinde dosya okuma/yazma çakışmaları (race condition) yaşanabilir. Büyük projeler için her zaman MySQL veya PostgreSQL gibi gerçek veritabanları kullanılmalıdır.

Şifreleri JSON dosyasında düz metin olarak saklasam ne olur?

Çok büyük bir güvenlik açığı oluşturursunuz. JSON dosyanız bir şekilde dışarıdan erişilebilir hale gelirse, tüm kullanıcıların şifreleri çalınır. Bu yüzden kodumuzda password_hash() fonksiyonunu kullanarak şifreleri geri döndürülemez bir şekilde şifreledik.