Promblème avec les cookies

Fermé
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 - 2 mars 2013 à 18:01
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 - 5 mars 2013 à 12:46
Bonjour,

Je bloque sur un exo en php
Je dois créer un script cookie.php générant un formulaire HTML qui comprend :

deux champs de saisies :
nom (qui est pré-initialisé à la valeur qu'il avait à l'appel précédent) ;
valeur ;
trois boutons de soumission nommés rappel et de valeurs respectives Montrer, Mémoriser, Oublier.

Le rôle de ce script, en ce qui concerne les cookies, dépend de la valeur du paramètre rappel après soumission du formulaire :

Oublier : le serveur doit alors demander au client de ne plus utiliser le cookie de nom indiqué dans le formulaire et affiche de nouveau le formulaire ;

Mémoriser : le serveur doit alors demander au client de mémoriser le cookie de nom et valeur indiqués dans le formulaire et affiche de nouveau le formulaire ;

Montrer : le serveur doit alors afficher la valeur du cookie nommé nom reçu par le navigateur en même temps que le formulaire.

Penser à regarder (à l'aide de Web Developer ou autre), les cookies déposées par votre script.
Fichier à créer : cookie.php

3 réponses

tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
2 mars 2013 à 22:14
Salut,

Un truc comme ça ? :
<?php
//Variable POST du formulaire
$nom = (isset($_POST['nom'])) ? $_POST['nom'] : NULL;
$valeur = (isset($_POST['valeur'])) ? $_POST['valeur'] : NULL;

//si le cookie $_COOKIE['Oublier'] existe et qu'il correspond
if(isset($_COOKIE['Oublier']) && $_COOKIE['Oublier'] == "efface"){
	//on supprime tout les cookies
	setcookie('nom', '', 0);
	setcookie('valeur', '', 0);	
	setcookie('Oublier', '', 0);
	//on redirige pour que ce soit pris en compte
	echo '<script type="text/javascript"> window.setTimeout("location=(\''.$_SERVER["PHP_SELF"].'\');",1000) </script>';
}

//si $_POST['Oublier']
if(isset($_POST['Oublier'])){
	//si le cookie existe et égal
	if(isset($_COOKIE['nom']) && $_COOKIE['nom'] == $nom){
		echo 'Merci de ne plus utiliser le cookie '.$_COOKIE['nom'].'!
<script type="text/javascript"> window.setTimeout("location=(\''.$_SERVER["PHP_SELF"].'\');",3000) </script>';
		//création d'un cookie permettant d'effacer le nom
		setcookie("Oublier", "efface");
	}
	else{
		echo 'Le Nom est déjà vide!';
	}
}

//si $_POST['Memoriser']
if(isset($_POST['Memoriser'])){
	if($nom != NULL && $valeur != NULL){
		//on créer 2 cookies
		setcookie("nom", $nom);
		setcookie("valeur", $valeur);
		////on redirige pour que ce soit pris en compte
		echo '<script type="text/javascript"> window.setTimeout("location=(\''.$_SERVER["PHP_SELF"].'\');",1000) </script>';
	}
	else{
		echo 'Le Nom ou la Valeur est vide!';
	}
}

//si $_POST['Montrer']
if(isset($_POST['Montrer'])){
	//on affiche la valeur des cookies
	if(isset($_COOKIE['nom'])) echo 'Nom : '.$_COOKIE['nom'].'<br/>';
	else echo 'Le nom est vide!<br/>';
	
	if(isset($_COOKIE['valeur'])) echo 'Valeur : '.$_COOKIE['valeur'];
	else echo 'La valeur est vide!';
}
?>

<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<label for="nom">Nom : </label>
<input type="text" name="nom" value="<?php if(isset($_COOKIE['nom'])) echo $_COOKIE['nom'];?>" />
<br/>
<label for="valeur">Valeur : </label>
<input type="text" name="valeur" value="<?php if(isset($_COOKIE['valeur'])) echo $_COOKIE['valeur'];?>" /><br/>
<label for="action">Rappel : </label>
<input type="submit" name="Oublier" value="Oublier" />
<input type="submit" name="Memoriser" value="Memoriser" />
<input type="submit" name="Montrer" value="Montrer" />
</form> 

0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
4 mars 2013 à 15:26
Merciiii beaucoup pour la correction :-) mais je t'avouerai que je suis perdu face à tout ce code. Je m'initie en PHP, j'ai compris le role des cookies mais cette exo n'est pas claire pour moi j'ai rien compris par rapport à ce que l'on me demande de faire meme :-(
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
4 mars 2013 à 15:29
A quoi servent les variable $nom et $valeur??
0
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
4 mars 2013 à 15:56
Elles correspondent aux valeurs des champs du formulaire.
$nom = (isset($_POST['nom'])) ? $_POST['nom'] : NULL;

si $_POST['nom'] existe alors $nom vaut la valeur de $_POST['nom'] sinon $nom vaut NULL.
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
4 mars 2013 à 16:03
Oui alors la je comprends c'est pourquoi tu utilises la fonction isset mais ton sinon c'est ton "?" et ton egale c ":"
0
Salut,

Il s'agit de l'opérateur ternaire. Plus d'info ici : http://www.manuelphp.com/php/language.operators.comparison.ternary.php
0
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
Modifié par tryan44 le 4/03/2013 à 19:57
$nom = (isset($_POST['nom'])) ? $_POST['nom'] : NULL;

Correspond à :
<?php 
if(isset($_POST['nom'])){ 
 $nom = $_POST['nom']; 
} 
else{ 
 $nom = NULL; 
} 
?>


Le code plus haut exécute différentes conditions selon le bouton utilisé et effectue des redirections en Javascript. Dans le doute d'avoir des erreurs de "header" si la redirection se fait en PHP, j'ai opté pour du JS.

Oublier : le serveur doit alors demander au client de ne plus utiliser le cookie de nom indiqué dans le formulaire et affiche de nouveau le formulaire ;
En gros, le cookie utilisé pour le nom et si il existe doit être supprimé avant de ré afficher le formulaire. Seul la valeur doit être conservé.

Mémoriser : le serveur doit alors demander au client de mémoriser le cookie de nom et valeur indiqués dans le formulaire et affiche de nouveau le formulaire ;
En gros, les 2 cookies doivent être créés et le formulaire doit être actualisé pour afficher la valeur des 2 cokies dans celui-ci.

Montrer : le serveur doit alors afficher la valeur du cookie nommé nom reçu par le navigateur en même temps que le formulaire.
En gros, on affiche la valeur du cookie comportant le nom si il existe. Dans le cas présent, j'ai affiché la valeur des 2 cookies dans et en dehors du formulaire.

Une question stupide engendre une réponse stupide!
Une question mal formulé engendre une réponse aléatoire!
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
4 mars 2013 à 21:18
Merciiiii vraiment beaucoup!!! pour tout c'que tu as fait code et explication, normalement avec ça j'vais pouvoir essayé de le refaire. Par contre dans mon cours on a pas vu encore JavaScrip on travaille essenciellement dans un premier temps du coté server avec PHP ensuite viendra le cote client avec javaScript. Merciii vraiment pour tout je commencer vraiment a désespérer
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
4 mars 2013 à 21:46
La je vois que dans ton code tu utilises stecookie() à l'interieure du code alors que j'ai crus comprendre d'après mon prof qu'il faut les placer meme avant le <!DOCTYPE ...>

Autre question comment je peux voir les fichier de tes cookies que tu as créés??
0
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
5 mars 2013 à 12:46
Pour qu'un cookie soit pris en compte au sein d'une même page, il faut une actualisation de celle-ci ou une redirection. En PHP vous pouvez utiliser "header location" sous condition qu'aucun contenu ne soit envoyé avant son appel.

La je vois que dans ton code tu utilises stecookie() à l'interieure du code alors que j'ai crus comprendre d'après mon prof qu'il faut les placer meme avant le <!DOCTYPE ...>

Exacte https://www.php.net/manual/fr/function.setcookie.php
Dans le cas présent, mon code est dépourvu d'entête et de tout le reste. C'est juste un code brute de teste qui doit être adapté à une mise en page complète.

Autre question comment je peux voir les fichier de tes cookies que tu as créés??


Avec Chrome : clique droit » Inspecter l'élément » (onglet) Ressources » (menu gauche) Cookies
0