Formular Feldeingabe prüfen ob ein bestimmter Wert vorhanden ist

Hab hier gerade noch ein Problem,

wenn ich nur gmx.de erlauben möchte klappt es,
wie kann ich es machen das noch zum Beispiel web.de und arcor.de erlaubt werden?

Wenn ich es mit weiteren if-Schleifen mache wird es nicht als richtig erkannt.

PHP:
   $check0=trim($_POST['email']);                
   $check = substr($check0, -6);                
   $check_small=strtolower($check);             


   if($check_small!="gmx.de")
   {
   $error = true;
      $errorFelder[email] = true;
   }
 
Hi,

das könnte man so lösen:
PHP:
$hoster = array(
	'gmx.de',
	'arcor.de',
	'web.de'
);
$mail = 'foobar@gmx.de';
$mailHost = substr($mail, strpos($mail,'@') + 1);
if (!in_array($mailHost, $hoster)) {
	$error = true;
	$errorFelder['email'] = true;
}

//edit:
Das kann bei dir garnicht funktionieren, da du alles nach dem @ brauchst. Du holst aber immer die letzten 6 Zeichen.
Mit substr($mail, strpos($mail,'@') + 1); bekommst du das gewünschte Ergebnis.
 
Zuletzt bearbeitet:
Ah, hab gerade gesehen das du $check_small gegen $email getauscht hast.
Aber so geht es bei mir auch nicht.
$email soll doch $_POST['email'] sein, oder?
 
Hi Loomis,

wenn ich es so machen wie du es neu editierst hast werden alle Adressen akzeptiert.
Wenn ich z.B. @foo.de mach oder @test.de werden diese auch akzeptiert.
Es wird sogar auch nicht als falsch markiert wenn ich kein "@" eingebe.
 
Warum nimmst du keinen regulären Ausdruck zum Prüfen der Eingabe?

Man könnte dein Problem (Email-Check + Host auslesen) so lösen:

PHP:
<?php
$email = "test@foo.de";

if (!preg_match("/^.+@(.+\\..+$)/", $email, $matches))
{
    echo "Die eingegebene Emailadresse ist nicht korrekt!<br>";
}  

if(isset($matches[1]) && $matches[1] === "gmx.de")
{
    echo "Alles OK!";
}
else
{
    echo "Falscher Host-Teil in der Email-Adresse";
}
?>

Da du ja ohnehin schon mit ereg (btw: diese Funktion ist in neuen PHP-Versionen als deprecated markiert) arbeitest, ist es auch nicht schwer, den zusätzlichen Host-Check zu adaptieren.
 
Hi,

ich arbeite nicht mehr mit ereg.
Das war ganz am Anfang als ich angefangen hatte.

Wenn es so gehen würde wie ich es angefangen hatte wäre es super.
 
Dann probier es doch mal mit meiner Version. Statt $email müsstest du natürlich den Formular-Wert übernehmen. War auch nur zum Testen gedacht :-)

Meine Version hat den Vorteil, du brauchst keine weiteren Funktionsaufrufe mehr. Wie du sehen kannst, habe ich deinen regex im ersten Post heran gezogen, auf preg_match angepasst und das besondere ist nun die Klammer. Diese bewirkt, das alles, was nach dem @ kommt in ein match gepackt wird. Dieses Match bekommt im indizierten Array $match (dritter Parameter von preg_match) die Stelle 1 zu gewiesen. Diese kann man dann nach belieben prüfen.
 
Kleine Änderung.

PHP:
$mail = $_POST['email'];
trim($mail);
strtolower($mail);
if (! filter_var($mail, FILTER_VALIDATE_EMAIL)) {
	print 'Keine valide Email-Adresse.';
}
else {
	// Erlaubte Email Hoster
	$hoster = array(
		'gmx.de',
		'arcor.de',
		'web.de'
	);
	$mailHost = substr($mail, strpos($mail, '@') + 1);
	if (! in_array($mailHost, $hoster)) {
		print 'Hoster ist nicht erlaubt.';
	}
	else {
		print 'Alles Ok.';
	}
}

Das wars dann auch von mir, das ist sowas von Basiswissen. Lern doch erstmal die Grundlagen.
 
Zuletzt bearbeitet:
Zurück