PHP - formlar yükleniyor formları yükleniyor formları?

2 Cevap php

Şu anda bir gönderme düğmesi ile ülkelerin bir listesini sunan bir form ile bir PHP sayfası query.php var:

Countries
[] nation1
[] nation2
[] nation3
[] nation4
SUBMIT

onlar aynı diziye onay kutularını konum ve biçim sayfasını başvuran <form method="post" action="query.php">

Gönder düğmesine basıldığında, bir sorgu seçilen ulusların dayalı aktörlerin bir listesini çeker, ve ilki altında yeni bir onay kutusu listesini oluşturur dBASE çalıştırılır:

Countries
[] nation1
[] nation2
[] nation3
[] nation4
SUBMIT

You have chosen countries ____.

Actors
[] guy1
[] guy2
[] guy3
[] etc
SUBMIT

Şu anda, bu ikinci şekli, seçilen aktörler dayalı dBase'ı arar ve bunları içeren tüm filmleri döndürür <form method="post" action="movie-query.php">, yeni bir PHP dosyasını çağırır.

Tek sayfada tüm bu tutmak için herhangi bir yolu olup olmadığını merak ediyorum? Ben ikinci teslim seçeneği kullanıldığında arama sonuçları query.php içinde gösterilecek almak için nasıl anlamaya olamaz. Ben ikinci formu ayarlarsanız <form method="post" action="query.php"> yaptığı tüm kendi orijinal durumuna query.php sıfırlanır:

Countries
[] nation1
[] nation2
[] nation3
[] nation4
SUBMIT

Aksine benzer bir şey daha:

Countries
[] nation1
[] nation2
[] nation3
[] nation4
SUBMIT

You have chosen countries ____.

Actors
[] guy1
[] guy2
[] guy3
[] etc
SUBMIT

You have chosen actors _____.

Movie Results
1. movietitle
2. movietitle
3. movietitle
4. etc.

hepsi aynı sayfada görünen.

Herhangi bir fikir? Teşekkür ederim.

2 Cevap

Kullanılabilirlik için AJAX, ama JS desteklenmeyen / devre dışı olduğunda form çalıştığından emin olun. Bir form için giriş gönderildiği zaman, formu sonraki formu içerir: Bu durumda, içeren bir çağlayan olabilir.

/* At the end of query.php */
include_once('countryFields.php');
if (isset($_REQUEST['countries'])) {
    include_once('queryActor.php');
}
echo '</form>';

/* At end of queryActor.php */
include_once('actorFields.php');
if (isset($_REQUEST['actors'])) {
    // query results will end up within <form> but that's OK
    include_once('movie-query.php');
}

Her '* Fields.php' bir form için alanlar oluşturur; Her '* Fields.php' için, karşılık gelen bir '* Form.php' var.

/* actorForm.php */
<form action="movie-query.php" method="POST" name="actorForm">
    <?php include('actorFields.php'); ?>
</form>
<script type="text/javascript">
    // AJAX stuff here
</script>

Senin olmayan JS mantık 'query.php' submit olur ise, bu örnekte, AJAX-tabanlı mantık, '* Form.php' komut göndermek istiyorum. (Bu kullanılabilirlik etkisi olsa) süresiz çağlayan genişletmek olabilir. Bir '* Fields.php' kapsamında, yarattığı alanlardan kullanıcı girişi için onay böylece bir adım kaybetmek yok.

/* in actorFields.php */
if (!isset($_POST['countries'])) {
    $_POST['countries'] = array();
}
if (!isset($_POST['actors'])) {
    $_POST['actors'] = array();
}
...
/* Get actors from datastore. Keys of $actors are IDs from the datastore. */
$actors = Actors::forCountries($_POST['countries']);
/* when generating list of checkboxes, check any actors set in $_POST['actors'] 
   For example:
 */
foreach ($_POST['actors'] as $id) {
    $actors[$id]->checked = 'checked';
}
echo '<ul id="Actors">';
foreach ($actors as $id => $actor) {
    echo "<li><label for='actor[$id]'></label><input type='checkbox' name='actors[$id]' value='$id'",($actor->checked ? ' checked': ''),"/>{$actor->name}</li>";
}
echo '</ul>';

Örneğin 'actorFields.php' ne yapılırsa Bazı üretim kodunda ne yapardım farklıdır. Bir kere, bir liste görünümü oluşturmak için kod başka bir senaryo olurdu.

Ajax?

Eğer aşina değilseniz, Prototype, jQuery, mootools veya Dojo'sunu check out. Sen aktör seçimleri almak için seçilen ülkeler ile geri sunucuya bir istek yapmak ve sonra film almak için başka ne yapabilirsiniz.

Ben verileri kodlamak için JSON kullanarak tavsiye ederim. PHP'nin json_encode () ve json_decode () büyük.