2016-12-10 1 views
0

Mon formulaire de contact fonctionne, mais il ne me redirigera pas vers ma page de remerciements. Cela fonctionnait avant que je le transfère à un nouvel hôte.La redirection PHP ne fonctionne pas sur le formulaire de contact (le message est envoyé)

<!-- Contact PHP Stuff --> 
<?php 

session_start(); 

require_once 'libs/phpmailer/PHPMailerAutoload.php'; 

$errors = []; 

if(isset($_POST['name'], $_POST['email'], $_POST['subject'], $_POST['message'])) { 

    $fields = [ 
     'name'=> $_POST['name'], 
     'email'=> $_POST['email'], 
     'subject'=> $_POST['subject'], 
     'message'=> $_POST['message'] 
    ]; 

    foreach($fields as $field => $data) { 
     if(empty($data)) { 
      $errors[] = 'The ' . $field . ' field is required'; 
     } 
    } 
    if(!empty($fields['name'])) { 
     if (!preg_match("/^[a-zA-Z ]*$/",$fields['name'])) { 
      $errors[] = "Name can only include letters A-Z"; 
     } 
    } 
    if(!empty($fields['email'])) { 
     if (!filter_var($fields['email'], FILTER_VALIDATE_EMAIL)) { 
      $errors[] = "Please enter a valid email address"; 
     } 
    } 

    if(empty($errors)) { 

     $mail = new PHPMailer(); // create a new object 
     $mail->IsHTML(true); 
     $mail->Username = "[email protected]"; 
     $mail->Password = "*****"; 
     $mail->SetFrom($fields['email'], $fields['name']); 
     $mail->Subject = $fields['subject']; 
     $mail->Body = $fields['message']; 
     $mail->AddAddress("[email protected]"); 

     if($mail->Send()) { 
      header('Location: thanks'); 
      die(); 
     } else { 
      $errors[] = "Sorry could not send message. Try again later"; 
     } 

    } 

} else { 
    $errors[] = 'Something went wrong'; 
} 

$_SESSION['errors'] = $errors; 
$_SESSION['thanks'] = $thanks; 
$_SESSION['fields'] = $fields; 

header('Location: contact#contact-form'); 

?> 

La ligne header('Location: thanks'); me allez être redirigé vers merci.html avec mon hôte précédent mais maintenant cela ne se produit même si le message est envoyé et livré.

J'ai trouvé le code dans un didacticiel et je ne me souviens pas où il était il y a plus d'un an.

+1

Quelle est l'erreur? essayez d'ajouter au début de votre fichier après avoir lancé la balise php 'error_reporting (E_ALL);' Aussi ... quelque chose est-il imprimé sur la page? cela a généralement pour conséquence que l'en-tête ne peut pas être réglé, puisque l'un est déjà envoyé. –

Répondre

0

Retirez tout avant d'utiliser l'en-tête. Vous ne pouvez pas avoir sortie ANY que ce soit avant d'utiliser header()

si vous ajoutez

error_reporting(E_ALL | E_WARNING | E_NOTICE); 
ini_set('display_errors', TRUE); 

à la page que vous verrez probablement une erreur "déjà envoyé des en-têtes.

ou vous pouvez utiliser exit() qui apparemment l'a corrigé.

+0

Oui, j'ai copié sur le fichier .htaccess et cela fonctionne toujours lorsque vous tapez l'URL dans un navigateur. J'ai juste essayé d'utiliser "[http://www.google.com/](http://www.google.com/)" mais il ne redirige pas vers ça non plus. –

+0

Est-ce que $ mail-> Send() fonctionne? Recevez-vous l'email? – TigOldBitties

+0

Oui, je suis, c'est vraiment étrange –