Çö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
    122,7 KB · Görüntüleme: 271
Son düzenleme:
Çözüm
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);
Forma doğru değeri girdiğinizden emin misiniz?
 
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"];
 
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:
Şimdi mükemmel oturdu teşekkür ederim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…