(PHP) aynı sayfada ayrı bir sayfada işleme gibi daha az / / eşit derecede iyi bir form gönderme taşıma mı?

3 Cevap php

Ben bir PHP form var ve ben teslim nasıl işleneceğini merak ediyorum. Davranış geri düğmesine basarak ve geri giderek yanlışlıkla yeniden göndererek gelen veri kullanıcı önleyecek sonra bir açılış sayfasına yönlendiriliyorsunuz kullanıcıyı bir form, bir özel işleyici sayfa var oldu Raylar öğrenme zaman ben hatırlıyorum Form gönderme sayfası.

Benim PHP formu için bu tür hataları (ve secureness için, ancak oynamak olabilir) onlar kullanıcıyı yönlendiren bir taşıma sayfasında, posta yoluyla form verilerini göndermek için de en iyi önlemek için? Yoksa sadece form olarak aynı sayfada form verilerini işlemek için ok olurdu? Ben ikincisi yaptım Eğer bir kullanıcı yanlışlıkla geri / yenileme / etc isabet üzerinden veri yeniden için, bu mümkün mü?

3 Cevap

Post-Redirect-Get resubmission önlemek için web formları için önerilen tasarım deseni olan (ve raylar kullanılır ne)

Eğer aynı sayfada veya farklı birine göndermek eğer gerçekten önemli değil, bu yanlışlıkla resubmission önler yönlendirme var. Bu nedenle kodlama stili ve / veya uygulama semantik olarak aynı sayfa veya ayrı bir sayfa göndermek için seçebilirsiniz.

Aynı ilkeler PHP için de geçerlidir. Yönlendirme yanlışlıkla formu yenileniyor karşı yardımcı olabilir. Ancak, yine de (vb, giriş doğrulama, tek kullanımlık jeton kullanarak, örneğin) kazara ferahlatıcı problemleri önlemek için önlemler gerekli her türlü almalıdır.

Ben sadece her sayfa görünümünde form mesaj için memuru görünüme sahiptir ve (teslim-sadece-bir kez gereksinimleri karşılandı varsayarak) isteği işlemek için uygun denetleyicisi çağırır çerçevesinde benim kendi MVC tarzı kullanın. Daha sonra uygun bir açılış sayfasına tarayıcı yönlendirir.

Sen tabii ki, aynı sayfaya gönderebilir, ama ben böyle birlikte çok fazla mantık, html, veritabanı erişimi ve karıştırma gibi kötü uygulamalara yol açacaktır düşünüyorum.

Ben özellikle düşkün değilim bu konuda gitmek için bir üçüncü yol var. Sunum mantığı ayırmak için bir çaba, ben (vb, dinamik veri görüntüleme HTTP POST isteklerini işleme gibi) bazı tür işlem gerektiren her HTML belgesinin bir PHP dosyası eklemek istiyorum. Ben genellikle ayrı bir dizine bu dosyayı saklamak ve "filename.page.php" olarak adlandırın. Söylemeye gerek yok, bu bir kodlama kongre başka bir şey olduğunu ve başka bir şey aramak isteyebilirsiniz.

Bir anlamda, bu aynı dosyada HTTP POST isteğini ele demektir (en azından bildiğim kadarıyla web sunucusu ile ilgili olarak). Sen HTTP Location başlık gibi pek kullanarak olsa da, yine de müşterilerine yönlendirebilir:

header("Location: file.php")

Bir yan not olarak, ben güvenlik için HTTP POST bağlı değildir; Bu istekleri HTTP GET daha keyfi HTTP POST isteklerini yapmak için hiçbir zordur.