Javascript: dynamische text inputs

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Phil333, 3. Dezember 2008 .

  1. 3. Dezember 2008
    Guten Tag an alle!

    Ich hab folgendes Problem:
    Meine Seite hat ein Formular, das den Vor- und Nachnamen einer Person, sowie dessen rolle erfasst.
    Da man im Vorfeld nicht weiß wieviele Personen es sind, wir mit Javascript 3 neue text inputs erstellt, wenn eine person dazu kommt..
    das klappt auch. die anzahl der personen wird mittels javascript in ein hidden feld eingetragen, sodass ich nach dem senden der informationen mittels php eine schlfeife machen kann, die die werte ausliest.
    Ich bin mir ziemlich sicher, das die Input-text-felder nicht den namen bekommen, den sie sollen..

    das ganze soll so aufgebaut sein:
    Code:
    <input type="text" name="vorname1"><input type="text" name="nachname1"><input type="text" name="rolle1">
    
    danach
    <input type="text" name="vorname2"><input type="text" name="nachname2"><input type="text" name="rolle2">
    der Javascriptcode den ich mir zusammengeflickt hab, sieht so aus:

    PHP:
    var  i = 1 ;
    function 
    NeuesFeld ()
    {
            
    i = i + 1 ;
            
            
    document . getElementsByName ( "SchauspielerZahl" )[ 0 ]. value  i ;

            
            var 
    row  document . getElementById ( "Schauspieler" ). insertRow document . getElementById ( "Schauspielerfelder" ). rowIndex + i + );
            var 
    cell  row . insertCell );

            var 
    text  document . createTextNode 'Schauspieler '  + ( i ) );
            
    cell . appendChild text  );

            
    cell  row . insertCell );


            var 
    text  document . createTextNode ' Vorname:'  );
            
    cell . appendChild text  );
            var 
    input  document . createElement 'input'  );
            
    input . type  'text' ;
            
    input . name  'vorname[]' ;
            
    input . size  10 ;
            
    cell . appendChild input  );

            var 
    text  document . createTextNode ' Nachname:'  );
            
    cell . appendChild text  );
            var 
    input  document . createElement 'input'  );
            
    input . type  'text' ;
            
    input . name  'nachname[]' ;
            
    input . size  10 ;
            
    cell . appendChild input  );

            var 
    text  document . createTextNode ' Rolle:'  );
            
    cell . appendChild text  );
            var 
    input  document . createElement 'input'  );
            
    input . type  'text' ;
            
    input . name  'rolle[]' ;
            
    input . size  10 ;
            
    cell . appendChild input  );

    }
    </
    script >
    Ich hoffe bei jemanden von euch klappt das mit dem Hirn besser als bei mir..


    Vielen Dank schon mal an alle
     
  2. 4. Dezember 2008
    AW: Javascript: dynamische text inputs

    Gibtn sehr ähnliches,a ktuelles Thema dazu in Webtechnik.
    Dort wurd vorgeschlagen, was ich auch für am sinnvollsten halte:
    Nenn die Felder nicht Name1, Name2 etc. sondern vergib generell den Namen "name[]".
    Somit hast du nachher ein array - dein hidden Feld ist auch unnötig, da du ja dann die Größe deines arrays als Variable in der Schleife nutzen kannst.

    BTW: Du hast das doch schon so - lass es so, wenn du das Formular nachher mit PHP verarbeitest, funktioniert das astrein. Musst eig. lediglich noch dein hidden Feld entfernen.
     
  3. 8. Dezember 2008
    AW: Javascript: dynamische text inputs

    An alle die genau das Problem haben und nicht weiter wissen: ich hab die Lösung.

    beim name hatte ich ja

    PHP:
    input . name  'vorname[]' ;
    richtig ists so:
    PHP:
    input . name  'vorname' + i ;

    Allerdings hab ich jetzt ein weiteres Problem.

    Der vorname, nachnachname und die rolle werden in eine mysql datenbank gespeichert.
    sie werden mit einem zeichen getrennt z.b. " *"
    zwischen jeder Person ist dan nochmal ein anderes trennzeichen
    also z.b. "_"

    in der datenbank steht dann sowas:

    Peter*Meier*Faust_Hans*Günter*Mephisto_Lisa*Müller*Gretchen

    hier sieht man die 3 einträge.
    Eine bessere möglichkeit fiel mir nicht ein, weil die Anzahl der Spieler ja variabel ist.

    In einer Übersicht sollen die Ganzen Personen dann ausgelesen werden.
    Und genau da ist mein Problem.
    Ich wollte das mit explode auslesen..
    also zuerst die einzelnen spieler auslesen aus diesem string.
    Das ganze ist mit explode ja kein problem.
    rauskommen müsste da ja ein array, dessen strings man wiederum einzelnd auslesen können müsste oder?

    ich habs so Probiert aber es geht nicht:

    PHP:

                    $SpielerInsgesamt 
    explode ( "_" $row [ 'Spieler' ]);
                    
                    
    $AnzahlSpieler  count ( $SpielerInsgesamt );

                    for (
    $i  0 $i  $AnzahlSpieler $i ++)
                    {
                      
    $Spieler  explode ( "*" $SpielerInsgesamt [ $i ]);
                      
    $Vorname = $Spieler [ 0 ];
                      
    $Nachname = $Spieler [ 1 ];
                      
    $Rolle = $Spieler [ 2 ];
                    }

    das problem hierbei ist das " $SpielerInsgesamt[$i]"
    ich will, das der vortlaufend in dieser schleife die einzelnen spieler ausliest, aber es geht nicht..
    wie kann ich das bewerkstelligen?

    Danke
     
  4. 8. Dezember 2008
    AW: Javascript: dynamische text inputs

    Ich versteh keins deiner Probleme richtig. Solltest vlt. etwas genauer beschreiben, was du überhaupt vorhast.
    Wieso du bei dem ersten Problem jetzt auch selbst irgendwelche Zahlenwerte in ner Schleife generierst, obwohl das ganze von PHP automatisch zum Array gemacht werden kann, weiß ich auch nicht.

    Wieso machst du nicht einfach eine Tabelle mit den Spalten "Vorname", "Nachname" und "Rolle", in die du dann die Daten einzeln eintragen kannst.
    Ist doch wesentlich einfacher, als das irgendwie in ne einspaltige Tabelle zu schreiben und nachher auseinanderzurupfen.
    Wenn du das ganze irgendeinem anderen Eintrag zuordnen willst, arbeite mit IDs
     
  5. 8. Dezember 2008
    AW: Javascript: dynamische text inputs

    Kannst dein Array auch PHP: serialize - Manual und dann als String in der Datenbank speichern. Dann später PHP: unserialize - Manual. Dann musste "nichts" mit explode etc machen.

    Du könntest dann die Input Felder so organisieren (ja, array wurd schon gesagt..)

    <input type="text" name="user[0][firstname]" />
    <input type="text" name="user[0][lastname]" />
    <input type="text" name="user[0][role]" />

    <input type="text" name="user[1][firstname]" />
    <input type="text" name="user[1][lastname]" />
    <input type="text" name="user[1][role]" />

    ....

    dann $users = $_POST['user'];

    dann kannste bspweise via
    PHP:
    foreach( $users  as  $id =>  $user ) {
     print 
    $user [ 'firstname' ];
     print 
    $user [ 'lastname' ];
     print 
    $user [ 'role' ];
    }
    drauf zugreifen


    PHP:
    <? php
     $datastring 
    serialize ( $users );
     print 
    $datastring // kannste dir anguckn, kriegstn string. blabla.
     
    $users  unserialize ( $datastring );  // wieder das array
    ?>
     
  6. 11. Dezember 2008
    AW: Javascript: dynamische text inputs

    @ Hennington

    Wie man sehen kann ist das auch keine einspaltige Tabelle.
    Da entsteht jeweils eine neue Zeile mit 3 input feldern (man kann es also einzelnd eintragen), die ich dann geordnet in eine mysql datenbank speicher und später anzeigen und bearbeiten können möchte.
    Das JS diehnt lediglich dazu den Feldern einen namen zu geben und sie zu erstellen.

    Das mit dem serialize hab ich übrigens nicht so ganz verstanden und halte ich auch für ein bisschen umständlich.
    Es muss doch möglich sein, einen string mit explode zu teilen, die Teile zu zählen und dann x mal eine schleife durchlaufen zu lassen, die dieses teile nochmals teilt..

    Geht das oder nicht?

    Wie gesagt der Gedanken gang geht bei mir in diese richtung:

    PHP:
    $Spieler "Peter*Meier*Faust_Hans*Günter*Mephisto_Lisa*Müller*Gretchen" ;

                    
    $SpielerInsgesamt  explode ( "_" $Spieler );
                    
                    
    $AnzahlSpieler  count ( $SpielerInsgesamt );

                    for (
    $i  0 $i  $AnzahlSpieler $i ++)
                    {
                      
    $Spieler  explode ( "*" $SpielerInsgesamt [ $i ]);
                      
    $Vorname = $Spieler [ 0 ];
                      
    $Nachname = $Spieler [ 1 ];
                      
    $Rolle = $Spieler [ 2 ];
                    } 
    und mein problem ist das "$SpielerInsgesamt[$i]"

    Vielen Dank
    BW ist raus
     
  7. 11. Dezember 2008
    AW: Javascript: dynamische text inputs

    Wo ist denn noch dein Problem? Wenn dus so machen willst, bitte. Aber der Code, den du gepostet hast funktioniert astrein.

    Ich hab in die Schleife mal ein echo $Rolle.'<br>'; eingefügt - das gibt mir dann folgendes aus:
    Was ja richtig ist, du hast alles nocheinmal gesplittet und hast dann alles einzeln und kannst damit weiterverfahren.
    Was aber nicht in meinen Kop will:
    WOher bekommst du diese Variable $Spieler? ist die Teil deines codes, oder wird der Wert eigentlich irgendwoher geholt?
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.