Hallo,

Ik ben bezig met het maken van een custom cms. Het ging goed totdat ik kwam bij het updaten van de database.
Ik krijg de volgende foutmelding:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 're looking for. But if you don't find any website template you can use, you can ' at line 1

Dit is mijn code waarmee hij correspondeert als hij deze fout geeft:

<?php

// If user pressed "Update Content" button
if(isset($_POST['editContent'])){
// Update the page's content
require("includes/connection.php");
$content = $_POST['content'];
$id = $_POST['id'];
$sql = "UPDATE pages SET content='$content' WHERE id='$id'";
$result = $connection->query($sql) or die(mysqli_error($connection));
if($result){
header("location: admin.php?message=1");
}

}

?>

Iemand enig idee wat ik moet doen?
Sanne, probeer eens:

$sql = "UPDATE pages SET content='".$content."' WHERE id='".$id."'";



Maar ik moet zeggen, waar is de beveiliging tegen SQL injecties?
Bedankt voor je reactie, maar helaas krijg ik dan nog steeds dezelfde foutmelding.

Ik ben pas begonnen met PHP en ben nog lang niet klaar met de CMS, maar bedankt voor je opmerking, ik heb er over gelezen en ga ermee aan de slag.
Misschien een raar teken in $_POST['content'] of $_POST['id'] ?

voeg eens na regel 9 in:

echo '<pre>' . $sql . '</pre>'; die;

wat zie je dan?
Dat staat er in je content waarschijnlijk een string in de trant van 'what you're looking for'. Als je dat direct in de sql statement (in php) zou zetten zou je dit krijgen (let op de kleurtjes! Ik heb de quotes iets veranderd om het duidelijk te maken):
<?php
$sql = 'UPDATE pages SET content="what you're looking for" WHERE id='.$id;
?>
De quote in je string sluit dus de string in SQL af en daarna krijg je een probleem.... De oplossing: wat Cas al aangaf, maar misschien zonder het te weten. SQL injectie bescherming werkt hier ook tegen. Gebruik dus bij alle strings die je invoert mysql_real_escape_string:
<?php
$sql = "UPDATE pages SET content='".mysql_real_escape_string( $content )."' WHERE id=".(int)$id;
?>
id heb ik getypecast naar een int (want een id is normaal gesproken een int) dan ben je ook van mogelijke sql injectie problemen af en je weet zeker dat je query niet vastloopt op een ander type variabele.
Dankjewel :D Dit werkt inderdaad.

Reageren