Problème avec mon header

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec mon header

Problème résolu

par Invité » 25 janv. 2007, 11:41

Voilà,
merci pour votre aide, mon problème est résolu.
Fred

par jojolapine » 24 janv. 2007, 16:54

ce qui veut dire que c'est résolu ?
(à mon avis non car il y a encore un header qui traine après l'envoi d'html au navigateur)

Voici le code

par Fred_b » 24 janv. 2007, 16:48

Bonjour !
Vous ne pouvez pas savoir combien je suis content de vos réponses rapides et efficaces. Pardon si je ne vous ai pas mis mon code complet mais je vais corriger mon erreur. Le voici :
Et encore MERCI pour votre collaboration. :D
<link href="CSS/entete.css" rel="stylesheet" type="text/css" />

<div class="colonnedehaut" >
<?php 
include('menu.html');   // Nous appelons notre menu
?>
</div>
<?php
$email_dest = "[email protected]";

if ($_POST['envoi']) {

// E-mail headers:
$headers ="MIME-Version: 1.0 \n";
$headers .="From: Formulaire web<[email protected]>\n";


$headers .="Content-Type: text/html; charset=iso-8859-1 \n";

$subject = "Formulaire web";

$partie_entete = "<html><head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head>
<body bgcolor=#FFFFFF>";

for ($a=1; $a<= $_POST['nbre_champs_texte']; $a++) {
$partie_champs_texte .= "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_champ'.$a] . " = " . $_POST['champ'.$a] . "</font><br>";
}

if ($_POST['nbre_zone_email'] != 0) {
$partie_zone_email = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_email'] . " = " . $_POST['zone_email'] . "</font><br>";
}

if ($_POST['nbre_zones_texte'] != 0) {
$partie_zone_texte = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_zone'] . " = " . $_POST['zone_texte'] . "</font><br>";
$partie_zone_texte = stripslashes($partie_zone_texte);
}

$fin = "</body></html>";

$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_zone_texte . $fin;

// Send the e-mail
if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");
} else { // Closing if !mail...


// Renvoi à la page de remerciement
header("Location: http://www.monsite.fr/merci.php"); 
exit();

} // Fin du else
} // Closing if edit
?>
<head>

<script language="JavaScript">function verifSelection() {if (mail_form.champ1.value == "") {
alert("Veuillez indiquer votre nom")
return false
} if (mail_form.champ2.value == "") {
alert("Veuillez indiquer votre prénom")
return false
} if (mail_form.champ5.value == "") {
alert("Veuillez nous singlaler le centres culturel")
return false
} if (mail_form.zone_email.value == "") {
alert("Veuillez indiquer votre courriel.")
return false
}

invalidChars = " /:,;'"

for (i=0; i<invalidChars.length; i++) {	// does it contain any invalid characters?
badChar = invalidChars.charAt(i)

if (mail_form.zone_email.value.indexOf(badChar,0) > -1) {
alert("Votre adresse e-mail contient des caractères invalides. Veuillez vérifier.")
mail_form.zone_email.focus()
return false
}
}

atPos = mail_form.zone_email.value.indexOf("@",1)			// there must be one "@" symbol
if (atPos == -1) {
alert('Votre adresse e-mail ne contient pas le signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

if (mail_form.zone_email.value.indexOf("@",atPos+1) != -1) {	// and only one "@" symbol
alert('Il ne doit y avoir qu\'un signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

periodPos = mail_form.zone_email.value.indexOf(".",atPos)

if (periodPos == -1) {					// and at least one "." after the "@"
alert('Vous avez oublié le point "." après le signe "@". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}

if (periodPos+3 > mail_form.zone_email.value.length)	{		// must be at least 2 characters after the 
alert('Il doit y avoir au moins deux caractères après le signe ".". Veuillez vérifier.')
mail_form.zone_email.focus()
return false
}} // Fin de la fonction

</script></head><body><form name="mail_form" method="post" action="<?=$_SERVER['PHP_SELF']?>" onSubmit="return verifSelection()">
 <div class="titre_page" id="Position_titre_page">Donnez votre avis</div>
<div id="Layer3_fondblanc"><img src="images/fond.gif" width="700" height="493" /></div>
<div class="Style5" id="Layer4avecscroll">
<p class="titre_secondaire">Donnez votre avis, faites des suggestions, cela nous int&eacute;resse au plus haut point.<br>
  Que ce soit sur le site (qu'en pensez-vous, qu'aimeriez-vous y trouver ?) ou sur l'AIDD elle-m&ecirc;me, <br>
  nous sommes &agrave; votre &eacute;coute. 
<table width="634" border="0" align="center">
<p align="center"></p><tr>
      <td><font face="Verdana" size="2">Nom* :</font></td>
      <td><input name="champ1" type="text"></td>
    </tr><tr>
      <td><font face="Verdana" size="2">Prénom* :</font></td>
      <td><input name="champ2" type="text"></td>
    </tr><tr>
      <td><font face="Verdana" size="2">Numéro de téléphone :</font></td>
      <td><input name="champ3" type="text"></td>
    </tr><tr>
      <td><font face="Verdana" size="2">numéro GSM :</font></td>
      <td><input name="champ4" type="text"></td>
    </tr><tr>
      <td><font face="Verdana" size="2">A quel centre êtes-vous lié(e)* ?</font></td>
      <td><input name="champ5" type="text"></td>
    </tr><tr>
      <td><font face="Verdana" size="2">En quelle qualité ?</font></td>
      <td><input name="champ6" type="text"></td>
    </tr><tr>
      <td width><font face="Verdana" size="2">Courriel* :</font></td>
      <td width><input name="zone_email" type="text"></td>
    </tr><tr>
      <td valign="top"><font face="Verdana" size="2">Que souhaitez-vous nous dire ?</font>
<p class="texte"><em>* Champs obligatoires. </em></p></td>
      <td><textarea name="zone_texte" cols="48" rows="7"></textarea></td>
    </tr><tr>
      <td valign="top"><input name="nbre_champs_texte" type="hidden" id="nbre_champs_texte" value="6">
        <input name="nbre_zones_texte" type="hidden" value="1">
<input name="nbre_zone_email" type="hidden" value="1">
<input name="titre_champ1" type="hidden" value="Nom :"><input name="titre_champ2" type="hidden" value="Prénom :"><input name="titre_champ3" type="hidden" value="Numéro de téléphone :"><input name="titre_champ4" type="hidden" value="numéro GSM :"><input name="titre_champ5" type="hidden" value="A quel centre culturel de la Communauté Wallonie-Bruxelles êtes-vous lié(e) ?"><input name="titre_champ6" type="hidden" value="En quelle qualité ?"><input name="titre_email" type="hidden" value="Courriel :"><input name="titre_zone" type="hidden" value="Que souhaitez-vous nous dire ?"></td>
      <td><div align="center">
<input type="reset" name="Reset" value="Effacer">          
<input type="submit" name="envoi" value="Envoyer">
        </div></td>
    </tr>
  </table>

</div>
  </form><div class="pied">
<?php 
  include('pied.html');   // Nous appelons le pied de page
?>
</div> </body>

Re: Problème avec mon header

par Ryle » 24 janv. 2007, 12:34

Warning: Cannot add header information - headers already sent by (output started at /usr/local2/home/root241/htdocs/11_avis.php:3) in /usr/local2/home/root241/htdocs/11_avis.php on line 50
Ce message signifie que tu tentes d'envoyer un en-tête au navigateur à la ligne 50 (vraissemblablement ton appel à la fonction header()), mais que celui-ci ne peut le faire, car un entête a déjà été envoyé ("headers already sent by"). Il te dit même où cela a commencé : "output started at /usr/.../11_avis.php:3" => script "/usr/.../11_avis.php" ligne "3")

Pour utiliser la fonction header() (tout comme session_start() ou setcookie()), il est indispensable qu'absolument aucune données n'ait été envoyée au navigateur au préalable. C'est à dire :
- pas de code html
- pas d'echo, print, etc.
- pas d'espace en dehors d'une balise <?php ?>
- pas de retour à la ligne en dehors d'une balise <?php ?>
...

Ceci ne fonctionne pas :
Bonjour
<?php
  header('Location:...');
?>
=> du texte a été envoyé au navigateur avant l'appel au header
<?php
  echo 'Bonjour';
  header('Location:...');
?>
=> du texte a été envoyé au navigateur avant l'appel au header
 <?php
  header('Location:...');
?>
=> un espace a été envoyé au navigateur avant l'appel au header.
<?php ... ?> 
<?php
  header('Location:...');
?>
=> un retour à la ligne a été envoyé au navigateur avant l'appel au header

Ceci fonctionne
<?php
  ...
  header('Location:...');
?>
<?php ... ?><?php
  header('Location:...');
?>

par 2501gigi » 24 janv. 2007, 11:52

SAlut j'ai eu le meme probleme , bon sans ton code entier je vais essayer de t'expliquer en esperant que je serais assez clair car c'est pas mon fort.

En general, tu a un formulaire qui envoye des infos et se formulaire contient un bouton, que quand tu appuis dessus, te renvois a une page et si je ne me trompe pas, c'est a la meme page ou se trouve se dis formulaire que tu veut revenir.

Donc deja sa fais 1 header.

Puis ensuite tu a ta fonction php qui traite c'est infos, style inserait dans ma base de donnée les infos du formulaire, et la si je ne me trompe toujour pas tu a mis un truc comme sa:
header("Location: mapage.php");
Qui et encore si je ne me trompe toujours toujours pas la page ou se truve le formulaire.

Ce qui fais un deuxieme header.

Il te suffit donc de sortir le header location de ton code php.

Bon j'espere que cela t'aura aide , sinon je suis desoler te te faire perdre du temps.

par Ultim4T0m » 24 janv. 2007, 01:47

Bonsoir,

Peux-tu montrer le code entièrement, sans le découper ni en enlever (mis à part bien sûr les identifiants de connexion si ils sont présents en dur dans ton fichier).

Cette erreur survient quand tu appelle la fonction header alors que quelque chose a déjà été envoyé au navigateur

Donc... Pas de echo, pas d'html, rien ne doit être envoyé avant que tu ne fasses ton header();

Problème avec mon header

par Invité » 24 janv. 2007, 01:43

Bonjour,
Lors de l'envoi de mon formulaire (php), j'ai un message d'erreur qui s'affiche. Mon php se trouve avant mon head. Je crois que le problème
proviens de la commande header mais je ne suis pas certain.
Pourriez-vous, svp, m'aider à trouver une solution ?
Davance merci ! Le message que le serveur met est :

Warning: Cannot add header information - headers already sent by (output started at /usr/local2/home/root241/htdocs/11_avis.php:3) in /usr/local2/home/root241/htdocs/11_avis.php on line 50

Voici une partie du code:

Code : Tout sélectionner

<div class="colonnedehaut" >
<?php 
include("menu.html");   // Nous appelons notre menu
?>

Code : Tout sélectionner

</div>
<?php
$email_dest = "[email protected]";

if ($_POST['envoi']) {

// E-mail headers:
$headers ="MIME-Version: 1.0 \n";
$headers .="From: Formulaire web<[email protected]>\n";


$headers .="Content-Type: text/html; charset=iso-8859-1 \n";

$subject = "Formulaire web";

$partie_entete = "<html><head>
<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>
</head>
<body bgcolor=#FFFFFF>";

for ($a=1; $a<= $_POST['nbre_champs_texte']; $a++) {
$partie_champs_texte .= "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_champ'.$a] . " = " . $_POST['champ'.$a] . "</font><br>";
}

if ($_POST['nbre_zone_email'] != 0) {
$partie_zone_email = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_email'] . " = " . $_POST['zone_email'] . "</font><br>";
}

if ($_POST['nbre_zones_texte'] != 0) {
$partie_zone_texte = "<font face='Verdana' size='2' color='#003366'>" . $_POST['titre_zone'] . " = " . $_POST['zone_texte'] . "</font><br>";
$partie_zone_texte = stripslashes($partie_zone_texte);
}

$fin = "</body></html>";

$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_zone_texte . $fin;

// Send the e-mail
if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo("Envoi du formulaire impossible");
} else { // Closing if !mail...

// Renvoi à la page de remerciement
[b]header("Location: http://www.monsite/merci.php"); [/b]
exit();

} // Fin du else
} // Closing if edit
?>

Code : Tout sélectionner

<head>
Merci pour votre aide !
Fred