A voir également:
- Select 2 tables mysql
- Tables des matières word - Guide
- Mysql community server - Télécharger - Bases de données
- 2 ecran pc - Guide
- Sql lister les tables ✓ - Forum Programmation
- Word numéro de page 1/2 - Guide
3 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 30/06/2011 à 17:29
Modifié par Reivax962 le 30/06/2011 à 17:29
Bonjour,
Ce que tu cherches à faire n'est en fait pas une jointure, mais plutôt une requête sur deux tables distinctes...
Je te suggères plutôt quelque chose comme ça :
Le champ "admin" que j'ai rajouté te permettra de savoir si l'utilisateur est un admin ou pas.
Xavier
Ce que tu cherches à faire n'est en fait pas une jointure, mais plutôt une requête sur deux tables distinctes...
Je te suggères plutôt quelque chose comme ça :
$sql = "SELECT prenom, nom, 1 as admin FROM administrateur WHERE email = '$email' AND password = '$password' UNION ALL SELECT prenom, nom, 0 FROM utilisateur WHERE email = '$email' AND password = '$password' ;";
Le champ "admin" que j'ai rajouté te permettra de savoir si l'utilisateur est un admin ou pas.
Xavier
ghuysmans99
Messages postés
2496
Date d'inscription
jeudi 14 juillet 2005
Statut
Contributeur
Dernière intervention
5 juin 2016
340
30 juin 2011 à 08:03
30 juin 2011 à 08:03
$sql = "SELECT administrateur.prenom, administrateur.nom FROM administrateur INNER JOIN utilisateur ON administrateur.email = utilisateur.email WHERE administrateur.email = '$email' AND administrateur.password = '$password';";
Ta structure de base est mauvaise, il suffit ici d'un champ TINYINT(1) admin dans ta table utilisateur qui détermine si l'utilisateur est ou pas administrateur (1 ou 0).
Je comprend bien ce que tu veux dire et ton code marche parfaitement, mais dans mon formulaire d'inscription il n'y a pas possibilité de dire si la personne est administrateur, elle est juste utilisateur, puisque l'administrateur pour le moment c'est uniquement moi.
Es ce que dans mon formulaire je fais un input hidden disant a chaque envoi la valeur 0 pour le champ TINYINT(1) ou es ce que je peux faire autrement sans passer par ce champ ?
Es ce que dans mon formulaire je fais un input hidden disant a chaque envoi la valeur 0 pour le champ TINYINT(1) ou es ce que je peux faire autrement sans passer par ce champ ?
doctormad
Messages postés
430
Date d'inscription
mercredi 28 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2015
99
30 juin 2011 à 16:41
30 juin 2011 à 16:41
Salut,
Pour détailler un peu la réponse précédente :
Au lieu d'avoir deux tables, user et admin il te faut une seule table user qui a un champ en + "droit" qui détermine le niveau de droit de l'user, exemple 0 = user , 1 = admin
Du coup ton problème est résolu car tu n'a plus de jointure à faire.
Dans un autre cas de figure ou tu as deux tables différentes qui ont les mêmes noms de champs, ça peut arriver, alors tu devra faire des alias sur ta requete, exemple :
SELECT zool.nom AS zool_nom, gozer.nom AS gozer_nom FROM zool,gozer
Pour détailler un peu la réponse précédente :
Au lieu d'avoir deux tables, user et admin il te faut une seule table user qui a un champ en + "droit" qui détermine le niveau de droit de l'user, exemple 0 = user , 1 = admin
Du coup ton problème est résolu car tu n'a plus de jointure à faire.
Dans un autre cas de figure ou tu as deux tables différentes qui ont les mêmes noms de champs, ça peut arriver, alors tu devra faire des alias sur ta requete, exemple :
SELECT zool.nom AS zool_nom, gozer.nom AS gozer_nom FROM zool,gozer
J'ai avancé un peu ^^ mais ca ne marche toujours pas x) Enfin les allias marche de la façon que quand je suis redirigé sur home.php cela n'affiche plus le premier id contenu dans la table administrateur, mais cette fois la requete de selectionne pas le nom et prénom de l'utilisateur. C'est a dire que mon $_SESSION['nom'] = $enregistrements['nom'] ne prend aucune valeur. Tu as une idée ?
Voici la requête :
$sql = "SELECT administrateur.prenom AS administrateur_prenom, administrateur.nom AS administrateur_nom, utilisateur.prenom AS utilisateur_prenom, utilisateur.nom AS utilisateur_nom FROM administrateur, utilisateur WHERE administrateur.email = '$email' AND administrateur.password = '$password' OR utilisateur.email = '$email' AND utilisateur.password = '$password' ;";
Voici la requête :
$sql = "SELECT administrateur.prenom AS administrateur_prenom, administrateur.nom AS administrateur_nom, utilisateur.prenom AS utilisateur_prenom, utilisateur.nom AS utilisateur_nom FROM administrateur, utilisateur WHERE administrateur.email = '$email' AND administrateur.password = '$password' OR utilisateur.email = '$email' AND utilisateur.password = '$password' ;";
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 1/07/2011 à 16:41
Modifié par Reivax962 le 1/07/2011 à 16:41
Bonjour,
C'est normal, car ta requête t'envoie les champs suivants :
administrateur_nom
utilisateur_nom
Donc $enregistrements['nom'] n'existe pas.
Tu as essayé ce que je t'ai suggéré ? Il me semble que c'est plus simple...
Xavier
C'est normal, car ta requête t'envoie les champs suivants :
administrateur_nom
utilisateur_nom
Donc $enregistrements['nom'] n'existe pas.
Tu as essayé ce que je t'ai suggéré ? Il me semble que c'est plus simple...
Xavier
Bonjour Xavier,
Oui ce que tu m'as suggéré marche totalement et c'est beaucoup plus simple, mais pour mon projet les tables administrateur et utilisateur doivent être dissocié je ne peux donc pas utiliser ta méthode, désolé :/, mais merci car grâce a ton code j'ai pu apprendre une nouvelle méthode sur le Mysql :D
Oui ce que tu m'as suggéré marche totalement et c'est beaucoup plus simple, mais pour mon projet les tables administrateur et utilisateur doivent être dissocié je ne peux donc pas utiliser ta méthode, désolé :/, mais merci car grâce a ton code j'ai pu apprendre une nouvelle méthode sur le Mysql :D
1 juil. 2011 à 11:02
2 juil. 2011 à 14:54