Avatar billede dotcom1 Nybegynder
24. november 2004 - 21:18 Der er 3 kommentarer og
1 løsning

Date i MySQL ændres når der klikkes på et link

Jeg har et download-script, der ser sådan ud:

<?php
### Force download og klik-tæller-script.
### Create MySQL table query
/*
CREATE TABLE downloads (
  ID tinyint(4) NOT NULL auto_increment,
  name varchar(255) NOT NULL default '0',
  titel text NOT NULL,
  downloads int(4) NOT NULL default '0',
  date date NOT NULL default '0000-00-00',
  PRIMARY KEY  (ID)
) TYPE=MyISAM;

*/
### Konfigurerbare variabler.
$sql = false;
$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'";

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

### 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);

if($file){
    if(!is_file($path.$file)){
        err_msg('Fil ikke tilgængelig!');
    }
    ### 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'";
    }
}
else{
    $res = mysql_query("SELECT ID, name, downloads FROM downloads");
    while ($row = mysql_fetch_assoc($res)) {
        $ids[] = $row['ID'];
        $link_info[$row['ID']]['name'] = $row['name'];
        $link_info[$row['ID']]['downloads'] = $row['downloads'];
//        echo info[$row['id']]['downloads']." ".info[$row['id']]['name']."<br>";
    }
}

if($sql){
    $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();

### get specific link by ID
function getLinkById($ID,$ids,$link_info){
    if(in_array($ID,$ids)){
        // bemærk at det i nogle tilfælde vil være nødvendigt at ændre linkadressen (hardcode link i stedet for $_SERVER['PHP_SELF'])
        echo "<a href=\"".$_SERVER['PHP_SELF']."?file=".$link_info[$ID]['name']."\">".$link_info[$ID]['name']."</a> - Downloadet ".$link_info[$ID]['downloads'];
        echo $link_info[$ID]['downloads'] == 1 ? " gang" : " gange";
        echo "<br />\n";
    }
    else
        echo "Linket findes desværre ikke - fejlmeld venligst til webmaster!";
}

### Eksempel på brug af ovennævnte funktion:
//echo "<br><strong>Udskriver link efter ID:</strong><br>";
//getLinkById(1,$ids,$link_info);

?>

Jeg kan se at hver gang der klikkes på et link - og der tælles - så ændres datoen i databasen til nuværende dato. Det skal den helst ikke. Den skal blive som den var, da linket blev lagt i databasen. Kan nogen hjælpe med det?

Mvh.
Avatar billede schaefner Juniormester
24. november 2004 - 21:23 #1
$sql = "UPDATE downloads SET downloads='$rec_download', date='$date' WHERE name='$file'";

Ændre til:

$sql = "UPDATE downloads SET downloads='$rec_download' WHERE name='$file'";
Avatar billede schaefner Juniormester
24. november 2004 - 21:24 #2
} else {
  $records = mysql_fetch_array($req);
  $rec_download = ($records['downloads']+1);
 
  $sql = "UPDATE downloads SET downloads='$rec_download' WHERE name='$file'";
}

Kan godt kortes til:

} else {
  $sql = "UPDATE downloads SET downloads = downloads+1 WHERE name='$file'";
}
Avatar billede dotcom1 Nybegynder
24. november 2004 - 21:30 #3
Tak for hjælpen. Det virker! ;)
Avatar billede schaefner Juniormester
24. november 2004 - 21:34 #4
Svar :)
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