Suche nach als

Daten hinzufügen Prozess

Auf dieser Seite:

Ich möchte Benutzereingaben von einem Formular in die Tabelle einer Datenbank eintragen. Zuerst muss ich die Variablen des Formulars holen, dann muss ich sie prüfen, das heist mit meinen Erwartungen velgleichen. Entspricht die Benutzereingabe nicht den zulässigen Parametern, muss sie gelöscht werden. Nur wenn die Vorgaben erfüllt sind, kann der Eintrag in die Datenbank oder die Ausgabe auf der Webseite erfolgen.

User Eingaben im Formular

Jede Eingabe ist potenziell gefährlich!

Die Usereingaben dürften keines Falls ungeprüft in die Datenbank geschrieben werden!

  1. Enthält die Eingabe überhaupt Zeichen? Leere Einträge hinzufügen bringt ja auch nichts.
  2. Bei kurzen Einträgen kann ich auch auf eine maximale Anzahl Zeichen prüfen, die nicht überschritten werden darf.
  3. Enthält die Eingabe Zeichen, die in Codezeilen vorkommen, wie Anführungszeichen (" oder '), HTML-Tags (< >) oder das Ampersand (&), dann werden diese durch die PHP-Funktion
    htmlentities($benutzereingabe,ENT_QUOTES) unschädlich gemacht.
  4. Die Farbe wurde mit einer Auswahlliste gewählt, ich weiss also ganz genau, was die zulässigen Werte sind. Sie sind vom Datentyp Zahl und dreistellig.
    (int)$benutzereingabe; wandelt einen String in einen Integer um oder auch die Funktion: intval($benutzereingabe);. Ich könnte auch fragen 'Ist das ein nummerischer String?' und wenn die Antwort TRUE ist weiterfahren:
    if (is_numeric($benutzereingabe)) { weiterfahren; }. Formulare übermitteln immer Strings, ich kann also nicht fragen, 'Ist dies eine Zahl?' etwa so if(is_int($benutzereingabe)){...}.
  5. Für Einträge in die Datenbank, kann ich ganz böse Worte suchen, z.B. mittels der Funktion stristr($benutzereingabe,"BöSESWORT"); oder löschen z.B. durch str_replace("BöSESWORT","Ersatz",$benutzereingabe);. Auch reguläre Ausdrücke können Schlüsselworte herausfiltern. Gelänge es nämlich das Schlüsselwotz DELETE, TRUNCATE oder DROP einzuschleusen, könnte dies die ganze Tabelle Löschen, UPDATE könnte alles überschreiben.
  6. Nach jeder Prüfung muss ich das Ergebnis (OK oder ERROR, etc.) in einer Variablen speichern (z.B. $test). Nur wenn die Prüfung erfolgreich war (z.B. $test=="OK"), erfolgt ein Eintrag in die Datenbank und ev. in die Logdatei. Sonst erfolgt vielleicht eine E-Mail an den DB-Manager und auch ein Logeintrag.
  7. Ich gebe einem Angreifer keine Hinweise durch (Details in den) Fehlermeldungen.
  8. Siehe auch: Sicherheit Und: Reguläre Ausdrücke
// erst holen
  $neu_veilchen = isset($_POST["neu_veilchen"]);
  $neu_color = isset($_POST["neu_color"]);
  $neu_beschrieb = isset($_POST["neu_beschrieb"]);
// dann prüfen bzw. unschädlich machen
  if ($neu_veilchen == "" || $neu_veilchen == " ") { // || bedeutet 'oder'
    $test1 = "LEER"; 
  } elseif (stristr($neu_veilchen,"href")){
    $neu_veilchen = "";
    $test1 = "URL gefunden, kein Eintrag";
  } else { 
    $neu_veilchen = htmlentities($neu_veilchen,ENT_QUOTES);
    $test1 = "OK"; 
  }
  $neu_color = (int)$neu_color;
  if ($neu_beschrieb == "" || $neu_beschrieb == " ") {
    $test2 = "LEER"; 
  } elseif (stristr($neu_beschrieb,"href")){
    $neu_beschrieb = "";
    $test2 = "URL gefunden, kein Eintrag";
  } else { 
    $neu_veilchen = htmlentities($neu_veilchen,ENT_QUOTES);
    $test2 = "OK"; 
  }
// und ausgeben
  print "Die Benutzereingaben nach der Prüfung sind: 
    Test 1=".$test1.", Test 2=".$test2."<br />\n";
	echo "Veilchenname: ".$neu_veilchen;
	echo "Farbe: ". $neu_color;
	echo "Beschreibung: ".  $neu_beschrieb;
Die Benutzereingaben nach der Prüfung sind: Test 1=LEER, Test 2=LEER
Veilchenname:
Farbe: 0
Beschreibung:

Daten der Datenbank-Tabelle hinzufügen

Dann muss ich die Verbindung zu Server und Datenbank herstellen (falls keine besteht). Jetzt werden in einer Variablen namens '$eintrag' die ganzen Einträge gespeichert; nach dem INSERT INTO Befehl zuerst die Tabelle dann (in Klammern und durch Kommas getrennt die Spaltennamen) dann VALUES (in Klammern und Anführungszeichen die Werte - ich füge die obigen Variablen des Forumars ein).
Beachten: Die doppelten und einfachen Anführungszeichen!

Der Wert im Feld 'id' wird durch die Tabelle (so wie sie angelegt ist) jeweils automatisch um 1 erhöht und muss hier nicht eingegeben werden.
Beachte: Tabelle und eine Spalte können gleich heissen (veilchen).

INSERT INTO

mysql_query()

<?php
// Nur bei erfolgreichem Test!!!
if ($test1=="OK" && $test2=="OK"){ // && bedeutet 'und'
// Eintrag zusammenstellen
  $eintrag = "INSERT INTO veilchen (veilchen, color, beschrieb) VALUES 
    ('$neu_veilchen', '$neu_color','$neu_beschrieb')";
// Ausführung
  $ausfuehren = mysql_query($eintrag);
}

// Das geht auch kompakter (ohne neue if und nur einer Variablen $test).
?>

Der Eintrag wird nun wie bei der Abfrage durch den Befehl mysql_query() ausgeführt.
Stimmen Anzahl Spalten und Werte nicht überein, erfolgt kein Eintrag in die Datenbank.
Die Verbindung muss nicht zwingend gekillt werden.
Bei Gelingen könnte eine Bestätigung ausgegeben oder ein Eintrag an eine Log-Datei angefügt werden. Fertig!

Kein Blumentopf gewonnen.
<?php
if (isset($ausfuehren) == 'true'){ // falls TRUE zurückgegeben wurde hat es geklappt
  echo "Danke für die Blumen.";
} else { echo "Kein Blumentopf gewonnen."}
?>

Die Tabelle wird ganz unten auf der Seite Tabelle ausgeben ausgegeben.

 


Valid XHTML 1.0 Check den Code.

Daten ändern >> << Daten hinzufügen Formular
Ich bin hier: > PHP Lehrling >>> Daten hinzufügen Prozess
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 19.05.2012