Bildirim sayfasına veri geçirerek

3 Cevap php

Ben bir bildirim sayfasını doldurma en iyi yolu nedir emin değilim. Ben bir bilgi ile doldurmak için oturumları kullanarak oldum ama kullanıcı çerezleri engelliyor ise bu kısa düşüyor. Ben değişkenleri GET HTTP geçirmeden kabul ettik, ama onun boyu bazı tarayıcılar tarafından sınırlıdır çünkü iyi bir alternatif olup olmadığından emin değilim.

Hangi yöntemi tercih edersiniz?

3 Cevap

Hata iletileri, bir endekslenmiş listesini kullanarak deneyebilirsiniz, o zaman sadece sayfasına bir GET parametresi olarak hata kimliğini geçmektedir. Ben hata sayfasına yönlendirme olacak hayal beri gerçekten POST kullanamaz ve dolayısıyla istekleri hemen hemen en iyi seçenek GET.

Bunu yapmanın bir başka yolu in-situ hata sayfası yaşıyor - kullanıcı aynı URL kalır, ama öylesine yani 404 'bulunamadı', bir sunucu hatası durumunda 500 ve (modifiye HTTP durum kodu alır yani hata mesajı ile birlikte) üzerinde. Eğer bir HTTP istek aracılığıyla sayfasını doldurma konusunda endişelenmenize gerek kalmaz, sadece hatayı karşılaşmadan sayfanızdan yapabilirsiniz.

Bunu uygulamak zor olsa bile, 2 yöntemini tercih etmektedir. Bununla beraber, daha sonra otomatik olarak tuzak herhangi bir hata durumlarını, hata ve istisna işleyici kullanın ve sonra hata çıktı kodu kapalı ateş edebilirsiniz.

Bu tür form alanlarındaki hataları olarak onları üretir sayfaya ait bazı bildirimler vardır. Bu işlemek için kolaydır. Ben normalde HTML formatında onları tutun ve HTML liste halinde görüntülemek için bir fonksiyonu kullanabilmek için bir dizi oluşturabilirsiniz:

<?php

$errors = array();

function print_errors($errors){
    if( !empty($errors) ){
        echo '<ul><li>' . implode('</li><li>', $errors) . '</ul>';
    }
}

# ...

if($foo<=0){
    $errors[] = '<label for="foo">Foo</label> is <strong>' . htmlspecialchars($foo) . '</strong> but it must be greater than zero.';
}

if(empty($errors)){
    save_stuff();
    header('Location: http://example.com/somewhere/else/');
    exit;
}

# ...

print_errors($errors);

echo '<form action="" method="post">';
echo '<input type="text" name="foo" value="' . htmlspecialchars($foo) . '" id="foo">';
echo '</form>';

# ...

?>

Sonra tarif durum var: Başarılı bir (veya imkansız) eylem sonra, kullanıcı o bir açıklama alır (örneğin, ana bölüm sayfa) başka bir yere yönlendirilir. Kısa mesajlar için, ben düz metin iletileri tutun GET değişkenleri kullanma eğiliminde:

<?php

if( isset($_GET['error']) ){
    echo '<p class="error">' . htmlspecialchars($_GET['error']) . '</p>';
}
if( isset($_GET['message']) ){
    echo '<p class="message">' . htmlspecialchars($_GET['message']) . '</p>';
}

?>

Bu intranet için oldukça iyidir, ancak iki dezavantajı var:

Eğer mevcut bazı depolama varsa (dosyalar, veritabanları, ne olursa olsun) tam HTML mesajları tutmak ve onları rasgele bir kimlik atayabilirsiniz:

ID: 4a0a19218e082a343a1b17e5333409af9d98f0f5
Date: 2010-05-25 11:24:30
Type: message
HTML: <a href="/item/25">Item #25</a> was modified successfully.

http://example.com/?msg=4a0a19218e082a343a1b17e5333409af9d98f0f5

Şimdi ve daha sonra eski verileri temizlemek böylece tarih kaydetmek emin olun.

Benim iki sent.

Orada sayfadaki her bağlantısını PHP oturum kimliği ekleme imkanı da bulunuyor, yani tanımlama başarısız olursa bunu geri düşebilir.

Bu mümkün değilse, ben de veritabanına iletileri kaydetme ve $ _GET ile benzersiz id geçen ile gitmek istiyorum.