les cookies et les formulaires

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 : les cookies et les formulaires

Re: les cookies et les formulaires

par laurents » 16 nov. 2011, 20:13

je ne comprend pas les $fonc
Je reconnais n'avoir jamais fait ça non plus, mais voilà ce que j'ai compris :
  • on affecte un nom de fonction : $fonc='une_fonction',
  • on exécute la fonction : echo $fonc;
Et ces 2 lignes reviennent au même que : une_fonction();

et j'avais commencé à répondre à Moogli, mais n'ai pas eu le temps de finir :

2/ d'accord que une suite de elseif ou un switch, ça revient au même, mais dans tous les, cas un seul cas est exécuté, donc un seul "setcookie" au lieu de 3 ; c'est ça que je trouve bizarre ;

1/ que le "setcookie" soit dans la même page, OK, mais je parlais de l'affichage de sa valeur qui, lui, me semble être à 3 endroits, dont un dans une autre page

Re: les cookies et les formulaires

par toffu » 16 nov. 2011, 19:58

j'ai repris le code pour ma part et je l'ai déjà mieux compris mais je ne comprend pas les $fonc ?

Re: les cookies et les formulaires

par moogli » 16 nov. 2011, 18:25

2/ ben j'aurais très pu mettre un switchou juste 3 if, c'est juste que j'ai repris sont code

1/ le setcookie est toujours dans la même page d'ailleurs tout ce fait dans le même fichier.

Le but c'est pas d'afficher les trucs les un après les autres, et si c'était le cas on ferais un echo $_POST['truc']; (+/- un htmlentities).

le tout c'est d'avoir à la fin les 3 valeurs

@+

Re: les cookies et les formulaires

par laurents » 16 nov. 2011, 17:45

mais par contre j'ai pas tout compris dans le code
Moi non plus (et stealth35 dirait "pas étonnant" :mrgreen: (je souris, mais c'est jaune)), mais c'est pas le but. Par contre, si tu veux bien, quelques questions (pour améliorer ma compréhension) :
d'abord, comme on le sait, pour que l'affichage de la valeur des cookies soit correcte, il faut le faire dans une autre page que celle qui contient les "setcookie", or là (si j'ai bien compris) tu l'as mis 3 fois, dont 2 fois dans la page courante : là où il y a le var_dump($_COOKIE);, la fonction my_array() et la redirection (header('Location: toffu.php?step=final');). Pourquoi ?
et 2e question : dans
if (isset($_POST['savePrenom'])){
...
} elseif (isset($_POST['saveNom'])){
...
} elseif (isset($_POST['savePromo'])){
...
}
on ne va passer, au plus, que dans une seule des 3 branches, donc positionner, au plus, un seul des 3 cookies, alors qu'il existe bien le cas où il faut positionner les 3 cookies...Explication ?

Re: les cookies et les formulaires

par toffu » 16 nov. 2011, 16:44

merci tu es mon sauveur :D

mais par contre j'ai pas tout compris dans le code :s

Re: les cookies et les formulaires

par moogli » 16 nov. 2011, 15:59

<?php

if (isset($_GET['butIEatedIt'])){
        setcookie("prenom", '', time()-3600);
        setcookie("nom", '', time()-3600);
        setcookie("promo", '', time()-3600);
}
/* traitement des données */
if (!empty($_POST))
{
       if (isset($_POST['savePrenom'])){
                if (!empty($_POST['prenom'])){
                       setcookie("prenom", $_POST['prenom'], time()+3600);
					   $val_cookie_prenom=$_POST['prenom'];
						$fonc = 'my_nom';
               }
        }
        elseif (isset($_POST['saveNom'])){
				if (!empty($_POST['nom'])){
                setcookie("nom", $_POST['nom'], time()+3600);
				$val_cookie_nom=$_POST['nom'];
					$fonc = 'my_promo';
                }
        }
        elseif (isset($_POST['savePromo'])){
                if (!empty($_POST['promo'])){
                       setcookie("promo", $_POST['promo'], time()+3600);
					   $val_cookie_promo=$_POST['promo'];
                        header('Location: toffu.php?step=final');
						// la faut prévoir une fonction pour afficher le resultat ^^
                }
        }
		else{
			$fonc = 'my_prenom';
		}
}
if (isset($_GET['step']) && $_GET['step'] == 'final') $fonc = 'my_array';
?>
<!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>Exercice 1</title>
        </head>
<body>
        <?php
       echo '<pre>';
	   var_dump($_COOKIE);
	   echo '</pre>';
function my_prenom()
{
        ?>
                <table>
                        <form method="post" action="" >
                                <tr>
                                        <td>prenom</td>
                                        <td>
                                        <input type="text" name="prenom" value=""/>
                                        </td>
                                </tr>
                                <tr>
                                        <td>
                                        <input type="submit" name="savePrenom" value="suivant"/>
                                        </td>
                                </tr>
                       </form>
                </table>
<?php
}
function my_nom()
{
?>
                <table>
                       <form method="post" action="" >
                                <tr>
                                        <td>nom</td>
                                        <td>
                                        <input type="text" name="nom" value=""/>
                                        </td>
                                </tr>
                                <tr>
                                        <td>
                                       <input type="submit" name="saveNom" value="suivant"/>
                                        </td>
                                </tr>
                        </form>
                </table>
<?php
}
function my_promo()
{
?>
                <table>
                        <form method="post" action="" >
                               <tr>
                                        <td>promo</td>
                                        <td>
                                        <input type="text" name="promo" value=""/>
                                        </td>
                                </tr>
                               <tr>
                                       <td>
                                       <input type="submit" name="savePromo" value="suivant"/>
                                        </td>
                                </tr>
                        </form>
                </table>
      
<?php
}

function my_array()
{
?>      
<table>
        <tr>
                <td>
                        <?php
                        echo $_COOKIE['prenom'];
                        ?>
                </td>
        </tr>
        <tr>
                <td>
                        <?php
                        echo $_COOKIE['nom'];
                        ?>
                </td>
        </tr>
        <tr>
                <td>
                        <?php
                        echo $_COOKIE['promo'];
                        ?>
                </td>
        </tr>
        <tr>
                <td>
                        <a href="testexos2.php?butIEatedIt">Recommencer</a>
                </td>
        </tr>
</table>
<?php
}
if (isset ($fonc)) 
echo $fonc();
else 
echo my_prenom();

?>
</body>
</html>
je ne sais pas comment fonctionne ton formateur mais le miens il préconise des boite de bonbon en récompense :mrgreen:

code testé et approuvé par moi, la redirection est presque transparente ^^ :mrgreen: :mrgreen:

@+

Re: les cookies et les formulaires

par toffu » 16 nov. 2011, 14:48

merci moogli mais je n'arrive pas à te suivre, j'ai rajouté cela à mon formulaire tout en haut :

Code : Tout sélectionner

<?php /* traitement du formulaire*/ if (isset($_POST['prenom'])) { } if (isset($_POST['nom'])){ } if (isset($_POST['promo'])){ } ?>
mais je me doute que ce soit ce qu'il faut faire, tu veux dire que enfaite j'ai juste besoin de mettre cette partie :

Code : Tout sélectionner

<?php } /* traitement des données */ if (!empty($_POST)) { if (isset($_POST['savePrenom'])){ if (!empty($_POST['prenom'])){ setcookie("prenom", $_POST['prenom'], time()+3600); $val_cookie_prenom=$_POST['prenom']; my_nom(); } } elseif (isset($_POST['saveNom'])){ if (!empty($_POST['nom'])){ setcookie("nom", $_POST['nom'], time()+3600); $val_cookie_nom=$_POST['nom']; my_promo(); } } elseif (isset($_POST['savePromo'])){ if (!empty($_POST['promo'])){ setcookie("promo", $_POST['promo'], time()+3600); $val_cookie_promo=$_POST['promo']; my_array($_COOKIE); } } } else { my_prenom(); } ?>
tout en haut de ma page ?

Cordialement,

Re: les cookies et les formulaires

par moogli » 16 nov. 2011, 14:26

Oui, mais sachant que tout doit être en PHP (donc AJAX, ça va pas) et que tout doit être dans un seul fichier (ce qui élimine une iframe), je ne vois pas d'autre solution...
c'est pour tant simple et logique
<?php
/* traitement du formulaire*/
if (isset($_POST['truc'])) {
// etc etc
}
?>
<html>
<!-- Affichage des formulaires en fonction des choix fait avant
utilisation de isset / empty pour l'affichage
->
</html>
Pas besoin de buffeur, et le problème reste le même, il renvoie avec un header sur la page avec un paramètre dans l'url, je ne vois pas comment faire autrement

@+

Re: les cookies et les formulaires

par toffu » 16 nov. 2011, 13:40

j'ai effectué ce que tu m'avais donné comme solution mais cela ne fonctionne pas...

voici mon code à l'heure actuelle : http://pastebin.com/p62XM1mx

Cordialement,

Re: les cookies et les formulaires

par laurents » 16 nov. 2011, 13:25

franchement y a une solution simple et propre plutôt que d'utiliser un buffeur ?
Oui, mais sachant que tout doit être en PHP (donc AJAX, ça va pas) et que tout doit être dans un seul fichier (ce qui élimine une iframe), je ne vois pas d'autre solution...

Re: les cookies et les formulaires

par moogli » 16 nov. 2011, 12:02

ob_start() et ob_end_flush() :/

franchement y a une solution simple et propre plutôt que d'utiliser un buffeur ?
et les iframe bof, au pire un header, mais ce système est forcément voué à un rechargement, vu qu'il n'est pas adapté :mrgreen:

sinon tu fait ça comme un grand en ajax, pour la transition entre chaque page, ça devrait le faire je pense (pas testé).


@+

Re: les cookies et les formulaires

par laurents » 16 nov. 2011, 11:42

j'ai toujours un retard comme toute a l'heure, lors de l'affichage
Normal, vu que l'affichage n'est correct que sur une autre page (ou après un refresh :wink: ). Pour éviter ça, suis le conseil que je donnais hier à 22h28...

Re: les cookies et les formulaires

par toffu » 16 nov. 2011, 01:42

merci beaucoup d'avoir pris le temps de reprendre mon code, j'ai regardé les modifications apportées mais j'ai toujours le même problème, j'ai toujours un retard comme toute a l'heure, lors de l'affichage

Re: les cookies et les formulaires

par laurents » 16 nov. 2011, 01:32

Voilà comment je ferais ; j'ai viré des balises <html> et <body> qui me semblaient inutiles, mais en ai mis là où ça me semble nécessaire.
1.<?php
ob_start(); 
2.if (isset($_GET['butIEatedIt'])){
3.        setcookie("prenom", '', time()-3600);
4.        setcookie("nom", '', time()-3600);
5.        setcookie("promo", '', time()-3600);
6.}
7.?>
8.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
9.<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
10.        <head>
11.                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
12.                <title>Exercice 1</title>
13.        </head>
<body>
14.        <?php
15.        var_dump($_COOKIE);
16.function my_prenom()
17.{
18.        ?>
19. 
20. 21.                <table>
22.                        <form method="post" action="iMadeYouACookie.php" >
23.                                <tr>
24.                                        <td>prenom</td>
25.                                        <td>
26.                                        <input type="text" name="prenom" value=""/>
27.                                        </td>
28.                                </tr>
29.                                <tr>
30.                                        <td>
31.                                        <input type="submit" name="savePrenom" value="suivant"/>
32.                                        </td>
33.                                </tr>
34.                        </form>
35.                </table>
36.   38.<?php
39.}
40.function my_nom()
41.{
42.?>
45.                <table>
46.                        <form method="post" action="iMadeYouACookie.php" >
47.                                <tr>
48.                                        <td>nom</td>
49.                                        <td>
50.                                        <input type="text" name="nom" value=""/>
51.                                        </td>
52.                                </tr>
53.                                <tr>
54.                                        <td>
55.                                        <input type="submit" name="saveNom" value="suivant"/>
56.                                        </td>
57.                                </tr>
58.                        </form>
59.                </table>
62.<?php
63.}
64.function my_promo()
65.{
66.?>
69.                <table>
70.                        <form method="post" action="iMadeYouACookie.php" >
71.                                <tr>
72.                                        <td>promo</td>
73.                                        <td>
74.                                        <input type="text" name="promo" value=""/>
75.                                        </td>
76.                                </tr>
77.                                <tr>
78.                                        <td>
79.                                        <input type="submit" name="savePromo" value="suivant"/>
80.                                        </td>
81.                                </tr>
82.                        </form>
83.                </table>
84.      
86.<?php
87.}
88. 
89.function my_array($_COOKIE)
90.{
91.?>      
92.<table>
93.        <tr>
94.                <td>
95.                        <?php 
96.                        echo $_COOKIE['prenom'];
97.                        ?>
98.                </td>
99.        </tr>
100.        <tr>
101.                <td>
102.                        <?php
103.                        echo $_COOKIE['nom'];
104.                        ?>
105.                </td>
106.        </tr>
107.        <tr>
108.                <td>
109.                        <?php
110.                        echo $_COOKIE['promo'];
111.                        ?>
112.                </td>
113.        </tr>
114.        <tr>
115.                <td>
116.                        <a href="iMadeYouACookie.php?butIEatedIt">Recommencer</a>
117.                </td>
118.        </tr>
119.</table>
120.<?php
121.}
122. 
123./* traitement des données */
124.if (!empty($_POST))
125.{
126.        if (isset($_POST['savePrenom'])){
127.                if (!empty($_POST['prenom'])){
128.                        setcookie("prenom", $_POST['prenom'], time()+3600);
129.                my_nom();
130.                }
131.        }
132.        elseif (isset($_POST['saveNom'])){
133.if (!empty($_POST['nom'])){
134.                setcookie("nom", $_POST['nom'], time()+3600);
135.                my_promo();
136.                }
137.        }
138.        elseif (isset($_POST['savePromo'])){
139.                if (!empty($_POST['promo'])){
140.                        setcookie("promo", $_POST['promo'], time()+3600);
141.                        my_array($_COOKIE);
142.                }
143.        }
144.}
145.else
146. 
147.{
148.my_prenom();
149.}
ob_end_flush();
150.?>
</body>
</html>

Re: les cookies et les formulaires

par toffu » 16 nov. 2011, 01:09

oula merci beaucoup de ton aide, mais la je suis complétement perdu je ne vois pas du tout comment insérer cela dans mon code :?