2010-08-25 4 views
0

Dans ma page d'accueil je définissais une forme qui utilise le script suivant pour envoyer un mail:Envoyer Mail avec PHP & Echo problème

<?php 

/* Geben Sie hier Ihre E-Mail Adresse zwischen den beiden " an: */ 

$_emails[0] = "[email protected]"; 

// Wenn keine $_POST Daten übermittelt wurden, dann abbrechen 
if(!isset($_POST) OR empty($_POST)) 
{ 
    header("Content-type: text/plain; charset=utf-8"); 
    echo "Es wurden keine Daten übermittelt!"; 
    exit; 
} 
else 
{ 
    // Datum, Uhrzeit und Pfad zum eigenen Script feststellen 
    $date = date("d.m.Y"); 
    $time = date("H:i"); 
    $host = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 

    // Empfänger feststellen und auf Gültigkeit prüfen 
    if(isset($_POST['recipient']) AND isset($_emails[ $_POST['recipient'] ]) 
     AND preg_match("/^.*@.*\..*$/", $_emails[ $_POST['recipient'] ])) 
    { 
     $recipient = $_emails[ $_POST['recipient'] ]; 
    } 
    // Wurde kein (gültiger) Empfänger angegeben, es mit $_email[0] versuchen 
    elseif(isset($_emails[0]) AND preg_match("/^.*@.*\..*$/", $_emails[0])) 
    { 
     $recipient = $_emails[0]; 
    } 
    // Ist auch diese Adresse ungültig, mit Fehlermeldung abbrechen 
    else 
    { 
     header("Content-type: text/plain"); 
     echo "Fehler im Script - es wurde kein Empfänger oder eine ungültige E-Mail Adresse in \ angegeben."; 
     exit; 
    } 

    // Wenn Betreff übermittelt, diesen verwenden 
    if(isset($_POST['subject'])) 
    { 
     $subject = $_POST['subject']; 
    } 
    // sonst einen Default Betreff verwenden 
    else 
    { 
     $subject = "Formular Daten von {$_SERVER['HTTP_HOST']}"; 
    } 

    // E-Mai Kopf generieren 
    $email = "Formular Eintrag\n" 
      . "\n" 
      . "Am $date um $time Uhr hast das Script auf $host Formulardaten empfangen,\n" 
      . "welche nach Angabe des Browsers von {$_SERVER['HTTP_REFERER']} stammen.\n" 
      . "\n" 
      . "Der Formular Inhalt wird nachfolgend wiedergegeben.\n" 
      . "\n"; 

    // Alle $_POST Werte an den E-Mail Kopf anhängen 
    foreach($_POST as $key => $value) 
    { 
     if($key == "redirect" OR $key == "recipient" OR $key == "subject") 
     { 
      continue; 
     } 
     $email .= "Fomular Feld '$key':\n" 
       . "=============================\n" 
       . "$value\n" 
       . "\n"; 
    } 

    // E-Mail Fuß anfügen 
    $email .= "=============================\n" 
      . "Ende der automatisch generierten E-Mail."; 

    // Versuchen E-Mail zu versenden 
    if(!mail($recipient, $subject, $email)) { 
     // Ist dies gescheitert, Fehlermeldung ausgeben 
     echo "Es ist ein Fehler beim Versenden der E-Mail aufgetreten," 
      . " eventuell liegt ein Konfigurationsfehler am Server vor.\n\n"; 
     exit; 
    } 

    // Wenn gewünscht, auf Bestätigungsseite weiterleiten 
    if(isset($_POST['redirect']) AND preg_match("=^(http|ftp)://.*\..*$=", $_POST['redirect'])) { 
     header("Location: ".$_POST['redirect']); 
     exit; 
    } else { 
     header("Content-type: text/html"); 
     echo "Die E-Mail wurde erfolgreich versendet."; 
    echo '<br>'; 
     echo '<a href="http://www.ornitholog.li/cms/index.php?page=kontakt">Zurueck</a>'; 
     exit; 
    } 
} 

?> 

Il fonctionne bien, mais cependant, la confirmation que le courriel a été envoyé est affiché dans une nouvelle fenêtre Je préférerais que la confirmation soit affichée à la place du formulaire d'email. Comment puis-je y parvenir?

== === EDIT J'ajoute la forme:

<form action="./mail.php" method="post"> 
<table border="0"> 
<tbody> 
<tr> 
<td><label for="absender">Ihr Name:</label></td> 
<td><input id="absender" name="absender" size="25" type="text" /></td> 
</tr> 
<tr> 
<td><label for="email">Ihre E-Mail Adresse:</label></td> 
<td><input id="email" name="email" size="25" type="text" /></td> 
</tr> 
<tr> 
<td><label for="betreff">Betreff ihrer Nachricht:</label></td> 
<td><input id="betreff" name="betreff" size="25" type="betreff" /></td> 
</tr> 
<tr> 
<td><label for="nachricht">Ihre Nachricht:</label></td> 
<td><textarea id="nachricht" cols="30" rows="8" name="nachricht"></textarea></td> 
</tr> 
<tr height="20"> 
<td></td> 
<td></td> 
</tr> 
<tr> 
<th colspan="2" align="center"><input name="abschicken" type="submit" value="Nachricht verschicken" /></th> 
</tr> 
</tbody> 
</table> 
</form> 

Répondre

2

Vous modifiez le action dans votre <form> au même scénario que le formulaire lui-même est et vérifier la $_POST - si elle est remplie avec quelque chose de la forme, essayez de le soumettre.

Fondamentalement, vous venez de mettre le code PHP ci-dessus ou ci-dessous ou autour de votre formulaire HTML. Ensuite, je ajoute personnellement un champ caché comme <input type="hidden" name="sent" value="true"> que je peux vérifier en PHP.

if (!empty($_POST['sent'])) 
{ 
    // Your PHP-Code for sending the mail 
} 
else 
{ 
    // Your HTML form 
} 
+0

Voir ma modification. Vous pointez 'action =" "' dans le fichier lui-même et effectuez un tri si le formulaire a été envoyé ou non. –

+0

Merci maintenant je sais comment le faire. Cependant j'ai un problème pour implémenter le code dans mon CMS, mais pour cela je dois utiliser le forum CMS je pense;) – RoflcoptrException

+0

Une autre possibilité serait de rediriger l'utilisateur vers la page de formulaire en utilisant un paramètre GET et de vérifier cela dans la page de formulaire ... –

1

Je suppose que vous souhaitez afficher la confirmation sans avoir à charger une nouvelle page? Si c'est le cas, vous devez appliquer Javascript, de préférence AJAX, pour soumettre le formulaire, recevoir la réponse, supprimer le formulaire et afficher la confirmation (le tout dans la même page sans rechargement).