phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

il campo text del db si decrementa inspiegabilmente

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
Rispondi
Albe72
Utente
Utente
Messaggi: 2
Iscritto il: 16/11/2014, 19:35
Sesso: Maschio

il campo text del db si decrementa inspiegabilmente

Messaggio da Albe72 » 16/11/2014, 20:18

Salve, sono un nuovo iscritto e ringrazio anticipatamente dell'aiuto. Il problema che ho è il seguente.
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
         )";
Questo è il codice del file download.php che contiene la query di SELECT e che passa le variabili al file downloading.php con metodo GET. Forse dovrei usare un altro metodo ma non sono molto ferrato in questo...

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>";
  }
 }
?>      
Questo è il codice del file downloading.php contenente la query di UPDATE. In seguito al verificarsi del problema ho pensato di creare una specie di file di log per salvare i valori assunti dai tre contatori ad ogni download, così da ripristinare in un secondo momento i valori corretti via phpMyAdmin.

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");
?>

Avatar utente
Barrnet
Leader Moderatori
Leader Moderatori
Messaggi: 3124
Iscritto il: 04/07/2010, 23:31
Sesso: Maschio
Versione: 3.0.10
Server: UNIX/Linux
PHP: 5.3.10
Database: MySQL 5.1.61-community-log
Contatta:

Re: il campo text del db si decrementa inspiegabilmente

Messaggio da Barrnet » 16/11/2014, 22:16

Prima di tutto... perché usi un campo STRING per salvare dei numeri?
Inoltre con il tuo codice posso inviarti una qualunque cifra e stabilirti il nuovo numero di download. se aggiungo all'url "&counter=199" il tuo conteggio dei download andrà a 200, se al posto di un numero metto una stringa il tuo conteggio dei download sarà "stringa1".

Albe72
Utente
Utente
Messaggi: 2
Iscritto il: 16/11/2014, 19:35
Sesso: Maschio

Re: il campo text del db si decrementa inspiegabilmente

Messaggio da Albe72 » 17/11/2014, 22:32

Grazie della tua risposta, Barnet.

Come dicevo nel primo post, all'inizio il campo era un INT(11). Presentatosi il problema ho provato a cambiarlo in TEXT ma non è servito a niente. Da questa cosa ho capito che il problema non era il tipo di dati del campo.

Grazie della tua preziosa osservazione. Ritieni quindi che il valore del mio campo sia cambiato perché un utente ha volontariamente modificato la query string nell'URL? O potrebbe esservi anche un'altra causa?

P.S.: Ho già detto che forse non dovrei usare un get method ma non ho ben idea di come fare. Suggerimenti?

Avatar utente
Barrnet
Leader Moderatori
Leader Moderatori
Messaggi: 3124
Iscritto il: 04/07/2010, 23:31
Sesso: Maschio
Versione: 3.0.10
Server: UNIX/Linux
PHP: 5.3.10
Database: MySQL 5.1.61-community-log
Contatta:

Re: il campo text del db si decrementa inspiegabilmente

Messaggio da Barrnet » 18/11/2014, 0:02

Lanciare una query per incrementarlo, tutto qui.

Avatar utente
Anto
Utente
Utente
Messaggi: 1106
Iscritto il: 04/02/2013, 21:53
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
Contatta:

Re: il campo text del db si decrementa inspiegabilmente

Messaggio da Anto » 18/11/2014, 1:03

Ciao,
devi usare il metodo POST.

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 27 ospiti