Connexion avec deux types d'utilisateur

omlaly - 19 févr. 2013 à 17:21
 omlaly - 22 févr. 2013 à 15:57
Bonjour

J'essaye de faire ma page de connexion PHP avec deux requêtes SQL pour gérer deux droits :
-administrateur (moi)
-membres

Je vous mets mon code où il y a deux variables (une pour l'administrateur et une pour les membres), le voici :
$query_connexion=mysql_query("SELECT user_pseudo FROM  user WHERE user_pseudo = '$identifiant_connexion' AND user_mdp = '$password_connexion_sha1'") or die('Erreur lors de la connexion des membres'.mysql_error()); // Envoie une requête à un serveur MySQL
$query_connexion_administrateur=mysql_query("SELECT user_administrateur FROM administrateur WHERE user_administrateur	 = '$identifiant_connexion' AND user_administrateur = '$password_connexion_sha1'") or die('Erreur lors de la connexion de l\'administrateur du site'.mysql_error()); // Envoie une requête à un serveur MySQL

// Test si l'utilisateur est inscrit - réponse positive
if(mysql_num_rows($query_connexion) == 1) { // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
echo "<center>Vous êtes authentifié. Merci, vous allez être redirigé dans 5 secondes.</center>";
echo '<meta http-equiv="refresh" content="5;URL=adresse.php">'; // Pour effectuer la redirection après 5 secondes - marche avec Google Chrome et Opera pas avec Mozilla Firefox
$_SESSION['Statut'] == 2;
}


// Test suivant pour voir si c'est l'administrateur (moi) qui s'est connecté - 
if(mysql_num_rows($query_connexion_administrateur) == 1) { // mysql_num_rows retourne le nombre de lignes d'un résultat MySQL
session_start();
$_SESSION['Statut'] == 1;
echo "<center>Vous êtes authentifié. Merci, vous allez être redirigé dans 5 secondes.</center>";
echo '<meta http-equiv="refresh" content="5;URL=adresse.php">'; // Pour effectuer la redirection après 5 secondes - marche avec Google Chrome et Opera pas avec Mozilla Firefox
}


Quand je m'authentifie en tant que membres, ça marche même si ça m'affiche
Vous n'êtes pas inscrit. Merci de vous inscrire
tandis que quand j'essaye de me connecter en tant d'administrateur, ça passe directement :
Vous n'êtes pas inscrit. Merci de vous inscrire.


J'ai essayé de faire
if(mysql_num_rows($query_connexion)||mysql_num_rows($query_connexion_administrateur)
mais il me met une erreur. En fait, je veux que c'est soit la requête SQL des membres soit la requête SQL de l'administrateur qu'il faut exécuter mais il ne veut pas.

A noter que j'utilise les variables de sessions. Pour les récupérer, j'ai mis le code suivant :
if ((isset($_SESSION['identifiant_connexion'])) && (!empty($_SESSION['identifiant_connexion'])))
{   echo "administrateur";
}
        else
             echo "membre";
?>


A noter que j'ai fait une table pour l'administrateur et une pour les membres.

Qu'est-ce que vous en pensez ?

J'ai cherché mais comme je suis bloqué, je poste ce message...

En attendant vos réponses, je continue mes recherches...
Cordialement

48 réponses

Les inscriptions, c'est bon, c'est ok.

Maintenant, ce que je veux c'est différencier si c'est l'administrateur qui se connecte (moi) ou si ce sont les membres qui se connectent.

En fait, c'est pour afficher un menu selon le type d'utilisateurs (administrateur ou membres). J'ai fait un menu, seulement je voudrais qu'il s'affiche que si c'est moi qui se connecte et pas les membres !

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 10:56
Tu crées une session.
De plus pour que tu comprennes mieux la logique des tableaux avec plusieurs dimensions, on va y ajouter le nom de membre connecté.
On va créer une session à deux dimensions.
<?php
$row = mysql_fetch_row($query_connexion, MYSQL_ASSOC);
if (($row['user_acces'] === 1) || ($row['user_acces'] === 2)) {
    $_SESSION['user']['user_acces'] = $row['user_acces'];
    $_SESSION['user']['user_pseudo'] = $row['user_pseudo'];
    *...
} else {
    *...
}


Avec ça, tu peux afficher le nom du user connecté, par exemple dans le coin supérieur droit de la page.
<?php echo $_SESSION['user']['user_pseudo']; ?>


Plus loin, dans ton code pour le menu
<?php
if ($_SESSION['user']['user_acces'] == 1) {
    echo 'menu admin';
} elseif ($_SESSION['user']['user_acces'] == 2) {
    echo 'menu membre';
} 


Attention, n'oublies pas d'ajouter la fonction session_start(); sur toutes les page php en première ligne de code car sinon, tu perds la session.

Par la suite, pour déconnecter le membre, tu détruits la session.
Et si le membre n'as pas de session, il est redirigé vers la page de connexion.

J'imagine que tu as fait cela avec un cookie ?

stéph
0
Oui j'avais tout fait avec les COOKIES mais j'aimerais faire avec les VARIABLES DE SESSIONS car c'est plus protégé.

En ce qui concerne la connexion (en fait, c'est une fenêtre POP-UP je te le dis juste pour info mais à mon avis, ça change rien), ça affiche toujours le même message (Vous n'êtes pas inscrit. Merci de vous inscrire.) donc j'ai supprimé ce bloc.
Donc maintenant, si j'essaye de me connecter en tant qu'administrateur ou en tant que membre, ça fait plus rien (logique car j'ai supprimé le bloc).

Voici le code PHP de traitement du formulaire de connexion (je te met l'intégralité du code comme ça tu pourras tout voir (peut-être que c'est un problème à la con d'accolades...), je te remet le bloc) :
<?php include('include/fichierbasededonnees/config.php'); // On cherche le fichier config.php pour la base de données

$erreurs=array(); // Tableau qui stocke les erreurs

if ($_POST['identifiant_connexion']==''||$_POST['password_connexion']=='') {
$erreurs[]='Erreur de saisie de l\'identifiant ou du mot de passe';
}
if(count($erreurs)==0) {
sleep(1); 

$identifiant_connexion=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['identifiant_connexion'])));

$password_connexion_sha1 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['password_connexion'])));

// On ouvre la session
session_start(); // Démarre une nouvelle session ou reprend une session existante

// Test pour tester le nombre de tentative de connexion
if(!isset($_SESSION['tentative_connexion'])){
 $temps = 90; // 90 pour 1 minute 30
 setcookie ("tentative_connexion", "1", time() + $temps);
}
else
if($_SESSION['tentative_connexion']=="1"){
$temps = 90; // 90 pour 1 minute 30
setcookie ("tentative_connexion", "2", time() + $temps);
}
else
{
setcookie("tentative_connexion", "", time() - 3600, '/'); // Pour supprimer le cookie lors de la fermeture de l'onglet ou du navigateur pour éviter le test lors d'un nouvel essai
$formulaire_connexion_recuperation = "
<center>Un mot de passe va vous être envoyé.</center>
Adresse e-mail :,
    

";

echo $formulaire_connexion_recuperation;
// Masquer le formulaire de connexion - à faire
echo "<script type='text/javascript'>";
echo "document.getElementById('formulaire_connexion').style.display='none'";
echo "</script>";


// Test si utilisateur inscrit
//$query_recuperation_mot_de_passe=mysql_query("SELECT user_email FROM user WHERE user_email =". $formulaire_connexion_recuperation_password_email."") or die('Erreur lors du test sur l\'utilisateur est inscrit lors de la récupération du mot de passe'.mysql_error()); // Envoie une requête à un serveur MySQL	
}

   // Sélectionnement de l'utilisateur désiré dans la base de données

$query_connexion=mysql_query("SELECT user_pseudo FROM user WHERE user_pseudo = '$identifiant_connexion' AND user_mdp = '$password_connexion'") or die('Erreur lors de la connexion générale'.mysql_error()); // Envoie une requête à un serveur MySQL

$row = mysql_fetch_row($query_connexion, MYSQL_ASSOC);
if (($row['user_acces'] === 1) || ($row['user_acces'] === 2)) {
    $_SESSION['user']['user_acces'] = $row['user_acces'];
    $_SESSION['user']['user_pseudo'] = $row['user_pseudo'];	echo "<center>Vous êtes authentifié. Merci, vous allez être redirigé dans 5 secondes cher admin.</center>";
//echo '<meta http-equiv="refresh" content="5;URL=/adresse.php">'; // Pour effectuer la redirection après 5 secondes - marche avec Google Chrome et Opera pas avec Mozilla Firefox
}
else
if ($row['user_acces'] === 2) {
echo "<center>Vous êtes authentifié. Merci, vous allez être redirigé dans 5 secondes cher membre.</center>";
setcookie("nom_cookie", "", time() - 3600, '/'); // Pour réinitialiser le cookie
$_SESSION['statut_connexion'] == Membres;
echo '<meta http-equiv="refresh" content="5;URL=/adresse.php">'; // Pour effectuer la redirection après 5 secondes - marche avec Google Chrome et Opera pas avec Mozilla Firefox
} 
else 
{
   echo "<center>Vous n'êtes pas inscrit. Merci de vous inscrire.</center>";
}
}
else
{
echo "";
for($i=0;$i<count($erreurs);$i++)
{
echo $erreurs[$i].".
";
}
echo "

";
}
?>


As-tu une idée de ce qu'il ne va pas ?

Cordialement
0
Pour information, voici le code HTML de la fenêtre POPUP de connexion :
    

      <!-- J'ai fait ce tableau pour régler le problème de compatibilité qu'il y avait avec MOZILLA FIREFOX où le formulaire ne respectait pas la hauteur de l'image, il se mettait en dessous du texte (à gauche de l'image) et donc l'image empêchait le bon rendu du formulaire sur MOZILLA FIREFOX - l'image était en style=\"float:right;\", en style=\"float:left;\" tout marchait sauf que l'image était à gauche du texte (voir pop up inscription : pour l'inscription, c'est moins problématique car le texte descriptif fait la même hauteur que l'image !!!) -->
----

<center>
<?php echo $popup_connexion_title;?>
</center>

,

----

<?php echo $popup_connexion_description;?>,
" />,

<form method=\"post\" onSubmit=\"signin_connexion(this.identifiant_connexion.value,this.password_connexion.value);return false\" action=\"\">

<table width=\"410\" border=\"0\">
----

"><?php echo $popup_connexion_title_identifiant;?>,
,

----

"><?php echo $popup_inscription_identifiant;?>,


          " />,

<?php echo $popup_connexion_checkbox;?>,
" />,

</form>

    



Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 12:20
Tu ne peux pas travailler comme cela.
Tu dois fonctionner par étape et laisser des traces pour déboguer.
Là, tu me balances tout le code, et tu le fais très souvent.
Tu dois travailler étape par étape pour être autonome car sinon tu ne travailleras jamais seul.
Et également, tes questions seront précise pour déboguer car il faut avouer que tu n'as posé aucune question.
Mais plutôt un gros HELP!

stéph
0
Ma question est la suivante : qu'est ce qu'il ne va pas dans ces codes pour pouvoir différencier les connexions de l'administrateur (moi) et des membres (pour pouvoir afficher le menu d'administration que j'ai fait que lorsque c'est moi qui me connecte) ?

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 13:05
Tu exagères car tu ne comprends pas.
Tu m’aurais dit, mes sessions fonctionnes, j'ai une trace avec un print de la session $_SESSION['user']['user_acces'].
Ou, j'ai une erreur SQL, voici l'erreur : ,...
Ou, la variable $_POST['identifiant_connexion'] est vide est pourtant,...

Mais bien-sur ta question, "qu'est ce qu'il ne va pas dans ces codes" ?
Ok, donc, je te prend par la main et première question.
Tu as fait un print de la session $_SESSION['user']['user_acces'] pour vérifier si elle n'est pas vide ?
Ou mieux, tu vas enfin te réveiller ?

stéph
0
Sur ce coup, je n'ai jamais eu d'erreur SQL, je vois juste que le test ne fonctionne pas car il m'affiche toujours le message.

Quand je fais un
print($_SESSION['user']['user_acces']);
, il ne m'affiche rien !

Et non, je ne fais pas exprès !

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 13:26
Et oui, tu le fais exprès (sinon c'est ton QI qui va en prendre un coup, ne me fait rien dire de plus), car là, tu as déjà un argument pour le débogage.

Il n'y a aucune valeur dans la variable $_SESSION['user']['user_acces'].
Donc, vérifie si la variable $row['user_acces'] n'est pas vide quand tu initialises la variable $_SESSION['user']['user_acces'].
Mais tu vois, ça aussi tu aurais su le déduire seul si tu fonctionne étape par étape.

Je fais cela pour ton bien .
Oui, c'est vrais.

stéph
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
21 févr. 2013 à 13:29
Je vois que je suis pas le seul à désespérer de t'aider, ça fait plaisir
Bon, j'y connais rien en PHP, je vous laisse
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 13:32
, non reste

@omlaly,

stéph
0
Désolé, je ne fais pas exprès !
0
Ce n'est pas un problème d'accolades mal placées ? Enfin, je sais pas...
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 14:52
Ton serveur PHP est configuré pour afficher ce genre d'erreurs à l'écran.
Donc, je ne crois pas !

stéph
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 14:58
J'ai vu un truque intéressant mais complètement dingue, car difficile à déboguer quand aucune erreur est affichée à l'écran.
Je crois que tu as raison, tu as plusieurs else qui n’ont pas d'accolades d'ouverture et de fermeture.
Logiquement, il ne devrait pas avoir de problème si la méthode ne contient pas plus d'une ligne de code.
Et ton code dans les else ont bcp de lignes de codes.

stéph
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
21 févr. 2013 à 14:58
Il parle d'une remarque que j'ai faite sur un autre sujet où j'ai répondu et où il avait mal retranscrit son code (manquait une accolade).

Tu noteras l'effort de réflexion qui aura été de poser une question "en l'air" ici ...
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 15:07
En effet, mais je crois que @omlaly souffre d'un manque de travail sur les fondamentaux de PHP.
@omlaly, je crois que tu es un autodidacte qui saute les étapes dans sont apprentissages, je crois qu'il serait bon pour toi et tes futurs développements de relire la syntaxe PHP, array, boucle (foreach, for, while), récursive, arbre, etc, ...

stéph
0
Oh les deux là, je tiens à vous dire que je fais ça par plaisir pas autre chose.
C'est sûr que certaines erreurs peuvent choqué certains webmasters mais qu'est-ce que vous voulez, je ne fait pas partie du métier.

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
21 févr. 2013 à 18:06
Désolé, mes conseils sont déplacés.
Tu es très bon, et les fondamentaux de PHP, tu les connais !
Mea culpa, je l'avoue c'est moi .

Tu as le don, celui de comprendre la remise en question.
Je me remet en question et je m'excuse.

stéph
0
Non mais il faut que vous compreniez que si je fais ça, c'est pas mon métier c'est juste mon plaisir. C'est pour ça que je pose beaucoup de questions et que je recherche sur le net.

Cordialement
0
Rejoignez-nous