Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[MySQL] Fout bij insert

meneer_ed
13 antwoorden
  • Ik probeer een aantal waardes in velden van een tabel te zetten, maar telkens wanneer ik het script uitvoer, krijg ik een mysql error.

    Het script ziet er als volgt uit:

    [code:1:f04c8b431e]
    <?php if (isset($_POST) && ($_POST['Submit3'] == "Save draft"))
    {
    if ($_POST['action'] == "save") {
    echo "<p>";

    mysql_connect("localhost", "blabla", "blabla") or die(mysql_error());
    mysql_select_db("board") or die(mysql_error());
    $key = mkrandomkey('6','6','1','','1');
    $text = htmlentities($_POST['topictext']);
    $title = htmlentities($_POST['title']);
    $ip = GetHostByName($REMOTE_ADDR);
    $user = "carlo";
    $time = date("H:i:s");
    $date = date("d-m-y");

    mysql_query("INSERT INTO drafts
    (id, key, ip, time, date, title, text) VALUES('', '$key', '$ip', '$time', '$date', '$title', '$text') ")
    or die(mysql_error());
    echo "Opgeslagen, de toegangssleutel is: <strong>$key</strong>";
    echo "</p>";
    }
    }
    ?>
    [/code:1:f04c8b431e]

    Vervolgens krijg ik dit soort mysql errors:
    [code:1:f04c8b431e]
    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 'key, ip, time, date, title, text) VALUES('', 'FHG6WM', '192.168.2.107', '18:03:5' at line 2
    [/code:1:f04c8b431e]
    of bijvoorbeeld:
    [code:1:f04c8b431e]
    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 'key, ip, time, date, title, text) VALUES('', '3mjiDJ', '192.168.2.107', '18:15:1' at line 2
    [/code:1:f04c8b431e]

    Bij andere tabellen in mijn database gaat het inserten vlekkeloos, en ik heb er inmiddels echt al uren aan zitten blokken, om te ontdekken wat het kan zijn, maar ik kom er dus steeds maar niet achter…

    De tabel in phpMyAdmin ziet er als volgt uit:
    http://www.gamexellence.com/dbtable.jpg

    Kunnen jullie het vinden?

    Alvast bedankt!
  • Je probeert een lege string te inserten als zijnde "id". Je moet de "id" kolom uit je query halen aangezien deze auto increment is en dus "vanzelf" een waarde krijgt…
  • Zo heb ik het ook gewoon bij alle andere queries gedaan tot nu toe en dat werkte…
    Desondanks heb ik het op jouw manier geprobeerd, maar dat werkt ook niet..
  • Laat de query eens uitprinten voordat je hem uitvoert. Zeker weten dat er geen foute komma's en aanhalingstekens in de vars staan?
  • Dan zou ik eens proberen om alle kolummen nullable te maken (dus dat de waarde NULL geinsert mag worden) en dan eens kolom voor kolom aan de query toe te voegen zodat je dan eens kan uitvogelen wat er mis gaat.
  • Is dit soort dingen is trouwens niet gevoelig voor sql injectie?

    $text = htmlentities($_POST['topictext']);
  • Dat klopt gerben. Carlo haal je $_POST even door de mysql_real_escape_string() functie halen, die filter dat ongewenste spul weg, kijk maar even door die pagina: zie dit

    En carlo, print ook even wat de output van de query is ;)
  • [quote:cdd8bbd4fc="s.Mighty"]Dat klopt gerben. Carlo haal je $_POST even door de mysql_real_escape_string() functie halen, die filter dat ongewenste spul weg, kijk maar even door die pagina: zie dit
    [/quote:cdd8bbd4fc]
    Bedankt voor de tip, ik dacht dat htmlentities genoeg was ;)
    Kan ik dat gewoon zo doen? :
    $text = htmlentities($_POST['topictext']);
    $text = mysql_real_escape_string($text);

    [quote:cdd8bbd4fc="s.Mighty"]
    En carlo, print ook even wat de output van de query is ;)[/quote:cdd8bbd4fc]
    bedoelen jullie d.m.v. or die(mysql_error()) ? Want dat staat namelijk al in mijn eerste post..
  • Nope, de query vóór je hem laat uitvoeren.


    mysql_query("INSERT INTO drafts (id, key, ip, time, date, title, text) VALUES('', '$key', '$ip', '$time', '$date', '$title', '$text') ")

    wijzigen in zoiets:

    $query = "INSERT INTO drafts (id, key, ip, time, date, title, text) VALUES('', '$key', '$ip', '$time', '$date', '$title', '$text')"

    echo $query

    mysql_query($query)
  • Ik neem aan dat id primairy key en auto inc heeft, in dat geval zou ik het in de query niet eens mee geven.

    ( even ter info ;) )
  • [quote:4f4a189aa5="gerben"]Nope, de query vóór je hem laat uitvoeren.


    mysql_query("INSERT INTO drafts (id, key, ip, time, date, title, text) VALUES('', '$key', '$ip', '$time', '$date', '$title', '$text') ")

    wijzigen in zoiets:

    $query = "INSERT INTO drafts (id, key, ip, time, date, title, text) VALUES('', '$key', '$ip', '$time', '$date', '$title', '$text')"

    echo $query

    mysql_query($query)[/quote:4f4a189aa5]

    Ik heb nu van dit:
    [code:1:4f4a189aa5]
    mysql_query("INSERT INTO drafts
    (key, ip, time, date, title, text) VALUES('$key', '$ip', '$time', '$date', '$title', '$text') ")
    or die(mysql_error());
    [/code:1:4f4a189aa5]
    Dit gemaakt:
    [code:1:4f4a189aa5]
    $query = "INSERT INTO drafts (key, ip, time, date, title, text) VALUES ('$key', '$ip', '$time', '$date', '$title', '$text')";
    echo "<br />".$query."<br />";
    mysql_query($query) or die(mysql_error());
    [/code:1:4f4a189aa5]

    En returned mysql deze error:
    [code:1:4f4a189aa5]
    INSERT INTO drafts (key, ip, time, date, title, text) VALUES ('f9bruG', '192.168.2.107', '15:05:16', '13-10-06', 'kaas', 'belegen')
    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 'key, ip, time, date, title, text) VALUES ('f9bruG', '192.168.2.107', '15:05:16',' at line 1
    [/code:1:4f4a189aa5]
  • Het probleem doet zich inmiddels ook voor bij het uitvoeren van andere queries :( . Hier een voorbeeld van mijn code:
    [code:1:502d0ae907]
    $query2 = "UPDATE users SET ((lastlogintime='$time') AND (lastlogindate='$lastlogindate') AND (referer='$httpreferer') AND (ip='$ip') AND (xlogin='$newtimes')) WHERE ((username='$username') AND (password='$password'))";
    echo $query2;
    mysql_query($query2) or die(mysql_error());
    [/code:1:502d0ae907]
    De volgende query wordt geechoed:
    [code:1:502d0ae907]
    UPDATE users SET ((lastlogintime='02:06:45') AND (lastlogindate='') AND (referer='http://localhost/ditendat') AND (ip='127.0.0.1') AND (xlogin='0')) WHERE ((username='test') AND (password='7cf57857abc6a8a5ef2ef7a51a349e9dd62196db'))
    [/code:1:502d0ae907]
    …En deze error wordt door mysql gereturned:
    [code:1:502d0ae907]
    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 '((lastlogintime='02:07:52') AND (lastlogindate='') AND (referer='http://localhos' at line 1
    [/code:1:502d0ae907]
    Het lijkt alsof de query te lang is om uitgevoerd te worden ofzo… In ieder geval is er iets mis, maar ik kom er niet achter…
    Jullie wel?
  • Ten eerste: wat doen al die ( en ) in de query? Die zijn overbodig en verwarrend.
    Ten tweede: als je meerdere velden wilt updaten moet je geen AND tussen de te updaten velden zetten, maar komma's dus zoiets als:[code:1:4fd1e0e60f]SET lastlogintime='02:06:45', lastlogindate=''[/code:1:4fd1e0e60f]

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.