echo $begrüßung;
$query="SELECT user FROM xxx1 WHERE user='$name' OR userid='$name' AND pwd='$pwd'";
Den OR-Ausdruck willst du sicherlich in Klammern setzen. Da das AND eine höhere Priorität hat als das OR, wird zuerst userid und pwd ausgewertet und das Ergebnis dessen anschließend noch mit dem user-Vergleich "geORt". Wenn user gleich $name ist, wird damit dein Ausdruck schon wahr.
Wie in Klammern setzen? Wie genau?
Ohne Klammern wirkt das Statement so, als ob sie wie folgt gesetzt wären:
SELECT user FROM xxx1 WHERE user='$name' OR (userid='$name' AND pwd='$pwd')
Deswegen:
SELECT user FROM xxx1 WHERE (user='$name' OR userid='$name') AND pwd='$pwd'
Nehmen wir mal an, dass du nun die Klammern richtig gesetzt hast. Was passiert eigentlich mit deinem Loginvorgang, wenn jemand in dein Passwortfeld ' OR 1 OR ' (inklusive der ' ) eingibt?
Das PW wird vorher verschlüsselt. Es ist also nicht möglich das so ein Fall eintrifft.
Nun, davon war in deinem Script nichts zu sehen. Das war sehr schön gegen SQL-Injection anfällig.
Vielleicht tritt diese Situation bei anderen Fällen auf. Vielleicht sorgt auch dein Verschlüsslungsalgorithmus dafür, dass mal ein ' im Ergebnis entsteht, das gibt dann "nur" einen Syntax-Fehler. Besser ist es, alle Stringwerte vor dem Einfügen in die Query mit mysql_real_escape_string() zu behandeln (und dabei beachten, dass Magic Quotes hier kontraproduktiv wirksam sein können).
echo "$verabschiedung $name";