Sie sind vermutlich noch nicht im Forum angemeldet - Klicken Sie hier um sich kostenlos anzumelden  
logo
Sie können sich hier anmelden
Dieses Thema hat 3 Antworten
und wurde 291 mal aufgerufen
 Fragen zu (X)HTML und CSS ?
kreftilein ( gelöscht )
Beiträge:

10.01.2012 21:40
RE: universeller Formmailer: alles funktioniert, aber keine Mail kommt antworten

Hallo allerseits,
ich habe PHP das letzte Mal vor über fünf Jahren benutzt und auch da war es schon nicht gerade excellent.
Jetzt wollte ich einen betagten Formmailer durch diesen austauschen und etwas modifizieren.
Es funktioniert auch alles so, wie ich es mir gewünscht habe, bis auf eines:
Es kommt nie eine Mail an.
Wo ist der Fehler, ich finde leider nix.
Die Formatierung der Felder ist im Kontext der restlichen Seite zwingend nötig!
Vielen Dank im voraus.

Hier ist der modifizierte Code:


define ('MAILTO', "-f mail@example.org"); // Empfänger hier eintragen
define ('MAILFROM', "Kontaktformular"); // ggfls. Absender hier eintragen
define ('CHARSET', "ISO-8859-15"); // Zeichenkodierung ggfls. anpassen
$Pflichtfelder = array('Name', 'Email', 'Nachricht'); // ggfls. weitere Pflichtfelder angeben


$AddHeader = 'Content-Type: text/plain; charset='.CHARSET;
if(MAILFROM) $AddHeader .= chr(13).chr(10).'From: '.MAILFROM;

if($Formular_abgeschickt = !empty($_POST)) {
$Formular_leer = true; set_magic_quotes_runtime(0);
$_POST = array_map('Formular_Daten', $_POST);
}
function Formular_Daten($val) {
global $Formular_leer;
if(is_array($val)) return array_map('Formular_Daten', $val);
if(get_magic_quotes_gpc()) $val = stripslashes($val);
if($val = trim($val)) $Formular_leer = false;
return $val;
}

function Formular_Pflichtfelder() {
global $Pflichtfelder;
$Fehler = '';
foreach ($Pflichtfelder as $Feld) {
$key = str_replace(' ','_',$Feld);
if(!(isset($_POST[$key]) && trim($_POST[$key])!=='')) {
if($Fehler) $Fehler .= '
';
$Fehler .= 'Pflichtfeld "' . $Feld . '" nicht ausgefüllt.';
}
}
return $Fehler;
}

function Formular_neu($log='.htPOSTdata.txt') {
if(file_exists($log) && is_readable($log)
&& file_get_contents($log) == print_r($_POST,true))
return false;
if($handle=@fopen($log, 'w')) {
fwrite($handle, print_r($_POST,true)); fclose($handle);
}
return true;
}

function Formular_Check() {
global $Formular_leer;
if($Formular_leer) $Fehler = 'Es sind nicht alle Felder ausgefüllt.';
elseif(!$Fehler = Formular_Pflichtfelder()) {
if(!checkEmail($_POST['Email'])) $Fehler = 'E-Mail fehlerhaft.';
elseif(!Formular_neu()) $Fehler = 'Nachricht war bereits verschickt.';
}
return $Fehler;
}

function Formular_Eingabe($Feldname, $def='') {
if(isset($_POST[$Feldname]) && $_POST[$Feldname]!=='')
echo htmlspecialchars($_POST[$Feldname]);
else echo $def;
}

function checkEmail($adr) {
$regEx = '^([^s@,:"<>]+)@([^s@,:"<>]+.[^s@,:"<>.d]{2,}|(d{1,3}.){3}d{1,3})$';
return (preg_match("/$regEx/",$adr,$part)) ? $part : false;
}

function Formular_Nachricht() {
$msg=''; $vor='['; $nach='] => '; // oder z.B. $vor=''; $nach=": ";
foreach ($_POST as $key => $val) {
$msg .= $vor.$key.$nach.$val.chr(13).chr(10);
}
return $msg;
}
?>

"http://www.w3.org/TR/html4/loose.dtd">







enctype="multipart/form-data" accept-charset="">



value="" />





value="" />
















$Formular_Anzeige = true;
if($Formular_abgeschickt) {
if($Formular_Fehler = Formular_Check())
echo '

',$Formular_Fehler,'

';
elseif(@mail(MAILTO, "Nachricht", Formular_Nachricht($_POST,true), $AddHeader))
{ $Formular_Anzeige = false;
echo '

Nachricht verschickt.

';
}
else echo '

Server-Fehler !

';
}

if($Formular_Anzeige): ?>
enctype="multipart/form-data" accept-charset="">






kreftilein ( gelöscht )
Beiträge:

10.01.2012 22:34
#2 RE: universeller Formmailer: alles funktioniert, aber keine Mail kommt antworten

Das Skript funktioniert!
Serverseitig war standardmäßig eine falsche PHP-Version eingestellt. Jetzt läuft es!
Vielen Dank für das tolle Skript!

kreftilein ( gelöscht )
Beiträge:

10.01.2012 22:47
#3 RE: universeller Formmailer: alles funktioniert, aber keine Mail kommt antworten

Jetzt habe ich doch noch eine Bitte/Frage:
ist es möglich, das Formmailer-Script so zu modifizieren, dass nach Versand der Mail die Inhalte der Formularfelder gelöscht werden?
Dann wäre die Kontrolle für das doppelte Abschicken nicht mehr nötig
Vielen Dank im voraus

1ngo Offline




Beiträge: 429

11.01.2012 07:12
#4 RE: universeller Formmailer: alles funktioniert, aber keine Mail kommt antworten

Hi,

Zitat
Gepostet von kreftilein
Jetzt habe ich doch noch eine Bitte/Frage:
ist es möglich, das Formmailer-Script so zu modifizieren, dass nach Versand der Mail die Inhalte der Formularfelder gelöscht werden?


Du könntest das Formular nach erfolgtem Mailversand nicht mehr anzeigen lassen - oder die Funktion Formular_Eingabe entsprechend erweitern:

1
2
 
  global $Formular_Fehler;
if(isset($_POST[$Feldname]) && $_POST[$Feldname]!=='' && !$Formular_Fehler) {
 



Zitat
Gepostet von kreftilein
Dann wäre die Kontrolle für das doppelte Abschicken nicht mehr nötig


doch. Du vergisst die ansonsten sinnvolle Funktion des Neuladens der Seite.

Gruß
Ingo

 Sprung  
Xobor Forum Software von Xobor | Forum, Fotos, Chat und mehr mit Xobor