Ik krijg na een update van mijn webhost naar php 5 de volgende fout:
FOUT: 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 'gebruiker = 'Roberttt' gebruiker_id = '4' datum = '8 Juni 2006 18:14' ' at line 4

Het vreemde is dat hij dit niet altijd doet... Soms kan ik gewoon een artikel toevoegen en de andere keer weer niet.
Dit is het script:

<?
// Controleren of er gesubmit is
if ($_POST["submit"]) {

    // De geposte variabelen ff op een rijtje zetten, lekker overzichtelijk
    $titel = $_POST['titel'];
    $avatar = $_POST['avatar'];
    $korte_tekst = $_POST['korte_tekst'];
    $tekst = $_POST['tekst'];
	$graphics = $_POST['graphics'];
	$geluid = $_POST['geluid'];
	$gameplay = $_POST['gameplay'];
	$categorie = $_POST['categorie'];
	$game_naam = $_POST['game_naam'];
	$screenshot = $_POST['screenshot'];
	

    // Controle of alle velden ingevuld zijn
        if ($avatar=="" || $titel=="" || $korte_tekst=="" || $tekst=="") {
            echo "Vul alle velden in<br><br>Klik <a href='javascript:history.back(-1)'>hier</a> om terug te gaan";
    }
    else {
        //UBB code's toevoegen
		$tekst = nl2br($tekst);
		$korte_tekst = nl2br($korte_tekst);
        include"./includes/ubb.php";
        // Daarna het nieuws toevoegen in de tabel, als het misgaat weer een mysql_error
        // Bij ID is niets ingevuld, deze gaat automatisch 1 omhoog door de auto_increment
       $toevoegen = 
	   "INSERT INTO artikel
	   SET
	   titel = '$titel'
	   gebruiker = '$nickname'
	   gebruiker_id = '$memberid'
	   datum = '$datum'
	   avatar = '$avatar'
	   korte_tekst = '$korte_tekst'
	   tekst = '$tekst'
	   graphics = '$graphics'
	   geluid = '$geluid'
	   gameplay = '$gameplay'
	   categorie = '$categorie'
	   game_naam = '$game_naam'
	   screenshots = '$screenshots'
	   ";
	   $result = mysql_query ($qe) or die ('FOUT: ' . mysql_error());

        // Als dat allemaal goed gaat komt er dit te staan, met een overzichtje van wat je hebt ingetypt
        echo "<span class='bericht'>
          Het artikel is succesvol toegevoegd!<br><br>
          <b>Titel:</b> $titel<br>
          <b>Datum:</b> $datum<br>
          <b>Gebruiker:</b> $nickname<br>
          <b>Intro:</b> $korte_tekst<br>
          <b>Inhoud:</b> $tekst<br>
		  <b>Screenshot:</b> $screenshot<br>
		  </span>
          ";
    }
}

// Als er niet gesubmit is dan komt het formulier er te staan

else {
    echo "<span class='bericht'>
      <form method='post' action='http://www.pspweb.nl/admin/index.php?p=artikeltoevoegen'>
       Titel:<br> <input class='reactievak' type='text' size='40' name='titel'><br> 
       Avatar:<br> <input class='reactievak' type='text' size='40' name='avatar'> Alleen de naam van het plaatje invoeren, geen .jpg!<br>
       Intro:<br> <textarea class='reactievak' cols='100' rows='4' name='korte_tekst'></textarea><br>
       Inhoud:<br> <textarea class='reactievak' cols='100' rows='14' name='tekst'></textarea><br> 
	   Cijfer graphics:<br> <input class='reactievak' type='text' size='40' name='graphics'><br> 
	   Cijfer geluid:<br> <input class='reactievak' type='text' size='40' name='geluid'><br>
	   Cijfer gameplay:<br> <input class='reactievak' type='text' size='40' name='gameplay'><br>
	   Categorie:<br> <input class='reactievak' type='text' size='40' name='categorie'> review, preview of special<br>
	   Game naam:<br> <input class='reactievak' type='text' size='40' name='game_naam'> Naam van de game zoals die in de gamedatabase staat.<br>
	   Screenshot:<br> <textarea class='reactievak' type='text' cols='50' rows='4' name='screenshot'></textarea><br>
	   Afbeeldingen gescheiden door een ',' alleen de map en naam van plaatje. Geen .jpg!<br> 
       <input class='knop' type='submit' name='submit' value='Toevoegen'> <input class='knop' type='reset' value='Leegmaken'>
	   </span>

      ";
}

?>


Weten jullie de oplossing?
waarschijnlijk valt hij over de komma in:
's het wel, want deze game moet niemand zijn neus voorbij laten gaan.

Deze gebruikt MYSQL namelijk om waarden te scheiden.
Volgens mij moet je zoiets doen:

$korte_tekst = addslashes($_POST['korte_tekst']);
@Klaasjan: Het zal niet de komma in de tekst zijn, maar iets dat net voor dit stukje SQL staat. Dat is 9 van de 10 het geval bij de foutmelding, je krijgt een stuk van de query te zien waar MySQL niet aan is toegekomen.

Maar goed, zolang we niet de query te zien krijgen (echo $query;) moeten we daar naar raden.

addslashes() is natuurlijk verplicht, welke waarde je ook probeert weg te schrijven. Daar zijn geen vragen over.
Het is al gelukt toch bedankt voor de hulp. Addslashes was het...
Hier een stuk code (met dank aan Jan Koehoorn) om in 1 klap alle input van een formulier te beveiligen:
<?php
// bescherming tegen mysql injection
function quote_smart($value)
{
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
if (version_compare(phpversion(), "4.3.0") == "-1") {
return mysql_escape_string($value);
} else {
return mysql_real_escape_string($value);
}
}

function check_array(&$array)
{
foreach ($array as $key => $value) {
$value = quote_smart($value);
$array[$key] = $value;
}
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
check_array($_POST);
}
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
check_array($_GET);
}
?>
bij $value, moet ik $tekst invullen? neem ik aan?
Je hoeft helemaal niets in te vullen. Zodra jouw script een formulier ontvangt (met POST of GET verzonden), wordt direct de functie check_array() aangeroepen. Zie regel 23 t/m 28.

Maar ga er gewoon eens mee testen, met een klein simpel scriptje, en kijk wat er gebeurd. Zolang je niet snapt wat er gebeurd, moet je dit niet gebruiken!
ok tnx, ik zal er eens naarkijken :).

Heel erg bedankt voor je hulp!

Reageren