PHP yarışması sonraki sayfaya veri göndermek

4 Cevap php

Tamam, ben şimdi tüm iyi bir sınav ... yapmaya çalışıyorum. ama ben sayfaları aracılığıyla toplanan verileri (radyo düğmeleri değerleri) göndermeye çalışıyorum zaman ben mantık akışını alınamıyor. Ben ana fikri var ama can, t uygulamaya koydu.

  1. i tüm radyo değerleri toplamak istiyorum
  2. Bu değerleri içeren bir dizi oluşturmak
  3. dizi seri
  4. gizli girişine tefrika dizi koymak

Sorun i $ _SERVER ['PHP_SELF'] ve ben don yoluyla aynı sayfada veri göndermek istiyorum ki, zaman içinde bu şeyleri ne zaman bilmiyorum (sınavın "ilk" sayfasında neden i almak için hiçbir şey yok. , daha sonra "next" sayfasında i S_POST ['radio_names'] almak ve sadece ikinci sayfadan sonra i) gizli giriş alabilirsiniz. i (: D Bana soru ne olduğunu anlamak için bile çok zor) Anlatabildim yapılan umuyoruz

4 Cevap

Bu gibi form alanları Adı:

<input type="radio" name="quiz[page1][question1]" value="something"/>
...
<input type="hidden" name="quizdata" value="<?PHP serialize($quizdata); ?>"/>

Sonra işlemek:

<?PHP
//if hidden field was passed, grab it.
if (! empty($_POST['quizdata'])){
    $quizdata = unserialize($_POST['quizdata']);
}

// if $quizdata isn't an array, initialize it.
if (! is_array($quizdata)){
    $quizdata = array();
}

// if there's new question data in post, merge it into quizdata
if (! empty($_POST)){
    $quizdata = array_merge($quizdata,$_POST['quiz']);
}

//then output your html fields (as seen above)

Sen $_SESSION dizideki sonuçlarını saklamak, sizin quiz her sayfa için ... yerine $_SESSION nesnesini kullanmayı deneyebilirsiniz. Özeti sayfasında, sonuçları göstermek için kullanabilir.

Bunu başarmak için, her sayfanın başında, sen gibi bir şey koyabilirsiniz:

<?
    session_start();
    foreach ($_POST as $name => $resp) {
      $_SESSION['responses'][name] = $resp;
    }
?>

Ardından, son sayfasında, tüm sonuçlar üzerinden döngü yapabilirsiniz:

<?
    session_start();
    foreach ($_SESSION['responses'] as $name => $resp) {
      // validate response ($resp) for input ($name)
    }
?>

Başka bir yaklaşım olarak, her "sayfa" için bir alan eklemek ve nerede izlemek olabilir. Ardından, sayfanın üstündeki işleyicisi, sen giriş geçerli olduğunu bilemez:

<?
  if (isset($_POST['page'])) {
    $last_page = $_POST['page'];
    $current_page = $last_page + 1;
    process_page_data($last_page);
  } else {
    $current_page = 1;
  }
?>

Daha sonra ... sayfada ...

<? display_page_data($current_page); ?>
<input type="hidden" name="page" value="<?= $current_page ?>" />

Bu örnekte, process_page_data($page) verilen sayfa numarası için gerekli tüm giriş verilerini okuma işlemek ve display_page_data($page) kullanıcıya verilen sayfa numarası için geçerli sorular gösterecektir.

Sen daha bu genişletebilir ve sayfaları temsil etmek için sınıflar oluşturmak, ancak bu size başlamak için nerede bir fikir verebilir olabilir. Bu yaklaşımı kullanarak aynı PHP komut tüm veri işleme tutmak için izin verir, ve aynı komut diğer işlevler için veri kullanılabilir hale getirir.

Sen gibi bir akış kullanmak istiyorum

if (isset $_POST){
    //do the data processing and such 
    }
else {
/show entry form
}

Ben aynı sayfada kalmak ve veri için kabul etmek biliyorum en düz yol bulunuyor.