v2.5.2
Giriş yap

PHP MYSQL Hariç

ugurkilci
1,224 defa görüntülendi

ÇÖZÜLDÜ!
Kodlar: https://pbs.twimg.com/media/EZsmVYJWsAAdddU?format=png&name=900x900 ve https://pbs.twimg.com/media/EZsmY1bXgAAFIEf?format=png&name=small şurda yazılı

(adsbygoogle = window.adsbygoogle || []).push({});

Ayarlar sayfası kodluyorum. Üye adını veya eposta adresini değiştirebilecek.

yazdığım eposta hali hazırdaki epostam ile { aynı ise

güncelleme işlemi olmasın

} farklı ise {

benim epostam hariç, veri tabanında öyle eposta varsa onu kontrol et { var
    o zaman hata versin.
    > "böyle eposta var başka eposta deneyiniz"
} yok {
    güncelle
}

}

-- Sorun Tam Olarak Nedir? --

Üye idsi 1 olan kullanıcı ayarlara girer. Bir güncelleme işlemi yapar. Bu güncellemede eposta adresinde bir değişiklik olmazsa "eposta adresini" güncellemez. Eğer bir değişiklik olduysa bu değişiklik önce veri tabanında bir kontrol ile sorgulanır. Kontrolde üye listesinde "kendi eposta adresi dışında" bir eposta adresini kullanılmışsa hata verir.
Eğer veri tabanında input içinde girdiği eposta adresi yoksa işlemi başarıyla günceller.

-- Neler Denedim? --

  1. RowCount sistemini denedim.
    $kontrol = $db->prepare("SELECT * FROM uyeler WHERE uye_id =:uye_id AND uye_eposta =:uye_eposta");
    $kontrol->execute(array('uye_id'=>$uyeid, 'uye_eposta'=>$uyeeposta));
    $_kontrol = $kontrol->rowCount();

if($_kontrol > 0){ // Var

// Hata ver

}else{ // Yok

// Güncelle

}

  1. != şeklinde bir denemem oldu.
    "SELECT * FROM uyeler WHERE uye_id != '$uye_id' AND uye_eposta != '$uyeeposta'"

  2. != den önce NOT gelmesi gerekiyormuş. Onu da denedim.
    "SELECT * FROM uyeler WHERE NOT uye_id != '$uye_id' AND NOT uye_eposta != '$uyeeposta'"

  3. Ama NOT gelince != koymaya gerek yokmuş diye de okudum. Nolur nolmaz öylede denedim.
    "SELECT * FROM uyeler WHERE NOT uye_id = '$uye_id' AND NOT uye_eposta = '$uyeeposta'"

  4. != şeklinde bir işlemde çok sağlıksız sonuçlar elde edilebilirmiş. Bu yüzden NOT IN şeklinde başka bir şey öneriliyormuş. Onu da denedim.
    "SELECT * FROM uyeler WHERE uye_id NOT IN ('$uye_id') uye_eposta NOT IN ('$uyeeposta')"

  5. Belki farklı bir şey olur diye hem Query hem de Prepare ile de denedim.
    prepare("SELECT ....... "); yada query("SELECT ........ ");

  6. Bir de bunların farklı kombinasyonları.
    prepare("SELECT ....... "); + NOT IN + !=
    yada
    query("SELECT ........ "); + !=
    yada
    prepare("SELECT ....... "); NOT IN
    ....

Fakat her ne yapsam hata alıyorum.

-- Ne Hatası Alıyorum? --
Ya hep güncelliyor, yada hep hata veriyor. Düzgün çalışmıyor.

-- Nasıl Çözebiliriz? --

Cevap yaz
Cevaplar (4)
isimimcokguzel2
1631 gün önce

Hocam != yerine <> koymayı denediniz mi?

omerabul
1631 gün önce

bunun basit bir mantığı var..
[code]
function varmi($id,$email) {

// benim id disinda mail
$sql = $db->prepare("SELECT * FROM uyeler Where Id<>? AND email=?");
$sql->execute([$id,$email]);
return $sql->fetchColumn();

}

if(varmi($session_id, $postangelenmail)>0) {

echo "Bu mail baska kullanıcı tarafından kullanılıyor";

} else {

// güncelleme kodları buraya

}
[/code]

ugurkilci
1633 gün önce

Bu sistem daha güvenli. Yazdığınızı denerim. Teşekkür ederim. :)

tayfunerbilen
1633 gün önce

İlk olarak yapacağın şey, giriş yaptığında e-posta adresini SESSION'da tutmak.
İkinci olarak yapacağın şey, veritabanında e-posta alanını unique olarak ayarlamak. Yani benzersiz olacak, dolayısı ile hiçbir kontrol yapmadan güncelleme işlemini doğrudan yaptığında zaten 2. bir kişi aynı e-posta adresini kullanıyorsa bu güncelleme işlemi başarısız olacak çünkü e-posta alanın unique olduğu için hata verecek. Böylece 2. sorgu yapmadan işini çözeceksin. Kısaca;


$sessionEposta = $_SESSION['eposta'];
$eposta = "[email protected]";
$uye_id = 5;

if ($eposta == $sessionEposta){
    echo "Şu an güncel olarak kullandığın e-posta adresin aynı.";
} else {

    $update = $db->prepare('UPDATE uyeler SET eposta = :eposta WHERE uye_id != :uye_id');
    $result = $update->execute([
        'eposta' => $eposta,
        'uye_id' => $uye_id
    ]);
    
    if ($result){
        echo "E-posta adresin başarıyla değiştirildi.";
    } else {
        echo "E-posta adresi, bir başkası tarafından kullanılıyor. Lütfen kontrol et.
    }

}