Contatore Top Forum

  • Creatore Discussione Creatore Discussione max_400
  • Data di inizio Data di inizio

max_400

Utente Attivo
23 Gen 2009
770
0
16
caltanissetta
max400.forumfree.it
Ciao a tutti.
Mi piacerebbe creare una specie di contatore visite però al contrario
cioè il numero aumenta in mancaza di visite, si può fare in php?

L'esempio è nel mio forum
http://max400.forumfree.it/

in basso su statistiche vedrete un numero tipo 457° top forum
questo numero rappresenta la media delle visite degli utenti in base
a tutti i forum del circuito forumfree.

Ogni visita vale 2°....in mancanza di visite...se nessuno visita il forum
questo numero sprofonda quindi ogni mezzora avremo 459° poi 461° poi 463°

Qualkuno di voi è capace di realizzarlo?
Grazie.

Ps adesso il numero è sceso a 378°...i primi giorni di ogni mese le posizioni cambiano moltissimo poi si stabilizzano.
Quando si arriva sotto ai 200 si ha la possibilita di inserire un pulsante per essere votati in topo forum
quando un utente clicca sul pulsante regala all'amministratore la bellezza di 50 punti
 
Ultima modifica:
Bene bene bene

potrebbe proprio essere quello giusto...
però se ci fosse qualkoda di "artigianale"
fatto con le proprie zampette...
per poterci capire qualkosa.
Per uno ignorante come me...
in genere bisognerebbe creare dei semplici contatori
dove quello maggiore con più visite assume il primo posto,
e di conseguenze gli altri scendono.
 
Ciao,
provo a spararne una, molto molto artigianale ......

nella pagina degli accessi :

PHP:
<?php

//connessione a mysql
$conn = mysql_connect("localhost", "root", "", "database");
$db = mysql_select_db("database");
// ad ogni nuovo accesso potremmo aggiornare il contatore
// Calcolando che la query per l'inserimento degli accessi sia piu o meno cosi
$query = "INSERT INTO accessi SET idUtente = " . $_SESSION['idUtente'] . ",
                                  dataAccesso = NOW()";

// impostiamo il tempo 
$minuti = 30;
// recuperiamo il valore del contatore in questo caso da un file di testo
$file = "contatore.txt";
$fr = fopen($file, 'r') or die("Impossibile aprire il file in lettura!");
$contatore = fgets($fr);
fclose($fr);

// calcoliamo quanto tempo è passato dall'ultimo accesso
$query = "SELECT TIMESTAMPDIFF(MINUTE , dataAccesso, NOW()) AS tempo
                 FROM accessi
                 ORDER BY dataAccesso DESC
                 LIMIT 1";
$tempo = mysql_fetch_row(mysql_query($query));

// lo dividiamo per i minuti prefissati arrotondando all'eccesso
$incremento = ceil($tempo[0] / $minuti);


// se maggiore di uno dobbiamo aumentare il contatore
if ($incremento > 1) {
    // in pratica il numero dell mezze ore per i 2 punti     
    $contatore+= $incremento * 2;    
} else {
    // altrimenti decrementiamo di 2
    $contatore-=2;
}
// aggiorniamo il contatore
$fr = fopen($file, 'w') or die("Impossibile aprire il file in scrittura!");
fwrite($fr, $contatore);
fclose($fr);
?>

Per visualizzare il contatore :

PHP:
<?php
// nella pagina si visualizza
$file = "contatore.txt";
$fr = fopen($file, 'r') or die("Impossibile aprire il file in lettura!");
$contatore = fgets($fr);
fclose($fr);
echo $contatore;
?>
 
l'idea mi sembra giusta

mi sembra ok c'è una parte che non capisco bene...

PHP:
$query = "SELECT TIMESTAMPDIFF(MINUTE , dataAccesso, NOW()) AS tempo
                 FROM accessi
                 ORDER BY dataAccesso DESC
                 LIMIT 1";
$tempo = mysql_fetch_row(mysql_query($query));


TIMESTAMPDIFF.....?
la tabella è accessi
i campi MINUTE, dataAccesso,NOW()...

Questa parte me la puoi spiegare un po meglio?
altra domanda: senza database si può fare? solo con txt e timestamp()?

Grazie!
 
La tabella è accessi

i campi sono idUtente e dataAccesso

TIMESTAMPDIFF è una funzione di mysql che ti restituisce la differenza tra due date

con MINUTE gli indichi come ti deve restituire la differenza quindi in minuti

NOW è la data corrente

In pratica ti restituisce la differenza in minuti tra la data registrata e quella corrente

Per la funzione TIMESTAMPDIFF è necessario il database ma la differenza tra due date si puo calcolare anche in php

Senza database intendi anche per gli accessi?

penso di si, al momento non mi viene in mente niente di intelligente pero se vuoi evitare il database ci possiamo provaree
 
Potrebbe funzionare cosi senza data base

Nella pagina degli accessi :

PHP:
<?php

// impostiamo i nomi dei file dovranno esistere entrambi
$file_data = "ultimoaccesso.txt";
$file = "contatore.txt";
// impostiamo il tempo 
$secondi = 1800; // 30 minuti

/* * ********** Recuperiamo ed aggiorniamo la data dell'ultimo accesso **************** */
// apriamo il file in lettura
$fr_data = fopen($file_data, 'r') or die("Impossibile aprire il file in lettura!");
// memorizziamo la data
$ultimoaccesso = fgets($fr_data);
// chiudiamo il file
fclose($fr_data);
//recuperiamo la data attuale in secondi
$adesso = time();
// riapriamo il file in scrittura
$fr_data = fopen($file_data, 'w') or die("Impossibile aprire il file in scrittura!");
// lo aggiorniamo
fwrite($fr_data, $adesso);
// lo chiudiamo
fclose($fr_data);

/* * ********** Recuperiamo il valore del contatore **************** */

$fr = fopen($file, 'r') or die("Impossibile aprire il file in lettura!");
$contatore = fgets($fr);
fclose($fr);

// calcoliamo quanto tempo è passato dall'ultimo accesso
$tempo_trascorso = time() - $ultimoaccesso;

// se maggiore del tempo impostato dobbiamo aumentare il contatore
if ($tempo_trascorso > $secondi) {
    // dividiamo i secondi per 60 e poi per 30 per recuperare quante mezz'ore sono passate 
    // arrotondiamo per difetto prima lo avevo fatto per eccesso
    $incremento = floor(($tempo_trascorso / 60) / 30);
    // incrementiamo di 2 ogni mezz'ora passata
    $contatore+= $incremento * 2;
} else {
    // altrimenti decrementiamo di 2
    $contatore-=2;
}
// aggiorniamo il contatore
$fr = fopen($file, 'w') or die("Impossibile aprire il file in scrittura!");
fwrite($fr, $contatore);
fclose($fr);
?>

per visualizzarlo

PHP:
<?php

$file = "contatore.txt";
$fr = fopen($file, 'r') or die("Impossibile aprire il file in lettura!");
$contatore = fgets($fr);
fclose($fr);

echo $contatore;
?>

ovviamente da testare
 
diminuisce ma non aumenta

ho impostato 10 secondi anzi 1800 per sbrigarmi prima
forse qualkosa che non va nell'incremento?

http://max400scuola.altervista.org/aaa/a-php/pagina_esempio.php
http://max400scuola.altervista.org/aaa/a-php/contatore.txt
http://max400scuola.altervista.org/aaa/a-php/ultimoaccesso.txt

ho inviato tutti e 3 file
lo script per visualizzare il contatore l'ho messo dentro il file pagina_esempio.php

in caso mi prepari un file allegato metti tutto in una cartella in .rar
che forse è meglio. :book:

Grazie ciao!
by Max
 
forse qualkosa che non va nell'incremento?

Mi sembra a posto ....

se riduci il tempo a 10 secondi

poi non puoi dividere in questo modo:

PHP:
// dividiamo i secondi per 60 e poi per 30 per recuperare quante mezz'ore sono passate 
    $incremento = floor(($tempo_trascorso / 60) / 30);

al massimo per verdere se aumenta prova direttamente con i secondi
PHP:
// dividiamo i secondi per 60 e poi per 30 per recuperare quante mezz'ore sono passate 
// $incremento = floor(($tempo_trascorso / 60) / 30);
$incremento = $tempo_trascorso;
 
Perfetto!

Adesso funziona!

http://max400scuola.altervista.org/aaa/a-php/pagina_esempio2.php

http://max400scuola.altervista.org/aaa/a-php/ultimoaccesso2.txt
http://max400scuola.altervista.org/aaa/a-php/contatore2.txt

ma ci sarebbe un modo per avere un numero più piccolo anzicchè cosi grande?
tipo dal 1° (il momento della creazione) a in poi?


Un bel contatore al rovescio, che nasce nella prima posizione 1° e poi se si trascura la pagina
esso aumenta sempre di più fino a sprofondare a numeri grossi?

A differenza di un normale contatore che richiede la visita per aumentare
questo invece aumenta in automatico senza aprire a pagina.

Grazie!
 
Forse non ho capito,
ma se nel file contatore.txt all'inizio scrivi 1 il contatore dovrebbe partire da 1 e incrementarsi di due o un suo multiplo
o decrementarsi sempre di due,
avrai sempre comunque sempre un numero dispari

per non andare sotto l'1 :

PHP:
} else {
    // altrimenti decrementiamo di 2 se non è 1
    if($contatore != 1) {
          $contatore-=2;
     }
}
 
No, se metto 1 trovo sempre quel numro grande

Forse non ho capito,
ma se nel file contatore.txt all'inizio scrivi 1 il contatore dovrebbe partire da 1 e incrementarsi di due o un suo multiplo
o decrementarsi sempre di due,
avrai sempre comunque sempre un numero dispari

per non andare sotto l'1 :

PHP:
} else {
    // altrimenti decrementiamo di 2 se non è 1
    if($contatore != 1) {
          $contatore-=2;
     }
}

Ho provato ma vedo sempre quel numero grande
o provato diversi modi, me ne sono sicurato guardando il contatore
che inizialmente è 1 ma non và
 
Ciao,
a me resta basso il numero


non so come fare per allegarti i miei file :confused:
 
Me li mandi per email

Alla vecchia posta di tiscali.
(ma come mai qui non li puoi mettere?)

Poi in seguito preparerò una pagina con un bel video per inaugurare il contatore a tempo.

Quindi saranno necessari 2 esempi
il primo quello di prova a cui siamo lavorando adesso 10 secondi
il secondo quello definitivo 30 minuti da pubblicare in questa pagina di prova
ci sarà un video da you tube che ho già pubblicato nel mio forum
dal titolo "sabrina boys".

Ultima cosa, a lavoro ultimato metterò gli script nel mio forum
(una specie di libretto d'appunti), posso mettere il tuo nome e
quello di web designer? (è già messo) come titolari dello script?

Per oggi non mi posso più collegare
a stasera sul tardi!

ciao e grazie!
by max
 

Discussioni simili