Zur Navigation

Liste von Email adressen prüfen vor Kontaktformular

vor dem Kontakktvormular absenden

1 win32nnetsky

Hallo
Ich habe ein Kontaktformular, welches einwandfrei funktioniert.
es prüft alle Felder auf Eingaben, Dateianhang usw.

Nun möchte ich eine incl.php dazu haben wo eine Liste von bereits vorhanden Emailadressen abgefragt wird.

Ziel wenn die Mailadresse nicht in dieser Liste ist kann man kein Kontaktformular absenden.

Mein email.php Auszug

require_once('func.inc.php');
$meldungen = "";

array_escape_and_strip($_POST);
array_unescape($_POST);

if(isset($_POST['action'])){

	switch($_POST['action']){

		case 'submit':
		
			if(empty($_POST['text'])){
				$meldungen .= "Bitte geben Sie eine Nachricht ein.<br>";
				$error = 1;


meine schon vorhandene "func.inc.php"

function check_email($email){

	return eregi("^[_a-z0-9-]([-_.]?[a-z0-9])*@[a-z0-9]([-_.]?[a-z0-9])+[.][a-z0-9]+$",$email);


}

Ich wollte hier eine if dazufügen (ich würde auch eine 2. include Datei z.B. mailcheck.php dazufügen)

Beispiel
if email max.muster@muster.de;

Bei vorhanden sein dieser Eintragung in das Kontaktformular wird eine mail versendet.

Bei maxi.muster@aol.com

wird keine Kontaktformular versendet da diese nicht in der Liste ist.

Ich hoffe habe verständlich mein Vorhaben erklärt.
Beste Gruß

17.01.2016 16:00 | geändert: 17.01.2016 16:02

2 win32nnetsky

Hallo
Nach weiterem belesen hab ich folgendes getestet

Ich habe die mailcheck.inc.php als include Option im Kontaktformular zugefügt.

Mit dieser Datei öffnet das Kontaktformular nun nicht mehr, es sollte ja prüfen ob die mailadresse max muster hier in der Liste ist?

Für Tips zum testen dankbar.
Gruß

<?php
$regex = "^" . $ez . "@" . $ez . "\." . $ez . "$";

 
function check_email_address($email) 

		
	if(empty($_POST['name'])){
	$meldungen .= "Sie sind nicht registriert.<br>";
	$error = 1;
				
	value="<?=$_POST['max.muster@muster.de']


        {
            
            return false;
        }


        }
?>

18.01.2016 10:01 | geändert: 18.01.2016 10:03

3 Jörg Kruse

Vorweg: eregi ist veraltet, steht in neueren PHP-Versionen nicht mehr zur Verfügung - stattdessen sollte preg_match() verwendet werden. Wenn du eine Whitelist an Emailadressen hast, benötigst du allerdings keine Validierung der Emailadressen mehr:

function check_email_whitelist($email) {
    // erlaubte Emailadressen:
    $white_list = array(
       'abc@example.com',
       'def@example.com',
       'ghi@example.de'
    );
    if (in_array($email, $white_list)) {
        return true;
    }
    return false;
}

18.01.2016 10:04 | geändert: 18.01.2016 10:10

4 Jörg Kruse

Nachtrag:

Wir haben uns beim Anworten grad überschnitten :-)

Nachdem du die Datei mit der Funktionsdefinition oben in der Datei inkludiert hast, kannst du die Funktion weiter unten z.B. folgendermaßen verwenden:

if (check_email_whitelist($email)) {
   echo 'Emailadresse OK';
   // ggf. weitere Überprüfungen
} else {
   echo 'Emailadresse nicht OK!';
   // Formular wird nicht versandt
}

Auf dieser Seite wird erläutert, wie Funktionen verwendet werden können:

http://www.php-kurs.com/funktionen-in-php.htm

Die if Struktur musst du natürlich noch in deine Überprüfungen einpassen...

18.01.2016 10:09 | geändert: 18.01.2016 10:18

5 win32nnetsky

Hallo
Jörg

Danke erst einmal für Deine Antwort.

Ich habe mich eventuell etwas schlecht ausgedrückt. Ich wollte aber auch nicht mit meinem ganzen Code nerven.

Auf meiner Seite kann eine Nachricht versendet werden, dazu klickt der Jenige auf den button "email" welches die Datei "email1.html" aufruft

Datei email1
<style type="text/css">
 <!--
body {
 background-color: #FFBF00;
}
-->
</style>
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Meine Seite Kontakt</title>
<body
</p>
<p align=center>  </p>
<p align=center style="font-size:18pt; font-family; line-height:100%; margin-top:0; margin-bottom:0; font-weight: bold;"> Ich freue mich, dass Sie mir eine Nachricht senden.
</p>
<p align=center>  </p>
<p align=center style="font-size:16pt; font-family; line-height:100%; margin-top:0; margin-bottom:0; font-weight;"> Tragen Sie bitte Ihre Nutzernummer ein, da Sie sonnst keine Rückantwort erhalten können.
Beispiel (NutzerXXXXX).
</p>

</p>
<form action="email1.php" method="post"> 
<div align="center"> Nutzer*: 
<input name="name" size="40"/> <br /> <br /> Betreff*:
<input name="betreff" size="40"/> <br /> <br /> E-mail (wird nicht übermittelt)*: 
<input name="email" size="40"/> <br /> <br />
</p>
<div align="center">
      <label for="text">Text*</label>
         <textarea id="text" name="text" cols="55" rows="8"></textarea> 	
   </div>
   <p align=center>  </p>
<p align=center style="line-height:100%;"><font face="Times New Roman,Times"><span style="font-size:12pt; line-height:100%; margin-top:0; margin-bottom:0;">* Pflichtfelder 
</p> 
<input name="submit" size="40" type="submit" value="absenden"/> </div>
</form>

<html>

<p align=center><img src="Bilder/Home.jpg" 
></p>

</html>

Hier sollte eine gültige Email eingegeben werden, die ich z.B. in der mailcheck.php Datei eingetragen habe.

Die Datei "email1.html" ruft dann die Versendedatei auf "email1.php"

Datei email1.php
<?php

date_default_timezone_set('Europe/Berlin');


$ihre_email 				= "meine.email.com@web.de";
$betreff_der_nachrichten 	= "Sie haben eine Nachricht.";



require_once('func.inc.php');

$meldungen = "";

array_escape_and_strip($_POST);
array_unescape($_POST);

if(isset($_POST['action'])){

	switch($_POST['action']){

		case 'submit':
		
			if(empty($_POST['text'])){
				$meldungen .= "Bitte geben Sie eine Nachricht ein.<br>";
				$error = 1;
			}
			
			if(empty($_POST['name'])){
				$meldungen .= "Bitte geben Sie Ihr Nutzernamen und Nutzernummer (Beispiel = NutzerXXXX) ein.<br>";
				$error = 1;
			}
			
			if(empty($_POST['betreff'])){
				$meldungen .= "Bitte geben Sie ein Betreff ein.<br>";
				$error = 1;
			}
			
			if(empty($_POST['email'])){
				$meldungen .= "Bitte geben Sie eine gültige E-mail-Adresse ein.<br>";
				$error = 1;
			}
			

			if($error) { break; }
			

			$message = "Sie haben eine Nachricht.:\n\n".
						"Kontaktdaten:\n".
						"Name: $_POST[name]\n".
						"Betreff: $_POST[betreff]\n".

												
						"------------------------- Nachricht -------------------------\n\n".
						"$_POST[text]\n\n".
						"------------------------- ENDE -------------------------\n\n".
						"Uhrzeit: ".date('d.m.Y - H:i:s');

			$x = @mail($ihre_email,addslashes($betreff_der_nachrichten),$message,"from: $ihre_email");
			
			

			if($x){
				$meldungen .= "Vielen Dank, Ich antworte Ihnen bald!";
				$_POST = array();
				break;
			}

			$meldungen .= "Aufgrund eines technischen Fehlers konnten wir Ihre Nachricht nicht empfangen.<br>".
						  "Bitte setzen Sie sich anderweitig mit uns in Verbindung.<br>Vielen Dank!";
			break;



	}


}
// ----- ENDE PHP Sourcecode ----- //
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Schreiben Sie mir, Danke</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #000000;
}
body {
	background-color: #FFBF00;
}
.Stil1 {
	color: #FF0000;
	font-weight: bold;
}
-->
</style></head>
<p align=center>  </p>
<p align=center style="font-size:14pt; line-height:100%; margin-top:0; margin-bottom:0;"> Bitte nehmen Sie sich Zeit und prüfen Sie Ihre Angaben.
Sonnst können Sie keine Antwort erhalten. </centre></sup></h1></strong></article>

</p>
<body>
<table width="500"  border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><form name="form1" method="post" action="<?=$_SERVER['PHP_SELF']?>">
<table width="500"  border="0" cellspacing="0" cellpadding="4">
  <tr>
    <td colspan="2"><span class="Stil1"><?=$meldungen?></span></td>
    </tr>
  <tr>
    <td width="36%"><strong>Nutzer*:</strong><br>
      <input name="name" type="text" size=40" id="name" value="<?=$_POST['name']?>"></td>
  </tr>    
  <tr>    
    <td width="64%"><strong>Ihr Betreff*:</strong><br>
      <input name="betreff" type="text" size=40" id="email" value="<?=$_POST['betreff']?>"></td>
  </tr>    
  <tr>    
    <td width="100%"><strong>Ihre E-mail-Adresse (wird nicht übermittelt)*:</strong><br>
      <input name="email" type="text" size=40" id="email" value="<?=$_POST['email']?>"></td>
  </tr>    
  <tr>       
    <td colspan="2"><strong>Schreibe mir eine Nachricht.*:</strong><br>
    <textarea name="text" cols="82" rows="10"  id="text"><?=$_POST['text']?></textarea>
    </td>
  </tr>
  <tr>
    <td colspan="2">* Pflichtfelder <br>
      <br>
      <input type="submit" name="submit" value="Absenden">
      <input name="action" type="hidden" id="action" value="submit"></td>
  </tr>
</table>
</form></td>
  </tr>
</table>
<p style="text-align:center"><a href="index.html"><img src="buttons/Zurueck.png" <alt="zurück zur Homepage" style="margin-right: 10px; target="_top"/>
</a>
</p>
</body>
</html>

In der Datei ist schon die Datei "func.inc.php" mit drin.

Datei "func.inc.php"

<?

function check_email($email){

	return eregi("^[_a-z0-9-]([-_.]?[a-z0-9])*@[a-z0-9]([-_.]?[a-z0-9])+[.][a-z0-9]+$",$email);


}

function array_escape_and_strip(&$array){

	if(!is_array($array)){
		return;
	}

	foreach($array AS $key => $inhalt){
		if(is_array($inhalt)){
			$array_return[$key] = array_escape_and_strip($inhalt);
		} else {

			if(get_magic_quotes_gpc()){
				$array_return[$key] = trim(strip_tags($inhalt));
				continue;
			}
			$array_return[$key] = trim(strip_tags(addslashes($inhalt)));
		}

	}
	$array = $array_return;

	return $array;

}
function array_unescape(&$array){

	if(!is_array($array)){
		return;
	}

	foreach($array AS $key => $inhalt){
		if(is_array($inhalt)){
			$array_return[$key] = array_escape_and_strip($inhalt);
		} else {
			$array_return[$key] = trim(stripslashes($inhalt));
		}

	}
	$array = $array_return;

	return $array;

}

?>

Wie geschrieben nur eingetragene Email-Adressen sollen diese Kontaktmöglichkeit nutzen
Gruß
Marko
ride safe ride free

19.01.2016 10:16 | geändert: 19.01.2016 10:34

6 Jörg Kruse

Die Funktionsdefinition von check_email_whitelist() in Beitrag 3 fügst du in die Datei func.inc.php ein.

Dann kannst du mithilfe dieser Funktion eine zusätzliche Prüfung in die email1.php einbauen:

            if(empty($_POST['email'])){
                $meldungen .= "Bitte geben Sie eine gültige E-mail-Adresse ein.<br>";
                $error = 1;
            } elseif(! check_email_whitelist($_POST['email'])) {
                $meldungen .= "Die Emailadresse befindet sich nicht in der Liste der zulässigen Emailadressen.<br>";
                $error = 1;
            }

Noch ein Hinweis, der mit der Fragestellung an sich nicht direkt was zu tun hat - was das HTML der Dateien anbelangt, würde ich empfehlen, zumindest ein korrektes Grundgerüst zu verwenden:

https://wiki.selfhtml.org/wiki/HTML/Dokumentstruktur_und_Aufbau

... andernfalls ist es eher Glückssache, wie die Browser eine Seite anzeigen und auch die Funktionalität der Seite kann sehr leicht unter einem defektem HTML leiden.

Falls du zum HTML-Aufbau Fragen hast, können wir das gerne (in einem gesonderten Thread) behandeln.

19.01.2016 13:32 | geändert: 19.01.2016 13:34

7 win32nnetsky

Hallo
Jörg

Danke für die Antwort, ich mache ein paar Tests.

Klasse der erste Test super, jetzt können die keine Nachrichten mehr senden
Das war das Ziel.

Ich mache noch ein paar Tests.

Besten Dank

Jetzt befasse ich mich mit Deinem Tip zum HTML

Gruß
Marko

22.01.2016 20:25 | geändert: 22.01.2016 20:43

8 win32nnetsky

Hallo Jörg

Ich habe es nun getestet und in mein Kontakformular eingebaut richtig.
Perfekt, ich habs nicht hinbekommen allein.

Besten Dank.

Habe mal gelesen Gerüst html body meta Hintergrundfarbe usw
Hab ich alles bei mir drin.

Gruß
Marko

23.01.2016 20:44

... 1 Jahr später ...

9 Marko

Hallo
Jörg

Ich nutze das schon.

Kann ich es erweitern das immer z.B. Profil-1 nur mit 123@aol.com eine Nachricht senden kann, dass beide gemeinsam geprüft werden?

Im Moment wird nur die Emailadresse geprüft, mit Fehlerausgabe aber ohne die dazu gehörige Profil-Nummer. Sozusagen könnte jemand Profil-4 eintragen und seine mailadresse, dass soll aber so nicht sein.

Beste Grüße
Marko

29.01.2017 17:53

10 Jörg Kruse

Du könntest die Profilnummern als Keys im Whitelist-Array verwenden und in der Funktion überprüfen, ob das Array-Element mit dem gesuchten Key die betreffende Emailadresse enthält:

function check_profile_email($profile_number, $email) {
    // Profilnummern mit Emailadressen:
    $white_list = array(
        1 => 'abc@example.com',
        6 => 'def@example.com',
        42 => 'ghi@example.de'
    );
    if (! empty($white_list[$profile_number] && $white_list[$profile_number] == $email)) {
        return true;
    }
    return false;
}

30.01.2017 09:24 | geändert: 30.01.2017 09:25