login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Inloggegevens uit meerdere tabellen halen

Offline Ultimatum - 15/01/2008 21:40
Avatar van UltimatumPHP expert Ik heb een zeer ingewikkeld sql probleem waar ik op het moment niet geheel uitkom.

Voor het inloggen moet er uit 4 verschillende tabellen gegevens worden gehaald om een persoon in te loggen. Klinkt misschien niet geheel logisch dus zal het even uitleggen. Via 1 loginscherm moet een medewerker, student en bedrijf kunnen inloggen, ik moet dus kijken in welke tabel de combinatie gebruikersnaam/wachtwoord overeen komt (of niet). Maar ik kom dus niet helemaal uit de sql query.

Heb nu deze query maar hij werkt uitaard niet. Heb ook in phpmyadmin geprobeerd en krijg gewoon 0 resulaten.

De velden kloppen dus ook wel, heb geen idee wat ik nou precies fout doe, mijn queries zijn normaal nooit zo complex 

  1. $select = mysql_query("SELECT *
  2. FROM studenten, medewerkers, bedrijven
  3. INNER JOIN afdelingen_gegevens ON(bedrijven.bedrijf_id = afdelingen_gegevens.bedrijf_id)
  4. WHERE studenten.ovnummer = '". $_POST['gebruikersnaam'] ."' && studenten.wachtwoord = '". md5($_POST['wachtwoord']) ."'
  5. OR medewerkers.gebruikersnaam = '". $_POST['gebruikersnaam'] ."' && medewerkers.wachtwoord = '". md5($_POST['wachtwoord']) ."'
  6. OR bedrijven.bedrijfnaam = '". $_POST['gebruikersnaam'] ."' && afdelingen_gegevens.wachtwoord = '". md5($_POST['wachtwoord']) ."'") OR die(mysql_error();

13 antwoorden

Gesponsorde links
Offline langemol - 15/01/2008 22:27
Avatar van langemol Nieuw lid Ik denk dat het handiger is gebruikernaam en wachtwoord van alle groepen in 1 tabel te doen (met eventueel andere kolommen die alle groepen hebben), met een id, en alle andere informatie in de tabel van de desbetreffende groep te stoppen (en datzelfde id gebruiken).
Offline Ultimatum - 15/01/2008 22:40
Avatar van Ultimatum PHP expert Nee, ik kan het niet in 1 tabel opslaan. Dit omdat bedrijven vaker kunnen voorkomen, vandaar dat ze in een aparte tabel zitten, en meerdere bedrijven kunnen dezelfde afdelingsnamen hebben. En anders moet ik een tabel maken met 3 velden waarvan de 3de alleen word gebruikt als ik een bedrijf opsla.

Wil het dus zo houden zoals ik het heb en het dus met 1 query proberen. Iemand anders een idee.
Offline langemol - 15/01/2008 22:50
Avatar van langemol Nieuw lid Wat meer haakjes zetten zou ook wel eens kunnen helpen
(gebruikersnaam && wachtwoord) OR (...&&...) OR (...&&...)
Offline Ultimatum - 15/01/2008 22:51 (laatste wijziging 15/01/2008 22:57)
Avatar van Ultimatum PHP expert Dat had ik ook geprobeerd, geen verschil. Had ook al geprobeerd de gehele WHERE in haakje te zetten.

WHERE ((gebruikersnaam && wachtwoord) OR (...&&...) OR (...&&...))

Maar dat maakt ook niets uit..

Want krijg dan heel raar resultaat, krijg de rij uit de tabel van de gegevens die overeen komen + een rij uit de andere tabellen die in de query staan
Offline butters - 16/01/2008 08:45
Avatar van butters Nieuw lid zou idd je tabellen opnieuw inrichten... of mss een tweetal tabellen extra maken met daarin functie en bedrijf.

Je zou ook op je inlogpagina een selectbox kunnen maken waarmee men de functie (student/medewerker/bedrijf) kan selecteren. Weet jij meteen welke tabel je moet checken 
Offline Grayen - 16/01/2008 11:24
Avatar van Grayen PHP ver gevorderde Het zal helpen als je de tabel structuur zou geven.
Offline raza - 16/01/2008 12:23
Avatar van raza HTML beginner Idd, ik zou nog eens de normalisatie herbekijken 

Een eenvoudig oplossing voor jouw situatie is een select box waarbij de gebruiker kan aangeven welk type gebuiker hij is (particulier/bedrijf/...)
Offline Ultimatum - 16/01/2008 13:45 (laatste wijziging 16/01/2008 13:48)
Avatar van Ultimatum PHP expert
butters schreef:
zou idd je tabellen opnieuw inrichten... of mss een tweetal tabellen extra maken met daarin functie en bedrijf.

Je zou ook op je inlogpagina een selectbox kunnen maken waarmee men de functie (student/medewerker/bedrijf) kan selecteren. Weet jij meteen welke tabel je moet checken 

De opdrachtgever wil geen selectbox.

Grayen schreef:
Het zal helpen als je de tabel structuur zou geven.

Genormaliseerd tot de 3de normaalvorm

Uitleg waarom ik bedrijven zo helemaal heb gestript:
Meerdere afdelingen van hetzelfde bedrijf kunnen zich aanmelden. Een meerdere bedrijven kunnen dezelfde afdelingnamen gebruiken. Zoals ik het nu heb blijft alles uniek. En kunnen de afdelingen met dezelfde bedrijfsnaam inloggen, maar ander wachtwoord per afdeling.

Moet nog een uml maken, zodat het duidelijker word. Iemand suggestie voor programma? 
Offline cloudstrife - 16/01/2008 13:48
Avatar van cloudstrife PHP beginner En als het echt met die db moet en zonder selectiebox, overloop dan bij het inloggen gewoon elke tabel individueel en zie welke tabel het juiste resultaat bevat. Het is omslachtig maar het zou zeker en vast werken in jouw geval.
Offline Ultimatum - 16/01/2008 13:51
Avatar van Ultimatum PHP expert Het hoeft niet echt met die database, is er een manier waarop het genormaliseerd blijft en ook mijn probleem oplost dan? En ik zat ook te denken aan meerdere queries, maar ik heb liever 1 (grote) query dan 3 aparte met oog op snelheid in de toekomst, als je begrijpt wat ik bedoel.
Offline Stijn - 16/01/2008 14:02
Avatar van Stijn PHP expert Die INNER JOIN is er teveel aan. Je moet gewoon die 4 tabellen schrijven:
  1. FROM tabel1 , tabel2 , tabel3 , tabel4


Je moet dan je WHERE clause wat uitgebreid maken

  1. WHERE ( (... AND ....) OR (... AND....) OR (....AND....)
  2. AND (bedrijven.bedrijf_id = afdelingen_gegevens.bedrijf_id)
Offline butters - 16/01/2008 14:24
Avatar van butters Nieuw lid nog een tip: mysql_real_escape_string() om je $_POST[] vars zetten
Offline Ultimatum - 16/01/2008 14:37 (laatste wijziging 16/01/2008 14:48)
Avatar van Ultimatum PHP expert Dat weet ik ook wel, dit is om te testen en daar gaat het topic niet over...

@stijn, maar als ik een resultaat terug krijg van bijvoorbeeld de student tabel, dan zie ik dat resultaat + resultaat van de andere tabellen omdat er geen koppeling inzit en die velden inde select staan. Voorbeeld:
Citaat:
ovnummer gebruikersnaam
87112305 T.Est


Gebruikersnaam staat in de tabel medewerkers. (Heb alleen met tabellen studenten en medewerkers getest)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.171s