Page 1 sur 3

les cookies et les formulaires

Posté : 15 nov. 2011, 03:40
par toffu
Bonsoir,

J'aurais besoin d'un petit coup de pouce.
J'ai un formulaire et je veux le valider champ par champ (c'est à dire si champ1 est rempli j'affiche le champ2), et pour cela je voudrais stocker le champ1 par le biais de cookie.

Voici une ébauche de mon code : http://pastebin.com/TUq12Rdm

En fouillant un peu sur le net j'ai trouvé qu'il faudrait que j'utilise quelque chose du genre :

<?php
setcookie('champ1', $_POST['champ1']);
?>
mais je me noie un peu là, je sais pas trop comment faire, pourriez vous m'aiguiller ?

Cordialement,

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 08:29
par moogli
Salut,

Je te conseil plutôt d'utiliser les sessions. Une sessions va te permettre de garder ces infos sur le serveur et de les employer quand tu voudra.
http://www.lephpfacile.com/cours/18-les-sessions

@+

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 11:55
par toffu
Enfaite j’apprends le php et j'aimerais donc savoir également utiliser les cookies, je passerais ensuite aux sessions.

Cordialement,

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 12:22
par zeus
Dans ce cas, trouve un autre cas d'utilisation pour découvrir les cookies ;)
Par exemple, lors de la connexion d'un membre, stocke dans un cookie s'il désire être reconnecté automatiquement ou non.

Mais utiliser un mauvais exemple pour découvrir quelque chose est le meilleur moyen de reproduire cette erreur plus tard.

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 12:29
par toffu
Je suit les exercices que mon collègue me donne, je pensais que c'était une bonne chose de vouloir faire ceci avec les cookies.

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 12:38
par zeus
Comprends que les cookies sont stockés sur le poste client.
Il est donc extrêmement facile de modifier les valeurs enregistrées pour toute personne qui a quelques connaissances.

Comme dit plus haut, mémoriser des données d'une page sur l'autre, c'est le travail des sessions, puisqu'elles sont stockées sur le serveur, et donc inaccessible par le client. Il n'a accès qu'au cookie de session, mais il ne peut pas en faire grand chose pour modifier les valeurs que tu y a stocké.

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 12:42
par toffu
ok d'accord je comprend tout à fait, je vais donc utiliser les "session" pour réaliser ce formulaire, je vais bosser dessus et si jamais j'ai un problème je me retournerais vers vous.

Cordialement,

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 21:19
par toffu
j'ai mon formateur qui a insisté quand même donc je les fais et voilà ce que cela donne : http://pastebin.com/1BdrNfeB
et j'ai quelques truc qui ne fonctionne pas encore donc j'aurais besoin de votre avis.
Cela fonctionne mais j'ai un décallage d'affichage donc je pense avoir un problème d'exécution de mes cookies.

Cordialement

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 21:37
par moogli
C bien le merdier ton code la ^^

Les fonctions nom et prénom double la déclaration du html, body etc.

Tu affiche dès le début le doctype et le head. Tu ne pourra envoyer de cookie après.
Regarde bien la doc c'est expliqué ;) (cela est du au fait que le cookie est envoyé avec l'entête et que quand tu affi hé l'entête est envoyée donc finis le setcoookie.

En règle général la validation des formulaires se fait au début du fichier avant tout affichage.

Si tu souhaite garder tes fonctions vire au moins tout ce qui est en double (body, fo etc etc).

Quand au var_dump($_COOKIE); s'il est en décalage avec ce que tu souhaite c'est que tu ne peux pas lire aussitôt le cookie que tu viens de placer mais à la page d'après.

Quand reste ok contraire technique mais faut pas abuser ^^

Modifie aussi ton niveau de repport d'erreur à E_ALL | E_STRICT dans ton php.ini


@+

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 22:25
par toffu
ouais je sais c'est galère ...

mais vu comment est foutu mon code les cookies s'affichent quand même mais je sais, j'ai lu la doc sur les cookies il faut les mettre avant tout html et même avant le doctype. J'ai corrigé quelques truc mais j'ai gardé mes fonctions. Mon var dump c'est juste pour moi voir comment le code réagit.
Les infos que je récupère je dois les mettre dans un tableau mais le problème pour que tout s'affiche je dois actualiser ma page, à cause du décalage, comment je pourrais faire pour remédier cela ?

Cordialement,

et je vous remercie beaucoup de m'aider

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 23:46
par moogli
comment je pourrais faire pour remédier cela ?
ben la si tu veux pas rafraichir les pages reste 4 lettres AJAX :)

bon après un formulaire sur 4 pages pour 3 champs c'est quand même tordu :mrgreen:


@+

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 23:48
par laurents
Pour que l'affichage des cookies soit correct, il doit être fait dans une autre page que celle où il sont positionnés ; mon idée n'est peut-être pas bonne, mais ça vaut le coup d'essayer : tu mets l'affichage des cookies dans une page "aff_cookies.php" et dans celle où il y a les "setcookie", tu l'intègres via une iframe ; donc visuellement, ce sera sur la même page, mais physiquement non.

Re: les cookies et les formulaires

Posté : 15 nov. 2011, 23:52
par toffu
je dois le faire que en php, et puis tout sur la même page !! sa va me rendre fou, je comprend pas comment c'est possible...

Re: les cookies et les formulaires

Posté : 16 nov. 2011, 00:28
par laurents
Pour tout faire sur la même page et placer des "setcookie" après des affichages, utilise une bufférisation de la sortie et pour avoir un affichage à jour des cookies, mémorise la valeur de ceux-ci dans des variables php ; par exemple :
setcookie("Mon_cookie", $value, time()+3600); 
$val_cookie_mon_cookie=$value;
et quand tu veux afficher leur valeur, tu affiches la variable que tu as créée.

Re: les cookies et les formulaires

Posté : 16 nov. 2011, 00:40
par Aureusms
J'ai déjà fais cela en tableau. Prends ce code pour commencer :
<?php
$tabChamp = array ("champ1", "champ2", "champ3");

if (!empty($_POST) && $_POST['formulaire']== 'formulaireChampMultiple')
{
	$tabChampPoste = array();
	foreach ($_POST as $cle => $valeur)
	{		
		if (preg_match ('#^(champ)([0-9]{1,2})$#',$cle,$tabNumeroChamp))
		{
			$tabChampPoste[] = $tabNumeroChamp[2];			
		}		
	}
	if (!empty($tabChampPoste) && is_array($tabChampPoste))
		sort ($tabChampPoste);
	$numeroDernierChampPoste = $tabChampPoste[count($tabChampPoste)-1];
}

if (isset($numeroDernierChampPoste) && $numeroDernierChampPoste == count($tabChamp))
{
	?>
	<p>Tout le formulaire a été posté. Son contenu : </p>
	<table border="1">
		<tr>
			<th style="padding: 5px;">Clé</th>
			<th style="padding: 5px;">Valeur</th>
		</tr>
	<?php
	foreach ($_POST as $cle => $valeur)
	{
		if ($cle == "formulaire")
			continue;
		?>
		<tr>
			<td style="padding: 5px;"><?php echo $cle; ?></td>
			<td style="padding: 5px;"><?php echo $valeur; ?></td>
		</tr>
		<?php
	}
	?>
	</table>
	<?php
}
else
{
	?>
	<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" >
		<input type="hidden" name="formulaire" value="formulaireChampMultiple"  />
		<?php
		if (!empty($numeroDernierChampPoste))
			$numeroFinal = $numeroDernierChampPoste+1;
		else
			$numeroFinal = 1;
		for ($i=0; $i<$numeroFinal;$i++)
		{
			$name = $tabChamp[$i];
			?>
			<p>
				<label>Champ : <?php echo substr($name,-1,1); ?>&nbsp;		
					<input type="text" name="<?php echo $tabChamp[$i]; ?>" value="<?php echo (!empty($_POST[$name])) ? $_POST[$name] : ""; ?>" />
				</label>
			</p>
			<?php
		}
		?>
		<input type="submit" value="envoyer" />
	</form>
	<?php
	}

?>