En iyi sayfaları arasında kullanıcı için bir mesaj geçmek için nasıl

9 Cevap php

Böylece olaylar zinciri olduğu:

  1. Kullanıcı bir formu gönderir.
  2. Teslim işlenmesi sırasında, gibi oluşturulan bir mesaj var, "Sizin rekor kaydedildi."
  3. Kullanıcı yeni bir sayfaya yönlendiriliyorsunuz, arama sonuçları söylüyorlar.
  4. Yeni sayfa mesajını görüntülemek gerekiyor.

Yani, soru adım 3'e adım 2 mesajı almak nasıl? Bu sadece basit bir örnek ... diğer çok daha karmaşık örnekler vardır.

Ben PHP kullanıyorum.

İhtiyaçları:

  • Birden mesajları destekler ve gerektiği gibi alıcı makinede biçimlendirilmiş olması gerekir
  • mesajlar (örneğin adım 4 içinde gibi) aynı sayfada eklenebilir
  • herhangi bir fonksiyon ya da nesnenin içine eklenen iletiler

Ben ile geldi bazı seçenekler:

  • bir dizi olarak bir oturum değişkeni depolamak ve her ekran sonra boşaltılıyor
  • Bir olsun veya sorgu parametre olarak; Eğer sürekli bu işleme gibi can sıkıcı almak ve bunu elde etmek için hatırlamak zorunda olabilir; uzun alabilirsiniz, kolayca sorgu dizesi maksimum uzunluğu boyunca gidebiliriz
  • (her bir kullanıcı oturum açmış olmayabilir) bir seans bazında veritabanında saklamak; Bu onlar, muhtemelen birden fazla eklenen her sayfada ekstra bir ekleme, ve her sayfada bir ekstra seçin gerektirir

Şu anda bir dizide oturumda mesajları saklamaya olmuştur, ama daha iyi bir yolu olup olmadığını merak ediyorum. Ben yukarıda, diğer 2 seçenek çok iyi olduğunu sanmıyorum.

Edit: Ben oturumu yöntemi için 2 işlevlerini kullanın: AddStatusMsg () (diziye bir eleman ekler) ve DisplayStatusMsg () (HTML biçimli mesajı döndürür ve dizi boşaltır).

9 Cevap

Sekmeler: Ben basit bir nedenle, veritabanı veya oturumda da bu mesajları saklamak KARŞI öneriyoruz. (Evet, gerçekten, HTTP vatansız doğası.)

Web sitenizin farklı kesimlerinin birden fazla sekme var, bir kişi düşünün. Bu kişi bazı eylem gerçekleştirir ve yükler, bir bağlantıyı başka bir sekmesine ve tıklama geçer bu süre. Eğer session / veritabanı ve açık-sekme olan da bu mesajları görüntülemek bir sayfa, kullanıcı artık bir yarış durumu girmiştir iletileri depolamak ediyorsanız nerede sunucu ilk iletilerinin yanıt istemek hangi bağlı amaçlanan değil nerede gösterilecek.

Şimdi, bu meşru bir önemi olmayabilir bazı durumlar vardır, ama aynı zamanda bazı durumlarda son derece kafa karıştırıcı olabilir.

Istek mesajları koymak başlangıçta göründüğü kadar kötü olmak zorunda değildir. Belki size bir sayısal (ya da bonus kandırma, karma için) kimliği ile veritabanındaki görüntülemek istediğiniz tüm iletileri depolamak ve sorgu dizesinde kimliklerinin bir listesini geçebileceği. Bu sorgu dizesi kısa tutar, ve yapmanız gereken tüm ID kodunuzu ne mesaj neye tekabül takip olduğunu.

Ben belki de sadece ana sayfada bu mesajlaşma sistemi için destek ekleyerek oturum yaklaşımı ile sopa olacaktır. Diğer tüm yaklaşımlar basitlik veya daha yüksek performans maliyeti var gibi doğru yolda.

Ben tüm diğer sayfaları için şablon bir ana sayfa var varsayalım. Eğer bir tane iyi bir neden var, bu yüzden yoksa size sürece onlara göstermek için özel bir yere sahip olarak ihtiyacınız olan her sayfada mesajları görüntüleme taşıma bakmak gerekmez.

Bunun için de ana sayfası tarafından verilen özel bir div kullanımı ve pozisyon geçerli sayfa tarafından ele sağlayabilirsiniz. Ben doğru anlamak Eğer mesajın gösteren ve başka bir sayfaya kullanıcı yönlendirme arasındaki zamanlama çeşit gerekir. Bu daha önce dedim ki div göstermek ve daha sonra yeni bir sayfaya yönlendirme için herhangi bir AJAX kütüphanesini kullanarak elde edilebilir.

I jQuery içine bir göz alarak öneririz.

Bu ben yapmak istiyorum nasıl:

function set_message($message_type, $message)
{
    $_SESSION['messages'][$message_type][] = $message
}

function get_messages()
{
    $messages_array = $_SESSION['messages'];
    unset($_SESSION['messages']);
    return $messages_array;
}

$message_type "uyarı" olabilir, "hata", vb "başarı" ve türüne bağlı olarak kullanıcı farklı bir görüntü / renk / ne olursa olsun gösterebilir.

Bu sorun, veri http gibi bir "vatansız protokol" inat olması nasıl klasik bir örneğidir.

Sizin seçenekleri şunlardır:

  1. Pass it in the GET parameters (not user friendly)
  2. Bu DB saklayın
  3. Oturumu saklayın

Seçenekler 2) ve 3) (aksi halde, iletiye kullanıcıyı maç için hiçbir yolu yoktur) bir tanımlama bilgisi için kullanıcı gerektirir. Bunların arasında, ben PHP seanslarda inşa ile gitmek istiyorum. Sadece 2. adımda bir oturum değişkeni ayarlamak, ve 4. adımda arama sayfası her zaman değişken kontrol var

Buna bir şey yok. Fazla karmaşık şeyler yok.

Muhtemelen en iyi yolu oturumda saklamaktır. Bu basit yolu bulunuyor ve John dediği gibi, 'fazla karmaşık şeyler yapmayın'.

Bu veri tabanı hem de oturumda saklayın. Eğer ihtiyacı varsa bu şekilde kullanıcının kendi tarihine alabilirsiniz ve oturum verileri üzerinden kolayca erişebilirsiniz.

Sadece olması gerektiği halde mesaj görüntülenir noktada kullanıcı karıştırmayın olacak, bir sorgu parametresini kullanmayın.

(; Kez yapılan diğer bir deyişle) mesajlarının gösterilmesi ana şablonun bir parçası olmalıdır.

Belki hafif bir iyileşme, herhangi bir ekran rutin denilen alır sonra verilerin kendisini silme, bir dizi yerine, doldurulur ve uygun mesajları görüntülemek için nasıl bilir alır bir nesnenin örneğini saklamak olacaktır. Bu şekilde size ihtiyaca göre nesnenin farklı çıktı rutinleri kod olabilir, ekran tekrarlamak ve her yerde mantık silmek zorunda, artı yok.

Ben bunu doğru şekilde yapıyoruz düşünüyorum. Bunun için uzak veritabanından kalmak ve URL koyarak çirkin gerekir. Bunu basit yapabilir bunun için güzel bir sınıf yazabilirsiniz.

Burada küçük bir oturumu sınıf bulunuyor:

<?php class session

{

public function __construct()
{
	session_start();
}

public function set($name, $value)
{
	$_SESSION[$name] = $value;
}

public function get($name)
{
	return (isset($_SESSION[$name])) ? $_SESSION[$name] : false ;
}

public function delete($name)
{
	unset($_SESSION[$name]);
}

public function destroy()
{
	$_SESSION = array();
	#session_destory();
	#session_regenerate_id();
}

}

Biraz mesaj sınıfı oldukça kolayca üzerinde inşa edilebilir.

Ben bu kavşaktan kendimi yaşıyorum ve ben yoğun tüm seçenekleri kabul ettik.

  1. How about storing two browser cookies, one called page and the other called message.
  2. Yönlendirme üzerine Eğer çerez üzerine.
  3. When the page loads you check if said cookie exists (in the http headers sent by the client).
  4. Check if it's for that page, if it is, store the message in a variable and unset the cookies.
  5. If it's not for that page, ignore it, it will be output on the other tab that is loading or if it is for a page that for some reason never unset the cookie it will eventually expire.

Bu veritabanı ve oturum çerezleri kullanarak önler.