Dinamik PHP bir açılan liste doldurmamak

5 Cevap php

Ben listeleri aşağı iki damla içeren küçük bir PHP sayfası var

Ben bu mümkün .... aşağı liste ilk damla seçilen sonucuna göre ikinci bir doldurmak gerekiyor? Diğer bir deyişle ben aşağı liste ilk damla seçilen değeri kullanın ve ikinci listede aşağı damla (ama bu listede aşağı ilk damla seçimi üzerine doldurulması gerektiğini doldurmak için kullanılan dB sorguda kullanmak gerekir.

Bu mümkün ise herhangi bir ipucu lütfen? (Ben dB listede aşağı ilk damla doldurmak mümkün olduğumu varsayabiliriz)

teşekkürler

5 Cevap

Seçenek 1: gizli elemanları veya JS nesneler olarak belgede ikinci select verileri gömün. Ilk select A change olay işleyicisi ikinci seçeneğini dolduracaktır. A List Apart, example dynamic select page vardır.

Seçenek 2: AJAX kullanın. İlk seçme değişiklikler, ikinci select içeriği için sunucuya bir istek yaptığınızda, o zaman doldurmak. (Bu jQuery gibi) bir JS kütüphanesi ile, bu oldukça kolay hale geldi.

$('select#one').change(
  function (evt) {
    $('select#two').load('/thing/'+this.value);
  }
);

"/ Şey / " "" dayalı öğelerin bir listesini oluşturmak için sunucu tarafı komut dosyası tanımlar (Fiili komut için URL yolunu çözmek için sunucunuzun yeniden yazma imkanları kullanın). Sadece o zaman

  • olarak liste olabilir, JSON veya başka bir biçimini kullanarak.

    $('select#one').change(
      function (evt) {
        $('select#two').load('/thing/'+this.value, {fmt: 'option'});
      }
    );
    
  • Sen sunucuya ilk açılan seçimini göndermek için AJAX kullanmak zorunda olacak. Daha sonra veritabanını sorgulamak ve ikinci açılan oluşturmak ve kullanıcıya geri gönderebilirsiniz.

    Eğer bir sayfayı yeniden olmadan geri sunucuya bir asenkron çağrı, ihtiyacınız olacak. Yani AJAX tam olarak yapabileceği bir şeydir (Ben aslında geri sunucuya mesajları bir düğme var istiyorum şüpheliyim). Geri sunucuya seçim nakleder sizin ilk açılan en onchange olay işleyicisi için bir AJAX Çağrı ekle ve ikinci açılan içeriğini döndürür. AJAX çağrısı yeni değerleri döndürür zaman, ikinci açılan için içerik oluşturmak için kullanacağız. Bunun en PHP kalacaktır gerçek sunucu kısmı, ayrıca, tabii ki, JavaScript yapılır.

    Bunu yapmanın iki yolu var. Old-school "bir seçeneği seçin ve sayfa yeniden sunma" sayfa yenileme olmadan İkinci açılır içeriğini yüklemek için, hemen hemen evrensel olarak çalışır yöntemi, ve yeni çıkmış AJAX yöntemleri.

    Hem avantajları / dezavantajları var, bu yüzden bu amaçlar için en iyi olanı aşağı kaynar. Oldschool yöntem hiç bir javascript gerektirmez, ancak bu sunucu üzerinden formu yuvarlak-trip yapar bu yana, "penceresini temizlemek ve sonra sayfayı yeniden çizmek" titremeyi alırsınız.

    AJAX yöntem yenileme titremeleri atlar, aynı zamanda Javascript devre dışı tarayıcılarda herhangi bir çalışma olur. Bu AJAX çağrıları ve açılan nüfusu işlemek için, biraz daha fazla kod, istemci tarafında gerektirmez, ancak sunucu tarafı kodu iki yöntem için hemen hemen aynı olacaktır: Aynı sorgular, aynı alma döngüler, sadece farklı çıktı yöntemleri.

    @ Outis iyi bir nokta kullanımını .change aksi select kodunu onchange olayını kullanmak jquery vardır.

    gibi

    <select id='my_select' onchange='javascript:myfunc()'>
    <option value='a'>a</option>
    .
    .
    <option value='z'>z</option>
    
    function myfunc(){
    //write code to populate another dropdown based on selected value
    
    }
    

    Gördüğünüz bu Dynamically Populating Dropdown Based On Other Dropdown Value