Sto realizzando un contatore di download. Ogni volta che un visitatore clicca sul link di un file, il contatore del download di quel file si incrementa di una unità. Premendo F5 la pagina web mostra il valore del contatore aggiornato. A un certo punto (ad occhio, intorno ai 170 download) il contatore si decrementa improvvisamente e inspiegabilmente (assumendo un valore intorno ai 130 download). Ho pensato a problemi con le virgolette, a problemi di conversione tra stringhe e numeri, ma non ci capisco niente. Sto impazzendo è dire poco... Fornisco i dati del caso e resto in attesa nel caso servisse altro. Grazie!
Questa è la query che crea la tabella, dalla quale potete vedere i campi: a) link_download è il testo del link usato nel tag <a>; b) filename_download è il nome del file completo (compresa l'estensione) che l'utente vuole scaricare; c) counter_download è il valore del contatore. In un primo momento quest'ultimo campo era di tipo INT(11) ma poi, presentatosi questo problema, l'ho cambiato in TEXT. Nonostante questo il problema persiste.
Codice: Seleziona tutto
$sql = "CREATE TABLE IF NOT EXISTS download (
id_download INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
link_download TEXT NOT NULL,
filename_download TEXT NOT NULL,
counter_download TEXT NOT NULL
)";
Codice: Seleziona tutto
<?php
@mysql_query("SET NAMES 'utf8';"); //imposta in utf-8 i dati del database una volta importati
$select = 'SELECT * FROM download ORDER BY id_download ASC';
$result = @mysql_query($select);
if (!$result) {
exit('<p>Errore durante la selezione dei dati!<br />' . 'Error: ' . mysql_error() . '</p>');
}
if (@mysql_num_rows($result) > 0) {
while ($row = @mysql_fetch_array($result)) {
$id = trim($row['id_download']);
$link = trim($row['link_download']);
$filename = trim($row['filename_download']);
$counter = trim($row['counter_download']);
$ext = substr ($filename, -4);
if ($ext == ".pdf") { $format = "PDF"; }
if ($ext == "epub") { $format = "ePub"; }
if ($ext == "mobi") { $format = "Mobi"; }
echo "<p>$link - <a href='downloading.php?id=$id&filename=$filename&counter=$counter' target='_blank'>Download $format</a> ($counter)</p>";
}
}
?>
Codice: Seleziona tutto
<?php
@mysql_query("SET NAMES 'utf8';"); //imposta in utf-8 i dati del database una volta importati
$id_download = $_GET['id'];
$filename_download = $_GET['filename'];
$counter_download = $_GET['counter'] + 1;
$path = "download/files/" . $filename_download;
// Query di aggiornamento.
$sql = "UPDATE download SET
counter_download = '$counter_download'
WHERE id_download = '$id_download'";
// Controllo errori.
if (@mysql_query($sql)) { echo ""; } else { exit(); }
$select = 'SELECT filename_download, counter_download FROM download';
$result = @mysql_query($select);
if (!$result) {
exit('<p>Errore durante la selezione dei dati!<br />' . 'Error: ' . mysql_error() . '</p>');
}
$fp = fopen("download/files/counter_log.txt", "a-");
$date = date('d M Y, H:i:s', time());
if (@mysql_num_rows($result) > 0) {
while ($row = @mysql_fetch_array($result)) {
$filename = trim($row['filename_download']);
$counter = trim($row['counter_download']);
$text = "Data e Ora: $date - File: $filename - Contatore: $counter\r\n";
fwrite($fp, $text);
}
}
fwrite($fp, "------------------------------------\r\n");
fclose($fp);
header("Location: $path");
?>