Identification différente selon l'utilisateur

Résolu/Fermé
blasil64 Messages postés 11 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 18 février 2009 - 6 févr. 2009 à 10:14
blasil64 Messages postés 11 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 18 février 2009 - 6 févr. 2009 à 14:17
Bonjour,
Je réalise un projet en cours en PHP/MySQL selon le modèle MVC.
Pour ceux qui connaissent, j'ai un fichier config qui définit toutes les actions, les vues, les modèles vues... qui est géré par un controleur.
Je doi réaliser une identification. Je suis avec Wamp 5 dans lequel j'ai crée la base de données avec login mot de passe et statut, un booleen prenant 0 pour un élève et 1 pour un professeur.

Voici le code :

if (mysql_num_rows($resultats) >= 1)//On a réussi à identifier un utilisateur
{
echo "Connexion réussie";

$requete1 ="SELECT statut from utilisateurs WHERE (login='".$login."') AND (mdp='".$mdpCrypte."')";
$req = mysql_query($requete1);
if ($req['statut'] == 0 )
{

// -------------------------------------------------------
// Définir le nouvel état de l'application
// -------------------------------------------------------

$_SESSION['etat']= 'etat_apresConnexion_encadre';

// -------------------------------------------------------
// Préparer les données de la vue résultante
// -------------------------------------------------------

// Définition des données STRUCTURELLES de la vue

$donneesVue['titre']=$titreApplication;
$donneesVue['zone_haute_encadre']=$vuesElementaires['vueElementaire_zone_haute_encadre'];
$donneesVue['style']=$feuillesDeStyle['style'];

$_SESSION['message'] = "Connexion réussie";

// Définition des données de l'utilisateur
$_SESSION['login']=$login;

// Enregistrement des données de la vue dans la session
$_SESSION['donneesVue']=$donneesVue;
}
else //Connexion en tant qu'encadrant
{
// -------------------------------------------------------
// Définir le nouvel état de l'application
// -------------------------------------------------------

$_SESSION['etat']= 'etat_apresConnexion_encadrant';

// -------------------------------------------------------
// Préparer les données de la vue résultante
// -------------------------------------------------------

// Définition des données STRUCTURELLES de la vue

$donneesVue['titre']=$titreApplication;
$donneesVue['zone_haute_encadrant']=$vuesElementaires['vueElementaire_zone_haute_encadrant'];
$donneesVue['zone_menu']=$vuesElementaires['vueElementaire_zone_menu'];
$donneesVue['style']=$feuillesDeStyle['style'];

$_SESSION['message'] = "Connexion réussie";

// Définition des données de l'utilisateur
$_SESSION['login']=$login;

// Enregistrement des données de la vue dans la session
$_SESSION['donneesVue']=$donneesVue;

}
}


Le problème étant que l'on se connecte toujours en tant que élève (encadre) alors que si on essaie de se connecter en tant que professeur (encadrant), on devrait avoir une page d'accueil différente.

De plus le mysql_query ne fonctionne pas sur mon code, voici l'erreur :

Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Google Gadget\actions\action_connecter.php on line 39

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\Google Gadget\actions\action_connecter.php on line 39


Merci de vote aide.
A voir également:

3 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
6 févr. 2009 à 11:59
Bonjour,

Je te conseil de résoudre d'abord ton problème de connexion puisque ça peut être lui qui entraine ton problème d'affichage.

Pour ce qui est du pb de connexion, es-tu sur que tu ne ferme pas ta connexion courante en amont du code que tu as donné ?
Est-ce que tu pourrais nous donner le code qui précède celui que tu as donné, notamment la partie où tu te connecte à ta base de données pour y faire tes requêtes SQL. (donne l'intégralité du code ce sera mieux)

Une autre possibilité est le fait que tu dois créer un user/mdp pour accéder a ta base de données (ou alors tu t'y connecter en user 'root' sans mdp)
0
blasil64 Messages postés 11 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 18 février 2009
6 févr. 2009 à 13:01
ok. alors voici le config pour la connexion à la base (j'ai juste donné sur quoi j eme connecte).

// Parametres de la base de donnees
$bd=array('login'=>'root',
'mdp'=>'',
'host'=>'localhost',
'nomBase'=>'gadget');


Je tiens à préciser qu'avant la connexion marchait très bien mais j'ai rajouté le if statut == 0 avec le else pour tester et c'ets là que j'ai insérer le mysql_query, sinon on se connecte très bien, parce que avec le code que j'ai ça fait juste la connexion en tant que encadre mais pas en tant que encadrant même si j'essaie avec son login et mot de passe (comme si ça ne reconnaissait pas avec le statut pour que ça rentre dans le else).


ensuite mon action de connexion :


<?php
include ("modules/module_executerRequete.php");

// Récupération des informations entrées par l'utilisateur
$login = $_POST ['login'];
$mdp = $_POST ['mdp'];


$mdpCrypte = md5($mdp); // On crypte le mot de passe
$requete = "SELECT * FROM utilisateurs WHERE (login='".$login."') AND (mdp='".$mdpCrypte."')"; // requete reçoit la requete pour connecter la personne


// on verifie les valeurs entrées par l'utilisateur
if (isset($_POST['login']) and isset($_POST['mdp'])) // Vérification des données rentrés si elles correspondent aux données de la base
{
echo"Vérif donnees si elles corresponde à la base";
if ($_POST['login'] != NULL and $_POST['mdp'] != NULL) // On vérifie que les champs ne soient pas vide
{

echo "verif champ aps vide";
executerRequete($bd['host'], $bd['nomBase'], $bd['login'], $bd['mdp'], $requete, $resultats, $nbResultats, $nbMaj, $numError, $numMySQLError);//execution de la requete qui connecte
echo "verif exec requete";
// affiche des messages d'erreurs
switch ($numError) {//liste des différentes erreurs qui peuvent se produire lors de la connexion
case 1: echo "Impossible de se connecter au serveur MySQL...";
break;

case 2: echo "Connexion au serveur MySQL réussi mais impossible d\'accéder à la base de données...";
break;

case 3: echo "Syntaxe requête MySQL incorrecte...";
break;

default:
if (mysql_num_rows($resultats) >= 1)//On a réussi à identifier un utilisateur
{
echo "Connexion réussie";

$requete1 ="SELECT statut from utilisateurs WHERE (login='".$login."') AND (mdp='".$mdpCrypte."')";
$req = mysql_query($requete1);
if ($req['statut'] == 0 )
{

// -------------------------------------------------------
// Définir le nouvel état de l'application
// -------------------------------------------------------

$_SESSION['etat']= 'etat_apresConnexion_encadre';

// -------------------------------------------------------
// Préparer les données de la vue résultante
// -------------------------------------------------------

// Définition des données STRUCTURELLES de la vue

$donneesVue['titre']=$titreApplication;
$donneesVue['zone_haute_encadre']=$vuesElementaires['vueElementaire_zone_haute_encadre'];
$donneesVue['style']=$feuillesDeStyle['style'];

$_SESSION['message'] = "Connexion réussie";

// Définition des données de l'utilisateur
$_SESSION['login']=$login;

// Enregistrement des données de la vue dans la session
$_SESSION['donneesVue']=$donneesVue;
}
else //Connexion en tant qu'encadrant
{
// -------------------------------------------------------
// Définir le nouvel état de l'application
// -------------------------------------------------------

$_SESSION['etat']= 'etat_apresConnexion_encadrant';

// -------------------------------------------------------
// Préparer les données de la vue résultante
// -------------------------------------------------------

// Définition des données STRUCTURELLES de la vue

$donneesVue['titre']=$titreApplication;
$donneesVue['zone_haute_encadrant']=$vuesElementaires['vueElementaire_zone_haute_encadrant'];
$donneesVue['zone_menu']=$vuesElementaires['vueElementaire_zone_menu'];
$donneesVue['style']=$feuillesDeStyle['style'];

$_SESSION['message'] = "Connexion réussie";

// Définition des données de l'utilisateur
$_SESSION['login']=$login;

// Enregistrement des données de la vue dans la session
$_SESSION['donneesVue']=$donneesVue;

}
}
else {
echo "Login et/ou mot de passe incorrects...";
$_SESSION['etat']= 'etat_avantConnexion';
$_SESSION['message'] = "Login et/ou mot de passe incorrects...";

$donneesVue['titre']=$titreApplication;
$donneesVue['zone_haute']=$vuesElementaires['vueElementaire_zone_haute_bienvenue'];
$donneesVue['zone_login']=$vuesElementaires['vueElementaire_zone_login'];
$donneesVue['style']=$feuillesDeStyle['style'];
}
}

}else{
echo "Champs incomplets";
$_SESSION['etat']= 'etat_avantConnexion';
$_SESSION['message'] = "Champs incomplets";

$donneesVue['titre']=$titreApplication;
$donneesVue['zone_haute']=$vuesElementaires['vueElementaire_zone_haute_bienvenue'];
$donneesVue['zone_login']=$vuesElementaires['vueElementaire_zone_login'];
$donneesVue['style']=$feuillesDeStyle['style'];
$donneesVue['login']= $_POST['login'];
}
}

?>


et la fonction qui ets inclus au début :


<?php

function executerRequete ($nomServeur, $nomBd, $login, $mdp, $requete, &$resultats, &$nbResultats, &$nbMaj, &$numerror, &$numMySQLError){

$nbResultats = 0;
$nbMaj = 0;
$numerror = 0;
$numMySQLError = 0;

// connexion a la BD



if (!mysql_connect($nomServeur, $login, $mdp)){
$numMySQLError = mysql_errno();// code erreur retourné par mySQL
$numerror = 1;
} else {

// choix de la base
if (!mysql_select_db ($nomBd)){
$numMySQLError = mysql_errno();
$numerror = 2;
} else {

// on execute la requete
$resulTemp = mysql_query($requete);
if (!$resulTemp){
$numMySQLError = mysql_errno();
$numerror = 3;
} else {

// On recherche le "select" dans la requête...
if (preg_match("#^select#i", $requete)){// compare la requete avec le mot select pour trouver le select
$nbResultats = mysql_num_rows($resulTemp);//compte le nombre de lignes
} else {
$nbMaj = mysql_affected_rows();
}
// on sauvegarde la ressource de mysql_query (qui va être effacée) dans une variable
$resultats = $resulTemp;
}

}

// deconnexion de la BD
mysql_close();
}
}

?>


voila en espérant que ça aide et merci de votre aide.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
6 févr. 2009 à 13:43
Ok donc c'est bien ça ton problème : tu ouvre une connexion dans ta fonction d'exécution de requête et tu la ferme à la fin de cette même fonction. Comment veux tu donc pouvoir exécuter par la suite une autre requête puisqu'il n'y a plus une seule connexion sur ta base de données ouverte. Résultat et erreur normales donc.

Maintenant que cherches-tu as faire exactement dans le fameux IF ELSE que tu as rajouter ? Simplement récupérer le status en faisant exactement la même requête que lors de l'identification : tu vois donc bien l'inutilité de refaire la même requête une seconde fois dans le cas où l'utilisateur a été trouvé puisque tu possède déjà le status à l'intérieur de ta variable $resultats.

Il ne te reste en fait qu'à exploiter ce résultat avec un mysql_fetch_assoc de la manière suivante :
Ceci (en gras) :
if (mysql_num_rows($resultats) >= 1)//On a réussi à identifier un utilisateur
{
echo "Connexion réussie";

$requete1 ="SELECT statut from utilisateurs WHERE (login='".$login."') AND (mdp='".$mdpCrypte."')";
$req = mysql_query($requete1);
if ($req['statut'] == 0 )
{ 


devient (en gras):
if (mysql_num_rows($resultats) >= 1)//On a réussi à identifier un utilisateur
{
echo "Connexion réussie";

$req = mysql_fetch_assoc($resultats);
if ($req['statut'] == 0 )
{ 


Code non testé mais l'idée est là et devrait normalement fonctionner.
0
blasil64 Messages postés 11 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 18 février 2009
6 févr. 2009 à 14:17
et ouai ça marche merci beaucoup encore ! Je te fais un grand remerciement !
0