İyi bir tasarım ve PHP için akış - form değerleri korumak sonra teslim

3 Cevap php

Ben SO Bu konu için arama oldum ve onu bir bulgu değil uzunca bir baş ağrısı var.

Zaten bir süre için bir web sitesi geliştirildi ve mevcut sorun teslim herhangi bir hata vardır ve kullanıcı geri forma yönlendirmesini ise postback sonra, formu değerleri tüm gitmiş olmasıdır bulmuştu.

Postback sonra değerler korunur böyle uygulamak için iyi bir yol / akış / tasarım var mı? Ayrıca ben varsayılan değerleri, veritabanı değerleri ve değerlerin geri gönderme itibaren dikkate almak gerekir - bu yüzden hangisi önceliklidir?

Buna ek olarak, post-Redirect-al ve aynı formunu geri kullanmak takip etmek istiyoruz.

Ne düşünmüştü oldu:

  1. Benzersiz bir kimliği ile her formu tanımlamak
  2. Teslim olduğunda, formun benzersiz kimliğini kullanarak Oturumu'nda içine tüm verileri kaydetmek
  3. Form yeniden talep edildiğinde, formdan değerleri göstermektedir.
  4. Başarıyla teslim ederse, oturumda verileri temizlemek.

3 Cevap

İşte benim her zamanki iş akışı bulunuyor:

Bir POST ilk form sayfasına yönlendirme olmadan hemen ben bir çıkış formu başarısız sonra. Bu herhangi bir iyi şablon sistemi ile gerçekleştirmek çok kolaydır. Daha sonra POST'ed verilerle formu yeniden doldurabilirsiniz.

Formu (MVC desenin parçası olarak) bir görünüme bağlı olup olmadığını (vb açılan menüleri doldurmak için) veritabanından varsayılan değerleri ve yük modelleri başlatılamıyor - tüm görüntü / önlü mantığını yeniden.

Geçerli kod tabanı bir yönlendirme kullanıyorsa, basitçe include() post-geri işleme serendipitous noktada istenilen form / görünüm dosyası.

Peki nasıl çalışır? Özetle:

  • Başlangıç ​​varsayılan değerlerini & tanımlayın modeli, veritabanı ve kullanıcı seçim seçimler yapılandırma.
  • Kullanıcı gönderilen $ _POST veri ile herhangi bir varsayılan geçersiz kılar.
  • Çıkışı sterilize
  • Kullanıcı giriş geçerliliği kadar tekrarlayın.

Sonrası doğrulama başarısız olursa, hata mesajları ile form / düzenleme sayfasını yeniler, kullanıcı bunları düzeltin ve yeniden gönderin - İlk sorunun cevabı çivilenmiş gelmiştir. (Onlara "Geri" tuşuna basın beklemeyin).

Ben eklemek istiyorum bir daha çimdik vardır.

Sonrası doğrulama geçer ve güncellenen veritabanı edildiğinde, o sadece güncellenmiş verileri göstermek için bir sayfa tarayıcı yönlendirir. Bu üç iyi işler başarır.

veritabanını güncelleyerek bir sorun varsa a), bu veritabanında verileri gösterecektir değil ne değişkenler bıraktığı, bu nedenle sorunun test çok açık olacaktır.

b) veritabanından veri gösteriliyor Beklendiği gibi şeyler ki kullanıcı güven veriyor.

kullanıcı uzak bu sayfadan bir link tıklama ve daha sonra geri dönmek için geri düğmesine kullanıyorsa c) veri değil, veriyi tekrar resubmitting hakkında soru gösterilir alacak. Bu kullanıcı ne beklediğini daha olduğunu ve veritabanı çift güncellenmesi önlemek olacaktır.

Not - Eğer dikkatle yönlendirmek gerekir. Referer değişkeni size kullanıcı aslında onun tarayıcı penceresinde bulunur siteyi anlatacağım. O bir SSH tüneli kullanıyorsa bu ne bekliyoruz olmayabilir.

Ian

Eğer bu komut her alan doğrulamak kadar şey saklamak zorunda kalmamak veri tarayıcı çerez içine (çerezler için 4k altında ne?), Malzeme yeterince küçük ise.

Varsayılan gelince, kullanıcı girişi her zaman doğrulamaz şey girerseniz, aksi takdirde varsayılan üzerine yazarak devam edecektir, öncelik almalıdır.

Çerez yaklaşımını kullanarak ve GET forma yönlendirme için avantajları bir çift:

  1. Eğer kaçınmak hemen sonra POST düzeltme formunu gösteren mesajları "veri devam sunulmasına olmalı"
  2. kullanıcılar bir hata görünce düşünmeden geri düğmesine tıklayın için o ortak, çerez başarılı olur (veya ne olursa olsun Vade bunu koymak biterse) gönderinceye kadar çok daha sezgisel olan formu ön doldurmak sağlar