PHP Multistep formu - MVC Uygulaması

6 Cevap php

Ben hiçbir veri son adım bitene kadar sokulacak olan benim MVC Uygulaması (Kendi kendine yapılan MVC çerçevesinde) bir mutistep formu programlamak üzereyim.

Ben şu konular / sorular var

  • Ben gerçekten bu sorunu çözmek için desen bir tür bulmak istiyorum, herhangi bir var mı?
  • Ben bir geri gitmek eylemi gerçekleştirmek kolay ve geri son adımda veri almak istiyorum. Soru: Bir oturum veri aktarmak için tek yolu var mı? Get parametresi belki daha iyi / basit bir seçenek var mı?
  • Eğer bu sorunu nasıl önce çözmüş

6 Cevap

Onlar Symfony, oldukça iyi o çerçevede yerleşik bunu hayata nasıl bakmak.

/ Lib / symfony / form: Sadece indirin ve projenize bakmak zorunda

Temelde form girişlerden her biri için sınıfları oluşturmak gerekir;

  • Her zaman sonra, farklı ve karmaşık olanları oluşturabilir;
  • Eğer onlardan her biri için doğrulayıcı sınıfları (belki yapılandırılabilir) oluşturmak gitmek
  • Eğer oturum veya çerez kaydetmek PHP nesneleri veri depolamak

Ben onlardan çok, URL maksimum boyutu ve tarayıcı sınırları göz önünde bulundurmanız gerekir, parametreleri kullanarak tasarruf tavsiye etmem.

Ben Kullanıcıların adımlar arasında ileri ve geri gitmek mümkün olmak istiyorum, en azından değilse, kurabiye / oturumları şey ama veri gitmezdim.

Sizin denetleyicisi:

$_SESSION['yourform']['optionalSubformOrPage']['field'] = $_POST['field'];
header('Location: nextpage');
die;

Senin görünümünde:

<input name="field" value="<?php echo isset($_SESSION['yourform']['optionalSubformOrPage']['field']) ? $_SESSION['yourform']['optionalSubformOrPage']['field'] : null; ?>" />

Nispeten kolay çözümleri bir çift:

  • İkinci DB tabloya verileri kaydetmek, ve sadece sonunda birincil tablo kopyalama
  • <input type="hidden"> elemanları verileri kaydetmek, böylece $_POST küresel kadar verilen her cevap içerecektir
  • Bir session / cookie verileri kaydetmek

Ben hiç böyle bir görev için GET params'ı kullanmak olmaz; Bu bir ya da iki bırakmak çok kolay, ve tarayıcıların çoğu nispeten kısa maximum URL length var. Kurabiye veya <input> s bu durumda en iyi bahis olacaktır gizli. Ya

Duroth bazı iyi öneriler verdi. Başka bir seçenek gitmek gibi adım, veritabanına adım verileri depolayabilir, ancak eksik olduğunu göstermek için bu verileri bir bayrak tutmaktır. Bu formun son sayfasını gönderdiğinizde, o veri eklemek ve tamamlandı olarak işaretlemek. Bu yöntemle içine kaçıyorum sorunlar şunlardır:

  • Incomplete data being left in the table
    • Sen (bir haftadan daha eski, ya da bir şey) eski eksik verileri temizlemek için bazı bakım çalıştırmak gerekir
  • Bu program mantığı kalanı çok daha karmaşık hale getirebilir. Her zaman kayıt "tam" olduğunu kontrol etmek olurdu.

Eğer Duroth belirtildiği gibi, başka bir tablodaki eksik veri depolamak için olsaydı, o zaman ikinci sorunu önlemek istiyorum, ancak veritabanında bazı çoğaltılamaz tablolar olurdu.

Ben kendimi bu yaptım. Ben gizli form alanlarındaki diğer adımlar değerlerini depolayarak oturumunda bir bağımlılığı önlemek için çalışıyoruz başladı ama sonunda ben oturumu kullanarak başvurdu yüzden bu hızla hantal oldu.

Ayrıca gizli alanlar ile değişkenler geçirebilirsiniz ama kundakçı gibi araçlar ile bu alanlar modifiye edilebilir ve iyi bir fikir değil. Ben o oturum bu tür verileri saklamak için en iyi yol olduğunu düşünüyorum.

Neyse, php kodu, ben her zaman gösterilmesi gerekir hangi form gösteren bir değişkeni saklamak:

switch($_SESSION['step'])
{
    case 1: echo "<form name='first'...";
    break;
    case 2: echo "<form name='second'...";
    break;
    ....
}