Php İlişkisel Tabloya Veri Ekleme

Merhabalar bu yazıyı 3.kez yazıyorum.Çünkü her seferinde sunucudan kaynaklı problemlerden dolayı yeniden kurulum yaptım ve bu yazıyı kaybettim.Neyse 3. ve son kez bu yazıyı yazıyorum.

Bu yazımda Php ile birbiri arasında ilişki olan tablolarda veriler nasıl eklenir mantığı nedir onu yazacağım.Diyelim ki iki adet tablomuz var.Bu tablolar bilgiler ve ülkeler tablosu olsun.Bilgiler tablosunda kayıtlı olanların ülkeler tablosu ile bire bir ilişkisi olsun.Yani bilgileri bulunan kişilerin ülkesi olduğunu varsayalım ve bunu da farklı tabloda tutup ilişki verdiğimizi varsayalım.Sizde kendi senaryonuza göre tablolar oluşturup bu senaryoya göre işlemler yapabilirsiniz.

Öncelikle tabloları oluşturalım.Bilgiler ve ülkeler tablosunun sql cümlelerini aşağıya yazıyorum.

Bilgiler Tablosu

create table bilgiler
(
    id       int auto_increment
        primary key,
    ad  varchar(20) not null,
    soyad  varchar(20) not null,
    ulkeler_id int not null
);

Ülkeler Tablosu

create table ulkeler
(
    id   int auto_increment
        primary key,
    ulke varchar(50) not null
);

Tabloları oluşturduktan sonra tabloları birbirine bağlamak için foreign key (ikincil anahtar) kullanıyoruz.Bilgiler tablosunda ulkeler_id alanı ile ulkeler tablosunda ki i alanını birbirine bağlamamız gerekiyor.

alter table bilgiler
   add constraint bilgiler_ulkeler_id_fk
      foreign key (ulkeler_id) references ulkeler (id);

Bu sql ile de bilgiler tablosuna ikincil anahtar ekleyip ülkeler tablosu ile bağladım.Şimdi sıra kodlama kısmına geldi.Önceki yazılarımdan farklı olarak sadece ülke ekledim.O yüzden eski yazılarımda anlattıklarımı bir kere daha anlatmayacağım.Alta linkleri bırakıyorum ordan bakabilirsiniz.

https://fatihdemirag.net/php-pdo-veri-ekleme-ve-listeleme/

 

https://fatihdemirag.net/php-mysql-kayit-ekleme-ve-listeleme/

 

Öncelikle verileri ekleyeceğimiz görünüm sayfasını yapalım.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.6/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <form action="ekle.php" method="post" class="form-control">
        <input type="text" placeholder="Ad" name="ad" class="form-control">
        <input type="text" placeholder="Soyad" name="soyad" class="form-control">

        <select name="ulkeId" class="form-control">
            <?php
            $db=new PDO("mysql:host=localhost;dbname=dbAdi;charset=utf8","dbKullaniciAdi","dbSifre");


            $sql=$db->query("select * from ulkeler",PDO::FETCH_ASSOC);

            foreach ($sql as $satir) {
                echo "<option value='$satir[id]'>".$satir["ulke"]."</option>";
            }



            ?>
        </select>

        <input type="submit" value="Kaydet">

    </form>
</div>
</div>
</body>
</html>

Bu sayfada  farkettiyseniz select ile ülkeleri yazdırdım.Burda önemli noktalardan birisi ise select etiketinin name özelliğidir.Çünkü bununla veriyi alacağız.Burda yapmak istediğimiz şey ise ön planda ülkenin adı görünürken arka tarafta biz ülkenin id değerini ekleyeceğiz.Onun için ise option etiketinin value değerini ülkenin id’si yapıyoruz.Görünen kısmını ise ülkenin adı yapıyoruz.Görüntümüz aşağıdaki şekilde oluşacaktır.Tabi daha önceden ülkeler tablosuna ülke eklemiz gerekiyor yoksa ekleme yaparken hata alabiliriz.

 

 

 

Konsolda baktığımız zaman option etiketini değerini ülkenin id’si olarak aldığını görebilirsiniz.

Daha sonra ise ekleme sayfasının kodlarını yazalım.

<?php
try{

    $db=new PDO("mysql:host=localhost;dbname=dbAdi;charset=utf8","dbKullaniciAi","dbSifre");

    $ad=$_POST["ad"];
    $soyad=$_POST["soyad"];
    $ulkeId=$_POST["ulkeId"];


    $sql = $db->prepare("insert into bilgiler set ad=:ad,soyad=:soyad,ulkeler_id=:ulkeId");
    $ekle = $sql->execute(array(
        "ad" => $ad,
        "soyad" => $ad,
        "ulkeId" => $ulkeId,
    ));
    if ($ekle)
        echo "Kayıt eklendi";
    else
        echo "Kayıt eklenemedi";
}
catch (PDOException $exception)
{
    print $exception->getMessage();
}

?>

Ülkenin id’sini select etiketinin name özelliği olan ‘ulkeId’ ile aldık.Option değeri id olduğu için veriyi gönderdiğimiz zaman ülkenin id’si gelecektir.Verileri kaydet dediğimizde ise veritabanında ulkeler_id kısmında ülkenin id değerinin yazdığı yeri görmüş olacağız.

 

Bu arada kişisel blogumun uygulamasını yaptım.Şimdilik sadece Google Play’de fakat ilerde App Store’a da koyacağım.Şu an ikisi için de uyumlu şekildedir.İndirmek isterseniz aşağıya linkini bırakıyorum.

https://play.google.com/store/apps/details?id=net.fatihdemirag.fatihdemirag

 

Yukarı Çık
Size nasıl yardımcı olabilirim ?