Warning: Cannot modify header information - headers already sent by

Répondre
mohaalba
le 24/02/2010 à 10:32
mohaalba
j'ai un code qui marche bien mais dès que je met un: location: header... ça me met un message d'erreur:
Warning: Cannot modify header information - headers already sent by(output started at /var/www/vhost/xxxxx/home/html/haut_color.php:4) in /var/www/vhost/xxxxxx/home/html/verification.php on line 257

en cherchant sur internet le pbm c'est que j'envoi une page html(haut_color.php) avant le header mais je ne vois pas d'autre solution et je suis dans l'obligation de faire ça.
aidez moi SVP

je vous remercie d'avance
Keika
le 24/02/2010 à 12:12
Keika
hahaha,

il y a toujours une autre solution.

pourquoi afficher une page si c'est pour renvoyer sur une autre des que ton script arrive au header ?

qu'est-ce que tu essayes de faire vraiment ?
Le PHP --> C'est dur !
mohaalba
le 24/02/2010 à 14:32
mohaalba
je m'excuse mais je crois que je mes uis mal exprimé donc:
j'ai des fonctions en javascript et feuilles styles dans la page:haut_color c'est pour ça que je le déclare dans ma page inscription et cette page j'affiche mon formulaire à remplir et à l'aide de 2 fonctions qui me permettent de tester les valeurs renter si elles sont juste ou non.donc si le formulaire à bien été rempli je fait un header vers une autre page(le header est dans l'une des 2 fonctions), sinon j'affiche un message d'erreur et surtout je reste sur la même page et je conserve les valeurs des champs saisies.
voici mes 3 fichiers php
merci beaucoup pour votre aide

inscription.php
<?php
session_start();
require_once('config.php');
require_once "verification.php";
$titre_page='Inscription';
include_once('haut_color.php');
?>
<form method='post' action='inscription.php' enctype='multipart/form-data'>
<?php
/**************************VALIDATION*********************************/
if (isset($_POST["email"]))
{
//echo'inscription';
// Verification et envoi du mail de confirmation
inscription();
}
else if(isset($_GET["code"]))
{
echo'code_check';
// Verification du code et blacklistage si besoin
code_check($_GET["code"],$_GET["BL"]);
}

/************************************************************/

?>

<table width="520" border="0" align="center">
<tr>
<td colspan="2" class="menu">Formulaire d'Inscription</td>
</tr>
<tr>
<td><label for="pseudo">
<div align="left">Pseudo (5 &agrave; 15 caract&egrave;res)* </div>
</label></td>
<td><input name="pseudo" type="text" id="pseudo" value="<?php if(isset($_POST['pseudo'])) echo $_POST['pseudo']; ?>"/></td>
</tr>
<tr>
.....................
</table></td>
</tr>
<tr>
<td><div align="left"><font face="Arial"><font size="-1">Adresse* </font></font></div></td>
<td><div align="left">
<input type="text" name="adresse_livraison" id="adresse_livraison" size="25" value="<?php if(isset($_POST['adresse_livraison'])) echo $_POST['adresse_livraison']; ?>"/>
</div></td>
</tr>
<tr>
<td><div align="left"><font face="Arial"><font size="-1">Ville* </font></font></div></td>
<td><table border="0" cellspacing="0" cellpadding="0" width="400" >
<tr>
<td nowrap="nowrap" width="95"><input type="text" name="ville_livraison" id="ville_livraison" size="12" value="<?php if(isset($_POST['ville_livraison'])) echo $_POST['ville_livraison']; ?>"/></td>
<td nowrap="nowrap" width="10">&nbsp;</td>
<td nowrap="nowrap" width="106"><div align="left"><font face="Arial"><font size="-1"> Code postal*:&nbsp;</font></font></div></td>
...................... align="left">
<input name="submit2" type="submit" value="Valider" />
</div>
<div align="right"><a href="connexion.php"></a> <a href="connexion.php">Retour</a></div>
</div></td>
</tr>
</table>
</div>
</form>
<!-- <center><a href="connexion.php"></a>
</center>-->
<?php
include_once('bas.php');
?>



verification.php
<?php
session_start();
function inscription()
{
require_once('config.php');
//$titre_page='Verification';
//include_once('haut_color.php');
$email=formulaires($_POST['email']);//$email=htmlentities($_POST['email']);
$pseudo=formulaires($_POST['pseudo']);
............
$pays_livraison=formulaires($_POST['pays_livraison']);

/**************************************/
$page=$serveur.$_SERVER["PHP_SELF"];

/***************************************/
$IP=$_SERVER['REMOTE_ADDR'];
$heure=time();
/*************************************************/
// Attendre qu'il n'y ait pas d'autres user avec le même numéro de session.
do
{
$cle_activation=md5(time());
$resultat = mysql_query("SELECT * FROM membres WHERE cle_activation='$cle_activation'");
}
while(false!=($ligne = mysql_fetch_array($resultat)));
/**************************************************************/
//// VERIFICATIONS BANALES ////
if(!$mdp || !$mdp2 || strlen($mdp) < 5 || strlen($mdp) > 15)
{

echo'<div align="center" ><p><strong>Votre mot de passe ou sa confirmation est inexisant ou votre mot de passe n\'est pas compris entre 5 à 15 carractères</strong></p><br />';
echo"<script>alert(\"Votre mot de passe ou sa confirmation est inexisant ou votre mot de passe n\'est pas compris entre 5 à 15 carractères ! \")</script>";
include_once('bas.php');
return FALSE;
}
if($mdp!=$mdp2)
{
echo'<div align="center" ><p><strong>Votre mot de passe n\'est pas le meme que sa confirmation</strong></p><br />';
echo"<script>alert(\"Votre mot de passe n\'est pas le meme que sa confirmation ! \")</script>";
include_once('bas.php');
return FALSE;
}
if(!$pseudo || strlen($pseudo) < 5 || strlen($pseudo) > 15)
{
echo'<div align="center" ><p><strong>Votre pseudo est inexisant ou n\'est pas compris entre 5 et 15 carractères</strong></p><br />';
echo"<script>alert(\"Votre pseudo est inexisant ou n\'est pas compris entre 5 et 15 carractères ! \")</script>";
include_once('bas.php');
return FALSE;
/*header('Location:inscription.php?eerror=ee_pseudo');
return FALSE;*/
}
if(!$email || !VerifierAdresseMail($email))
{
echo'<div align="center" ><p><strong>Veuillez entrer ou vérifier votre adresse e-mail</strong></p><br />';


if(!$ville)
{
echo'<div align="center" ><p><strong>Veuillez entrer le nom de votre VILLE</strong></p><br />';
echo"<script>alert(\"Veuillez entrer le nom de votre VILLE ! \")</script>";
include_once('bas.php');
return FALSE;
}
if(!$pays)
{
echo'<div align="center" ><p><strong>Veuillez entrer votre PAYS</strong></p><br />';
echo"<script>alert(\"Veuillez entrer votre PAYS ! \")</script>";
include_once('bas.php');
return FALSE;
}
if(!$titre)
{
echo'<div align="center" ><p><strong>Veuillez indiquer votre civilité</strong></p><br />';
echo"<script>alert(\"Veuillez indiquer votre civilité ! \")</script>";
include_once('bas.php');
return FALSE;
}
....................

/*************************/
if($code_postale_livraison){
if(strlen($code_postale_livraison )!= 5 || !is_numeric($code_postale_livraison))
{
echo'<div align="center" ><p><strong>Veuillez vérifier votre CODE POSTALE de livraison</strong></p><br />';
echo"<script>alert(\"Veuillez vérifier votre CODE POSTALE de livraison ! \")</script>";
include_once('bas.php');
return FALSE;
}
}
/************************************/
//// VERIFICATIONS DES EXISTANCES ////
$reponse_mail=mysql_query("SELECT email FROM membres WHERE email='$email'") or die ('Erreur : '.mysql_error()); //verification si e-mail existe déjà
$count_mail=mysql_num_rows($reponse_mail);
if($count_mail == 1)
{
echo'<div align="center" ><p><strong>Cet E-mail existe déjà</strong></p><br />';
echo"<script>alert(\"Cet E-mail existe déjà ! \")</script>";
include_once('bas.php');
return FALSE;
}
$reponse_pseudo=mysql_query("SELECT pseudo FROM membres WHERE pseudo='$pseudo'") or die ('Erreur : '.mysql_error()); //verification si pseudo existe déjà
$count_pseudo=mysql_num_rows($reponse_pseudo);
if($count_pseudo == 1)
{
echo '<div align="center" ><p><strong>Ce Pseudo existe déjà</strong></p><br />';
echo"<script>alert(\"Ce Pseudo existe déjà ! \")</script>";
include_once('bas.php');
return FALSE;
}
//verification si le numéro de cleint existe déjà
do
{
for ($ligne=0;$ligne<30;$ligne++) //Création d'un identifiant aléatoire
{
@$session.=substr('0123456789AZERTYUIOPMLKJHGFDSQWXCVBN',(rand()%(strlen('0123456789AZERTYUIOPMLKJHGFDSQWXCVBN'))),1);
}
/***************************************************/


$resultat = mysql_query("SELECT * FROM membres WHERE session='$session'");
}
while(false!=($ligne = mysql_fetch_array($resultat)));


$mdp=md5($mdp); //Codage du mot de passe

/*************************************************************/
//$cle_activation=md5(time());

$resultat = mysql_query("SELECT * FROM membres WHERE email='$email' AND level='blacklist'");
if(false!=($ligne = mysql_fetch_array ($resultat))){
echo '<div align="center" ><p><strong>L\'adresse e-mail (".$email.") est dans la liste noire. Utilisez une autre adresse mail.</strong></p><br />';die('Erreur : '.mysql_error());} // Si l'e-mail est dans la blacklist

$subject = "Veuillez confirmer votre inscription";
$headers = "From: bitta@hotmail.fr\n";
$message = "Veuillez confirmer votre inscription\n";
$message .= "Bonjour ".$nom."\n\n";
$message .= "Vous avez reçu ce mail parce que vous ou quelqu'un d'autre utilisant votre adresse mail s'est enregistré sur le site ".$site_name.".\n";
$message .= "Pour valider cet inscription, cliquez sur ce lien :\n http://edgepcb.com/".$page."?code=".$cle_activation."&BL=0 \n";
$message .= "Si vous vous n'êtes pas inscrit sur ".$site_name.", veuillez ignorer ce message et accepter nos excuses.\n";
$message .= "Vous pouvez aussi choisir d'ajouter votre mail à notre blacklist pour ne plus recevoir de mail d'inscription de notre part en cliquant sur ce lien :\nhttp://edgepcb.com/".$page."?code=".$cle_activation."&BL=1 \n";
$message .= "Votre e-mail a été envoyé de l'IP ".$IP.".\n\n";
$message .= "Cordialement,\n";
$message .= "Le Webmaster";

// Envoi du mail
/**************/

/*****************************/
if(@mail($email, $subject, $message, $headers))
{
mysql_query("INSERT INTO membres VALUES ('', '$session', '$pseudo', '$mdp', '$email', '$societe','$siret','$adresse','$code_postale', '$ville', '$pays', '$titre','$nom', '$prenom', '$telephone', '$mobile', '$fax','$cle_activation','en_attente','$IP','$heure','$societe_livraison','$adresse_livraison','$ville_livraison','$code_postale_livraison','$pays_livraison')") or die ('Erreur : '.mysql_error());//insertion dans la bdd
/**************/
mysql_close();

/*****************************/
//mysql_query($query);
// mysql_close();
/*$page_confirmation = "<div align='center' >Merci pour votre inscription !<br />Vous devriez recevoir un e-mail à l'adresse suivante : ".$email.".";
$page_confirmation .= '<div align="center" >Veuillez confirmer l\'inscription en cliquant sur le lien se trouvant sur le mail.<br />';
echo $page_confirmation;*/

header('Location:mail_validate.php?ok=i_email');
return false;
}
else
{
header('Location:mail_validate.php?ok=in_email');
return false;
/*echo '<div align="center" ><p><strong>Le mail de confirmation n\'a pu être envoyé. Peut-être que l\'adresse n\'est pas valide. Veuillez contacter le webmaster s\'il vous plait</strong></p><br /><a href="inscription.php" onClick="history.back()">Retour</a>';
//include_once('bas.php');
//return FALSE;*/
}
}

//-------------------------------------------------------------------------------
// Fonction de vérification de l'adresse de confirmation
// - Suppression des utilisateurs n'ayant pas confirmer avant la durée impartie
// - Extraction de la personne concernée
// - Validation de son enregistrement
// - Si l'on veut être blacklisté, après confirmation on effectue le blacklistage
// - Le webmaster recoit un mail lorsque l'inscription est validé
//-------------------------------------------------------------------------------
function code_check($code="",$BL="")
{
require "config.php";


$heure=time();

// On profite de l'occasion pour supprimer les users n'ayant pas confirmé dans la durée impartie
$heure2=$heure-$validite;
mysql_query("DELETE FROM membres WHERE heure<$heure2 AND level='en_attente'");

// On extrait la personne qui souhaite valider son inscription
$cle_activation=$code;
$resultat = mysql_query("SELECT * FROM membres WHERE cle_activation ='$cle_activation' AND level='en_attente'");
if(false==($ligne = mysql_fetch_array ($resultat)))
{
mysql_close();
$page_validation = "Ce code n'existe pas, est expiré ou à déjà été validé, veuillez remplir à nouveau le formaulaire : <a href=\"".$_SERVER["PHP_SELF"]."\">here</a>.";
}
else
{
// Si l'utilisateur vient pour confirmer, on passe son level de "en_attente" à "registered"
if($BL==0)
{
mysql_query("UPDATE membres SET level='registered' WHERE cle_activation ='$cle_activation' AND level='en_attente'");
$page_validation = "Merci, vous êtes maintenant enregistré ! Vous pouvez maintenant vous connectez librement <a href='connexion.php'>Identifiez vous !</a>'";


if ($mail_controle==1)
{
$subject="Nouvelle inscription sur $site_name";
$message="Bonjour,\n\n";
$message.="Un nouveau membre vient de s'inscrire :\n";
$message.="Nom : ".$ligne["nom"]."\n";
$message.="E-Mail : ".$ligne["email"]."\n";
$headers="From: mohaalba1@hotmail.fr\n";
@mail($votre_email, $subject, $message, $headers);
}
}
// Si l'utilisateur vient pour être blacklisté, on passe son level de "en_attente" à "blacklist"
// Mais avant une petite confirmation
if($BL==1)
{
$page_validation = "Vous souhaitez ajouter votre adresse mail à notre blackliste. Cliquez <a href=\"".$_SERVER["PHP_SELF"]."?code=".$code."&BL=2\">ici</a> pour que vous puissiez confirmer.";
}
// Si l'utilisateur a confirmé qu'il veut être dans la liste noire, on l'y met
if($BL==2)
{
mysql_query("UPDATE membres SET level='blacklist' WHERE cle_activation ='$cle_activation' AND level='en_attente'");
$page_validation = 'Votre e-mail a été blacklisté. Vous ne receverez plus aucun e-mail de notre part.';
}
mysql_close();
}
echo "<p>".$page_validation."</p>";
}
?>


mail_validate.php
<?php 
session_start();
if(isset($_GET['ok']))
{

$ok=$_GET['ok'];
if($ok=="i_email")
{
$page_confirmation = "<div align='center' >Merci pour votre inscription !<br />Vous devriez recevoir un e-mail à l'adresse suivante : ".$email.".";
$page_confirmation .= '<div align="center" >Veuillez confirmer l\'inscription en cliquant sur le lien se trouvant sur le mail.<br />';
echo $page_confirmation;
}
if($ok=="in_email")
{
echo '<div align="center" ><p><strong>Le mail de confirmation n\'a pu être envoyé. Peut-être que l\'adresse n\'est pas valide. Veuillez contacter le webmaster s\'il vous plait</strong></p><br /><a href="inscription.php" onClick="history.back()">Retour</a>';
}

?>





et merci encore

Merci surtout d'avoir utilisé le BB-Code comme expliqué dans les régles d'utilisations des forums
LA GLOBULE
le 24/02/2010 à 15:07
LA GLOBULE
Tu n'as pas 50 solutions : tu dois tester ton formulaire et faire ton header avant d'afficher ton js ou ta CSS.

De toutes facons, en restant sur ta solution, cela ne fonctionnera pas.
mohaalba
le 24/02/2010 à 16:14
mohaalba
finalement avec ça (redirection javascript):

window.location.replace("http://www.un-site.com/une-page.htm");

ça marche très bien

je vous remercie beaucoup pour votre aide
LA GLOBULE
le 24/02/2010 à 16:45
LA GLOBULE
Heu non, cela fonctionne si et seulement si ton client interprète le javascript.

Ce n'est pas logique de faire une redirection après avoir affiché quelque chose.
mohaalba
le 24/02/2010 à 17:46
mohaalba
je ne sais pas si vous avez regardé mon code mais il marche bien normalement.
j'affiche le formulaire, on le rempli, je le test et si c'est bon redirection vers une page(pour dire que vous êtes bien inscrit.... ) sinon je réaffiche le formulaire on conservant les donné tapès précédemment avec un message d'erreur.

si tu as des suggestions ou critique n'hésite pas car moi je suis débutant et je prend tout.

merci encore
mohaalba
le 24/02/2010 à 18:12
mohaalba
euh...
j'ai oublie de demandé quelque chose:
vous voulez dire quoi par: "si ton client interprète le javascript"

merci d'avance
moogli
le 24/02/2010 à 23:32
moogli

vous voulez dire quoi par: "si ton client interprète le javascript"


il est tout a fait possible d'interdire l'utilisation de JS avec un navigateur. C'est aussi possible sur les "téléphone" nouvelle génération avec les navigateur embarqué.
Donc si JS desactivé plus de redirection.

Ensuite il n'est pas du tout logique d'afficher quelque chose, donc de bouffer tu temps proc, de la mémoire et de la bande passante pour rien !

Pour cela il faut tester ton formulaire avant tout affiche. Comment faire :
la méthode bourrin du cache (ob_cache etc).
La méthode propre tu traite le formulaire avant le reste.
Pour te donner un exemple, sur ce site quand tu te connecte tu arrive sur la même page et pourtant la globule n'a surement pas jouer les devins pour connaitre la page d'origine du formulaire.

Comment faire :
1/ le formulaire point sur la page (soit directement avec le nom, soit en mettant . ou rien).
2/ l'ordre de la page web.
<?php
session_start();
// est ce que mon formulaire a été posté ?
// si oui j'utilise le ta de fonction qui vont retourner une, ou plusieurs, info(s) et dans le cas de message, tu récupère dans une variable et l'affiche au bon moment. si tu doit changer page c'est bon header fonctionne.

Pour info cette est simple à mettre en œuvre pour peu que l'on se pense dessus et que l'on pense le site de manière cohérente :)

@+
Il en faut peu pour être heureux !!!!!
Keika
le 25/02/2010 à 04:43
Keika
je pense que tu l'as pense un peu a l'envers. Pourquoi faire que le formulaire pointe versw inscription.php au lieu de verification.php ? si il pointait vers verification, il n'y aurait pas de soucis.
Le PHP --> C'est dur !
Répondre
LoadingChargement en cours