echo $begrüßung;
laut http://www.php-homepage.de/manual/function.mysql-real-escape-string.php soll die methode die ich angewendet auch funktionieren :(
Dein Problem, die gewünschte Such-Funktionalität herzustellen, ist nicht das richtige Escaping. Das musst du einsetzen, um SQL-Injection zu verhindern, und um z.B. einfache und doppelte Gänsefüße so zu kennzeichnen, dass sie nicht als Stringbegrenzung gewertet werden. Wenn du nach O'Conner suchst und den String in '' einrahmst hast du beim ' das dem O folgt ein Problem.
Aber zurück zum Thema. Du hast zwei Eingabefelder für die Suche. Eins befüllst du mit dem Wert foo, das andere lässt du leer. Wenn du nun eine Abfrage
SELECT * FROM table WHERE feld1 = 'foo' AND feld2 = ''
hast, werden natürlich nur Datensätze gefunden, bei denen sowohl foo in feld1 steht als auch einen Leerstring in feld2 haben. Wenn feld2 einen Wert ungleich Leerstring enthält, wird der Datensatz nicht gefunden. Bei AND müssen beide Bedingungen erfüllt sein.
Wenn nur eine Bedingung erfüllt sein muss, könntest du OR verwenden. Aber auch das lässt ein paar Wünsche offen. Sind beide Eingaben leer, werden nicht etwa alle Datensätze gefunden, sondern nur die, bei denen mindestens eins der beiden Felder einen Leerstring enthält. Bei feld1 = 'foo' OR feld2 = '' werden Datensätze gefunden, die foo in feld1 haben und auch solche, die einen Leerstring in feld2 haben, also (foo, ''), (foo, bal), (bar, '').
Wenn du nun leere Felder gar nicht berücksichtigen möchtest, musst du dafür sorgen, dass das SQL-Statement keine Bedingung für dieses Feld enthält. Die entsprechenden Teile dürfen also gar nicht erst in der WHERE-Klausel aufgeführt werden. Du musst also nicht nur Werte in dein Statement einfügen, sondern dir auch noch die WHERE-Klausel selbst zusammenbauen.
echo "$verabschiedung $name";