• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Notice: Undefined index

Perfekt! Vielen, vielen Dank mermshaus.

Die Notice-Meldungen sind weg. Jetzt hätte ich noch eine Frage. Wie könnte man diesen Befehl am besten in eine Methode verwandeln, um auf die Funktion bestmöglich zugreifen zu können und ohne viel Aufwand zu betreiben?
 
Das ist eine etwas knifflige Frage, weil es da etliche Dinge zu bedenken gibt.

  • POST-Werte können Arrays enthalten.
  • Manchmal muss zwischen "leerer String" und "nicht gesetzt" unterschieden werden können.
  • Nicht jeder POST-Wert soll escapet werden. (Eine Methode, die POST-Werte zurückliefert, sollte also nicht einfach alles escapen.)

Eine Methode zum Abrufen könnte so aussehen (aus Zend_Controller_Request_Http im Zend Framework):

PHP:
public function getPost($key = null, $default = null)
{
    if (null === $key) {
        return $_POST;
    }

    return (isset($_POST[$key])) ? $_POST[$key] : $default;
}

Diese Methode gibt entweder den exakten Wert eines Felds zurück oder den angegebenen Default-Wert. Sie führt kein Escaping und keine Typkonvertierung zu String oder so durch.

Eine mögliche Escape-Funktion könnte so aussehen:

PHP:
function escape($string, $quote_style = ENT_QUOTES, $charset = 'UTF-8')
{
    return htmlspecialchars((string) $string, $quote_style, $charset);
}

Damit wären wir bei:

PHP:
echo '<input type="text" name="date" value="'. escape($something->getPost('date', '')).'" />';

Um ein paar Zeichen zu sparen, könnte man dafür nun noch eine eigene Funktion anlegen oder auch pro Template ein Closure als so eine Art Makro.

PHP:
$post = function ($key, $default) use ($something) {
    return escape($something->getPost($key, $default));
};

echo '<input type="text" name="date" value="'. $post('date', '').'" />';

Solche Methoden/Funktionen funktionieren häufig besser, wenn sie in einen größeren Kontext eingebunden sind (etwa in ein Framework), weil dort Mechanismen existieren, sie sinnvoller abzulegen.
 
Zurück
Oben