<?php
include('config.php');
?>
<?php
if ($rank == 0)
{
echo "Tu n'est pas VIP !";
}
else
{
echo "Tu es VIP !";
}
?>
paiement_accepte.php :
<?php
include('config.php');
?>
<?php
$rank = 1;
?>
Voilà. Donc ce que je veux faire est simple : je veux que quand une personne paye 1 allopass par exemple, que cette personne soit rediriger vers la page paiement_accepte.php (sa je l'ai fait)
Donc au début son rank était de 0. Et quand elle paye son rank devienne 1.
Sur rank.php ,Et donc que si son rank est 0, cela affiche quelque chose (ici, Tu n'es pas VIP), et aussi que sa affiche quelque chose si elle est VIP (ici, Tu es VIP).
Mais j'ai essayé avec la fonction echo d'afficher si oui ou non elle est VIP, mais il m'affiche que je suis pas VIP avant d'avoir été sur la page paiement_accepte.php (normal) mais même après y avoir été on m'affiche que je ne suis pas VIP. Aidez-moi :'(
Bonjour,
Utiliser des sessions ne permet pas de partager toutes les variables, mais seulement la variable spéciale $_SESSION, de la façon suivante
$_SESSION['rank'] = 0;
print $_SESSION['rank'];
...
Chaque page est indépendante.
Si l'utilisateur va sur une page, puis sur une autre (par un lien, ou directement en rentrant l'URL), la page nouvellement chargée est « neuve ».
Les variables ne sont pas transportées.
Il y a techniquement deux façons de porter une variable d'une page à une autre.
1 - Écrire ta variable en dur sur le serveur ;
2 - Transmettre ta variable au navigateur, qui lui-même la retransmettra à l'appel de la page suivante.
Le deuxième cas est à réserver aux variables non critiques, car tout ce que voit ton navigateur, l'utilisateur peut potentiellement le recréer. Ça peut être par exemple un formulaire (champ caché,
<input type='hidden' name='rank' value='1' />
, ou des paramètres dans des URL (liens du genre
href="rank.php?rank=1"
).
Dans ton cas, il faudra privilégier une écriture côté serveur.
Il y a plusieurs stratégies simples :
1 - Écrire en base de données. Ça tombe bien, tu en as déjà une ! Quand tu passes dans paiement_accepte.php, tu enregistres que l'utilisateur en question est de rang 1 (table des utilisateurs...) éventuellement avec une date de péremption.
Ensuite, dans rank.php, tu lis la valeur de $rank dans la base de données.
2 - Utiliser les sessions. Concrètement, une session, c'est quoi ? Le serveur attribue un numéro d'identification unique au navigateur, et écris « des choses » dans un fichier, sur le serveur, qui porte le nom de cet identifiant. À chaque fois que le navigateur communique avec le serveur, il lui redonne ce numéro (via un cookie, la plupart du temps).
Du coup le serveur peut enregistrer, d'une fois sur l'autre, certains paramètres.
Les sessions ont une durée de vie, généralement de 10 ou 15 minutes d'inactivité de l'utilisateur.
Ce qui signifie que la variable ne sera pas conservée au delà de ce délai.
En php, utiliser les sessions est relativement simple :
session_start();
au début de ton code (pas forcément en première ligne, mais en tous cas avant d'envoyer la moindre donnée (genre echo...), pour des questions d'écriture de la réponse HTTP : en effet, les sessions utilisent les cookies, qui sont transmis dans les en-têtes de la réponse. Or si tu envoies d'abord un "echo", PHP commence la réponse, génère les en-têtes et les envoie... Ensuite, trop tard ! Les en-têtes sont déjà partis on ne peut plus les modifier / rappeler.
Puis
$_SESSION['rank'] = $rank;
pour mettre une variable en session, et
$rank = $_SESSION['rank'];
pour rappeler cette variable.
Après, il y a d'autres moyens... Tu pourrais écrire dans un fichier que tu gères toi-même... Mais c'est un peu réinventer la roue...
Ne peux-tu pas me donner plus de précisions ?
Dans toutes tes informations, je ne sais plus ce que je dois mettre dans mySQL, dans paiement_accepte.php ou dans rank.php car la je ne comprends plus.
Peut-être est-ce trop demandé mais j'essaye : ne pouvez-vous pas me donner des codes faits car je sais pas coder le PHP, enfin le minimum, donc je préfère apprendre en lisant les codes et en les comprenant que de lire des longues phrases en français. Merci.
Pour être plus précis, il faut que tu nous dises exactement ce que tu comptes faire.
Combien de temps veux-tu que le site se "souvienne" de qui a payer quoi ?
Est-ce que tu as déjà un mécanisme d'authentification ?
Alors, déjà désolé de ne pas avoir été trop précis.
Donc je veux simplement que une fois avoir payé, que la personne soit VIP à vie (simple, non ?).
Il me suffit de créer un code PHP à mettre sur ma page paiement_accepte.php qui transforme le $rank == 0 (par défaut pour un user normal) en $rank == 1 (après avoir payé pour qu'il devienne VIP). Mais il faut que ceci s'applique à un utilisateur (celui qui paye et donc accède à paiement_accepte.php ) et cela pour tout le temps.
Et une fois sa fait (ce qui est loin de l'être T_T), il me faudrais un code pour qu'il n'y ai que les VIP qui puisse voir une certaine page.
Merci.
PS : qu'entends-tu par mécanisme d'authentification ? Je ne pense pas beaucoup t'aider et répondre à ta question, mais j'utilise un espace membre déjà fait, lien ici :
Désolé de reposter. Donc là j'ai réussit à mettre ce code qui permet de devenir VIP :
<?php
session_start();
include('config.php');
?>
<?php
$rank = $_SESSION['rank'];
$_SESSION['rank'] = 1;
?>
///// Vérification si sa marche /////
///// (doit afficher Tu es VIP) /////
<?php
if ($rank == 0)
{
echo "Tu n'est pas VIP !";
}
else
{
echo "Tu es VIP !";
}
?>
Le problème c'est que quand je vais sur une autre page avec ce code (ci-dessous), il affiche que je ne suis pas VIP. J'en conclu que ma variable $_SESSION['rank'] vaut 1 que sur la page que j'ai indiquée. Donc comment faire pour que $_SESSION['rank'] soit à 1 tout le temps juste pour cet user ?
<?php
if ($rank == 0)
{
echo "Tu n'est pas VIP !";
}
else
{
echo "Tu es VIP !";
}
?>
Dans ton espace membre, si tu as utilisé exactement ce qui est sur ton site, tu as une page connexion.php
Dans cette page, tu as ces quelques lignes :
//On recupere le mot de passe de lutilisateur
$req = mysql_query('select password,id from users where username="'.$username.'"');
$dn = mysql_fetch_array($req);
//On le compare a celui quil a entre et on verifie si le membre existe
if($dn['password']==$password and mysql_num_rows($req)>0)
{
//Si le mot de passe es bon, on ne vas pas afficher le formulaire
$form = false;
//On enregistre son pseudo dans la session username et son identifiant dans la session userid
$_SESSION['username'] = $_POST['username'];
$_SESSION['userid'] = $dn['id'];
Il faut modifier la deuxième en rajoutant « rank », et le mettre en session à la fin.
Ce qui donne :
//On recupere le mot de passe de lutilisateur
$req = mysql_query('select password, id, rank from users where username="'.$username.'"');
$dn = mysql_fetch_array($req);
//On le compare a celui quil a entre et on verifie si le membre existe
if($dn['password']==$password and mysql_num_rows($req)>0)
{
//Si le mot de passe es bon, on ne vas pas afficher le formulaire
$form = false;
//On enregistre son pseudo dans la session username et son identifiant dans la session userid
$_SESSION['username'] = $_POST['username'];
$_SESSION['userid'] = $dn['id'];
$_SESSION['rank'] = $dn['rank'];
Une fois ceci fait, il faut modifier ta page paiement_accepte.php. Elle doit devenir :
<?php
include('config.php');
$_SESSION['rank'] = 1;
mysql_query('update users set rank = ' . $_SESSION['rank'] . ' where id = ' . $_SESSION['userid']);
?>
Et pour finir, ta page rank.php devient :
<?php
include('config.php');
$rank = $_SESSION['rank'];
if ($rank == 0)
{
echo "Tu n'es pas VIP !";
}
else
{
echo "Tu es VIP !";
}
?>
Je n'ai pas essayé mais j'ai un truc à dire.
MERRRCCCIII (si sa marche) . Car sa fait longtemps que j'attends une réponse.
J'pris pour que sa marche :)
Euuuuh, sa m'affiche ceci :
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in on line 149.
La combinaison que vous avez entré n'est pas bonne.
La ligne 149 est celle-ci :
$dn = mysql_fetch_array($req);
Il doit y avoir une erreur dans la requête juste au-dessus.
Rajoute un or die() pour voir :
$req = mysql_query("select password, id, rank from users where username='$username'") or die (mysql_error() . "select password, id, rank from users where username='$username'");
Omg je suis pas patient et là j'vais péter mon cable. Pouvez-vous me dire toutes les petites erreurs que j'ai faites ?
<?php
//On affiche un message de bienvenue, si lutilisateur est connecte, on affiche son pseudo
?>
Bonjour<?php if(isset($_SESSION['username'])){echo ' '.htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');} ?>,<br>
Bienvenue sur notre site.<br><br></font>
<font face="Comic Sans MS" size=3 color="green">
<?php
if ((isset($_SESSION['username'])) AND $rank = 0);
{
echo "Deviens vite VIP !";
<form> Bouton paypal en HTML ici</form>
}
?>
<?php
if ((isset($_SESSION['username'])) AND $rank = 1);
{
echo "Tu es VIP, tu peux donc demander tout ce que tu veux :D";
}
?>
</font>
<br>
<font face="Comic Sans MS" size=2 color="black">
<?php
//Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter
if(isset($_SESSION['username']))
{
?>
Tu peux : <br><br>
<a href="users.php">Voir la liste des utilisateurs</a><br>
<a href="edit_infos.php">Modifier tes informations personnelles</a>
<?php
}
else
{
//Sinon, on lui donne un lien pour s inscrire et un autre pour se connecter
?>
<a href="users.php">Liste des utilisateurs</a><br>
<a href="sign_up.php">Inscription</a><br>
<a href="connexion.php">Se connecter</a>
<?php
}
?>
<?php
if(isset($_SESSION['username']))
{
?>
<br><a href="musiques.php">Voir tout</a>
<br><a href="demande.html">Demander si il y a un problème</a>
<br><a href="connexion.php">Te déconnecter</a><br>
<?php
}
else
{
//Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter
?>
<?php
}
?>
Sur mon index.php où j'ai mis ce code, quand je ne suis pas connecté, sa me donne sa :
Bonjour,
Bienvenue sur notre site.
Deviens vite VIP !
Bouton paypal en HTML ici
Tu es VIP, tu peux donc demander tout ce que tu veux :D
Liste des utilisateurs
Inscription
Se connecter
Il ne devrait donc pas afficher cela :
"Deviens vite VIP !
Bouton paypal en HTML ici
Tu es VIP, tu peux donc demander tout ce que tu veux :D "
Pourtant, mon code est bon. Il doit y avoir un problème avec sa :
if ((isset($_SESSION['username'])) AND $rank = 0);
Normalement c'est pour dire "si l'utilisateur est connecté et si il est pas VIP, montre ceci". Hors là, il est montré même quand l'utilisateur n'est pas connecté. J'y arriverais jamais :c
En effet !
$rank = 0 affecte la valeur 0 à $rank, au lieu de faire la comparaison que tu attends.
Il faut mettre $rank == 0
Par ailleurs, utilise plutôt && que AND
J'ai mis ce que tu as dit : $rank == 0 et &&. Le include y était déjà aussi. Mais quand je met $rank = $_SESSION['rank'] sa me met Parse error: syntax error, unexpected T_VARIABLE donc tu as du te tromper :P
Ah oui, je viens d'essayer de mettre ceci :
<?php
$_SESSION['rank'] = $rank;
?>
Donc je n'ai plus de message d'erreur, mais par contre il m'affiche tout le temps que je suis VIP...
« quand je met $rank = $_SESSION['rank'] sa me met Parse error: syntax error, unexpected T_VARIABLE »
Je pense plutôt que tu as oublié un point-virgule quelque part, ou une parenthèse fermante, ou un guillemet...
Nan après j'ai esayé sa :
<?php
$_SESSION['rank'] = $rank;
?>
et sa ne me mettais plus cette erreur. Mais il m'affiche le contenu VIP alors que je le suis pas...
Oui mais tu n'essaies pas de comprendre ce que tu fais...
C'est normal que $_SESSION['rank'] = $rank; ne fasse pas ce que tu veux.
Ce que tu veux, c'est mettre $rank = $_SESSION['rank'];
Et ça ne doit pas te mettre d'erreur.
Je t'assure que l'erreur que tu as signifie que tu as fais une erreur plus haut.
Je ne comprends rien.
Quelle page te pose problème ?
Quel est le problème ? Le message d'erreur ?
Quel est le code de la page qui te pose problème ? (disons, les 10 lignes avant et après le message d'erreur)
Bon, je viens de tout réessayer (j'ai refais tous les codes).
Donc tout marche.
Sauf ceci : Voici le code de l'index.php
<?php
include('config.php');
$rank = $_SESSION['rank'];
?>
<?php
//On affiche un message de bienvenue, si lutilisateur est connecte, on affiche son pseudo
?>
Bonjour<?php if(isset($_SESSION['username'])){echo ' '.htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');} ?>,<br>
Bienvenue sur notre site.<br><br></font>
<font face="Comic Sans MS" size=3 color="green">
<?php
if ((isset($_SESSION['username'])) && $rank == 0);
{ ?>
Deviens vite VIP !
<form> Bouton paypal en HTML ici</form>
<?php } ?>
<?php
if ((isset($_SESSION['username'])) && $rank == 1);
{
echo "Tu es VIP, tu peux donc demander tout ce que tu veux :D";
}
?>
</font>
<br>
<font face="Comic Sans MS" size=2 color="black">
<?php
//Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter
if(isset($_SESSION['username']))
{
?>
Tu peux : <br><br>
<a href="users.php">Voir la liste des utilisateurs</a><br>
<a href="edit_infos.php">Modifier tes informations personnelles</a>
<?php
}
else
{
//Sinon, on lui donne un lien pour s inscrire et un autre pour se connecter
?>
<a href="users.php">Liste des utilisateurs</a><br>
<a href="sign_up.php">Inscription</a><br>
<a href="connexion.php">Se connecter</a>
<?php
}
?>
<?php
if(isset($_SESSION['username']))
{
?>
<br><a href="musiques.php">Voir toutes les musiques</a>
<br><a href="demande.html">Demander une musique</a>
<br><a href="connexion.php">Te déconnecter</a><br>
<?php
}
else
{
//Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter
?>
<?php
}
?>
Donc quand je vais sur rank.php pour voir si je suis VIP, ils me disent "Tu n'es pas VIP" donc cela est normal mais quand je vais sur l'index, il ne devrait PAS y avoir "Tu es VIP, tu peux donc demander tout ce que tu veux :D "
Sauf que malheureusement cela apparait.
Alors que je ne suis pas VIP...
J'en conclue que le problème doit venir de ce bout de code de l'index :
<?php
if ((isset($_SESSION['username'])) && $rank == 1);
{
echo "Tu es VIP, tu peux donc demander tout ce que tu veux :D";
}
?>