[SQL & PHP] Basic query werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
Ik gebruik MySQL als database (versie: 3.23.58-log)
Maar als ik dan de volgende query wil runnen, doet hij niks:
code:
1
2
3
4
5
DELETE FROM `reserveringen` 
WHERE `reservering_id` = 'een_integer' 
AND `gereserveerd_door` = 'een_username' 
OR `gereserveerd_voor` = 'een_username' 
OR naam.admins = 'een_username'

Wat de bedoeling is, is dus wel duidelijk;
Het weggooien van een reservering, uit de tabel reserveringen, waar de (door .htaccess ingelogde) gebruiker, een reservering kan verwijderen, ALS hij hem aangemaakt heeft, ALS een reservering VOOR hem is aangemaakt óf ALS de ingelogde gebruiker als admin in het systeem staat (wat op gegeven is, in de tabel admins).

En juist bij het laatste stukje gaat het fout, terwijl (volgens mij), de query toch echt goed is.
Ik krijg keer op keer de foutmelding, dat de tabel admins niet bestaat, terwijl deze wel degelijk er staat.
Heb als query ook
code:
1
2
3
4
5
DELETE FROM `reserveringen` 
WHERE `reservering_id` = 'een_integer' 
AND `gereserveerd_door` = 'een_username' 
OR `gereserveerd_voor` = 'een_username' 
OR admins.naam = 'een_username'
geprobeert, echter werkt deze mogelijkheid ook niet.

Nu begin ik me dus af te vragen, of de versie van MySQL die ik gebruik, wel overweg kan, met het zoeken naar een waarde, uit een andere tabel, dan die opgegeven is, bij de 'FROM' waarde.

[google=MySQL 1109 error] of [google=SQL 1109 error] leverd beiden niets op. Ik krijg zat hits, true, maar niet wat ik zoek, want de oplossingen die daar geboden worden, schijnen nooit te werken. Ja eentje, maar dat was voor een vBulletin Board... En die gebruik ik dus niet, en dus is de oplossing waardeloos. Desalniettemin, heb ik het tóch geprobeerd gehad, maar ook die oplossing, bood geen soelaas.

De query werkt trouwens op de volgende manier wél:
code:
1
2
3
4
DELETE FROM `reserveringen` 
WHERE `reservering_id` = 'een_integer' 
AND `gereserveerd_door` = 'een_username' 
OR `gereserveerd_voor` = 'een_username'
Dus zonder de admin 'check'

Ben intussen van mening, dat ik er nu teveel tijd aan spendeer, aan zoiets simpels, dat ik me nu maar even tot jullie wend.

[ Voor 5% gewijzigd door CH4OS op 01-06-2005 13:04 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Rond numerieke waarden moet je geen quotes zetten; enkel rond alfanumerieke waarden dus.

code:
1
2
3
delete from tabel
where id = 5
and naam = 'bleiep'

[ Voor 52% gewijzigd door whoami op 01-06-2005 13:04 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
whoami schreef op woensdag 01 juni 2005 @ 13:04:
Rond numerieke waarden moet je geen quotes zetten.
Maar dat kan de fout niet zijn toch? Bedoel, zoals te zien is, in de derde query, draaid ie hem wel, ook al staan die quotes om dat getal heen..
code:
1
2
OR 
admins.naam = 'een_user'
Is het stukje waar het fout in gaat...

[ Voor 12% gewijzigd door CH4OS op 01-06-2005 13:05 ]


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 11-09 10:47
GJ-tje schreef op woensdag 01 juni 2005 @ 13:02:
Nu begin ik me dus af te vragen, of de versie van MySQL die ik gebruik, wel overweg kan, met het zoeken naar een waarde, uit een andere tabel, dan die opgegeven is, bij de 'FROM' waarde.

[google=MySQL 1109 error] of [google=SQL 1109 error] leverd beiden niets op. Ik krijg zat hits, true, maar niet wat ik zoek, want de oplossingen die daar geboden worden, schijnen nooit te werken. Ja eentje, maar dat was voor een vBulletin Board... En die gebruik ik dus niet, en dus is de oplossing waardeloos. Desalniettemin, heb ik het tóch geprobeerd gehad, maar ook die oplossing, bood geen soelaas.

Ben intussen van mening, dat ik er nu teveel tijd aan spendeer, aan zoiets simpels, dat ik me nu maar even tot jullie wend.
Check even de MySQL manual. En dan vooral de sectie DELETE Syntax. Het kan dus wel, maar jouw definietie voltdoet niet aan de MySQL grammatica.
GJ-tje schreef op woensdag 01 juni 2005 @ 13:05:
[...]
Maar dat kan de fout niet zijn toch? Bedoel, zoals te zien is, in de derde query, draaid ie hem wel, ook al staan die quotes om dat getal heen..
Het feit dat MySQL het slikt wil niet zeggen dat het good practice is.

[ Voor 15% gewijzigd door Sybr_E-N op 01-06-2005 13:06 ]


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
Sybr_E-N schreef op woensdag 01 juni 2005 @ 13:05:
Het feit dat MySQL het slikt wil niet zeggen dat het good practice is.
Ik zal de MySQL manual dan maar even goed doornemen.

Dat het niet 'good practice' is, geef ik je 100% gelijk in, en zal het ook wel aanpassen, maar daarop gaat de query niet vastlopen, zie de edit van mijn vorige post.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Het probleem zal 'm zitten in die OR condities.
Gebruik eens haakjes.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
whoami schreef op woensdag 01 juni 2005 @ 13:10:
Het probleem zal 'm zitten in die OR condities.
Gebruik eens haakjes.
Heb net even wat geprobeerd, met haakjes, maar ik blijf de melding krijgen, dat de tabel admins niet bestaat, terwijl deze wel degelijk bestaat...

code:
1
2
3
4
5
6
7
8
9
10
DELETE FROM 
reserveringen
WHERE 
reserveringen.reservering_id = 68 
AND
(reserveringen.gereserveerd_door = 'gertjanp' )
OR 
(reserveringen.gereserveerd_voor = 'gertjanp' 
OR 
admins.naam = 'gertjanp' )
code:
1
2
3
4
5
6
7
8
9
10
DELETE FROM 
reserveringen
WHERE 
reserveringen.reservering_id = 68 
AND
(reserveringen.gereserveerd_door = 'gertjanp' )
OR 
(reserveringen.gereserveerd_voor = 'gertjanp')
OR 
(admins.naam = 'gertjanp' )

[ Voor 48% gewijzigd door CH4OS op 01-06-2005 13:13 ]


Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Nu online
Ik ben hier ook wel eens tegenaangelopen, als je een OR gebruikt dan splits je alles voor die OR met alles achter de OR. Tenminste ik denk dat daar je probleem zit... Het op te lossen door op de goede plekken ( en ) te gebruiken.

http://www.w3schools.com/sql/sql_and_or.asp

voorbeeldje
code:
1
2
3
SELECT * FROM Persons WHERE
(FirstName='Tove' OR FirstName='Stephen')
AND LastName='Svendson'


=edit=
te laat :( :)

[ Voor 23% gewijzigd door Ramon op 01-06-2005 13:14 ]

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • Nick The Heazk
  • Registratie: Maart 2004
  • Laatst online: 07-09-2024

Nick The Heazk

Zie jij er wat in?

Ik ga voor een typfout;

(codefragment 1) OR naam.admins = 'een_username'
(codefragment 2) OR admins.naam = 'een_username'

bovendien vermoed ik dat je je OR constructie verkeerd hebt gemaakt. Nu evalueert hij: (dit EN dat) OF (dit) OF (dat). Ik denk dat je dit bedoelt: dit EN (dit OF dat OF ditter)

[ Voor 11% gewijzigd door Nick The Heazk op 01-06-2005 13:15 ]

Performance is a residue of good design.


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
Nick The Heazk schreef op woensdag 01 juni 2005 @ 13:14:
Ik ga voor een typfout;

OR naam.admins = 'een_username' != OR admins.naam = 'een_username'
Zoals je in de startpost kan lezen, heb ik ze allebei geprobeerd en bij allebei krijg ik de melding, dat de tabel niet bestaat, van naam.admins snap ik het, daar de tabel naam niet bestaat, maar de andere zou wél moeten werken... ;) Dus ik snap wat je bedoelt te zeggen, en ik geef je ook gelijk, maar niet geschoten is altijd mis toch? ;)
bovendien vermoed ik dat je je OR constructie verkeerd bet gemaakt. Nu evalueert hij: (dit EN dat) OF (dit) OF (dat). Ik denk dat je dit bedoelt: dit EN (dit OF dat OF ditter)
Nee, het moeten alle 3 OF zijn. Aangezien Piet, een reservering kan plaatsen voor Kees, en dat Jan hem als admin weg kan halen... :) (er van uitgaande, dat Jan ingelogt is)

EDIT:
Heb net
code:
1
2
3
4
5
6
7
8
9
10
DELETE FROM 
reserveringen
WHERE 
(reserveringen.reservering_id = 68)
AND
(reserveringen.gereserveerd_door = 'een_username' 
OR 
reserveringen.gereserveerd_voor = 'een_username' )
OR 
admins.naam = 'een_username'
geprobeert, maar ook dit, werkt niet.
Ik kan aannemen, dat als ik
code:
1
2
3
4
5
6
7
8
9
10
DELETE FROM 
reserveringen
WHERE 
(reservering_id = 68)
AND
(gereserveerd_door = 'een_username' 
OR 
gereserveerd_voor = 'een_username' )
OR 
admins.naam = 'een_username'
probeer, het ookniet werkt?
EDIT: En dit werkt ook niet idd, eigenlijk ook wel logisch...

Zou het door de (enigsinds oude) versie van MySQL komen, dat het niet werkt, doordat de versie het gewoon simpelweg niet ondersteund? 8)7

[ Voor 53% gewijzigd door CH4OS op 01-06-2005 13:24 ]


Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Nu online
maar even voor de goede orde, je haalt uit de tabel admins het veld naam. Maar hoe weet MySQL op welke rij hij moet zoeken naar die naam?

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
Ramon de Jesus schreef op woensdag 01 juni 2005 @ 13:25:
maar even voor de goede orde, je haalt uit de tabel admins het veld naam. Maar hoe weet MySQL op welke rij hij moet zoeken naar die naam?
Dat is
code:
1
2
OR 
admins.naam = 'een_username'
admins is de tabel
naam is het veld in het tabel
de . scheid ze van elkaar, in de query zet je dan de naam van de tabel (admins in dit geval) als eerste...

De 'een_username' waarde, is overal in de query gelijk hé ;)
Denk ik meld het even...

[ Voor 44% gewijzigd door CH4OS op 01-06-2005 13:29 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

GJ-tje schreef op woensdag 01 juni 2005 @ 13:26:
[...]
Dat is
code:
1
2
OR 
admins.naam = 'een_username'
admins is de tabel
naam is het veld in het tabel
de . scheid ze van elkaar, in de query zet je dan de naam van de tabel (admins in dit geval) als eerste...

De 'een_username' waarde, is overal in de query gelijk hé ;)
Denk ik meld het even...
Maar je probeert toch wat te verwijderen in de reserveringen tabel en niet in de admin tabel.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
LuCarD schreef op woensdag 01 juni 2005 @ 13:30:
Maar je probeert toch wat te verwijderen in de reserveringen tabel en niet in de admin tabel.
True, maar een admin moet een reservering ook kunnen verwijderen, waar een admin niet de geservereerd_door of gereserveerd_voor is. En die info, of iemand een admin is, staat in de tabel admins.

[ Voor 66% gewijzigd door CH4OS op 01-06-2005 13:36 ]


Acties:
  • 0 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Nu online
dan moet je het dus anders aanpakken. kijk eerst met een andere query of iemand een admin is, en zoja, voer dan die delete query uit bijv.

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 11-09 21:08

BCC

GJ-tje schreef op woensdag 01 juni 2005 @ 13:26:
[...]
Dat is
code:
1
2
OR 
admins.naam = 'een_username'
admins is de tabel
naam is het veld in het tabel
de . scheid ze van elkaar, in de query zet je dan de naam van de tabel (admins in dit geval) als eerste...

De 'een_username' waarde, is overal in de query gelijk hé ;)
Denk ik meld het even...
Dat begrijpt Ramon ook wel. Punt is dat je niet zomaar even naar een regel in een tabel kan wijzen bij zo'n delete. Dat moet óf in een subquery of je moet eerst een losse query doen om te kijken of die user admin is. Bij bijvoorbeeld een select kan dit wel, omdat je daar met meerdere tables bezig kan zijn. Bij een Delete kan dit volgens mij niet.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 00:12
GJ-tje schreef op woensdag 01 juni 2005 @ 13:26:
[...]
Dat is
code:
1
2
OR 
admins.naam = 'een_username'
admins is de tabel
naam is het veld in het tabel
de . scheid ze van elkaar, in de query zet je dan de naam van de tabel (admins in dit geval) als eerste...

De 'een_username' waarde, is overal in de query gelijk hé ;)
Denk ik meld het even...
Dat kan dus niet. Om uit meerdere tabellen data te lezen zul je ze op een of andere manier aan elkaar moeten linken met een JOIN. Wat jij bedoeld met je admins.naam = 'admin_naam' is dat de naam moet voorkomen in de admins tabel. Voor mysql betekent het echter dat er een rij wordt verwijderd waar al dan niet dmv JOINs een kolom admins.naam is waar de adminnaam gelijk is aan 'admin_naam'.
De makkelijkste manier is waarschijnlijk om gewoon aan het begin van je script te bepalen of iemand admin is. Admins zullen wel meer bijzondere rechten hebben in je pagina. Uitgaande van een 1 als admin en 0 voor normale users zet je dan het volgende in je query:
code:
1
2
3
4
5
6
7
8
9
10
DELETE FROM 
reserveringen
WHERE 
(reservering_id = 68)
AND
(gereserveerd_door = 'een_username' 
OR 
gereserveerd_voor = 'een_username'
OR 
$isAdmin )

[ Voor 4% gewijzigd door T-MOB op 01-06-2005 13:37 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Rac-On
  • Registratie: November 2003
  • Niet online
* Rac-On snapt niet waarom iedereen hier reageert over OR en haakjes en zo. Wat LuCarD zegt is geheel correct, je kan geen waardes uit een tabel gebruik als je die tabel niet opneem in je select (of delete in dit geval). Wat je zou kunnen testen is:
code:
1
'een_username' in (select naam from admins)

doet niet aan icons, usertitels of signatures


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 00:12
rac-on schreef op woensdag 01 juni 2005 @ 13:37:
* Rac-On snapt niet waarom iedereen hier reageert over OR en haakjes en zo. Wat LuCarD zegt is geheel correct, je kan geen waardes uit een tabel gebruik als je die tabel niet opneem in je select (of delete in dit geval). Wat je zou kunnen testen is:
code:
1
'een_username' in (select naam from admins)
*mompelt iets over MySQL 3.23...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 11-09 23:18
Ik denk dat je beide tabellen moet noemen bij een delete query.

code:
1
2
3
4
5
DELETE reserveringen.* FROM `reserveringen`, 'admins' 
WHERE `reserveringen.reservering_id` = 'een_integer' 
AND `reserveringen.gereserveerd_door` = 'een_username' 
OR `reserveringen.gereserveerd_voor` = 'een_username' 
OR 'admins.naam' = 'een_username'


Het lijkt mij bovendien logisch dat de integer altijd moet bestaan. Gebruik daarom haakjes:

code:
1
2
3
4
5
DELETE reserveringen.* FROM `reserveringen`, 'admins' 
WHERE `reserveringen.reservering_id` = 'een_integer' 
AND (`reserveringen.gereserveerd_door` = 'een_username' 
OR `reserveringen.gereserveerd_voor` = 'een_username' 
OR 'admins.naam' = 'een_username')


Anders weet je nooit welk er verwijderd moet worden en kijkt ie alleen naar username. Zou je niet willen denk ik!

Succes!

[ Voor 24% gewijzigd door storeman op 01-06-2005 13:42 ]

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
BCC schreef op woensdag 01 juni 2005 @ 13:35:
Dat begrijpt Ramon ook wel. Punt is dat je niet zomaar even naar een regel in een tabel kan wijzen bij zo'n delete. Dat moet óf in een subquery of je moet eerst een losse query doen om te kijken of die user admin is. Bij bijvoorbeeld een select kan dit wel, omdat je daar met meerdere tables bezig kan zijn. Bij een Delete kan dit volgens mij niet.
Hmmm... Is me dat even irritant zeg... Denk je het makkelijk te doen, is het niet makkelijk(er) op te lossen... :9
T-MOB schreef op woensdag 01 juni 2005 @ 13:36:
Wat jij bedoeld met je admins.naam = 'admin_naam' is dat de naam moet voorkomen in de admins tabel.
IDD :)
Voor mysql betekent het echter dat er een rij wordt verwijderd waar al dan niet dmv JOINs een kolom admins.naam is waar de adminnaam gelijk is aan 'admin_naam'.
Hoe zou ik die JOIN moeten doen dan? Want als je een JOIN gebruikt, kan je geloof ik geen WHERE clause meer gebruiken... Of kan je iets doen in de trant van
code:
1
2
WHERE `reservering_id` = 68 
AND (`gereserveerd_voor` = 'een_user' OR `geserveerd_door` = 'een_user' OR JOIN { join syntax even opzoeken })
De makkelijkste manier is waarschijnlijk om gewoon aan het begin van je script te bepalen of iemand admin is. Admins zullen wel meer bijzondere rechten hebben in je pagina. Uitgaande van een 1 als admin en 0 voor normale users zet je dan het volgende in je query:
code:
1
2
3
4
5
6
7
8
9
10
DELETE FROM 
reserveringen
WHERE 
(reservering_id = 68)
AND
(gereserveerd_door = 'een_username' 
OR 
gereserveerd_voor = 'een_username'
OR 
$isAdmin )
De mooiste manier zou zijn, om het via SQL te regelen, word mij ook keer op keer aangeraden, tenzij het echt niet anders kan...

Maar hoe moet die $isAdmin er dan uit zien? Gewoon een integer, met 1 of 0? :? Kan me er nu niet echt een voorstelling van maken. Heb je misschien een code snippet voor me?
storeman schreef op woensdag 01 juni 2005 @ 13:40:
Ik denk dat je beide tabellen moet noemen bij een delete query.

code:
1
2
3
4
5
DELETE reserveringen.* FROM `reserveringen`, 'admins' 
WHERE `reserveringen.reservering_id` = 'een_integer' 
AND `reserveringen.gereserveerd_door` = 'een_username' 
OR `reserveringen.gereserveerd_voor` = 'een_username' 
OR 'admins.naam' = 'een_username'


Het lijkt mij bovendien logisch dat de integer altijd moet bestaan. Gebruik daarom haakjes:

code:
1
2
3
4
5
DELETE reserveringen.* FROM `reserveringen`, 'admins' 
WHERE `reserveringen.reservering_id` = 'een_integer' 
AND (`reserveringen.gereserveerd_door` = 'een_username' 
OR `reserveringen.gereserveerd_voor` = 'een_username' 
OR 'admins.naam' = 'een_username')


Anders weet je nooit welk er verwijderd moet worden en kijkt ie alleen naar username. Zou je niet willen denk ik!

Succes!
Heb ze net even geprobeerd, maar ze geven een MySQL syntax error...
code:
1
2
3
ERROR 1064: You have an error in your SQL syntax near ' `admins`
WHERE `reserveringen.reservering_id` = 68
AND (`reserveringen.gereserv' at line 1
Had wel de query iets aangepast, omdat reserveringen.* niet hoeft toch? :?

[ Voor 57% gewijzigd door CH4OS op 01-06-2005 13:56 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 00:12
GJ-tje schreef op woensdag 01 juni 2005 @ 13:42:
Hoe zou ik die JOIN moeten doen dan? Want als je een JOIN gebruikt, kan je geloof ik geen WHERE clause meer gebruiken...
Een JOIN gebruiken wordt lastig aangezien er vziw geen link is tussen de tabel met admins en de tabel met reserveringen. De opmerking was meer in het algemeen bedoeld.
[...]
Dat zal denk ik ook wel de beste oplossing zijn, maar hoe moet die $isAdmin er dan uit zien? Gewoon een integer, met 1 of 0? :? Kan me er nu niet echt een voorstelling van maken. Heb je misschien een code snippet voor me?
Die $isAdmin moet idd een integer zijn die 0 of 1 is. Hoe een standaard PHP boolean wordt omgezet in een query zou ik namelijk niet uit het hoofd durven zeggen. In code wordt dat dan zoiets:
PHP:
1
2
$query = mysql_query('SELECT naam FROM admin WHERE naam = "user_name" LIMIT 1', $db);
$isAdmin = mysql_num_rows($query);

Die $isAdmin kun je dus gebruiken voor alle acties waarbij adminschap vereist is. Door PHP's loosetyping kun je hem gewoon als boolean aanspreken.

[ Voor 5% gewijzigd door T-MOB op 01-06-2005 13:57 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
T-MOB schreef op woensdag 01 juni 2005 @ 13:56:
[...]


Een JOIN gebruiken wordt lastig aangezien er vziw geen link is tussen de tabel met admins en de tabel met reserveringen. De opmerking was meer in het algemeen bedoeld.

[...]

Die $isAdmin moet idd een integer zijn die 0 of 1 is. Hoe een standaard PHP boolean wordt omgezet in een query zou ik namelijk niet uit het hoofd durven zeggen. In code wordt dat dan zoiets:
PHP:
1
2
$query = mysql_query('SELECT naam FROM admin WHERE naam = "user_name" LIMIT 1', $db);
$isAdmin = mysql_num_rows($query);

Die $isAdmin kun je dus gebruiken voor alle acties waarbij adminschap vereist is. Door PHP's loosetyping kun je hem gewoon als boolean aanspreken.
Maar wat ik dan nog niet snap, is de werking van $isAdmin, bedoel, als er alleen een 1 of 0 staat, is dat toch niet voldoende? :?

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 11-09 21:08

BCC

[quote]T-MOB schreef op woensdag 01 juni 2005 @ 13:56:
PHP:
1
2
$query = mysql_query('SELECT naam FROM admin WHERE naam = "user_name" LIMIT 1', $db);
$isAdmin = mysql_num_rows($query);

Let wel even op, dit is een SQL-injection waiting to happen :)
Maar wat ik dan nog niet snap, is de werking van $isAdmin, bedoel, als er alleen een 1 of 0 staat, is dat toch niet voldoende? :?
WHERE 1=$isAdmin

[ Voor 26% gewijzigd door BCC op 01-06-2005 14:14 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
T-MOB schreef op woensdag 01 juni 2005 @ 13:56:
Let wel even op, dit is een SQL-injection waiting to happen :)
De pagina is beveiligd, door middel van .htaccess, dus het script gaat pas draaien, als er een valid user is ingelogt... ;)

Kan er wel rekening mee gaan houden, daar niet van... ;)

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 00:12
GJ-tje schreef op woensdag 01 juni 2005 @ 14:08:
[...]
Maar wat ik dan nog niet snap, is de werking van $isAdmin, bedoel, als er alleen een 1 of 0 staat, is dat toch niet voldoende? :?
Kort antwoord, jawel. Want 1 is TRUE en 0 is FALSE net zo goed als naam = '$naam' TRUE of FALSE kan zijn.
BCC schreef op woensdag 01 juni 2005 @ 14:10:
Let wel even op, dit is een SQL-injection waiting to happen :)
TS vroeg dan ook om een snippet en niet om een Hacker-proof oplossing :)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
Ik heb net die code snippet geprobeerd, en hij werkt nu...
Ik ben jullie wederom van harte dankbaar :*)
* CH4OS heeft weer een positief uitzicht op zijn stage O+

code:
1
2
3
4
5
DELETE FROM `reserveringen`
WHERE reservering_id = x
AND (gereserveerd_door = 'een_user' 
OR gereserveerd_voor = 'een_user' 
OR $isAdmin = 1)
is de uiteindelijke query geworden, dankzij de hulp van jullie _/-\o_

Als het goed is, is deze code ook SQL-injection proof... Want je dient je eerst in te loggen, alvorens je écht kan verwijderen, of je nou admin bent, ja of nee... Ben je niet ingelogt, kom je de pagina niet op... Ben je geen admin, is de waarde gewoon 0. De waarde van $isAdmin word dan bepaalt, door de admincheck (controle of de geauthenticeerde gebruiker écht admin is) ;)

[ Voor 84% gewijzigd door CH4OS op 01-06-2005 14:31 ]


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 11-09 21:08

BCC

[b][message=23500064,noline]GJ-tje schreef op woensdag 01 juni 2005 @
Als het goed is, is deze code ook SQL-injection proof... Want je dient je eerst in te loggen, alvorens je écht kan verwijderen, of je nou admin bent, ja of nee... Ben je niet ingelogt, kom je de pagina niet op... Ben je geen admin, is de waarde gewoon 0. De waarde van $isAdmin word dan bepaalt, door de admincheck (controle of de geauthenticeerde gebruiker écht admin is) ;)
Ligt eraan waar de "user_name" variabele vandaan komt.. en of die gechecked wordt.. Maar dat is verder een hele andere discussie :)

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.

Pagina: 1