tutorials.de Buch-Aktion 05/2012
  • Webmaster & Internet

    Webmaster & Internet
  • Dynamisch mehrere Input-Felder generieren

    In meinem ersten Tutorial geht es darum, mehrere Inputfelder zu generieren und diese in einer MySQL- Datenbank zu speichern.

    Zuerst wird ein Formular definiert in dem der Benutzer festlegen kann wieviele Input Felder er befüllen möchte.

    Code :
    1
    2
    3
    
    <form action="input_field.php" method="POST">
    Anzahl der Felder:<input type="text" name="anzahl" size="25"></br>
    <input type="submit" value="Felder laden">

    Danach wird eine IF-Abprüfung zu grunde gelegt die erst ausgeführt wird, sollte der POST aus dem Eingabefeld größer 0 sein. Die Schleife läuft solange, bis die Anzahl der Inputfelder erreicht sind die der Benutzer befüllen möchte. Dabei ist der Name bereits durch zwei eckige Klammern versehen was bedeutet das der Post als Array ausgegeben wird.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    if ($_POST["anzahl"] >= 0){
     
    for ($i = 1;$i <= $_POST["anzahl"];$i++){
     
    echo "Feld ".$i.": <input type='text' name='name[]'></br>";
    }
     
    echo "<input type='submit' value='Absenden'>";
     
    }

    Schließlich werden die Post's aufgefangen und in einem Insert gespeichert. Zuerst wird dabei das bekannte Insert Into in einen String gespeichert und die Spalten der Tabelle definiert die befüllt werden sollen.

    Code :
    1
    
    $insert = "INSERT INTO Tabelle (Name) VALUES ";

    Dann wird eine Schleife initialisiert die mit dem "sizeof" so lange läuft wie Groß das Array ist.
    In der Abprüfung

    Code :
    1
    
    if (($i+1) == sizeof($_POST[name])){

    wird festgelegt wann das Array endet. In einem Insert ist nach dem letzten Eintrag kein Komma mehr vorgesehen. Jetzt kann die Variable $insert per mysql_query in eine Datenbank gespeichert werden.


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     
    for ($i = 0; $i < sizeof($_POST[name]);$i++){
     
    if (($i+1) == sizeof($_POST[name])){
    $insert = $insert."('".$_POST[name][$i]."')";
    }
    else {
    $insert = $insert."('".$_POST[name][$i]."'),";
    }
    }

    Anwendungsbereich ist jedes Formular, in dem der Benutzer eventuell mehrere Eingaben zu tätigen hat. Das kennt ja jeder von PHPMyAdmin, wenn man neue Einträge hinzufügen möchte.

    Weiterhin möchte ich auf die mangelnde Sicherheit im herauskommenden Insert hinweisen. Dieses wurde für dieses Tutorial einfach gehalten.
     


    Kommentare 3 Kommentare
    1. Avatar von ComFreek
      ComFreek -
      Auf jeden Fall sollte man die Variablen aus $_POST nicht einfach so ins Query einfügen! Wenn man sie "richtig" formatiert, können sie definierte MySQL-Befehle ausführen.

      Deshalb mysql_real_escape_string() auf jede Variable anwenden!


      Vielleicht könntest du noch einen Anwendungsbereich nennen.

      Was mir noch aufgefallen ist, dass du die 'name' Variable ohne Anführungszeichen ansprichst. Das ist zwar möglich, allerdings ist es besser solche zu verwenden.
    1. Avatar von Sunny1245
      Sunny1245 -
      Zitat Zitat von ComFreek Beitrag anzeigen
      Auf jeden Fall sollte man die Variablen aus $_POST nicht einfach so ins Query einfügen! Wenn man sie "richtig" formatiert, können sie definierte MySQL-Befehle ausführen.

      Deshalb mysql_real_escape_string() auf jede Variable anwenden!


      Vielleicht könntest du noch einen Anwendungsbereich nennen.

      Was mir noch aufgefallen ist, dass du die 'name' Variable ohne Anführungszeichen ansprichst. Das ist zwar möglich, allerdings ist es besser solche zu verwenden.
      Die Benamung der Variablen und ob man auf diese mit Anführungszeichen anspricht, das kann dan jeder machen wie er das gerne möchte.
      Weiterhin weiß ich das ich mir damit eine SQL-Injection geschaffen haben sobald ich einen Post oder Get unformatiert in den SQL-String schreibe. Aber ich denke zu Tutorialzwecken ist klar geworden was ich meine.
      Anwendungsbereich ist jedes Formular, in dem der Benutzer eventuell mehrere Eingaben zu tätigen hat. Das kennt ja jeder von PHPMyAdmin, wenn man neue Einträge hinzufügen möchte.
    1. Avatar von ComFreek
      ComFreek -
      Aber ich denke zu Tutorialzwecken ist klar geworden was ich meine.
      Ja, aber viele kopieren einfach den Code und beachten nicht die Sicherheitslücken.

      Vielleicht könntest du dies noch hineinschreiben.

      Anwendungsbereich ist jedes Formular, in dem der Benutzer eventuell mehrere Eingaben zu tätigen hat. Das kennt ja jeder von PHPMyAdmin, wenn man neue Einträge hinzufügen möchte.
      Das könntest du auch noch hinzufügen.

      Danke!
    Kommentare Kommentar schreiben

    Klicke hier, um dich anzumelden

    Wie nennt man ein vierbeiniges Tier, das bellen kann?