[RESOLU] Afficher COOKIE directement

Eléphanteau du PHP | 10 Messages

03 juil. 2016, 23:31

Bonjour,

je m’entraîne avec les COOKIE et les SESSIONS et je n'arrive pas à faire en sorte d'afficher directement un COOKIE, après sa création (qu-on est pas besoin de retourner sur la page précédente et de revenir en avant).

Mes codes sont les suivants :

index.php
<?php

if (isset($_COOKIE['nom'])) {
	header('location: suite.php');
}

else
{
	echo '
<html>
<head>
	<link rel="stylesheet" type="text/css" href="Connexion.css" />
	<meta charset="utf-8" />
	<title>tests</title>
</head>

<body>

<p>Comment t\'appel tu ?</p>

<form action="traitement.php" method="POST">

	<input type="text" name="nom" placeholder="prénom"><br><br>

	<label class="checkbox"><input type="checkbox" name="stend"> stend-connected</label><br><br><br>

	<input type="submit">

</form>

</body>
</html>';
}

?>

traitement.php
<?php

session_start();

if (!empty($_POST['nom'])) {

	if (isset($_POST['nom']) && !isset($_POST['stend'])) {
		$_SESSION['nom'] = $_POST['nom'];
	}else {
		echo "tu as oublié ton prénom :)";
	}

	if (isset($_POST['stend']) && isset($_POST['nom'])) {
		setcookie('nom', $_POST['nom'], time() + 365*24*3600, null, null, false, true); 

		$_SESSION['nom'] = $_COOKIE['nom'];
	}

	header('location: suite.php');
}else {
	echo "FAUX!";
}

?>

suite.php
<?php

session_start();

echo "salut " . $_SESSION['nom'] . "<br><br>";

echo 'Bouton déconnexion : <a href="deco.php"><input type="submit" value="déconnexion"></a>';

?>

deco.php
<?php

session_start();
session_destroy();
setcookie('nom', $_POST['nom'], time(), null, null, false, true); 

header('location: index.php');

?>
Auriez vous une idée ?

Je vous remerci d'avance :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 juil. 2016, 23:59

Bonjour,

C'est normal, la fonction setcookie() demande la création d'un cookie qui sera visible _au prochain chargement de la page_
http://php.net/manual/en/function.setcookie.php

Si tu veux afficher directement le contenu, utilise une variable suite à ton setcookie en lui affectant la valeur que tu as mise dans ton cookie.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

04 juil. 2016, 12:20

Donc ces à dire que je dois faire :
<?php

session_start();

if (!empty($_POST['nom'])) {

	if (isset($_POST['nom']) && !isset($_POST['stend'])) {
		$_SESSION['nom'] = $_POST['nom'];
	}else {
		echo "tu as oublié ton prénom :)";
	}

	if (isset($_POST['stend']) && isset($_POST['nom'])) {
		setcookie('nom', $_POST['nom'], time() + 365*24*3600, null, null, false, true); 
		$contenu_cookie = $_POST['nom'];

		$_SESSION['nom'] = $contenu_cookie;
	}

	header('location: suite.php');
}else {
	echo "FAUX!";
}

?>
Quelque chose comme ça non ?

Je te remercie de ta réponse :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 juil. 2016, 13:33

salut,

tu as pas mal de chose redondante dans ton code.
tu commences pas if(!empty($_POST['nom']) tu sais donc que l'index existe dans $_POST et qu'il n'est pas vide. => pas besoin de rajouter les isset($_POST['nom'])
ensuite le second if c'est le else du premier (tu t'en rends mieux compte si tu vire les isset($_POST['nom'] inutile).
du coup tu ne set le cookie que si $_POST['stend'] existe.

a priori ton code pourrait se réduire à ceci
if (!empty($_POST['nom'])) {
    $_SESSION['nom'] = $_POST['nom'];
    if (isset($_POST['stend'])) {
        echo 'tu as oublié ton prénom :)';
        setcookie('nom', $_POST['nom'], time() + 365 * 24 * 3600, null, null, false, true);
    }
    header('location: suite.php');
} else {
    echo 'tu as oublié ton prénom :)';
}
ceci dit "stend" ce n'est pas parlant et je ne sais pas a quoi cela sert.
au vu du code je comprend que tu souhaite mettre en cookie le nom et cela tu le fait si l'info est dans le formulaire.

Pour le coté logique de la chose, il est inutile de mettre le nom en cookie et en session (je sais que cela est a but didactique mais quand même ;) ).

Dernière chose : tu n'as pas besoin de passer par des variables intermédiaire, cela n'aide pas forcément à la compréhension et au pire encombre la mémoire pour rien ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 10 Messages

04 juil. 2016, 14:43

Merci beaucoup pour ta réponse moogli j'ai graçe à toi compris mes erreurs :)

Bonne journée :)