[PHP] Quelques questions sur architecture et autres...

Quelques questions sur architecture et autres... [PHP] - PHP - Programmation

Marsh Posté le 16-11-2006 à 15:08:45    

Salut!
 
J'ai quelques questions auxquelles je n'ai pas trouvé de réponses claires sur le web:
 
Tout d'abord, comment est "normalement" l'arborescence pour un sondage:
Le sondage est en  <?php include_once("includes/sondage.php" ); ?> dans une div de index.php.
Dans ce fichier, il y a le formulaire du sondage, qui renvois au fichier sondage.inc.php pour mettre a jour les résultats et les afficher.
C'est comme ça qu'on s'y prends de manière générale?
 
D'autre part, j'utilise les pages imbriquées dans index avec par exemple <a href="index.php?page=accueil">.
Lorsque je vais cliquer sur un lien, ça raffraichi la page, donc le sondage avec :s et on peut revoter!
Il y a pas quelque chose qui permet de ne pas recharger la div qui contient le sondage?
 
Si besoin de montrer le site en question, dites le moi mais je veux pas faire de spam.
 
Merci d'avance pour vos réponses!

Reply

Marsh Posté le 16-11-2006 à 15:08:45   

Reply

Marsh Posté le 16-11-2006 à 15:24:55    

tu as 50 façon de faire... la tienne en est une... (la réponse qui sert à rien :D)
..
Maintenant si tu ne veux pas qu'on puisse revoter, claque un cookies par exemple sur le PC client... et s'il est la et bien tu affiche le résultat du vote...
 
ou bien si l'utilisateur est loggé enregsitre quelque part qu'il a répondu au sondage.... ou tu fait un mix des deux.

Reply

Marsh Posté le 16-11-2006 à 16:14:39    

Il faut que j'enregistre et que je vérifie son ip alors.
 
J'ai donc fait un dossier /ip dans lequel je vais stoquer les adressesip.ip de mes visiteurs et je regarde si je les ais déjà enregistré.
 
Je dois me tromper quelque part, ça marche pas!
Voilà le code que j'ai fait:

Code :
  1. if(file_exists("includes/ip/".$_SERVER['REMOTE_ADDR'].".ip" ))
  2. {
  3. echo "vous avez déjà voté";
  4. }
  5. else
  6. {
  7. $fd = fopen("includes/ip/".$_SERVER['REMOTE_ADDR'].".ip", 'w+'); //création du fichier ip
  8. //puis mises à jour du sondage, ça fonctionne bien ça


 
Edit: message d'erreur: Warning: fopen(includes/ip/127.0.0.1.ip): failed to open stream: No such file or directory in c:\documents and settings\laurent\mes documents\sites\tabac\includes\sondage.inc.php on line 9


Message édité par Fused le 16-11-2006 à 16:17:52
Reply

Marsh Posté le 16-11-2006 à 16:19:48    

Oulala!
1-un fichier par ip c'est abusé, penches toi sur sqlite ou fait un fichier unique soit de type ini soit en utilisant un tableau, soit du xml (moi je ferais un tableau pour la rapidité de mise en oeuvre et vu le besoin)
 
2-tu peux pas résumer un utilisateur à une IP, exemple: des utilisateurs derrière le même proxy peuvent avoir la même IP pour plusieurs machines différentes!

Reply

Marsh Posté le 16-11-2006 à 16:22:15    

Je viens de réussir à faire mon truc mais ta remarque est bonne! après vas y avoir gros paquet d'ip!
 
tu peux m'expliquer l'histoire de ton tableau xml? ça m'interesse?

Reply

Marsh Posté le 16-11-2006 à 16:50:02    

D'ou l'usage de cookies...
de plus certain user sont change réguliérement d'adresse IP, comment tu fais dans ces cas la ?
 
Tu crée un tableau en php dont tu stocke la définition dans un fichier (fichier texte ). Et pis tu le mets réguliérement à jour.
 
Pour l'XML... pour stocker juste un avis de vote, c'est un peu gros.. à mon avis

Reply

Marsh Posté le 16-11-2006 à 17:30:07    

Ca marche, mais je vois pas ce que je stocke dans le fichier texte. J'aurais tendance à y mettre l'ip! non je vois pas comment se souvenir de quelqu'un sans ça!

Reply

Marsh Posté le 16-11-2006 à 17:35:22    

une IP n'est pas une façon sûre d'identifier un utilisateur.. et c'est ça le probléme. Je n'ais pas de solution miracle.. cookies ou login pour ajouter un peu d'identification...
 
A la limite @IP, si tu trouve l@IP tu regarde s'il a le cookie.. si oui c'est qu'il a déjà voté... mais bon.. encore une fois se baser sur l'adresse IP n'est pas judicieux.  
 
En même temps ça dépend de l'importance du vote. Si ce n'est qu'une fonctionnalité en plus sans étude statistiques, ou sans valeur, tu peux te contenter de l'IP.(à mon avis)

Reply

Marsh Posté le 16-11-2006 à 18:24:33    

Oui ce n'est pas une étude importante, juste pour faire un peu d'interactivité avec le visiteur.
Je me renseignerai quand même sur les cookies, ça a l'air interessant.

Reply

Marsh Posté le 16-11-2006 à 19:06:09    

J'essaye quand même de finir mon algo!
 

Code :
  1. <?php
  2. include("sondage.inc.php" );
  3. if (ip_existe())          // si il a déjà voté
  4. {
  5.  affiche_resultats();    // résultats direct
  6. }
  7. else
  8. {
  9.  affiche_sondage();   // sinon on affiche mais il n'est pas obligé de voter!
  10.  if il_a_validé_le_formulaire() // c'est clair!
  11.  {
  12.   MAJ();    // maj du sondage
  13.   affiche_resultats(); // pi on affiche
  14.  }
  15. }
  16. ?>


 
voilà, tout me parait bon, un seul truc:
je ne sais pas comment on vérifie qu'il a validé le formulaire ou non!
peut être faudrai mettre une variable qu'on vérifie apres mais je sais pas comment la mettre dans le formulaire.
 
pour info, mon formulaire:
 

Code :
  1. function affiche_sondage()
  2. {
  3. echo'
  4. <form id="formulaire" method="post" action="sondage.php">
  5.  <fieldset>
  6.   <legend>Que fumez vous?</legend>
  7.   <input type="radio" name="choix" id="choix0" value="0" checked> <label for="choix0" >Des cigarettes</label><br>
  8.   <input type="radio" name="choix" id="choix1" value="1"> <label for="choix1">Des roul&eacute;es</label><br>
  9.   <input type="radio" name="choix" id="choix2" value="2"> <label for="choix2">Je suis non fumeur</label><br>
  10.      <div align="center"><input name="submit" type="submit" value="valider"/></div>
  11.  </fieldset>
  12. </form>';
  13. }

Reply

Marsh Posté le 16-11-2006 à 19:06:09   

Reply

Marsh Posté le 16-11-2006 à 21:03:21    

Sur le web, il n'y a strictement aucune manière d'empêcher quelqu'un de voter plusieurs fois. Suffit d'utiliser quelques proxy, et le problèmes de l'ip est reglé. Ou alors fait une déco/reconnexion à chaque fois. Y'a toujours un moyen de voter au moins une dizaine de fois sans trop se faire chier :( Tout ce qu'on peut faire, c'est minimiser la chose...

Reply

Marsh Posté le 16-11-2006 à 21:14:43    

Déjà, le filtre sur IP, c'est mal : ça empêche les gens qui surfent depuis un endroit public (boulot, cyber café, borne wifi publique, etc.) de voter.
Ensuite, les connections perso changent d'IP régulièrement (entre quelques heures à quelques semaines selon les FAI) donc une même personne peut tout à fait voter deux fois depuis le même PC dans un intervalle assez court. Pire, une personne qui n'a pas voté peut récupérer l'IP d'une personne qui a déjà voté, et ne pas pouvoir voter.
 
Il y a deux moyens de fortement limiter les dégats :
- Site sérieux, avec charte stricte, obligeant la création d'un compte contenant des informations nomminatives. Mais bon, c'est pas courrant et on ne peut en aucun cas être sûr qu'il n'y a pas de mutis.
- Site nécessitant un compte avec un abonnement : à moins de payer deux abos, on trouvera pas beaucoup de multis.

Reply

Marsh Posté le 17-11-2006 à 02:40:06    

Tableau tout court, c'est un peu le dada de php donc autant en profiter :)

Reply

Marsh Posté le 17-11-2006 à 11:52:40    

On verra ça après!
 
Je reviens sur mon dernier, post, à la ligne 11 du premier code, comment vérifier que quelqu'un à rempli un formulaire?
 
Sinon la code s'arrête toujours à la ligne 10.

Reply

Marsh Posté le 17-11-2006 à 13:00:19    

et bien tu vérifie tes champs... s'ils son <> '', et bien tu suppose qu'ils sont remplis... nan ?
 
Note : pense aussi à vérifier qu'ils ne sont pas remplis avec autre chose qu'ils ne devraient.. (style vérifie qu'il sont numérique si c'est un chiffre que tu attends etc..)

Reply

Marsh Posté le 17-11-2006 à 13:31:30    

euh je comprends pas :/
ça donnerai quoi sur ça?

Code :
  1. <form id="formulaire" method="post" action="index.php?touc=sondage">
  2.  <fieldset>
  3.   <legend>Que fumez vous?</legend>
  4.   <input type="radio" name="choix" id="choix0" value="0" checked> <label for="choix0">Des cigarettes</label><br>
  5.   <input type="radio" name="choix" id="choix1" value="1"> <label for="choix1">Des roul&eacute;es</label><br>
  6.   <input type="radio" name="choix" id="choix2" value="2"> <label for="choix2">Je suis non fumeur</label><br>
  7.      <div align="center"><input name="submit" type="submit" value="valider"/></div>
  8.  </fieldset>
  9. </form>

Reply

Marsh Posté le 17-11-2006 à 14:33:51    

soit tu le fais en javascript... mais la je ne peux pas t'aider..
soit tu passe par une page qui va traiter ton formulaire en php, pour lequel tu récupére le post, tu fais une boucle while pour tester tous les champs du post, en testant si les champs sont vide (is_null) ou ensuite tu peux utiliser notament les ereg pour filtrer plus finement.

Reply

Marsh Posté le 17-11-2006 à 17:29:53    

je récupere déjà le post via une autre page php mais j'aurais voulu directement revenir à la page de mon algorythme au lieu de passer par une autre page.
 
j'ai pas trop compris ce que tu as expliqué mais je vais chercher voir si je peux faire ça, merci!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed