echo $begrüßung;
if ($_GET('anfang')) $anfang=$_GET('anfang')*$anzahl;
Die []-Klammern wurden ja schon angesprochen. Aber: Wo kommt $anzahl her? Was würde in $anfang stehen, wenn die (korrigierte) Bedingung nicht erfüllt ist?
$sql = mysql_db_query("db","SELECT user, nachricht, zeit, id FROM Guestbook ORDER BY id desc LIMIT ".$anfang.",".$anzahl."");
Wenn du einen String in "" einschließt musst du ihn wegen einfacher Variablen nicht verlassen, nur bei Funktionen und berechnenden Ausdrücken ist das nötig. Das Anhängen eines Leerstrings ("") hintendran ist auch nicht sinnvoll.
Ebenfalls angesprochen wurde die Anfälligkeit des Codeschnipsels gegenüber falschen Eingaben. Bei LIMIT ist das nicht weiter schlimm, da es "nur" zu einem Syntax-Fehler führt
Warum funktioniert das nicht und was muss ich machen damit es funktioniert??
Was funktioniert nicht?
mysql_db_query ist deprecated (die Verwendung ist nicht mehr erwünscht). Nimm mysql_select_db() und mysql_query() statt dessen.
Es wäre zu Fehlersuchzwecken sinnvoll, den MySQL-Befehl erstmal in einer Variable zu generieren, damit du diese anzeigen lassen kannst, um zu sehen, was denn nun wirklich zur DB gesendet wird.
Weiterhin solltest du testen, ob die Funktionen false zurückliefern und in dem Fall die Fehlermeldung von MySQL mit mysql_error() abfragen. Vielleicht machst du das ja auch schon, dann betrachte diesen Absatz als gegenstandslos.
echo "$verabschiedung $name";