Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Come non conteggiare una visita quando si esegue un download di un file da una pagina con un contavisite?

    Quando clicco sul pulsante "Visualizza file" incremento la visita, cosa che non vorrei che accadesse. Vorrei che il numero dentro il file, ovvero quello stampato sulla pagina per mezzo della variabile $VisiteNonUniche, si incrementasse solo quando si accede direttamente alla pagina o tutt'al più quando l'utente esegue un reflesh della pagina stessa e non anche quando ci si ritorna cliccando sul pulsante "indietro" del browser. Se imposto un header che esegue il download del file il problema non svaniche.
    Codice PHP:
    <?php
    class Problema {
        public function 
    Leggi($file) {
            if (
    file_exists $file )) {
                
    header 'Content-Description: File Transfer' );
                
    header 'Content-Type: text/plain; charset=UTF-8' );
                
    header "Expires: on, 01 Jan 1970 00:00:00 GMT" );
                
    header "Last-Modified: " gmdate "D, d M Y H:i:s" ) . " GMT" );
                
    header "Cache-Control: no-store, no-cache, must-revalidate" );
                
    header "Cache-Control: post-check=0, pre-check=0"false );
                
    header "Pragma: no-cache" );
                
    header 'Content-Length: ' filesize $file ) );
                
    readfile $file );
                exit ();
            }
        }
        public function 
    Download($file) {
            
    $this->Leggi $file );
        }
        public function 
    PreparaDownload() {
            
    $variabilePOST "x";
            if (isset ( 
    $_POST [$variabilePOST] )) {
                
    $file "file.txt";
                
    $this->Download $file );
            }
        }
        public function 
    VisiteNonUniche() {
            
    $file "file.txt";
            
    $v 1;
            if (
    file_exists $file )) {
                
    $v file_get_contents $file ) + 1;
            }
            
    file_put_contents $file$vLOCK_EX );
            return 
    $v;
        }
    }
    $Prova = new Problema ();
    $VisiteNonUniche $Prova->VisiteNonUniche ();
    $Prova->PreparaDownload ();
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Problema</title>
    </head>
    <body>
        <p>Visite: <?php print_r($VisiteNonUniche)?></p>
        <form action="" method="post">
            <input type="submit" value="Visualizza file" name="x">
        </form>
    </body>
    </html>
    Grazie
    Più pratica in futuro...

  2. #2
    quando invii il form, la pagina si ricarica.
    quindi ti incrementa anche la variabile.

    potresti fare un controllo del tipo:
    INCREMENTA LA VARIBILE SE $_POST è VUOTO

    così quando la pagina si aggiorna per l'invio del form, trova $_POST non vuoto e non viene aggiornata la variabile.

  3. #3
    perfetto! bravissimo! il codice ora è perfetto!



    siete i numeri 1!!!

    Più pratica in futuro...

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Vedi che se fai una domanda specifica la gente ti risponde?

  5. #5
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Vedi che se fai una domanda specifica la gente ti risponde?
    ok, mi rimangio tutto chiedo scusa per aver dubitato

    ti rifaccio un'altra domanda sempre su questo quesito ma se non si può fare non importa lo script va benissimo così:

    è possibile non aggiornare la visita quando l'utente fa un semplice reflesh del browser?
    Più pratica in futuro...

  6. #6
    si è possibile.
    io ho usato le sessioni.
    una cosa di questo genere.

    quando entra nella pagina controlli che una variabile di sessione non sia settata.
    se non lo è, aggiorni il contatore e setti la variabile.
    così al refresh la variabile risulta settata e il contatore non viene toccato.
    devi però ricordarti di fare l'unset quando vai in un'altra pagina.
    sennò ti porti a presso la variabile anche nelle altre pagine.

  7. #7
    Non funziona!
    Somma sempre 1 sia quando apro il file, sia quando faccio un refresh:
    Codice PHP:
    <?php
    class Problema {
        public function 
    Init() {
            
    session_start ();
            
    $_SESSION ['contavisite'] = 'ok';
        }
        public function 
    Leggi($file) {
            if (
    file_exists $file )) {
                
    header 'Content-Description: File Transfer' );
                
    header 'Content-Type: text/plain; charset=UTF-8' );
                
    header "Expires: on, 01 Jan 1970 00:00:00 GMT" );
                
    header "Last-Modified: " gmdate "D, d M Y H:i:s" ) . " GMT" );
                
    header "Cache-Control: no-store, no-cache, must-revalidate" );
                
    header "Cache-Control: post-check=0, pre-check=0"false );
                
    header "Pragma: no-cache" );
                
    header 'Content-Length: ' filesize $file ) );
                
    readfile $file );
                exit ();
            }
        }
        public function 
    Download($file) {
            
    $this->Leggi $file );
        }
        public function 
    PreparaDownload() {
            
    $variabilePOST "x";
            if (isset ( 
    $_POST [$variabilePOST] )) {
                
    $file "file.txt";
                
    $this->Download $file );
            }
        }
        public function 
    VisiteNonUniche() {
            
    $file "file.txt";
            
    $v 1;
            if (
    file_exists $file )) {
                if (! isset ( 
    $_SESSION ['contavisite'] )) {
                    
    $this->Init ();
                    if (isset ( 
    $_POST ['x'] )) {
                        
    $v file_get_contents $file );
                    } else {
                        
                        
    $v file_get_contents $file ) + 1;
                        
                    }
                }
            }
            
    file_put_contents $file$vLOCK_EX );
            return 
    $v;
        }
    }
    $Prova = new Problema ();
    $VisiteNonUniche $Prova->VisiteNonUniche ();
    $Prova->PreparaDownload ();
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Problema</title>
    </head>
    <body>
        <p>Visite: <?php print_r($VisiteNonUniche)?></p>
        <form action="" method="post">
            <input type="submit" value="Visualizza file" name="x">
        </form>
    </body>
    </html>
    Più pratica in futuro...

  8. #8
    session_start() deve stare sopra a tutto.
    non penso vada bene dentro alla classe.

    inoltre, controlla se effettivamente viene settata la variabile di sessione.

  9. #9
    Quote Originariamente inviata da fermat Visualizza il messaggio
    session_start() deve stare sopra a tutto.
    non penso vada bene dentro alla classe.

    inoltre, controlla se effettivamente viene settata la variabile di sessione.
    cavolo, bravissimo è proprio questo il motivo! che strano però...
    Ultima modifica di giannino1995; 02-07-2015 a 18:15
    Più pratica in futuro...

  10. #10
    Quote Originariamente inviata da fermat Visualizza il messaggio
    devi però ricordarti di fare l'unset quando vai in un'altra pagina
    come scrivo questo? ovvero come si traduce in php il session_destroy() al cambio pagina?
    Più pratica in futuro...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.