Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Yan Yana Banner
Katılım
7 Nis 2025
Konular
367
Mesajlar
780
Çözümler
1
Tepkime puanı
121
Puan
93
Konum
İstanbul
Web sitesi
forumagel.com
Hazır Kod Bankası - Konu 7: PHP ile Veritabanı (MySQL) Bağlantısı ve Temel İşlemler



Hazır Kod Bankası Serimizin Yedinci Konusu: PHP ve Veritabanları Birleşiyor!

Merhaba arkadaşlar! Serimizin ilk altı konusunda HTML, CSS, VBA, VB.NET, PHP ve Veritabanı temellerini gördük. PHP ile sunucu tarafında kod yazabileceğimizi ve veritabanlarında veri saklayabileceğimizi artık biliyoruz. Şimdi sıra geldi bu iki gücü birleştirmeye: PHP ile bir veritabanına bağlanarak veri ekleme ve okuma işlemleri!

Modern dinamik web sitelerinin ve uygulamalarının büyük çoğunluğu, kullanıcı bilgilerini, içerikleri, siparişleri vb. saklamak için bir veritabanı kullanır ve bu veritabanıyla PHP gibi sunucu taraflı bir dil aracılığıyla etkileşime girer. Bu etkileşim; kullanıcı kaydı, giriş yapma, içerik yayınlama, ürün listeleme gibi pek çok işlemin temelini oluşturur.

Bu konuda, PHP kullanarak popüler bir veritabanı sistemi olan MySQL'e nasıl bağlanacağımızı, veritabanına nasıl veri ekleyeceğimizi (INSERT) ve veritabanından nasıl veri okuyup web sayfasında göstereceğimizi (SELECT) öğreneceğiz.

Önemli Ön Gereksinim: Bu konudaki örnekleri çalıştırabilmek için yerel sunucu ortamınızda (XAMPP, WAMP, MAMP vb.) MySQL veritabanı sunucusunun çalışıyor olması ve bir veritabanı ile örnek bir tablo oluşturmuş olmanız gerekmektedir. Genellikle bu paketlerle birlikte gelen phpMyAdmin gibi araçlar tablo oluşturmak için size yardımcı olacaktır.

Örneklerimiz için basit bir `kullanicilar` tablosu oluşturduğunuzu varsayalım. Tablonun yapısı şöyle olabilir (SQL komutu ile örneği aşağıda):

[SQL]
CREATE TABLE kullanicilar (
id INT AUTO_INCREMENT PRIMARY KEY,
ad VARCHAR(50) NOT NULL,
eposta VARCHAR(100) NOT NULL UNIQUE,
kayit_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
[/SQL]
Açıklama: Basit bir kullanıcı tablosu. `id` benzersiz anahtar, `ad` ve `eposta` metin alanları, `kayit_tarihi` ise otomatik dolan bir zaman damgasıdır.

1. Veritabanı Bağlantısı (MySQLi ile)

PHP'de MySQL veritabanına bağlanmak için en yaygın kullanılan yöntemlerden biri MySQLi (MySQL Improved) uzantısıdır. (Bir diğer modern ve esnek yöntem PDO'dur, ancak başlangıç için MySQLi daha basittir).

Bağlantı kurmak için sunucu adı, kullanıcı adı, şifre ve veritabanı adı gibi bilgilere ihtiyacınız olacak. Yerel test ortamlarında genellikle sunucu adı 'localhost', kullanıcı adı 'root', şifre ise boştur (veya kurulumda belirlediğinizdir).

İşte bağlantı kodu:

PHP:
<?php
$servername = "localhost"; // Sunucu adı
$username = "root";     // Veritabanı kullanıcı adı
$password = "";         // Veritabanı şifresi (yerel test için boş olabilir)
$dbname = "test_db";    // Kullanacağınız veritabanının adı (siz kendi oluşturduğunuzu yazın)

// Veritabanı bağlantısını oluşturma
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Bağlantıyı kontrol etme
if (!$conn) {
    die("Bağlantı Başarısız: " . mysqli_connect_error());
}
echo "Veritabanı Bağlantısı Başarılı";

// Bağlantıyı kapatma (genellikle sayfa sonunda yapılır)
// mysqli_close($conn);
?>
Açıklama: `mysqli_connect()` fonksiyonu bağlantıyı dener ve bir bağlantı nesnesi döndürür. Eğer bağlantı kurulamadıysa `false` döner. `mysqli_connect_error()` hata mesajını verir. `die()` fonksiyonu hata durumunda betiği durdurur.

2. Veritabanına Veri Ekleme (INSERT)

Veritabanına yeni bir kayıt eklemek için SQL'in `INSERT INTO` komutunu kullanırız. PHP'de bu SQL komutunu bir metin değişkenine atar ve `mysqli_query()` fonksiyonu ile çalıştırırız.

PHP:
<?php
// ... (Önceki bağlantı kodları buraya gelecek) ...
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("Bağlantı Başarısız: " . mysqli_connect_error());
}

// Eklenecek veri
$eklenecek_ad = "Ayşe";
$eklenecek_eposta = "[email protected]";

// SQL komutu
$sql = "INSERT INTO kullanicilar (ad, eposta) VALUES ('$eklenecek_ad', '$eklenecek_eposta')";

// SQL komutunu çalıştırma
if (mysqli_query($conn, $sql)) {
    echo "Yeni kayıt başarıyla eklendi";
} else {
    echo "Hata: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>
Açıklama: `$sql` değişkeni çalıştırılacak SQL komutunu tutar. `mysqli_query($conn, $sql)` komutu SQL'i veritabanında çalıştırır. Başarılı olursa `true`, başarısız olursa `false` döner. Hata durumunda `mysqli_error()` ile detayı alabiliriz. Güvenlik Notu: Yukarıdaki direkt değişken kullanımı SQL Injection riskini taşır. Gerçek uygulamalarda Prepared Statements kullanılmalıdır, bu başlangıç seviyesi için basit bir örnektir.

3. Veritabanından Veri Okuma (SELECT)

Veritabanından bilgi almak için SQL'in `SELECT` komutunu kullanırız. PHP'de yine `mysqli_query()` fonksiyonunu kullanırız ancak `SELECT` sorguları bir sonuç kümesi (result set) döndürür. Bu kümeden verileri alıp işlememiz gerekir.

PHP:
<?php
// ... (Önceki bağlantı kodları buraya gelecek) ...
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("Bağlantı Başarısız: " . mysqli_connect_error());
}

// SQL komutu (Tüm kullanıcıları seç)
$sql = "SELECT id, ad, eposta, kayit_tarihi FROM kullanicilar";
$result = mysqli_query($conn, $sql);

// Sonuç kontrolü ve veriyi ekrana yazdırma
if (mysqli_num_rows($result) > 0) {
    // Her satırı döngü ile al ve ekrana yazdır
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Ad: " . $row["ad"]. " - Eposta: " . $row["eposta"]. " - Kayıt Tarihi: " . $row["kayit_tarihi"]. "<br>";
    }
} else {
    echo "Veritabanında hiç kullanıcı bulunamadı.";
}

mysqli_close($conn);
?>
Açıklama: `mysqli_query()` `SELECT` sorgusunda başarılı olursa bir sonuç nesnesi (`$result`) döndürür. `mysqli_num_rows($result)` sonuç kümesindeki satır sayısını verir. `while($row = mysqli_fetch_assoc($result))` döngüsü, sonuç kümesindeki tüm satırları tek tek alır. `mysqli_fetch_assoc()` her satırı sütun adlarını anahtar (`$row["id"]`, `$row["ad"]`) alan ilişkisel bir dizi (associative array) olarak döndürür. Döngü bittiğinde `false` döndürerek dururuz.

4. Tam Bir Örnek: Veri Ekleme Formu ve Listeleme (Tek Sayfada)

Şimdi hem veri eklemek için basit bir form hem de mevcut verileri listeleyen bir yapı kuralım. Bu örneği tek bir `.php` dosyası içinde yapacağız.

PHP:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>PHP ve MySQL Örneği</title>
    <style>
        table, th, td { border: 1px solid black; border-collapse: collapse; padding: 8px; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>

    <h1>Kullanıcı Yönetimi (Basit Örnek)</h1>

    [B]<?php[/B]
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "test_db"; // Kendi veritabanı adınız

    // Veritabanı bağlantısını oluştur
    $conn = mysqli_connect($servername, $username, $password, $dbname);

    // Bağlantıyı kontrol et
    if (!$conn) {
        die("Bağlantı Başarısız: " . mysqli_connect_error());
    }

    // **** Veri Ekleme İşlemi ****
    // Form POST metodu ile gönderildiyse işlemi yap
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Formdan gelen verileri al
        $yeni_ad = $_POST['form_ad'];
        $yeni_eposta = $_POST['form_eposta'];

        // SQL komutu (Veri ekleme)
        // Güvenlik Notu: Bu yöntem SQL Injection'a açıktır, gerçek projede Prepared Statements kullanılmalıdır!
        $insert_sql = "INSERT INTO kullanicilar (ad, eposta) VALUES ('$yeni_ad', '$yeni_eposta')";

        if (mysqli_query($conn, $insert_sql)) {
            echo "<p style='color:green;'>Yeni kullanıcı başarıyla eklendi.</p>";
        } else {
            echo "<p style='color:red;'>Kullanıcı eklenirken hata oluştu: " . mysqli_error($conn) . "</p>";
        }
    }
    [B]?>[/B]

    [SIZE=4][B]Yeni Kullanıcı Ekle[/B][/SIZE]
    <form action="" method="POST"> Ad: <input type="text" name="form_ad" required><br><br>
        E-posta: <input type="email" name="form_eposta" required><br><br>
        <input type="submit" value="Kaydet">
    </form>

    <hr>

    [SIZE=4][B]Kullanıcı Listesi[/B][/SIZE]
    [B]<?php[/B]
    // **** Veri Okuma (Listeleme) İşlemi ****
    $select_sql = "SELECT id, ad, eposta, kayit_tarihi FROM kullanicilar";
    $result = mysqli_query($conn, $select_sql);

    if (mysqli_num_rows($result) > 0) {
        // Verileri tablo formatında göster
        echo "<table>";
        echo "<tr><th>ID</th><th>Ad</th><th>E-posta</th><th>Kayıt Tarihi</th></tr>";
        while($row = mysqli_fetch_assoc($result)) {
            echo "<tr>";
            echo "<td>" . $row["id"] . "</td>";
            echo "<td>" . $row["ad"] . "</td>";
            echo "<td>" . $row["eposta"] . "</td>";
            echo "<td>" . $row["kayit_tarihi"] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
    } else {
        echo "Veritabanında kayıtlı kullanıcı bulunamadı.";
    }

    // Veritabanı bağlantısını kapat
    mysqli_close($conn);
    [B]?>[/B]

</body>
</html>
Bu kodu bir metin düzenleyiciye yapıştırın, veritabanı bilgilerinizi (dbname, username, password) güncelleyin ve "kullanicilar.php" gibi bir isimle kaydedin. Yerel sunucunuzun web klasörüne koyup tarayıcıdan bu dosyaya eriştiğinizde hem ekleme formunu hem de mevcut kullanıcı listesini göreceksiniz. Forma bilgi girip Kaydet'e tıkladığınızda sayfa yenilenecek ve yeni kullanıcı listeye eklenecektir.

Sıra Sizde!

Yerel sunucunuzda MySQL çalışıyor mu? phpMyAdmin gibi bir araçla `test_db` (veya kendi belirlediğiniz isimde) veritabanını ve `kullanicilar` tablosunu oluşturdunuz mu? Bağlantı kodunu kendi bilgilerinizle güncelleyip çalıştırabildiniz mi? Yukarıdaki tam örneği çalıştırıp veri eklemeyi ve listelemeyi denediniz mi?

PHP-MySQL bağlantısı, INSERT/SELECT sorguları veya hata mesajları hakkında aklınıza takılan her türlü soruyu bu konu altında sorabilirsiniz. Bu temel bilgilerle veri güncelleme (UPDATE) ve silme (DELETE) işlemlerini de SQL bilginizi kullanarak kendiniz denemeye çalışabilirsiniz!

Serinin Geleceği?

PHP ile veritabanı etkileşiminin temellerini görerek web uygulaması geliştirmenin çok önemli bir katmanına giriş yapmış olduk. Serinin bu noktadan sonra nasıl devam etmesini istersiniz?

  • PHP & MySQL'de daha ileri konular (JOIN sorguları, Prepared Statements, kullanıcı giriş/kayıt sistemi vb.)?
  • Yeni bir dil/teknoloji (JavaScript, Python, Node.js vb.)?
  • Mobil geliştirme temelleri (Android/iOS)?
  • Veya başka önerileriniz mi var?
Geri bildirimleriniz ve önerileriniz serinin yönünü belirleyecektir.

Bu konuya kadar olan tüm katılımlarınız için teşekkür ederim. Umarım bu serinin ilk 7 konusu sizlere faydalı olmuştur.

Görüşmek üzere!


Bu konu, "Hazır Kod Bankası" serisinin yedinci parçasıdır ve "Yazılım Bilgi ve Yeni Başlayanlar İçin" kategorisi altında paylaşılmıştır.
 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri