php + Ajax Bir Yerde Takıldım.!

Kodla Büyü

mustafayilmaz28

Süper Üye
Süper Üye
Seçkin Üye
Mesajlar
1,425
merhaba arkadaşlar.
bir adet giriş formum var
girişformu.php
İçeriği
<input type="text" name="kadi" size="20"/><br>
<input type="password" name="sifre" size="20"/><br>
<input type="button" onclick="ajaxgit()"/><br>
<div class="mesajdivi"> </div>
bir adet ajax dosyam var
ajax.js
içeriği
function ajaxgit() {
kadi = $('input[name="kadi"]').val();
sifre = $('input[name="sifre"]').val();
$.post('kontrol.php', {kadi: kadi,sifre:sifre}, function (cevap) {
$('.mesajdivi).html(cevap);
})
}
bir adet de kontrol dosyam var
kontrol.php
içeriği
<?php
if((empty($_POST["kadi"])) || (empty($_POST["sifre"])) {
echo "<img height=\"20\" width=\"20\"src=\"hata.png\" alt=\"\" /> <a>Hata :</a> kullanıcı adı veya şifre Boş";
}
elseif(($_POST["kadi"]!="1) || ($_POST["sifre"]!="1)){
echo "<img height=\"20\" width=\"20\"src=\"hata.png\" alt=\"\" /> <a>Hata :</a> kullanıcı adı veya şifre yanlış";
}
else{
echo "<img height=\"33\" width=\"33\"src=\"tamam.png\" alt=\"\" /> <a>kullanıcı adı ve şifre doğru</a>Yönlendiriliyorsunuz";
}
?>

yukarıdaki kodlar sorunsuz çalışıyor :) ama benim istediğim eğer giriş başarılı ise yani
else{
echo "<img height=\"33\" width=\"33\"src=\"tamam.png\" alt=\"\" /> <a>kullanıcı adı ve şifre doğru</a>Yönlendiriliyorsunuz";
}
bu kısım çalıştı ise giriş ekranına mesajı yazdırdıktan sonra 2 saniye bekledikten sonra "index.php" ye gitmesini istiyorum. sanırım bunu ajax dosyasında yapmam gerekiyor. ama Denemelerimden bir sonuç alamadım :(
yardımcı olacak arkadaşlara teşekkür ederim.
 
Sayın hocam,
Yapmanız gereken işlem şu, kontrol.php dosyasına bilgileri gönderdikten sonra bir hata kodu üretin. Eğer ajaxgit fonksiyonu içerisinde de bu hata kodunu (sizde cevap değişkeni) alın eğer 1 ise sorun yok kabul edip $('.mesajdivi).html("<img height=\"33\" width=\"33\"src=\"../tasarimresimler/yonetici_resimler/tamam.png\" alt=\"\" /> <a>kullanıcı adı ve şifre doğru</a>Yönlendiriliyorsunuz"); kodu ile ekrana bilgi notunu getirin. Şifre ve kullanıcı hataları için de benzer kodları yazın. Yani işi kontrol.php dosyasında değil, ajaxgit fonksiyonu içerisinde halledecekseniz, kontrol.php sadece 1, 2, 3 gibi bir değer döndürecek, siz bunlara bakarak yönlendirme işlemini yapacaksınız. Eğer hata yoksa yönlendirme işlemini aşağıdaki kod ile yapabilirsiniz. 2000 ifadesi 2 saniye demek.
Kod:
setTimeout("location.href = 'http://www.siteadi.com/index.php';",2000);
 
öncelikle tekrar teşekkür ederim hocam
anladım, sizin dediğiniz sanırım şu
kontrol.php içinde hiçbir mesaj yazdırma sadece atıyorum $sonuç="true" yada $sonuç="false" değerini döndür.
buraya kadar tamam hocam anladım. ama ben burada bir adım daha ileriye gidip
kontrol.php içinde hem ekrana birşeyler yazayım hemde $sonuç="true" yada $sonuç="false" değerini döndüreyim
burasıda tamam
ama
ajax.js içinde bu kontrol.php den gelen $sonuç değişkenini nasıl okurum?
 
Verdiğiniz koddaki
$('.mesajdivi).html(cevap);
satırında yer alan cevap değişkenine, kontrol.php içerisinde echo ile ne yazdırırsanız o aktarılır. Sizin kod örneğinizde bu değişkene <img height=.... şeklinde echo ile yazdırılan ifadeler aktarılır. Siz de bunu yukarıdaki kod ile mesajdivi isimli div etiketi içerisine yazdırıyorsunuz.
Kontrol.php içerisinde ekrana bir şey yazdıramazsınız. Yazdırma işlemi sizin kodlarda da benim kodlarda da javascript ile yaptırılmaktadır. Ajax'ın olayı zaten budur. Siz bir sayfayı çağırırsınız, o sayfanın ekran çıktısı cevap olarak geri döner ve siz bunu kullanırsınız.
 
yakuphan' Alıntı:
Verdiğiniz koddaki
$('.mesajdivi).html(cevap);
satırında yer alan cevap değişkenine, kontrol.php içerisinde echo ile ne yazdırırsanız o aktarılır. Sizin kod örneğinizde bu değişkene <img height=.... şeklinde echo ile yazdırılan ifadeler aktarılır. Siz de bunu yukarıdaki kod ile mesajdivi isimli div etiketi içerisine yazdırıyorsunuz.
Kontrol.php içerisinde ekrana bir şey yazdıramazsınız. Yazdırma işlemi sizin kodlarda da benim kodlarda da javascript ile yaptırılmaktadır. Ajax'ın olayı zaten budur. Siz bir sayfayı çağırırsınız, o sayfanın ekran çıktısı cevap olarak geri döner ve siz bunu kullanırsınız.

hocam anladım onda sıkıntı yok da benim dediğim gibi yapmak daha doğrusu öğrenmek istiyorum.(ve buna ek olarak sorum şu ben php de hem ekrana yazdıracağım hemde bir veya iki tanede değişken yollayacağım)
yani benim yapmak istediğim şu kontrol php içinde ekrana giriş başarısız yazdırdım ya birde $giriş="false " diye bir değer göndermek istiyorum ajax.js ye
ajax.js bu kontrol.php içindeki echo yu yazsın ama yazdıktan sonra birde gelen değişkeni($giriş değişkenini) kontrol etsin eğer true ise biraz bekledikten sonra başka sayfaya geçsin, eğer true değilse de hiçbir şey yapmasın. :oops:
 
İşte dediğinizi yapamazsınız, yani hem ekrana bir şey yazdırayıp, hem de değişken göndereyim olayı, Ajax'da yok, eğer dediğiniz gibi olsa zaten ajax olayının bir anlamı kalmazdı. Ekrana bir şeyler yazdırma işlemini ancak ve ancak ajax ile okuttuktan sonra javascript kodlarıyla yapabilirsiniz.
Bahsettiğinizi yapmak için kontrol.php içerisinde şöyle bir şey yapmanız gerekir.
echo "giriş başarısız.###false";
ajax.js içerisinde ise ilgili yeri aşağıdaki gibi değiştirmelisiniz. Aşağıdaki kodda kontrol.php sayfasında echo ile yazdırılan bilgi ajax.js içerisindeki function(cevap) ifadesindeki cevap değişkenine metin olarak aktarılır. Kodda yazdığım split fonksiyonu ile metni ### sembollerini kullanarak böldük, n dizisine aktardık. n[0] değişkeninde "giriş başarısız" n[1] değişkeninde "false" değeri yer almaktadır. Biz de bunları kullandık. Yalnız false ifadesi boolean (mantıksal) değil, metin (string) olarak gelir, o yüzden sonuc==false şeklinde değil sonuc=="false" şeklinde sorgulamalısınız. Ajax'ta işler bu şekilde yürümektedir. Son mesajınızdaki işlemi ajaxla ancak bu şekilde yapabilirsiniz.
$.post('kontrol.php', {kadi: kadi,sifre:sifre}, function (cevap) {
var n=cevap.split("###");
var mesaj = n[0];
var sonuc = n[1];
$('.mesajdivi).html(mesaj);
if (sonuc == "false") {
//birşey yapma
}
})
 
hocam tekrar çok teşekkür ederim.
Allah Razı Olsun.
ajax.js
son olarak Aşağıdaki gibi oldu.
function ajaxgit() {
kadi = $('input[name="kadi"]').val();
sifre = $('input[name="sifre"]').val();
$.post('kontrol.php', {kadi: kadi,sifre:sifre}, function (cevap) {
sonuc = cevap.split("#");
mesaj = sonuc [0];
yonlendirme = sonuc [1];
$('.mesajdivi').html(mesaj);
if (yonlendirme=="true"){
setTimeout("location.href = 'yonlendirdigimadres.php';",2000);
}
});
}
kontrol.php ise
<?php
if((empty($_POST["kadi"])) || (empty($_POST["sifre"])) {
echo "<img height=\"20\" width=\"20\"src=\"hata.png\" alt=\"\" /> <a>Hata :</a> kullanıcı adı veya şifre Boş"."#"."false";
}
elseif(($_POST["kadi"]!="1) || ($_POST["sifre"]!="1)){
echo "<img height=\"20\" width=\"20\"src=\"hata.png\" alt=\"\" /> <a>Hata :</a> kullanıcı adı veya şifre yanlış"."#"."false";
}
else{
echo "<img height=\"33\" width=\"33\"src=\"tamam.png\" alt=\"\" /> <a>kullanıcı adı ve şifre doğru</a>Yönlendiriliyorsunuz"."#"."true";
}
?>
gibi oldu.
 
Olduğuna sevindim.
Eğer bu uygulamayı gerçek projelerinizde uygulamayı düşünüyorsanız, güvenlik önlemlerini almayı unutmayın. Örneğin bilgileri gönderirken beraberinde session olarak tanımladığınız benzersiz kodu da gönderin. Kontrol.php dosyasında bu kodu da kontrol edin aksi halde brute force saldırılarında ya da kontrol.php dosyasına başka bir siteden veri gönderilmesini engelleyemezsiniz.
 
BBNET
Geri
Üst