aidez moi à le coder.. mon système de points.

aidez moi à le coder.. mon système de points. - PHP - Programmation

Marsh Posté le 08-04-2005 à 18:15:29    

bonjour,
 
Je souhaite créer un truc du genre:
 
1. Le visiteur s'inscrit et crée un compte
2. Il a accès à une zone membre, il peut modifier son profil et tout..
3. en surfant sur les pages du sites, ce membre qui dispose d'un compte peut gagner mettons 100 points par jour, 1 par page vu... 100 étant le maximum par jour. au dela, son compteur de point s'arrête. et il peut revenir demain pour en accumuler d'autres, soit passer à: les 100 qu'il avait hier + les 100 qu'il gagne le lendemain. 100 + 100 = 200  :jap:  
4. Le gars à 10000 points, il peut donc telecharger un logiciel dans la logithèque en échange de 5000 points qui lui sont ensuite décrédités.
 
En gros, c'est ce que j'envisage de faire.  :) J'ai pas envie de passer par une plateforme allopass (petit partisant du Libre oblige) ni de proposer mes produits gratuitement (tout travail mérite salaire, ne serait-ce qu'une petite reconnaissance...) --> J'ai donc tout de suite pensé à ce système de point, que je compte bien developper.
 
J'aimerai qu'on fasse un check-up ensemble pour savoir un peu le squelette qu'aurai ce module. Quelles fonctions seront necessaires, comment pourrait se présenter la base de donnée, et comment ces points pourraient être gérés, etc..
 
Je ne vous demande surtout pas de me le coder mais me donner une idée de ce à quoi j'aurai recours: je débute un peu en PHP, j'ai vraiment besoin d'être guidé. Je ne sais pas encore à quels problème je serai confronté c'est pourquoi je désir m'oganiser correctement et efficacement en m'adressant vous.
 
Concernant le 1) et le 2) je pense que je vais largement m'inspirer d'un petit script et le customiser selon mes attentes histoire de gagner de temps (ou bien me debrouiller seul, j'en suis capable, un petit truc avec des sessions et tout ça, bien pro  :love: ) donc il reste le 3)  et le 4) qui me perturbent pas mal.
 
 
J'aimerai aussi faire en sorte que le visiteur non-inscrit ne puisse pas télécharger le produit (mais voir sa fiche quand même...) et qu'un petit message s'affiche pour celui-ci comme quoi il lui suffit de s'incrire bla bla bla...
 
 
MERCI, j'attend votre aimable contribution.  ;)


Message édité par pmusa le 08-04-2005 à 18:19:23
Reply

Marsh Posté le 08-04-2005 à 18:15:29   

Reply

Marsh Posté le 09-04-2005 à 00:57:29    

Et sinon, t'as une question précise ou faut qu'on la devine ?  :whistle:  
Peut-être que si tu posais les problèmes que tu rencontres, on serait utile (ou pas :o)


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 09-04-2005 à 06:44:27    

heu sinon, question bete : 5000 points le download c'est un exemple ou il faut vraiment visiter 5000 pages de ton site pendant 50 jours avant de pouvoir télécharger un truc ?
 
c'est pas que j'aime pas m'inscrire sur un site mais là ...
 
sinon faut voir que si c'est pour décharger ta bande passante, ca va plutot l'augmenter, rapport aux connections sur tes 5000 pages :D
 
conseil: commence par le design de ta base de données pour savoir ce que tu mets dedans, quelles tables, quelles relations ...


---------------
The Rom's, à votre service
Reply

Marsh Posté le 09-04-2005 à 13:35:01    

ouep. en fait vous avez raison. d'aileur j'avais commencé à coder hier déjà après avoir posté.
par contre pour mon systeme de points je suis un peu à la masse, je ne sais pas du tout comment je pourrai gerer ça avec PHP.  :??:  
 
sinon 5000 c'est un exemple hein...   :jap: ... en vrai c'est 50000  :D  
 
 
merci de me donner un petite idée quant à la gestion de ce système de points.

Reply

Marsh Posté le 09-04-2005 à 13:56:50    

Bah une table toute conne.
Exemple après 3 secondes de reflexion :

    pseudo     |    point_total     |    point_journée     |    journée

Quand pseudo visite une page, tu prends la valeur de journée de son pseudo.  
 
Si journée est différente de la date d'aujourd'hui,
  tu remets à zéro point_journée
  tu donne la date d'aujourd'hui dans journée.
 
Si point_journée est inférieur à 100,
  tu incrémentes point_journée  
  tu incrémentes point_total.


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 09-04-2005 à 14:50:31    

merci Master P.  :jap: le schéma me plait bien, je vais procéder ainsi.
je viendrai poser frequemment les probs que je rencontre ici.  :D  
donc ça c'est pépère, c'est du if, par contre pour comparer le champ "journée" je saurai pas du tout comment procéder.  :??: elle doit se presenter comment mas date et sous quelle forme.
pseudo et les points je les met en varchar mais pour "journée" je lui affecte quoi??
 
merci

Reply

Marsh Posté le 09-04-2005 à 18:44:00    

Bah de type INTEGER et comme valeur tu lui donne date("ymd" );
 
Ca facilite les comparaisons pour les > et <.
Et il est impossible que deux "identifiant de jour" soient identiques.


Message édité par dwogsi le 09-04-2005 à 18:49:47

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 09-04-2005 à 20:28:27    

j'ai mis point_journée et point_total en INTEGER aussi, c'est correct?
dans la database ça donne int(11).
 
edit:
euhhh...  journée je l'ai mis de type DATE tout court.  :jap: ça le formatte en Ymd automatique avec 0000-00-00 pour valeur par défaut. je suis bon là?


Message édité par pmusa le 09-04-2005 à 20:30:10
Reply

Marsh Posté le 09-04-2005 à 21:22:16    

je fais comment pour "prendre la valeur de journée de son pseudo" ??
 
je pensais à:
 

Code :
  1. if (isset($_SESSION['pseudo']))
  2. {
  3. mysql_connect("localhost", "pmusa", "passmysql" ); //je me connecte
  4. mysql_select_db("utilisateurs" ); // j'ai tous mes champs dans la table utilisateur (pseudo, pass)
  5. $reponse = mysql_query("SELECT * FROM utilisateurs WHERE pseudo='$_SESSION['pseudo']'" );
  6. $donnees = mysql_fetch_array($reponse);
  7. echo "salut ".$donnees['pseudo']." tu as ".$donnes['point_total']." points! tu peux les echnager contre des telechargements de logiciels etc... blablabla";
  8. if($donnees['journee'] != date(Ymd))
  9. {
  10. $maj = mysql_query("UPDATE utilisateurs SET point_journee='0', journee='date(Ymd)' WHERE pseudo='$_SESSION['pseudo']'";
  11. }
  12. elseif($donnees['point_journee'] < 100)
  13. {
  14. $ajoute = mysql_query("UPDATE utilisateurs SET point_journee+='1', point_total+='1' WHERE pseudo='$_SESSION['pseudo']'";
  15. }
  16. else
  17. {
  18. echo "t'as bouffé tous tes points ajourd'hui tu pourra en recup d'autres demain etc bla bla bla et bla bla lbla...";
  19. }
  20. else
  21. {
  22. echo "inscrivez-vous et profitez de nombreux privilèges en cliquant ici blabla bla lbalablbla bla bla bla bla... :)   ";
  23. mysql_close();
  24. }


 
 
bon voilà ce que je viens de faire depuis vos derniers conseils, sachant que j'ai aussi commencé un formulaire d'inscription avec des sessions que je me permettrai de vous soumettre afin de jouir de votre expérience.  :)  
 
est-ce que c'est correct déjà? et pourrait-on faire plus propre syntaxiquement ou rajouter des trucs, faire plus efficace, performant, pour pas que le gars triche etc...
 
merci à vous.  ;)

Reply

Marsh Posté le 09-04-2005 à 22:52:59    

Code :
  1. <?php
  2. session_start();
  3. include('config.php');
  4. if (isset($_SESSION['pseudo']))
  5. {
  6. $connex = mysql_connect($host, $admin, $mdp);
  7. $select = mysql_select_db($bdd);
  8. $reponse = mysql_query("SELECT * FROM utilisateur WHERE pseudo='".$_SESSION['pseudo']."'" );
  9. $donnees = mysql_fetch_array($reponse);
  10. echo "salut <b>".$donnees['pseudo']."</b> tu as <b>".$donnees['point_total']."</b> points! tu peux les echnager contre des telechargements de logiciels etc... blablabla";
  11. if($donnees['journee'] != date(Ymd))
  12. { //attention ici ça semble plenter! :,,(
  13. $maj = mysql_query("UPDATE utilisateurs SET point_journee='0', journee='".date(Ymd)."' WHERE pseudo='".$_SESSION['pseudo']."'" );
  14. }
  15. elseif($donnees['point_journee'] < 100)
  16. {
  17. $ajoute = mysql_query("UPDATE utilisateurs SET point_journee+= '1', point_total+='1' WHERE pseudo='".$_SESSION['pseudo']."'" ); // et ici aussi, ça plante et n'update pas!
  18. }
  19. else
  20. {
  21. echo "t'as bouffé tous tes points ajourd'hui tu pourra en recup d'autres demain etc bla bla bla et bla bla lbla...";
  22. }
  23. }
  24. else
  25. {
  26. echo "inscrivez-vous et profitez de nombreux privilèges en cliquant ici blabla bla lbalablbla bla bla bla bla... :)   ";
  27. mysql_close();
  28. }
  29. ?>


 
 
voilà, j'ai rebossé un p'tit coup pour nettoyer mes betises mais en, comme en temeoignent mes tests en local, ça ne marche pas. bizarrement je n'ai aucun message d'erreur mais ça n'upadte pas point_total et point_journee.  :??: en revanche la date est bien updatée.  :heink:  
parce qu'il semblerai que

Code :
  1. if($donnees['journee'] != date(Ymd))


soit toujours VRAI.  :pt1cable: en effet si je change la requête $maj elle est TOUJOURS effectuée.
 
 
merci.
je vais me coucher, ce soir j'arrive pas à en deceler la cause.  :sweat:


Message édité par pmusa le 09-04-2005 à 23:51:13
Reply

Marsh Posté le 09-04-2005 à 22:52:59   

Reply

Marsh Posté le 09-04-2005 à 23:48:50    

Ligne4 : confonds pas Table et Base (mysql_select() permet de sélectionner la base)
Ligne 8 : $donnes != $donnees
Ligne 10 : Ton champ journee devreait être au format DATE, ce serait plus pratique, du type Y-m-d
Ligne 14 : Pas de elseif, juste un if, ou sinon tu n'attribeuras pas de points quand il lira la première page de la journée

Code :
  1. for ($ligne = 2; $ligne > 25; $ligne++) {
  2.   echo 'J'apprend à utiliser les quote et les doubles quote comme il faut';
  3.   }


Fais ta page, teste-là d'abord toi-même, reviens nous voir si ça bloque quelque part, et tu seras bien content d'avoir fait ton truc (presque) toi-même plutôt qu'on te file tout un script non-sécurisé que tu ne sauras pas faire évolué.
J'ai quasiment tout fait dans cette partie :/ , essaie de t'y mettre


Message édité par Master p le 09-04-2005 à 23:49:43

---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 09-04-2005 à 23:52:42    

c'est corrigé Master P, j'ai édité pendant que tu composais semble-t-il. tu peux rejeter un coup d'oeil stp.  :)
edit:
 
j'ai cerné toutes ces conneries... apparemment ça vient du elseif.
 j'vais voir tiens...   ;)


Message édité par pmusa le 09-04-2005 à 23:54:24
Reply

Marsh Posté le 09-04-2005 à 23:59:18    

Ligne 14 : planter != plenter
Ligne 13 : en mySQL, DATE est du type yyyy-mm-dd, il faut donc que tu compares avec la date d'aujourd'hui au format yyyy-mm-dd, or ici, tu sors une date au format yyyyddmm


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 10-04-2005 à 00:07:54    

Master p a écrit :

Ligne 14 : planter != plenter


 :D  

Master p a écrit :


Ligne 13 : en mySQL, DATE est du type yyyy-mm-dd, il faut donc que tu compares avec la date d'aujourd'hui au format yyyy-mm-dd, or ici, tu sors une date au format yyyyddmm


c'est corrigé.  ;)  
 
bon là j'en suis sûr ça vient du elseif que j'avait fait au départ! m'enfin là, j'aimerai que tu lise le code stp, j'arriverai pas à te l'expliquer en français, tuout se passe au niveau du second ELSE, que je tiens à afficher dans le cas oû le gars n'est enregistré. je suis obligé de lui consacrer un if  sytle  

Code :
  1. if (!$_SESSION['pseudo']){
  2. //blabla enregistrez vous etc...
  3. }


??
 
edit:
cf. plus bas.
décidemment j'ai des problème avec l'édition.  [:bambookillah]


Message édité par pmusa le 10-04-2005 à 00:10:27
Reply

Marsh Posté le 10-04-2005 à 00:09:36    

pmusa a écrit :

:D  
 
c'est corrigé.  ;)  
 
bon là j'en suis sûr ça vient du elseif que j'avait fait au départ! m'enfin là, j'aimerai que tu lise le code stp, j'arriverai pas à te l'expliquer en français, tuout se passe au niveau du second ELSE, que je tiens à afficher dans le cas oû le gars n'est enregistré. je suis obligé de lui consacrer un if  style   ??

Code :
  1. if (!$_SESSION['pseudo']){
  2. //blabla enregistrez vous etc...
  3. }


 
 
le code est le suivant:

Code :
  1. if($donnees['point_journee'] < 100)
  2. {
  3. $ajoute = mysql_query("UPDATE utilisateur SET point_journee+= '1', point_total+='1' WHERE pseudo='".$_SESSION['pseudo']."'" );
  4. }
  5. else
  6. {
  7. echo "t'as bouffé tous tes points ajourd'hui tu pourra en recup d'autres demain etc bla bla bla et bla bla lbla...";
  8. }
  9. else
  10. {
  11. echo "inscrivez-vous et profitez de nombreux privilèges en cliquant ici blabla bla lbalablbla bla bla bla bla... :)   "; }



Reply

Marsh Posté le 10-04-2005 à 00:16:37    

Reposte le code en entier, je vois pas le pbm. Y a un message d'erreur ?


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 10-04-2005 à 00:20:10    

arggg nada!
OK je reposte le code en entier, donne moi deux minutes.  ;)

Code :
  1. <?php
  2. session_start();
  3. include('config.php');
  4. if (isset($_SESSION['pseudo']))
  5. {
  6. $connex = mysql_connect($host, $admin, $mdp);
  7. $select = mysql_select_db($bdd);
  8. $reponse = mysql_query("SELECT * FROM utilisateurs WHERE pseudo='".$_SESSION['pseudo']."'" );
  9. $donnees = mysql_fetch_array($reponse);
  10. echo "salut <b>".$donnees['pseudo']."</b> tu as <b>".$donnees['point_total']."</b> points! tu peux les echnager contre des telechargements de logiciels etc... blablabla";
  11. if($donnees['journee'] != date(Y-m-d))
  12. {
  13. $maj = mysql_query("UPDATE utilisateurs SET point_journee='0', journee='".date(Y-m-d)."' WHERE pseudo='".$_SESSION['pseudo']."'" );
  14. }
  15. if($donnees['point_journee'] < 100)
  16. {
  17. $ajoute = mysql_query("UPDATE utilisateurs SET point_journee+= '1', point_total+='1' WHERE pseudo='".$_SESSION['pseudo']."'" );
  18. }
  19. else
  20. {
  21. echo "t'as bouffé tous tes points ajourd'hui tu pourra en recup d'autres demain etc bla bla bla et bla bla lbla...";
  22. }
  23. if (!$_SESSION['pseudo'])
  24. {
  25. echo "inscrivez-vous et profitez de nombreux privilèges en cliquant ici blabla bla lbalablbla bla bla bla bla... :)   "; }
  26. mysql_close();
  27. }
  28. ?>


 
edit:
j'ai relu tes conseils, en fait c'est peut-être une confusion entre table et bdd comme tu dis si bien...  :D  
je vais verfier pour les mysql_connect() --> euhh non même pas.  :pfff: c'est bien juste en fait.
 
piteing chuis un bouley, y'a la date aussi où je me plante encore...  :non: [corrigé dans le post]
 
edit:
bon bah, je constate encore que mon compteur ne s'incrémente pas, et pire point_total retombe tjrs à zero... j'ai essayé de modifier avec phpmyadmin les point_journee et point_total pour voir si c'est pas à cause du zero. je sais pas bien en fait.  [:airforceone]


Message édité par pmusa le 10-04-2005 à 00:37:22
Reply

Marsh Posté le 10-04-2005 à 14:20:04    

up :hello:

Reply

Marsh Posté le 10-04-2005 à 16:07:58    

Déjà, je sais même pas si tu te connectes à ta bdd :
http://fr3.php.net/manual/fr/funct [...] ect-db.php
 
Le reste... à voir

Reply

Marsh Posté le 10-04-2005 à 16:15:01    

Que revoie la ligne 11 ? $donnees['pseudo']  != '' ?
 
Petit détail : j'étais pas trop convaincu par le point_journee+= '1', mais après recherche, je le suis encore moins (pas trouvé de référence là dessus). Ça donne quoi en mettant point_journee=point_journee+1  (sans quote, puisqu'il s'agit d'un entier et je ne suis pas sûr de la réaction de mySQL quand tu ajoutes un string à un entier.)

Reply

Marsh Posté le 10-04-2005 à 16:41:25    

yesss. Master P t'es une bête.  [:aloy]
 
bon, je suis convaincu du resultat, ça donne bien ce que j'en attendais. je developpe mon espace membre en parallèle. et je vous montrerez surement ma page de traitement du formulaire d'inscription parce que je suis vraiment pas très satisfait de mon code, je suis pas très rigoureux. y'a des if partout c'est sal.  :)  
 
encore merci Master P.  :)
 
edit:
 
$donnees['pseudo'] renvoi le pseudo du gars depuis la bdd mais en fait je vois ou tu veux en venir... si je reprenais juste mon $_SESSION['pseudo'] ça suffirai n'est-ce pas?  :D surtout que c'est plus pratique. m'enfin j'y aurai probablement pensé, si j'opte pour les sessions et que j'envoie des requtes sur chaque pages pour retrouver le pseudo....  :lol:  
 
 :hello:
 
edit2:
 
je crie victoire trop vite, point_journee ne s'increment pas, il passe bien de 0 (valeur par défaut) à 1 mais après ça stop, et ensuite même après 100 points ça continue.
de plus, la date n'est updatée.
je chercher hein...  [:bambookillah]
c'est un problème avec la date.  [:airforceone]  
 
quand je change le formattage de la date, comme ça:

Code :
  1. if($donnees['journee'] != date(Y-m-d))
  2. {
  3. $maj = mysql_query("UPDATE utilisateurs SET point_journee=0, journee='".date(Ymd)."' WHERE pseudo='".$_SESSION['pseudo']."'" );
  4. }
  5. if($donnees['point_journee'] < 100)
  6. {
  7. $ajoute = mysql_query("UPDATE utilisateur SET point_journee=point_journee+1, point_total=point_total+1 WHERE pseudo='".$_SESSION['pseudo']."'" );


 
et bien la date est correctement updatée. point_total s'incrément de 1 tandis que point_journee reste toujours à 1. On dirai que quand il passe dans la structure conditionnelle c'est toujours VRAI, donc il passe à 0 et ensuite dans la condition < 100 il est VRAI aussi donc prend +1. en fait fait un cycle 0 puis 1 puis 0 puis 1 puis 0 puis 1  :D  
donc ça viendrait bien de la date ça...  [:antp]
 
edit3:
 
euhh un truc grave bizarre (!), c'est que dans la table, dans le champ point_total il est inscrit 28 et à l'écran du visiteur il est affiché qu'il a 27 pts.  :??:  :??:
 
edit4:
echo "".".date(Y-m-d)."";
 
me renvoi 0 !!!! il est surement là le prob.  :sweat:  
si je met
echo "".".date(Ymd)."";
ça me renvoie 20050410
 :pt1cable:


Message édité par pmusa le 10-04-2005 à 17:20:40
Reply

Marsh Posté le 10-04-2005 à 17:27:06    

eh. j'ai trouvé.  [:aloy]  
 
ça irai peut-être mieux si on mettai les quotes à la date genre
 
date('Y-m-d')
 
:D  
 
par contre quelq'un veut bien m'expliquer pourquoi il est noté par exemple 86 points dans la bdd et qu'il est affiché 'vous avez 85 points' au visiteur?  :heink: c'est normal?


Message édité par pmusa le 10-04-2005 à 17:28:01
Reply

Marsh Posté le 10-04-2005 à 19:17:43    

Tu prends la valeur dans la bdd, ensuite tu l'incrémentes...
Forcément, la valeur que tu as gardé de point_journée est celle avant incrémentation [:spamafote]

Reply

Marsh Posté le 10-04-2005 à 19:32:15    

ok merci j'ai corrigé l'erreur.  :jap:  
il suffisait de deplacer le echo tout au debut juste après la requete d'incrementation pour reprendre la nouvelle valeur qui lui été affectée.
 
Master P je t'aime.  :hello:


Message édité par pmusa le 10-04-2005 à 19:32:55
Reply

Marsh Posté le 10-04-2005 à 19:52:01    

Chouette...
T'es blonde avec des gros seins [:petrus75] ?

Reply

Marsh Posté le 10-04-2005 à 19:59:16    

http://www.lesbonnasses.com/pgd/200504/pt/3215.jpg
 
hmmm... soit sage.  :non:

Reply

Marsh Posté le 10-04-2005 à 20:19:51    

Mais ya quand même un truc que je ne comprend pas, c'est ce système de points quel est l'intérêt de la chose? Parceque si le gars se fais un soft vite fait qui actualise la page toutes les dix secondes et bien il obtient un max de points sans rien faire.
 
Ce genre de soft est assez simple à faire et en plus en arrière plan ca ne se voit pas et ca ne bouffe pas de ressources donc le gars est tout à fait tranquil pour gagner des points?
 
Sinon je pensais à autre chose, le cache du navigateur ne pourrait-il pas poser un problème? Parceque si la page n'est pas rechargée depuis le serveur et bien pas de point pour monsieur... Donc peut être une petite indication dans le header? Et ne me dite pas que la page est forcément re téléchargée, parceque des fois j'ai quand même vu ce putain d'IE m'afficher une page sans même que je ne sois connecté....


Message édité par dwogsi le 10-04-2005 à 20:30:16

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 10-04-2005 à 20:22:57    

concernant le cache je crois pas hein. au pire je fais un pragma-cache machin...  ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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