n Formulare mit einem klick abschicken

tih

Grünschnabel
Hi @ all.
Nach stundenlangen googlen fag ich hier mal nach.

Mein Vorhaben:
Ich gebe alle Einträge einer SQL-Tabelle in Formularfelder aus, um diese alle in einem Zug zu editieren.

Jeder Eintrag besteht aus ID, feld1, feld2, feld3. Für jeden Eintrag generiert PHP mir ein Formular. Jedes Formular hat einen Namen:
PHP:
echo " <form action=\"".$PHP_SELF."\" method=\"POST\" name=\"form".$i."\"> ";

Nun möchte ich alle Formulare gleichzeitig abschicken:
PHP:
//Button beginnt hier
echo <<<END
	<input type="button" value="&Auml;nderungen &uuml;bernehmen"
	onClick="
END;
         $j=1;
         $anz=$row->anzahl;
         do
         	{
                 echo "document.form".$j.".submit();";
                 $j++;
                 }
         while ($j<=$anz);
       	 echo "\">\n"; //Button endet
Hier weiß ich nicht weiter, den im Array $_POST steht dann nur noch der Letzte Eintrag der Tabelle...

Wie könnte man das lösen? Bin ich auf dem richtigen weg.
 
Warum schreibst du nicht alles in ein einziges Formtag? Wie ich sehe ist für alle Form's die 'action' und 'method' überall gleich!? dann brauchst du nur einen formnamen!

greets
 
Selektier einfach all deine Einträge und erstell ein Formular in
dem du dann per Schleife z.B. input-Felder erzeugst und diese mit den Werten füllst.
Wenn du es dann sendest, kannst du die Felder wieder in einer Schleife abarbeiten und in der Datenbank updaten.
 
...dann bräucht ich wiederum für jedes Formular-Element einen anderen Namen.
Ich will ja alle Felder in der Datenbank updaten. Und die Anzahl der Einträge ist nicht statisch.
 
Kannst ja mit der Schleife dynamisch Namen vergeben, für genau so viele Datensätze wie du in der DB hast.

Bsp: Du hast ne Tabelle mit vier Spalten wie du oben beschrieben hast...

PHP:
$result = mysql_query("select * from deine_tabelle");
$i=0;

while ($row = mysql_fetch_array($result))
{
  echo "<br>
           <input type='text' name='feld[$i][0]' value='$row[0]'>
           <input type='text' name='feld[$i][1]' value='$row[1]'>
           <input type='text' name='feld[$i][2]' value='$row[2]'>
           <input type='text' name='feld[$i][3]' value='$row[3]'>
          "; 
   $i++;
}

Damit vergibst du Namen nach dem Schema:
1. Datensatz: feld[0][0], feld[0][1], feld[0][2], feld[0][3]
2. Datensatz: feld[1][0], feld[1][1], feld[1][2], feld[1][3]

und diese Namen kannst du dann in ner simplen Schleife wieder ansprechen und die DB updaten.

Grüße
 
hmm... Also ich bekomms noch nicht so recht gebacken ;)
Das mit den Namen der Felder is jetzt klar.

Aber wie hol ich mir die Felder wieder aus dem globalen Array "$_POST" ?
$_POST[ 'feld[$i][1]'] usw. geht nicht für den query.
 
Also, leg erst mal noch ein hidden-feld an (name z.B. 'anzahl'), in welches du nach der while-Schleife den Wert von $i schreibst, um mitzusenden, wie viele Zeilen ausgegeben wurden.

So, für jedes Feld existiert nach dem Senden eine Variable, auf die du z.B. so

PHP:
$feld[0][0]
zugreifen kannst.

Und mit ner for-Schleife kannst du dann die Werte nacheinander ansprechen

PHP:
for ($i=0; $i < $anzahl+1; $i++)
{
      $id = $feld[$i][0];
      $feld1 = $feld[$i][1];
      $feld2 = $feld[$i][2];
      $feld3 = $feld[$i][3];
    
     //nachdem du sie so ausgelesen hast, machst du noch deinen Update, fertig
}
 
Das "hidden"-Feld hab ich schon.

Sämtliche Formulardaten werden mit POST an dieselbe Datei geschickt.
Vor dem Formuar kommt ne IF-Abfrage:
PHP:
if ($_POST['anz']) //wenn eine Anzahl 
	{
         for ($i=1; $i<=$_POST['anz']; $i++ ) //usw.
...wenn POST-Daten vorhanden sind will ich diese hier lesen.
Meine Frage ist WIE?

$feld[$i][0] usw... sind ja selbst Arrays (oder?)
Diese Arrays sind wiederum im Array $_POST gespeichert.
Normalerweise wäre der query ja ungefähr so:
PHP:
$sql=UPDATE meine_tabelle SET feld1='$_POST["feld1"]' WHERE ...

Aber
PHP:
//Hierher die Zähl-Schleife
$sql=UPDATE meine_tabelle SET feld1='$_POST["feld[$i][0]"]' WHERE ...
nicht.
 
Ich bin mir net sicher, ob ich dich richtig verstehe... aber WIE du die Daten nach dem Senden (mit POST) lesen kannst,
um sie in die Datenbank zu schreiben, hab ich doch oben erklärt. :confused:

Hab das halt nicht mit $_POST gemacht, sondern direkt über die Variablennamen.

PHP:
for ($i=0; $i < $anzahl+1; $i++)
{
      $id = $feld[$i][0];
      $feld_1 = $feld[$i][1];
      $feld_2 = $feld[$i][2];
      $feld_3 = $feld[$i][3];
    
      $sql = "Update `deine_Tabelle` SET feld1 = '$feld_1', 
              feld2 = '$feld_2', feld3 = '$feld_3'
              WHERE id = '$id' ";

      mysql_query("$sql");
}

So, diese Schleife aktualisiert dir nacheinander alle zuvor ausgelesenen Datensätze.
(Also ich mach es so und es funktioniert. Ob es die perfekte Lösung ist, weiß ich nicht)

Solltest du noch mehr Hilfe bei PHP brauchen, kann man dir im entsprechenden Forum aber wohl besser helfen, wie hier im JAVASCRIPT - Bereich. ;)
 

Neue Beiträge

Zurück