Probleem met quotes in MySQL-query

Status
Niet open voor verdere reacties.
Ik heb de titel van je post aangepast. In het vervolg graag een titel kiezen die je probleem beschrijft.

Over je probleem, post eens de code die je hebt, dat helpt ons om je gerichter te helpen.
 
Ik heb de titel van je post aangepast. In het vervolg graag een titel kiezen die je probleem beschrijft.

Over je probleem, post eens de code die je hebt, dat helpt ons om je gerichter te helpen.

PHP:
mysql_query("INSERT INTO `shoutbox`(`user_id`, `bericht`, `date`) VALUES 

	

			(".ID.", '".htmlspecialchars($_POST['message'])."', NOW() )") or die(mysql_error());
 
Er ontbreekt een mysql_real_escape_string om je userinput heen die er voor zorgt dat de query er niet raar uit gaat zien als je een ' gebruikt. Wat er dan namelijk in je query komt is dit:

[sql]
INSERT INTO tabel ( velda, veldb ) VALUES ( 'hoi', 'tekst met een ' erin' )
[/sql]

En zoals je misschien al kunt zien aan de syntaxhighlighting raakt de query parser daarvan in de war. Met escape_string wordt ervoor gezorgt dat op de juiste plekken \ ingevoegd worden om duidelijk te maken hoe de query echt loopt en is het probleem verholpen.

De reden dat het op je vorige host wel werkte is vanwege het (zeer onveilige) magic_quotes, een beveiligingsfeature die tegenwoordig niet meer ondersteund wordt en die je dus steeds minder tegen zult komen.

Het idee is dus dat je overal waar je variabelen gebruikt een mysql_real_escape_string eromheen zet, op deze manier:

PHP:
$query = "UPDATE tabel SET waarde = '" . mysql_real_escape_string( $_POST['waarde'] ) . "' WHERE ander_veld = '" . mysql_real_escape_string( $_POST['ander_veld'] ."'";
 
En NOOIT htmlspecialchars() gebruiken bij het invoegen, alleen bij de output!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan