PHP'ye yeni başladım ve 2 sorunum var.
1. olarak Card kodu yazdım ama çalışmadı.
2. olarak sistemi hazırladım ama şu hatayı veriyor: fatal error: Uncaught argumentcounterror: The number of variables must match the number of parameters in the prepared statement in C:\xampp\htdocs\uyelik\kayit.php:11 stack trace: #0 C:\xampp\htdocs\uyelik\kayit.php(11): mysqli_stmt_bind_param(object(mysqli_stmt), 'SSS', 'arda31', 'ardatutku999@gm...', '123345') #1 {main} thrown in C:\xampp\htdocs\uyelik\kayit.php on line 11
Kod:
İlk olarak, "Card kodu" diyerek bahsettiğiniz şeyin tam olarak ne olduğunu netleştirebilir misiniz? Hangi koddan bahsettiğinizi ve nasıl bir çalışma beklediğinizi belirtir misiniz?
İkinci olarak, aldığınız hatanın nedeni, hazırlanan ifadenin parametrelerini bağlama işlemi sırasında hatalı sayıda parametre kullanmanızdır. Hazırlanan ifade için üç parametre bekleniyor ancak siz dört parametre sağlıyorsunuz. Bu nedenle hata alıyorsunuz.
Kodunuzdaki hatayı düzeltmek için, mysqli_stmt_bind_param() fonksiyonuna aktarılan parametre sayısını düzeltebilirsiniz. INSERT INTO sorgusu, kullanıcı adı, e-posta ve parola olmak üzere üç sütuna değer ekleyeceğinden, "sss" parametre belirtecini kullanmanız gerekmektedir. Ayrıca, mysqli_real_escape_string() kullanımı güvenlik açısından iyi bir yaklaşım olmasına rağmen, burada mysqli_stmt_bind_param() kullanıyoruz, bu nedenle mysqli_real_escape_string() kullanmanıza gerek yoktur. İşte düzeltilmiş kodunuz
Kod:
<?php
include("baglanti.php");
if(isset($_POST["kaydet"])) {
$name = $_POST["kullaniciadi"];
$email = $_POST["email"];
$password = $_POST["parola"];
$ekle = "INSERT INTO kullanicilar(kullanici_adi, email, parola) VALUES (?, ?, ?)";
$stmt = mysqli_prepare($baglanti, $ekle);
mysqli_stmt_bind_param($stmt, "sss", $name, $email, $password);
$calistirekle = mysqli_stmt_execute($stmt);
if ($calistirekle) {
echo '<div class="alert alert-success" role="alert">
Başarılı bir şekilde kayıt oldunuz!
</div>';
} else {
echo '<div class="alert alert-danger" role="alert">
Kayıt oluşturulurken bir hata meydana geldi!
</div>';
}
mysqli_stmt_close($stmt);
}
mysqli_close($baglanti);
?>
Bu düzeltmeler yapıldığında, kodunuzun düzgün çalışması gerekmektedir. Ancak, güvenlik için daha ileri adımlar atılması gerekebilir. Örneğin, kullanıcı girişi verilerinin doğrulaması ve parolaların hashlenmesi gibi
Value'ları zaten stringe eklemişsin. Eklenecek bir şey yok ki. Bir daha ekletmeye çalışıyorsun eklenecek bir şey olmadığı için. Haliyle hata alıyorsun.
VALUES ('$name', '$email', '$password') dediğinde otomatik olarak string şuna dönüşüyor; VALUES ('arda31', 'ardatutku999@gmail.com', '123345'), fakat fill için yapabilmesi için soru işareti bulması lazım.
Bind param yapacaksan ilk yazdığımı yapmayacaksın. Yada bind param yapma, ilki gibi yap. SQL Injection'a karşı string filtering yapmışsın zaten, ona ekstra bir şey dememe gerek yok.
İlk olarak, "Card kodu" diyerek bahsettiğiniz şeyin tam olarak ne olduğunu netleştirebilir misiniz? Hangi koddan bahsettiğinizi ve nasıl bir çalışma beklediğinizi belirtir misiniz?
İkinci olarak, aldığınız hatanın nedeni, hazırlanan ifadenin parametrelerini bağlama işlemi sırasında hatalı sayıda parametre kullanmanızdır. Hazırlanan ifade için üç parametre bekleniyor ancak siz dört parametre sağlıyorsunuz. Bu nedenle hata alıyorsunuz.
Kodunuzdaki hatayı düzeltmek için, mysqli_stmt_bind_param() fonksiyonuna aktarılan parametre sayısını düzeltebilirsiniz. INSERT INTO sorgusu, kullanıcı adı, e-posta ve parola olmak üzere üç sütuna değer ekleyeceğinden, "sss" parametre belirtecini kullanmanız gerekmektedir. Ayrıca, mysqli_real_escape_string() kullanımı güvenlik açısından iyi bir yaklaşım olmasına rağmen, burada mysqli_stmt_bind_param() kullanıyoruz, bu nedenle mysqli_real_escape_string() kullanmanıza gerek yoktur. İşte düzeltilmiş kodunuz
Kod:
<?php
include("baglanti.php");
if(isset($_POST["kaydet"])) {
$name = $_POST["kullaniciadi"];
$email = $_POST["email"];
$password = $_POST["parola"];
$ekle = "INSERT INTO kullanicilar(kullanici_adi, email, parola) VALUES (?, ?, ?)";
$stmt = mysqli_prepare($baglanti, $ekle);
mysqli_stmt_bind_param($stmt, "sss", $name, $email, $password);
$calistirekle = mysqli_stmt_execute($stmt);
if ($calistirekle) {
echo '<div class="alert alert-success" role="alert">
Başarılı bir şekilde kayıt oldunuz!
</div>';
} else {
echo '<div class="alert alert-danger" role="alert">
Kayıt oluşturulurken bir hata meydana geldi!
</div>';
}
mysqli_stmt_close($stmt);
}
mysqli_close($baglanti);
?>
Bu düzeltmeler yapıldığında, kodunuzun düzgün çalışması gerekmektedir. Ancak, güvenlik için daha ileri adımlar atılması gerekebilir. Örneğin, kullanıcı girişi verilerinin doğrulaması ve parolaların hashlenmesi gibi
Mesela bunun gibi yapmak istiyorum Card derken bunu demek istemiştim yani CSS yazmak olarak düşünebiliriz bir de If'e atadığım başarılı ve başarısız mesajları istediğim gibi çalışmıyor
Mesela bunun gibi yapmak istiyorum Card derken bunu demek istemiştim yani CSS yazmak olarak düşünebiliriz bir de If'e atadığım başarılı ve başarısız mesajları istediğim gibi çalışmıyor
Adam bootstrap kullanmış. Sende bootstrap dahil edilmiş değil. Class vermişsin her elemente ama neye göre verdin? Hiç bir CSS dahil etmemişsin, o classlar hiç bir şey ifade etmiyor tarayıcıya bu şekilde.
Adam Bootstrap kullanmış. Sende Bootstrap dahil edilmiş değil. Class vermişsin her elemente ama neye göre verdin? Hiçbir CSS dahil etmemişsin, o classlar hiçbir şey ifade etmiyor tarayıcıya bu şekilde.