Bonjour

Je suis parfaitement novice mais pleine de bonne volonté. Malheureusement et malgré tout ce que j'ai pu lire, je bloque depuis plusieurs jours sur quelque chose de certainement tout simple : je voudrais rediriger l'utilisateur vers une page html après envoi du formulaire mais je n'y parviens pas (j'ai essayé d'integrer une fonction header sans succès...).

Si l'un d'entre vous peut m'iader ce serait top.
Merci d'avance

Voici mon script :

<?php

$YourEmailAddress = "test@test.fr";

$radio =$_GET['radio'];
$nom = $_GET['nom'];
$prenom = $_GET['prenom'];
$email = $_GET['email'];
$entreprise = $_GET['entreprise'];

// Code
// ------------------------------------------------------------------------

error_reporting (E_ALL ^ E_NOTICE);
$post = (!empty($_POST)) ? true : false;
if($post) {function ValidateEmail($email){$regex = "^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$^";
$eregi = preg_replace($regex,'', trim($email));

    return empty($eregi) ? true : false;
}

$nom = stripslashes($_POST['nom']);
$prenom = stripslashes($_POST['prenom']);
$to = $YourEmailAddress; //trim($_POST['to']);
$email = trim($_POST['email']);
$entreprise = stripslashes($_POST['entreprise']);
$message = stripslashes($_POST['message']);
$pro = stripslashes($_POST['pro']);
$perso = stripslashes($_POST['perso']);
$error = '';
$Reply=$email;
$from=$email;

// Test des champs
if(!$nom) {
$errornom = "Entrez votre nom.<br />";
}

// Test Email
if(!$email) { 
    $erroremail = 'Entrez une adresse mail valide.';
}
if($email && !ValidateEmail($email)) {
    $erroremail = 'Entrez une adresse mail valide.';
}
 if(!$entreprise) {
    $errorentreprise = "Entrez le nom de votre entreprise.<br />";
}

    // Envoi
if((!$errornom) &&(!$erroremail)&&(!$errorprenom))

{
    //$message="De: $email <br>";
    $messages.="Demande d'information :<br><br>";

    $messages.="Société : $entreprise <br>";
    $messages.="$prenom $nom <br>";
    $messages.="Souhaite des infos $pro $perso  <br> ";
    $messages.="Message complémentaire: $message <br>";

    $emailto=$to;

//test
    $mail2 = mail($emailto, utf8_decode($subject), utf8_decode($messages),"from: $from <$Reply>\nReply-To: $Reply \nContent-type: text/html  \ncharset: UTF-8 /nContent-Transfer-Encoding: 8bit");  
//Message après envoi
    if($mail2) {
        $mailok2 = 'Merci pour ces informations,<br>nous vous transmettons les documents demandés dans les meilleurs délais !';

    }
    //erreur
} else {
    $mailok2 = 'Merci de compléter tous les champs du formulaire.';
}

}
?>

8 réponses


nems_raiden
Réponse acceptée

Bonjour,

Pour utiliser header('Location: page.html'); , tu ne dois pas avoir envoyé le moindre code html avant
Pas de balise, pas d'espace, rien.

par exemple si tu remplace header('Location: page.html'); par un die();, ta page devrait être absoluement blance.

caoua
Réponse acceptée

C'est une erreur classique de débutant. Comme l'a mentionné nems_raiden

N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP.
source de la citation

Il n'y a donc pas de problèmes que ton serveur ne gèrerait pas les header, surtout que l'erreur est claire

Warning: Cannot modify header information - headers already sent (entêtes déjà envoyés) by (output started at /htdocs/public/www/tester/test/neo/pro122.php:12) in /htdocs/public/www/tester/test/neo/pro122.php on line 149

Le header('location: page de destination') doit se trouver dans ton code avant que ce dernier n'affiche la moindre chose avant.

Il te faut donc reprendre la logique de ton code en tenant compte de cette caractéristique de la fonction header('location: page de destination') !
Peut être que ce topic ou celui ci pourront t'aider a y voir plus clair ?

Bonjour,

Suffit de placer ceci à l'endroit de la redirection

<?php
header('Location: page.html');
?>
jess222
Auteur

Merci pour ta réponse rapide ! Hm en réalité je suis vraiment TRES novice :-)
J'ai essayé la chose suivante mais ça ne fonctionne pas :
if($mail2) { $mailok2 = 'header('Location: page.html')';}

J'ai essayé de le mettre un peu partout mais rien a faire, ça ne marche pas. Ca me fait un message de confirmation mais pas une redirection.
Du coup si tu as un autre conseil je suis preneuse

Merci dans tous les cas

Bonjour.
Remplaces :

if($mail2) { $mailok2 = 'header('Location: page.html')';}

Par :

if($mail2) { 
    header('Location: page.html');
}
jess222
Auteur

Il doit y avoir quelque chose qui cloche dans mon code, j'ai le message d'erreur ci dessous. La ligne 149 est celle du header

Warning: Cannot modify header information - headers already sent by (output started at /htdocs/public/www/tester/test/neo/pro122.php:12) in /htdocs/public/www/tester/test/neo/pro122.php on line 149

As tu une autre idée ?

Je continue de chercher de mon coté

jess222
Auteur

Merci pour cette info !
J'ai fait la vérification en mettant un die(); à la place du hedaer et effectivement j'ai une page blanche a la validation du formulaire. Mais si je remets le header ça me redonne le même message d'erreur.
Je suis trés perplexe. Je me demande si ça ne viendrait pas de mon serveur qui ne gérerait pas les header. Est ce possible ?

Existe-il une autre astuce pour essayer de comprendre ?
Merci beaucoup !

jess222
Auteur

Merci pour votre aide, j'ai enfin corrigé mon erreur, effiectivement j'avais laissé trainer un bout de quelque chose avant le header.
Je mets fin à 4 jours de recherche, la prochaine fois je demanderai de l'aide avant :-)
Merci beaucoup