[Résolu] Perdu avec les cookies

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Résolu] Perdu avec les cookies

Re: Perdu avec les cookies

par Rathorian » 15 déc. 2011, 10:09

Finalement j'ai trouvé mon erreur tout seul.
Sur la page "minichat_post.php" j'avais mis :
setcookie('pseudonyme', $pseudonyme, time() + 1*24*3600, null, null, false, true);
au lieu de :
setcookie('pseudonyme', $_POST['pseudonyme'], time() + 1*24*3600, null, null, false, true);
Encore merci xTG.

Re: Perdu avec les cookies

par Rathorian » 13 déc. 2011, 20:59

Mon niveau d'erreur :
error_reporting = E_ALL

Étant débutant je ne vois pas comment te mettre le retour de la fonction setcookie(). :(

Re: Perdu avec les cookies

par xTG » 13 déc. 2011, 14:58

Quel est ton niveau d'error_reporting ?
Affiches le retour de la fonction setcookie().

Re: Perdu avec les cookies

par Rathorian » 11 déc. 2011, 21:30

Oui oui aucun souci de ce côté là !

Re: Perdu avec les cookies

par xTG » 11 déc. 2011, 21:10

Les cookies sont activés sur ton navigateur ? :lol:

Re: Perdu avec les cookies

par Rathorian » 11 déc. 2011, 14:29

J'ai fait ce que tu ma dis, le var_dump() me retourne :
array
empty

Re: Perdu avec les cookies

par xTG » 11 déc. 2011, 14:07

Fais un var_dump($_COOKIE); pour voir si le cookie est bien créé.

Et simplifie l'appel à setcookie() :
setcookie('pseudonyme', $pseudonyme, time() + 1*24*3600);
Car je suis pas sûr déjà qu'il accepte des null en paramètre... Donc si ton niveau d'erreur est mal géré tu ne verras rien alors que ça le choque.

Re: Perdu avec les cookies

par Rathorian » 11 déc. 2011, 12:27

J'ai modifié de nouveau le code, je te montre seulement la partie PHP cette fois ci, le reste n'ayant pas bougé.

index.php :
<?php 
if (isset($_COOKIE['pseudonyme']))
{
	$pseudonyme_enregistre = htmlspecialchars($_COOKIE['pseudonyme'], ENT_QUOTES, 'UTF-8');
}
else
{
	$pseudonyme_enregistre = '';
}
?>

<form action="minichat_post.php" method="post">
	<p><label for="pseudonyme">Pseudonyme : </label><input type="text" name="pseudonyme" id="pseudonyme" value="<?php echo $pseudonyme_enregistre; ?>" /></p>
	<p><label for="message">Message : </label><input type="text" name="message" id="message" /></p>
	<p><input type="submit" value="Envoyer" /></p>
</form>
minichat_post.php :
<?php 
if (!isset($_COOKIE['pseudonyme']))
{
	setcookie('pseudonyme', $pseudonyme, time() + 1*24*3600, null, null, false, true);
}
?>
Maintenant je n'ai plus aucune erreur mais rien ne s'affiche dans le "value=" de mon input...

Re: Perdu avec les cookies

par xTG » 11 déc. 2011, 11:00

Si le cookie n'existe pas il ne faut pas tenter de l'afficher.
if( isSet($_COOKIE['pseudonyme']) )
  echo htmlspecialchars($_COOKIE['pseudonyme'], ENT_QUOTES, 'UTF-8');
Concernant la documentation, je parlais de la documentation PHP qui est incontournable : http://php.net
Ton problème est que si le cookie n'existe pas tu génères un warning.
Donc il faut vérifier qu'il existe avant de tenter de l'afficher.

Re: Perdu avec les cookies

par Rathorian » 11 déc. 2011, 10:16

Le "value=" du formulaire sur la page index.php pour permettre l'affichage du pseudonyme que le cookie a enregistré :
value="<?php echo htmlspecialchars($_COOKIE['pseudonyme'], ENT_QUOTES, 'UTF-8'); ?>"
Vraiment désolé, mais je n'ai pas compris ta deuxième phrase !

Re: Perdu avec les cookies

par xTG » 11 déc. 2011, 04:37

Quel "value=" ?
Pour la création du cookie étant donné que sur ta page d'index tu n'as pas l'information...
La question se pose-t-elle ?

Re: Perdu avec les cookies

par Rathorian » 10 déc. 2011, 22:52

D'accord, mais dans ce cas, je dois marquer quoi dans le "value=" ?

Et pour la création du cookie, je ne sais pas si je dois le faire sur la page de traitement ou sur l'index.

Re: Perdu avec les cookies

par xTG » 10 déc. 2011, 22:39

Si le cookie n'existe pas il ne faut pas tenter de l'afficher.
if( isSet($_COOKIE['pseudonyme']) )
  echo htmlspecialchars($_COOKIE['pseudonyme'], ENT_QUOTES, 'UTF-8');
Concernant la documentation, je parlais de la documentation PHP qui est incontournable : http://php.net

Re: Perdu avec les cookies

par Rathorian » 10 déc. 2011, 22:36

J'ai refait un peu mon code PHP au niveau des cookies, car j'avais fait un peu n'importe quoi...
La ligne qui permet de créer le cookie, je l'ai mise sur la page de traitement (minichat_post.php).

index.php :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

	<title>Mini Chat</title>

	<link rel="stylesheet" media="screen" href="style.css" />
</head>
<body>
<h1>Espace Chat</h1>

<form action="minichat_post.php" method="post">
	<p><label for="pseudonyme">Pseudonyme : </label><input type="text" name="pseudonyme" id="pseudonyme" value="<?php echo htmlspecialchars($_COOKIE['pseudonyme'], ENT_QUOTES, 'UTF-8'); ?>" /></p>
	<p><label for="message">Message : </label><input type="text" name="message" id="message" /></p>
	<p><input type="submit" value="Envoyer" /></p>
</form>

<?php 
// On inclue la page de connexion à MySQL.
include_once('connexion.inc.php');

$req = $pdo->query('SELECT * FROM minichat ORDER BY id_chat DESC LIMIT 0, 10');

while ($donnees = $req->fetch())
{
	echo '<p><strong>' .htmlspecialchars($donnees['pseudo_chat'], ENT_QUOTES, 'UTF-8'). '</strong> : ' .htmlspecialchars($donnees['message_chat'], ENT_QUOTES, 'UTF-8').'</p>'."\n\n";
}

$req->closeCursor();
?>
</body>
</html>
minichat_post.php :
<?php 
if (!isset($_COOKIE['pseudonyme']))
{
	setcookie('pseudonyme', $pseudonyme, time() + 1*24*3600, null, null, false, true);
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

	<title>Mini Chat</title>

	<link rel="stylesheet" media="screen" href="style.css" />
</head>
<body>
<?php 
// On inclue la page de connexion à MySQL.
include_once('connexion.inc.php');

if (isset($_POST['pseudonyme']) && isset($_POST['message']))
{
	// On supprime les espaces inutiles en début et fin de chaîne.
	$pseudonyme = trim($_POST['pseudonyme']);
	$message = trim($_POST['message']);
	
	if (!empty($pseudonyme) && !empty($message))
	{
		// On prépare la requête.
		$req = $pdo->prepare('INSERT INTO minichat(pseudo_chat, message_chat) VALUES(:pseudonyme, :message)');
		
		// Puis on insère les données dans la BDD.
		$req->execute(array(
			':pseudonyme' => $pseudonyme,
			':message' => $message
			));
			
		// Enfin, on redirige sur la page du formulaire.
		header('Location: index.php');
	}
	else
	{
		header('Location: index.php');
	}
}
else
{
	header('Location: index.php');
}
?>
</body>
</html>
Maintenant j'ai une erreur de type : Notice: Undefined index: pseudonyme in C:\wamp\www\cours_php\tp\tp2\index.php on line 14 Call Stack #TimeMemoryFunctionLocation 10.0009676376{main}( )..\index.php:0 " />

Par contre dans la FAQ je n'ai rien trouvé d'intéressant concernant les Cookies...

Re: Perdu avec les cookies

par xTG » 10 déc. 2011, 20:12

Il manque les parenthèses fermantes de htmlspecialchars() pour le premier script.
Et pour le second tu envoies du html avant de faire un header().

Pour les cookies il te suffit d'enregistrer $pseudonyme dans un cookie en utilisant setcookie().
Il y a des exemples dans la documentation. :)