PHP / SQL - Code non fonctionnel (variable) [Résolu/Fermé]

Signaler
Messages postés
319
Date d'inscription
samedi 2 juin 2012
Statut
Membre
Dernière intervention
14 avril 2016
-
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
-
Bonjour,

Tout d'abord voici tous mes codes :

config.php :

<?php 
session_start(); 

mysql_connect('mysql2.alwaysdata.com', 'Utilisateur', 'mdp'); 
mysql_select_db('base-de-donnee'); 

$mail_webmaster = 'mail'; 

?> 


rank.php :

<?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 :'(

2 réponses

Messages postés
163
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
30 avril 2013
66
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'];
...

Bas moi j'ai un code rétro.
Messages postés
319
Date d'inscription
samedi 2 juin 2012
Statut
Membre
Dernière intervention
14 avril 2016
7
Sa m'aide pas NicolasMauny
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
987
Bonjour,

Petite explication générale.

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...

En espérant t'avoir aidé plutôt qu'embrouillé,

Xavier
Messages postés
319
Date d'inscription
samedi 2 juin 2012
Statut
Membre
Dernière intervention
14 avril 2016
7
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"; 
} 
?> 


Je coince...
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
987
OK je crois avoir compris.
Enlève le point-virgule à la fin de la ligne du if :

if ((isset($_SESSION['username'])) && $rank == 0);

Car il clôture le « if », et du coup, le bloc d'après est indépendant et est exécuté tout le temps...
Messages postés
319
Date d'inscription
samedi 2 juin 2012
Statut
Membre
Dernière intervention
14 avril 2016
7
Aaaaaaaahhhhh merciii tu es mon sauveur mon dieu *0*
j'ai a peut pres le meme code mais ca ne marche pas
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
987
Tout est dans le « à peu près »...