• Forum vBulletin altyapısından Xenforo altyapısına geçirildi, bu sebeple eski şifreleriniz ile foruma giriş yapamayacaksınız, parolamı unuttum adımından mailiniz ile şifre sıfırlayarak giriş yapabilirsiniz.

    Üyeliklerinde geçerli bir mail adresi olmadığı için sıfırlama yapamayacak kullanıcılar forum kullanıcı adlarını ve yeni şifrelerini yazarak info@maxigame.org adresine şifre sıfırlamak istediklerine dair bir mail göndersinler şifrelerini sıfırlayıp mail adreslerini güncelleyeceğiz. Şifreniz sıfırlandıktan sonra foruma giriş yapıp tekrar istediğiniz gibi değiştirebilirsiniz.

Php Switch Case kullanımı hakkında

Keep Calm Party On

Daimi Üye
Aktiflik
K.Tarihi
17 Ağu 2013
Mesajlar
77
Puanı
4
Merhaba arkadaşlar ufak bir sorunum var tam olarak sorun da sayılmaz fakat içinden bir türlü çıkamadım jquery ile anlık kontrol edilen basit bir kayıt formu hazırlıyorum her input ayrı ayrı kontrol edileceği için switch case ile yapmak kod karmaşasını önlemek ve anlaşılır olması açısından daha iyi olur diye düşündüm input içerisindeki değerleri ajax.php isimli bir dosyaya çekip gerekli kontrolleri yaptım sorunsuz çalıştı fakat daha önce switch case yapısını kullanmadığım için şartlar sağlandığında veritabanına kaydı nasıl geçerim bilemedim :rbk: kodlar basit olarak aşağıdaki gibidir güvenlik açıkları olduğunu söyleyen arkadaşlar olabilir localde çalıştığım için ve sistemi tam olarak oturtamadığım için güvenlik konusunu şuanda pek önemsemiyorum

Açıklayıcı olması açısından kodları kırpabildğim kadar kırptım :)

<script type="text/javascript">
$(function(){
$(".sonuclar").hide();
$("input[name='fnames']").keyup(function(){

var deger = "fnames="+$(this).val();

$.ajax({
type: "POST",
url: "ajax.php?s=fnames",
data: deger,
success: function(cevap){

$(".sonuclar").show().html(cevap);

}
});

});
});

$(function(){
$(".sonuclar2").hide();
$("input[name='lnames']").keyup(function(){

var deger = "lnames="+$(this).val();

$.ajax({
type: "POST",
url: "ajax.php?s=lnames",
data: deger,
success: function(cevap){

$(".sonuclar2").show().html(cevap);

}
});

});
});
</script>

<form action="" method="post" id="kayitform">
<input type="text" name="fnames" class="fnames">
<div class="sonuclar"></div>
<input type="text" name="lnames" class="lnames">
<div class="sonuclar2"></div>
<input type="submit">Kaydol</input>
</form>

Ajax.php dosyasıda aşağıdaki gibidir

<?php

$par = $_GET["s"];
switch($par)
{

case "fnames":

$fnames = $_POST["fnames"];
$uzunluk = strlen($fnames);
if(is_numeric($fnames))
{
echo "Adın sadece sadece karakter içermelidir";
}
else if($uzunluk < 2 or $uzunluk > 15)
{
echo "Adın en az 2 en fazla 15 karakter olmalıdır";
}
else if ($fnames =="admin" or $fnames =="administrator" or $fnames =="yönetici" or $fnames =="moderatör")
{
echo "Adın uygunsuz karakter içeriyor";
}
else
{
echo "Uygun !";
}

break;

case "lnames":

$lnames = $_POST["lnames"];
$uzunluk = strlen($lnames);
if(is_numeric($lnames))
{
echo "Soyadında sadece karakter kullanabilirsin";
}
else if($uzunluk < 2 or $uzunluk > 15)
{
echo "Soyadın en az 2 en fazla 15 karakter olmalıdır";
}
else
{
echo "Uygun !";
}

break;

}

?>

- - - Güncellendi - - -
[MENTION=11381]sarkolata[/MENTION] [MENTION=46955]CottonCandy[/MENTION] arkadaşlar bilginiz varsa yardımcı olabilir misiniz ? ??????
 
Son düzenleme:
pek anlamadım açıkcası :)
Kerim kardeşim javascript kodlarını dikkate alma ajax dosyasında php ile basit bir iki şart girdim deneme amaçlı sorun yani çözemediğim nokta switch case ile şartlar karşılanınca veritabanına nasıl kaydederim :) en sonda default işlemi var onada şartlar karşılamassa istediğiniz komutu girin demişler php.net de [MENTION=1]Deepblue[/MENTION] ümit abi siz anlar mısınız ?
 
Son düzenleme:
Ben soruyu anlamadım. Switch case düzgün yazılmış gibi gözüküyor. "Uygun" diye echoladıktan sonra veritabanına mı işlemek istiyorsun? Sorun ne?

SM-N9005 cihazımdan Tapatalk kullanılarak gönderildi
 
Ben soruyu anlamadım. Switch case düzgün yazılmış gibi gözüküyor. "Uygun" diye echoladıktan sonra veritabanına mı işlemek istiyorsun? Sorun ne?

SM-N9005 cihazımdan Tapatalk kullanılarak gönderildi
Aynen öyle usta kodda sorun yok çalışıyor fakat tüm kontroller yapıldıktan sonra sorun yok ise mysql veritabanına kontrol edilen bilgileri kaydetmem lazım ama beceremedim yukaridaki switch case yapisini bana bi tekrar kayda uygun düzenlesen çok sevinirim mantığını kavramak açısından iyi olur :)
 
Bunun bir cok yöntemi var aslinda. Zamanla uzmanlastikca kendi yöntemini kullanırsın. Ama en genel yaklasimi göstereyim sana;

switch($par)
{
case "fnames":
// kontroller
break;

case "lnames":
//kontroller
break;
}

Şimdi senin switch case in bu. Kontrolleri yaptıktan sonra bir sorun varsa, echolayarak sorunu "sadece söylüyorsun". Ama bir şey yapmıyorsun.

Kontrollerden sonra hataları bildirmek için echo yerine die() kullanırsan o string son olarak echolanır ve script çalıştırmayı durdurur. Ölür yani.

switch($par)
{
case "fnames":
// kontroller
if(sorun) die("şu sebepten dolayı isminiz kabul edilmedi");
break;

case "lnames":
//kontroller
if(sorun) die("şu sebepten dolayı bu soyad kabul edilmedi");
break;
}

Bu mantıkla yaptığın zaman hata ajaxa bakan sayfaya dönecek, script çalışmaya devam etmeyecek. Bu durumda sorun yoksa "uygun" diye echolamana da gerek yok.

Bunu yaptıktan sonra switch caseinin sonuna yerleştirebilirsin mysql komutlarını. Zaten bir sorun çıkarsa script asla oraya kadar çalışmayacak. Eğer mysql kaydı da başarılı olursa "kayıt başarılı" gibi bir mesaj echolatıp döngüyü tamamlayabilirsin.

Bu arada is_numeric() bildiğim kadarıyla değişkeninin tamamen rakamlardan oluşup oluşmadığına bakıyor. İçinde hiçbir rakam, özel karakter (kesme işareti, soru işareti vsr.) olmadığını anlaman için regex kullanman lazım. Bunu da bir araştır. Doğru regexi (internette de bulabilirsin) yazdıktan sonra preg_match() ile kontol edersin.

Kolay gelsin ;)


SM-N9005 cihazımdan Tapatalk kullanılarak gönderildi
 
Bunun bir cok yöntemi var aslinda. Zamanla uzmanlastikca kendi yöntemini kullanırsın. Ama en genel yaklasimi göstereyim sana;

switch($par)
{
case "fnames":
// kontroller
break;

case "lnames":
//kontroller
break;
}

Şimdi senin switch case in bu. Kontrolleri yaptıktan sonra bir sorun varsa, echolayarak sorunu "sadece söylüyorsun". Ama bir şey yapmıyorsun.

Kontrollerden sonra hataları bildirmek için echo yerine die() kullanırsan o string son olarak echolanır ve script çalıştırmayı durdurur. Ölür yani.

switch($par)
{
case "fnames":
// kontroller
if(sorun) die("şu sebepten dolayı isminiz kabul edilmedi");
break;

case "lnames":
//kontroller
if(sorun) die("şu sebepten dolayı bu soyad kabul edilmedi");
break;
}

Bu mantıkla yaptığın zaman hata ajaxa bakan sayfaya dönecek, script çalışmaya devam etmeyecek. Bu durumda sorun yoksa "uygun" diye echolamana da gerek yok.

Bunu yaptıktan sonra switch caseinin sonuna yerleştirebilirsin mysql komutlarını. Zaten bir sorun çıkarsa script asla oraya kadar çalışmayacak. Eğer mysql kaydı da başarılı olursa "kayıt başarılı" gibi bir mesaj echolatıp döngüyü tamamlayabilirsin.

Bu arada is_numeric() bildiğim kadarıyla değişkeninin tamamen rakamlardan oluşup oluşmadığına bakıyor. İçinde hiçbir rakam, özel karakter (kesme işareti, soru işareti vsr.) olmadığını anlaman için regex kullanman lazım. Bunu da bir araştır. Doğru regexi (internette de bulabilirsin) yazdıktan sonra preg_match() ile kontol edersin.

Kolay gelsin ;)


SM-N9005 cihazımdan Tapatalk kullanılarak gönderildi
sağolasın usta işten geldim aşırı yorgunum sabah deneyip sonucu söylerim tekrar çok sağol :)
 
Geri
Üst