Avatar billede flim Nybegynder
22. oktober 2003 - 00:06 Der er 44 kommentarer og
1 løsning

En download-tæller?

Goddag igen :)

Er det muligt at lave en download-tæller?

Eller det er det vel ikke, men jeg har en side med en del links på (fra en database). Disse links henviser til filer som folk selv uploader på min side, så dem kan jeg ikke røre.

Er det muligt at lave en tæller som tæller en op hver gang man trykker på et link? Simpelthen for at se hyppigheden af hvilke links der bliver brugt oftest?

Jeg havde forestillet mig mig at man så skulle lægge noget kode på selve link-siden (den fil der bliver linket til), men det kan jeg jo ikke...

Nogen forslag?

På forhånd tak.

Mvh Flim
Avatar billede metal_hansen Nybegynder
22. oktober 2003 - 00:29 #1
www.hostedscripts.dk har sådan en funktion - hvis du ikke selv vil hoste det ;)
Avatar billede detox Nybegynder
22. oktober 2003 - 01:11 #2
Du kan lave et felt i din 'link-tabel' som tæller. Så laver du bare dine link's med id på linket, i stil med:
echo "<a href=\"vis_link?id=".$id."\">".$link_navn."</a>";

På 'vis_link.php' siden kan du så opdatere tælleren med det valgte id og hente det aktuelle link, som du bruger i en header().
Avatar billede detox Nybegynder
22. oktober 2003 - 01:28 #3
Et lille eksempel:

<?
require 'connect.inc.php';
if (isset($_GET['id'])) {
    $res = mysql_query("UPDATE links SET hits=hits+1 WHERE id=".$_GET['id']);
    $url = mysql_result(mysql_query("SELECT url FROM links WHERE id=".$_GET['id']),0);
    header("Location: ".$url);
} else {
    $res = mysql_query("SELECT id, navn FROM links ORDER BY navn");
    while ($row = mysql_fetch_assoc($res)) {
        echo "<a href=\"".$_SERVER['PHP_SELF']."?id=".$row['id']."\">".$row['navn']."</a><br />";
    }
}
?>
Avatar billede flim Nybegynder
22. oktober 2003 - 06:39 #4
metal_hansen. Jeg havde håbet på selv at lave det, ,så ingen points til dig :)

detox. Lyder ikke helt dumt det du skriver. Men du kan se tabellen her www.flim.dk/boyssange/showfiles.php - og så mener du bare jeg skal smække et ekstra felt ppå i enden. Jeg har bare ikke helt styr på hvordan...

Kan jeg evt. sende min nuværende kode så du kan se hvad jeg har nu her?
Avatar billede detox Nybegynder
22. oktober 2003 - 11:32 #5
Ja, du tilføjer bare et felt og kalder det fx 'hits', som i mit eksempel. Jeg har desværre ikke mere tid nu, men det skulle være nogenlunde enkelt. Du har jo allerede lavet det med 'id' i linket kan jeg se, så mon ikke.
Du får et svar, hvis du kan bruge det.
Avatar billede flim Nybegynder
27. oktober 2003 - 15:52 #6
detox - Jeg kan sgu ikke helt få det til at virke...

Den der require - hvad er det for en fil?

Og hvis du gider/kan forklare lidt bdre hvad der sker i den enkelte linier,  for de vil sgu ikke helt som jeg vil!

Mvh Flim
Avatar billede detox Nybegynder
27. oktober 2003 - 15:57 #7
require 'connect.inc.php';
inkluderer en fil med indholdet:
<?
$s = mysql_connect("localhost", "bruger", "pass")
      or die("Could not connect: " . mysql_error());
      $db = mysql_select_db('database')
      or die("Ingen database " . mysql_error());
?>
Så det er bare for at connecte til databasen.
Avatar billede detox Nybegynder
27. oktober 2003 - 16:01 #8
if (isset($_GET['id'])) {
    $res = mysql_query("UPDATE links SET hits=hits+1 WHERE id=".$_GET['id']);
    $url = mysql_result(mysql_query("SELECT url FROM links WHERE id=".$_GET['id']),0);
    header("Location: ".$url);
}
Bliver udført hvis id er tilføjet i url'en.
Den laver først en UPDATE af feltet: 'hits', hvor den forøger værdien med en.
Så finder den url og sender brugeren videre dertil vha. header().
Avatar billede detox Nybegynder
27. oktober 2003 - 16:04 #9
I fald 'id' ikke er sat i adresselinien udføres:

else {
    $res = mysql_query("SELECT id, navn FROM links ORDER BY navn");
    while ($row = mysql_fetch_assoc($res)) {
        echo "<a href=\"".$_SERVER['PHP_SELF']."?id=".$row['id']."\">".$row['navn']."</a><br />";
    }
}
Hvor den henter 'id' og 'navn' fra alle rækkerne i tabellen og lister dem som links til siden selv og med 'id' i adresselinien.
Avatar billede detox Nybegynder
27. oktober 2003 - 16:05 #10
Håber det var uddybende nok. Hvad er det du har problemer med?
Avatar billede flim Nybegynder
27. oktober 2003 - 16:05 #11
Du skulle vel ikke have msn? Så vil jeg nemlig gerne vise dig den kode jeg har i forvejen, for jeg har en løkke den kører så alle rækkerne kommer frem, og det med de der hits skal vel stå inde i løkken?
Avatar billede detox Nybegynder
27. oktober 2003 - 16:08 #12
Jo, jeg har msn. Men kunne du ikke bare poste den her?
Avatar billede flim Nybegynder
27. oktober 2003 - 16:13 #13
Ok - fint med mig...

Det ska lige siges at det nok er lidt rodet da jeg ikke har brugt tid på at optimere, så bær over med det. Dette er siden der hedder showfiles.php altså der hvor filerne bliver vist. Så mit spørgsmål er hvor "din kode" skal stå henne? Om det skal være inde i løkken, eller udenfor og om man så bare kan trække oplysningerne ud for hver enkelt? (Håber du forstår hvad jeg mener)...

<?php

$connect = mysql_connect("*","*","*");
mysql_select_db("flim_dk", $connect);

$q = mysql_query("SELECT * FROM files ORDER BY kommentar ASC") or die(mysql_error());

$antal = mysql_num_rows($q);

$totalsize = "";

if ($antal == 1)
{
$fil = "fil";
}
else
{
$fil = "filer";
}

/******************HER ER DIN KODE****************/
if (isset($_GET['id'])) {
        mysql_select_db("flim_dk", $connect);
    $res = mysql_query("UPDATE files SET hits=hits+1 WHERE id=".$_GET['id']);
    $url = mysql_result(mysql_query("SELECT filnavn FROM files WHERE id=".$_GET['id']),0);
    header("Location: ".$url);
}
else {
    $res = mysql_query("SELECT * FROM files ORDER BY kommentar");
    while ($row = mysql_fetch_assoc($res)) {
    echo "<a href=\"".$_SERVER['PHP_SELF']."?id=".$row['id']."\">".$row['navn']."</a><br>";
        }
            }

/*********************DIN KODE SLUT*************************/

echo 'Her kan du hente de filer der nu engang ligger i databasen...<BR><BR>

Der er nu ';echo $antal; echo ' '; echo $fil; echo ' i databasen. <BR><BR>

<font color="#FF0000">Som en lille ny ting kan man nu sortere i databasen. Enten efter Filnavn, Hvem der har uploadet den, eller hvornår den er uploadet. Bare klik på ovrskriften i hver række, og de vil blive sorteret efter den laveste først. Hvis du klikker på den samme igen vil den højeste komme øverst. God fornøjelse...<br><br></font>';

echo '<TABLE BORDER="1">';
echo '<TR>';
echo '    <TD WIDTH="350"><B><a href="FilDESC.php">Filnavn</a></b></TD>';
echo '    <TD WIDTH="150"><b><a href="NavnASC.php">Uploaded af:</a></b></TD>';
echo '    <TD WIDTH="100"><b><a href="TidASC.php">Tidspunkt</a></b></TD>';
echo '    <TD WIDTH="100"><b>Hits</b></TD>';
//echo '    <TD WIDTH="100"><b>Størrelse</b></TD>';
echo '</TR>';
while ($row = mysql_fetch_array($q))
{

$size = ($row[file_size]/1024);
$english_format_number = number_format($size, 2, '.', '');

echo '<TR>';
echo '    <TD><a href="http://www.flim.dk/diverse/file.php?id='.$row[id].'" TARGET="_blank">';echo $row[kommentar].'</a></TD>';
echo '    <TD>';echo $row[egetnavn].'</TD>';
echo '    <TD>';echo $row[tidspunkt].'</TD>';
echo '  <TD>';echo $row[hits].'</TD>';
//echo '    <TD>';echo $english_format_number.' Kb</TD>';
echo '</TR>';
$totalsize = ($totalsize + $english_format_number);
}
echo '</TABLE><BR><BR>

Den samlede størrelse på databasen er: '; echo $totalsize; echo ' Kb<BR><BR>';
?>
Avatar billede detox Nybegynder
27. oktober 2003 - 16:27 #14
Hvordan ser så 'file.php' ud?
Avatar billede flim Nybegynder
27. oktober 2003 - 16:30 #15
<?php

$connect = mysql_connect("*","*","*");
mysql_select_db("flim_dk", $connect);

$q = mysql_query("SELECT file_code,file_type FROM files where id='$id'") or die(mysql_error());
if (mysql_num_rows($q)) {
    extract(mysql_fetch_array($q));

    echo $file_code;
} else {
    echo "404 - file not found!";
}


?>
Avatar billede detox Nybegynder
27. oktober 2003 - 16:36 #16
Så skal du fjerne den kode af min du har indsat og så prøve 'file.php' med denne linie tilføjet:

<?php
$connect = mysql_connect("*","*","*");
mysql_select_db("flim_dk", $connect);
$q = mysql_query("SELECT file_code,file_type FROM files where id='$id'") or die(mysql_error());
if (mysql_num_rows($q)) {
    $res = mysql_query("UPDATE files SET hits=hits+1 WHERE id='$id'"); // Opdaterer hits
    extract(mysql_fetch_array($q));
    echo $file_code;
} else {
    echo "404 - file not found!";
}
?>
Avatar billede flim Nybegynder
27. oktober 2003 - 16:39 #17
NICE!!!

Det var selvfølgelig der den skulle stå!

Well - nu virker det, og du kan selv checke efter hvis du vil!

Tusind tak for din tid og fortsat god dag!
Avatar billede flim Nybegynder
27. oktober 2003 - 16:42 #18
Så mangler jeg bare lige at man kan se hvornår den sidst har været hentet, men det kan vel ikke være så svært hvis man bare henter dags dato og så overskriver den der står i forvejen - det vil jeg rode lidt med....
Avatar billede detox Nybegynder
27. oktober 2003 - 16:46 #19
Brug evt. Mysql's TIMESTAMP. Så opdaterer den automatisk når den laver en UPDATE.
Avatar billede detox Nybegynder
27. oktober 2003 - 16:49 #20
Så kan du hente den formaterede dato ud med DATE_FORMAT:
http://www.mysql.com/doc/en/Date_and_time_functions.html
Avatar billede flim Nybegynder
27. oktober 2003 - 16:49 #21
Lidt mere forklaring??

Er det bare en variabel man sætter som automatisk bliver opdateret?
Avatar billede detox Nybegynder
27. oktober 2003 - 16:50 #22
TIMESTAMP er en felttype du kan vælge i MySQL.
Avatar billede detox Nybegynder
27. oktober 2003 - 16:52 #23
Den sætter automatisk tiden når du laver INSERT eller UPDATE i din tabel. Se:
http://www.mysql.com/doc/en/DATETIME.html
og
http://www.mysql.com/doc/en/Column_types.html
Avatar billede detox Nybegynder
27. oktober 2003 - 17:03 #24
Et eksempel på en forespørgsel kunne være:

SELECT *, DATE_FORMAT(timestamp_felt, '%d/%m %Y %H:%i:%s') AS tid FROM files ORDER BY kommentar ASC
Avatar billede flim Nybegynder
27. oktober 2003 - 17:14 #25
Jeg troede bare at jeg kunne tage min file.php og så lave den sådan her:

$date = date("d/m/y");

if (mysql_num_rows($q)) {

$res = mysql_query("UPDATE files SET hits=hits+1 WHERE id='$id'"); // Opdaterer hits
$res2 = mysql_query("UPDATE files SET lasthit=$date WHERE id='$id'"); // Opdaterer lasthits
  extract(mysql_fetch_array($q));
    echo $file_code;
   
}

Men hvis jeg gør det får jeg 0.900 ud som resultat....
Avatar billede detox Nybegynder
27. oktober 2003 - 17:17 #26
Hvis du sætter felttypen på 'lasthit' til TIMESTAMP, behøver du ikke bekymre dig mere om det. Så bliver tiden opdateret når du laver denne:
$res = mysql_query("UPDATE files SET hits=hits+1 WHERE id='$id'"); // Opdaterer hits
Avatar billede flim Nybegynder
27. oktober 2003 - 17:20 #27
Ja ok, men så ser det jo helt skævt ud - med året først, så måneden osv osv, men ok - bedre end ingenting :)
Avatar billede detox Nybegynder
27. oktober 2003 - 17:22 #28
Næ, du bestemmer jo selv formateringen. Se mit eksempel kl. 17:03:56. Samt:
http://www.mysql.com/doc/en/Date_and_time_functions.html
Avatar billede flim Nybegynder
27. oktober 2003 - 17:36 #29
Det burde sgu ikke være så svært, men jeg er ved at være lidt dum i roen af alt det her kode...

Den der query du laver,  hvor skal den præcis stå?

Den skal vel stadig stå i min file.php ikk'?

Jeg ville nu bare gerne have dato og tidspunkt, og jeg fatter sgu ikke hvorfor det ikke virker....
Avatar billede flim Nybegynder
27. oktober 2003 - 17:37 #30
Kan jeg lokke dig til lige at skrive koden som den skal være, for min stakkels knold kan ikke klare mere. Så fpr du lige 30-40 points xtra for denne ekstra hjælp
Avatar billede detox Nybegynder
27. oktober 2003 - 17:45 #31
Hvis du bruger TIMESTAMP typen er det eneste du behøver ændre i din første fil:

$q = mysql_query("SELECT * FROM files ORDER BY kommentar ASC") or die(mysql_error());
ændres til:
$q = mysql_query("SELECT *, DATE_FORMAT(lasthit, '%d/%m %Y %H:%i:%s') AS tid FROM files ORDER BY kommentar ASC") or die(mysql_error());

og efter: echo '    <TD WIDTH="100"><b>Hits</b></TD>';
echo '    <TD WIDTH="100"><b>Seneste download</b></TD>';

samt, efter: echo '  <TD>';echo $row[hits].'</TD>';
echo '  <TD>'.$row['tid'].'</TD>';
Avatar billede detox Nybegynder
27. oktober 2003 - 17:47 #32
Du skal altså IKKE ændre noget i 'file.php'.
Avatar billede flim Nybegynder
27. oktober 2003 - 17:52 #33
Nu tror jeg vi er ved at være der, men jeg har kun et flet i databasen der hedder lasthit. Du har et felt er hedder tid kan jeg se. Skal man bruge to felter, eller kan jeg bare skirve lasthit begge steder? Eller skal jeg lave et felt der hedder tid?
Avatar billede flim Nybegynder
27. oktober 2003 - 17:53 #34
For med denne kode:

$q = mysql_query("SELECT *, DATE_FORMAT(lasthit, '%d/%m %Y %H:%i:%s') AS lasthit FROM files ORDER BY kommentar ASC") or die(mysql_error());

if (mysql_num_rows($q)) {

$res = mysql_query("UPDATE files SET hits=hits+1 WHERE id='$id'"); osv osv...

Ser det sådan her ud: www.flim.dk/boyssange/showfiles.php
Avatar billede detox Nybegynder
27. oktober 2003 - 17:54 #35
Du skal kun bruge det ene felt ved navn 'lasthit'
Avatar billede detox Nybegynder
27. oktober 2003 - 17:55 #36
$q = mysql_query("SELECT *, DATE_FORMAT(lasthit, '%d/%m %Y %H:%i:%s') AS tid FROM files ORDER BY kommentar ASC") or die(mysql_error());

Laver et slags virtuelt felt med alias 'tid'.
Avatar billede detox Nybegynder
27. oktober 2003 - 17:56 #37
Og den udskriver du med:

echo '  <TD>'.$row['tid'].'</TD>';
Avatar billede flim Nybegynder
27. oktober 2003 - 18:02 #38
Smart nok, men de virker altså ikke :(

Om jeg fatter hvorfor....

file.php:
----------------------------
$q = mysql_query("SELECT *, DATE_FORMAT(lasthit, '%d/%m %Y %H:%i:%s') AS tid FROM files ORDER BY kommentar ASC") or die(mysql_error());

if (mysql_num_rows($q)) { osv osv
------------------------------

showfiles.php:
------------------------------
echo '<TABLE BORDER="1">';
echo '<TR>';
echo '    <TD WIDTH="350"><B><a href="FilDESC.php">Filnavn</a></b></TD>';
echo '    <TD WIDTH="150"><b><a href="NavnASC.php">Uploaded af:</a></b></TD>';
echo '    <TD WIDTH="100"><b><a href="TidASC.php">Tidspunkt</a></b></TD>';
echo '    <TD WIDTH="50"><b>Hits</b></TD>';
echo '    <TD WIDTH="100"><b>Sidst set</b></TD>';<------------ DER!
//echo '    <TD WIDTH="100"><b>Størrelse</b></TD>';
echo '</TR>';
while ($row = mysql_fetch_array($q))
{

$size = ($row[file_size]/1024);
$english_format_number = number_format($size, 2, '.', '');

echo '<TR>';
echo '    <TD><a href="http://www.flim.dk/diverse/file.php?id='.$row[id].'" TARGET="_blank">';echo $row[kommentar].'</a></TD>';
echo '    <TD>';echo $row[egetnavn].'</TD>';
echo '    <TD>';echo $row[tidspunkt].'</TD>';
echo '  <TD>';echo $row[hits].'</TD>';
echo '  <TD>';echo $row[tid].'</TD>'; <---------------------- DER!
//echo '    <TD>';echo $english_format_number.' Kb</TD>';
echo '</TR>';
$totalsize = ($totalsize + $english_format_number);
}


Hvad er det der gør at det kan være så svært for mig at fatte?

I tabellen er der et felt der hedder lasthit med Datatypen TIMESTAMP!

Jeg føler jeg har gjort alt hvad du har sagt ?!?!
Avatar billede detox Nybegynder
27. oktober 2003 - 18:05 #39
$q = mysql_query("SELECT *, DATE_FORMAT(lasthit, '%d/%m %Y %H:%i:%s') AS tid FROM files ORDER BY kommentar ASC") or die(mysql_error());

skal være i 'showfiles'
Avatar billede detox Nybegynder
27. oktober 2003 - 18:06 #40
Du skal IKKE ændre noget i 'file.php'.
Avatar billede flim Nybegynder
27. oktober 2003 - 18:09 #41
Ok, det havde jeg så ikke lige fattet!

Men tak - du har reddet min aften (i hvert fald indtil der kommer Robinson :o )

Hvordan kan jeg give dig lidt xtra points hvis du er interesseret i det?
Avatar billede detox Nybegynder
27. oktober 2003 - 18:16 #42
En lidt mere korrekt syntaks for udskrivningsdelen:

while ($row = mysql_fetch_array($q))
{
$size = ($row['file_size']/1024);
$english_format_number = number_format($size, 2, '.', '');
echo '<TR><TD><a href="http://www.flim.dk/diverse/file.php?id='.$row['id'].'" TARGET="_blank">'.$row['kommentar'].'</a></TD>';
echo '<TD>'.$row['egetnavn'].'</TD>';
echo '<TD>'.$row['tidspunkt'].'</TD>';
echo '<TD>'.$row['hits'].'</TD>';
echo '<TD>'.$row['tid'].'</TD>';
//echo '    <TD>';echo $english_format_number.' Kb</TD>';
echo '</TR>';
$totalsize += $english_format_number;
}

Altså med bl.a. ' ' omkring dine index.
Pyt med 'flere point'
Avatar billede detox Nybegynder
27. oktober 2003 - 18:17 #43
Ok, så lykkedes det. Og velbekommen da c",)
Avatar billede flim Nybegynder
27. oktober 2003 - 18:18 #44
Oki - takker for kritik...

Næste punkt er at lave så jeg kan uloade flere filer på een gang. Nu ka man "kuun" upload en, men vil gerne have 4-5-10 filer på een gang, men det er der en anden tråd igang om, så jeg må se hvad jeg kan finde ud af!

Endnu en gang tak :))
Avatar billede flim Nybegynder
27. oktober 2003 - 18:27 #45
Og det er så først nu at jeg ser at det faktisk også er dig der har kommenteret det andet spørgsmål jeg har gang i...

Well - jeg kigger på det :)
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