daniel: array aus formular mit hidden-field übergeben

hi forumler,

ich häng hier mal wieder fest...

ich will den inhalt aus einem formular eine mail versenden.
die empfänger werden aus einer DB ausgelesen und angezeigt.
per checkbox kann man wählen, an wen das formular (bzw. die mail) gesendet werden soll.

aus den namen bilde ich auf der formularseite in array, das klappt soweit. ich kann es ausgeben, alles so wie es sein soll.
auf einer folgeseite soll das array(enhält die mailadressen) dann ausgelesen werden und in das TO:-feld eingesetzt werden.

dieses array wollte ich per
<input type="hidden" name="empf" value="<? echo $empf; ?>">
an die folge-seite übergeben.

nun will aber dieses array ums verr... nicht da ankommen.
echo $empf; ergibt einfach nur "Array" , was ja auch stimmt.

echo $empf[0]."<br>";echo $empf[1]."<br>";echo $empf[2]."<br>";...
ergibt dann:
A
r
r
.
.
.

wo bitte sind denn nun meine werte geblieben????
die verschwinden doch nicht einfach ???
werd hier gleich verrückt....!!

hoffe, ihr könnt mir helfen,
grüße
daniel

  1. dieses array wollte ich per
    <input type="hidden" name="empf" value="<? echo $empf; ?>">
    an die folge-seite übergeben.

    nun will aber dieses array ums verr... nicht da ankommen.
    echo $empf; ergibt einfach nur "Array" , was ja auch stimmt.

    echo $empf[0]."<br>";echo $empf[1]."<br>";echo $empf[2]."<br>";...
    ergibt dann:
    A
    r
    r

    wo bitte sind denn nun meine werte geblieben????

    Die sind wohl irgendwo in Deinem Code verlustig gegangen, $empf wurde jedenfalls mit dem Text "Array" überschrieben. Ohne Kenntniss Deines Codes kann Dir da aber keiner weiterhelfen. Sicher bringt Dich aber auch großflächiges Ausstreuen von var_dump($empf) im Code an die Stelle, an der $empf sich neuen Welten zuwendet.

    Um die Werte dann später, wenn $empf den gewünschten Inhalt auch bei sich behält, auszugeben, solltest Du besser etwas in der Richtung implode() benutzen. Achte aber darauf, daß Deine Daten nicht das Trennzeichen verwenden.

    Alternativ kannst Du auch die Einträge des Feldes als einzelne <input>-Elemente ausgeben:

    foreach ($empf as $empfaenger)
        echo "<input type="hidden" name="empf[]" value="".htmlentities($empfaenger)."">";

    Dadurch, daß der Elementname mit [] endet, sammelt PHP alle Werte automatisch wieder in einem Feld $empf.
    htmlentities() ist nötig, um die Daten HTML-gerecht zu maskieren (auch, wenn Du statt der Schleife obige join()-Methode benutzt oder sonst irgendwie die Daten ausgibst).

    Gruß,
      soenk.e

  2. Hi,

    <input type="hidden" name="empf" value="<? echo $empf; ?>">

    einer der schwerwiegendsten Mängel von PHP ist, bei multiplen Übergabeparametern (wie sie bei einem Array notwendig sind - im Prinzip können ausschließlich Strings übergeben werden) eine Syntax vorzuschreiben. Noch schwerwiegender ist, dass diese Syntax zudem illegal ist, man also im Grunde überhaupt keine multiplen Parameter verwenden _darf_. Wenn Du das ignorieren möchtest, steht die Lösung in http://www.dclp-faq.de/q-formular-select-multiple.html

    echo $empf[0]."<br>";echo $empf[1]."<br>";echo $empf[2]."<br>";...

    echo join("<br>", $empf);

    Cheatah

  3. Moin!

    dieses array wollte ich per
    <input type="hidden" name="empf" value="<? echo $empf; ?>">
    an die folge-seite übergeben.

    Wenn man in PHP ein Array hat, und dieses Array einfach mit echo $arrayvariable ausgibt, wird der Text "Array" ausgegeben. Im Browser kommt dann diese Zeile an:

    <input type="hidden" name="empf" value="Array">

    nun will aber dieses array ums verr... nicht da ankommen.
    echo $empf; ergibt einfach nur "Array" , was ja auch stimmt.

    Logischerweise kriegst du in der Folgeseite als Formularwert unter anderem "empf=Array", was PHP verarbeitet und die Variable $empf mit dem String "Array" belegt.

    Den Unterschied zwischen vorher und nachher bemerkst du nicht, wenn du mit echo arbeitest. var_dump($variable) wäre besser geeignet.

    echo $empf[0]."<br>";echo $empf[1]."<br>";echo $empf[2]."<br>";...
    ergibt dann:
    A
    r
    r
    .
    .
    .

    Und hier greifst du mit $empf[x] auf die einzelnen Zeichen des Strings zu. Praktisch, aber für deine Aufgabe eher ungeeignet.

    wo bitte sind denn nun meine werte geblieben????
    die verschwinden doch nicht einfach ???

    Doch, weil der Browser eben keinen blassen Schimmer von PHP und dessen Variablen hat.

    Wenn du Arrays übergeben willst, mußt du daraus entweder einen ganz langen String machen (implode() und explode() hilft), oder eben mehrere versteckte Felder anlegen, die jedes einzelne Element übertragen.

    - Sven Rautenberg