PHP / SQL - Code non fonctionnel (variable)

Résolu/Fermé
Utilisateur anonyme - Modifié le 9 mars 2023 à 07:34
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 14 janv. 2013 à 19:13

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

A voir également:

2 réponses

totof31 Messages postés 163 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 30 avril 2013 74
20 déc. 2012 à 09:05
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'];
...
0
NicolasMauny
20 déc. 2012 à 18:52
Bas moi j'ai un code rétro.
0
Utilisateur anonyme
20 déc. 2012 à 19:06
Sa m'aide pas NicolasMauny
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
20 déc. 2012 à 10:20
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
0
Utilisateur anonyme
20 déc. 2012 à 11:24
Je suis désolé mais je n'ai pas tout compris.

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.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
20 déc. 2012 à 14:54
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 ?
0
Utilisateur anonyme
20 déc. 2012 à 17:03
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 :

http://www.supportduweb.com/scripts_tutoriaux-code-source-84-espace-membre-en-php-mysql-utilisateurs-espace-membre-inscription-connection-sessions-php-mysql.html

Sachant que j'ai créer une autre table dans users avec ce code :

'rank' int(11) unsigned NOT NULL DEFAULT '0',

qui est à 0 pour un non VIP par défaut.
0
Utilisateur anonyme
Modifié le 9 mars 2023 à 07:34

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 !";   
}   
?>   
0
totof31 Messages postés 163 Date d'inscription lundi 29 octobre 2012 Statut Membre Dernière intervention 30 avril 2013 74
20 déc. 2012 à 19:08
Non, le
$rank = $_SESSION['rank'];

doit être fait avant le
if ($rank == 0)

!!!!!!!!!!!
1