MySQL kolom waarde als parameter

Gestart doorEleky14 reacties83 weergaven

15 berichten · pagina 1 van 1

Eleky

Lid · Topicstarter

Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hallo,

Ik loop tegen een probleem aan.
Ik wil bepaalde rijen uit een database halen.
Echter kan ik in het WHERE gedeelte niet simpel = gebruiken, ik moet een reeks test uitvoeren.
Hiervoor heb ik een functie geschreven, alleen nu is de vraag: hoe pas ik deze toe.
Er moet dus een kolom getest worden via een functie, die true of false teruggeeft.

Voorbeeld:

mysql_query("SELECT * FROM tabel WHERE ".phpfunctie(kolomnaam)." ORDER BY order");

Dit werkt dus niet, maar is er iemand die weet hoe je zoeits wel kan doen?
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Ik snap er niks van.

Wat wil je precies voor query maken dan?
0
Eleky

Lid · Topicstarter

Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
In de kolom staat een waarde als bijvoorbeeld: admin, dan wil ik controleren of een gebruiker dit mag zien.
Hiervoor heb ik een stel rangen in een array staan die ik daarmee moet vergelijken.
Zover ik weet kan dit niet direct, dus heb ik hier een functie voor geschreven (die dit vergelijkt)

Echter moet ik dan op een of andere manier de waarde van die kolom dan meegeven om te controleren, dat lukt me niet

EDIT:
Ik weet trouwens dat ik deze controle ook gewoon in de while kan uitvoeren, maar is het ook mogelijk dit al in de query te doen?
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
je kan het toch fetchen, en dan $user[admin] oproepen?
0
Eleky

Lid · Topicstarter

Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Admin is niet de naam.
Stel de kolom heet rang, en heeft een rij met de waarde alle, en rij met waarde lid en een rij met admin.
Dan heb ik een array met daarin: array("alle", "lid").
Dan wil ik dus de rijen met alle en lid wel hebben maar die van admin niet.

Het echt is iets gecompliceerder, vandaar dat het via een functie moet, maar daarom moet ik dus de waarde van rang meegeven om deze te vergelijken
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Waarom maak je niet een opzet zoals ik in MySoftLogon had:

Je hebt een gebruiker (user) en die gebruiker kan in een groep zitten (userGroup). Deze groep kan bepaalde rechten hebben (permissionGroup) maar ook de gebruiker zelf kan permissies hebben (permissionUser). Deze permissies verwijzen weer naar een algemene permissie-tabel (permissions). Permissions heeft dan een opzet als:

permId (1,2,3,4,5)
permName (admin, user, forum, pb, blaat, hank, is_a_noob)
permReadableName (Admin, User, Persoonlijk Bericht, Slaat nergens op, Hank Nootenboom, Hij is een noob)
permDiscription ( ... )


Als je dus de rechten van één gebruiker ophaalt doe je een JOIN query met een opzet zoals deze:

user -> userGroup -> permissionGroup -> permissions
     -> permissionUser -> permissions


Dit haal je dan éénmaal per pagina voor de ingelogde gebruiker op. Je kan dan met een $user->hasPermission(); kijken of de huidige gebruiker een bepaalde permissie heeft.

Wil je een gebruiker toelaten die onder andere de permissie admin heeft dan doe je:

if($user->hasPermission(admin) == true) { ... }


Maar je kan je functie ook met bijvoorbeeld een array aanroepen; Moet de gebruiker meerdere permissies hebben:

if($user->hasPermission(array(user, admin))) { ... }


Of je zou zelfs een functie kunnen maken die bepaalde permissies maar toe laat.

if($user->hasOneOfPermissions(array(user, admin, moderator))) { ... }


Je kunt met deze opzet makkelijk uitbreiden en nieuwe permissies aanmaken, omdat de gebruiker veelal geen persoonlijke permissies heeft, maar gekoppeld is aan een groep. Je kunt dus naar alle wens nieuwe groepen aanmaken die verschillende permissies hebben. Je kunt echter ook als het nodig is om één iemand speciale rechten te geven, die persoon wat persoonlijke rechten aanwijzen.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Waar kan ik MySoftLogin vinden? is dat een rechtenclasse die er werd/wordt gebruikt?
0
Eleky

Lid · Topicstarter

Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Zo werkt het ook ongeveer, echter is nu nog steeds het probleem dat je hasPermission nu een parameter mee moet geven die bepaalt hoe hoog/laag de permission is.
Echter kan ik dus geen WHERE uitvoeren hiermee omdat hij dan moet controleren of de waarde van die rij permission heeft.

Lang verhaal kort, volgens mij heb ik ook ongeveer jouw manier, maar dan nog kan ik geen kolom waarde meegeven aan een functie in een query
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Maar waarom verandert die kolomnaam dan?
In principe heb je gewoon 1 kolom die je rechten ofzo noemt en dan kun je daar van iedereen de rechten uit afleiden.
0
Eleky

Lid · Topicstarter

Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik snap je niet
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Je gebruiker heeft een kolom "rechten" waar je (in mijn geval) de nummers opslaat die corresponderen met de permissieIds in de permissietabel. Eveneens heb je een "groep" kolom bij je gebruiker, die verwijst naar een groep die weer bepaalde permissies kan hebben. Heel die shit haal je bij het aanmaken van je userobject op en zet je in een Array binnen je userobject. Met de functies die ik dan in mijn vorige post zei kijk je met een simpele in_array of de gebruiker ook daadwerkelijk de goede rechten heeft.
0
Eleky

Lid · Topicstarter

Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dat klopt, maar je moet bij in_array aangeven waar je naar zoekt.
In jouw functie is dat:

if($user->hasPermission(admin) == true) { ... }

Hier geef je admin mee, daar zoek je naar.
Maar hoe geef je in een query de waarde van een kolom mee, je kan niet gewoon WHERE phpfunctie(kolomnaam) doen, dat werkt niet
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
maar waarom wil je het dan per se via die query doen?
Zon rechtensysteem als wat Rik uitlegt werkt toch ook prima? Juist beter zelfs, als ik je verhaal een beetje begrijp.
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Eleky schreef:
Dat klopt, maar je moet bij in_array aangeven waar je naar zoekt.
In jouw functie is dat:

if($user->hasPermission(admin) == true) { ... }

Hier geef je admin mee, daar zoek je naar.
Maar hoe geef je in een query de waarde van een kolom mee, je kan niet gewoon WHERE phpfunctie(kolomnaam) doen, dat werkt niet
Die functie die ik noem gebruikt ook helemaal geen query. Je maakt al een array aan op het moment dat je de gebruiker aanmaakt, en je haalt de rechten al op, op het moment dat je de gebruiker aanmaakt.

Ik weet niet hoe jij zit te denken, maar volgens mij werk jij heel omslachtig door voor elke verschillende rang een kolom te maken met een 1 of een 0 ofzo.
0
Eleky

Lid · Topicstarter

Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Laat maar zitten, volgens mij krijg ik mezelf niet helemaal duidelijkwink
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren