PHP: AJAX İl – İlçe – Semt – Mahalle Seçimi Güncelleme Uygulaması

PHP: AJax uygulaması Chain Select

 

Chain Select uygulamaları ile ilgili daha önce yazdığım iki farklı makale kısa zamanda Serpito.com‘un en çok yorum ve ziyaret alan uygulamalar oldu.

Gelen yorumlarda özellikle bir çok arkadaşın istediği,  veritabanından gelen , önceden atanmış, il ilçe semt ve mahalleleri seçebilmesi için gerekli update kodlarını paylaşıyorum.  

index.php de , select elemenleri eklerken, ufak bir değişiklik yapmamız gerekiyor. #il  selectinin Şehir ID ‘ini selected=”selected”  olarak tanımlıyoruz.

index.php


<select id="il" name="il">
<option value="0">Şehir Seçiniz</option>
<?php
$sql=$db->q("SELECT id,il_adi FROM il ORDER BY id ASC");
while($row=$db->fassoc($sql)){
?>
<option value="<?=$row&#91;'id'&#93;?>" <?php if($row&#91;'id'&#93; == 7){ ?> selected="selected" <?php } ?>><?=$row&#91;'il_adi'&#93;?></option>
<?php
}
?>
</select>

<select name="ilce" id="ilce">
<option value="0">İlçe Seçiniz</option>
</select>
<select name="semt" id="semt">
<option value="0">Semt Seçiniz</option>
</select>
<select name="mahalle" id="mahalle">
<option value="0">Mahalle Seçiniz</option>
</select>

<script src="selectchained.js" type="text/javascript"></script>
<script>
$("#ilce").remoteChained("#il", "smtr.php?ilce=83");
$("#semt").remoteChained("#ilce", "smtr.php?semt=440");
$("#mahalle").remoteChained("#semt", "smtr.php?mahalle=4833");
</script>

 

Ajax ile data getiren smtr_edit.php’nin güncel halini aşağıda bulabilirsiniz.

smtr_edit.php


<?php
require_once("mysql.php");

if(isset($_GET&#91;'il'&#93;)){

$il=(int)$_GET&#91;'il'&#93;;
$secili=(int)$_GET&#91;'ilce'&#93;;
if($il>0){
$dk=$db->q("SELECT `id`,`ilce_adi` FROM `ilce` WHERE `il_id`='$il' ORDER BY `id` ASC");

if($secili>0){
$list='{"selected":"'.$secili.'",';
}else{
$list='{"0":"Seçiniz",';
}
while($ilr=$db->fassoc($dk)){
$list.='"'.$ilr['id'].'":"'.$ilr['ilce_adi'].'",';
}
$list=substr($list,0,-1);
$list.="}";
echo $list;
}
}
else if(isset($_GET['ilce'])){
$ilce=(int)$_GET['ilce'];
$secili=(int)$_GET['semt'];
if($ilce>0){
$dk=$db->q("SELECT `id`,`semt_adi` FROM `semt` WHERE `ilce_id`='$ilce' ORDER BY `id` ASC");
if($secili>0){
$list='{"selected":"'.$secili.'",';
}else{
$list='{"0":"Seçiniz",';
}
while($ilr=$db->fassoc($dk)){
$list.='"'.$ilr['id'].'":"'.$ilr['semt_adi'].'",';
}
$list=substr($list,0,-1);
$list.="}";
echo $list;
}
}
else if(isset($_GET['semt'])){
$semt=(int)$_GET['semt'];
$secili=(int)$_GET['mahalle'];

if($semt>0){
$dk=$db->q("SELECT `id`,`mahalle_adi` FROM `mahalle` WHERE `semt_id`='$semt' ORDER BY `ordernum` DESC, id ASC");

if($secili>0){
$list='{"selected":"'.$secili.'",';
}else{
$list='{"0":"Seçiniz",';
}

while($ilr=$db->fassoc($dk)){
$list.='"'.$ilr['id'].'":"'.$ilr['mahalle_adi'].'",';
}
$list=substr($list,0,-1);
$list.="}";
echo $list;
}
}

$db->close();
?>

 

Demo

49 thoughts on “PHP: AJAX İl – İlçe – Semt – Mahalle Seçimi Güncelleme Uygulaması

  • ALLAH (cc) Razı olsun emeğine sağlık.

    Bu sisteme ilave olarak cadde ve sokak isimlerini nasıl ekleyebiliriz.

  • teşekkür ederim zafer, İnşaAllah;

    Cadde ve sokaklar ptt sisteminde paylaşılmıyor. PTT kendi sisteminde kullanıyor ama kamuya açmıyor sanırım.
    Database bulabilirsem eklerim

  • çok güzel bir uygulama olmuş, teşekkür ederim.
    sadece smtr_edit.php içindeki sql’de sizin verdiğiniz örnekte ki order by’da verdiğiniz id yerine ilce_adi yaptığım halde sıralamayı id’ye göre yapmaya devam ediyor, gözümden kaçan bir şey mi var acaba.
    yardımınızı rica etsem.

  • smtr_edit.php içinndeki ilçeler sorgusunun sıralamasını değiştiremedim, ilçe adına göre sırala veya id ye göre sıralama yapma istiyorum, ne yaptıysam olmadı.Bu konu hakkında yardımcı olurmusunuz.

  • id ye göre veya isime göre mysql den veri çekip listeleme diye birçok yardımcı konu var aratırsanız çözersiniz mutlaka

  • üstad şimdi bu şekilde veri tabanına id değerini yazıyor “” id yerine il adını nasıl yazdıra bilirim

  • @Ömer, sistem zaten ID kayıt etmesi için kodlanmış. Sen il adı istiyorsan, database kayıt etmeden önce, il adını sehir tablosundan getirip , ona göre datanı değiştirmen gerek.

  • Onu bir türlü yapamadım çözümü id yerine il adını yazdırmakta buldum örnek bi kod varsa elinizde çok makbule geçer

  • @Ömer, smtr_edit.php dosyasında aşağıdaki değişiklikleri yap;

    17. satır
    $list.='"'.$ilr['ilce_adi'].'":"'.$ilr['ilce_adi'].'",';

    35. Satır
    $list.='"'.$ilr['semt_adi'].'":"'.$ilr['semt_adi'].'",';

    56. satır

    $list.='”‘.$ilr[‘mahalle_adi’].'”:”‘.$ilr[‘mahalle_adi’].'”,’;

    Satırları bu şekilde güncelle. seçimlerinde id yerine ilçe, semt ve mahalle isimleri id değil isimleri gelecek. sonrası kendi kodlarında çözülecek.

  • son bir sorum daha olacak kusura bakmayın sizide rahasız ediyorum sürekli il adını nasıl yazdırcaz?

  • atilla bey kusura bakmayın yine ben ben bu dediğinizide yapamadım

  • Anlıyorum hocam, ama kendi kodlarım için destek verebilirim ancak. Her ziyaretçinin kodlarıyla ilgilenme fırsatım olmuyor.

    Büyük bi problem değil, sadece iki satırlık , databaseden veri çekme işlemin kaldı, biraz araştırın , umarım kolayca çözebilirsiniz .

  • merhaba gzel çalışma fakat indirdiğim dosyada veri tabanı yok nerde bulabilirim ?

  • Hocam eline sağlık uygulama çok işime yaradı fakat ilk başta çalıştırdıktan sonra siteye farklı şeyler ekledikten sonra çalışmıyor siteden ayırıyorum çalışıyor jquery çakışması olabilir diye tüm js kodlarını temizliyorum yine ilçeler gelmiyor jquery çakışması olabilir mi?

  • çok güzel bir uygulama olmuş, teşekkür ederim.
    sadece smtr_edit.php içindeki sql’de sizin verdiğiniz örnekte ki order by’da verdiğiniz id yerine ilce_adi yaptığım halde sıralamayı id’ye göre yapmaya devam ediyor, bunu nasıl çözeriz çok önemli benim için tekrardan teşekkürler.

  • güzel paylaşım çok teşekkürler. benim bir sorum olucaktı. bayi sistemleri yapıyorlar bu şekilde şehir seçiyosun ardından bayiyi seçtiğin gibi adres ve bilgileri geliyor. Acaba select tagının arasına ne yazmak gerekiyor ki veri tabanında ekli olan html kodu bayi seçiminden sonra tablo şeklinde versin mesela. Uygulamanın örneği anlatmak istediğim tam anlamıyla şurda var

  • Bu sistemin excel deki filitreleme özelliği gibi alta alta o kategoriye ait verileri sıralayabilen örneği var mı?

  • Emeğine sağlık güzel paylaşım olmuş. Demolar çalışmıyor ama site sanırım.

  • @anar samadov;

    Teşekkür ederim,  evet demolar bir süreliğine güvenlik sebebiyle askıya alındı. 
    Ama kaynak kodlarını download etmeye devam edebilirsiniz.

  • Merhabalar Atilla Hocam,
    Sorup sormamak arasında kaldım bütün yorumları görünce bir an sizin yerinize koyup kendimi usandığınızı düşündüm fakat sakıncası yoksa bir hususta yardımınızı rica edeceğim.

    Şimdi öncelikle sistem çok iyi bir şekilde çalışıyor ellerinize sağlık,  Soruma gelecek olursak eğer, Şimdi kullanıcı bütün seçenekleri seçtikten sonra en son seçeneği yani mahalle seçeneğini text içerik olarak yazdırmak istiyorum, epey uğraştım fakat maalesef size sormak zorunda kaldım.  Son seçenek olan mahalle – köy seçeneğini ben normal içerik sayfası gibi kullanacağım diğer üç ana seçeneği ise kategori olarak,
    Kısaca yapım bir vize sitesi olacak;  ilk olarak ülkeyi seçtireceğim, sonra vize çeşidini ardından meslek gurubu seçeceğim ve “MAHALLE” seçeneği olan son seçenek olarak ta buradaki bilgiyi normal text olarak ekrana yazdıracağım. Çok zormu bilmiyorum ama epey denememe rağmen beceremedim, sadece son seçeneği select olarak değilde örneğin echo = $mahalle; gibi normal içerik olarak yazdıracağım. Yardım ederseniz çok mutlu olacağım

  • @mutlu;
    aşağıdaki  kod blogunu  ,  remoteChained   $(“#mahalle”).remoteChained(“#semt”, “…   komutlarının altına eklersen, istediğine ulaşırsın;


    $( "#mahalle" ).change(function() {
      alert(this.value());
    });

  • Öncellikle Cevabınız için teşekkür ederim dediğiniz gibi index.php de kod  bloğunu ekledim fakat 🙁 ekrana nasıl yazdıracağı mı çözemedim ilk sorumda olduğu gibi mahalle kısmını bir text metin miş gibi yazdırmak istiyorum select dışında  

  • ID’si ekran olan div açıp, 

    <div id="ekran"></div>

    javascript blogunu da aşağıdaki gibi güncelleyiver;

    $( "#mahalle" ).change(function() {
        $( "#ekran" ).html(this.val());
    });

  • Merhabalar Atilla Hocam, dediğiniz  kod bloğunu

    $(“#ilce”).remoteChained(“#il”, “smtr.php”);
    $(“#semt”).remoteChained(“#ilce”, “smtr.php”);
    $(“#mahalle”).remoteChained(“#semt”, “smtr.php”);
    $( “#mahalle” ).change(function() {
        $( “#ekran” ).html(this.val());
    });

    ve aşağıdaki şekilde denedim

    $(“#ilce”).remoteChained(“#il”, “smtr.php”);
    $(“#semt”).remoteChained(“#ilce”, “smtr.php”);
    $( “#mahalle” ).change(function() {
          $( “#ekran” ).html(this.val());
    });

    selec seçeneklerinin yanına da  ekledim fakat, çalıştıramadım acaba nerede yanlış yaptım tekrar yardımınıza ihtiyacım var.

  • Atilla hocam çok uğraştırıyorum ama her iki şekilde de denedim, $(“#mahalle”).remoteChained(“#semt”, “smtr.php”); bu kodu kaldırdım olmadı sonra yine ekledim yine olmadı maalesef

  • hemen denedim,

    ilk olarak
    $(“#ilce”).remoteChained(“#il”, “smtr.php”);
    $(“#semt”).remoteChained(“#ilce”, “smtr.php”);
    $(‘#mahalle’).on(‘change’, function() {
      alert( this.val());
    });
    bu şekilde yaptım olmadı,

    ardından bu şekilde denedim
    $(“#ilce”).remoteChained(“#il”, “smtr.php”);
    $(“#semt”).remoteChained(“#ilce”, “smtr.php”);
    $(“#mahalle”).remoteChained(“#semt”, “smtr.php”);
    $(‘#mahalle’).on(‘change’, function() {
      alert( this.val());
    });

    yine olmadı
                   

  • Atilla Hocam, sistemime entegre etmeden önce sizin sisteminizi tam çalışır hale getirmek istedim o yüzden sizin verdiğiniz demonun üzerinden çalıştım,
    http://parantezdagitim.com/sel/ burada deme olarak görebilirsiniz. Sadece son seçeneği text olarak yazırmak istiyorum o yüzden sizin demonuzu buna göre düzenlemeye çalıştım. 

  • Hocam merhaba. php’ye yeni başladım ve yavaş yavaş öğreniyorum. Sizin bu uygulamanızı denemek ve çalıştığını görmek istiyorum ama localde bir türlü başlatamadım. Dosyaları local’e attım ve index.php’yi açtım, çalışmadı. Sunucuya attım, yine çalışmadı. Acaba sql doyasını phpmyadmin’e import etmek mi gerekiyor? Bu uygulamayı çalıştırmak için ne yapmam gerekiyor, yardım edebilirseniz çok sevinirim. Şimdiden teşekkürler..

  • caner,  SQL dosyasını  http://www.box.com/s/268ac6089142a0b55ada  burdan indirebilirsin.

    İl, ilçe , semt , mahalle veritabanını import etmeden çalıştıramazsın

  • Herşeyden önce emeğinize sağlık.
    Hersey guzelde burdaki verileri baska bi tabloyo kaydettiremedim müsayit olan bir arkadaş yardımcı olabilir mi? Teşekkürler

  • Merhaba. Localde Sql import ettim ve kodları çalıştırdım ama sadece iller select’e geliyor. Illerden başka bişey gelmiyor sanırım ajax’ım çalışmıyor.

  • Merhaba. Bu sistemi bir emlak sitesi için deniyorum ama emlak tasarımımda diye class var. Bunu class birlikte kullanınca herhalde id ile class çakışıyor ve sistem haliyle çalışmıyor. Bunu nasıl halledebiliriz. Şimdiden teşekkürler! 🙂

  • aynı id e sahip 2 den fazla form da çalışmıyor aynı sayfada..bir çözümü var mıdır

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir