dedlfix: Daten in atenbankschreiben

Beitrag lesen

echo $begrüßung;

// Hier bitte nichts ohne genehmigung ändern ( Michael.Zatti@gmx.de ), Code ist rechtlich geschützt.

Niedlich. Hast du das dahin geschrieben? Tut mir leid, wenn ich dich jetzt entmutige, aber in dem Code stecken so viele Fehler, dass man besser kommt, neuen Code zu schreiben, als ihn zu ändern. Zudem ist er nichts besonderes - 0815-Datenbankhandling - und ein Rechtsstreit um eine ungenehmigte Änderung recht wenig erfolgversprechend. Außerdem ist es gesetzlich nicht verboten, eine rechtmäßig erworbene Software so anzupassen, dass sie auf dem eigenen Equipment läuft.

// Verbindung zum MySQL Server starten
if (!($verbindung = mysql_pconnect ("$host", "$dbuser", "$dbpass"))) {

Aber bitte nicht mit p. Bei persistenten Verbindungen kann man unwissend mehr verkehrt machen, als sie Nutzen versprechen. Verwende lieber das normale mysql_connect():

echo("Leider konnte keine Verbindung zur Datenbank hergestellt werden. Bitte prüfen Sie die Config.php<p>");
echo mysql_error();

Wem zeigst du das an? Nur der Serveradministrator kann mit der Meldung was anfangen. "Normale" Anwender wollen und "unnormale" sollen solche Meldungen nicht zu Gesicht bekommen.

//Daten in die Datenbank schreiben
mysql_query ("INSERT INTO accounts (login, password, email, flags, forceLanguage") VALUES
('$accname', '$passwd', '$email', '34', 'de');", $verbindung";

Das übliche "Vergehen". Wann immer du Daten in einen anderen Kontext bringst, sind diese dem Kontext entsprechend zu behandeln! Hier bringst du Werte in einen SQL-String-Kontext. (My)SQL-Strings werden durch ' oder " eingerahmt. Wenn in deinen Nutzdaten solch ein Zeichen vorkommt, beendet es unfreiwillig den String-Kontext und man befindet sich wieder im Anweisungskontext. Die restlichen Zeichen aus den Daten und das eigentlich abschießende ' führen bestenfalls zu einem Syntaxfehler. Schlimmstenfalls nutzt das jemand gezielt aus und diese Lücke hört auf den Namen SQL-Injection. mysql_real_escape_string() heißt die Funktion, um Daten für den Kontext SQL-String aufzubereiten.

$sql = sprintf("INSERT INTO table (feld1, feld2, feld3) VALUES ('%s', '%s', '%s')",  
         mysql_real_escape_string($feld1),  
         mysql_real_escape_string($feld2),  
         mysql_real_escape_string($feld3));  
if ($result = mysql_query($sql))  
  // Auswertung  
else  
  // Fehlerbehandlung  

Bitte seit etwas nachsichtig, ich hoffe der Code sieht wenigstens für euch Profis sauber aus... Jedenfalls gab ich mir richtig mühe.

Nachsicht ist die falsche Bitte. Fehler aus Nachsicht nicht anzusprechen ist nicht besser als sie wegen Unwissenheit einzubauen.

echo "$verabschiedung $name";