echo $begrüßung;
$query="SELECT * FROM User WHERE name = '".$name."' AND pw='".md5($pw)."' ";
Es sieht so aus, als ob dein Code eine Sicherheitslücke aufweist. Wenn du $name ohne weitere Bearbeitung aus den Eingabedaten übernimmst, kann sich jeder ohne Passwort-Kenntnis ins System begeben. Wenn jemand ' OR 1 OR ' (inklusive der ') eingibt, sieht dein Statement anders aus als von dir vorgesehen und gibt einfach alle Datensätze zurück.
$count="SELECT count(*) FROM User WHERE name='".$name."' AND pw='".md5($pw)."'";
Die zweite Abfrage nach der Anzahl soll vermutlich nur ermitteln, ob das Login nicht erfolgreich war. Wenn man sowohl die Ergebnismenge als auch die Anzahl der Datensätze braucht, reicht es, eine Abfrage ganz normal zu stellen und dann mit mysql_num_rows() die Anzahl der Ergebniszeilen abzufragen.
if (mysql_result($result,0) == 1) {
Hier entschärfst du deine Sicherheitslücke wieder - vermutlich ohne dass sie dir bewusst war - indem du den Loginvorgang nur dann fortsetzt, wenn nur ein Datensatz ermittelt wurde. Im Falle des obigen Angriffsversuches kämen mehr als einer zurück. Wenn du den Hinweisen aus dem Thread folgst und die Lösung von Karin verwendest, ist deine Sicherheitslücke wieder da, den diese Lösung unterschiedet nur zwischen 0 und mehr als 0 Datensätzen in der Ergebnismenge und fragt bei > 0 einfach nur den ersten Datensatz ab (oft ist dies der Administrator-Account).
Wenn du auf das PHP-Feature Magic Quotes baust, werden einige kritische Zeichen entschärft, so dass der obige Angriffsversuch ins Leere geht. Magic Quotes beachtet aber nicht alle notwendigen Zeichen. Besser ist es, dieses Feature auszuschalten (was ab PHP6 sowieso der Fall sein wird) oder seine Auswirkungen rückgängig zu machen und die Entschärfung der kritischen Zeichen einer Funktion zu überlassen, die für das jeweilige Medium maßgeschneidert ist. Im Falle von MySQL ist dies mysql_real_escape_string().
mysql_error();
mysql_error() gibt einen String mit der Fehlermeldung zurück. Wenn du diesen ausgegeben haben möchtest, solltest du noch einen Ausgabebefehl verwenden. Außerdem brauchst du mysql_error() am Ende des Scripts nicht mehr abzufragen, da das Script im Fehlerfall bereits weiter oben gestorben ist. (Scripte sterben zu lassen und dabei eine dem Anwender nichts nützende Fehlermeldung auszugeben ist nicht gerade sehr anwenderfreundlich.)
echo "$verabschiedung $name";