Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/11/2012, 19h24   #1
Maxime17
Invité de passage
 
Femme Maxime
Administrateur systèmes et réseaux
Inscription : novembre 2012
Messages : 1
Détails du profil
Informations personnelles :
Nom : Femme Maxime
Localisation : France

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Communication - Médias

Informations forums :
Inscription : novembre 2012
Messages : 1
Points : 0
Points : 0
Par défaut Problème d'extraction de données en SESSION

Bonjour ou même bonsoir à vous.

Aujourd'hui, je m'inscris sur votre site afin d'avoir une réponse (peut-être) à ma question.
J'ai en effet un problème avec PHP, concernant les Szssions ainsi que les variables.
Je vous l'expose :
J'ai un site qui gère une partie membre, ainsi qu'une partie Administration.
J'ai une base de donnée avec une table nommée membres, et dans celle-ci plusieurs champs.
Un champs concernant les rangs des utilisateurs est nommé membre_rang.
Je souhaite faire un accès à l'Administration UNIQUEMENT aux utilisateurs ayant le rang à 2 (Egal ou supérieur) dans la table membre_rang.
Il me faut faire une condition, ça ok.
Sauf, qu'il faut 'extraire' les informations de la base de donnée et la retranscrire en variable.
Pour la connexion d'un utilisateur j'utilise une Session pour le rang :
Code :
$_SESSION['membre_rang'] = $result['membre_rang'];
Sachant que le $result a pour cette valeur :
Code :
1
2
$result = sqlquery("SELECT COUNT(membre_id) AS nbr, membre_id, membre_pseudo, membre_mdp FROM membres WHERE
membre_pseudo = '".mysql_real_escape_string($_POST['pseudo'])."' GROUP BY membre_id", 1);
J'ai essayé à multiples reprises de faire des conditions, mais rien.
Quelqu'un peut m'aider?
Cordialement.
MAXIME.
Maxime17 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 20h38   #2
RunCodePhp
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 965
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 965
Points : 3 671
Points : 3 671
Salut

Avant tout, sert toi de certaines fonctionnalités qu'offre ce forum, comme mettre les parties de code dans les BBCode "code", "citation".
Cela améliore le lisibilité du post, du coup incitera plus les membres à t'aider.

Exemple pour le code :
Code :
1
2
3
<?php
$code = 'Du code Php, pour exemple';
?>

Le problème c'est que tu utilise une fonction sqlquery() qui serait de ta propre création (pas une fonction de Php en tout cas), du coup on ne sait pas quel type de donnée quelle retourne.

Fait un print_r($result) ou un var dump($result) pour savoir ce que ça retourne.

L'autre problème c'est que ta requête pourrait retourner plusieurs lignes dans le cas où il y aurait plusieurs membres ayant le même pseudo.

Dans ton cas il ne faudrait surtout pas qu'il y ait plusieurs lignes car une session par définition doit être unique, donc valable pour un seul utilisateur (poste client), donc 1 seul membre.

Lors de l'étape de la connexion (les termes authentification ou identification sont plus adaptés à mon sens), normalement le membre qui tente de s'identifier doit théoriquement fournir son pseudo ET son mot de passe, c'est ce couple qui normalement devrait garantir l'unicité du membre.


Là où je veut en venir, c'est que la requête SQL une fois exécuté DOIT retourner soit 1 ligne (1 membre) ou rien (suite à une erreur de saisie ou autre).


A mon sens il faudrait en 1er lancer une requête comme :
(pour l'exemple je ne met que le SQL)
Code :
1
2
3
4
5
SELECT COUNT(*) AS total, membre_id, membre_rang
FROM membres
WHERE membre_pseudo = 'le_pseudo_du_membre'
AND membre_mdp = 'le_mdp_du_membre'
LIMIT 1
NB : Il n'y pas lieu de rajouter dans la partie SELECT les champs "membre_pseudo" et membre_mdp" du fait que le membre le fourni.
Par contre il faut rajouter le champ "membre_rang" afin de l'exploiter pour la condition.

Puis comme expliqué précédemment, on devrait obtenir un tableau à 1 dimension de la ligne récupérée (le nombre total, l'ID du membre et son rang).

Donc admettons que $result contienne ce tableau à 1 dimension, suffit de la mettre dans la session :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
// La session aura été démarrée au préalable
session_start();
 
// Divers code ... etc ...
 
$result = sqlquery(bla bla bla);
 
// SI le nombre total vaut 1
if ($result['total'] == 1) {
    // ERREUR : Aucun résultat dans la requête
 
    // On détruit le tableau de session pour le membre par précaution
    $_SESSION['membre'] = array();
}
else {
    // On stock les données du membre dans la session ($_SESSION)
    $_SESSION['membre'] = array(
        'id' => (int)$result['membre_id'],
        'pseudo' => $result['membre_pseudo'],
        'rang' => (int)$result['membre_rang']
    );
 
 
    // On peu désormais exploiter le rang pour faire toute sorte de traitement selon sa valeur
    if ($_SESSION['membre']['rang'] === 1) {
        // Membre
    }
    elseif ($_SESSION['membre']['rang'] >= 2) {
        // Administrateur
    }
}
?>
Par ailleurs, on peu exploiter les sessions dans toutes les pages qu'on veut, et mettre des conditions comme vérifier l'existence de la variable de session "membre", puis SI elle existe rajouter une autre condition selon la valeur du rang afin de faire des traitements en rapport.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h12.


 
 
 
 
Partenaires

Hébergement Web