login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Click counter

Offline Multiwebmedi - 25/03/2009 11:23 (laatste wijziging 25/03/2009 11:29)
Avatar van MultiwebmediNieuw lid Beste,

Ik wil graag een scriptje maken dat opslaat hoeveel keer erop een link geklik is. Unieke klik dan.

Ik heb gezocht op google alleen kan ik niet vinden wat ik zoek.
Zou iemand mij A.U.B willen helpen ?

Ik wil velden aanmaken in de mysql.

id
ip
host
datum/tijd

dit zijn de dingen die hij moet invoegen als er op een link geklikt is.
Verder moet er gecontroleerd worden bij het klikken of het een unieke klik is.

Als dit niet het geval is hoef er niks toegevoegd te worden


Mvg, Remon

23 antwoorden

Gesponsorde links
Offline PRO - 25/03/2009 11:32
Avatar van PRO JS interesse waar is het voor? een download teller of een advertising systeem?

En wat versta jij onder een unieke klik?
Offline marten - 25/03/2009 11:33
Avatar van marten Beheerder wat heb je al geprobeerd? Wat lukt er niet?
Offline Multiwebmedi - 25/03/2009 11:41
Avatar van Multiwebmedi Nieuw lid @PRO,
Het is inderdaad een soort download teller.

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.
Offline marten - 25/03/2009 11:48
Avatar van marten Beheerder 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.
Offline thomasje - 25/03/2009 11:49 (laatste wijziging 25/03/2009 11:50)
Avatar van thomasje MySQL beginner 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.

EDIT: ik was al te laat  
Offline Wim - 25/03/2009 11:52 (laatste wijziging 25/03/2009 11:53)
Avatar van Wim Crew algemeen 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 :-)

succes

//edit:
veel te laat 
Offline Multiwebmedi - 25/03/2009 12:05 (laatste wijziging 25/03/2009 12:51)
Avatar van Multiwebmedi Nieuw lid Beste,

Ik heb de datebase tabel en velden aangemaakt.
ik heb een i-net radio en het gaat erom hoevaak er op de bestanden klikt wordt van de files.

Ik heb de volgende mysql nu:
http://www.plaatscode.be/123832/

Het zijn overigens maar 5 files die bijgehouden moeten worden.
Is het nu zo dat ik voor elke file een aparte pagina moet gaan maken ?

EDIT:

Ik heb nu het volgende voor het opslaan


  1. <?php
  2.  
  3. include 'config.php';
  4.  
  5. $ip = mysql_num_rows(mysql_query("SELECT ip FROM windows_media_player WHERE ip='".$_SERVER['REMOTE_ADDR']."'"));
  6.  
  7. if($_SERVER['REMOTE_ADDR'] == $ip) {
  8. header('Location: http://www.example.com/');
  9.  
  10. }else{
  11.  
  12. mysql_query("INSERT INTO windows_media_player (ip, host, datum) VALUES('".$_SERVER['REMOTE_ADDR']."','".gethostbyaddr($_SERVER['REMOTE_ADDR'])."', NOW())")or die(mysql_error());
  13.  
  14. header('Location: http://www.test.com/');
  15.  
  16. }
  17. ?>


Klopt dit ?
Wel krijg ik een error:
Warning: Cannot modify header information - headers already sent by
Offline Koen - 25/03/2009 13:03
Avatar van Koen PHP expert ...
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.
Offline Wim - 25/03/2009 13:09
Avatar van Wim Crew algemeen 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:
  1. if($ip > 0)
  2. { // bestaat
  3.  
  4. }
  5. else
  6. { //bestaat niet
  7.  
  8. }
Offline Multiwebmedi - 25/03/2009 13:41 (laatste wijziging 25/03/2009 13:45)
Avatar van Multiwebmedi Nieuw lid 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 ?
Offline Appie_Dijk - 25/03/2009 14:13
Avatar van Appie_Dijk Lid Ik heb zelf dit staan:

$url = http://www.jesite.nl/jedownload.pdf

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>

<script>
window.open("<? echo $url; ?>", "_blank");
</script>
Offline Multiwebmedi - 25/03/2009 14:23
Avatar van Multiwebmedi Nieuw lid Dat is niet echt wat ik zoek.
Veel mensen hebben een popup killer.
Offline Wim - 25/03/2009 14:23 (laatste wijziging 25/03/2009 14:27)
Avatar van Wim Crew algemeen
Multiwebmedi schreef:
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!
  1. if(isset($_GET['id']))
  2. {
  3.  
  4. $rQuery = mysql_query("SELECT link FROM banners WHERE id='".mysql_real_escape_string($_GET['id'])."'");
  5. if(@mysql_num_rows($rQuery) != 1)
  6. die("Invalid banner.");
  7. $oBanner = @mysql_fetch_object($rQuery);
  8.  
  9. mysql_query("UPDATE banners SET clicks=clicks+1 WHERE id='".mysql_real_escape_string($_GET['id'])."'");
  10. header('location: '.$oBanner->link);
  11. }
Offline Multiwebmedi - 25/03/2009 14:27
Avatar van Multiwebmedi Nieuw lid Die snap ik niet helemaal  
Zoals ik al zei ben ik geen held in php dus dit wordt wel in 1 keer teveel van het goeie haha...
Offline Appie_Dijk - 25/03/2009 15:05
Avatar van Appie_Dijk Lid en als je het dan zonder _blank doet, dan wordt t in dezelfde pagina geopent, dan heb je waarschijnlijk geen last van popup killers...
Offline Multiwebmedi - 25/03/2009 16:45 (laatste wijziging 25/03/2009 17:03)
Avatar van Multiwebmedi Nieuw lid Helaas, werkt dat ook niet.
Het scherm gaat open maar wordt direct weer gesloten.

@wimmarien,
Je voorbeeld is perfect ik zit alleen nogsteeds met de error dat de header al verzonden is.
Offline Wim - 25/03/2009 17:07
Avatar van Wim Crew algemeen Kan je je hele code misschien geven?

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!

Meer info: PHP.net: header
Offline Multiwebmedi - 25/03/2009 17:36 (laatste wijziging 25/03/2009 17:44)
Avatar van Multiwebmedi Nieuw lid
  1. <?php
  2. include 'config.php';
  3. if(isset($_GET['id']))
  4. {
  5. $rQuery = mysql_query("SELECT link FROM file WHERE id='".mysql_real_escape_string($_GET['id'])."'");
  6. if(@mysql_num_rows($rQuery) != 1)
  7.  
  8. die("Het opgegeven 'ID' komt niet voor in de datebase!");
  9.  
  10. $ofile = @mysql_fetch_object($rQuery);
  11.  
  12. mysql_query("UPDATE file SET klik=klik+1 WHERE id='".mysql_real_escape_string($_GET['id'])."'");
  13. header('location: '.$ofile->link);
  14. }
  15. ?>


Ik heb nu een db verbinding in de file zelf gemaakt en nu werkt ie wel.
Nu nog even kijken hoe ik het aantal ga ophalen om te weergeven.
Offline Wim - 25/03/2009 17:48
Avatar van Wim Crew algemeen Hou er rekening mee dat je kliks zo niet uniek zijn!
Offline Multiwebmedi - 25/03/2009 17:56
Avatar van Multiwebmedi Nieuw lid Kan ik die wel uniek maken of wordt dat erg lastig ?
Offline svghosting - 26/03/2009 00:24
Avatar van svghosting Lid Dan zou je een ip-register moeten maken, die registreert. En dat er zodra er door 1 ip is geklikt dat er niks meer wordt bij geteld.
Offline Wim - 26/03/2009 10:46
Avatar van Wim Crew algemeen
Multiwebmedi schreef:
Kan ik die wel uniek maken of wordt dat erg lastig ?


Je kan je vorige script (op pagina 1 van dit topic) combineren met je huidige script 
Offline Multiwebmedi - 27/03/2009 02:23 (laatste wijziging 27/03/2009 02:25)
Avatar van Multiwebmedi Nieuw lid @Wimmarien,

Ik heb de klik nu ook uniek.
Alleen zijn er 5 files en als de zelfde gebruiker die al voorkomt een andere file kiest dan update hij de datebase niet.

Dus de file moet ook gecontroleerd worden of die de vorige keer ook gekozen is met het zelfde ip.

Ik dacht dus aan het volgende maar dat blijkt niet te werken:

  1. $ip = mysql_num_rows(mysql_query("SELECT ip, file FROM bezoeker WHERE ip='".$_SERVER['REMOTE_ADDR']."'"));
  2.  
  3. if($ip['ip'] > 0 && $ip['file'] == mysql_real_escape_string($_GET['id']))
  4. {


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.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.413s