IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

ou placer le header


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Par défaut ou placer le header
    bonjour,je précise, je debute
    je reprend un script existant que j'avais fait avec un ami et je souhaite le modifier légèrement:
    lorsqu'un client valide son formulaire, le contenu est envoyé par mail,
    puis un message apparait pour le prévenir que le mail est bien envoyé.
    Les clients semblent ne pas voir ce message (pourtant en rouge et en très gros!!!)
    je souhaite donc faire un header.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    			//Redirection
    			header("location: mail_ok.php");
    			exit;
    Seulement, je ne parviens pas à le placer au bon endroit dans mon script: cela ne fonctionne pas
    voici mon script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    	$MailDesitataire = "*****";
     
    	//Initialisation var
    	$Msg ='';
     
    	//Mise en session des valeurs du formulaire		
    	while ( list($cle, $val) = each( $_POST ) ){ 		 
    		$_SESSION[$cle] =$_POST[$cle]; 		
    	}
     
    	$Contact_LeNom='';
    	$Contact_LePrenom='';
    	$Contact_LeTelephone='';
    	$Contact_LeEmail='';
    	$Contact_LeMessage='';
     
     
    	if (isset($_SESSION['Contact_Nom'])){ 
    		$Contact_LeNom= htmlentities( stripslashes($_SESSION['Contact_Nom']));
    	}
    	if (isset($_SESSION['Contact_Prenom'])){ 
    		$Contact_LePrenom= htmlentities( stripslashes($_SESSION['Contact_Prenom']));
    	}
    	if (isset($_SESSION['Contact_Telephone'])){ 
    		$Contact_LeTelephone= htmlentities( stripslashes($_SESSION['Contact_Telephone']));
    	}
    	if (isset($_SESSION['Contact_Email'])){ 
    		$Contact_LeEmail= htmlentities( stripslashes($_SESSION['Contact_Email']));
    	}
    	if (isset($_SESSION['Contact_Message'])){ 
    		$Contact_LeMessage= htmlentities( stripslashes($_SESSION['Contact_Message']));
    	}
     
    	//Si validation du formulaire
    	if(isset($_POST['Submit'])){
     
    		//Verif champ obligatoire
    		if(empty($_POST['Contact_Nom'])){		
    			$Msg .= "Erreur de saisie : Nom !";			
    		}		
    		if(empty($_POST['Contact_Prenom'])){		
    			$Msg .= "<BR>Erreur de saisie : Prenom !";				
    		}
    		if( !eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$", $_POST['Contact_Email']) ){		
    			$Msg .= "<BR>Votre adresse email semble invalide !";				
    		}
    		if(empty($_POST['Contact_Message'])){		
    			$Msg .= "<BR>Merci de rédiger votre message !";				
    		}
     
    		//Vérif OK
    		if( empty($Msg)){
     
    $MsgMail="Date d'envoie du Mail : ".date("d/m/Y  H:i:s")."\n\n";	
    $MsgMail.= "Nom : ".$_POST['Contact_Nom']."\n";
    $MsgMail.= "Prenom : ".$_POST['Contact_Prenom']."\n";
    $MsgMail.= "Telephone : ".$_POST['Contact_Telephone']."\n";
    $MsgMail.= "Email : ".$_POST['Contact_Email']."\n";
    $MsgMail.= "Message : ".$_POST['Contact_Message']."\n";
     
    $sujet="Demande de renseignements depuis votre site internet";
     
    $headers = "from: <".$_POST['Contact_Email']."> \n";
    $headers .= "reply-to:".$_POST['Contact_Email']."\n";		
    $headers .= "x-sender: <".$MailDesitataire."> \n";
    $headers .= "x-mailer: php\n";
    $headers .= "return-path: <".$MailDesitataire."> \n";
    $headers .="content-transfer-encoding: 8bit\n";
     
    if ( mail ($MailDesitataire, $sujet, $MsgMail,$headers) ){ $Msg ="<p class=\"style3\">Votre message &agrave; &eacute;t&eacute; envoyer avec succ&egrave;s.<br />
    Nous vous r&eacute;pondrons dans les meilleures d&eacute;lais.</p>";
     
    }else{$Msg ="<p class=\"style3\">
    Erreur lors de l'envoi de votre e-mail !</p>";}	
    }
    else{$Msg= "<p class=\"style3\">".$Msg."</p>";}
    }
    ?>
    j'ai essayé plusieurs choses mais cela ne marche pas.
    merci de votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Très logiquement tu ne peux pas afficher un message et rediriger la page en meme temps.
    Si tu souhaites rediriger après quelques secondes, il faut le faire en javascript ou en HTML.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    ce n'est pas l'entête Location qu'il faut utiliser mais Refresh :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Refresh: 3; URL=/index.php")

  4. #4
    Membre éprouvé Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Par défaut
    Pour quoi faire un header..... tu peux afficher un message simplement non?
    manque juste le echo de ton $Msg

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Par défaut ou placer le header
    merci pour toutes ces réponses
    toutefois elles ne sont pas adaptés:
    pour répondre à shinji62, mon script comporte bien un "echo $mess" et cela fonctionne bien.
    toutefois, bien que déjà très gros, le message ne semble pas être lu par le client et il me valide plusieurs fois le formulaire,
    je souhaite simplement un transfert sur un autre fichier dès la validation du formulaire.
    La proposition de thomas est interessante mais pas adapté, pour les mêmes raisons.
    en clair, je souhaitais modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    			if ( mail ($MailDesitataire, $sujet, $MsgMail,$headers) ){
    				$Msg =
    				"<p class=\"style3\">
    				Votre message &agrave; &eacute;t&eacute; envoyer avec succ&egrave;s.<br />
    				Nous vous r&eacute;pondrons dans les meilleures d&eacute;lais.
    				</p>";
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			if ( mail ($MailDesitataire, $sujet, $MsgMail,$headers) ){
    //Redirection
    header("location: mail_ok.php");
    			exit;
    mais le transfert ne se fait pas ( je reste sur mon formulaire ) et le message suivant apparait:
    Warning: Cannot modify header information - headers already sent by (output started at /homez.110/creditsr/www/normes/criterebnp3.php:3) in /homez.110/creditsr/www/reponse.php on line 222
    merci

  6. #6
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    étant donné que tu écrivais un message puis tentais de faire une redirection, nous avons nécessairement pensé que tu souhaitais faire une redirection après la lecture du message par l'internaute, d'où nos réponses "inadaptées".

    Aussi, si tu nous avais donné le message d'erreur dès le début, nous aurions directement su quelle était la cause de ton souci : ton envoi du texte ou du HTML au navigateur avant même d'ouvrir ta session.

    L'appel de la fonction header() doit être placé avant tout envoi de caractères, c'est à dire en haut de tes scripts (ou du moins de ton HTML), y compris si le fichier est inclu.

    Cette erreur est décrite dans la FAQ :
    http://php.developpez.com/faq/?page=...s_already_sent

    Mais sache que si tu rediriges l'internaute avec l'entête Location, il ne verra pas ton message... il faut utiliser l'entête que j'ai explicitée dans mon message plus haut.

  7. #7
    Membre éprouvé Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Par défaut
    Si tu veux absolument le mettre en fin de ton script tu peux bufferiser la sortie =)
    ob_start()
    ton script
    ob_end_clean()

    Malheureusement tu n'auras aucun message
    Enfaite pour le header il ne faut rien envoyer au navigateur avant

  8. #8
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Il peut avoir le message si il utilise l'entête refresh et qu'il récupére le contenu du buffer afin de l'afficher, ca peut servir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ob_start();
    // script
    echo ob_get_contents();
    // $c = ob_get_contents();
    ob_end_clean();
    // echo $c;

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut à tous

    (de la part d'un codeur amateur fraichement inscrit ... de la bleusaille quoi )


    Je n'ai pas trop saisie le truc sur le ob_start et ob_start ?

    Part contre, pour avoir un message de retour après une redirection, utiliser les sessions peut être une (bonne) méthode, non ?

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( mail(patatipatata) ) {
    	$_SESSION['envoie_mail'] = 'Le mail a bien été envoyé';
    }
    else {
    	$_SESSION['envoie_mail'] = 'Le mail n\'a pas été envoyé ... bouhhhh';
    }
    Puis dans la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_SESSION['envoie_mail']) && !empty($_SESSION['envoie_mail'])) {
    	// Retour/Confirmation du mail
    	echo $_SESSION['envoie_mail'];
    	unset($_SESSION['envoie_mail']);
    }
    Un peu simpliste, certes, mais c'est une idée

  10. #10
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par RunCodePhp
    Je n'ai pas trop saisie le truc sur le ob_start et ob_start ?
    ob_start, ob_get_contents et ob_end_clean sont des fonctions des de bufferisation de sortie en gros ils permettent de geler l'envoi de données vers le client et ensuite (si on veut ou pas) d'envoyer toutes les données du coup!

    Citation Envoyé par RunCodePhp
    Part contre, pour avoir un message de retour après une redirection, utiliser les sessions peut être une (bonne) méthode, non ?
    bah non les sessions et son cousin cookie sont utilisés pour sauvegarder certaines informations (on parle aussi de persistance) liées à la connexion courante.

  11. #11
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Merci pour ces précisions Thes32

    Mais est ce qu'on s'éloignerait pas du problème de fond ?

    S'il a une erreur de type "headers already sent by" c'est que les traitements (header('Location ...') entre autre) sont effectués trop tard, non ?
    Ca sous entend qu'un flux HTML/Texte serait déjà envoyé normalement.

    Ou alors il y a déjà un message d'erreur de renvoyé, non visible sur la page, mais qu'on peu s'en rendre compte en affichant le code source, ce qui revient au même que ci-dessus.


    Ne faudrait il pas réexaminer le déroulement des différents traitements, et faire éventuellement remonter cette partie de code d'envoi de mail ?
    Ou alors jeter un oeil dans les logs d'erreurs, et réparer l'erreur éventuelle effectuée en amont (du header ...).


    Ceci dit, je n'ai jamais exploité ces fonctions ob_start, ob_get_contents et ob_end_clean, du moins pas dans ce contexte là.
    Pour faire des messages des retours après traitement, j'utilise les sessions.
    D'ailleurs, certains CMS (peut être même des FrameWork) exploitent cette technique, du fait de cette persistante justement. Du moins je pense.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Par défaut ou placer le header
    bonjour
    merci pour toutes ces pistes
    Vous avez raison, j'aurai du etre plus clair,
    J'avais pourtant bien cherché sur le site, autant dans les cours que dans le forum, mais je n'avais pas utilisé les bon mots clefs pour arriver à mes fins, d'ou l'ouverture de cette discussion.
    Pour conclure,
    Le script php était effectivement au milieu du html, je l'ai déplacé avant le html et comme vous l'aviez prévu, cela fonctionne.(erreur de débutant )
    Merci à tous
    pat

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/02/2015, 02h09
  2. Placer du texte par dessus un élément type "header slider"
    Par Dr.Wily dans le forum Webdesign & Ergonomie
    Réponses: 1
    Dernier message: 23/03/2012, 12h08
  3. Placer header en haut de page
    Par Dutrizac dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 07/10/2009, 10h33
  4. comment placer des images en absolu dans un header
    Par ml1234 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 17/05/2009, 17h41
  5. Réponses: 5
    Dernier message: 17/06/2006, 22h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo