Cookies et "header already sent"

thejoker
Invité n'ayant pas de compte PHPfrance

01 août 2010, 19:48

Bonjour à tous !

Alors voilà, je débute en PHP, et je voudrais créer un cookie. Je suis au courant que cela doit intervenir avant tout envoi de données au navigateur (pas de print(), header(), etc. avant) : c'est bien le cas dans mon script (du moins j'ai l'impression), et pourtant j'obtiens une erreur :
Warning: Cannot modify header information - headers already sent by (output started at /homez.194/webdujou/www/vote.php:1) in /homez.194/webdujou/www/vote.php on line 57

Warning: Cannot modify header information - headers already sent by (output started at /homez.194/webdujou/www/vote.php:1) in /homez.194/webdujou/www/vote.php on line 61
Les lignes 57 et 61 correspondent respectivement à un header() et à un setcookie().

Je ne comprends vraiment pas d'où peut venir les informations envoyées au navigateur avant ces 2 lignes (il y a un print plus haut, certes, mais il est dans un if qui n'est pas vérifié).

Voici le script PHP, sachant que le fichier vote.php ne contient bien que ce texte (pas de HTML autour).

Code : Tout sélectionner

<?php $connexion = mysql_connect("SECRET", "SECRET", "SECRET") or die(mysql_error()); mysql_select_db("webdujousql") or die(mysql_error()); $moisavectiret = $_POST['moisduvote']; $moissanstiret = str_replace("-","",$_POST['moisduvote']); if(!isset($_POST['votepour'])) //Vérifie que la page n'a pas été chargée directement { print "Vous n'avez pas accès à cette page.<br />Retour sur <a href=http://www.monsite.fr>Webdujour</a>"; } elseif ($_COOKIE['dejavote'] == $moisavectiret) //Vérifie que n'a pas déjà voté header("Location: http://www.monsite.fr/vote/?erreur=dejavote"); else { //Fonction générale servant à tester si la table SQL des votes pour ce mois existe function mysql_table_exists($db, $table){ $query = "SHOW TABLES FROM $db"; $runQuery = mysql_query($query); $tables = array(); while($row = mysql_fetch_row($runQuery)){ $tables[] = $row[0]; } if(in_array($table, $tables)){ return TRUE; } } //Si la table de vote pour ce mois n'existe pas encore... if(! mysql_table_exists('webdujousql','vote_'.$moissanstiret)){ // ...la créer mysql_query('CREATE TABLE vote_'.$moissanstiret.' (id INT not null AUTO_INCREMENT, idsite INT not null, titresite VARCHAR(100) not null, nbvotes INT, PRIMARY KEY (id))') or die('ERREUR : Impossible de créer une nouvelle table pour ce mois.<br />'.mysql_error()); // puis la remplir avec tous les sites du mois $sql1 = "SELECT ID,post_title FROM wp_posts WHERE post_date LIKE '".$moisavectiret."-%' AND post_status='publish' AND post_type='post'"; $req1 = mysql_query($sql1) or die('ERREUR : Impossible de récupérer les sites du mois pour les ajouter dans la table de vote'); while($data = mysql_fetch_assoc($req1)) { mysql_query("INSERT INTO vote_".$moissanstiret."(idsite,titresite,nbvotes) Values('".$data['ID']."','".addslashes($data['post_title'])."','0')") or die(mysql_error()); } } //On passe au vote pour le site choisi mysql_query("UPDATE vote_".$moissanstiret." SET nbvotes = nbvotes + 1 WHERE idsite='".$_POST['votepour']."'") or die("ERREUR : Impossible d'incrémenter le compteur de votes pour ce site.<br />".mysql_error()); //Création du cookie $endTime = mktime(23, 59, 59, date('m'), date("t",time()), date('Y')); // jusqu'à la fin du mois setcookie ("dejavote", $moisavectiret, $endTime); // C'EST LA LIGNE 57 //Redirection header("Location: http://www.monsite.fr/vote/? voteok=".$_POST['votepour']); // C'EST LA LIGNE 61 } //fin du premier IF de tout en haut ?>
Est-ce que vous voyez quelque chose qui cloche ?
Merci beaucou pour votre aide.

ViPHP
ViPHP | 5462 Messages

01 août 2010, 19:56

ton code est dans un include ?

thejoker
Invité n'ayant pas de compte PHPfrance

01 août 2010, 20:32

Non non, c'est un formulaire sur une autre page qui appelle tout simplement cette page vote.php.

ViPHP
ViPHP | 5462 Messages

01 août 2010, 20:41

Non non, c'est un formulaire sur une autre page qui appelle tout simplement cette page vote.php.
il serait pas en utf-8 avec BOM ton fichier ?