2017-02-28 8 views
0

mein Formular funktioniert wie beabsichtigt, aber aus irgendeinem Grund wird die E-Mail nur an eines meiner E-Mail-Konten gesendet und nicht das andere Ich gebe die richtige E-Mail in das E-Mail-Feld, so dass das Problem nicht ist, kann ich nicht scheinen um zu sehen, wo ich falsch liege, gehe ich davon aus, dass ich $ E-Mail verwende, um die E-Mail-Adresse zu holen, an die die zweite E-Mail gesendet werden soll ... hier ist mein PHP, wo liege ich falsch?Formularpost an mehrere Personen senden PHP?

<?php 
    $from = 'Pixel Wars - Press Inquiry'; 
    $to = "[email protected], $email"; 
    $subject = 'Press Inquiry from Pixelwars.com'; 

    function errorHandler ($message) { 
     die(json_encode(array(
      'type'  => 'error', 
      'response' => $message 
     ))); 
    } 

    function successHandler ($message) { 
     die(json_encode(array(
      'type'  => 'success', 
      'response' => $message 
     ))); 
    } 


    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $message = $_POST['message']; 
     $body = "Name: $name\r\n Email: $email\r\n\r\n Message:\r\n $message"; 

     $pattern = '/[\r\n]|Content-Type:|Bcc:|Cc:/i'; 
     if (preg_match($pattern, $name) || preg_match($pattern, $email) || preg_match($pattern, $message)) { 
      errorHandler('Header injection detected.'); 
     } 

     // Check if name has been entered 
     if (!$_POST['name']) { 
      errorHandler('Please enter your name.'); 
     } 

     // Check if email has been entered and is valid 
     if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
      errorHandler('Please enter a valid email address.'); 
     } 

     // Check if message has been entered 
     if (!$_POST['message']) { 
      errorHandler('Please enter your message.'); 
     } 

     // prepare headers 
     $headers = 'MIME-Version: 1.1' . PHP_EOL; 
     $headers .= 'Content-type: text/plain; charset=utf-8' . PHP_EOL; 
     $headers .= "From: $name <$email>" . PHP_EOL; 
     $headers .= "Return-Path: $to" . PHP_EOL; 
     $headers .= "Reply-To: $email" . PHP_EOL; 
     $headers .= "X-Mailer: PHP/". phpversion() . PHP_EOL; 

     // send the email 
     $result = @mail($to, $subject, $body . "\r\n\n" .'------------------ '. "\r\n\n" .'Hello '.$name.' we will contact you as soon as possible about your query.' ."\n". 'Dont forget to keep visiting www.pixelwars.com for more updates and awesome content.' ."\n". 'We will email you back on the provided email below, thank you and have a nice day.' . "\r\n\n" .'-- '.$email, $headers); 
     if ($result) { 
      successHandler('Thank You! we will be in touch'); 
     } else { 
      errorHandler('Sorry there was an error sending your message.'); 
     } 
    } else { 
     errorHandler('Allowed only XMLHttpRequest.'); 
    } 
?> 

Vielen Dank im Voraus, wenn jemand es

+0

Mögliche Duplikat [PHP Mail an mehrere E-Mail-Adressen senden] (http://stackoverflow.com/questions/4506078/php-send-mail-to-multiple-email-addresses) –

+0

@JamesHunt Ich glaube nicht, dass es ein Duplikat ist - das OP hat die Syntax an Ort und Stelle, aber es ist nicht ganz richtig - Ihr referenziertes Problem ist eine Frage darüber, wie Sie Code erstellen, der ihren Anforderungen entspricht. –

+0

Ich denke, Ihr Problem ist, wie @ chris85 festgestellt hat, dass die Variable '$ email' nicht existiert. Versuchen Sie, diese drei Deklarationen an den Anfang des Dokuments zu verschieben. –

Antwort

4

Sie nicht $email zugewiesen knacken können Sie haben, wenn Sie $to so Ihre zweite Adresse definieren ist nicht gesetzt.

Demo: https://3v4l.org/QIIJu

Lösung, bewegen Sie die $to Zuordnung später im Skript. Verwenden Sie auch Fehlerberichterstattung, dies hätte eine undefinierte variable Benachrichtigung ausgelöst.

z.B.

<?php 
$from = 'Pixel Wars - Press Inquiry'; 
$subject = 'Press Inquiry from Pixelwars.com'; 
.... 

$to = "[email protected], $email"; 
$result = @mail($to, $subject, $body .... 

an dieser Stelle, weil die $email definiert. Verwenden Sie auch keine Fehlerunterdrückung, die nur nützliche Informationen versteckt. Wenn Sie nicht möchten, dass es angezeigt wird, blenden Sie den angezeigten Fehler aus, aber protokollieren Sie ihn trotzdem.

+0

Ich stimme zu, während der Entwicklung Fehlerberichte können eine enorme Zeitersparnis sein. Aber wenn Sie Zweifel haben, wiederholen Sie es. OP hätte aus dem Echo gesehen, dass neben der ersten E-Mail-Adresse nichts gedruckt wurde. –

+0

Danke, wäre es klug, den Namen und die Nachricht auch an der Spitze des PHP zusammen mit $ email zu definieren? –

+0

@Neths Sie erhalten undefinierte Benachrichtigungen, wenn sie nicht festgelegt sind, aber das ist mein bevorzugter Ort für Zuweisungen. Wenn nichts passieren sollte, wenn es keine AJAX-Anfrage ist, dann würde ich das 'if (isset ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) && $ _SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {' an den Anfang verschieben . – chris85

Verwandte Themen