Select deux tables mysql avec jointures php

Fermé
Aurél_ien - 29 juin 2011 à 19:26
 Aurél_ien - 2 juil. 2011 à 14:54
Bonjour,

Voilà, dans une requête php je demande de sélectionner le nom et prénom de l'utlisateur ayant rentré son email et son mot de passe selon les tables administrateur et utilisateur. Ces tables ont les mêmes structure.

Voici mon code

<?php

session_start();

$sql = "SELECT administrateur.prenom, administrateur.nom, utilisateur.prenom, utilisateur.nom FROM administrateur, utilisateur WHERE administrateur.email = '$email' AND administrateur.password = '$password' OR utilisateur.email = '$email' AND utilisateur.password = '$password' ;";

$resultat = qdb($sql);

$nombre_resultats = mysql_num_rows($resultat);

$enregistrements = mysql_fetch_array($resulat);

$_SESSION['prenom'] = $enregistrements['prenom'];

$_SESSION['nom'] = $enregistrements['nom'];

header("Location: home.php");

?>

Mon problème est que quand l'utilisateur ayant rentré ses identifiant puis avoir été redirigé sur la page home.php la session n'affiche pas le nom et prénom de m'utilisateur, mais le nom est prénom du premiere id contenu dans la base administrateur et je ne comprend pas pourquoi, je pense qu'il y a un conflit, dans le choix de la table selon les identifiants rentrés.

Pouvez-vous m'aidez ?

Merci :D


A voir également:

3 réponses

Reivax962 Messages postés 3671 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
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 :

$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
3
D'accord je vais essayer cette solution aussi, merci pour ton aide :D
0
Pour ta méthode qui marche super, il y a juste un détail que je n'arrive pas a reglé si je rentre l'email d'un utilsateur avec le password d'un administrateur ou inversement je peux me connecter a home.php meme si éviement $enregistrements n'existe pas, tu as une solution contre ça Xavier ?
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 338
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).
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 ?
0
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
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
0
Merci de m'avoir apporté ton aide :D je pense que je vais essayer la solution des allias car pou mon projet il me faut deux tables différente ^^. A +
0
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' ;";
0
Reivax962 Messages postés 3671 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
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
0
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
0
P.S Xavier,

As-tu une solution pour que $enregistrements['nom'] existe ? Dois-je faire une condition ou y a t'il un code spécifique ?
0