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?
oh je moet na elke insert een comma gebruiken

dus:

"INSERT INTO artikel
SET
titel = '$titel',
gebruiker = '$nickname',
gebruiker_id = '$memberid',
etccc

btw:
Lijk me sterk dat hij het ooit wel gedaan heeft:p
Je bent de komma's in je query vergeten. Verschillende waardes worden door komma's gescheiden.

Verder is het een idee om eens wat aan beveiliging te gaan doen, dit script heeft de deuren wagenwijd openstaan voor SQL-injection. Om nog maar niet te spreken over andere ellende.
Waarom gebruikt iedereen ineens SET bij een INSERT voor zover ik weet hoort dat bij een UPDATE
Van dat Set, dat staat hier http://www.phphulp.nl/php/tutorials/3/2/2/ .

Maar het werkt nog steeds niet, nu met de komma's enzo.


<img src="images/artikeltoevoegen.jpg">
<?
// 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 ($toevoegen) 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>

      ";
}

?>
Verschillende waardes worden door komma's gescheiden.
Dat betekent ook dat wanneer er geen waardes meer zijn, je geen komma achter de laatste waarde zet. Er valt tenslotte niets te scheiden...
Ook dat werkt niet....
Robert schreef op 08.06.2006 21:23
Ook dat werkt niet....
Goh, geweldig. Maar wat dacht je van een foutmelding? Of mogen we daar naar gaan raden? Op deze manier kan niemand jou fatsoenlijk helpen, dat kun je zelf toch ook wel bedenken?
Frank schreef op 08.06.2006 21:26
[quote=Robert schreef op 08.06.2006 21:23]Ook dat werkt niet....
Goh, geweldig. Maar wat dacht je van een foutmelding? Of mogen we daar naar gaan raden? Op deze manier kan niemand jou fatsoenlijk helpen, dat kun je zelf toch ook wel bedenken?[/quote]

Sorry, krijg precies dezelfde foutmelding...
Namelijk:
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 's het wel, want deze game moet niemand zijn neus voorbij laten gaan.
', ' at line 9

Owja misschien niet onbelangrijk, me webhost draait op php 5 en mysql 5.1.9 beta. Waarom beta omdat 5.0 niet stabiel was en naar 4 niet meer kon ofzo. Ik kon er helaas niets aan doen :(
echo de query eens. Ik vermoed dat er in de tekst een quote staat. En omdat jij geen controle op de input doet, laat staan addslashes gebruikt, gaat dit fout.

Lees het artikel over SQL-injection ook eens.

Jouw probleem heeft overigens niets te maken met de php- of mysql-versie, het is gewoon een gebrek aan controles en passende oplossingen.
Ok zal er eens naar kijken

Reageren