Avatar billede dotcom1 Nybegynder
12. november 2004 - 21:47 Der er 6 kommentarer og
1 løsning

Vise antal links-klik, der er gemt i MySQL

jeg har fundet dette script, der både tvinger browseren til at downloade den fil, der gemmer sig bag et link (via en Åbn eller Gem Som-dialogboks), samt tæller antal gange, der er blevet klikket på det givne link. Det gemmes i en MySQL-database. Det fungerer helt fint. Jeg ville dog gerne vise det antal gange, der er blevet klikket/downloadet ved siden af linket, i stedet for at skulle kigge i MySQL-databasen hver gang. Er der nogen der kan fortælle mig hvordan det gøres?

Her er scriptet som det ser ud nu:

<?
/*
- Save this php-file as download.php.
- Create the 'files' table with the following query
- Modify the $path variable and set the real path where you store all you files
    linux eg. '/data/www/my_files/'
    win32 eg. 'C:\www\my_files\\' (note the double \ at the end)
    you can also use a relative path...
- Add download.php to the file you want to log :
    http://www.site.com/download.php?file=FILENAME.ext
- Check your 'files' tables to see the amount of download for each files //Det vil jeg helst slippe for!

### Create table query

CREATE TABLE `downloads` (
  `ID` tinyint(4) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '0',
  `downloads` tinyint(4) NOT NULL default '0',
  `date` datetime NOT NULL,
  PRIMARY KEY  (`ID`),
  KEY `ID_2` (`ID`)
) TYPE=MyISAM;
*/

### Script configuration
// Database authorization
$conf['host'] = 'localhost';
$conf['base'] = '*****';
$conf['login'] = '*****';
$conf['password'] = '*****';
// Path of the files;
$path = "opgaver/";

function download($path,$file){
    $length = filesize("$path/$file");
    header("Content-Type: application/force-download; name=\"$file\"");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: $length");
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Expires: 0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    readfile("$path/$file");
}

function err_msg($text) {
    $out = '<center>'."\n";
    $out .= '<br><br><br>'."\n";
    $out .= '<font face="Arial, Helvetica" color="#D20000" size="2"><b>'.$text.'</b></font>'."\n";
    $out .= '</center>';
    die($out);
}

$file = ( isset($_GET['file']) && $_GET['file']!='' ) ? $_GET['file'] : null;
$request = "select * FROM downloads WHERE name LIKE '$file'";

if(!$file){
    err_msg('Specificér en fil <br>('.$_SERVER['PHP_SELF'].'?file=myfile)');
}elseif(!is_file($path.$file)){
    err_msg('Fil ikke tilgængelig!');
}

$date = date("Y-m-d H:i:s");

### Is the file already in the db ?
$db = mysql_connect($conf['host'], $conf['login'], $conf['password']);
mysql_select_db($conf['base'],$db);
$req = mysql_query($request);


$in_db = @mysql_num_rows($req);

### The file has not been downloaded yet
if(!$in_db){

    $sql = "INSERT INTO downloads (ID, name, downloads, date) Values ('', '$file', '1', '$date')";

### Already downloaded
}else{

    $records = mysql_fetch_array($req);
    $rec_download = ($records['downloads']+1);
   
    $sql = "UPDATE downloads SET downloads='$rec_download', date='$date' WHERE name='$file'";
}

$db = mysql_connect($conf['host'], $conf['login'], $conf['password']);
mysql_select_db($conf['base'],$db);
$result = mysql_query($sql);

### Send file
download($path,$file);


mysql_close();

?>
Avatar billede hmortensen Nybegynder
12. november 2004 - 22:23 #1
Så vidt jeg lige kan læse, fremgår filerne først i tabellen, når de er blevet hentet mindst en gang.

Hvis du nu lagde alle filerne ind i tabellen, kunne du blot hive dem ud sådan her:

$sql = mysql_query("SELECT id, name, downloads FROM downloads");
while ($row = mysql_fetch_array($sql)) {
echo "<a href=\"downloads.php?id=".$row['id']."\">".$row['name']."</a> - Downloadet: ".$row['downloads']."<br />\n";
}
Avatar billede dotcom1 Nybegynder
12. november 2004 - 22:56 #2
Ja, det er rigtigt som du siger, filerne fremgår først i tabellen, når der er blevet klikket på dem. Jeg er ny mht. MySQL, så måske et dumt spørgsmål, men hvordan lægger jeg alle filerne ind i databasen, så jeg kan hive dem ud med din kode?

Mvh.
Avatar billede hmortensen Nybegynder
12. november 2004 - 23:00 #3
Du kan indskrive dem via phpmyadmin, eller andet mysql database tool, eller lave en side med en form og et felt til navnet, så den kan indsætte derfra.
Avatar billede dotcom1 Nybegynder
12. november 2004 - 23:02 #4
Ok, når de allesammen ligger der, hvor indsætter jeg så din kode? Selve linket ligger på en anden side...hvordan får jeg vist antal kliks på den side?
Avatar billede dotcom1 Nybegynder
12. november 2004 - 23:23 #5
Ok, alle filerne ligger i databasen nu. Hvor skal jeg indsætte din kode?
Avatar billede dotcom1 Nybegynder
13. november 2004 - 16:46 #6
Har fået det til at virke. Læg et svar, hmortensen.
Avatar billede hmortensen Nybegynder
13. november 2004 - 19:14 #7
Ok, jeg nåede heller ikke at kigge på det selv :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester