8797 sujets

Développement web côté serveur, CMS

Bonjour à tous.

Je débute avec mysql, et me voilà avec un problème avec setcookie.
Depuis quelques heures, je m'arrache les cheveux.

Mon problème est le suivant...
Il m'est impossible d'avoir des cookies enregistrés sur le poste du client.
Pourquoi ?
Comment faire pour résoudre ce souci ?

Merci d'avance pour votre précieuse aide.
JYves



//	------------------------------------------------------------------------------------
// 	$switch = 1 pour un nouveau cookie "invit" 
//	$switch = 2 pour un cookie déjà existant "invit"
//	$switch = 3 pour un cookie déjà existant dont le compte a été modifié et/ou supprimé
//	$switch = 4 pour un cookie déjà existant différent de "invit" (="ftp"ou ="admin"...)
//	------------------------------------------------------------------------------------
//	Table logins contient tous les logins, motdepasse, email, type de compte
//	Table visites contient toutes les statistiques de visites par jour
//	------------------------------------------------------------------------------------
//	A chaque visite sur la page d'accueil, l'internaute stocke 3 cookies
//	'CFVcompte', 'CFVuser' et 'CFVemail'
//	------------------------------------------------------------------------------------
//	Valeurs possibles du type de compte 'CFVcompte' = ftp, admin, invit
//	------------------------------------------------------------------------------------

	if ((!isset($_COOKIE['CFVcompte'])) || (!isset($_COOKIE['CFVuser'])) || (!isset($_COOKIE['CFVemail']))) {
		$switch=1;
		$compte = "invit";
		$user = "invit";
		$email = "invit";
	} else {
		$user = trim($_COOKIE['CFVuser']);
		$compte = trim($_COOKIE['CFVcompte']);
		$email = trim($_COOKIE['CFVemail']);
		if ($user=="invit" && $compte=="invit") {
			$switch=2;
		} else {
			$switch=3;
			require_once("connexionMysql.inc.php");
			$reqLogin="SELECT * FROM logins ".
				"WHERE utilisateur='".$user."' AND type='".$compte."' ";
			$resLogin=mysql_query($reqLogin);
			$record=mysql_fetch_array($resLogin);
			if ($record) {
				$switch=4;
			}
		}
	}

	if (($switch==1) || ($switch==3)) {		
		$annee = substr("0000".date("Y"),-4);
		$mois = substr("00".date("m"),-2);
		$jour = substr("00".date("d"),-2);
		$journee="jour".$jour;
		
		require_once("connexionMysql.inc.php");
		$reqVisite="SELECT * FROM visites".
			" WHERE annee= '".$annee."' AND mois= '".$mois."' ";
		$resVisite=mysql_query($reqVisite);
		$record=mysql_fetch_array($resVisite);
		$valeur=$record["$journee"]+1;
		$reqMAJ="UPDATE visites SET ".$journee."= ".$valeur.
			" WHERE annee= '".$annee."' AND mois= '".$mois."' ";
		mysql_query($reqMAJ);
	}
	
	if ($switch==4) {
		// cookies valable pendant 10 ans
		setcookie('CFVcompte', $compte, time() + 10 * 365 * 24 * 3600, null, null, false, true);
		setcookie('CFVuser', $user, time() + 10 * 365 * 24 * 3600, null, null, false, true);
		setcookie('CFVemail', $email, time() + 10 * 365 * 24 * 3600, null, null, false, true);
		$chemin = "../transferts";
		if (is_dir($chemin) == false) {
		  mkdir($chemin,0777);    
		}
		$chemin .= "/";
		if (is_dir($chemin.$user) == false) {
		  mkdir($chemin.$user,0777);    
		}
	} else {
		// cookies valable jusque 23h59m59s
		setcookie('CFVcompte', $compte, time() + mktime(23,59,59) - time(), null, null, false, true);
		setcookie('CFVuser', $user, time() + mktime(23,59,59) - time(), null, null, false, true);
		setcookie('CFVemail', $email, time() + mktime(23,59,59) - time(), null, null, false, true);
	}

Modifié par jytest (29 Mar 2011 - 15:41)
Je viens de trouver les instructions ob_start et ob_end_flush...
Mais cela ne fonctionne pas non plus...
J'ai pourtant l'impression d'être tout proche de la solution.
Pouvez-vous m'aider, svp ?

Voici le code corrigé :

	ob_start;
//	------------------------------------------------------------------------------------
// 	$switch = 1 pour un nouveau cookie "invit" 
//	$switch = 2 pour un cookie déjà existant "invit"
//	$switch = 3 pour un cookie déjà existant dont le compte a été modifié et/ou supprimé
//	$switch = 4 pour un cookie déjà existant différent de "invit" (="ftp"ou ="admin"...)
//	------------------------------------------------------------------------------------

	require_once("connexionMysql.inc.php");
	
	if ((!isset($_COOKIE['CFVcompte'])) || (!isset($_COOKIE['CFVuser'])) || (!isset($_COOKIE['CFVemail']))) {
		$switch=1;
		$compte = "invit";
		$user = "invit";
		$email = "invit";
	} else {
		$user = trim($_COOKIE['CFVuser']);
		$compte = trim($_COOKIE['CFVcompte']);
		$email = trim($_COOKIE['CFVemail']);
		if ($user=="invit" && $compte=="invit") {
			$switch=2;
		} else {
			$switch=3;
			$reqLogin="SELECT * FROM logins ".
				"WHERE utilisateur='".$user."' AND type='".$compte."' ";
			$resLogin=mysql_query($reqLogin);
			$record=mysql_fetch_array($resLogin);
			if ($record) {
				$switch=4;
			}
		}
	}

	if (($switch==1) || ($switch==3)) {		
		$annee = substr("0000".date("Y"),-4);
		$mois = substr("00".date("m"),-2);
		$jour = substr("00".date("d"),-2);
		$journee="jour".$jour;
		
		$reqVisite="SELECT * FROM visites".
			" WHERE annee= '".$annee."' AND mois= '".$mois."' ";
		$resVisite=mysql_query($reqVisite);
		$record=mysql_fetch_array($resVisite);
		$valeur=$record["$journee"]+1;
		$reqMAJ="UPDATE visites SET ".$journee."= ".$valeur.
			" WHERE annee= '".$annee."' AND mois= '".$mois."' ";
		mysql_query($reqMAJ);
	}
	
	mysql_close($connexion);
	if ($switch==4) {
		// cookies valable pendant 10 ans
		setcookie('CFVcompte', $compte, time() + 10 * 365 * 24 * 3600, null, null, false, true);
		setcookie('CFVuser', $user, time() + 10 * 365 * 24 * 3600, null, null, false, true);
		setcookie('CFVemail', $email, time() + 10 * 365 * 24 * 3600, null, null, false, true);
		$chemin = "../transferts";
		if (is_dir($chemin) == false) {
		  mkdir($chemin,0777);    
		}
		$chemin .= "/";
		if (is_dir($chemin.$user) == false) {
		  mkdir($chemin.$user,0777);    
		}
	} else {
		// cookies valable jusque 23h59m59s
		setcookie('CFVcompte', $compte, time() + mktime(23,59,59) - time(), null, null, false, true);
		setcookie('CFVuser', $user, time() + mktime(23,59,59) - time(), null, null, false, true);
		setcookie('CFVemail', $email, time() + mktime(23,59,59) - time(), null, null, false, true);
	}
	
	ob_end_flush;


Modifié par jytest (29 Mar 2011 - 15:44)
Bonjour,
Je passes un peut tard sur ton message, mais il est clair que ton cookies se crée trés bien,
juste tu le relis quand ?
j'ais du au rechargement lire le cookie puis faire des echo des divers valeurs !

Tu sais (je penses) que les sessions sont lisibles de suite dans une page PHP
Alors que le cookies n'est relu qu'au rechargement de la page Smiley confus
Modifié par Christele (29 Mar 2011 - 15:13)
Merci Christele pour ton passage.
Non, j'avais le message d'erreur suivant
Warning: Cannot modify header information - headers already sent by (output started at...



J'ai trouvé mes erreurs dans le 2e code, il manquait les parenthèses !!!
ob_start --> ob_start()
ob_end_flush --> ob_end_flush()

et maintenant, tout fonctionne à merveille.
Modifié par jytest (29 Mar 2011 - 15:45)
Oui et notes a ce sujet que Javascript et PHP gérent le cookie de données UNIQUE de session .
Ne pas le confondre avec le cookie uniquede session Smiley confused

Alors saches que même lorsque le header est envoyé javascript peux continuer a agir
sur ton cookie.
pas besoins de OB_START