Zusammengehörende Input-Felder in Formular

Hardwarejoe

Angesehenes Mitglied
Hi zusammen,

ich hab ein Affenformular, das per post die Daten per Email versendet. Im Formular hab ich eine Tabelle, in der sich mehrere gleichnamige Inputfelder nebeneinander und untereinander befinden:

<input type="text" value="" name="Menge" ><input type="text" value="" name="Bezeichnung"/>
<input type="text" value="" name="Menge" ><input type="text" value="" name="Bezeichnung"/>
<input type="text" value="" name="Menge" ><input type="text" value="" name="Bezeichnung"/>
usw....

Hab mal ein Bild hochgeladen, das sieht man es besser: http://img27.imageshack.us/img27/7664/dda9.jpg

Das Problem bei der ankommenden Email ist jetzt, das die Werte immer untereinander ankommen, z.B.

Menge: 2
Menge: 3
Menge: 5
Menge: 6
Bezeichnung: Katzen
Bezeichnung: Hunde
Bezeichnung: Maus
Bezeichnung: Pferd

Wie bekomme ich die Felder, die in einer Zeile stehen als zusammengehörige Ausgabe?
2 Katzen
3 Hunde usw.

Die Verarbeitung des Formulars erfolgt ganz einfach über:
mail($strEmpfaenger, $strSubject, $strMailtext, "Content-Type: text/plain; charset=UTF-8\nFrom: ".$strFrom)

Kann mir jemand weiterhelfen, gerne auch gegen Entlohnung!!!
 
normal sollten sich gleichnamige felder überschreiben, so dass du nur den letzten wert erhältst. oder nutzt du dafür kein php?

mach das als array: CODE <input type="text" value="" name="Menge[1]" ><input type="text" value="" name="Bezeichnung[1]"/>
<input type="text" value="" name="Menge[2]" ><input type="text" value="" name="Bezeichnung[2]"/>
<input type="text" value="" name="Menge[3]" ><input type="text" value="" name="Bezeichnung[3]"/>
...



im auswertenden script mal mit print_r($_POST) schauen, was da übermittelt wird und dementsprechend auswerten und zuordnen.
 
Da kommt nur

Array
(
)

Bitte Nachsicht - bin voll der PHP Noob...das sind für mich alles böhmische Dörfer
unsure.gif
 
Hi PH, danke für die Anregung. Das mit dem Array leuchtet mir ein wenn ich ein Value vorgegeben habe. Das ist bei meinen Input-Feldern aber ja nicht der Fall. Da weiß ich einfach nicht wie man das dann in der richtigen Reihenfolge ausgibt.

Hab schon mal geschafft, das
Menge 1 Menge 2 Menge 3 Menge 4
Beschreibung 1 Beschreibung 2 Beschreibung 3 Beschreibung 4
rauskommt.

Ich will aber
Menge 1 Beschreibung 1
Menge 2 Beschreibung 2
Menge 3 Beschreibung 3
da hängt es noch bei mir. Das krieg ich nicht gebacken...


Hab die Felder auch gruppiert:
<input name="Menge[1]" type="text" /><input name="Beschreibung[1]" type="text" />
<input name="Menge[2]" type="text" /><input name="Beschreibung[2]" type="text" />
usw.

Mein Verarbeitungs-Code sieht jedenfalls so aus:
------------------------------------------------

foreach( array( "\n", "\r", "%0A" ) as $ic ){ if( strpos(
$strEmpfaenger1, $ic ) !== false ){ die( "eMail-Injection." ); } }


if($_POST)
{
$strMailtext = "\n";
while(list($strName,$value) = each($_POST))
{
if(is_array($value))
{
foreach($value as $value_array)
{
$strMailtext .= $strName.$strDelimiter.$value_array."";
}
}
else
.....
mail($strEmpfaenger, $strSubject, $strMailtext, "Content-Type: text/plain; charset=UTF-8\nFrom: ".$strFrom)
------------------------------------------

In das foreach müssen jetzt die Menge und Beschreibung noch irgendwie sortiert rein?
 
äh - wie wärs denn mit so etwas

CODE $iterationen=count($bezeichnung);
for($x=0;$x<$iterationen;$x++)
{
$strMailtext .= $bezeichnung[$x].$strDelimiter.$menge[$x]."\n";
}
...
mail($strEmpfaenger, $strSubject, $strMailtext, "Content-Type: text/plain; charset=UTF-8\nFrom: ".$strFrom)

 
QUOTE (PH @ So 3.11.2013, 13:28)äh - wie wärs denn mit so etwas


CODE $iterationen=count($bezeichnung);
for($x=0;$x<$iterationen;$x++)
 {
 $strMailtext .= $bezeichnung[$x].$strDelimiter.$menge[$x]."\n";
 }
...
mail($strEmpfaenger, $strSubject, $strMailtext, "Content-Type: text/plain; charset=UTF-8\nFrom: ".$strFrom)



@ph
das wirft so warnings aus ;-)

@hardwarejoe
im grundsatz ist das, was ph schieb nicht verkehrt. die schlüssel (keys) der arrays bilden paare und gehören bei gleichem schlüssel zusammen.

generell solltest du erstmal alle usereingaben auf plausibilität prüfen, um injections und Spam zu vermeiden.

bei deinen array-paaren musst du zudem prüfen, ob beide werte gesetzt sind. "menge = 5 von nichts" hilft dir ja nicht weiter. isset() in der schleife ist dein freund. dann sind auch die warnings weg.

für den mailversand würde ich auf mail() verzichten, stattdessen ein paket wie phpmailer benutzen und über smtp versenden. die header stimmen und du könntest die bestellung schön per html formatieren.
 
QUOTE (wurzel @ So 3.11.2013, 14:00)
QUOTE (PH @ So 3.11.2013, 13:28)äh - wie wärs denn mit so etwas


CODE $iterationen=count($bezeichnung);
for($x=0;$x<$iterationen;$x++)
 {
 $strMailtext .= $bezeichnung[$x].$strDelimiter.$menge[$x]."\n";
 }
...
mail($strEmpfaenger, $strSubject, $strMailtext, "Content-Type: text/plain; charset=UTF-8\nFrom: ".$strFrom)



@ph
das wirft so warnings aus ;-)

@hardwarejoe
im grundsatz ist das, was ph schieb nicht verkehrt. die schlüssel (keys) der arrays bilden paare und gehören bei gleichem schlüssel zusammen.

generell solltest du erstmal alle usereingaben auf plausibilität prüfen, um injections und Spam zu vermeiden.

bei deinen array-paaren musst du zudem prüfen, ob beide werte gesetzt sind. "menge = 5 von nichts" hilft dir ja nicht weiter. isset() in der schleife ist dein freund. dann sind auch die warnings weg.

für den mailversand würde ich auf mail() verzichten, stattdessen ein paket wie phpmailer benutzen und über smtp versenden. die header stimmen und du könntest die bestellung schön per html formatieren.

es würde ja keine Warnings geben, wenn der Rest korrekt wäre...
wink.gif


btr. phpMailer: ich finde das PEAR mail package viel handlicher.
 
Zurück
Oben