[PHP mySQL] vreemd inner join probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb twee tabellen met informatie.

De ene tabel bestaat uit 500 records wielrenners, van Abakoumov tot Zubeldia. De tweede tabel bestaat uit ploegen, die worden ingevuld door deelnemers aan het wielerspelletje.

De wielrennerstabel heeft een kolom 'ploegID' die overeenkomt met de ID in de ploegentabel.

Nu wil ik dmv een (volgens mij tamelijk eenvoudige) innerjoin de boel aan elkaar vastknuppen en met

PHP:
1
2
3
4
5
6
7
8
9
$sql = "SELECT  ".$table['renners'].".ID,  
                    ".$table['renners'].".naam,
                    ".$table['renners'].".nationaliteit_ico,
                    ".$table['ploegen'].".naam,
                    ".$table['ploegen'].".ID  
                    FROM ".$table['renners'].", ".$table['ploegen']." 
                    WHERE  ".$table['renners'].".ploegID=".$table['ploegen'].".ID
                    ORDER by ".$_GET['sort']." ASC 
                    LIMIT ".$_GET['start'].", ".$_GET['limiter'];


doet dit ook wat ik wil. (zie http://www.klassikaprikma...ndex.php?page=renners.php)

Nu wil ik echter een zoekfunctietje en een alfabet functietje erbij hebben. maar dan geeftie de renner plotseling drie keer (voor elke ploeg in de database).

PHP:
1
2
3
4
5
6
7
8
9
10
11
$sql = "SELECT  ".$table['renners'].".ID,  
                    ".$table['renners'].".naam,
                    ".$table['renners'].".nationaliteit_ico,
                    ".$table['ploegen'].".naam,
                    ".$table['ploegen'].".ID  
                    FROM ".$table['renners'].", ".$table['ploegen']." 
                    WHERE ".$table['renners'].".naam LIKE '%".$_GET['rennernaam']."%'
                    OR ".$table['renners'].".naam LIKE '%".strtoupper($_GET['rennernaam'])."%'
                    AND  ".$table['renners'].".ploegID=".$table['ploegen'].".ID
                    ORDER by ".$table['renners'].".naam ASC 
                    LIMIT ".$_GET['start'].", ".$_GET['limiter'];


of bijvoorbeeld

PHP:
1
2
3
4
5
6
7
8
9
10
11
$sql = "SELECT  ".$table['renners'].".ID,  
                    ".$table['renners'].".naam,
                    ".$table['renners'].".nationaliteit_ico,
                    ".$table['ploegen'].".naam,
                    ".$table['ploegen'].".ID  
                    FROM ".$table['renners'].", ".$table['ploegen']." 
                    WHERE  ".$table['renners'].".ploegID='".$table['ploegen'].".ID'
                    AND ".$table['renners'].".naam LIKE '".$_GET['renletter']."%'
                    OR ".$table['renners'].".naam LIKE '".strtoupper($_GET['renletter'])."%'
                    ORDER by ".$table['renners'].".naam ASC 
                    LIMIT ".$_GET['start'].", ".$_GET['limiter'];


(Zie http://www.klassikaprikma...ndex.php?page=renners.php en speel een beetje met de linkjes, formpjes)

Ik begrijp niet precies wat er misgaat, immers de where regel die in de eerste query prima functioneert lijkt nu plotseling door die AND niet meer te werken. Iemand enig idee?

Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 22:49

Reinier

\o/

Haakjes gebruiken? OR en AND combineren doet rare dingen als je dat niet doet. ( A AND B ) or C is iets anders dan A AND B OR C en A AND ( B OR C ).

Overigens, waarom gebruik je niet INNER JOIN terwijl je het over een inner join hebt? Nu maak je een cartesisch product wat je vervolgens in de WHERE filtert.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

En als je een normale JOIN gebruikt op de tabel Ploegen?

Overigens vind ik
PHP:
1
2
$sql = "WHERE  ".$table['renners'].".ploegID='".$table['ploegen'].".ID' ";
// Geeft: WHERE Renners.ploegID = 'Ploegen.ID' ipv gewoon literal de tabel/veldnaam te gebruiken.
een vrij vreemde constructie?

Oh ja, tabel aliassen zouden de leesbaarheid best ten goede komen denk ik.

[ Voor 11% gewijzigd door MueR op 13-10-2008 15:14 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Reinier schreef op maandag 13 oktober 2008 @ 15:12:
Overigens, waarom gebruik je niet INNER JOIN terwijl je het over een inner join hebt? Nu maak je een cartesisch product wat je vervolgens in de WHERE filtert.
Wat bedoel je hier precies mee? Dit is toch gewoon een inner join? Je bedoelt een aandere syntax, met

code:
1
2
3
4
SELECT *
FROM   wielrenners 
       INNER JOIN ploegen
          ON wielrenners.ploegID = ploegen.ID


oid?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Dat geeft zeker andere resultaten hoor.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op maandag 13 oktober 2008 @ 15:13:
En als je een normale JOIN gebruikt op de tabel Ploegen?

Overigens vind ik
PHP:
1
2
$sql = "WHERE  ".$table['renners'].".ploegID='".$table['ploegen'].".ID' ";
// Geeft: WHERE Renners.ploegID = 'Ploegen.ID' ipv gewoon literal de tabel/veldnaam te gebruiken.
een vrij vreemde constructie?
Heeft te maken met lokaal testen en de online tabelnamen. Die verschillen, dus heb ik twee verschillende config.inc.php's die die $table array definieren. Das voor het overzicht niet altijd even lekker, maar straks scheelt me dat een hele zooi queries en scripts replacen :)

Acties:
  • 0 Henk 'm!

Verwijderd

die syntax is alleszins beter om te vermijden dat je een cartesiaanse product maakt, want als je de join-syntax vergeet, dan wordt de query niet uigevoerd.
En in jou codevoorbeeld, wordt de query wel uitgevoerd, zij het ongejoind.

Waarom meerdere renners? Heel simpel, omdat sommige renners bij meerdere ploegen hebben gereden niet?

Acties:
  • 0 Henk 'm!

  • Archiebald
  • Registratie: Juni 2006
  • Laatst online: 19-09 19:24
Ooit gehoord van SQL Injection?

Dat even terzijde.

Het zou niets uit moeten maken, maar misschien dat dit werkt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
$sql = "
SELECT  
  ".$table['renners'].".ID,   
  ".$table['renners'].".naam, 
  ".$table['renners'].".nationaliteit_ico, 
  ".$table['ploegen'].".naam, 
  ".$table['ploegen'].".ID AS ploegID 
FROM 
  ".$table['renners']."
INNER JOIN ".$table['ploegen']."  
  ON ".$table['renners'].".ploegID=".$table['ploegen'].".ID
WHERE 
  ".$table['renners'].".naam LIKE '%".$_GET['rennernaam']."%' 
OR 
  ".$table['renners'].".naam LIKE '%".strtoupper($_GET['rennernaam'])."%' 
ORDER BY 
  ".$table['renners'].".naam ASC  
LIMIT ".$_GET['start'].", ".$_GET['limiter']; 
?>

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op maandag 13 oktober 2008 @ 15:19:
[...]


Heeft te maken met lokaal testen en de online tabelnamen. Die verschillen, dus heb ik twee verschillende config.inc.php's die die $table array definieren. Das voor het overzicht niet altijd even lekker, maar straks scheelt me dat een hele zooi queries en scripts replacen :)
Persoonlijk zou ik dan gebruik maken van 'as' in je query. Dan hoef je die configuratie array's maar 1x per tabel opnemen.
code:
1
2
3
4
5
6
..snip..
renners.naam,
ploegen.naam
FROM ".$table['renners']." as renners, ".$table['ploegen']." as ploegen
WHERE  renners.ploegID=ploegen.ID
..snip..


:w Muer, misschien moet je je string nog ff met een " afsluiten ;)

[ Voor 5% gewijzigd door Janoz op 13-10-2008 15:36 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Verwijderd schreef op maandag 13 oktober 2008 @ 15:19:
[...]
Heeft te maken met lokaal testen en de online tabelnamen. Die verschillen, dus heb ik twee verschillende config.inc.php's die die $table array definieren. Das voor het overzicht niet altijd even lekker, maar straks scheelt me dat een hele zooi queries en scripts replacen :)
Dus ben je erg geholpen met tabel aliassen.
PHP:
1
2
3
4
5
$sql = "SELECT r.RennerNaam, r.Nationaliteit, p.PloegNaam
FROM " . $table['renners'] . " r
JOIN " . $table['ploegen'] . " p ON (p.PloegId = r.PloegId)
WHERE r.RennerNaam LIKE 'blaat'
OR p.PloegNaam LIKE 'blaat'";


Janoz :w

[ Voor 2% gewijzigd door MueR op 13-10-2008 15:35 . Reden: Hmm.. waarom vindt de code parser dat ie niet goed is? ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 22:49

Reinier

\o/

Verwijderd schreef op maandag 13 oktober 2008 @ 15:21:
die syntax is alleszins beter om te vermijden dat je een cartesiaanse product maakt, want als je de join-syntax vergeet, dan wordt de query niet uigevoerd.
En in jou codevoorbeeld, wordt de query wel uitgevoerd, zij het ongejoind.
Mag ik zeggen dat ik hier niets van begrijp? :) Iets met join syntax vergeten?

Acties:
  • 0 Henk 'm!

Verwijderd

jij doet het goed.

maar stel dat je de joinsyntax vergeet er bij te zetten:
code:
1
2
select *
from renner, ploeg


--> dat werkt wel, maar het geeft een cartesiaans product.


als je nu dit zou schrijven:
code:
1
2
3
select *
from ploeg
inner join renner

--> dit werkt zelfs niet omdat het een syntaxfout geeft, en kan je dus ook geen cartesiaans product schrijven, wat we alleen maar kunnen toejuichen

[ Voor 0% gewijzigd door Verwijderd op 13-10-2008 16:03 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 22:49

Reinier

\o/

Ik vat hem :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op maandag 13 oktober 2008 @ 16:03:
jij doet het goed.

maar stel dat je de joinsyntax vergeet er bij te zetten:
code:
1
2
select *
from renner, ploeg


--> dat werkt wel, maar het geeft een cartesiaans product.


als je nu dit zou schrijven:
code:
1
2
3
select *
from ploeg
inner join renner

--> dit werkt zelfs niet omdat het een syntaxfout geeft, en kan je dus ook geen cartesiaans product schrijven, wat we alleen maar kunnen toejuichen
Wat is precies een cartesiaans product en waarom wil ik dat vermijden?

Dat van die Injection wist ik niet, ik zal het bestuderen, bedankt voor de tip!

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Verwijderd schreef op maandag 13 oktober 2008 @ 17:06:
Wat is precies een cartesiaans product en waarom wil ik dat vermijden?
Grof gezegd geeft dat alle mogelijke combinaties terug, dus ook de ongerelateerde combinaties, terwijl je alleen de gerelateerde combinaties wil.

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Maar het is niet echt iets wat je perse moet vermijden. De db server zal zelf in dat geval er een inner join van maken. Dus hoewel de syntax anders is, zal het onderliggende execution plan er niet anders uitzien. En dus de performance is gelijk.

Dat gezegd hebbende is het wel aan te raden om de JOIN syntax aan te leren en te gebruiken, aangezien dit veel meer de standaard is, en imho ook leesbaarder.

Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Orphix schreef op maandag 13 oktober 2008 @ 23:12:
Dat gezegd hebbende is het wel aan te raden om de JOIN syntax aan te leren en te gebruiken, aangezien dit veel meer de standaard is, en imho ook leesbaarder.
:Y :Y :Y Heel erg mee eens :Y :Y :Y

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Orphix schreef op maandag 13 oktober 2008 @ 23:12:
Maar het is niet echt iets wat je perse moet vermijden. De db server zal zelf in dat geval er een inner join van maken.
Een inner join sluit juist de ongerelateerde records uit. Een Cartesiaans product is een cross join.

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
BalusC schreef op dinsdag 14 oktober 2008 @ 00:55:
[...]
Een inner join sluit juist de ongerelateerde records uit. Een Cartesiaans product is een cross join.
Correct, maar in dit geval, waarbij de relatie (de join) wordt gedefinieerd in de WHERE, gaat dat niet op. Daar doelde ik ook op.

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Oh ja, bij de TS. Ik doelde eigenlijk op het voorbeeld van Natrium :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Helder allemaal, maar dan nog begrijp ik niet zo goed waarom ie het in het ene voorbeeld (zonder zoek) wél goed doet, en met niet. Ik ga wel even met haakjes klungelen en de sql even netjes volgens de standaard doen. Ik zal dadelijk de oplossing even posten. Heel erg bedankt voor jullie input!

*edit*

Haakjes was niet nodig, want de inner join toevoegen in de code zoals door Archiebald geplaatst op maandag 13 oktober 2008 15:22 was voldoende. Ik vind dit eigenlijk wel een beetje vreemd, want de documentatie leert dat

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$sql = "SELECT  
                ".$table['renners'].".ID,   
                ".$table['renners'].".naam, 
                ".$table['renners'].".nationaliteit_ico, 
                ".$table['ploegen'].".naam AS ploegNaam, 
                ".$table['ploegen'].".ID AS ploegID 
            FROM 
              ".$table['renners']."
              INNER JOIN ".$table['ploegen']." 
              ON ".$table['renners'].".ploegID=".$table['ploegen'].".ID
            WHERE 
                ".$table['renners'].".naam LIKE '%".$_GET['renletter']."%' 
            OR 
                ".$table['renners'].".naam LIKE '%".strtoupper($_GET['renletter'])."%' 
            ORDER BY 
            ".$table['renners'].".naam ASC  
            LIMIT ".$_GET['start'].", ".$_GET['limiter'];


eigenlijk hetzelfde zou moeten doen dan mijn eerste oplossing. Toch geeft het andere resultataten doordat het een een cartesiaans product geeft en het ander (kennelijk) niet. Ook bizar vind ik dat als ik dezelfde query niet laat zoeken, het product wel goed wordt gesorteerd. Enfin, problem solved, bedankt voor de hulp.

*edit 2*
En om die SQL injection te voorkomen volstaat addslashes gewoon neem ik aan?

[ Voor 69% gewijzigd door Verwijderd op 14-10-2008 09:41 . Reden: oplossing voor de query ]


Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Weet je Meneer Van Dale Wacht Op Antwoord nog voor rekenen? Datzelfde geldt ook voor boolean vergelijkingen.
Dus als je ExprA Or ExprB and ExprC doet, dan krijg je iets anders dan wanneer je (ExprA Or ExprB) and ExprC doet. En dat zijn dus de haakjes waar een aantal mensen je al op heeft gewezen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bigbeng schreef op dinsdag 14 oktober 2008 @ 09:35:
Weet je Meneer Van Dale Wacht Op Antwoord nog voor rekenen? Datzelfde geldt ook voor boolean vergelijkingen.
Dus als je ExprA Or ExprB and ExprC doet, dan krijg je iets anders dan wanneer je (ExprA Or ExprB) and ExprC doet. En dat zijn dus de haakjes waar een aantal mensen je al op heeft gewezen.
Ja, das duidelijk. Maar omdat ik nu de join uit de where heb gehaald zijn er nog maar twee gelijkwaardige expressies over in de where. De haakjes zijn dus niet nodig. Ik begrijp dankzij je opmerking wel waarom de eerste query deed wat ik wilde: doordat die ook maar een expressie in de where clausule had, gaf ie de juiste resultaten. Waarschijnlijk had ik het ook zo kunnen oplossen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql = "SELECT  ".$table['renners'].".ID,  
                    ".$table['renners'].".naam,
                    ".$table['renners'].".nationaliteit_ico,
                    ".$table['ploegen'].".naam,
                    ".$table['ploegen'].".ID  
                    FROM ".$table['renners'].", ".$table['ploegen']." 
                    WHERE (".$table['renners'].".naam LIKE '%".$_GET['rennernaam']."%'
                    OR ".$table['renners'].".naam LIKE '%".strtoupper($_GET['rennernaam'])."%')
                    AND  ".$table['renners'].".ploegID=".$table['ploegen'].".ID
                    ORDER by ".$table['renners'].".naam ASC 
                    LIMIT ".$_GET['start'].", ".$_GET['limiter'];


oid, maar ik heb net geleerd dat de join uitschrijven netter is, en geen cartesiaans product oplevert, vandaar dat ik het zonder haakjes heb gedaan.

*edit*
valt me in eens op:
code:
1
2
3
*snip*
WHERE (".$table['renners'].".naam LIKE '%".$_GET['rennernaam']."%'
OR ".$table['renners'].".naam LIKE '%".strtoupper($_GET['rennernaam'])."%')


Is die strtoupper wel nodig bij like? volgens mij is die % een wildcard en pakt ie dus zowel upper als lowercase voorkomens van $_GET['rennernaam']. Toch?

[ Voor 9% gewijzigd door Verwijderd op 14-10-2008 09:46 ]


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 22:49

Reinier

\o/

Precies wat ik in de eerste reply zei dus ;)

En nu nog tabelaliassen gebruiken om het wat beter leesbaar te krijgen, wat Janoz al zei.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Reinier schreef op dinsdag 14 oktober 2008 @ 09:46:
Precies wat ik in de eerste reply zei dus ;)

En nu nog tabelaliassen gebruiken om het wat beter leesbaar te krijgen, wat Janoz al zei.
Jup. :) Alleen hebben dit soort dingen bij mij altijd een incubatietijd van een duurtraining en twee koppen sterke koffie.

Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Nu online
En niet $_GET['iets'] rechtstreeks in je query gooien, niet elke webserver heeft magic_quotes aanstaan (zelf heb ik als programmeur een schijthekel aan die "feature").

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op dinsdag 14 oktober 2008 @ 09:44:
Is die strtoupper wel nodig bij like? volgens mij is die % een wildcard en pakt ie dus zowel upper als lowercase voorkomens van $_GET['rennernaam']. Toch?
Nee, klopt niet. % is wel een wildcard, maar heeft geen enkele invloed op wat je er achter zet. % staat voor 0 of meer willekeurige tekens. Hierdoor matched "%blaat" op "blaat", "xblaat" en "fdnsjknfjksnjkfblaat", maar niet op "blaa", "cnjdblaa", "BLAAT" of "blaatxxx".

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op dinsdag 14 oktober 2008 @ 10:08:
[...]

Nee, klopt niet. % is wel een wildcard, maar heeft geen enkele invloed op wat je er achter zet. % staat voor 0 of meer willekeurige tekens. Hierdoor matched "%blaat" op "blaat", "xblaat" en "fdnsjknfjksnjkfblaat", maar niet op "blaa", "cnjdblaa", "BLAAT" of "blaatxxx".
Cheers, bedankt. Toch maar even laten staan.
_JGC_ schreef op dinsdag 14 oktober 2008 @ 09:52:
En niet $_GET['iets'] rechtstreeks in je query gooien, niet elke webserver heeft magic_quotes aanstaan (zelf heb ik als programmeur een schijthekel aan die "feature").
Ik gooi er nu een addslashes overheen. Das genoeg lijkt me, of moet ik met regexps (8)7) aan de gang?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd schreef op dinsdag 14 oktober 2008 @ 10:29:
Ik gooi er nu een addslashes overheen. Das genoeg lijkt me, of moet ik met regexps (8)7) aan de gang?
Er is een topic met pakweg 8+ pagina's over dit onderwerp...lees die eens door ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cartman! schreef op dinsdag 14 oktober 2008 @ 11:10:
[...]

Er is een topic met pakweg 8+ pagina's over dit onderwerp...lees die eens door ;)
Dat draadje is welliswaar interessant, maar gaat alleen in de eerste +/- 10 posts over sql injectie en daarna wordt het een nogal theoretische verhandeling of er al dan niet native functies moeten komen voor dingen waarvan andere mensen vinden dat je ze best zelf kan schrijven. Wel boeiend leesvoer, maar imho niet echt wat ik wil weten (dat staat overigens wel in dat google linkje.)

*edit*
Ik overdrijf. Verder lezen. :)

*edit 2*
Ik overdrijf niet, het was gewoon volkomen bullshit. :z }:O

[ Voor 8% gewijzigd door Verwijderd op 14-10-2008 12:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 14 oktober 2008 @ 11:49:
[...]


Dat draadje is welliswaar interessant, maar gaat alleen in de eerste +/- 10 posts over sql injectie en daarna wordt het een nogal theoretische verhandeling of er al dan niet native functies moeten komen voor dingen waarvan andere mensen vinden dat je ze best zelf kan schrijven. Wel boeiend leesvoer, maar imho niet echt wat ik wil weten (dat staat overigens wel in dat google linkje.)

*edit*
Ik overdrijf. Verder lezen. :)

*edit 2*
Ik overdrijf niet, het was gewoon volkomen bullshit. :z }:O
Google gewoon eens naar sql injection en php. Daar zijn tonnen artikels over. Zoals deze bijvoorbeeld: http://www.addedbytes.com/php/writing-secure-php/
Pagina: 1