Ik heb een vraag, maar misschien voor jullie een makkelijke vraag.
Ik maak een nieuwssysteem, en ik wil als er een nieuw bericht geplaatst wordt, daar laten zien hoevaak het bericht is bekeken. Nu wil ik dus vragen hoe ik dit moet doen? Wat is de code hiervoor?
Ik weet dat je iets met de database moet doen met de functie UPDATE, maar daar blijft het ook bij.
Maak een extra kolom aan in je mysql tabel, die noem je 'clicks'. Edit: maak de kolom 'hits' aan als INTEGER, met als standaardwaarde 0.
Op de pagina waar je vervolgens het nieuwsbericht laat zien, voer je volgende query uit:
mysql_query("UPDATE `tabelnaam` SET `clicks` = `clicks`+1 WHERE `id_kolom` = ".$idvariabele) or die(mysql_error());
mysql_query("UPDATE `tabelnaam` SET `clicks` = `clicks`+1 WHERE `id_kolom` = ".$idvariabele) or die(mysql_error());
Opmerking:
- verander 'tabelnaam' naar de naam van je tabel.
- verander 'id_kolom' naar de kolomnaam waar het ID van je bericht staat.
- verander '$idvariabele' naar de variabele die het ID van je bericht bevat.
Ten eerste moet je niet een ID veranderen. ID's zijn vaak de primaire sleutel, die hoor je niet te wijzigen. Maak hier (zoals sliphead al zei) een nieuwe kolom voor en noem deze 'clicks'.
En als je wilt kijken waar een foutmelding zit kan je de query echo'en.
Doe dus:(als je de kolomnaam 'clicks' hebt toegevoegd)
Ten eerste moet je niet een ID veranderen. ID's zijn vaak de primaire sleutel, die hoor je niet te wijzigen. Maak hier (zoals sliphead al zei) een nieuwe kolom voor en noem deze 'clicks'.
En als je wilt kijken waar een foutmelding zit kan je de query echo'en.
Doe dusals je de kolomnaam 'clicks' hebt toegevoegd)
php code - Bekijk de code zonder highlighting - Klap code in
<?php
$query = "UPDATE `nieuw` SET `clicks` = `clicks`+1 WHERE `nieuw` = " . $id);
$result = mysql_query($query) or die(mysql_error());
echo $query;
?>
<?php $query = "UPDATE `nieuw` SET `clicks` = `clicks`+1 WHERE `nieuw` = " . $id); $result = mysql_query($query) or die(mysql_error()); echo $query;?>
` is voor reserved words.. geloof niet dat het daar aan mag liggen.
Ik heb het zo gedaan zoals jij zei, maar krijg nog steeds de volgende foutmelding:
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 '' at line 1
UPDATE `nieuw` SET `clicks` = `clicks`+1 WHERE `id` =
nu krijg ik dus die foutmelding niet meer omdat ik al een andere $query had. Dit is dus nu $clicks. Maar als ik deze query echo krijg ik dus bovenstaande code te zien.
Die moet er juist boven staan anders ga je een (nog) niet bestaande variabele gebruiken...
Dus eerst $id vullen met $_GET['id'], dan pas bestaat $id en kun je hem gebruiken.
Daarna je query pas...
Je moet je query niet uitvoeren en niet echoën.
Je moet die code uitvoeren die hierboven staat en meer niet, dan moet hij het al doen.
Weet niet wat jij verwacht anders te krijgen...?
hiermee kun je zien hoevaak een bericht is bekeken, maar iets is er fout dat die in plaats van de aantal keren laat zien, dat ie dit laat zien:
UPDATE `nieuw` SET `clicks` = `clicks`+1 WHERE `id` = 94
het is gelukt, in de database wordt het telkens opgeteld wanneer je het bericht opent, alleen krijg ik nu dit niet te zien in het bericht zelf. In plaats dat het getal er komt te staan, komt nu dit:
Resource id #8
Ibrahim - 24/12/2008 02:10 (laatste wijziging 24/12/2008 02:10)
Het werkt! het klopt inderdaad dat ik het eerst moest fetchen.
Alleen wat het probleem is dat deze telkens optelt als je ook de pagina refresht. Hoe zou je dit kunnen doen met behulp van ip ? Dus dat deze alleen optelt met een nieuw ip.
Dat klopt, dan zou je inderdaad moeten kijken of het IP al in de MySQL table voorkomt. Wat ook erg handig is, is het #ID van het bericht opslaan in de tabel van je hitcounter. Dus de tabel van de hitcounter ziet er dan als volgt uit: id, news_id, hits, ip, first_time, last_view. Wanneer de bezoeker dan zijn of haar pagina refresht wordt er simpel `hits+1`gedaan, je weet dan precies hoevaak een bezoeker naar een bepaald bericht heeft gekeken. Als je alleen unieke views wilt tellen, kun je gebruik maken van de functie mysql_num_rows. Succes!