2 Stimmen

Übergabe von Daten an die Benachrichtigungsseite

Ich bin mir nicht sicher, wie man eine Benachrichtigungsseite am besten bestückt. Ich habe mit Sitzungen, um es mit Informationen zu füllen, aber das fällt kurz, wenn der Benutzer Cookies blockiert. Ich habe in Erwägung gezogen, die Informationen in HTTP-GET-Variablen zu übergeben, bin mir aber nicht sicher, ob das eine gute Alternative ist, da die Länge der Variablen bei einigen Browsern begrenzt ist.

Welche Methode bevorzugen Sie?

1voto

Geoff Adams Punkte 1111

Sie könnten versuchen, eine indizierte Liste von Fehlermeldungen zu verwenden und dann einfach die Fehler-ID als GET-Parameter an die Seite zu übergeben. Sie können nicht wirklich POST verwenden, da ich davon ausgehe, dass Sie auf die Fehlerseite umleiten werden und daher GET-Anfragen so ziemlich Ihre beste Option sind.

Eine andere Möglichkeit besteht darin, die Fehlerseite an Ort und Stelle zu haben - d.h. der Benutzer bleibt auf derselben URL, erhält aber einen geänderten HTTP-Statuscode (z.B. 404 für "nicht gefunden", 500 im Falle eines Serverfehlers usw.) zusammen mit der Fehlermeldung. Auf diese Weise müssen Sie sich nicht darum kümmern, die Seite über eine HTTP-Anfrage zu füllen, sondern können dies einfach von der Seite aus tun, auf der der Fehler auftritt.

Ich bevorzuge die 2. Methode, auch wenn sie schwieriger zu realisieren ist. Damit können Sie dann Fehler- und Ausnahmehandler verwenden, um automatisch alle Fehlersituationen abzufangen und dann Ihren Fehlerausgabecode auszulösen.

0voto

Álvaro González Punkte 134708

Es gibt einige Meldungen, die zu der Seite gehören, die sie erzeugt, z. B. Fehler in Formularfeldern. Diese sind leicht zu handhaben. Normalerweise erstelle ich ein Array, um sie im HTML-Format zu speichern, und verwende eine Funktion, um sie als HTML-Liste anzuzeigen:

<?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>';

# ...

?>

Dann gibt es den von Ihnen beschriebenen Fall: Nach einer erfolgreichen (oder unmöglichen) Aktion wird der Benutzer an eine andere Stelle weitergeleitet (z. B. die Seite des Hauptbereichs), wo er eine Erklärung erhält. Für kurze Meldungen verwende ich in der Regel eine GET-Variable, die die Meldungen im Klartext enthält:

<?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>';
}

?>

Das ist für Intranets ganz in Ordnung, hat aber zwei Nachteile:

Wenn Sie etwas Speicherplatz zur Verfügung haben (Dateien, Datenbanken, was auch immer), können Sie vollständige HTML-Nachrichten speichern und ihnen eine zufällige ID zuweisen:

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

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

Speichern Sie das Datum, damit Sie alte Daten ab und zu bereinigen können.

Meine Meinung dazu.

0voto

jpeltoniemi Punkte 4890

Es gibt auch die Möglichkeit, die PHP-Session-ID an jeden Link auf der Seite anzuhängen, so dass Sie darauf zurückgreifen können, wenn Cookies fehlschlagen.

Wenn das nicht möglich ist, würde ich die Nachrichten auch in der Datenbank speichern und die eindeutige ID mit $_GET übergeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X