Php 8 Çoka Çok Tablo Tasarımı

Php 8 Çoka Çok Tablo Tasarımı

PHP 8 ile çoka çok ilişki (many-to-many relationship) tablosu tasarımı, genellikle iki tablo arasında bağlantı kurmak için bir üçüncü tablo kullanmayı içerir. Bu örnekte, "kurslar" ve "kategoriler" tabloları arasındaki çoka çok ilişkisini nasıl kuracağınızı göstereceğim.

1. Veritabanı Tablolarını Oluşturma

Öncelikle, aşağıdaki tabloları oluşturmalısınız:

Kategoriler Tablosu

CREATE TABLE kategoriler ( id INT AUTO_INCREMENT PRIMARY KEY, isim VARCHAR(100) NOT NULL );

Kurslar Tablosu

CREATE TABLE kurslar ( id INT AUTO_INCREMENT PRIMARY KEY, isim VARCHAR(100) NOT NULL, aciklama TEXT, fiyat DECIMAL(10, 2) );

Kurs Kategori İlişkisi Tablosu

Çoka çok ilişkiyi kurmak için, bir "kurs_kategori" tablosu oluşturmalısınız:

CREATE TABLE kurs_kategori ( kurs_id INT, kategori_id INT, PRIMARY KEY (kurs_id, kategori_id), FOREIGN KEY (kurs_id) REFERENCES kurslar(id) ON DELETE CASCADE, FOREIGN KEY (kategori_id) REFERENCES kategoriler(id) ON DELETE CASCADE );

2. Tablo Açıklamaları

  • kategoriler Tablosu: Kategorilerin bilgilerini saklar. Her kategori bir ID'ye sahiptir.

  • kurslar Tablosu: Kursların bilgilerini saklar. Her kurs da bir ID'ye sahiptir.

  • kurs_kategori Tablosu: Bu tablo, her kursun hangi kategorilere ait olduğunu belirtir. kurs_id ve kategori_id alanları, kurslar ve kategoriler tablolarındaki ID'lere referans eder. Bu alanlar, aynı zamanda birincil anahtar olarak da tanımlanmıştır, böylece aynı kurs ve kategori için birden fazla kayıt olamaz.

3. PHP ile Veri Ekleme

Kurs ve kategori eklemek için basit bir form oluşturalım ve ardından ilişkileri ekleyecek bir PHP dosyası yazalım.

HTML Formu (kurs_ekle_form.php)

<!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Kurs Ekle</title> </head> <body> <h1>Kurs Ekle</h1> <form action="kurs_ekle.php" method="post"> <label for="isim">Kurs İsmi:</label> <input type="text" id="isim" name="isim" required> <br> <label for="aciklama">Açıklama:</label> <textarea id="aciklama" name="aciklama" required> </textarea> <br> <label for="fiyat">Fiyat:</label> <input type="number" id="fiyat" name="fiyat" step="0.01" required> <br> <label for="kategori">Kategori Seç:</label> <select id="kategori" name="kategori_id[]" multiple required> <?php // Kategorileri veritabanından al $conn = new mysqli("localhost", "kullanici_adiniz", "sifreniz", "veritabani_adiniz"); $result = $conn->query("SELECT id, isim FROM kategoriler"); while ($row = $result->fetch_assoc()) { echo "<option value='" . $row['id'] . "'>" . $row['isim'] . "</option>"; } $conn->close(); ?> </select> <br> <input type="submit" value="Ekle"> </form> </body> </html>

PHP Kodu (kurs_ekle.php)

<?php // Veritabanı bağlantısı $servername = "localhost"; $username = "kullanici_adiniz"; $password = "sifreniz"; $dbname = "veritabani_adiniz"; // Bağlantıyı oluştur $conn = new mysqli($servername, $username, $password, $dbname); // Bağlantıyı kontrol et if ($conn->connect_error) { die("Bağlantı başarısız: " . $conn->connect_error); } // Formdan gelen verileri kontrol et if ($_SERVER["REQUEST_METHOD"] == "POST") { $isim = $_POST['isim']; $aciklama = $_POST['aciklama']; $fiyat = $_POST['fiyat']; $kategori_ids = $_POST['kategori_id']; // Kursu ekle $stmt = $conn->prepare("INSERT INTO kurslar (isim, aciklama, fiyat) VALUES (?, ?, ?)"); $stmt->bind_param("ssd", $isim, $aciklama, $fiyat); if ($stmt->execute()) { $kurs_id = $stmt->insert_id; // Yeni eklenen kursun ID'sini al // Seçilen kategorileri ekle foreach ($kategori_ids as $kategori_id) { $stmt2 = $conn->prepare("INSERT INTO kurs_kategori (kurs_id, kategori_id) VALUES (?, ?)"); $stmt2->bind_param("ii", $kurs_id, $kategori_id); $stmt2->execute(); $stmt2->close(); } echo "Yeni kurs ve kategorileri eklendi!"; } else { echo "Kurs eklenemedi: " . $stmt->error; } // Sorgu nesnesini kapat $stmt->close(); } // Bağlantıyı kapat $conn->close(); ?>

4. Açıklama

  • HTML Formu: Kullanıcıdan kurs ismini, açıklamasını, fiyatını ve kategorilerini alır. Kategoriler, çoklu seçim yapılabilecek bir select kutusunda gösterilir (multiple özelliği ile).

  • PHP Kodu: Formdan gelen verileri alır, önce kursu kurslar tablosuna ekler. Ardından, seçilen kategori ID'lerini kurs_kategori tablosuna ekleyerek kursun hangi kategorilere ait olduğunu belirtir.

5. Kullanım

  1. kategoriler tablosuna birkaç kategori eklemelisiniz.
  2. Yukarıdaki HTML formunu bir dosyaya (örneğin, kurs_ekle_form.php) kaydedin.
  3. PHP kodunu başka bir dosyaya (örneğin, kurs_ekle.php) kaydedin.
  4. Web sunucunuzda bu dosyaları çalıştırarak kurs ekleme ve kategori atama işlemini deneyin.

Bu adımlarla, kurslar ile kategoriler arasında çoka çok ilişkiyi yönetebileceğiniz bir uygulama oluşturmuş oldunuz.



Yorum Ekle

Üzerine gel