PHP İletişim Formu soru $ _POST, $ _GET $ _SESSION

4 Cevap php

EDIT:

Yani benim Kalan sorular şunlardır: (1) başlığı için 302 veya 303 kullanın () yönlendirmelidir? Ben 303 doğru yol olduğuna inanıyorum. (2) $ _SESSION? Temas = teşekkür sayfasına değişkenler geçmek için en iyi yolu var mı?

Benim revize kodu:

if ( isset( $_POST[ 'submit' ] ) )
{
  if ( is_bot() )
  {
    header( "Location: http://www.example.com/contact/?contact=thankyou",
        TRUE, 303 );
    exit;
  }
  elseif ( is_input_error() )
  {
    // show error form stuff...
  }
  else
  {
    contact_send_email();
    header( "Location: http://www.example.com/contact/?contact=thankyou",
        TRUE, 303 );
    exit;
  }
}

ORIGINAL (resolved):

Ben sadece yaklaşık $ _POST, $ _GET ve PHP ile formların öğreniyorum. Ben basit başladı, ama şimdi benim deneyim için biraz karmaşık hale gelmiştir İletişim Formu var.

// curly braces left out for brevity
if ( isset( $_POST[ 'submit' ] ) )
  if ( is_bot() )
    header( "Location: http://www.example.com/contact/?contact=thankyou", 
            TRUE, 303 );
  if ( is_input_error() )
    header( "Location: http://www.example.com/contact/?contact=error", 
            TRUE, 303 );
  else
    contact_send_email()
    header( "Location: http://www.example.com/contact/?contact=thankyou", 
            TRUE, 303 );
  1. Bu yeni olmak, ben herhangi bir göze batan sorunları görmek, bilmek istiyorum sanırım?
  2. Benim header() yönlendirme kodu tam ve geçerli görünüyor mu?
  3. header() yönlendirmelerden sonra $_POST değişkenleri geçmek için en yaygın ve / veya önerilen yolu nedir? O $_SESSION ile mi, yoksa daha iyi bir yolu var mı? Ben daha önce oturumları hiç kullanmadım, bu yüzden onlar tarafından korkutmak biraz duyuyorum.

EDIT: arada, header() $_GET "yenileme-yeniden" çok korkutucu ve kötü uyarı mesajı önlemek için ile yönlendirmek geçmek istiyorum.

4 Cevap

1st soru. Ben parantez kullanmanızı öneririm { } koşullu bloklar geçersiz bakmak çünkü, if sonra.

2nd soru. Ben 303 durum kodu gerekir sanmıyorum. Tipik bir header('Location: ...'); yapacağız.

3rd soruya gelince. İki olası çözümler şunlardır: oturum veya veritabanı.

Özetle, ben yaparım:

if ( isset( $_POST[ 'submit' ] ) )
{
  if ( is_bot() )
  {
    header( "Location: http://www.example.com/contact/?contact=thankyou" );
  }
  elseif ( is_input_error() )
  {
    header( "Location: http://www.example.com/contact/?contact=error" );
  }
  else
  {
    contact_send_email();
    header( "Location: http://www.example.com/contact/?contact=thankyou" );
  }
}

Bu yeni olmak, ben herhangi bir göze batan sorunları görmek, bilmek istiyorum sanırım?

Bunu amaçlanan bilmiyorum, ama kod bu gibi kaşlı bir sürümüne çevrilmiş okur:

if (isset($_POST['submit'])) {
    if (is_bot()) {
        header("Location: http://www.example.com/contact/?contact=thankyou", TRUE, 303);
    }
}
if (is_input_error()) {
    header("Location: http://www.example.com/contact/?contact=error", TRUE, 303);
} else {
    contact_send_email();
}
header("Location: http://www.example.com/contact/?contact=thankyou", TRUE, 303);

Kaşlı eksik, bir if bloğunun vücut her zaman sadece bir sonraki ifadedir. Ve ben gerçekten bunu istiyorum şüpheliyim.

Benim header () tam ve geçerli bir kod bakmak yönlendirme yapıyor mu?

Ben idam edilme daha fazla kod önlemek için her header sonra exit eklersiniz. Ama geri kalanı gayet iyi görünüyor.

Başlık işlevi 303 çıkarın. Bu açıkça bir set yoksa işlevi varsayılan olarak kullandığı istediğiniz bir 302, geçici bir yönlendirme vardır.

Küçük bir nokta, ama kayda değer; Yanlış HTTP yönlendirme durum kodu seçerken çok hafif SEO altüst olacaktır.

Ben bu hata yönlendirmek istediğiniz veya sayfaları teşekkür neden görmüyorum.

Hata: hatalı veya eksik gerekli alanları ile alanları vurgulamak, sunulan değerleri ile yeniden formunu görüntüler.

Başarı: size html sayfası teşekkür gösterilecek.