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 :
Les lignes 57 et 61 correspondent respectivement à un header() et à un setcookie().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
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
?>Merci beaucou pour votre aide.