Posez votre question Signaler

Select deux tables mysql avec jointures php

Aurél_ien - Dernière réponse le 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
Lire la suite 

Select deux tables mysql avec jointures php »

14 réponses
Réponse
+3
moins plus
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
Aurél_ien - 1 juil. 2011 à 11:02
D'accord je vais essayer cette solution aussi, merci pour ton aide :D
Aurél_ien - 2 juil. 2011 à 14:54
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
$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).
Aurél_ien - 30 juin 2011 à 09:43
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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
Reivax962- 1 juil. 2011 à 17:29
Je ne comprends pas. Ma méthode ne change pas du tout la structure de ta base de données, uniquement la requête à effectuer...
Aurél_ien - 1 juil. 2011 à 17:39
ah d'accord toi tu rajoute juste un champ dans les deux tables, moi j'avais capté une fusion ^^ désolé x)
Aurél_ien - 1 juil. 2011 à 19:22
ahah enfaite tu ne rajoute même pas de champ, j'ai enfin compris, excuse-moi je débute juste en php-mysql :S. En tout cas cela marche nickel, et je te dis merci beaucoup :D

Bonne continuation a toi Xavier :), A_+
Ajouter un commentaire
Ce document intitulé « select deux tables mysql avec jointures php » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?