Bonjour,
Je souhaiterais savoir comment faire pour récupérer les informations d'une table "tokens" d'un utilisateur "id_membre" pour les afficher sur son profil.
Merci d'avance
Alors, il y a pas mal d'erreurs:
pour commencer lorsque tu affiches dans ta page HTML le total des tokens, tu as oublié le $
devant la variable à afficher, d'ailleurs au lieu d'écrire <?php echo = '...'; ?>
tu peux simplifier en <?= '...'; ?>
.
Ensuite, lorsque tu exécutes ta première requête SQL, tu ne lui envoie qu'un seul paramètre, hors elle en attend deux, donc si c'est la même variable pour les deux, il faut que tu la mette deux fois, regarde:
$requser2 = $bdd->prepare('SELECT * FROM membres WHERE id_membre = ? AND tokens = ?');
$requser2->execute(array($getid2, $taVariablePourLesTokens));
Enfin, pour ta deuxième requête c'est le même problème que pour la première, de plus, tu as mis un crochet fermant en trop lorsque tu passes tes paramètres dans la méthode execute()
de $reqtokens
.
EDIT: tu as également oublié de fermer l'accolade de ta condition.
PS: Si tu as des erreurs, montres-les nous :)
Bien sûr
<?php
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=espace_membre' , 'root', '');
if(isset($_GET['id']) AND $_GET['id'] > 0)
{
$getid2 = intval($_GET['id']);
$requser2 = $bdd->prepare('SELECT * FROM membres WHERE id_membre = ? AND tokens = ?');
$requser2->execute(array($getid2));
$userinfo2 = $requser2 ->fetch();
$reqtokens = $bdd->prepare('SELECT * FROM tokens WHERE id_membre = ? AND tokens = ?');
$reqtokens->execute([$userinfo2['id']]);
$totaltokens = $reqtokens->rowCount();
?>
<html>
<head>
<h1>TOKENS total</h1>
<meta charset="utf-8"
</head>
<body>
<?php
echo 'Vous avez ' . totaltokens . 'tokens';
?>
</body>
</html>
Voici
Alors je me suis un peu embrouiller, mais je crois que je suis tout prêt du but...
Je n'ai pas trop compris à un endroit si il fallait que mette une variable ou non, je l'ai donc représenté par $quelvariable dans la $reqtokens.
Et j'ai mit entre crochet 'token' parceque je pense que c'est comme ça non ?
<?php
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=espace_membre' , 'root', '');
if(isset($_GET['id']) AND $_GET['id'] > 0)
{
$getid2 = intval($_GET['id']);
$requser2 = $bdd->prepare('SELECT * FROM membres WHERE id_membre = ? AND tokens = ?');
$requser2->execute(array($getid2, $totaltokens));
$userinfo2 = $requser2 ->fetch();
$reqtokens = $bdd->prepare('SELECT * FROM tokens WHERE id_membre = ? AND tokens = ?');
$reqtokens->execute($userinfo2['id'], $quelvariable['tokens']);
$totaltokens = $reqtokens->rowCount();
?>
<html>
<head>
<h1>TOKENS total</h1>
<meta charset="utf-8"
</head>
<body>
<?php
echo 'Vous avez ' . $totaltokens . 'tokens';
?>
</body>
</html>
Déjà comme j'ai dis plus haut tu as oublié de refermer ta condition if()
avec une accolade et ensuite, là:
$requser2 = $bdd->prepare('SELECT * FROM membres WHERE id_membre = ? AND tokens = ?');
$requser2->execute(array($getid2, $totaltokens));
Quand tu fais AND tokens = ?
, à quoi correspond tokens ? est-ce que tu as une variable qui est définie pour ce paramètre ?
D'ailleurs maintenant dans ta deuxième requête SQL tu as directement fait passé les paramètres dans la méthode execute()
de $reqtokens
hors il attend un tableau donc ça serait plutôt ça:
$reqtokens = $bdd->prepare('SELECT * FROM tokens WHERE id_membre = ? AND tokens = ?');
$reqtokens->execute([$userinfo2['id'], $userinfo2['tokens']]);
'Tokens', c'est dans ma table y'a une colonne tokens, pour pouvoir connaitre le nombre de tokens. Pourquoi ? je ne dois pas la mettre ? et non, pas de variable en faite, Aïe je viens de m'en rendre compte. (tout mon code est la en faite)
Bah si le code que tu m'as présenté est bien celui de ta page, le AND tokens = ?
de ta première requête n'est pas nécessaire. D'ailleurs peux-tu me montrer la structure de tes tables SQL ?
Je ne sais pas si la table membres est utile mais je la mais quand même des fois que...
Bah en faite je sais pas si faut utiliser la table membres pour l'id ou la table tokens. La table membre c'est la table sur la quel s'inscrivent les membres et la table tokens, c'est ce que les membres gagnes quand il clique sur un bouton. Au premier clique sur ce fameux bouton, leurs id est ajouté dans la table token. (voilà pour la petite explication)
Si j'enléve le AND tokens = ? comment fait-on pour savoir qu'il faut aller chercher les informations de la colonne tokens dans ma table tokens ?
La table membre : https://prnt.sc/j28mz6
La table tokens : http://prntscr.com/j28nfx
Voilà ce que tu peux faire:
$getid2 = intval($_GET['id']);
$requser2 = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
$requser2->execute([$getid2]);
$userinfo2 = $requser2->fetch();
$reqtokens = $bdd->prepare('SELECT * FROM tokens WHERE id_membre = ?');
$reqtokens->execute([$userinfo2['id']]);
$totaltokens = $reqtokens->rowCount();
La deuxième solution serait les jointures, je t'invite à aller te renseigner à ce sujet.
Ma question c'est, comment on fait pour savoir le nombre de tokens alors que tu n'en parles même pas dans ton code ? Je suis pommé :/
Bah d'abord on récupère l'utilisateur en base de donnée via son id qui est passé en paramètre de l'URL avec $_GET['id], ensuite on récupère les tokens lors de la deuxième requête SQL grâce à l'id de l'utilisateur et en faisant un SELECT ça va tout récupérer y compris les tokens.
Après le code que je t'ai passé je ne sais pas si l'id passé dans l'URL est celui de l'utilisateur et si c'est le champ id en base de donnée, donc j'ai pas toutes les informations non plus :/
Wa ! gros problème ! Là, j'ai réussi à afficher le nombre de tokens ! Mais seulemen pour une fois. En faite, dès que j'ai mit le code, mon compte utilisateur test comptabilisé 1 token, et du coup je me dis, super ! Ca fonctionne ! Non ! Maintenant, quand je clique sur le bouton pour me donner 1 tokens en plus, il me le compte bien dans la bdd mais me l'affiche pas...
Je vais montrer mon code de ma page pour gagner ces tokens, ca peut peut être aider ?
Voilà : (je précise, il est vraiment fait à l'arrache mais y'a pas pire que ça hein :/) ::::; jetons.php :::::
<?php
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=espace_membre' , 'root', '');
if(isset($_GET['id']) AND $_GET['id'] > 0)
{
$getid = intval($_GET['id']);
$requser = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
$requser->execute(array($getid));
$userinfo = $requser ->fetch();
$reqMsgSend = $bdd->prepare('SELECT * FROM messages WHERE id_expediteur = ?');
$reqMsgSend->execute([$userinfo['id']]);
$totalMsgSend = $reqMsgSend->rowCount();
$reqMsgRecus = $bdd->prepare('SELECT * FROM messages WHERE id_destinataire = ?');
$reqMsgRecus->execute([$userinfo['id']]);
$totalMsgRecus = $reqMsgRecus->rowCount();
?>
<form method="post">
<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
$bdd->exec("SET NAMES utf8");
if(isset($_POST['continuer']))
{
$credit_token = $bdd->prepare('UPDATE tokens SET tokens=tokens+1 WHERE id_membre= ?');
$exec = $credit_token->execute(array($_SESSION['id']));
$fetch = $credit_token->fetch();
$non_existe = $credit_token->rowCount();
header("Location: profil.php?id=".$_SESSION['id']);
if($non_existe < 1) {
$credit_token = $bdd->prepare('INSERT INTO tokens (id_membre,tokens) values (?,?)');
$credit_token = $credit_token->execute(array($_SESSION['id'],0));
}
}
?>
<button type="submit" name="continuer">Vers mon profil</button>
</form>
Mais les erreurs ne s'affichent pas sur ta page ? Si elle y sont montre les moi.
Par ailleurs, est-ce que tu as Discord ? ça serait plus rapide pour communiquer ^^