Een unieke klik, dat er bepaalde gegevens worden opgeslagen in de datebase en dat hij bij weer te klikken niks meer opslaat als dit ip al voor komt.
Dat zie ik als uniek.
@Marten,
Ik heb nog vrij weinig, omdat ik niet weet waar ik moet beginnen.
Ik weet welke velden ik wil in de mysql maar niet hoe en wat ik precies moet invullen.
Ik ben niet bepaald een held in php, vandaar dat ik hier wat hulp vraag.
Je begint met je laatste zin. Controleren of een click al bestaat of niet.
Om te checken of een click al bestaat heb je bepaalde unieke gegevens nodig. Hoe koppel je een click? Waarschijnlijk op user en url? Om deze te kunnen controleren moeten beide gegevens bekend zijn.
Vervolgens kan je gebruik maken van het if statement in combinatie met een database resultaat rij. Deze kan je vrij makkelijk zelf doen door hier wat tutorials te volgen. Dan kom je er vast wel uit.
Als je ergens vast loopt dan zet je dat hier neer nadat je zelf eerst hebt gezocht naar de oplossing.
Het beste kan je een apparte pagina aanmaken, en de linken naar die pagina sturen. Als je dan in de url de link ook meestuur kan je het op die apparte pagian controleren of hij uniek is en eventueel opslaan in je DB. Daarna kan je de bezoeker doorsturen naar de link waar hij op klikte.
Ik zal je d.m.v. onderstaande uitleg een beetje opweg proberen te helpen:
Een unieke klik heeft natuurlijk als vereiste dat de bezoeker slechts 1x geteld wordt. Dit kan je doen d.m.v. het IP-adres van de bezoeker op te slaan -wat je goed doet- en bij het klikken te controleren of het IP-adres reeds in de database voorkomt. Als dit het geval is, heeft de gebruiker al geklikt en moet deze dus niet meer gelogt worden. Als het IP-adres niet in de database staat voeg je het toe in je database, best ook in combinatie met de huidige datum & tijd.
Vaak willen mensen dat het unieke kliks per dag zijn. Daarvoor kan je de datum & tijd dan gebruiken -waarvan je zelf ook al aangeeft dat je deze bij wil houden-. Kijk ook zeker eens naar de datum&tijd-functies van MySQL, deze kunnen je heel wat php-code besparen!
Het klikken op zich; Je zal een nieuw bestandje moeten maken om deze te registreren, liefst zonder dat de gebruiker het merkt. Daarom dat we ook geen output gaan uitspuwen in dat bestand, maar we gaan de gebruiker redirecten dmv PHP.net: header.
In het script controleer je eerst of de gebruiker reeds geklikt heeft, door jou database gegevens te vergelijken met zijn IP-adres. Als de bezoeker zijn IP-adres voorkomt mag je script onmiddelijk stoppen en de gebruiker redirecten. Er moet dan immers niets meer gebeuren omdat de klik niet uniek is.
Als de gebruiker nog niet voorkomt in je database voeg je deze toe, en redirect je hem nadat hij in de database is toegevoegd. Op deze manier merkt de gebruiker hier bijna niets van.
Hopelijk raak je hier wat verder mee. Als het je niet lukt kan je steeds je code posten en dan kunnen we bijsturen waar nodig :-)
... http://lmgtfy.com/?q=headers+already+sent
->
Je kan geen header gegevens aanpassen van zodra er output (html, ..) is.
Je kan dit omzeilen door PHP.net: ob_start vanboven, voor elke output (html, spatie, ..) te plaatsen. Deze functie buffert de output alvorens ze ook echt weer te geven, dit maakt je script natuurlijk trager.
Je regel 7 klopt overigens niet helemaal.
$ip gaat of 1 of 0 bevatten (1 als het IP-adres bestaat, 0 als het niet bestaat).
Op regel 7 zal je dus zoiets nodig hebben:
Tekst = Het bestand zal in een nieuwe pagina geopend worden.<br><br>indien de pagina niet automatisch geopend wordt: <a target='_blank' href='". $url ."'>klik hier.</a>
Klopt wimmarien, alleen hoe kan ik ze nu naar je juiste file sturen waarop ze hebben geklikt ?
Ik snap niet hoe ik dat moet doen.
misscien een Meta-refresh een optie ?
Je kan de url dmv een parameter meegeven; bvb ?url=_URL_. Deze kan je dan dmv $_GET['url'] uitlezen en de bezoeker redirecten.
Stel dat je de links in een database hebt zitten, dan volstaat het om het ID van die rij mee te geven. Je kan dan op je click-pagina de url uit je database halen en de gebruiker redirecten.
//edit:
Onderstaande code gebruik ik om het aantal kliks op een banner bij te houden. Deze zijn echter NIET uniek!
Weet zeker dat:
- Er GEEN output is van te voren; geen enkele echo en ook geen html code voor <?php. 1 spatie of 1 enter is zelfs al teveel, de eerste tekens in je document moeten dus <? of <?php zijn.
- Er geen cookies geset worden. Hiermee verzend je ook de headers.
- Ik zie dat je config.php include, zie dat ook daar geen output is!
<?php
include 'config.php';
if(isset($_GET['id']))
{
$rQuery = mysql_query("SELECT link FROM file WHERE id='".mysql_real_escape_string($_GET['id'])."'");
if(@mysql_num_rows($rQuery) != 1)
die("Het opgegeven 'ID' komt niet voor in de datebase!");
$ofile = @mysql_fetch_object($rQuery);
mysql_query("UPDATE file SET klik=klik+1 WHERE id='".mysql_real_escape_string($_GET['id'])."'");
header('location: '.$ofile->link);
}
?>
Wat doe ik verkeerd ?
op de bovengenoemde code, telt hij toch weer de klik mee wat niet zou mogen omdat het ip al bestaat en de file al bestaat op dat ip.