PHP "Warning: Undefined array key " hatası

efemerts1646

Decapat
Katılım
24 Ekim 2021
Mesajlar
50
Daha fazla  
Cinsiyet
Erkek
PHP:
<?PHP

include("baglanti.php");

İf(isset($_post["kaydet"]))

{

 $Name=$_post["kullanici_adi"];

 $Email=$_post["email"];

 $Password=$_post["parola"];

 $Ekle="ınsert ınto kullanicilar (kullanici_adi, email, parola) values ('$name','$email','$password')";

 $Calistirekle = mysqli_query($baglanti,$ekle);

 İf ($calistirekle) {

 Echo '<div class="alert alert-success" role="alert">

 Kayıt başarılı bir şekilde eklendi.

 </Div>';

 }

 Else {

 Echo '<div class="alert alert-danger" role="alert">

 Kayıt eklenirken bir problem oluştu.

 </Div>';

 }


 Mysqli_close($baglanti);

}

Bu kayit PHP'deki PHP kod dizisi:

PHP:
<?PHP

 $Host = "localhost";

 $Kullanici_adi = "root";

 $Password = "";

 $Vt = "uyelik";


 $Baglanti = mysqli_connect($host, $kullanici_adi, $password, $vt);

 Mysqli_set_charset($baglanti, "utf8");

Bu ise bağlantı PHP'nin içindeki dizi şu hatayı veriyor ekte gösterdiğim gibi.

Warning: Undefined array key "parola" in C:\xampp\htdocs\uyelik\kayit.php on line 9

Fatal error
: Uncaught mysqli_sql_exception: Duplicate entry 'efemert16' for key 'kullanici_adi'in C:\xampp\htdocs\uyelik\kayit.php:12 stack trace: #0 C:\xampp\htdocs\uyelik\kayit.php(12): mysqli_query(object(mysqli), 'ınsert ınto kul...') #1 {main} thrown in C:\xampp\htdocs\uyelik\kayit.php on line 12

Bunda ilk önce normal ekran geliyor. Doğru bir şekilde kayıt formu geliyor. Kaydediyorsun, yeniliyorsun bu hatayı veriyor ve şifreyi kaydetmiyor. Baktım baktım anlamadım. Yardımcı olabilecek varsa?
 

Dosya Ekleri

  • aa.png
    aa.png
    19,9 KB · Görüntüleme: 36
PHP'de "Undefined array key" hatası, genellikle bir dizi içinde tanımlanmamış bir anahtar (key) kullanmaya çalıştığınızda ortaya çıkar. Bu, bir dizi içinde belirtilen anahtara sahip bir değer olmadığında meydana gelir.
 
Hatayı ve kodları atın.
<?php

include("baglanti.php");

if(isset($_POST["kaydet"]))
{
$name=$_POST["kullanici_adi"];
$email=$_POST["email"];
$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 '<div class="alert alert-success" role="alert">
Kayıt Başarılı Bir Şekilde Eklendi.
</div>';
}
else {
echo '<div class="alert alert-danger" role="alert">
Kayıt Eklenirken Bir Problem Oluştu.
</div>';
}


mysqli_close($baglanti);

}





?>

<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

<title>Uye Kayit</title>
</head>
<body>

<div class="container p-5">
<div class="card p-5 ">
<form action="kayit.php" method = "POST">

<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Kullanıcı Adı:</label>
<input type="text" class="form-control" id="exampleInputEmail1" name="kullanici_adi">

</div>


<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">E-Posta Adresi:</label>
<input type="email" class="form-control" id="exampleInputEmail1" name = "email">

</div>
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">Parola:</label>
<input type="password" class="form-control" id="exampleInputPassword1" name = "parola">
</div>

<button type="submit" name = "kaydet" class="btn btn-primary">Kayıt Ol</button>
</form>




</div>
</div>




<!-- Optional JavaScript; choose one of the two! -->

<!-- Option 1: Bootstrap Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>

<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
-->
</body>
</html>
HATA:

Fatal error: Uncaught mysqli_sql_exception: Duplicate entry 'Efemert16152858581' for key 'kullanici_Adi' in C:\xampp\htdocs\uyelik\kayit.php:12 Stack trace: #0 C:\xampp\htdocs\uyelik\kayit.php(12): mysqli_query(Object(mysqli), 'INSERT INTO kul...') #1 {main} thrown in C:\xampp\htdocs\uyelik\kayit.php on line 12
Ekliyor f5 atınca bu hatayı veriyor.
 
// Kodlar
Ekliyor f5 atınca bu hatayı veriyor.
Ekledikten sonra F5 niye atıyorsunuz? Halihazırda veritabanında olan veriyi eklemeye çalışıyor, bundan kaynaklı hata alıyorsunuz. Öncelikle temiz kod yazın, kodlarınız çok karışık.

Basit bir sorgu ekleyerek veritabanında eklemeye çalıştığınız ismin olup olmadığını kontrol edelim:

PHP:
<?php

include("baglanti.php");

if(isset($_POST["kaydet"])) {
    $name = $_POST["kullanici_adi"];
    $email = $_POST["email"];
    $password = password_hash($_POST["parola"], PASSWORD_DEFAULT);

    $kontrol = mysqli_query($baglanti, "SELECT * FROM kullanicilar WHERE kullanici_adi = '$name'");
    if (mysqli_num_rows($kontrol) > 0) {
        echo '<div class="alert alert-danger" role="alert"> Bu kullanıcı adı zaten kullanımda. Lütfen başka bir kullanıcı adı seçin. </div>';
    } else {
        $ekle = "INSERT INTO kullanicilar (kullanici_adi, email, parola) VALUES ('$name','$email','$password')";
        $calistirekle = mysqli_query($baglanti,$ekle);
        if ($calistirekle) {
            echo '<div class="alert alert-success" role="alert"> Kayıt Başarılı Bir Şekilde Eklendi. </div>';
        } else {
            echo '<div class="alert alert-danger" role="alert"> Kayıt Eklenirken Bir Problem Oluştu. </div>';
        }
    }

    mysqli_close($baglanti);
}
?>
 
Çok da uğraşmanıza gerek yok. Dediğim gibi basit bir sorguyla ayarlayabilirsiniz, POST engelleyecek işlemlere gerek yok.
Repostu engellemenin kendince bir anlamı var. Her zaman tekrar etmeyecek veriler toplamıyorsun. Bazen, bazı veriler, ID dışında tekrar edebilmeli. ID'de auto increment olunca kullanıcı sürekli arka arkaya 10 kere aynı veriyi pushluyor.
 

Geri
Yukarı