les cookies et les formulaires

toffu
Invité n'ayant pas de compte PHPfrance

16 nov. 2011, 00:46

une bufférisation de la sortie je viens de voir la doc sa m'inspire pas trop, je comprend pas vraiment sinon j'ai fais comme vous m'avez dis et voilà ce que cela donne : http://pastebin.com/LsTHrveM
mais je ne comprend vraiment pas la bufférisaiton de la sortie...

Eléphant du PHP | 83 Messages

16 nov. 2011, 00:49

Quel rapport avec le besoin de Toffu Aureusmus ? Dans ton code, il n'y a pas de cookies...

toffu
Invité n'ayant pas de compte PHPfrance

16 nov. 2011, 00:51

oui je ne comprend pas non plus le rapport ton code fonctionne parfaitement mais il n'utilise pas de cookie.

Comment dois-je faire maintenant laurents, avec la bufférisation de la sortie ?

ViPHP
ViPHP | 1996 Messages

16 nov. 2011, 00:59

t'a pas besoin de cookies pour faire ce que tu veux faire. C'est une perte de temps.
Si tu veux ou si tu es vraiment obligé de les utiliser, remplace le tableau $tabChampPoste par le tableau $_COOKIE["nomCookie"] mais si cela ne sert à rien. Le tableau $_COOKIE["nomCookie"] est généré automatiquement dès que setcookie est appelé. Pense à l’appeler en tout début de script avant toutes sorties graphiques ou envoi d'header.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 83 Messages

16 nov. 2011, 01:03

En début de fichier :
<?php ob_start(); ?>
puis ton code avec des affichages, les "setcookie" là où tu veux et à la fin du fichier
<?php ob_end_flush(); ?>
je l'ai copié sur un de mes codes, donc c'est un principe qui marche ; l'idée, c'est que les sorties sont bufférisées et émises seulement par ob_end_flush()

toffu
Invité n'ayant pas de compte PHPfrance

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 :?

Eléphant du PHP | 83 Messages

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>

toffu
Invité n'ayant pas de compte PHPfrance

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

Eléphant du PHP | 83 Messages

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...

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

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é).


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

Eléphant du PHP | 83 Messages

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...

toffu
Invité n'ayant pas de compte PHPfrance

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,

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

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

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

toffu
Invité n'ayant pas de compte PHPfrance

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,

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

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:

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