.PHP Error (SQL Syntax does not corresponds)

Gestart doorThijmgrijs28 reacties70 weergaven

29 berichten · pagina 2 van 2

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Omdat we verwachten dat je eerst zelf wat probeert.
Lees ook eens het linkje in mijn signature.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Zelf moet je ook wat proberen!!!
0
Thijmgrijs

Lid · Topicstarter

Berichten
968
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Wat denk je wat ik al aan het proberen was?
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Thijmgrijs schreef:
Wat denk je wat ik al aan het proberen was?
Als mijn glazen bol dat nou eens kon vertellen.....

Kijk, we willen je graag helpen, maar laat dan ook weten wat je zelf al ondernomen hebt.
Je kan het ook aan ons vragen, maar als je zelf geen research hebt gedaan dan komt het voor ons behoorlijk als luie mentaliteit over met de gedachte van: Jullie weten meer, zoek het maar uit voor mij!
0
Thijmgrijs

Lid · Topicstarter

Berichten
968
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Aarclay schreef:
Eerdere citaten tonen
Thijmgrijs schreef:
Wat denk je wat ik al aan het proberen was?
Als mijn glazen bol dat nou eens kon vertellen.....

Kijk, we willen je graag helpen, maar laat dan ook weten wat je zelf al ondernomen hebt.
Je kan het ook aan ons vragen, maar als je zelf geen research hebt gedaan dan komt het voor ons behoorlijk als luie mentaliteit over met de gedachte van: Jullie weten meer, zoek het maar uit voor mij!
Zo denk ik dus echt niet.
Vanmiddag een addon gemaakt, mn eigenlijk eerst volledig afgerond projectje in .PHP
Ben er trots op, heb hier alleen gevraagd voor de hoogste Id weergeven & heb hem zelf afgehandeld.
Ik leer hier juist van, ik ben totaal geen persoon die het andere wil laten oplossen.
Maar over Sql injecties heb ik totaal de ballen verstand niet van.

Mvg, misschien sorry dat ik ben overgekomen met dat ik andere het wil laten doen.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Ik zeg niet dat wij er zo over denken, maar het is een voorbeeld in het algemeen.

Maar zelf als ik Google opentrek zie ik een schat aan informatie. Dus wat heb je al gevonden en geprobeerd, en nog belangrijker: Wat is je concrete vraag smile?
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Thijm, zo kan je wel misschien denken maar zo gaat het op 90% van de online hulpforums.
0
Thijmgrijs

Lid · Topicstarter

Berichten
968
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Raaoul schreef:
Thijm, zo kan je wel misschien denken maar zo gaat het op 90% van de online hulpforums.
Oke, Ik probeer hier zelf ook van te leren.

Maar wat ik dus al geprobeerd hebt om te zoeken op internet wat er fout is aan die ();
Maar ik snap het totaal niet, ik kan niet precies uit leggen hoe.

Hoe kan je die(); verwerken tot mysql_real_escape_string(); ?
Gewoon copy & pasten of zit er meer achter?
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Die() en mysql_real_escape_string() hebben niks met elkaar te maken. die() is om je script abrupt te laten stoppen, wat je eigenlijk nooit moet doen. real escape string is om je te beveiligen tegen SQL injection. Kijk, een voorbeeld:

[COLOR= #0000BB]<?php

$query[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700])[/COLOR] or [URL="http://www.php.net/die"]die[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"Fout!"[/COLOR][COLOR= #007700]);[/COLOR]

?>


Als de mysql_query mislukt, en dus false teruggeeft, word de or die in werking gesteld. In die() geef je de melding "Fout" mee, en dan stopt je script dus als er iets mis gaat. Dit is onlogisch.
Waarom zou je heel je website stoppen als er 1 iets mis gaat? Niet doen dus. Dat wordt dan zoiets:

[COLOR= #0000BB]<?php

$query[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]==[/COLOR] false[COLOR= #007700]) {[/COLOR]
  [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Er ging wat mis.[/COLOR][COLOR= #007700];
}[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
  [COLOR= #FF8000]// Doe andere dingen.[/COLOR]
[COLOR= #007700]}[/COLOR]

?>


En SQL injection is een hele boterham om uit te leggen, maar, het komt er op neer dat mensen je query kunnen manipuleren met bijvoorbeeld $_GET waarden. Daarom gooi je altijd mysql_real_escape_string() over de dingen die je in je database zet. Dit hoeft niet bij alles, maar bijvoorbeeld wel bij dingen die door de gebruiker kunnen gemanipuleerd worden.

[COLOR= #0000BB]<?php[/COLOR]

[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]])) {[/COLOR]
   [COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT naam FROM users WHERE id = "[/COLOR] [COLOR= #007700].[/COLOR] [URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]]));
}[/COLOR]

?>


Zoals je ziet: je gebruikt $_GET[id], wat in dit geval gemanipuleerd kan worden door de gebruiker door de ?id= te veranderen in de URL. Daar gooi je dus mysql_real_escape_string overheen, je bent nu veilig tegen een mogelijke SQL injection.
0
Thijmgrijs

Lid · Topicstarter

Berichten
968
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Raaoul schreef:
Die() en mysql_real_escape_string() hebben niks met elkaar te maken. die() is om je script abrupt te laten stoppen, wat je eigenlijk nooit moet doen. real escape string is om je te beveiligen tegen SQL injection. Kijk, een voorbeeld:
[COLOR= #0000BB]<?php

$query[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700])[/COLOR] or [URL="http://www.php.net/die"]die[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"Fout!"[/COLOR][COLOR= #007700]);[/COLOR]

?>


Als de mysql_query mislukt, en dus false teruggeeft, word de or die in werking gesteld. In die() geef je de melding "Fout" mee, en dan stopt je script dus als er iets mis gaat. Dit is onlogisch.
Waarom zou je heel je website stoppen als er 1 iets mis gaat? Niet doen dus. Dat wordt dan zoiets:

[COLOR= #0000BB]<?php

$query[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]==[/COLOR] false[COLOR= #007700]) {[/COLOR]
  [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Er ging wat mis.[/COLOR][COLOR= #007700];
}[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
  [COLOR= #FF8000]// Doe andere dingen.[/COLOR]
[COLOR= #007700]}[/COLOR]

?>


En SQL injection is een hele boterham om uit te leggen, maar, het komt er op neer dat mensen je query kunnen manipuleren met bijvoorbeeld $_GET waarden. Daarom gooi je altijd mysql_real_escape_string() over de dingen die je in je database zet. Dit hoeft niet bij alles, maar bijvoorbeeld wel bij dingen die door de gebruiker kunnen gemanipuleerd worden.

[COLOR= #0000BB]<?php[/COLOR]

[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][URL="http://www.php.net/isset"]isset[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]])) {[/COLOR]
   [COLOR= #0000BB]$query[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT naam FROM users WHERE id = "[/COLOR] [COLOR= #007700].[/COLOR] [URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]id[/COLOR][COLOR= #007700]]));
}[/COLOR]

?>


Zoals je ziet: je gebruikt $_GET[id], wat in dit geval gemanipuleerd kan worden door de gebruiker door de ?id= te veranderen in de URL. Daar gooi je dus mysql_real_escape_string overheen, je bent nu veilig tegen een mogelijke SQL injection.

Bedankt voor de uitleg over mysql_real_escape_string en over SQL injection.
Ik waardeer t.

Ik ga het even proberen, ik laat het weten of het is gelukt.
Bedankt Raoul!

Mvg
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Je kan ook gewoon;

[COLOR= #0000BB]<?php

$query[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700](![/COLOR][COLOR= #0000BB]$query[/COLOR][COLOR= #007700]) {[/COLOR]
  [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Er ging wat mis.[/COLOR][COLOR= #007700];
}[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
  [COLOR= #FF8000]// Doe andere dingen.[/COLOR]
[COLOR= #007700]}[/COLOR]

?>


gebruiken.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Ik zou van $query wel een $result maken. De querie is eigenlijk de SQL opdracht, welke vaak ook weer in een losse war staat:

[COLOR= #0000BB]<?php
$query[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"SELECT dit, dat, zus, zo FROM dingen WHERE zus=lief"[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$result[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$query[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700](![/COLOR][COLOR= #0000BB]$result[/COLOR][COLOR= #007700]) {[/COLOR]
  [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Er ging wat mis.[/COLOR][COLOR= #007700];
}[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
  [COLOR= #FF8000]// Doe andere dingen.[/COLOR]
[COLOR= #007700]}[/COLOR]

?>
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Aarclay schreef:
Ik zou van $query wel een $result maken. De querie is eigenlijk de SQL opdracht, welke vaak ook weer in een losse war staat:
[COLOR= #0000BB]<?php
$query[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"SELECT dit, dat, zus, zo FROM dingen WHERE zus=lief"[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$result[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$query[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700](![/COLOR][COLOR= #0000BB]$result[/COLOR][COLOR= #007700]) {[/COLOR]
  [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]Er ging wat mis.[/COLOR][COLOR= #007700];
}[/COLOR] [URL="http://www.php.net/else"]else[/URL] [COLOR= #007700]{[/COLOR]
  [COLOR= #FF8000]// Doe andere dingen.[/COLOR]
[COLOR= #007700]}[/COLOR]

?>


Dat is niet waar... sql querys staan niet zoveel in aparte strings.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Het maakt wel duidelijk wat de inhoud is waar de SQL-string in staat, en wat het terug moet geven: een result.

De string in een aparte variabele opslaan is handig bij debuggen, als je waardes eraan toevoegt.
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