Gut, das ist eine Verkettung unglücklicher Ereignisse, aber dazu später.
Zunächst möchte ich dich einfach mal darauf hinweisen, dass echo
KEINE FUNKTION IST. Daher sind die Klammern dahinter sinnlose Tipparbeit, nervig zu lesen und absolut verwirrend, da bei einem fremden Leser der Eindruck erweckt wird, echo sei eine Funktion!
Dann sollte man sich eventuell überlegen, ob es wirklich von Nöten ist, dass Sprachkonstrukt echo dreimal hintereinander aufzurufen. Liegt natürlich bei dir, wenn du gerne viel tippst und viel Speicherplatz frei hast.
Dann kannst du nämlich gleich =>
PHP-Code:
echo "H";
echo "a";
echo "l";
echo "l";
echo "o";
echo " ";
echo "W";
echo "e";
echo "l";
echo "t";
verwenden!
Naja, aber nun zum eigentlichen Problem
Du gibst im <form ...> leider keine Method an. Es gibt zwei davon, POST und GET.
Eine davon ist Effektiv, die andere sau langsam, unsicher und hat eigentlich keine Daseinsberechtigung.
Dumm, wie einige Browser sind, benutzen als als Standart-method GET. Get war das
Teil ohne Daseinsberechtigung - nur zu Erinnerung
POST macht folgendes. Du gibst im form ja
action='formular_formular_speichern.php' an. Das heißt, dass nach dem betätigen des Submit-Buttons die Seite formular_Formular_speichern.php aufgerufen wird. In der Browseradressleiste wird also
http://deineDomain.de/formular_Formular_speichern.php aufgerufen.
Die Daten der ganzen Formularfelder werden (für den Frontend-Anwender nicht sichtbar) im hintergrund zum Server "ge
posted". Also, ein Hoch auf method="post".
So, wie löst method="get" das übergeben der Daten?
Bei method="get" werden die Daten leider nicht im Hintergrund schnell und effektiv übergeben, sondern im Link, der aufgerufen wird. Bei nur einem einzigen form-input Feld sähe das dann wie folgt aus:
http://deineDomain.de/formular_formular_speichern.php?name_Des_form_input_feldes=inhalt_des_form_input_feldes
Ist nicht all zu wild. Bei 10 Inputfeldern sieht das (unter der Verwendung von GET) schon wie folgt aus:
http://deineDomain.de/formular_formular_speichern.php?name_Des_form_input_feldes=inhalt_des_form_input_feldes&name_Des_form_input_feldes1=inhalt_des_form_input_feldes&name_Des_form_input_feldes2=inhalt_des_form_input_feldes&name_Des_form_input_feldes3=inhalt_des_form_input_feldes&name_Des_form_input_feldes1=inhalt_des_form_input_feldes&name_Des_form_input_feldes4=inhalt_des_form_input_feldes&name_Des_form_input_feldes5=inhalt_des_form_input_feldes&name_Des_form_input_feldes6=inhalt_des_form_input_feldes&name_Des_form_input_feldes1=inhalt_des_form_input_feldes&name_Des_form_input_feldes8=inhalt_des_form_input_feldes&name_Des_form_input_feldes9=inhalt_des_form_input_feldes
Tja, dass ist in der Tat schon etwas wilder. Und - jetzt stell dir das ganze mal for, wenn du 130 input Felder im Form hast.
Nicht so dolle, oder?
Es werden nämlich unterschiedliche Fehler auftreten können.
- Der Browser schafft es einfach nicht mehr, jene URL zu verarbeiten und macht einfach gar nichts. (Internetexplorer), andere Browser packen das Spielend (opera/firefox) [weil sie gut sind, oder nur 1024 Zeichen der URL übergeben], einige (mir fällt jetzt keiner ein), würden eine Fehlermeldung ausgeben.
- Der Server könnte ein Fehler ausspucken: Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.
Jetzt liegt das Problem also nicht mehr Clientseitig beim User, sondern beim Server.
- Können noch weitere, ungewollte Sachen auftreten.
Daher musst du im method="post" im <form ... > explizit mit angeben:
<form action='formular_formular_speichern.php' method="post">
Und nun, oh Gott sehe, dürften weder Browser noch Server meckern. Wobei der Browser auf einem alten Rechner damit schonmal nen paar Sekunden rechnen müsste, und ein Server kann ein limit über die maximale größe der an post übergebenen Werte haben. In der Regel sind das 2 MB -> also mehr als ausreichend für dein Formular!
^
Des weiteren ist zu empfehlen, in html keine Single Quotes (') zu benutzen, sondern stehts double quotes ("). Z.b. bei <form action=
"ziel.php
" method=
"post
">
Der Vollständigkeit halber hier mal das komplett abgeänderte "lauffähige" Beispiel:
PHP-Code:
echo <<<ausgabe
<table>
<form action="formular_formular_speichern.php" method="post">
<tr><td>Pos</td><td>Menge</td><td>Einheit</td><td>Art.-Nr.</td><td>Bezeichnung</td><td>Einzelpreis</td><td>Gesamtpreis</td></tr>
ausgabe;
for($i=1; $i <= $f; $i++)
echo <<<naja
<tr>
<td><input size="3" type="text" name="pos$i" value="$i"></td>
<td><input type="text" name="menge$i" size="7"></td>
<td><input type="text" name="einheit$i" size="7"></td>
<td><input type="text" name="artnr$i" size="30"></td>
<td><input type="text" name="bezeichnung$i" size="30"></td>
<td><input type="text" name="einzelpreis$i" size="5"></td>
<td><input type="text" name="gesamtpreis$i" size="5"></td></tr>
naja;
echo '<tr><td colspan="7"><input type="submit" value="speichern"></td></tr></table></form>';
Wobei dieses
sehr uneffektiv von dir gelöst wurde. Da du als Namen immer menge$i, einheit$i usw. verwendest. Viel besser und effektiver wäre es da, die Daten direkt in einem Array zusammenzufassen. Dann hast du später mehr Möglichkeiten, jene Daten effektiver abzufangen und weiterzuverarbeiten.