[PHP]$mail1 = $_POST[‚mail1‘]
$mail2 = $_POST[‚mail2‘]
$mail3 = $_POST[‚mail3‘]
…[/PHP]
Wie kann man das in einer for-Schleife schreiben?
[PHP]$mail1 = $_POST[‚mail1‘]
$mail2 = $_POST[‚mail2‘]
$mail3 = $_POST[‚mail3‘]
…[/PHP]
Wie kann man das in einer for-Schleife schreiben?
for?
[php]// so viele variablen kann es geben also 0 - 19
$max = 20;
for($i=0; $i < $max; $i++)
{
$name = „mail“.$i;
if(isset($$name))
{
echo $$name;
}
}[/php]
ABER warum kein array? xD sowas ist doch ne echt dämliche lösung oder? ^^
Mit Array:
[PHP]
$mails = array();
for ($i = 1; isset($_POST[„mail$i“]); ++$i)
array_push($mails, $_POST[„mail$i“]);
[/PHP]
Für Arrays sieh auch die Doku.
Naja, ich würde es ja gerne mit Array machen.
Es ist so, dass das für eine Weiterempfehlungsdatei ist. D.h. man kann bis zu 5 E-Mail Adressen eingeben und schickt dann das Formular ab. Mann kann die Felder ja nicht mail[1], mail[2], usw. nennen…
Genau genommen kann man das
Aber ich kann doch mein Formularfeld nicht so nennen:
[HTML][/HTML]
Doch kannst du.
Du kannst es auch einfach mail nennen, dann musst du dir um dir Nummerierung auch keine Gedanken mehr machen.
Gruß
Voodoo
Und wieso klappt das dann bei mir nicht, wenn ich diese Schleife ablaufen lasse:
[PHP]<?php
for ($i=0; $i<=5; $i++)
{
$mail[$i] = stripslashes(htmlentities($_POST["mail[$i]"]));
}
?>[/PHP]
Außerdem hab ich immer gedacht bzw. mal gelesen, dass eckige Klammern in Feldnamen nicht zulässig sind. Man darf da doch nur Buchstaben, Zahlen und Unterstriche benutzen…
Erstens müsste deine Zuweisung so aussehen:
[php]$mail[$i] = $_POST[‚mail‘][$i];[/php]Und zweitens ist sie unnötig:
[php]$mail = $_POST[‚mail‘];[/php]
EDIT:
Und drittens hast du nur fünf Werte, die Schleife liefe aber sechs mal durch: 0 1 2 3 4 5
Hehe, ja da ist noch eine Mail Adresse dazu gekommen. Das war schon so gedacht.
Das mit den eckigen Klammern funktioniert ja wirklich…
Danke!
Nur das funktioniert nicht:
[php]$mail = stripslashes(htmlentities($_POST[‚mail‘]));[/php]
Wie kann ich das noch erreichen, dass das bei Arrays funktioniert?
[php]$mail = array_map(create_function(„$a“, „return stripslashes(htmlentities($a));“), $_POST[‚mail‘]);[/php]Alternativ die beiden Funktionen auf jedes Array-Element anwenden.
Okay danke… find ich toll wie einem geholfen wird
Meine letzte Frage noch für heute:
[PHP] for ($i=1; $i<=4; $i++)
{
for ($j=$i+1; $j<=5; $j++)
{
if ($mail[$i] == $mail[$j] && !empty($mail[$i]))
{
$fehler = „Mindestens zwei E-Mail Adressen deiner Freunde sind identisch!“;
}
}
}[/PHP]
Hier wird überprüft, ob es identische Mail Adressen gibt.
Ich möchte es so machen, dass sobald identische gefunden werden, die beiden for-Schleifen abgebrochen werden.
Soll ich das mit einem Zähler machen?
ähm…
[php]if( $mail != array_unique($mail) )
echo „Mindestens zwei der Adressen sind identisch.“;[/php]
So einfach… sprachlos
Kenn mich mit Arrays noch nicht so gut aus.
…merkt man ja…
Gute Nacht!
Hm klappt ja doch nicht.
Wenn nämlich keine oder nur wenige E-Mail Adressen eingegeben werden, kommt trotzdem die Meldung „Mindestens zwei der Adressen sind identisch.“
Ist mir dann auch noch eingefallen.
Aber warum ignorierst du doppelte Adressen nicht einfach:
[php]$mail = array_unique($mail);[/php]
Dann werden die doppelten Einträge einfach gelöscht und du kannst das Array weiterverarbeiten.
Jo klar, natürlich kann ich das auch so lösen, dass einfach nur eine Mail verschickt wird, wenn 5 mal der gleiche Empfänger eingegeben wurde. Aber ich möchte, dass die Leute es checken, dass sie den Empfänger nicht fünfmal eingeben müssen. ^^
Hab es jetzt so gelöst:
[php] $mailohne = array_diff($mail, array(‚‘));
if($mailohne != array_unique($mailohne)) $fehler = „Mindestens zwei der E-Mail Adressen sind identisch!“;[/php]