echo $begrüßung;
$suchbegriff = $_POST['suchbegriff'];
Häufig gesehen aber völlig unnötig ist dieses Anlegen einer neuen Variable. Du kannst auch im weiteren Script-Verlauf direkt auf $_POST['suchbegriff'] zugreifen. Der Vorteil dabei ist, dass du bei $_POST/$_GET['foo'] direkt siehst, dass es sich um eine Benutzereingabe handelt, die ungeprüft ist und Werte enthalten kann, die gegebenenfalls erst noch entschärft werden müssen. Einer $variable sieht man nicht mehr an, ob der Inhalt vertrauenswürdig ist oder nicht.
$result = mysql_query("SELECT * FROM buecher WHERE title='".$suchbegriff."'") or die("Fehler");
Es ist immer eine gute Idee, das SQL-Statement zuerst in einer weiteren Variable zusammenzubauen, welche man dann der Funktion mysql_query() übergibt. So kann man sich das zusammengebaute Statement zu Prüfzwecken auch mal ausgeben lassen. Auch wird dann die mysql_query()-Zeile nicht so unübersichtlich, wenn du die unbedingt empfehlenswerten Maskierungsfunktionen noch einbaust.
Ein harmloses Beispiel: Wenn du nach einem Titel suchst, der ein ' enthält, was passiert dann mit deinem SQL-Statement? SELECT * FROM buecher WHERE title='was'n das' - Das ergibt _nur_ einen Syntax-Fehler. In weniger harmlosen Fällen kann man durch gezieltes Manipulieren des SQL-Statements an Daten gelangen, die nicht für einen bestimmt sind, oder auch Änderungen an Datensätzen vornehmen, die nicht von dir vorgesehen sind.
Benutzereingaben sollten stets mittels mysql_real_escape_string() entschärft werden, bevor sie in ein Statement eingebaut werden. Aus ' wird ' und ist somit kein Stringbegrenzungszeichen mehr.
Mein Vorschlag, eine Abfrage zu gestalten sieht so aus:
$sql = [link:http://de.php.net/manual/en/function.sprintf.php@title=sprintf]("SELECT * FROM buecher WHERE title='%s'",
mysql_real_escape_string($_POST['suchbegriff']));
//echo $sql; // zum Zwecke der eventuellen Kontrollausgabe
$result = mysql_query($sql) or die("Fehler");
PHP in Versionen kleiner als 6 hat einen eingebauten Mechanismus namens Magic Quotes, der bereits eine solche Entschärfung vorzunehmen vorgibt. Dies macht er aber nicht sehr gut, weil er dabei nicht alle für MySQL notwendigen Zeichen behandelt. Wenn dieser Mechanismus eingeschaltet ist, und du dich entschlossen hast statt seiner ordentlich zu maskieren, solltest du ihn entweder ausschalten oder seine Auswirkungen rückgängig machen, was man am besten mit der an der verlinkten Stelle aufgeführten Funktion einmalig am Scriptanfang vornimmt.
Ein Script beim Auftreten eines Fehler sterben zu lassen ist zwar sehr einfach zu implentieren, aber alles andere als benutzerfreundlich. Hier solltest du dir etwas besseres überlegen.
das geht aber irgendwie nicht so wie ich mir das gedacht habe, ich hatte es mit wörtern getestet die tatsächlich so dort drin stehen, ich bekam aber ein ergebnis das mit meiner anfage nichts zu tun hatte, er hat mir einfach irgendwelche ergebnisse angezeigt, es waren immer die gleichen, keine ahnung wonach das geht...
Kannst du genauer beobachten/beschreiben, welche Daten angezeigt werden? Wird einfach alles ausgegeben? Passiert das auch, wenn du das Statement mittels phpMyAdmin ausführen lässt?
mysql_num_row [...] vielleicht könnte mir mal jemand erklären wozu dieser befehl da ist?
Dafür hat man Handbücher erfunden: mysql_num_rows().
echo "$verabschiedung $name";