Arama butonu
Bu konudaki kullanıcılar: 1 misafir
7
Cevap
1687
Tıklama
0
Öne Çıkarma
Aynı Kullanıcı Kaydını Engelleme
M
5 yıl
Onbaşı
Konu Sahibi

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.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



M
5 yıl
Yarbay

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ı.



F
5 yıl
Yarbay

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ı >

M
5 yıl
Onbaşı
Konu Sahibi

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");

}

?>



M
5 yıl
Onbaşı
Konu Sahibi

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 >
Bu mesaja 1 cevap geldi.
F
5 yıl
Yarbay

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 >

M
5 yıl
Onbaşı
Konu Sahibi

Teşekkür ederim.



B
5 yıl
Yüzbaşı

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ı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.