Originariamente inviato da neida
Secondo me dovresti provare a vedere l'intera faccenda da una prospettiva diversa...
Molto probabilmente se utilizzassi delle tabelle dedicate anzichè un'unica tabella in cui memorizzare tutto, quindi il nome del file col relativo id, il numero complessivo dei click effettuati ecc... sarebbe tutto molto ma molto più semplice.
Allora, suppenendo di avere a disposizione due tabelle, dlfile e click, diciamo che la prima conterrà il'ID e il nome del file e la seconda servirà per memorizzare il numero di click (download) effettuati.
Prima di iniziare dovresti aggiungere al file di configurazione la funzione che si occuperà materialmente di eseguire il download del file. ( Grazie andr3a ^^ )
Codice PHP:
function forceDownload( &$file ) {
/**
* Function forceDownload:
* download any type of file if it exists and is readable
* -------------------------------------
* @author Andrea Giammarchi
* @date 18/01/2005 [13/04/2005]
* @compatibility PHP >= 4.3.0
*/
if( file_exists( $file ) == true && is_readable( $file ) == true ) {
$filename = &basename( $file );
if( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false ) {
$parsename = &explode( '.', $filename );
$last = count( $parsename ) - 1;
$filename = &implode( '%2E', array_slice( $parsename, 0, $last ) );
$filename .= '.'.$parsename[$last];
}
$content = &file_get_contents( $file );
header( 'Content-Type: application/octet-stream' );
header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
header( 'Content-Length:'.strlen( $content ) );
header( 'Content-Transfer-Encoding: binary' );
echo $content;
exit(0);
}
}
Ok, adesso passiamo al file click.php (andrebbe bene anche download.php, fai tu).
Il codice è estremamente semplice, segui i commenti...
Codice PHP:
//controllo se la variabile id_game è stata passata ed è di tipo intero, poi
//assegno il suo valore a $id ed eseguo la query per ottenere l'id richiesto
if(isset($_GET['id_game']) && (int)$_GET['id_game']) {
$id = $_GET['id_game'];
$sql = mysql_query("SELECT * FROM click WHERE id = '$id'") or die(mysql_error());
//se nalla tabella "click" l'id richiesto non è presente lo inserisco e imposto
//il valore a 1. Se invece l'id esiste già allora lo incremento soltanto.
$query = (!mysql_num_rows($sql))
? "INSERT INTO click VALUES ('$id', 1)"
: "UPDATE click SET num_click = num_click + 1 WHERE id = '$id'";
//eseguo la query per l'aggiornamento del record
mysql_query($query) or die(mysql_error());
//recupero il nome del file dalla tabella dedicata (ovviamente associato all'id_game)
$sql2 = mysql_query("SELECT * FROM dlfile WHERE id = '$id'") or die(mysql_error());
$file = mysql_fetch_object($sql2);
// ...fine ;)
forceDownload($file->nome);
}
Il grosso e fatto! ti resta solo da mostrare, dove desideri, il link al file da scaricare.
La cosa importante naturalmente è che il link dovrà essere tipo: click.php?id_game=12
E' solo un esempio base di come potresti fare...