Download counter

Status
Niet open voor verdere reacties.

Niellles

Gebruiker
Lid geworden
21 jun 2008
Berichten
194
Hallo,

Ik wil graag zodra een bestand gedownload wordt even de "lastdownload" en "aantal downloads" registreren. Daarom dacht ik het volgende bestand (file.php) te maken:
PHP:
<?php
	if (isset($_GET['d']))
	{	
		$query = mysql_query("SELECT * from `uploads` WHERE id='".mysql_real_escape_string($_GET['d'])."'");
		
		if (mysql_num_rows($query) > 0)
		{
			$res = mysql_fetch_array($query);
			$res['downloads']++;
			
			mysql_query("UPDATE `uploads` SET  `downloads` = '".$res['downloads']."', `lastdownload` = now() WHERE `id` = ".$_GET['d']);
			
		    header("Content-type: Application/octet-stream");
		    header("Content-Disposition: attachment; filename=".$res['title']);
		    readfile($uploadrealdir.$res['title']);
	    }
	    else
	    {
			header("Location:404.shtml");
		}
	}
	else
	{
		header("Location:404.shtml");
	}
?>

En het zo aan te roepen:
PHP:
echo "<h2>".$res['title']." - <a href=\"file.php?d=".$_GET['d']."\">download</a></h2>";

Alleen nu is het zo dat iemand alleen op de link hoeft te klikken en er komt een "download" bij... Dat wil ik niet... (ook omdat iemand dan 1000x op de link kan klikken... en dan is ie vaak gedownload en dan lijkt de download goed...)

Hoe kan ik dat oplossen? Alle downloads opnemen in een database en even kijken of het ip deze download al een keer gedownload heeft (zo ja; dan mag iemand wel downloaden maar komt er geen lastupload en download bij.)

Ik hoop dat het probleem een beetje duidelijk is... :)

Mvg,
Niels
 
IPs loggen is inderdaad een optie.

Andere optie is om een cookie te zetten bij gebruikers die de download gedaan hebben.
Dan zie je ook 2 downloads als 2 verschillende pc's op hetzelfde netwerk iets downloaden.

Maar het kan weer in de war raken als je een user hebt die geen cookies accepteert...

Je zou ook nog beide kunnen overwegen ;)
 
Mag ik dan ook even vragen of dat mijn code niet heel erg vertraagd?
Stel ik heb 100.000 rijen in m'n DB, hoelang duurt het dan om alles door te werken op SELECT query met "where `id`=$_SESSION['id'] and did='$lol'" (niet helemaal correcte syntax :p)

Of is dat goed te doen?
 
Zelfs MySQL moet zonder al teveel problemen dat soort operaties uit kunnen voeren op een tabel met een miljoen rijen. Knal er een index op, sla het IP op als een integer (ip2long) en dat moet helemaal goed komen :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan