Probleem met Php Sql
ik ben bezig met een kliklink script, die heb ik uit een open source iets gehaald.
maar nu stuit ik op het volgende probleem:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$result = mysql_query("select * from leden where id=$_GET[id]") or die(mysql_error());
if ($row = mysql_fetch_array($result)) {
mysql_query("UPDATE leden SET punten=punten+$klikje WHERE id=$_GET[id]") or die(mysql_error());
mysql_query("UPDATE leden SET verkocht=verkocht+1 WHERE id=$_GET[id]") or die(mysql_error());
mysql_query("UPDATE stats SET kliks=kliks+1") or die(mysql_error());
mysql_query("UPDATE stats SET punten=punten+$klikje") or die(mysql_error());
mysql_query("UPDATE `stats` SET punten=punten+'$klikje'");
mysql_query("INSERT INTO kopers (ip, time, verkoperid, url) VALUES ('$_SERVER[REMOTE_ADDR]', UNIX_TIMESTAMP(), $_GET[id], '$HTTP_REFERER')");
echo "Je hebt zojuist 1 punt gegeven aan de gebruiker met ID: $_GET[id]";
} else {
echo "Punten konden niet worden gegeven.";
}
} ?>
$result = mysql_query("select * from leden where id=$_GET[id]") or die(mysql_error());
if ($row = mysql_fetch_array($result)) {
mysql_query("UPDATE leden SET punten=punten+$klikje WHERE id=$_GET[id]") or die(mysql_error());
mysql_query("UPDATE leden SET verkocht=verkocht+1 WHERE id=$_GET[id]") or die(mysql_error());
mysql_query("UPDATE stats SET kliks=kliks+1") or die(mysql_error());
mysql_query("UPDATE stats SET punten=punten+$klikje") or die(mysql_error());
mysql_query("UPDATE `stats` SET punten=punten+'$klikje'");
mysql_query("INSERT INTO kopers (ip, time, verkoperid, url) VALUES ('$_SERVER[REMOTE_ADDR]', UNIX_TIMESTAMP(), $_GET[id], '$HTTP_REFERER')");
echo "Je hebt zojuist 1 punt gegeven aan de gebruiker met ID: $_GET[id]";
} else {
echo "Punten konden niet worden gegeven.";
}
} ?>
Hij geeft telkens aan 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 'WHERE id=1' at line 1.
Hoe kan ik dit verhelpen?
Mvg
De variable $klikje bestaat niet of is null. Bovendien is je SQL code inefficient en zeer onveilig.
kijk eerst even naar mysql_real_escape_string() en naar hoe je meerdere updates tegelijkertijd kan invoeren, nu heb je meerdere query's die je net zo goed in 1 keer had kunnen doen.
SET punten = punten + 4,
verkocht = verkocht + 1,
kliks = kliks +1
WHERE iets.
Alleen de Datum wordt in de tabel gezet met: '".date("H:i:s")."'
Alleen nu zie ik in de kolom staan, 3 wat eigenlijk 1307498760 moet zijn.
Hoe kan dat?
Mvg
Je weet dat date("H:i:s") geen datum is maar een tijd.
Ja maar er komt 3 in de tabel, hoe kan dat dan?
Waarom gebruik je geen NOW() i.c.m. DATETIME
Ik vraag waarom er een 3 in de tabel komt door dit: date("H:i:s") in een Sql query te plaatsen.
Laat eens wat relevante code zien?
ikzelf vind NOW() overigens een betere oplossing.
Kevin Blokzijl op 07/06/2011 20:24:39:
Ja maar er komt 3 in de tabel, hoe kan dat dan?
Omdat er geen datum bij zit wordt er waarschijnlijk automatisch 1-1-1970 gepakt en gaat het dus fout.
Toevoeging op 07/06/2011 20:52:43:
ik kan NOW() niet gebruiken omdat:
mysql_query("delete FROM kopers WHERE FROM_UNIXTIME(time,'%d') != FROM_UNIXTIME(unix_timestamp(),'%d')");
Er staat, en ik zou niet weten hoe ik dat anders doe.
Gebruik gewoon geen UNIXTIME maar gewoon DATETIME als type.
Ik snap niet, kun je dat eens in mijn Query toepassen?
Je gebruikt nu een timestamp in je database. Wat Aar bedoelt is dat je het type van dat veld veranderd naar een DATETIME veld. Dan kun je de huidige datum er met NOW() in zetten en kun je met SQL berekeningen uitvoeren met datums.
Door je veld-type aan te passen naar DATETIME, en dan kan je voortaan bij INSERT's en UPDATE's NOW() gebruiken.
Mogelijk wil je alles wissen wat van de datum < vandaag is?