Ajouts de points au submit en direct sur le compte membre

Ce topic a été résolu
Codeur61

Codeur61 Le 14 janvier 2017 à 11:59 (Édité le 25 janvier 2019 à 17:53)

Salut, 
Je veux créé une sorte de système de points, en basant sur le système de parrainage de PrimFx. Ma question est simple, le membre clique sur un bouton qui lui ajoute un point sur son compte et pas seulement dans la bdd car je voudrais qu'il le voit aussi . 
Merci d'avance.
Balatharas

Balatharas Le 14 janvier 2017 à 17:33

Hello !
sur son compte
dans la table users (ou membres, enfin la table sql de ton espace membre) c'est ça ? En gros dans la colonne de ton utilisateur ?
et pas seulement dans la bdd car je voudrais qu'il le voit aussi
Pas compris 😋

Selon moi et ce que j'ai compris voici ce que tu devrais faire:
Quand on clique sur ton submit, on ajoute 1 dans la colonne users de ta bdd, colonne qui s'appelerai "points"
Ensuite on affiche par exemple sur son profil:
Tu utilise ta requête de récupération des données de l'utilisateur présent sur la page pour afficher les points de cette manière:
<?= $user['points'] ?>
J'ai bien compris le problème ? 😉
TheOldNoob

TheOldNoob Le 14 janvier 2017 à 18:02

Salut l'ami,

Tu va juste devoir faire une petite fonction  qui fait une incrémentation lorsque ton utilisateur submit. Sachant que tu risque aussi de devoir gérer le fait qu'une personne ne pourra pas parrainé 2 fois la même personne donc ajouter une condition de vérification avec l'ip de l'utilisateur ou avec un ajout dans une colone de l'id de son compte.

Ensuite c'est juste un affichage du nombre de point qui sont inscrit dans ta colonne sur ta bdd. ça c'est pas violant.
Codeur61

Codeur61 Le 14 janvier 2017 à 23:25

Hello 😉 
quand je dis 
et pas seulement dans la bdd car je voudrais qu'il le voit aussi 
je veux dire, que je voudrais faire un
echo 'le nombre de point que vous possédez est de' . $userpoints;
en gros que le nombre de point de l'utilisateur vois ses points aussi en direct sur son compte. 

c'est un peut pour la création de la table que je comprend pas trop ....  dites moi en des nouvels 😄 .

nom de la table : points 
int 11     ai (autoincrement) 

et c'est tout .
Merci d'avance !


TheFlameflo

TheFlameflo Le 15 janvier 2017 à 00:43

Salut !

Le problème c'est que le champ points est en autoincrement, ce qui fait que le 1er membre aura 1 points, le 2ème aura 2 points, etc.
Tu dois juste mettre la valeur par défaut à 0.

Par la suite, tu dois faire la requête sql qui devrait ressembler à quelque chose comme ça :
UPDATE ma_table SET mon_champ = mon_champ + 1
    WHERE id (ou tout autre valeur unique) = '".$maVariable."
Tu n'as qu'à récupérer les données et les afficher !

Bonne chance et j'espère t'avoir aidé !
Codeur61

Codeur61 Le 15 janvier 2017 à 02:13

Merci ! Je n'ai pas tout bien compris mais j'ai pus en tiré quelque petite chose qui reste quand même un peu confuse comme le "mon champ". 
TheFlameflo

TheFlameflo Le 15 janvier 2017 à 05:13 (Édité le 15 janvier 2017 à 05:13)

Je vais essayer de mieux expliquer.

J'ai utilisé des noms fictifs dans la requête pour que tu puisses l'adapter, mais j'avoue que ce n'est pas clair.
Bref, le "mon_champ" signifie le nom de ton champ points dans ta table.

Si on décortique la requête, on pourra mieux comprendre :
UPDATE ma_table
On annonce qu'on update (donc qu'on modifie) une table (ici, tu dois mettre le nom de ta table).

SET mon_champ = mon_champ + 1
Ici, on défini la valeur du champ, donc on mentionne le champ (ce qui sera pour toi "points" ou quelque chose qui y ressemble, bref, ce que tu as mis dans ta base de données).
Ensuite, on donne la nouvelle valeur, donc le champ + 1.
C'est une sorte d'incrémentation.
 WHERE id = ?
Rendu là, on veut spécifier l'utilisateur (WHERE qui représente le "Où" donc où se trouve la ligne).
Pour pouvoir avoir quelque chose de précis, on choisit généralement un champ unique pour une action sur un utilisateur, donc l'ID, le pseudo ou le email.

Ensuite, on donne la valeur, ici représentée par un ?.
Tu peux choisir de mettre directement la valeur comme dans mon premier post ou faire une requête préparée (je t'invite à suivre le lien, un tuto de PRIMFX qui t'explique comment faire si tu ne le sais pas déjà.

Maintenant, tu associes le tout avec le fait que l'utilisateur clique sur le bouton et ton système devrait marcher.

Si tu as d'autres questions, n'hésites pas ! 😀
Balatharas

Balatharas Le 15 janvier 2017 à 11:59 (Édité le 15 janvier 2017 à 12:02)

@TheFlameFlo ton truc est pas mal, mais déjà, selon moi, créer une table rien que pour les points, c'est un peu inutile en sachant que tu peux juste rajouter une colonne dans ta table membres.
Voilà deux manières pour le côté base de données:

1/ Dans la table membres
La tu crée juste une colonne "points" dans ta table membres. Ça économise une table.

2/ En créant une table "points"
Si tu crée une table rien que pour les points il te faudrait mettre plus qu'un int:
id_user (int,  index primaire)
points (int)
Ensuite à la création du compte, à l'inscription donc, il faudra donc définir une donnée pour les nouveaux utilisateurs:
//A ajouter après l'insertion du nouveau membre dans ta page d'inscription
$idNouveauMembre = $bdd->lastInsertId();
$insPoints = $bdd->prepare('INSERT INTO points(id_user, points) VALUES(?, ?)');
$insPoints->execute([$idNouveauMembre, 0]);
Bien sur je ne vais pas te laisser sans explications 😉
Alors déjà, on récupère l'id du membre qui vient de s'inscrire, avec la fonction lastInsertId(), et on stocke cet id dans la variable $idNouveauMembre
Ensuite on fait une insertion basique dans la table points. Donc normalement l'utilisateur qui vient de s'inscrire aura 0 points par défaut (modifiable dans la dernière ligne de la requête d'insertion). Ensuite si tu regardes dans ta table points, il y aura une nouvelle ligne après l'inscription d'un utilisateur: id_user: (exemple: )1 et points: 0 (soit les points par défaut)


Ensuite:
Par la suite, tu dois faire la requête sql qui devrait ressembler à quelque chose comme ça : 
UPDATE ma_table SET mon_champ = mon_champ + 1    WHERE id (ou tout autre valeur unique) = '".$maVariable."
Tu n'as qu'à récupérer les données et les afficher ! 

Bonne chance et j'espère t'avoir aidé !
Voilà 😀
PS: j'ai peut-être fait des erreurs, n'hésitez pas a me corriger les autres 😉

EDIT:
quand je dis  
et pas seulement dans la bdd car je voudrais qu'il le voit aussi 
je veux dire, que je voudrais faire un
echo 'le nombre de point que vous possédez est de' . $userpoints;
en gros que le nombre de point de l'utilisateur vois ses points aussi en direct sur son compte.  
Je t'ai dit la méthode plus haut 😉 :
Ensuite on affiche par exemple sur son profil: 
Tu utilise ta requête de récupération des données de l'utilisateur présent sur la page pour afficher les points de cette manière: 
<?= $user['points'] ?>
Cette méthode s'applique si tu utilise la table membres pour stocker les points des utilisateurs et pas une table points a part.
Codeur61

Codeur61 Le 15 janvier 2017 à 14:17

Merci a tous ! je test sa dés que je peux !
TheFlameflo

TheFlameflo Le 15 janvier 2017 à 17:12

@Beignet :

J'avais mal lu, je pensais que tout était dans sa table membres.
Mais comme tu l'as dit, ça peut marcher quand même avec une table points, sauf que ce n'est pas recommandé ! 😉
Balatharas

Balatharas Le 16 janvier 2017 à 18:51

Tout le monde peut se tromber @TheFlameFlo 😄
Où en es-tu @Codeur61 ?
Codeur61

Codeur61 Le 16 janvier 2017 à 22:24

Ouoppsss désolé .
Salut, 
En effet je rencontre 2 petites erreurs. 
Balatharas

Balatharas Le 17 janvier 2017 à 17:04

D'accord, mais c'est quoi tes erreurs ? Je suis pas devin xD
Codeur61

Codeur61 Le 17 janvier 2017 à 20:15

Merci bcp ! J'ai réussi à réparer mes erreurs seul ! Encore merci sa MARCHE topic résolu 😉 
@Beignet et @TheFlameflo merci !
TheFlameflo

TheFlameflo Le 17 janvier 2017 à 22:18

Je suis heureux d'avoir pu t'aider !

Pense quand même à mettre le topic en résolu avec le bouton en haut de la page ! 😀
Fishing61

Fishing61 Le 19 janvier 2017 à 17:17

Oui c'est fais !
Balatharas

Balatharas Le 19 janvier 2017 à 17:44

Oui c'est fais ! 
Ce n'est pas fait 😋
+ est-ce que Codeur61 = Fishing61 ?
Fishing61

Fishing61 Le 19 janvier 2017 à 18:20

Oups ! Oui c'est moi je ne sais pas ce quui c'est passé 😄
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte