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

    [PHP-MYSQL] Contatore visite con database mysql

    Buongiorno a tutti, ho iniziato da poco a studiare PHP, e per fare un po' di pratica ho provato a scrivere un contatore di visite che mantenga aggiornato un database delle visite dei giorni passati. Ovviamente non funziona, altrimenti non sarei qui. Il problema credo che sia alla riga 16, quando elaboro i risultati della query mysql. Vi posto il codice, sperando che qualcuno possa darmi una mano.
    Codice PHP:
    <?php
        
    include("php/config.inc.php");
        
    //include("php/format.inc.php");
        //connessione al database
        
    $db mysql_connect($db_host$db_user$db_password);
        if (
    $db == false)
            die (
    "Errore nella connessione. Verificare i parametri nel file config.inc.php");
        
    mysql_select_db($db_name$db)
            or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

        
    //controllo stato visite    
        
    $today date("Ymd");
        
    //echo $today;
        
    $query "SELECT visits from counter where day='$today'";
        
    $results mysql_query($query) or die(mysql_error()."
    ottenendo le visite odierne"
    );
        
    $visits_till_now mysql_fetch_array($resultsMYSQL_ASSOC);
        if (
    is_numeric($visits_till_now)){
            
    //echo $visits_till_now;
        
    }
        else {
            
    $visits_till_now 0;
            
    //echo "Speriamo che sia semplicemente la prima visita, visits_till_now: ".$visits_till_now;
        
    }

        
    //controllo del cookie
        
    if (isset($_COOKIE['lastvisit']) && $_COOKIE['lastvisit'] == $today){
              
    //mi pare che non debba fare niente
            
    }

        else { 
    //e' questo il caso del primo accesso dopo almeno sei ore
            
    setcookie("lastvisit","$today"time()+60*60*6);
            
    $visits_till_now +=1;
            
    $query "insert into counter (day, visits) values (\"$today\", \"$visits_till_now\") on duplicate key update visits=\"$visits_till_now\");";
            
    mysql_query($query) or die(mysql_error());
            echo 
    "
    ho appena pubblicato il cookie"
    ;
        }

        echo 
    "
    Il numero di visite di oggi FORSE e': "
    .$visits_till_now;
        

    ?>
    ~                                                                                                                                              
    ~                                                                                                                                              
    ~                                                                                                                                              
    ~

  2. #2
    mi correggo... sembra che sia la query di inserimento a non funzionare....

  3. #3
    Originariamente inviato da pinzo
    mi correggo... sembra che sia la query di inserimento a non funzionare....
    un primo errore e' qui:

    Codice PHP:
        $query "SELECT visits from counter where day='$today'";
        
    $results mysql_query($query) or die(mysql_error()."
    ottenendo le visite odierne"
    );  
        
    $visits_till_now mysql_fetch_array($resultsMYSQL_ASSOC);
        if (
    is_numeric($visits_till_now)){ 
    $visits_till_now e' un array e non una variabile. Questo e' un errore.

    Se dentro il campo hai un numero usare is_numeric() per vedere se hai effettivamente un numero funziona ma sarebbe piu' logico verificare che tu non riceva un FALSE da $result cosa che gia' fai con il DIE(). Quindi si presume che se la query e' valida, il campo visits e' numerico con default 0, dovrai ricevere sicuramente uno 0 oppure il valore corrente.

    Se hai un solo record per giorno dovresti verificare se il record del giorno gia' esiste. Se non esiste lo crei con INSERT e mettendo il contatore a 1. Poi incrementi successivamente il contatore con un update nelle altre visite.

    quindi velocemente con simil codice parlato:

    codice:
    select count(*) as tot from counter where day = CURDATE();
    mysql_query.....
    $tot_record = mysql_fetch_assoc($result)
    
    if($tot record['tot'] == 0 ) { 
    
    insert into tabella (data, visits) value (curdate(), 1);
    
    } else { update tabella set visits = visits + 1 where data = curdate()  }
    e poi ti fai il giro buffo dei cookie.

    In pratica devi essere diretto col codice. Non cercare cose che ti lasciano presumere che ce ne siano altre. I bug nascono anche in questo modo. Le cose o ci sono oppure no. Questo per dirti che cercare un numero per capire se esiste una data puo' anche funzionare ma e' poco razionale.

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

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.