Textfelder durch Schleife erzeugt, wie kann ich alle in Mysql speichern

Mako

Mitglied
Hi Leute,

ich habe ein Formular in dem ich Textfelder habe dessen Anzahl von der Eingabe des Users abhängt. Bei 5 zb. 5 Textfelder. Meine Idee war nun den Textfeldern eine ID anzuhängen. Sprich TextfeldnameID damit ich die dann irgendwie unterscheiden kann.

Das Ganze funktioniert auch, nur ist mir nun nicht klar wie ich es anstellen kann, dass es mir die gefüllten Felder in die Mysql Tabelle speichert und die leeren nicht ohne dass ich komplett alle manuell eintragen muss. Das Ganze muss doch auch irgendwie mit einer Schleife machbar sein.

Vielleicht habt ihr ja die zündende Idee.

Grüße Markus
 
Statt Textfeldname ID mach in HTML textfeldname[] drauss,
dann bekommst du als POST ein Array das du in PHP durchlaufen
kannst und einfach checkst ob der Inhalt leer ist bzw. der Array Index
existiert. Aber nicht vergessen $array[0] ist Textfeld 1.
 
Hi Nils,

danke dir für den Tipp. Hat angenommen, dass das nur bei Selectboxen geht.

Nun kommt aber noch ein weiteres Hindernis hinzu. Es gibt mehrer Textfelder sprich auch mehrere Arrys. 4 Textfelder die nebeneinander liegen und zusammengehören für die Mysql-Datenbank.

Weiß jetzt aber nicht wie ich das hinbekomme um die Daten so zu durchlaufen, dass eben die vier Felder zusammen in der Datenbank gespeichert werden. Wenn ich foreach nehme in einer Funktion dann wird zuerst Feld1 alles ausgegeben dann Feld2 usw. Sprich in der Datenbank gibt es tausende Einträge mit jeweils nur einem Wert statt der gewollten vier.

Foreach mit sich selbst verschachtelt ist mir dann noch eingefallen. Ist aber in meiner Ausführung auch nicht funktionstüchtig.

Grüße Markus
 
Heisst das jettz du hast pro Zeile 4 Textfelder (immer) und der user wählt dann nur die Anzahl der Zeilen die erscheinen?
 
Dann würde ich beim generieren der Zeilen einfach die Namen so vergeben, das jede Spalte einen Namen mit [] erhälrt. Sprich du hättest später vier unabhängige Arrays. Dann durchläfust du das erste und sprichst mit dem aktuellen Key das passende Element der der anderen drei Arrays an.
Allerdings müsstest du dann vergleichen ob alle 4 Arrays die gleiche Anzahl der Elemente haben, da der user vielleicht mittendrin ein Feld leer gelassen hat.
Aber sollte eigentlich funktionieren.
 
Hi Ben,

kannst du mir dazu vielleicht kurz einen Code-Schnipsel präsentieren, habe momentan überhaupt keine Ahnung wie ich das anstellen soll.

Grüße Markus
 
also um das Formular zu generieren gehen wir von aus der User hat 5 Zeilen gewählt. Der Wert steht in der Variablen $a:

PHP:
echo "<form..."><br />\n";
echo "<table>\n";
for($i=0; $i < $a; $i++)
{
 echo "<tr><td><input type=\"text\" name=\"feld1[]\" />"<input type=\"text\" name=\"feld2[]\" />"<input type=\"text\" name=\"feld3[]\" />"<input type=\"text\" name=\"feld4[]\" /></td></tr>\n";
}
echo "</table>\n</form>";

nur mal so grob.
dann das script welches das ganze ausliest, mal nur mit der einfachen überprüfung ob die Anzahl in allen 4 Arrays gleich ist, wg. evtl fehlender Eingaben
PHP:
if( (count($_POST['feld1'])+count+($_POST['feld1'])+count($_POST['feld1'])+count($_POST['feld1'])) / 4 != count($_POST['feld1']) )
    die("Fehlende Eingabe");

//Erster Teil des SQL-Statemens
$sql = "INSERT INTO TABLE (feld1, feld2, feld3, feld 4) VALUES ";
while( list($key,$value) = each($_POST['feld1'] )
{
 //Values fortsetzen, $value = Wert aus Feld eins,
 //$key verwenden um $value aus den anderen 3 Feldern auszulesen
 $sql .= "('$value', '".$_POST['feld2'][$key].','".$_POST['feld3'][$key]."','".$_POST['feld4'][$key]."'),";
}

//Überflüssiges , am ende abschneiden
$sql = substr($sql, 0, strlen($sql)-1);

if( ! mysql_query($sql) )
  die("Error with query: $sql<br>".mysql_error());
else
  die("erfolgreich eingetragen");

so grob in der Art und ugnetestet
 
Zurück