Çö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: 156
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);
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?
Forma doğru değeri girdiğinizden emin misiniz?
 
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?
Eğer space tuşuyla boşluk bırakıp yaptıysanız kabul etmesi çok normal. Çünkü boşluk da bir karakterdir, ben size hazırlayıp verdiğim örnekte POST ile gelen veriyi trim fonksiyonundan geçirdim fark ettiyseniz. Bu fonksiyon içerisindeki verinin başındaki veya sonundaki boşlukları siler.

Bu sayede " " şeklinde girilen veri buna dönüşür "", " " boş bir veri değildir ancak "" boş bir veridir.
 
Trim ekledim şimdi yine aynısı oldu. Doğru değer sanırsam
if(isset($_POST["kayit"])){
$name=$_POST["kullaniciadi"];
$email=$_POST["email"];
$email_err="email alanı boş geçilemez"; Bu hiçbir işe yaramıyor ki, bunun işlemi engellemek gibi bir amacı yok sadece değişkenin değerini değiştiriyorsunuz, bu neden işlemi engellesin ki?

Ben sizin yerinizde olsam bu sistemi şu şekilde kurardım:

PHP:
$errors = array();
if(isset($_POST["kayit"])){
    $name = trim($_POST["kullaniciadi"]);
    $email = trim($_POST["email"]);
    
    if ( !$name )
    {
        $errors[] = 'Kullanıcı adı boş bırakılamaz!'
    }

    if ( strlen($name) < 5 )
    {
        $errors[] = 'Kullanıcı adı en az 5 karakter olmalıdır.';
    }

    if ( !$email )
    {
        $errors[] = 'E-posta boş bırakılamaz!';
    }else if ( !filter_var($email, FILTER_VALIDATE_EMAIL) )
    {
        $errors[] = 'Lütfen geçerli bir e-posta adresi girin.'; 
    }

    if ( count($errors) == 0 )
    {
            $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 "Aşağıdaki hatalar oluştu: <br><ul>";
        foreach ( $errors as $error )
        {
            echo "<li>".$error."</li>";
        }
        echo "</ul>";
    }
}
 
Son düzenleme:
$email_err="email alanı boş geçilemez"; Bu hiçbir işe yaramıyor ki, bunun işlemi engellemek gibi bir amacı yok sadece değişkenin değerini değiştiriyorsunuz, bu neden işlemi engellesin ki?

Ben sizin yerinizde olsam bu sistemi şu şekilde kurardım:

PHP:
$errors = array();
if(isset($_POST["kayit"])){
    $name = trim($_POST["kullaniciadi"]);
    $email = trim($_POST["email"]);
   
    if ( !$name )
    {
        $errors[] = 'Kullanıcı adı boş bırakılamaz!'
    }

    if ( strlen($name) < 5 )
    {
        $errors[] = 'Kullanıcı adı en az 5 karakter olmalıdır.';
    }

    if ( !$email )
    {
        $errors[] = 'E-posta boş bırakılamaz!';
    }else if ( !filter_var($email, FILTER_VALIDATE_EMAIL) )
    {
        $errors[] = 'Lütfen geçerli bir e-posta adresi girin.';
    }

    if ( count($errors) == 0 )
    {
            $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 "Aşağıdaki hatalar oluştu: <br><ul>";
        foreach ( $errors as $error )
        {
            echo "<li>".$error."</li>";
        }
        echo "</ul>";
    }
}
Şimdi mükemmel oturdu teşekkür ederim.
 

Geri
Yukarı