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.