#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 + 1 ); var cell = row . insertCell ( 0 ); var text = document . createTextNode ( 'Schauspieler ' + ( i ) ); cell . appendChild ( text ); cell = row . insertCell ( 1 ); 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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 ?> + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren