lostyazilim
tr.link

Php delirten üye kayıt sorunu

6 Mesajlar 879 Okunma
lstbozum
tr.link

yazilimsoru yazilimsoru Yazilimsoru.com Kullanıcı
  • Üyelik 05.03.2018
  • Yaş/Cinsiyet 26 / E
  • Meslek Web developer
  • Konum İstanbul Avrupa
  • Ad Soyad İ** K**
  • Mesajlar 437
  • Beğeniler 132 / 131
  • Ticaret 0, (%0)
Merhabalar ben php ve ajax kullanarak bir üyelik sistemi yaptım ama beni çıldırttı. Gayet efendi, İşinde gücünde çalışan kod Sunucuya atınca artist oluyor.Local'de test ediyorum başarılı bir şekilde kayıt oldunuz diyor fakat sunucuda başarılı bir şekilde kayıt oldunuz diyor ardından hemen kullanıcı adı kayıtlı diyor.Ama üye kayıt oluyor.Kodları aşağıya bırakıyorum bir inceleyin lütfen ve sorun nerede yazın.
Php kodlarım


if($_POST){


date_default_timezone_set('Europe/Istanbul');
$tarihsaat = date("Y-m-d H:i:s");
include("config.php");
include("functions.php");
session_start();
error_reporting(0);



//Post'tan Gelen Bilgiler
$kuladi = permalink(trim(strip_tags($_POST["kullaniciadi"])));
$eposta = trim(strip_tags($_POST["eposta"]));
$sifrek = trim(strip_tags($_POST["parola"]));
$sifretekrar = trim(strip_tags($_POST["parolatekrar"]));
$uye_meslek = trim(strip_tags($_POST["uyemeslek"]));
$uye_puan = "0";
$uyepr = "nopr.jpg";
//Post'tan Gelen Bilgiler

//Kullanıcı adı ile daha önce kayıt olunmuşmu?
$kakontrol = $db->prepare("SELECT * FROM uyeler WHERE uye_kuladi=?");
$kakontrol->execute(array($kuladi));
//E-Posta ile daha önce kayıt olunmuşmu?
$epkontrol = $db->prepare("SELECT * FROM uyeler WHERE uye_email=?");
$epkontrol->execute(array($eposta));



if(strlen($kuladi) < 4 || strlen($kuladi > 12)){
echo "Kullanıcı adı en az 4 en fazla 12 karakter olmalıdır.";
}elseif($kakontrol->rowCount()){
echo "Kayıt Olmaya Çalıştığınız Kullanıcı adı Sistemde Kayıtlı!";
}elseif(!filter_var($eposta, FILTER_VALIDATE_EMAIL)){
echo "Geçerli bir E-Posta girin";
}elseif($epkontrol->rowCount()){
echo "Kayıt Olmaya Çalıştığınız E-Posta Sistemde Kayıtlı!";
}elseif(strlen($sifrek) < 7){
echo "Şifrre en az 7 karakter içermelidir.";
}elseif($sifrek !== $sifretekrar){
echo "Şifreler birbirine uyuşmuyor.";
}elseif(strlen($uye_meslek)<4){
echo "Meslek kısmını boş bırakmayın.En az 4 karakter içermelidir.";
}else{


$sifre = md5($sifrek);
$uyekayit = $db->prepare("INSERT INTO uyeler SET uye_sifre=?, uye_puan=?, uyelik_tarihi=?, uye_kuladi=?, uye_meslek=?, uye_email=?, uye_pr=?");
$uyekayit->execute(array($sifre,$uye_puan,$tarihsaat,$kuladi,$uye_meslek,$eposta,$uyepr));
if($uyekayit->rowCount()){
echo "Basarılı bir sekilde kayıt oldunuz!";
}else{
echo "Üzgünüm Bir Hata Oluştu.Lütfen Sayfayı Yenileyip Tekrar Dene!";
}



}


}else{

}
?>



Ajax kodlarım




$(document).ready(function(){

$(".kytbtn").click(function(){
var kullaniciadi = $("[name=kullanici_ad]").val();
var eposta = $("[name=eposta]").val();
var parola = $("[name=parola]").val();
var parolatekrar = $("[name=parolatekrar]").val();
var uyemeslek = $("[name=uyemeslek]").val();

var kkayitdegerler = "kullaniciadi="+kullaniciadi+"&eposta="+eposta+"&parola="+parola+"&parolatekrar="+parolatekrar+"&uyemeslek="+uyemeslek+"&parolatekrar="+parolatekrar+"&g-recaptcha-response="+grecaptcha.getResponse();
$.ajax({
type: "POST",
url: "kayit.php",
data: kkayitdegerler,
success: function(sonuc){

if(sonuc=="Basarılı bir sekilde kayıt oldunuz!"){
$("[name=kullanici_ad]").val("");
$("[name=eposta]").val("");
$("[name=parola]").val("");
$("[name=parolatekrar]").val("");
$("[name=uyemeslek]").val("");

swal(sonuc);
}else{
swal(sonuc);
}

}
});


});
});

 

 

Web sitem: yazilimsoru.com
wmaraci
reklam

YORci YORci yorci.com Kullanıcı
  • Üyelik 06.02.2016
  • Yaş/Cinsiyet 29 / E
  • Meslek Arkaplan Yazılım
  • Konum Ankara
  • Ad Soyad I** Y**
  • Mesajlar 261
  • Beğeniler 88 / 127
  • Ticaret 21, (%100)
session her şeyden önce başlar o yüzden dosyanın en başına koymanız lazım, bence orada anlamı yok config her sayfaya dahil ediliyorsa, config'in en başına bir kere koymanız yeterli.
 

 

Decimas Decimas WM Aracı Kullanıcı
  • Üyelik 19.04.2015
  • Yaş/Cinsiyet 26 / E
  • Meslek Developer
  • Konum İstanbul Avrupa
  • Ad Soyad E** E**
  • Mesajlar 820
  • Beğeniler 1 / 302
  • Ticaret 1, (%100)
Dostum ajax isteği ikinci kez çalıştırılıyor olsa gerek. Şimdi diyeceksinki $(".kytbtn").click... dedim, ikinci kez basmıyorum ama görüyorum ki ...val("") ile temizlik yapmışsın, bu durumda aklıma sayfaya dahil edilen önceki ve sonraki js veya jquery kodları içinde event listener falan mı var, tekrar post ediyor diye düşünürüm. Belki cache falan kalmıştır, kontrol et, swal diyebir fonksiyon gördüm acaba bunun gibi bir fonksiyon mu butona tıklatıyor tekrar.

Son olarak(saçma bir yol, sorunu tespit edene kadar mandalın olur) dışarıda bir değişken tanımla, var registered = false; kayıt olunca onu true yap, tabi bunu her buton click dediğin kontrol edersin, böylelikle toggle, switch mantığıyla kaçınmış olursun.


var registered = false;
$(document).ready(function () {
if (!registered) {
$(".kytbtn").click(function () {
var kullaniciadi = $("[name=kullanici_ad]").val();
var eposta = $("[name=eposta]").val();
var parola = $("[name=parola]").val();
var parolatekrar = $("[name=parolatekrar]").val();
var uyemeslek = $("[name=uyemeslek]").val();

var kkayitdegerler = "kullaniciadi=" + kullaniciadi + "&eposta=" + eposta + "&parola=" + parola + "&parolatekrar=" + parolatekrar + "&uyemeslek=" + uyemeslek + "&parolatekrar=" + parolatekrar + "&g-recaptcha-response=" + grecaptcha.getResponse();
$.ajax({
type: "POST",
url: "kayit.php",
data: kkayitdegerler,
success: function (sonuc) {
if (sonuc == "Basarılı bir sekilde kayıt oldunuz!") {
registered = true;
$("[name=kullanici_ad]").val("");
$("[name=eposta]").val("");
$("[name=parola]").val("");
$("[name=parolatekrar]").val("");
$("[name=uyemeslek]").val("");

swal(sonuc);
} else {
swal(sonuc);
}
}
});
});
}
});



Ek olarak: YORÇI sesion ne alaka?
 

 

no time for caution

hsntngr hsntngr Kontör at Kullanıcı
  • Üyelik 21.09.2016
  • Yaş/Cinsiyet 31 / E
  • Meslek Full Stack Developer
  • Konum İstanbul Avrupa
  • Ad Soyad H** T**
  • Mesajlar 1155
  • Beğeniler 99 / 327
  • Ticaret 3, (%100)
Acaba bu hatayı butona iki kez bastığınızda mı alıyor olabilir misiniz ? Çünkü iki kez ajax isteği göndermiş olmanız lazım böyle bir hatayı almanız için muhtemelen buna eventi bir if koşuluna bağlamış olmanız da neden olabilir. Eğer hala hatanın nerden kaynaklandığını bulamıyorsanız, kullanıcı başka bir sayfaya yönlendirebilirsiniz başarılı bir kayıttan sonra.

Bu arada alt alt değişken tanımlarken her seferinde var yazmanıza gerek yok. En baştakine var yazıp diğer tanımlamalar için satır sonuna virgül koyablirsiniz. Var artık yerini let ve const a bırakmaya başladı, olası açıkları önlemek için bu tanımlayıcılar kullanılıyor. Eğer sonradan yeniden atama yapacağınız değişken varsa let, yoksa const kullanmanız daha sağlıklı olur.

Birde datayı çok farklı bir şekilde gönderiyorsunuz gibi, yani ben post datasının hiç öyle gönderildiğini görmedim. Tavsiyem aşağıdaki gibi kullanmanız.

let data = {};
data.kullaniciadi = kullaniciadi;
data.eposta = eposta;
data.parola = parola;
data.parolatekrar = parolatekrar;
data.uyemeslek = uyemeslek;

$.ajax({
type: "POST",
url: "kayit.php",
data: JSON.stringify(data),
..


Decimas muhtemelen oradaki swal, sweetalert kütüphanesinden geliyor hocam.

Edit: Hatalar için şöyle bir yapı kullanabilirsiniz hocam, hem performans açısından hem iyidir, hemde kullanım açısından size kolaylık sağlar.


$errors = [];
switch (true) {
case strlen($kuladi) < 4 || strlen($kuladi > 12):
array_push($errors, "Kayıt Olmaya Çalıştığınız Kullanıcı adı Sistemde Kayıtlı!");
break;
case !filter_var($eposta, FILTER_VALIDATE_EMAIL):
//bu işleme de pek gerek yok artık tarayıcılar hallediyor.
array_push($errors, "Geçerli bir E-Posta girin");
break;
case $epkontrol->rowCount():
array_push($errors, "Kayıt Olmaya Çalıştığınız E-Posta Sistemde Kayıtlı!");
break;
case strlen($sifrek) < 7:
array_push($errors, "Şifrre en az 7 karakter içermelidir.");
break;
case $sifrek !== $sifretekrar:
array_push($errors, "Şifreler birbirine uyuşmuyor.");
break;
case strlen($uye_meslek)<4:
array_push($errors, "Meslek kısmını boş bırakmayın.En az 4 karakter içermelidir.");
break;
}
echo json_encode($errors);


ve şifrelerinizi saklarken md5 değilde hash kullanmanızı tavsiye ederim, bir çok kişi özel karakter kullanmıyor ve kısa şifreler oluşturuyor. Bu tarz şifreleri md5 kayıtları olan sitelerden çok rahat patlatabiliyorlar.


$sifre = password_hash($sifrek, PASSWORD_DEFAULT);


sorunun cevabı dışında her şeyi söyledim gibi..
ismail03

kişi bu mesajı beğendi.

wmaraci
wmaraci

YORci YORci yorci.com Kullanıcı
  • Üyelik 06.02.2016
  • Yaş/Cinsiyet 29 / E
  • Meslek Arkaplan Yazılım
  • Konum Ankara
  • Ad Soyad I** Y**
  • Mesajlar 261
  • Beğeniler 88 / 127
  • Ticaret 21, (%100)

Decimas adlı üyeden alıntı

Dostum ajax isteği ikinci kez çalıştırılıyor olsa gerek. Şimdi diyeceksinki $(".kytbtn").click... dedim, ikinci kez basmıyorum ama görüyorum ki ...val("") ile temizlik yapmışsın, bu durumda aklıma sayfaya dahil edilen önceki ve sonraki js veya jquery kodları içinde event listener falan mı var, tekrar post ediyor diye düşünürüm. Belki cache falan kalmıştır, kontrol et, swal diyebir fonksiyon gördüm acaba bunun gibi bir fonksiyon mu butona tıklatıyor tekrar.

Son olarak(saçma bir yol, sorunu tespit edene kadar mandalın olur) dışarıda bir değişken tanımla, var registered = false; kayıt olunca onu true yap, tabi bunu her buton click dediğin kontrol edersin, böylelikle toggle, switch mantığıyla kaçınmış olursun.


var registered = false;
$(document).ready(function () {
if (!registered) {
$(".kytbtn").click(function () {
var kullaniciadi = $("[name=kullanici_ad]").val();
var eposta = $("[name=eposta]").val();
var parola = $("[name=parola]").val();
var parolatekrar = $("[name=parolatekrar]").val();
var uyemeslek = $("[name=uyemeslek]").val();

var kkayitdegerler = "kullaniciadi=" + kullaniciadi + "&eposta=" + eposta + "&parola=" + parola + "&parolatekrar=" + parolatekrar + "&uyemeslek=" + uyemeslek + "&parolatekrar=" + parolatekrar + "&g-recaptcha-response=" + grecaptcha.getResponse();
$.ajax({
type: "POST",
url: "kayit.php",
data: kkayitdegerler,
success: function (sonuc) {
if (sonuc == "Basarılı bir sekilde kayıt oldunuz!") {
registered = true;
$("[name=kullanici_ad]").val("");
$("[name=eposta]").val("");
$("[name=parola]").val("");
$("[name=parolatekrar]").val("");
$("[name=uyemeslek]").val("");

swal(sonuc);
} else {
swal(sonuc);
}
}
});
});
}
});



Ek olarak: YORÇI sesion ne alaka?



Session bazı geliştirme ortamı web sunucularında varsayılan olarak başlatılmış geliyor, sunucuda bu ayar açık olmayabilir hatanın sebebi session'un en başa yazılmamış olması olabilir, dolayısıyla hata verdiği için kayıt işlemini yapıyor ancak sessionu kaydetmiyor olabilir

diye düşünmüştüm cevabı yazarken fakat olay farklıymış, ben kayıt yaptıktan sonra session kaydedip giriş yapmasını istiyor diye düşünmüştüm. Gece yanlış okudum herhalde.
 

 

yazilimsoru yazilimsoru Yazilimsoru.com Kullanıcı
  • Üyelik 05.03.2018
  • Yaş/Cinsiyet 26 / E
  • Meslek Web developer
  • Konum İstanbul Avrupa
  • Ad Soyad İ** K**
  • Mesajlar 437
  • Beğeniler 132 / 131
  • Ticaret 0, (%0)
YORÇI Decimas ve hsntngr hepinizede cevabınız için teşekkür ederim. @hsntngr ajax kodlarımı sizin yazdığınız gibi değiştirdim ama olmadı malesef.console'da kullaniciadi is not defined yazıyordu.Her neyse ilk dediğiniz olaya gelirsek iki kere basmayla ilgili olduğunu düşünmüyorum çünkü local'de gayet düzgün çalışıyor.Sadece sunucuya atınca problem çıkarıyor.Şifreler içinde hash kullanmamı önermişsiniz fakat en başta md5 ile kayıt edilmiş şifreler var.Ama öneriniz için teşekkür ederim.Belki md5 den sonra birde hash ile şifreleme yaparım daha garanti olur :)
 

 

Web sitem: yazilimsoru.com
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al