PHP bir sihirbaz yazarken URL akış

4 Cevap php

Benim web sitesi için temel bir sihirbaz yazıyorum. Kendi URL olması için 4 adım ve her ihtiyaçları olacaktır. Her adım ilk geçmeden önce bir form doğrulamak gerekir.

Belirli bir aşama için formu doğrulamak için başarısız olursa, ben URL değiştirmek istemiyorum. O geçerse ama, ben devam etmek istiyorum.

Bunu yazmak için tercih edilen yolu nedir? Doğrulamak için tek başına javascript kullanarak yeterince güvenli değildir. Ben şimdiye kadar 2 fikirleri var ama ben de sevmiyorum:

1) Post the form to the same script and use a header() redirect to the next step if it passes.
2) Send an ajax post to validate and then use location.href to send user to the next step if it passes.

Bunu yapmak için daha iyi bir yolu var mı?

Teşekkürler, Brian

4 Cevap

Bu javascript gerektirmez beri, seçenek 1. tercih ederim.

Ancak, aynı zamanda biri imleri veya yanlış adıma doğrudan atlar ne olur düşünmek isteyeceksiniz.

Senin seçenek 1. yapardım tam yoludur.

Bu iki yaklaşımı böylece birleştirebilirsiniz aklınızda tutun:

  1. Kullanıcı JS etkin varsa, onlar (hayır sayfa tekar) yumuşak bir deneyim olsun
  2. Onlar yoksa, hiçbir işlevselliği kaybolur

Eğer standart bir hile kullanarak yapayım:

<form name="foo" action="bar.php" method="post">
    <input type="submit" value="Submit Form" onclick="ajax_handler(); return false;" />
</form>

ajax_handler() bar.php form verilerini işlemek için yaptığı gibi aynı kodu kullanmak böylece bu bazı yetkili mühendislik gerektirir. Geri düğmesi gibi şeyler kullanıcının beklediği gibi çalışmaya devam böylece Ayrıca, AJAX yolunda özel bir dikkat gerekir.

Başka bir seçenek (o zaman POST ed alır) tek bir PHP sayfada (bu adımlar arasındaki) tüm doğrulama mantığını sahip olacaktır.

Postback de, mevcut aşama için doğrulama yapmak ve bir sonraki adıma dışarı şube (geçerli ise). Ayrıca mesajların arasındaki 'önceki' doğrulamaları devam etmek gerekir.

Hala different URL myform.php?step=1 ve myform.php?step=2 anlamında ve ... olabilecek bazı basit url yeniden yazma ile myform/step1 olabilir , myform/step2, ...