FOUT: You have an error in your SQL syntax;

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert

Robert

08/06/2006 18:22:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?
// 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?
 
PHP hulp

PHP hulp

29/12/2024 12:19:15
 
Stefan

stefan

08/06/2006 18:25:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door stefan
 
Frank -

Frank -

08/06/2006 18:25:00
Quote Anchor link
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.
 
Klaasjan Boven

Klaasjan Boven

08/06/2006 19:25:00
Quote Anchor link
Waarom gebruikt iedereen ineens SET bij een INSERT voor zover ik weet hoort dat bij een UPDATE
 
Robert

Robert

08/06/2006 21:12:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<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>

      "
;
}


?>
 
Frank -

Frank -

08/06/2006 21:14:00
Quote Anchor link
Quote:
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...
 
Robert

Robert

08/06/2006 21:23:00
Quote Anchor link
Ook dat werkt niet....
 
Frank -

Frank -

08/06/2006 21:26:00
Quote Anchor link
Robert:
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?
 
Robert

Robert

08/06/2006 21:31:00
Quote Anchor link
Frank:
Robert:
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?


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 :(
Gewijzigd op 01/01/1970 01:00:00 door Robert
 
Frank -

Frank -

08/06/2006 21:36:00
Quote Anchor link
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.
 
Robert

Robert

08/06/2006 21:40:00
Quote Anchor link
Ok zal er eens naar kijken
 
Klaasjan Boven

Klaasjan Boven

08/06/2006 21:50:00
Quote Anchor link
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']);
 
Frank -

Frank -

08/06/2006 21:53:00
Quote Anchor link
@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.
 
Robert

Robert

08/06/2006 22:12:00
Quote Anchor link
Het is al gelukt toch bedankt voor de hulp. Addslashes was het...
Gewijzigd op 01/01/1970 01:00:00 door Robert
 
Frank -

Frank -

08/06/2006 22:15:00
Quote Anchor link
Hier een stuk code (met dank aan Jan Koehoorn) om in 1 klap alle input van een formulier te beveiligen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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);
  }

?>
 
Robert

Robert

08/06/2006 22:28:00
Quote Anchor link
bij $value, moet ik $tekst invullen? neem ik aan?
 
Frank -

Frank -

08/06/2006 22:43:00
Quote Anchor link
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!
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Robert

Robert

09/06/2006 11:30:00
Quote Anchor link
ok tnx, ik zal er eens naarkijken :).

Heel erg bedankt voor je hulp!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.