echo $begrüßung;
Also im Klartext geht es letztlich nur darum, dass ich zu Begin des Scrptes meine Variablen definiere?
Nicht indem du die $_POST- oder $_GET-Inhalte kopierst, aber das hat dir Sven schon erklärt. Es geht darum, vor dem ersten lesenden Zugriff mindestens einen Schreibzugriff durchzuführen. Das muss nicht zwingend am Anfang eines Scriptes erfolgen, jedoch vor dem ersten Gebrauch. Zum Beispiel:
foreach ($irgendwas as $item)
$string .= $item;
$string soll beim ersten Durchlauf angelegt werden. Aber wenn es bereits vorher existierte, z.B. aufgrund von register_globals, und schon einen Wert beinhaltet, hängt der erster (und alle weiteren) Schleifendurchlauf ihr Zeug an irgendwas Eingeschlepptes. So wird $string definiert mit einem Leerstring angelegt, und das was irgendwer vorher reingeschrieben hat verworfen:
$string = '';
foreach ($irgendwas as $item)
$string .= $item;
Stelle beim Entwickeln immer das error_reporting auf E_ALL (und display_errors auf on), damit du solche Lesezugriffe auf nicht vorhandene Variablen mit einer Hinweismeldung angezeigt bekommst.
if (bedingung)
$variable = 'bla';
// etwas später
echo $variable;
Wenn bedingung nicht wahr wird, existiert $variable nicht. Das echo greift also ins Leere, oder in das was dir irgendjemand durch Vorbelegung von $variable eingeschleppt hat, z.B. wenn bei register_globals=on jemand
http://example.org/dein_script.php?variable=blödsinn
aufruft.
[1] $variable = '';
if (bedingung)
$variable = 'bla';
[2] else
[2] $variable = '';
Entweder [1] oder [2] ist notwendig, um $variable definiert anzulegen.
Wichtig ist auch, Ausgaben kontextgerecht zu behandeln
echo htmlspecialchars($variable);
oder
echo '<input type="text" name="foo" value="', htmlspecialchars($_GET['foo']), '" />";
Wenn dir jemand "><script>...</script> z.B. bei einem Affenformular ins Feld eintippt, dann hast du ohne htmlspecialchars() plötzlich Javascript-Code mitten in deiner Seite.
echo "$verabschiedung $name";