• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

For-Schleife

Status
Für weitere Antworten geschlossen.

r-ene

Neues Mitglied
PHP:
$mail1 = $_POST['mail1']
$mail2 = $_POST['mail2']
$mail3 = $_POST['mail3']
...

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;
    }
}

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"]);
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...
 
Aber ich kann doch mein Formularfeld nicht so nennen:
HTML:
<input type="text" name="mail[0]">
 
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]"]));
  }
?>

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...
 
Zuletzt bearbeitet:
Erstens müsste deine Zuweisung so aussehen:
PHP:
$mail[$i] = $_POST['mail'][$i];
Und zweitens ist sie unnötig:
PHP:
$mail = $_POST['mail'];

EDIT:
Und drittens hast du nur fünf Werte, die Schleife liefe aber sechs mal durch: 0 1 2 3 4 5 ;)
 
Erstens müsste deine Zuweisung so aussehen:
PHP:
$mail[$i] = $_POST['mail'][$i];
Und zweitens ist sie unnötig:
PHP:
$mail = $_POST['mail'];

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']));
Wie kann ich das noch erreichen, dass das bei Arrays funktioniert?
 
PHP:
$mail = array_map(create_function("\$a", "return stripslashes(htmlentities(\$a));"), $_POST['mail']);
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!";
          	  }
          }
      }
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.";
 
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."
 
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);
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!";
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben