Mehrfachauswahl Dropdownmenü Email
Rednose
- php
0 Der Martin
Hallo zusammen,
habe folgendes Problem. Ich will ein vorhandenes Formular etwas modifizieren. Schon lange recherchiert, aber für meinen Zweck nichts gefunden oder ich habe es nicht verstanden.
In meinem Formular, dessen Eingaben über ein E-Mail geschickt werden sollen, soll nun eine Mehrfachauswahl vorkommen.
<select name="namen" size="5" multiple>
<option value="Herbert">Herbert</option>
<option value="Manfred">Manfred</option>
<option value="Knut">Knut</option>
<option value="Karl">Karl</option>
<option value="Hans">Hans</option>
</select>
Im E-Mail steht dann u.a.
Der/die ausgewählte/n Name/n:
$namen
Es klappt aber nicht, im E-Mail kommt nur der "Hans", auch wenn ich auch noch andere Namen markiert habe.
Was muss ich in diesem Fall tun? Muss man unbedingt Javascript nehmen?
Momentan klappt es auch mit dem Pflichtfeld mit eingebauter Fehlermeldung, falls nicht ausgefüllt, aber ob es mit Mehrfachauswahl noch klappt, weiß ich nicht. Sicherheitshalber poste ich das gleich mit.
// Prüfung Namen
if(empty($_POST['namen'])){
$success = "nein";
$msg = $msg .$lang['namen_fehlerm'] ."<br>";
}
Unter $lang bzw. in der lang_de.php findet man die ausgeschriebene Fehlermeldung, die in einem bestimmten Bereich eingesetzt wird.
Kann mir jemand helfen?
Schöne Grüße
Rednose
Hallo,
In meinem Formular, dessen Eingaben über ein E-Mail geschickt werden sollen, soll nun eine Mehrfachauswahl vorkommen.
lass mich raten: Die serverseitige Aufbereitung geschieht mit PHP? Die Information fehlte in deiner Erklärung, das erscheint mir aus dem Kontext aber logisch.
<select name="namen" size="5" multiple>
<option value="Herbert">Herbert</option>
<option value="Manfred">Manfred</option>
<option value="Knut">Knut</option>
<option value="Karl">Karl</option>
<option value="Hans">Hans</option>
</select>
>
> Es klappt aber nicht, im E-Mail kommt nur der "Hans", auch wenn ich auch noch andere Namen markiert habe.
Wenn du mit PHP mehrere gleichnamige URL-Parameter erwartest, musst du dem Namen Index-Klammern anfügen, also name="namen[]". Dann bekommst du diesen Parameter als Array mit 0..n Einträgen (ein Arrayeintrag für jedes selektierte Dropdown-Element). Andernfalls enthält die PHP-Variable nur den letzten übergebenen Parameter dieser Familie.
> Was muss ich in diesem Fall tun? Muss man unbedingt Javascript nehmen?
Was willst du damit erreichen?
> Momentan klappt es auch mit dem Pflichtfeld mit eingebauter Fehlermeldung, falls nicht ausgefüllt, aber ob es mit Mehrfachauswahl noch klappt, weiß ich nicht. Sicherheitshalber poste ich das gleich mit.
>
> if(empty($\_POST['namen']))
Das würde auch bei der Mehrfchauswahl noch funktionieren. Ein leeres Array (also ein Array mit 0 Elementen) gilt als "empty".
Ciao,
Martin
--
Die letzten Worte des Hardware-Bastlers:
Das Netzkabel lass ich wegen der Erdung lieber dran.
Hallo und danke schon mal,
Wenn du mit PHP mehrere gleichnamige URL-Parameter erwartest, musst du dem Namen Index-Klammern anfügen, also name="namen[]". Dann bekommst du diesen Parameter als Array mit 0..n Einträgen (ein Arrayeintrag für jedes selektierte Dropdown-Element). Andernfalls enthält die PHP-Variable nur den letzten übergebenen Parameter dieser Familie.
Habe ich probiert, nur kommt jetzt immer nur der Name, der als letztes ausgewählt wurde. D.h. wähle ich Herbert und Knut, dann sendet er nur:
Ausgewählte/r Name/n:
Knut
Ich hätte aber gerne, dass da
Herbert Knut
steht.
Idealerweise vielleicht auch noch mit einem Komma dazwischen, aber wenn das zu kompliziert ist, lasse ich es weg.
Was muss ich in diesem Fall tun? Muss man unbedingt Javascript nehmen?
Was willst du damit erreichen?
Na, ich habe das öfters bei meinen Recherchen gesehen, deswegen frage ich. Mir wäre eine Lösung nur mit php und html am liebsten.
Momentan klappt es auch mit dem Pflichtfeld mit eingebauter Fehlermeldung, falls nicht ausgefüllt, aber ob es mit Mehrfachauswahl noch klappt, weiß ich nicht. Sicherheitshalber poste ich das gleich mit.
if(empty($_POST['namen']))
Das würde auch bei der Mehrfchauswahl noch funktionieren. Ein leeres Array (also ein Array mit 0 Elementen) gilt als "empty".
Ja, nach der Einfügung der Klammer ging es noch.
Bitte hilf mir weiterhin.
Viele Grüße
Rednose
Hallo nochmal,
ach ja, ich habe jetzt wirklich nur die Klammern eingefügt und sonst nix! Das war doch gewiss nicht alles, oder? Ich kenne mich mit arrays leider nicht aus. Was muss ich noch schreiben?
Hallo
ach ja, ich habe jetzt wirklich nur die Klammern eingefügt und sonst nix! Das war doch gewiss nicht alles, oder? Ich kenne mich mit arrays leider nicht aus. Was muss ich noch schreiben?
Du musst das Array auf der Verarbeitungsseite auch auswerten. Du solltest erstens prüfen, ob die Werte dem entsprechen, was du erwartest. Zweitens, um das Array in eine Zeichenkette mit einem bestimmten Trenner zu überführen, kannst du join benutzen. Diese Funktion wandelt ein Array von Werten in einen String mit einem festgelegten Trennzeichen, z.B. auch ", ", womit du deine kommagetrennte Liste der Namen erhältst.
Was die Prüfung betrifft musst du noch mit ein paar Infos rausrücken. Sind die Namen feststehend, oder anders gefragt, sind sie von vornherein bekannt?
Tschö, Auge
Hallo allerseits,
habe es über Umwege rausgefunden!
Das muss man alles machen im Formular:
1. ganz am Anfang die Abfrage
$namen = $_REQUEST['namen'];
üblicherweise $_POST, in diesem Fall aber $_REQUEST
2. am Formularfeld
<select name="namen[]" size="5" multiple>
3. Beim E-Mail-Versand an Absender und Empfänger:
Wer ist dabei: ".implode(", ",$namen)."
Das Komma ", " macht die Kommas zwischen den Namen.
Ich versteh' nicht, dass das im ganzen Internet nirgendwo so kurz, bündig und verständlich zu finden war!
Viele Grüße
Rednose
P.S. Die Pflichtfeldabfrage musste nicht geändert werden, obwohl es immer noch POST darin heißt.
Hi,
Das muss man alles machen im Formular:
- ganz am Anfang die Abfrage
$namen = $_REQUEST['namen'];
das ist Unsinn. Sowohl das Umkopieren, als auch der Zugriff auf $_REQUEST[] anstatt $_GET[] oder $_POST[].
<select name="namen[]" size="5" multiple>
Das hatte ich dir ja schon erklärt.
- Beim E-Mail-Versand an Absender und Empfänger:
Wer ist dabei: ".implode(", ",$namen)."
Auch klar - aber sauberer wäre es, *hier* auf $_POST['namen'] zuzugreifen, anstatt auf eine lokale Kopie.
Ich versteh' nicht, dass das im ganzen Internet nirgendwo so kurz, bündig und verständlich zu finden war!
Wahrscheinlich deshalb, weil das mit rudimentären Grundkenntnissen von PHP auch leicht zu erschließen wäre?
Ciao,
Martin