Compteur persistent

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 : Compteur persistent

par FredoMkb » 11 déc. 2006, 07:30

Bonjour à tous :)

Merci beaucoup pour vos contributions et désolé pour cette réponse tardive...

En fait, j'ai bien pu avancer sur mon projet ce week-end, et j'ai finalement trouvé une solution, avec les "sessions" bien sûr, et qui a l'air de bien fonctionner...

J'aurais voulu poster ici les codes concernés, afin que ça puisse éventuellement servir à d'autres, mais, maleheureusment, les parties intéressantes à cet échange sont noyées dans un ensemble bien plus important qui n'aurait, quant à lui, aucune pertinence dans cette discussion...

Malgré tout, voici un petit bout de code du compteur utilisé, mais, comme vous le verrais, c'est un peu stérile sorti de son contexte :
	// Initialisation d'une session pour compter le nombre de tentatives
	$suiteOk = 0;
	session_start(); // Demarrage de la session
	if (isset($_SESSION['nbr'])) {
		$_SESSION['nbr'] ++;  // Iteration du compteur
		if ($_SESSION['nbr'] >= $limite) { $suiteOk = 1; }
	} else {
		$_SESSION['nbr'] = 1; // Initialisation du compteur
	}
Enfin, je tiens à vous remercier tous pour votre aide précieuse, sans laquelle je n'aurai certainement pas pu aboutir ce projet !

Encore merci et à bientôt :)

par Ryle » 09 déc. 2006, 12:38

En fait ta fonction de retour en javascript est très hasardeuse pour l'usage que tu en as. En effet, cela va dépendre également de la configuration du cache du navigateur du client, et il se peut que son formulaire soit vide lorsqu'il revient dessus avec ou sans le session_start().

Le plus simple dans ton cas, maintenant que tu as une jolie session, serait de récupérer les données envoyées par le formulaire en cas d'erreur, de les passer en session (tu peux très bien coller directement le tableau $_POST (ou $_GET) que tu reçois dans une variable de session) et les exploiter lorsque tu reviens sur ton formulaire pour spécifier des valeurs par défaut :)

côté page d'erreur :
<?php $_SESSION['post'] = $_POST; ?>
côté formulaire :
<?php
$valeurDuChampToto = isSet($_SESSION['post']['toto']) ? $_SESSION['post']['toto'] : "" ; // valeur vide par défaut
?>
<input type="text" name="toto" value="<?php echo $valeurDuChampToto; ?>" />

par FredoMkb » 09 déc. 2006, 11:11

Bonjour à tous et merci pour vos réponses :)
Tu renvois 1 ou 0. Par conséquent, ça ne poura afficher une autre valeur
Oui Ouaibou, mais dans mon code de travail j'ai bien quelques "echo" pour bien visualiser la valeur du compteur au fur et à mesure des traitements... seulement, dans un souci de clareté, j'ai posté ici une version nettoyée du code... mais, en l'état, tu as raison, ce n'est pas très clair... j'aurais peut-être dû indiquer ce détail dans mes explications... je ferai attention désormais à bien clarifier ces détails importants pour la compréhension de tous... merci :)
Tu as bien un session_start() dans chacune de tes pages pour démarrer la session ? (chacune de celles où tu as besoin de la session du moins :))

Sans lui tu ne pourras pas utiliser pleinement la variable $_SESSION d'une page à l'autre :)
Merci Ryle, c'était exactement mon erreur... bien vu ! :)

En fait, étant très novice avec ces techniques, je pensais qu'une fois une session ouverte, elle le restée tant qu'on ne la fermez pas... je n'avais pas compris qu'il fallait établir une connexion à la session à chaque nouvelle page... merci Ryle pour cette remarque qui m'a permis d'avancer sur mon projet (voir explications plus bas)...
Sinon ton traitement gère-t-il correctement le résultat de ta fonction ? elle renvoi 1 ou vrai si le compteur est strictement supérieur à 3, et 0/faux sinon... est ce bien ce que tu attends ?
Oui, c'est bien ça que je cherche à obtenir comme résultat... pas trop de soucis de ce côté là.

Donc, en appliquant un "session_start()" tout au début du fichier Php, le compteur s'incrémente bien désormais, et c'est plutôt une bonne nouvelle ;)

Seulement, j'ai maintenant un autre soucis, qui complique un peu mon projet, je m'explique :

1. Lorsqu'on valide le formulaire, si tous les champs ont bien été remplis, on passe à la suite des traitements ;

2. Mais lorsqu'un champ comporte des données erronnées, une page comportant un message d'avertissment s'affiche, proposant un lien "retour" qui permet de retourner à la page formulaire sans perdre les différentes informations saisies afin de pouvoir facilement corriger les erreurs existantes ;

3. Le lien de retour est un simple petit java-script qui affiche la page précédente issue de l'historique du navigateur :

Code : Tout sélectionner

<a href="javascript: history.go(-1)">blabla</a>
4. Le problème, donc, est que la présence du "session_start()" au début du code, a pour effet le rechargement entier de la page, perdant du coup toutes les données saisies par l'utilisateur, et l'obligeant à tout resaisir... ce qui est bien rageant pour être honnête :(

Alors, la question qui s'impose :

Comment faire pour que le retour à la page précédente ne force pas le rechargement complèt de la page effaçant du même coup toute les données déjà saisies ?

Autrement dit, comment utiliser le "session_start()" sans perdre les données déja fournies par l'utilisateur ?

Merci en tout cas pour votre aide, elle m'a déjà permis d'avancer considérablement sur mon projet... a+ :)

PS. Je précise que ce projet consiste à ajouter une petite fonctionnalité de sécurité à un script Php issue d'une application Web très connue...

par Ryle » 09 déc. 2006, 00:36

Tu as bien un session_start() dans chacune de tes pages pour démarrer la session ? (chacune de celles où tu as besoin de la session du moins :))

Sans lui tu ne pourras pas utiliser pleinement la variable $_SESSION d'une page à l'autre :)

Sinon ton traitement gère-t-il correctement le résultat de ta fonction ? elle renvoi 1 ou vrai si le compteur est strictement supérieur à 3, et 0/faux sinon... est ce bien ce que tu attends ?

par Ouaibou » 09 déc. 2006, 00:36

---

par FredoMkb » 08 déc. 2006, 23:16

Re...

Bon, j'ai lu le tuto, très intéressant :), et voilà ce que j'ai fait :
function compteur($limite = 3) {
	if (!isset($_SESSION['nbr'])) { $_SESSION['nbr'] = 0; }
	$_SESSION['nbr'] ++;
	if ($_SESSION['nbr'] > $limite) { 
		return 1; 
	} else { 
		return 0; 
	}
}
Bon bein... ça fonctionne... mais... ça ne marche pas :(

Je m'explique...

Lorsqu'on clique sur le bouton de validation du formulaire, ça affiche une nouvelle page si une valeur est mal entrée (page Html générée par le même fichier Php), en réiterant la même opération, le compteur n'est pas augmenté, il reste toujours à 1... du coup je ne peux vérifier le nombre de fois que le formulaire a été validé...

Voilà... je dois certainement mal m'y prendre... mais là je bloque, j'aurai besoin d'un petit coup de pouce... :priere:

Merci :)

par FredoMkb » 08 déc. 2006, 21:35

Tu pourrais explorer les sessions : en enregistrant le compte dans une variable de session, tu règlerais le problème. ...
Merci beaucoup pour ta réponse rapide... je regarde tout ça et reviens en cas de besoin 8)

Encore merci :)

par Cyrano » 08 déc. 2006, 21:30

Tu pourrais explorer les sessions : en enregistrant le compte dans une variable de session, tu règlerais le problème. Fais une petite recherche sur le forum, il y a de nombreux sujet qui abordent la question des sessions et éventuellement il y a même un tuto sur les sessions sur le site

Compteur persistent

par FredoMkb » 08 déc. 2006, 21:24

Bonjour à tous :)

Voilà, j'ai un petit formulaire Html, et j'aimerai pouvoir compter le nombre de fois que le formulaire est validé...

Le truc est que lorsque le formulaire est mal rempli, une autre page apparait indiquant à l'utilisateur de revenir en arrière et de corriger sa saisie... seulement, j'aimerais limiter le nombre de tentatives de validation à 3 par exemple...

Quelqu'un aurait une piste pour réaliser ça ?

J'ai fait une petite fonction "compteur" :
function compteur($limite) {
	static $nbr = 0;
	$nbr ++;
	if ($nbr > $limite) { 
		return 1; 
	} else { 
		return 0; 
	}
}
Évidemment, ça ne fonctionne pas puisque la valeur du compteur n'est pas persistente... comment faire ? :roll:

Merci à tous :)