PHP - Birbirine Bağlı Olarak Değişen Combobox Örneği+YARDIM

Kodla Büyü

kaplan34

Site Gezgini
Mesajlar
39
Merhabalar arkadaşlar.. Paylaşacağım kodu internette uzunca bir araştırmanın sonucunda buldum. İnternette Türkçe sitelerde ordan burdan alınmış bölük pörçük ve çalışmayan kodlarla bir günümü harcadıktan sonra Ceviz forumdan Turkoman kullanıcı adlı kişinin paylaştığı dosyayı onun da haberi olarak sizlerle paylaşıyorum. Arşivlik bir çalışma. Sizinde elinizde bu tarz çalışmalar varsa (farklı dillerde de olsa) bu sayfanın devamında paylaşırsanız çok makbule geçecektir.

Paylaşılan dosyada birbirine bağlı olarak değişen il - ilçe combobox yapısı bulunmaktadır. Sıkıştırılmış dosyanın içinde veritabanı ile ilgili açıklama yazısı var o sebeple tekrar buraya yazma gereği görmüyorum.

Sistem de il seçilince ilgili ilçeler geliyor. Olaki bunu veri tabanına kaydedeceğiniz bir forma dönüştürmek istediğinizde veritabanına il ilçe adı olarak değil kendileri için veritabanında belirlenmiş sayılar kaydediliyor. Bu vesile ile PHP bilenlere bu konuda şöyle bir sorum olacak:Ben bu yapıyı ekstra form elemanları ile birlikte veritabanımda farklı bir tabloya kaydetmek istediğimde il-ilçe değerleri sayısal veri şelinde gelmesinde isimleri ile gelsin. Bunu nasıl sağlayabilirim?
 

Ekli dosyalar

  • il_ilce.rar
    15.7 KB · Görüntüleme: 1,220
Anladığım kadarı ile cevap vereyim.
İSteğiniz ilk aklagelen çözüm yolu fakat sağlıklı değil ayrıca projeniz geliştikçe sorunlar çıkartacak bir yöntem. O nedenle il ve il çelirin vertabanındaki id lerini kullanarak diğer formlarını tablolara kaydedin.

OkullarTBL

okul_id il_id ilce_id Adi
1 38 7 Mehmet Ak.Ersoy İO
2 44 2 İzollu Lisesi

bu örnek bir tablonun satırını temsil etsin


OkullarTBL
(tavsiye edilmeyen uygulama)
okul_id il_id ilce_id Adi
1 Kayseri Develi Mehmet Ak.Ersoy İO
2 Malatya Kale İzollu Lisesi


Kafanızı karıştıran konu şu eğer ben okulları litelemk istersem il ve ilçe isimleri yerin il_id ve ilçe_id leri yazacak listeye
Bunu sorunu çözmek için LEFT JOIN anahtar kelimesini aratınız örnekleri inceleyiniz

Yok benim yetrince kafam karışık diyorsanız. Ozmanda listeleme yaptığınız sayfad bir soru daha yazıp il ve ilçe simlerini il ve ilçe isimlerini sakladığınız tablodan çekiniz

SELECT il_adi FROM illerTBL WHERE il_id=$il_id
SELECT ilce_adi FROM ilcelerTBL WHERE ilce_id=$ilce_id

burdaki $il_id ve $ilce_id leri listelem yaptığınızda ekrana basılan il ve ilçe_idleridir bu sorulardan sonra il ve ilçe isimlerini elde edebilirsiniz.
ilgili yerlere yaarsınız.


kolay gelsin
 
echo '<option value="'.$satir[1].'">'.$satir[2].'</option>'; //88. satır
echo '<option value="'.$satir1[1].'">'.$satir1[2].'</option>'; //101. satır

satırlarını

echo '<option value="'.$satir[2].'">'.$satir[2].'</option>';
echo '<option value="'.$satir1[2].'">'.$satir1[2].'</option>';

şeklinde değiştirirseniz istediğiniz gibi il, ilce adı ile kaydeder.
ancak @alpaygunes hocamın dediği gibi id leri kullanarak kayıt etmeniz daha sağlıklı olacaktır. il ilçe isimlerindeki değişiklikler gibi durumlarda tek bir değişiklik tüm veritabanını değiştireceği için daha mantıklı olur bence de. ama yine de isterseniz cevap yukarıda.
 
@alpaygunes ve @halilturkoglu;
Her ikinize de çok teşekkür ederim. Yorumlarınız konu üzerinde daha fazla düşünmeme sebep oldu. Denemeler yaptım ve sonuca ulaştım çok şükür. @halilturkoglu hocam value değerlerini o şekilde değilde ;

echo '<option selected value="'.$ilin_adi.'">'.$satir1[2].'</option>';98 ve 101. satırlar
echo '<option selected value="'.$ilcenin_adi.'">'.$satir1[3].'</option>';134 ve 137. satırlar


şeklinde değiştirince oldu. Kullanmak isteyenler için çok güzel bir kaynak oldu düşüncesindeyim. Yardımlarınız için çok teşekkürler..
 
Ayrı bir başlık açmaktansa buradan devam etmek istedim.. Bu form üzerinden konuşacak olursak; ben bu il - ilçe ekranına farklı form elemanları yerleştirdiğimde mesela ad, soyad, yaş vs. bu alanları doldurduktan sonra ili seçtiğimde bu kodu ==> <option onchange="..."> işleyerek sayfanın yenilenmesine sebep oluyor. Bu da haliyle üstte yazdığım verilerin kaybolmasına sebep oluyor. "onchange" komutunu kaldırdığımda ilçeler gelmiyor.Sorum şu ki: Php'de sayfa yenilenmeden, bu form yapısı üzerinden, birbirine bağlı comboboxları nasıl çalıştırabiliriz? İli seçtiğimde diğer yazdığım ad, soyad vs. alanlarının içeriği gitmeden ilçeler nasıl listeletilebilir?

Bu yapı js ile yapılıyor elimde bir örneği var onu da paylaşıyorum. javascriptkit.com adlı siteden alıp, modifiye etmiştim. İl-İlçe-Semt olarak devam eden bir yapısı var. İl ve ilçe değerlerinde sıkıtı yok ama sadece İstanbul-Sarıyer'i seçerseniz semt seçenekleri çıkacaktır. Diğerlerini doldurmadım. Ancak yine de ilçelerde eksiklikler olabilir. O bölüme dikkat edelim..

Elimdeki örnekte değerler veritabanından çekilmiyor. Direk elle yazılarak oluşturulmuş bir yapı. Yapacağım işte birbirine bağlı olarak çalışan tek yapı il-ilçe değil. ürün-model yapısı da var ve sürekli veri girişine müsait. O sebeple veritabanından veriyi direk çeken bir yapı olması gerekiyor. Bunun için uğraşıyorum. Örnekte birçok web tasarımcı arkadaşın işine yarayacaktır diye düşünüyorum ve sizlerden yardım bekliyorum..
 

Ekli dosyalar

  • javascript_il_ilce_semt.rar
    6 KB · Görüntüleme: 576
1 - javascript ile olur
2 - ajax (ki buda javascript temelli)
3 - php ile

PHP ile
onchange özelliği aktif combox tetiklenirse sayfa submit edilir. server tarafında gelen postları ilgili yere yazarsın olur biter

<input type="textbox" name="adi" value="<?php echo $_POST["adi"];?>" />

sayfadaki adi text kutus bu şekilde hazırlanırsa post edinen değer valu esine yazılır sayfada veri kaybı olmaz
 
hocam öncelikle cevabınız çok teşekkür ederim.. "denedim, olmadı" dememek için 2 gün uğraştım.. ama sonuç değişmedi.. bu kodların içindeki;
onChange="window.location='il_ilce.php?urun='+this.value"
onChange="window.location='il_ilce.php?urun=<?php echo $urun?>&tarife='+this.value"

kodları işledikçe sayfa yenileniyor ve oluşturduğum inputların içi boşalıyor. yazı kutularının value değerini dediğiniz yaptım ancak, veritabanına kayıt ederken boş değer gönderiyor.

bu sayfayı iframe ile ana sayfama yerleştirdiğimde de istediğim sonuca ulaşamadım. sanırım pes ettim.
 
hocam son durum hakkında verdiğiniz bilgiler yeni öneriler getirmek için yeterli değil

Ama şunu fark ettim onchange olayında form submit olmuyor ki location=... şekliden bir adres çağırılıyor
form nesnelerin valu elerei ne GET nede POST ile göndeirliyor. saece location =.... adresine gidiliyor urun ve tarife GET ile gönderiiliyor.

Çözüm için iki seçenek almıma geliyor

1 - oncahnge olayı gerçekleşince form submit() olsun yani location ile yeni bir adres çağrılmasın. bunu yapmak için şu yolu izle

onchange = yenile(); çeklinde değiştir

yenile() bir javascript fonsiyonu olsun

<script language="javascript">

function yenile(){
var deger1=document.getElementById("deger1_id");
var deger2=document.getElementById("deger2_id");

window.location="http://www.adres.com/veriakydet.php?adi="+deger1.value+"deger2="+deger2.value
}

--------------

veriakydet.php tarafında ise gelen dataları $_GET[] ile alabilriisin

umarım ne yapmaya çalıştığımı anlamaışsındır
kolay gelsin
 
Bir değer yöntemi farkı mesaj olarak atıyorumki kafa karışmasın
onchange sırasında formu submit et

onChange="this.form.submit()

formun Kaydet adında bir butonla daha submit edildiğini varsayarak.

if($_POST["kaydet"]){
// burda kaydet işlmeleri gerçekleşiyor
}else{
//yok kaydete tıklanmamışsa
il seçilmişse ilçeler yeniden yükleniyor. gelen POST lar ilgili alanla yazılarak alanlar dolu gönderiliyor

<input type="textbox" name="adi" value="<?php echo $_POST["adi"];?>" />
}
 
Geri
Üst