Visualizzazione risultati 1 fino 6 di 6

Discussione: [PHP]Richiesta script punti per un tot di tempo

  1. #1
    Guest

    Predefinito [PHP]Richiesta script punti per un tot di tempo

    Ciaoooo !!

    Mi servirebbe uno script che aggiunga dei punti ad un utente del mio sito ogni tot minuti , poi un link per passare da un livello ad un altro .

    Esempio :

    Mi loggo al sito , ho 0 punti , dopo 5 minuti schiaccio su un pulsantino e mi si aggiorna il punteggio (ad esempio 1 ogni 5 minuti) ed ho un punto .
    Quando ho 5 punti , clikko su un link e mi fa diventare "Utente Medio" , poi ancora quando ho 50 punti e divento "Vice-Admin" .
    Capito ??

    Se qualcuno ha un po' di tempo e può farmelo poichè ci sto girando attorno da più di una settimana senza risultati ç____ç

    Graziue ancora a chi mi aiuti !!

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non ho ancora compreso l'utilità di questa funzione, ma eccoti qualche spunto per iniziare:

    - il pulsante che devi cliccare per aggiornare il punteggio:
    Codice HTML:
    <FORM ACTION="..." METHOD="post">
    <INPUT TYPE="submit" NAME="aggiorna" VALUE="Aggiorna punteggio">
    </FORM>
    - alcune righe di inizializzazione e aggiornamento del "rank":
    Codice PHP:
    <?php
    // nomi dei livelli da completare e disporre in ordine crescente...
    $theRanks = array ('Neofita', 'Giovane', 'Normale', 'Esperto', 'Admin', ...);
    // soglie alle quali si passa da un rank al successivo (deve avere un elemento in meno del precedente!)
    $theThresholds = array (30, 100, 250, 500, ...);
    if (!isset (
    $_POST['aggiorna']))
    {
    $_SESSION['rank'] = 0;
    $_SESSION['time'] = getdate ();
    }
    else
    {
    $now = getdate ();
    // calcola i minuti di differenza dall'inizio alla fine della navigazione
    $diff = $now['minutes'] - $_SESSION['time']['minutes'] + 60 * ($now['hours'] - $_SESSION['time']['hours']) + 60 * 24 * ($now['yday'] + $_SESSION['time']['yday']);
    // verifica e riassegna il rank in base a questo dato
    $r = $_SESSION['rank'];
    while (
    $diff >= $theThresholds[$r])
    $r++;
    $_SESSION['rank'] = $r;
    }
    ?>
    - infine la stampa del rank, un semplice echo:
    Codice PHP:
    <?php
    if (isset ($_SESSION['rank']))
    echo (
    $theRanks[$_SESSION['rank']]);
    else
    echo (
    $theRanks[0]);
    ?>
    Stammi bene...

    P.S. Ti annuncio già che questo script avrà qualche problema con i tuoi visitatori della notte di Capodanno... :-D
    Ultima modifica di dementialsite : 22-02-2006 alle ore 10.31.43
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    per il passaggio di anno perche' non fare

    $tempoTrascorso + time()-$timeStampPrecedente;

    ritrovandosi con $tempoTrascorso che contiene i secondi trascorsi dall'ultimo click?

    :)
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  4. #4
    Guest

    Predefinito

    Grazie infinite , sarà sicuramente di grande spunto ^.^
    Cmq , e se dovessi registrare e tener conto di tutto in una tabella utenti , cioè modificare la stringa "punti" in base al tempo in cui uno sta collegato Dopo aver fatto il login per poi fermare quando esegue il logout ?
    Dementialsite , tu saresti in grado di creare uno script (molto simile al primo, quasi uguale) ,ma usando una tabella utenti così :

    Codice:
    -- 
    -- Struttura della tabella `utenti`
    -- 
    
    CREATE TABLE `utenti` (
      `id` int(5) unsigned NOT NULL auto_increment,
      `utente` varchar(255) NOT NULL default '',
      `password` varchar(255) NOT NULL default '',
      `email` varchar(255) NOT NULL default '',
      `ip` varchar(255) NOT NULL default '',
      `ultimo_aggiornamento_livello` varchar(255) NOT NULL default '',
      `primo_aggiornamento_livello` varchar(255) NOT NULL default '',
      `punti_livello` varchar(255) NOT NULL default '',
      `livello` varchar(255) NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    E con una tabella in cui sono inseriti i livelli a tempo :

    Codice:
    -- 
    -- Struttura della tabella `livello`
    -- 
    
    CREATE TABLE `livello` (
      `punti` varchar(255) NOT NULL default '',
      `livello` varchar(255) NOT NULL default '',
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    (se riesci a farlo mi faresti un favore eeeeeeeeeeeeeenormissimo ^.^ , comunque rimani sempre un grande !)
    Grazie anche a Evcz =)
    Ultima modifica di comunitavirtuali : 23-02-2006 alle ore 14.02.56 Motivo: errore battitura =)

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Dato il PM di "sollecito", per stavolta ti do qualche dritta perché non è che abbia molto tempo per sfornare script ai primi che arrivano...

    - il login imposterà tre variabili di sessione: "rank" e "score", rispettivamente rank e tempo totale di connessione (approssimato per difetto al minuto, se no pretendi davvero troppo!) rilevati dal database (naturalmente farai registrare i nuovi utenti con questi valori pari a 0, salvo sprazzi di generosità...) e "time" che contiene il tempo di inizio per l'accesso
    - il logout farà le operazioni opposte, cioè calcolerà per l'ultima volta i valori delle variabili di sessione "rank" e "score" e poi li scriverà sul database
    - per l'aggiornamento del "rank", se mantieni nella tabella "livello" del DB i dati su punteggi necessari per l'avanzamento e le descrizioni dei rank, non hai più bisogno degli array $theRanks e $theThresholds.
    - per l'aggiornamento effettivo, poi, ti basta conservare soltanto il secondo blocco dell'if/else (l'else diventerà un if con la condizione ovviamente negata), inoltre RICORDATI quando calcoli il minutaggio di AGGIUNGERE anche il punteggio precedente (lo trovi nella sessione "score"), altrimenti farai comunque ripartire da capo il conteggio.
    - non avendo più a disposizione gli array che ti dicevo, per sapere qual'è il rank dei tuoi visitatori sarai costretto ad eseguire una query sul database. Ti può essere utile questa: "SELECT * FROM livello WHERE punti <= " . $_SESSION["score"] . " ORDER BY punti DESC", che puoi usare sia per stabilire in che rank si trova il tuo visitatore (contando il numero di righe restituite dalla query e togliendo 1), sia per stampare la descrizione del rank quando richiesta (stampando la prima riga dei risultati della query)

    Il tutto però per funzionare ha bisogno di qualche modifica tecnica al database:
    - i valori numerici, come punti_livello e livello della tabella utenti e punti della tabella livello, siano memorizzati come numeri e non come stringhe (questo l'hai fatto tu...)
    - alcuni campi "inutili": livello nella tabella utenti (lo puoi determinare dal punteggio), ip (visto che cambia ad ogni connessione, sempre che tu non voglia salvare quello dell'ultimo accesso), ultimo_aggiornamento_livello e primo_aggiornamento_livello (non ho capito a che servono...)
    - ah, un'altra cosa: ti sconsiglio fortemente di dare ai campi nomi uguali a quelli delle tabelle, altrimenti succedono casini (lo hai fatto nella tabella livello)...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    Guest

    Predefinito

    adesso non ho molto tempo: ma + o - è così:

    <?php
    // pagina.php

    echo "<form action='pagina2.php' method=post>";
    echo "<input type=hidden name=tempo value=".time("H,i").">"; // quando si carica la pagina registra l'ora in un campo
    echo "<input type=hidden name=vecchi_pt value=".$punti.">"; // la variabile $punti contiene i punti che ha l'utente
    echo "<input type=submit value=aggiorna i punti>";
    echo "</form>";
    ?>

    <?php
    // pagina2.php
    $time = time(H,i);
    $tempo_passato = $time-$_POST[tempo];
    if ($tempo_passato >= "0,05"):
    $new_pt = $_POST[vecchi_pt]+1; // se sono passati 5 minuti o meno aggiunge 1 punto
    endif;
    else if ($tempo_passato >= "0,10"):
    $new_pt = $_POST[vecchi_pt]+2;
    endif;

    // e così via con gli if...

    if ($new_pt > 5) $new_grado = "utente medio";

    // e così via con gli if per impostare i gradi..

    /*
    dopo questo. inserire il codice per aggiornare i punti e gradi tenendo conto che:
    $new_grado contiene il nuovo grado dell'user
    $new_pt contiene i nuovi punti
    */

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •