Çözüldü PHP "fatal error" hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

hoopperr

Hectopat
Katılım
7 Temmuz 2019
Mesajlar
94
Merhaba, ben yazılıma yeni başladım bu sebeple aldığım bir iki hatada yardımcı olursanız sevinirim. Ben kendi e-pin sitemi yaptım tema hazır her şey çok güzel oldu ama login sistemini yapmaya çalışırken bir hata alıyorum. Hatayı veren kod ve hata şöyle:

Hata: fatal error: Uncaught mysqli_sql_exception: Duplicate entry " for key 'kullanici_adi'in C:\xampp\htdocs\giris.php:18 stack trace: #0 C:\xampp\htdocs\giris.php(18): mysqli_query(object(mysqli), 'ınsert ınto kul...') #1 {main} thrown in C:\xampp\htdocs\giris.php on line 18

Kod: $ekle="ınsert ınto kullanicilar (kullanici_adi, email, parola) values ('$name', '$email', '$password')";
$Calistirekle = mysqli_query($baglanti,$ekle);


Login sistemini denediğimde database ye her şey kayıt oluyor iyi hoş fakat sayfayı yenilediğimde yukarıdaki hatayı alıyorum. Data ya yazdırmak için verdiğim kullanici_adi, email, parola hepsi doğru hepsini kontrol ettim, nasıl düzeltebilirim bunu? Birde mesela hata mesajlarını yazdım ama etki etmiyor işlemiyor sayfaya.
Hatta şöyle kodların resmini de bırakyım daha detaylı olmuş olur:
 

Dosya Ekleri

  • giris.png
    giris.png
    122,7 KB · Görüntüleme: 155
Son düzenleme:
Çözüm
Bu seferde index.php den giriş e tıkladığımda şu hatayı veriyor:

Warning: Undefined array key "kullaniciadi" in C:\xampp\htdocs\login\giris.php on line 27

Warning
: Undefined array key "email" in C:\xampp\htdocs\login\giris.php on line 28

Warning
: Undefined array key "parola" in C:\xampp\htdocs\login\giris.php on line 29

Warning
: Undefined variable $baglanti in C:\xampp\htdocs\login\giris.php on line 32

Fatal error
: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in C:\xampp\htdocs\login\giris.php:32 Stack trace: #0 C:\xampp\htdocs\login\giris.php(32): mysqli_query(NULL, 'INSERT INTO kul...') #1 {main} thrown in C:\xampp\htdocs\login\giris.php on line 32
MySQL bağlantı sorununu hala çözmemişsiniz, önce onu çözmelisiniz. baglanti.php'yi içe aktardığınızdan emin olun. Önceki mesajda da söylediğim gibi mysqli_query'ye bağlantının yapıldığı değişkenin parametresini verin şu şekilde: mysqli_query($baglanti, $ekle);
Warning: Undefined variable $baglanti in C:\xampp\htdocs\login\giris.php on line 21

Fatal error
: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in C:\xampp\htdocs\login\giris.php:21 Stack trace: #0 C:\xampp\htdocs\login\giris.php(21): mysqli_query(NULL, 'INSERT INTO kul...') #1 {main} thrown in C:\xampp\htdocs\login\giris.php on line 21
mysqli_query'nin ilk parametresi veritabanı bağlantısının kurulduğu değişken olmalı, şu şekilde mysqli_query($baglanti, $query);

Ayrıca veritabanı $baglanti diye bir değişkenin olmadığını belirtmiş, değişken isimlerini kontrol edin. İsim doğruysa dosyayı içe aktardığınızdan emin olun.
 
Tamamdır database ye bilgiler ekleniyor halletim onu şimdi. Şimdi şöyle bir durum var mesela kullanıcı adı boş bırakılamaz ekledim kullanıcı adını boş bırakıp denediğimde kayıt başarıyla gerçekleşti diyor bunun olmaması lazım. F5 attığımda şu hatayı veriyor
Fatal error: Uncaught mysqli_sql_exception: Duplicate entry '' for key 'kullanici_adi' in C:\xampp\htdocs\login\giris.php:21 Stack trace: #0 C:\xampp\htdocs\login\giris.php(21): mysqli_query(Object(mysqli), 'INSERT INTO kul...') #1 {main} thrown in C:\xampp\htdocs\login\giris.php on line 21
 
Tamamdır database ye bilgiler ekleniyor halletim onu şimdi. Şimdi şöyle bir durum var mesela kullanıcı adı boş bırakılamaz ekledim kullanıcı adını boş bırakıp denediğimde kayıt başarıyla gerçekleşti diyor bunun olmaması lazım. F5 attığımda şu hatayı veriyor
Fatal error: Uncaught mysqli_sql_exception: Duplicate entry '' for key 'kullanici_adi' in C:\xampp\htdocs\login\giris.php:21 Stack trace: #0 C:\xampp\htdocs\login\giris.php(21): mysqli_query(Object(mysqli), 'INSERT INTO kul...') #1 {main} thrown in C:\xampp\htdocs\login\giris.php on line 21
Çünkü aynı veriyi 2 kez eklemeye çalışıyorsunuz, yine başa döndük :) Veritabanı yapınızdaki kullanici_adi sütununu benzersiz olarak işaretlemişsiniz. Bu da aynı veriden 2 kere ekleyemeyecek demek oluyor, veritabanına bir kere boş kullanıcı eklediğiniz zaman ikincisini eklemeye çalıştığınızda bu hatayı almanız normal.

Önceki veriyi silip denemelisiniz her seferinde. Kullanıcı adı boşsa diye bir koşul eklemişsiniz ancak bu koşul hiçbir işe yaramıyor. Bunun yerine şöyle yapabilirsiniz:

PHP:
if(isset($_POST["kayit"])){
    $name=$_POST["kullaniciadi"];
    $email=$_POST["email"];
    
    if ( trim($name) )
    {
        if ( strlen($name) > 4 )
        {
            $password=password_hash($_POST["parola"],PASSWORD_DEFAULT);
            $ekle="INSERT INTO kullanicilar (kullanici_adi, email, parola) VALUES ('$name', '$email', '$password')";
            $calistirekle = mysqli_query($baglanti, $ekle);
            if($calistirekle) {
                echo '<p><font color="white">Kayıt işleminiz başarıyla gerçekleşti!</font></p>' ;
            }
            else{
                echo '<p><font color="white">Kaydınız oluşturulurken bir hata meydana geldi!</font></p>';
            }
        }else{
            echo "Kullanıcı adı en az 5 harften oluşmalıdır";
        }
    }else{
        echo "Kullanıcı adı boş bırakılamaz!";
    }
}
 
Bu seferde index.php den giriş e tıkladığımda şu hatayı veriyor:

Warning: Undefined array key "kullaniciadi" in C:\xampp\htdocs\login\giris.php on line 27

Warning
: Undefined array key "email" in C:\xampp\htdocs\login\giris.php on line 28

Warning
: Undefined array key "parola" in C:\xampp\htdocs\login\giris.php on line 29

Warning
: Undefined variable $baglanti in C:\xampp\htdocs\login\giris.php on line 32

Fatal error
: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in C:\xampp\htdocs\login\giris.php:32 Stack trace: #0 C:\xampp\htdocs\login\giris.php(32): mysqli_query(NULL, 'INSERT INTO kul...') #1 {main} thrown in C:\xampp\htdocs\login\giris.php on line 32
 
Bu seferde index.php den giriş e tıkladığımda şu hatayı veriyor:

Warning: Undefined array key "kullaniciadi" in C:\xampp\htdocs\login\giris.php on line 27

Warning
: Undefined array key "email" in C:\xampp\htdocs\login\giris.php on line 28

Warning
: Undefined array key "parola" in C:\xampp\htdocs\login\giris.php on line 29

Warning
: Undefined variable $baglanti in C:\xampp\htdocs\login\giris.php on line 32

Fatal error
: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in C:\xampp\htdocs\login\giris.php:32 Stack trace: #0 C:\xampp\htdocs\login\giris.php(32): mysqli_query(NULL, 'INSERT INTO kul...') #1 {main} thrown in C:\xampp\htdocs\login\giris.php on line 32
MySQL bağlantı sorununu hala çözmemişsiniz, önce onu çözmelisiniz. baglanti.php'yi içe aktardığınızdan emin olun. Önceki mesajda da söylediğim gibi mysqli_query'ye bağlantının yapıldığı değişkenin parametresini verin şu şekilde: mysqli_query($baglanti, $ekle);
 
Çözüm
Kayıt formunda yazılar şu şekilde beliriyor:

Bunuda çözdüm de kullanıcı adı boş bırakılamaz yazıyor formun üstünde bunu hata olarak vermesi lazım.

Tamamdır çözdüm hepsini teşekkür ederim ilginiz için.
 

Dosya Ekleri

  • resim_2023-02-22_181859549.png
    resim_2023-02-22_181859549.png
    31,6 KB · Görüntüleme: 45
Son düzenleme:
Kayıt formunda yazılar şu şekilde beliriyor:

Bunuda çözdüm de kullanıcı adı boş bırakılamaz yazıyor formun üstünde bunu hata olarak vermesi lazım.

Tamamdır çözdüm hepsini teşekkür ederim ilginiz için.
Rica ederim, ek olarak prodüksiyona bu şekilde çıkmayın kesinlikle. Kullanıcıdan gelecek veriler $_POST['username'] şeklinde filtresiz alınıp SQL sorgularına sokulmamalıdır asla. Güvenlik için gereken filtrelerden geçirmelisiniz aksi takdirde SQL açığı olur.

Örneğin:

$username = mysqli_real_escape_string(strip_tags($_POST["username"]));
 
PHP ye yeni başladım böyle bir projeyle başlamak doğru oldu mu bilemiyorum. Bu söylediğiniz filtreleri nasıl uygulayacağım onu da bilmiyorum. Zamanla öğreniriz artık.

Hocam peki kullanıcı adı için yaptık bunları email için ne yapacağım aynı kodu kopyala yapıştır mı?
 
Son düzenleme:
PHP ye yeni başladım böyle bir projeyle başlamak doğru oldu mu bilemiyorum. Bu söylediğiniz filtreleri nasıl uygulayacağım onu da bilmiyorum. Zamanla öğreniriz artık.

Hocam peki kullanıcı adı için yaptık bunları email için ne yapacağım aynı kodu kopyala yapıştır mı?
O şekilde yapılabilir, daha pratik bir çözüm istersen hataları bir array'de toplayıp tek seferde tüm hataları ekrana bastırabilirsin ama yeni başladıysan senin için daha kafa karıştırıcı olur.
 
PHP:
if(empty($_POST["email"])){
        $email_err="email alanı boş geçilemez";
    }

kopyala yapıştır yerine hemen altına böyle bir şey yaptım fakat email alanını boş bıraksam bile kayıt başarıyla gerçekleşti diyor. Bu konuda ne yapabilirim?
 

Geri
Yukarı