ajout de tokens à l'id parrain
- Accueil
- Forum
- Programmation
- PHP
- ajout de tokens à l'id parrain
Codeur61 Le 28 février 2019 à 00:50 (Édité le 24 mars 2019 à 13:52)
J'ai une "demande" assez particulière, je souhaiterais que vous m'indiquiez le chemin à suivre pour que je puisse développer le code.
J'ai une table membres avec plusieurs champs dont 'id, 'tokens', 'id_parrain'.
J'ai un submit qui permet d'ajouter à un 'id', un nombre de tokens que l'on souhaite.
Maintenant, pour un système de parrainage, je souhaite faire un style de requete comme celle ci :
si tokens entree pour id ?, alors ajout dans table membre le nombre de tokens, et si 'id' à un id_parrain, alors, 30% des tokens sont reversés en plus pour lui (donc PAS 70% pour l'id et 30% pour id_parrain, mais bien 100% pour id et 30% des 100% pour id_parrain).
Si quelqu'un pouvait m'éclairer sur ça, sa serait cool.
Merci d'avance !
Balatharas Le 5 mars 2019 à 20:30 (Édité le 1 janvier 1970 à 01:00)
On va dire que ya deux membres: l'id 1 et le parrain l'idp 2 (pour id parrain)
Après avoir donné à 1 par exemple 100 tokens, on vérifie si 1 à un parrain. S'il en a un, alors on donne 30 tokens à idp 2 (car 30% de 100 = 30)
Maintenant pour écrire le code il faut que tu me montres le code d'ajout de tokens
Codeur61 Le 6 mars 2019 à 17:28 (Édité le 1 janvier 1970 à 01:00)
if (isset($_POST['formtokens'])) {
if (isset($_POST['nbr_tokens'], $_POST['userid']) AND !empty($_POST['nbr_tokens']) AND !empty($_POST['userid'])) {
$userid = $_POST['userid'];
$nbr_tokens = $_POST['nbr_tokens'];
$requete = $bdd->prepare('SELECT id FROM membres WHERE id= ?');
$requete->execute(array($userid));
$dest_verified = $requete->rowCount();
if ($dest_verified == 1) {
$requete = $requete->fetch();
$requete = $requete['id'];
$updt = $bdd->prepare('UPDATE membres SET tokens=tokens+ ? WHERE id= ?');
$updt->execute(array($nbr_tokens, $requete));
$erreur = "Tokens ajoutés !";
header('location: administration.php');
} else {
$erreur1 = "Ca ne marche pas !";
}
}
}
Le voila, merci d'avance pour ton aide. Balatharas Le 6 mars 2019 à 17:54 (Édité le 6 mars 2019 à 17:58)
$requete = $bdd->prepare('SELECT * FROM membres WHERE id= ?');
$requete->execute(array($userid));
$dest_verified = $requete->rowCount();
if ($dest_verified == 1) {
$usrTokens = $requete->fetch();
$updt = $bdd->prepare('UPDATE membres SET tokens = ? WHERE id = ?');
$updt->execute(array(ceil($usrTokens['tokens']+$nbr_tokens), $usrTokens['id']));
$erreur = "Tokens ajoutés ".$isparr." !";
header('location: administration.php');
} else {
$erreur1 = "Utilisateur introuvable";
} // Ici tu avais oublié une accolade /!\ très importante !!!
Voilà déjà cette partie de corrigée. Jtavoue que je trouve que tu t'embête à vérifier un peu trop l'id ^^ mais bon j'ai laissé quand même c'est toi qui vois.
Ensuite, la fonction ceil permet de ne pas se retrouver avec un nombre de tokens avec une virgule. Si tu t'en fous tu l'enlèves (en n'oubliant pas d'enlever les parenthèses avant $requete et après $nbr_tokens 😉 )
Maintenant on va s'occuper du parrain 😀
Je considère que, si ton id n'a pas de parrain, alors la colonne id_parrain est égale à 0 pour lui.
$usrTokens = $requete->fetch();
$updt = $bdd->prepare('UPDATE membres SET tokens = ? WHERE id = ?');
$updt->execute(array(ceil($usrTokens['tokens']+$nbr_tokens), $usrTokens['id']));
$isparr = ""; // Je définis la variable, comme ça, même si la condition ci-dessous n'aboutit pas, pas d'erreur avec $isparr
if($usrTokens['id_parrain'] != 0) {
$req = $bdd->prepare('SELECT * FROM membres WHERE id = ?'); // Je cherche le parrain
$req->execute([$requete['id_parrain']]);
if(rowCount($req) == 1) { // Je vérifie l'existence du parrain
$parrain = $req->fetch(); // Je récupère les infos du parrain
$tokensreduits = ceil($nbr_tokens*0.30); // La je configure le nombre de tokens pour le parrain pour qu'il soit égal à 30% des tokens du membre
$updtParr = $bdd->prepare('UPDATE membres SET tokens = ? WHERE id = ?');
$updtParr->execute(array(ceil($parrain['tokens']+$tokensreduits), $parrain['id_parrain']));
$isparr = "(au parrain aussi)"; // Pour le message 😀
}
}
$erreur = "Tokens ajoutés ".$isparr." !";
header('location: administration.php');
Et voilà !
Si tu ne comprends pas une partie de mon code n'hésite surtout pas je me ferais une joie de t'expliquer 😀
Pareil s'il y a une erreur 😉
Codeur61 Le 6 mars 2019 à 23:44 (Édité le 1 janvier 1970 à 01:00)
Je t'avoue que j'ai pas encore testé le code. Quand je suis les lignes, en essayant de comprendre, je m'arrête sur "ceil" ligne 3. J'ai cherché sur internet, mais e n''ai pas compris pourquoi "retourné un nombre entier".
Pour la requête tout est bon pour moi sauf pour le ceil encore une fois.
Et dernier petit truc, les crochets pour le execute, ils servent à quoi ? A englober l'id et l'id parrain pour les "réunir" ?
Merci de ton aide 😋
Balatharas Le 7 mars 2019 à 12:43 (Édité le 1 janvier 1970 à 01:00)
Et les crochets c’est pour selectionner l’information dans le tableau $parrain, si tu fais var_dump($parrain) tu verras qu’il y a plusieurs valeurs
Codeur61 Le 7 mars 2019 à 22:29 (Édité le 1 janvier 1970 à 01:00)
Ah oui ? je n'ai pas vu ça dans les fonctions SQL, du coup j'avais pas trop compris, mais merci pour l’éclaircissement. Dak pour le var_dump, je test tout cela demain.
Merci.
Balatharas Le 7 mars 2019 à 22:44 (Édité le 1 janvier 1970 à 01:00)
Les fonctions sql s’utilisent dans une requête: SELECT * FROM users WHERE date_inscrit = NOW() est une fonction sql par exemple
Codeur61 Le 9 mars 2019 à 11:28 (Édité le 1 janvier 1970 à 01:00)
Codeur61 Le 9 mars 2019 à 11:30 (Édité le 1 janvier 1970 à 01:00)
Codeur61 Le 9 mars 2019 à 12:47 (Édité le 1 janvier 1970 à 01:00)
" impossible d'utiliser l'objet de type PDOStatement comme array dans administration.php" l 27
Comme il n'y a pas de array a cet endroit, j'ai donc pensé a en faire un au cas ou, mais rien n'y fait toujours la même erreur.
J'ai pensé qu'il faudrait faire un fetch de $requete pour id_parrain ? non ?
Voici mon code :
Codeur61 Le 9 mars 2019 à 12:50 (Édité le 1 janvier 1970 à 01:00)
<?php
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=membres' , 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (!isset($_SESSION['admin']) OR $_SESSION['admin'] != 112) {
exit();
}
if (isset($_POST['formtokens'])) {
if (isset($_POST['nbr_tokens'], $_POST['userid']) AND !empty($_POST['nbr_tokens']) AND !empty($_POST['userid'])) {
$userid = $_POST['userid'];
$nbr_tokens = $_POST['nbr_tokens'];
$requete = $bdd->prepare('SELECT * FROM membres WHERE id= ?');
$requete->execute(array($userid));
$dest_verified = $requete->rowCount();
if ($dest_verified == 1) {
$usrTokens = $requete->fetch();
$updt = $bdd->prepare('UPDATE membres SET tokens = ? WHERE id = ?');
$updt->execute(array(ceil($usrTokens['tokens']+$nbr_tokens), $usrTokens['id']));
$isparr = ""; // Je définis la variable, comme ça, même si la condition ci-dessous n'aboutit pas, pas d'erreur avec $isparr
if($usrTokens['id_parrain'] != 0)
{
$req = $bdd->prepare('SELECT * FROM membres WHERE id = ?'); // Je cherche le parrain
$req->execute([$requete['id_parrain']]);
if(rowCount($req) == 1) { // Je vérifie l'existence du parrain
$parrain = $req->fetch(); // Je récupère les infos du parrain
$tokensreduits = ceil($nbr_tokens*0.30); // La je configure le nombre de tokens pour le parrain pour qu'il soit égal à 30% des tokens du membre
$updtParr = $bdd->prepare('UPDATE membres SET tokens = ? WHERE id = ?');
$updtParr->execute(array(ceil($parrain['tokens']+$tokensreduits), $parrain['id_parrain']));
$isparr = "(au parrain aussi)"; // Pour le message 😀
}
$erreur = "Tokens ajoutés ".$isparr." !";
header('location: administration.php');
}
}
}
}
$reqtok1 = $bdd->query('SELECT * FROM membres');
$reqaffich = $bdd->query('SELECT * FROM membres');
?>
Codeur61 Le 9 mars 2019 à 12:51 (Édité le 1 janvier 1970 à 01:00)
<form method="POST">
<label>Choisir l'id :</label><br>
<select class="entree" name="userid">
<?php while ($t = $reqtok1->fetch()) { ?>
<option><?php echo $t['id']; ?></option>
<?php } ?>
</select>
<br><br>
<label>Choisir nombre tokens :</label><br>
<input type="text" class="entree" name="nbr_tokens"><br>
<br><br>
<input type="submit" class="myButton" name="formtokens"><br>
</form>
Balatharas Le 9 mars 2019 à 12:57 (Édité le 1 janvier 1970 à 01:00)
Quelle est ta ligne 27 precisément ?
Codeur61 Le 9 mars 2019 à 13:02 (Édité le 1 janvier 1970 à 01:00)
A oui la ligne 27, c'est :
$req->execute([$requete['id_parrain']]);
Balatharas Le 9 mars 2019 à 17:09 (Édité le 1 janvier 1970 à 01:00)
Il faut que tu revois les bases PHP et SQL on dirait
Sinon, essaie de remplacer $requete['id_parrain'] par $usrTokens['id_parrain'] je pense que je me suis trompé là dessus
Par contre que tu n'ai pas vu cette erreur montre que tu n'a pas compris le code.... Je me trompe ?
Car ça veut dire que tu ne vois pas pourquoi j'ai écris ['id_parrain'] en paramètre
Comme je te l'ai dis si tu ne comprend pas il faut pas hésiter
Codeur61 Le 9 mars 2019 à 17:21 (Édité le 1 janvier 1970 à 01:00)
J'ai justement relu le code quelques fois pour comprendre le code, qui, en soit, ne me parait pas très compliquer.
J'avais essayé avec $usrTokens il me semble.. j'ai donc ressayé et la ! bonne et mauvaise nouvelle, alors très compliqué, j'ai suivi le chemin des tokens. En bdd, ca ajoute les 30% à l'id parrain de l'id parrain :(
En gros, j'ajoute 100 tokens a id 116, sont id_parrain est 114 mais comme l'id 114 à un id_parrain 1, les 30% sont ajouté à 1 au lieu de 114.
Balatharas Le 9 mars 2019 à 18:25 (Édité le 9 mars 2019 à 18:26)
if(rowCount($req) == 1) {
parif($req->rowCount() == 1) {
Je sais pas si ça va changer quelque chose mais je m'étais trompé ici aussi (ça fait longtemps que j'avais pas codé haha), reteste tout, je vais continuer à regarder Codeur61 Le 9 mars 2019 à 18:44 (Édité le 1 janvier 1970 à 01:00)
Et, j'ai testé, mais comme ça n'est qu'une vérification facultative (il me semble), ca na rien changé, toujours le même problème..
Balatharas Le 9 mars 2019 à 19:01 (Édité le 1 janvier 1970 à 01:00)
Et c'est pas du tout facultatif pourquoi tu dis ça ??
Je vois vraiment pas l'erreur, c'est pas normal pour moi le code est correct
Codeur61 Le 9 mars 2019 à 23:30 (Édité le 1 janvier 1970 à 01:00)
Oui, également pour moi, je ne comprends donc pas pourquoi l'ajout est fait a un autre id_parrain
Balatharas Le 9 mars 2019 à 23:55 (Édité le 1 janvier 1970 à 01:00)
Je re regarderai le code plus tard je suis sur telephone
Codeur61 Le 14 mars 2019 à 21:32 (Édité le 1 janvier 1970 à 01:00)
je up le sujet, n’ayant pas de réponse et pas trouvé de réponse.. merci bien
Balatharas Le 20 mars 2019 à 20:18 (Édité le 1 janvier 1970 à 01:00)
C’est peut-être du a ta table qui a une organisation différente de celle utilisée dans le code, ou des id mal foutus, ou alors j’ai pas compris ta requête et du coup forcement mon code ne marche pas comme tu veux.