echo $begrüßung;
$data // $data kommt per Post an $_POST ... (steht halt ein Land drin)
Was per POST ankommt steht in $_POST drin. Deswegen heißt dieses Array ja auch so. Diese Werte in andere Variablen umzukopieren ist sinnlos. Einem $_POST sieht man sofort die Herkunft der Daten an und kann sich dann das Kommentieren und Beachten bei "einfachen" Variablen sparen. Wenn das Anlegen per register_globals automatisch passiert, so setzt du auf ein seit Jahren auf der Abschussliste stehendes Feature.
$abfrage = "SELECT * FROM dbname WHERE land LIKE '".$data."'";
Wann immer du Werte in einen Kontext bringst, sind diese Werte kontextgerecht zu behandeln. Wenn jemand aus Côte d'Ivoire kommt, bekommst du nur einen Syntaxfehler. Wenn jemand ' OR 1 eingibt, ist das Abfrageergebnis nicht mehr in deinem Sinne. Und wenn jemand ' UNION SELECT * FROM mysql.user eingibt, kann das unter Umständen ernsthafte Auswirkungen für deine Daten nach sich ziehen. Um etwas in einen String in einem MySQL-Statement einzufügen ist, ist dieser Wert mit mysql_real_escape_string() zu behandeln. Wenn du auf Magic Quotes vertraust, dann baust du ebenfalls auf ein veraltetes Feature. Deaktiviere die Magic Quotes, was du sowieso tun must, wenn du mit mysql_real_escape_string() arbeitest.
Und dann gibt es die Funktion sprintf(), mit der man etwas mehr Übersicht in zusammenzusetzende String bekommen kann.
$abfrage = sprintf("SELECT * FROM dbname WHERE land LIKE '%s'", mysql_real_escape_string($_POST['data']));
$suche = mysql_query($abfrage);
while($sdata = mysql_fetch_object($suche))
Ein mysql_query() kann als Ergebnis ein false zurückmelden, wenn es seine Aufgabe mit einer Aufgabe vorzeitig beenden musste. Diesen Zustand solltest du zum einen nicht ignorieren, denn ein false ist kein gültiges Argument für die Fetch-Funktionen. Zum anderen ist es keine gute Idee, einfach das Script weiterlaufen zu lassen, als ob nichts wäre, denn das ergibt meist weitere nicht mehr funktionierende Abhängigkeiten. Zudem steht der Anwender da und weiß nicht, was er falsch gemacht hat (falls er überhaupt daran schuldig ist) und wie er trotzdem noch an sein Ziel kommen kann.
$ergeb1 = $sdata3->vorname;
$ergeb2 = $sdata3->nachname;
$ergeb3 = $sdata3->land;
Schon wieder ein Umkopieren ohne Sinn.
$input = "<?"."php "."\n"."$"."namen = '".$ganznamen."';"."\n"." ?>";
Es ist nicht erforderlich, die Zeichenfolge <?php, so sie in einem String notiert ist, auseinanderzunehmen. Auch muss man für \n einen ""-String nicht verlassen. Und das erste $ kann man durch Voranstellen eines \ entschärfen. Du tust dir und den Codelesern keinen Gefallen, wenn du Strings dermaßen auseinandergerissen notierst.
$input = "<?php \n\$namen = '$ganznamen';\n ?>";
Außerdem ist es garantiert nicht der Sicherheit dienlich, wenn du Code aus Benutzereingaben zusammenbaust, noch dazu vermutlich ungefilterten. Manche Leute heißen dann auf einmal ';phpinfo(); $foo=' oder noch unangenehmer.
// Die Var wird zusammengesetzt
$ganznamen = $ergeb1." ".$ergeb2.",";
echo $ganzname; // hier stimmt noch alles (Name1,Name2,usw.)
Sicher? $ganzname und $ganznamen sind zwei unterschiedliche Variablen. Hast du das error_reporting auf E_ALL stehen? Wenn das nicht nur ein Abtippfehler ist, könnte dir PHP daraufhin mit einer Notice anzeigen, dass $ganzname nicht existiert.
/**** TEMP DATA EINTRAG --> temp.php ****/
$input = "<?"."php "."\n"."$"."namen = '".$ganznamen."';"."\n"." ?>";
Und hier? Stimmt hier auch noch alles? Sprich: Du schreibst ja $input in die Datei, also solltest du dessen Inhalt kontrollieren. Beachte hierbei ebenfalls, dass du einen Kontextwechsel vorliegen hast und besonders bei der Ausgabe der < und > eine HTML-gerechte Notation an den Browser schicken musst. htmlspecialchars() hilft dir dabei.
/*********/
$fpB = fopen("temp.php", 'w', TRUE);
fwrite($fpB, $input, strlen($input));
Wieder keine Fehlerbehandlung. Bist du außerdem sicher, dass du beim dritten Parameter das true und seine Auswirkungen haben möchtest?
fclose ($fpB); // hier steht leider nur noch der letzte Wert drin ???
} //ende while
Nunja, du öffnest und schließt die Datei in jedem while-Schleifen-Durchgang, was schonmal unnötig aufwendig ist. Weiterhin verwendest du den Mode w. Lies bitte im Handbuch zu fopen() nach, was der macht, ob das in deinem Sinne ist und ob es nicht etwas besseres gibt. Am besten wäre jedoch, das Öffnen und Schließen außerhalb der while-Schleife anzusiedeln.
echo "$verabschiedung $name";