Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Contatore visite php+mysql impazzito

    Ciao a tutti,
    ho necessità di creare un semplice contatore che all'aprirsi di una pagina incrementi il suo valore nel database.
    Ho creato questa funzione:

    Codice PHP:
    function playCount($id$cat) {
            
    $sql "SELECT ContatorePartite FROM games WHERE id=$id AND Categoria='$cat'";
            
    $res mysql_query($sql)
                or 
    $this->Error("query non valida: $sql");    
            
    $res mysql_fetch_array($res);
            
    $res $res["0"];
            
    $res++;
            
            
            
    $sql2 "UPDATE games SET ContatorePartite = $res WHERE id=$id AND Categoria='$cat'";
            
            
    mysql_query($sql2)
                or 
    $this->Error("query non valida: $sql2");
        } 
    In pratica fa una select del numero di visite attuali, prende il valore, ci somma 1 e poi fa l'update del nuovo valore.

    Ho tra l'altro scoperto che mi sono un po' complicato la vita, scoprendo che potevo semplicemente fare così (credo):

    Codice PHP:
    function playCount($id$cat) {
            
    $res mysql_query("UPDATE games SET ContatoreVisite = ContatoreVisite+ 1 WHERE id=$id AND Categoria='$cat'");

    La funzione viene poi chiamata semplicemente all'interno della pagina.

    Il problema è che sembra che la query venga richiamata all'infinito, facendo incrementare il campo nel Db all'infinito senza che la pagina venga ricaricata!
    La chiamata alla funzione non è ovviamente in nessun ciclo che potrebbe causarne la ripetizione, ed ho anche provato a metterla direttamente nel codice della pagina.

    Grazie in anticipo!
    Prenditi una pausa con i giochi free! sono gratuiti, divertenti e tutti online!

  2. #2
    sicuramente basta il solo update. Poi non si puo' dire altro in merito alla ripetizione perche' e' una cosa coerente con lo script che la utilizza (e che non conosciamo)

    ma sicuramente poco coerente e' quanto hai messo qui:

    Codice PHP:
            $res mysql_query($sql
                or 
    $this->Error("query non valida: $sql");     
            
    $res mysql_fetch_array($res); 
            
    $res $res["0"]; 
            
    $res++; 
    sto porello di $res canta, suona e balla.... non ti pare?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Son d'accordo con te sul fatto del codice inutile scritto all'inizio, ma non mi capacito del continuo aumento del contatore senza che la pagina sia ricaricata.
    E la funzione è semplicemente richiamata in una pagina...
    Prenditi una pausa con i giochi free! sono gratuiti, divertenti e tutti online!

  4. #4
    mmm non è che viene richiamato tramite include o tramite qualche altra cosa che richiama questa parte?
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    allora:
    - la funzione è dentro una classe dentro ad un file php
    - la pagina con l'html include il file sopra descritto, e richiama la funzione

    comunque ho provato anche a sbattere la chiamata alla query dentro la pagina con l'html e non cambia nulla...
    Prenditi una pausa con i giochi free! sono gratuiti, divertenti e tutti online!

  6. #6
    indubbiamente il problema succede perché quella parte di codice viene ripetutamente chiamata

    prova a metterci un debug_print_backtrace() subito dopo l'apertura della funzione cosi da vedere lo stack delle chiamate
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.