Şimdi Ara

Aynı Kullanıcı Kaydını Engelleme

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
9
Cevap
0
Favori
1.541
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar. Veritabanında aynı kullanıcı olmaması için veritabanında "kullanıcı" kısmını "benzersiz" olarak tanımladım. Kayıt olacak kişi kayıt formunda aynı kullanıcı adını yazdığında veritabanına herhangi bir şekilde de kayıt yapmıyor. Buraya kadar sıkıntı yok. Ama kayıt olacak kişiye de uyarı vermiyor. Ben de şöyle bir şey yaptım.


    $ekle = $db->prepare("INSERT INTO kullanicilar SET kullanici_adi = ?, sifre = ?, role = ?");
    $ekle->execute([$kullanici_adi, $sifre, $role]);

    if ($ekle!=0) {

    echo "<center><h1>"."Bu Kullanıcı Adı Daha Önceden Alınmış."."</h1></center>"."<center><br><h1>"."Kayıt Sayfasına Tekrar Yönlendiriliyorsunuz."."</h1></center>";
    header("Refresh:2; url=kayit-formu.php");

    } else {
    echo "<center><h1>"."Başarıyla Kayıt Oldunuz."."</h1></center>"."<center><br><h1>"."Giriş Yapmayı Unutmayınız."."</h1></center>"."<center><br><h2>"."Anasayfa'ya Yönlendiriliyorsunuz...</center>";
    header("Refresh:2; url=giris-formu.php");

    }


    Yukarıdaki kodlarla aynı kullanıcıyı girdiğimde "Kullanıcı Var" uyarısı veriyor ve veritabanına kayıt yapmıyor. Farklı Bir kullanıcı adı girdiğimde "Kullanıcı Var" uyarısı veriyor ve kayıt yapıyor. Yani farklı kullanıcı girdiğimde veritabanına kayıt yapıyor ama "Kullanıcı Var" uyarısını da veriyor. Aynı kullanıcıyı kayıt etmek istediğimde de ""Kullanıcı Var" uyarısı veriyor.







  • Hata verirse x yap demek sağlıklı bir yöntem değil. oun yerine select ile kontrol et kayit gelmiyorsa insert et veya ikisini tek sorguda yap ama exception fırlatmak maaliyeti yüksektir logiclerde kullanılmamalı.
  • Hocam hatan şurada bu bir veri var mı yok mu diye sorgulama değil direk veri ekleme olayı. Senin yaptığın işlemde girdiğin değer olsa da olmasa da insert ettiği için ya da etmeye çalıştığı için işlemin sonucu sana her türlü 0'dan farklı döner yani $ekle != 0 ifadesi iki türlü de gerçekleşmiş oluyor.

    Insert işleminden önce Select ile girilen değer tabloda var mı diye bakman gerek, aşağıya örnek olarak bulduğum bir php kodu atıyorum.

     
    $user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
    $result = mysqli_query($db, $user_check_query);
    $user = mysqli_fetch_assoc($result);

    if ($user) { // if user exists
    if ($user['username'] === $username) {
    array_push($errors, "Username already exists");
    }

    if ($user['email'] === $email) {
    array_push($errors, "email already exists");
    }
    }

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • Burada kullanıcı kontrolü yaptırmaya çalışıyorum. Yanlış nerede bir bakabilir misiniz?

    <?php

    ob_start();

    $db = new PDO("mysql:host=localhost; dbname=databaseadi; charset=utf8", "kullaniciadi", "123456");

    $kullanici_adi = trim(strip_tags($_POST['kullanici_adi']));

    $sifre = trim(strip_tags($_POST['sifre']));

    $role = $_POST['role'];

    $eposta = trim(strip_tags($_POST['eposta']));

    $ekle = $db->prepare("SELECT * FROM kullanicilar WHERE kullanici_adi= ?");

    $ekle->execute(['kullanici_adi'=>$kullanici_adi]);

    $kullanici = $ekle->fetch(PDO::FETCH_ASSOC);

    if ($kullanici === $ekle['kullanici_adi']) {

    echo "Bu kullanıcı Mevcut";

    $ekle = $db->prepare("INSERT INTO kullanicilar SET kullanici_adi = ?, sifre = ?, eposta = ?, role = ?");

    $ekle->execute([$kullanici_adi, $sifre, $eposta, $role]);

    } else ($ekle) {

    echo "<center><h1>"."Başarıyla Kayıt Oldunuz."."</h1></center>"."<center><br><h1>"."Giriş Yapmayı Unutmayınız."."</h1></center>"."<center><br><h2>"."Anasayfa'ya Yönlendiriliyorsunuz...</center>";

    header("Refresh:2; url=giris-formu.php");

    }

    ?>




  • Sizin dediğiniz gibi herhalükârda kayıt yapıyordu. Aşağıdaki kodlarla hallettim. Teşekkür ediyorum.


    $kadi = $_POST['kullanici_adi'];

    $query = $db->query("SELECT * FROM kullanicilar WHERE kullanici_adi = '{$kadi}'")->fetch(PDO::FETCH_ASSOC);

    if ($query) {

    echo "<center><img src='images/hataresimleri/unlem.png' style='width:50px; height:135px; margin-top:25px;'></center>";

    echo "<center><h1>"."Bu Kullanıcı Adı Kullanılmaktadır"."</h1></center>"."<center><br><h1>"."Başka Bir Kullanıcı Adı Deneyiniz"."</h1></center>"."<center><br><h2>"."Kayıt Sayfasına Yönlendiriliyorsunuz...</center>";

    header("Refresh:5; url=kayit-formu.php");

    } else {



    < Bu mesaj bu kişi tarafından değiştirildi mali2023 -- 5 Haziran 2020; 17:14:32 >
  • quote:

    Orijinalden alıntı: mali2023

    Sizin dediğiniz gibi herhalükârda kayıt yapıyordu. Aşağıdaki kodlarla hallettim. Teşekkür ediyorum.


    $kadi = $_POST['kullanici_adi'];

    $query = $db->query("SELECT * FROM kullanicilar WHERE kullanici_adi = '{$kadi}'")->fetch(PDO::FETCH_ASSOC);

    if ($query) {

    echo "<center><img src='images/hataresimleri/unlem.png' style='width:50px; height:135px; margin-top:25px;'></center>";

    echo "<center><h1>"."Bu Kullanıcı Adı Kullanılmaktadır"."</h1></center>"."<center><br><h1>"."Başka Bir Kullanıcı Adı Deneyiniz"."</h1></center>"."<center><br><h2>"."Kayıt Sayfasına Yönlendiriliyorsunuz...</center>";

    header("Refresh:5; url=kayit-formu.php");

    } else {
    Rica ederim, bir de şöyle bir şey de olabilir. Mesela INSERT sorgusunu yaptırdıktan sonra if-else ile onun error code yani hata kodunu alıp eğer bu hata kodu aynı kullanıcıyı ekleyememesi ile alakalı ise kullanıcıya da ona göre hata mesajı yazdırırsın. Bir tane uygulamada yapmıştım bunu ben. Aşağıya mesela örnek kodu atıyorum:


    if($_REQUEST['komut']=='Yeni_Kayit_Bilgisi_Yolla')
    {
    $username=$_REQUEST['username'];
    $sifre=$_REQUEST['password'];
    $sifre=hash('sha512', $sifre);

    $guncelle=$baglanti->prepare("INSERT INTO kullanicilar SET kullanici_adi=?, Sifre=?");

    $guncelle->execute(array("$username","$sifre"));
    if($guncelle->errorInfo()[1]!=null)
    {
    print_r($guncelle->errorInfo()[1]); //1'nci indeks Mysql hata kodunu verir. (detaylı bilgi>https://www.php.net/manual/tr/pdo.errorinfo.php)
    }
    else
    {
    echo "Veri Eklendi";
    }
    }



    Örneğin errorInfo kısmında mesela "1062" hata kodunu döndürürse bu "duplicate entry" hatası demek oluyor MySQL için, ben de burada uygulama tarafında bu hataya göre kullanıcıya "Bu kullanıcı adı zaten var." gibi bir hata yazdırıyordum.

    Tabi alternatif olarak söyledim bu yöntemi.



    < Bu mesaj bu kişi tarafından değiştirildi Fulton -- 5 Haziran 2020; 18:2:47 >




  • Teşekkür ederim.
  • Bu tip durumlar için db de o alana unique index atılabilir. Dönen hatayı handle edersin. Kaçak iş olmaz bu durumda.

    < Bu ileti DH mobil uygulamasından atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.