• 18-09-2020, 10:50:31
    #1
    Merhabalar,

    Belki de basit bir şey ama nedense dünden beri bir şeyleri atlıyorum ve başarılı çalıştıramıyorum.

    Şimdi şöyle, bir ayarlar sayfamız var. Bu ayarlar sayfasında mail adresi ad soyad telefon numarası düzenleme vs var. Bunlar başarılı bir şekilde update ediliyor. Aynı formda sosyal medya hesap bölümü de var.
    İlerleyen zamanlarda yeni platform eklenebilir diye sosyal medya platformlarını "platforms" isimli bir veritabanı tablosunda tutuyorum. Tablo aşağıdaki şekilde:

    Kullanıcıların girdiği sosyal medya platform linklerini de "userSocial" isimli tabloda tutuyorum. "userSocial.platform" ile "platforms.id" birbiri ile ilişkili. "userSocial" tablosu:

    Ayarlar sayfasında, platforms tablosundaki her şeyi çekip input şeklinde yazdırıyorum. Inputların name değeri platforms.inpname değeri ile eşit.

    Bu şekilde görünüyor.
    Buraya kadar her şey harika. Şimdi benim yapmaya çalıştığım şeyler şunlar:
    1. Eğer input value boş geldiyse, o platform değeriyle veritabanına bak, satır varsa sil. yoksa boş geç.
    2. Eğer input dolu geldiyse, veritabanında o platformun değerini kontrol et; yoksa ekle, varsa güncelle.
    Yazdığım kod:
    https://paste.ubuntu.com/p/j57jvRWpmZ/
     $sosyalGetir = $baglan->query("SELECT * FROM platforms");
    foreach ($sosyalGetir as $sosyal) {
    $sosyalid = $sosyal["id"];
    $sosyalName = $sosyal["inpname"];
    $sosyalNameVal = $_POST[$sosyalName];
    echo "---------ust kısım ----------v <br>";
    echo $sosyalid."<br>";
    echo $sosyalName."<br>";
    echo $sosyalNameVal."<br>";
    echo "---------ust kısım ----------v <br>";
    if ($sosyalNameVal != "") {
    $userKontrolEt = 1;
    $userSosyalKontrol = $baglan->query("SELECT * FROM userSocial WHERE type = 1 AND platform = '$sosyalid' AND userid = '$userid'")->fetch(PDO::FETCH_ASSOC);
    if ($userSosyalKontrol["id"] != 0){
    echo $sosyalid."<br>";
    echo $sosyalName."<br>";
    echo $sosyalNameVal."<br>";
    echo "update yapılacak <br>";
    
    $sosyalUpdateSorgu = $baglan->prepare("UPDATE userSocial SET
    platform = ?,
    type = ?,
    url = ?
    WHERE type = 1 AND userid = ?");
    $sosyalUpdate = $sosyalUpdateSorgu->execute(array(
    $sosyalid, 1, $sosyalNameVal, $userid
    ));
    if ( $sosyalUpdate ){
    echo "update yapıldı";
    continue;
    }
    
    
    }else{
    echo $sosyalid."<br>";
    echo $sosyalName."<br>";
    echo $sosyalNameVal."<br>";
    echo "insert yapılacak <br>";
    $sosyalInsertSorgu = $baglan->prepare("INSERT INTO userSocial SET
    platform = ?,
    url = ?,
    type = 1,
    userid = ?");
    $sosyalInsert = $sosyalInsertSorgu->execute(array(
    $sosyalid, $sosyalNameVal, $userid
    ));
    if ( $sosyalInsert ){
    echo "$sosyalNameVal";
    echo "insert yapıldı";
    continue;
    }
    
    }
    }else{
    $userSosyalKontrol = $baglan->query("SELECT * FROM userSocial WHERE type = 1 AND platform = '$sosyalid' AND userid = '$userid'")->fetch(PDO::FETCH_ASSOC);
    if ($userSosyalKontrol["id"] != 0){
    echo $sosyalid."<br>";
    echo $sosyalName."<br>";
    echo $sosyalNameVal."<br>";
    echo "silinecek";
    continue;
    }else{
    echo "boş geçilecek";
    continue;
    }
    }
    echo "<br>---<br>";
    }

    userSocial tablosunda hiç veri yoksa formda hepsi doldurulup gönderildiğinde başarıyla hepsine kayıt ekliyor. Fakat güncelleme işlemi yapmaya çalıştığımda nedense ilk atılan 3'ü twitter olarak güncelliyor, formda güncellenmiş gönderdiklerimi tekrar insert ediyor.

    Form sayfasındaki log: (foreach'in altındaki echo ile yazdırılanlar)
  • 18-09-2020, 10:56:24
    #2
    Foreach içindeki değişkenleri bitiminde unset yapabilir misin?
  • 18-09-2020, 11:00:53
    #3
    Maalesef değişen olmadı. Veritabanında hiçbir şey yokken hepsinden insert işlemi bekliyorum ve başarılı oluyor. Aşağıdaki gibi:
    Aynı şekilde sayfayı yeniliyorum ve hepsinden update bekliyorum fakat tablo bu hale geliyor.
    night_walker adlı üyeden alıntı: mesajı görüntüle
    Foreach içindeki değişkenleri bitiminde unset yapabilir misin?
  • 18-09-2020, 11:55:01
    #4
    @night_walker; en baştan yazarken sql sorgusundaki and hatasını fark edip iki günlük çileden kurtardı..... tekrar teşekkürler
  • 18-09-2020, 12:03:39
    #5
    $sosyalUpdateSorgu = $baglan->prepare("UPDATE userSocial SET
    platform = ?,
    type = ?,
    url = ?
    WHERE type = 1 AND userid = ?");
    $sosyalUpdate = $sosyalUpdateSorgu->execute(array(
    $sosyalid, 1, $sosyalNameVal, $userid
    ));
    şurada hata var sanki hocam, tüm satırların platform değerini foreach'ten gelen ilk platformun id'sine set ettiriyorsun. foreach'in 2. elemanında, kod db'de o satırı bulamadığı için insert bloğuna giriyor.

    şöyle yapsan sorun kalmayacak gibi;

    $sosyalUpdateSorgu = $baglan->prepare("UPDATE userSocial SET
    url = ?
    WHERE type = 1 AND userid = ? AND platform = ?");
    $sosyalUpdate = $sosyalUpdateSorgu->execute(array(
    $sosyalNameVal, $userid, $sosyalid
    ));
  • 18-09-2020, 12:05:14
    #6
    berkaycatak adlı üyeden alıntı: mesajı görüntüle
    @night_walker; en baştan yazarken sql sorgusundaki and hatasını fark edip iki günlük çileden kurtardı..... tekrar teşekkürler
    ben cevap yazana kadar sorun çözülmüş