Pagina 1 di 12 1 2 3 11 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 115
  1. #1

    login + traccia utente online

    Ciao a tutti
    posto qui come fare un login di un utente e che poi continua a vedere se esso è presente sul sito
    spero vi sia utile...

    cominciamo descrivendo le tabelle che mi servono: 2
    1° tabella utenti
    questa tabella tiene tutti gli utenti che si sono registrati

    id_utente | nick | pass | email

    ecco il comando SQL per creare la tabella

    codice:
    CREATE TABLE utenti (
      id_utente int(11) NOT NULL auto_increment,
      nick varchar(20) NOT NULL default '',
      pass varchar(20) NOT NULL default '',
      email varchar(50) NOT NULL default '',
      UNIQUE KEY id (id_utente)
    ) TYPE=MyISAM;
    la 2° tabella è utenti_online
    questa contiene le info sugli utenti che sono loggati nel sito (che sono online!!)

    id | id_utente | ip | tempo

    a voi il comando SQL per creare la tabella

    codice:
    CREATE TABLE utenti_online (
      id int(4) NOT NULL default '0',
      id_utente varchar(4) NOT NULL default '',
      ip varchar(11) NOT NULL default '',
      tempo int(11) NOT NULL default '0',
      UNIQUE KEY id (id),
      UNIQUE KEY id_utente (id_utente)
    ) TYPE=MyISAM;
    ok, viste le tabelle passiamo allo script vero è proprio

    prima di cominciare premetto che ho creato una pagina che contiene le funzioni che mi servono, tra le altre, a controllare la presenza online degli utenti

    la pagina è funzioni.inc.php che deve essere inclusa in tutte le pagine del sito

    ecco le funzioni nella pagina funzioni.inc.php, le spiegerò mano a mano che le userò più avanti

    Codice PHP:
    <?
    function connetti() {
        include 
    'config.inc.php';
        
    $connessione mysql_connect($dbhost,$dbuser,$dbpass) or die("Impossibile collegarsi al server MySQL.");
        
    mysql_select_db($dbname,$connessione) or die("Impossibile selezionare il database $dbname");
        return 
    $connessione;
    }

    function 
    disconnetti($connessione) {
        
    mysql_close($connessione);
    }

    function 
    intestazione() {
    ?>
    <html>
    <head>
    <title>Titolo del sito</title>
    </head>
    <body>
    <?
    }

    function 
    finepag() {
    ?>
    </body>
    </html>
    <?
    }

    function 
    controllo($user$passw) {
        
    $conn connetti();
        
    $query mysql_query("SELECT id_utente,pass FROM utenti WHERE nick='$user'",$conn) or die( "Errore ricerca pass: " mysql_error() );
        
    $info mysql_fetch_assoc($query);
        
    disconnetti($conn);
        if (
    $info['pass']==$passw) {
            return 
    $info[id_utente];
        } else {
            return 
    0;
        }
    }

    function 
    checkIP($ip) {
        
    $conn connetti();
        
    $query mysql_query("SELECT nick FROM utenti INNER JOIN utenti_online ON utenti.id_utente=utenti_online.id_utente WHERE ip='$ip'",$conn) or die( "Errore controllo ip: " mysql_error() );
        
    $info mysql_fetch_row($query);
        
    disconnetti($conn);
        return 
    $info[0];
    }

    function 
    check($ip) {
        
    $conn connetti();
        
    $ora = @time()+60*5;
        
    $query mysql_query("UPDATE utenti_online SET tempo='$ora' WHERE ip='$ip'",$conn) or die( "Errore allungamento tempo: " mysql_error() );
        
    $ora = @time();
        
    $query mysql_query("SELECT id FROM utenti_online WHERE tempo<'$ora'",$conn) or die( "Errore utenti fuoritempo: " mysql_error() );
        while (
    $info mysql_fetch_row($query)) {
            
    $elim mysql_query("DELETE FROM utenti_online WHERE id='$info[0]' LIMIT 1",$conn) or die( "Errore eliminazione utenti online: " mysql_error() );
        }
        
    disconnetti($conn);
    }
    ?>
    bene, ora possiamo cominciare

    effettuo il login da un form normale

    <FORM action="login.php" method="post">
    Nick:<INPUT type="text" name="user">

    Password:<INPUT type="password" name="passw">


    <INPUT type="submit" value="Entra...">
    </FORM>

    ecco postato il codice del file login.php

    Codice PHP:
    <?
    include 'funzioni.inc.php' ;
    check($REMOTE_ADDR);
    intestazione();
    ?>
    [b]Pagina di Log In[/b]

    <?
    $ris 
    checkIP($REMOTE_ADDR);
    if (
    $ris) {
        print 
    "Ciao $ris, eri già loggato. Vai alla home page.

    "
    ;
    } else {
        if (
    $id=controllo($_POST['user'],$_POST['passw'])) {
            
    $conn connetti();
            
    $dataEntr = @time()+60*10// 60 sec * 10 minuti
            
    $query mysql_query("INSERT INTO `utenti_online` (`id_utente`,`ip`,`tempo`) VALUES ('$id','$REMOTE_ADDR','$dataEntr')",$conn) or print mysql_error();
            
    disconnetti($conn);
            echo 
    "Utente connesso. Vai alla home page.

    "
    ;
            } else {
                print 
    "Attenzione il nick o la password inseriti non sono esatti!

    "
    ;
          }
    }

    finepagina();
    ?>
    la funzione check() esegue un aggiornamento della tabella utenti_online:
    - tenta di aumentare il tempo in cui l'utente può navigare nel sito da "loggato"
    - vede se qualche altro utente non è più online: controlla che il tempo che è stato memorizzato nella tabella sia superiore all'ora attuale. in questo caso elimina il record dell'utente

    la funzione intestazione() inserisce nel foglio l'intestazione della pagina. essa può essere modificata cambiando il corpo di tale funzione

    la funzione checkIP() controlla se l'utente che accede a quella pagina è già stato loggato o no, nel 1° caso restituisce il nick dell'utente altrimenti restisuisce 0

    la funzione controllo() va a vedere se l'user e la pass inseriti sono corretti: inquersto caso restituisce l' id_utente altrimenti restituisce 0, quindi FALSE

    le funzioni connetti() e disconnetti() non fanno altro che rispettivamente connettersi al db e disconnettersi da esso

    in questa pagina, solo se i dati (nick e password) sono esatti, viene inserito nella tabella un nuovo record con inserito id online, id_utente, ip dell'utente e il tempo
    PS: il tempo indica quanto tempo può trascorrere prima che l'utente venga considerato offline. questo dato viene modificato ogni volta che l'utente carica un'altra pagina (funzione check())

    ora l'utente viene considerato online e potrà accedere alle pagine che volete, facendo un controllo all'inizio delle pagine, sfuttando la funzione checkIP(): un semplice ciclo if

    es. x pagina riservata

    Codice PHP:
    if (checkIP($REMOTE_ADDR)=='admin') {
        
    // carica pagina
    } else {
        print 
    "non hai l'autorizzazione per accedere a questa pagina";

    è possibile anche gestire dei gruppi: cioè ogni gruppo (scegliete voi quanti) ha dei privilegi, che gestite voi. Per far questo basta inserire nella tabella utenti, un'altra colonna chiamata livelli (o privilegi) in cui inserite un numero: ad ogni numero corrisponde ad un gruppo. Più alto sarà questo numero, maggiori saranno le zone del sito che potranno visitare
    per sfuttare meglio questa opzione conviene costruire un'altra funzione, chiamatela per esempio livello(), che vi restituirà il livello dell'utente che stà entrando in una pagina: se il livello è abbastanza "alto",questo potrà entrare, altrimenti "a casa !!!! "

    ok, ora torniamo allo script originale

    l'utente ora è loggato e online
    ogni altra informazione è superflua
    un po' di fantasia e potrete utilizzare questo script meglio di come lo uso io

    unica cosa da fare (che vi consiglio!! ) è quella di creare funzioni per estarre le informazioni che volete sull'utente (mail, foto, sito personale....quello che volete !!!), basterà solamente allargare la tabella utenti ed inserire tutte le informazioni che volete

    mi stavo quasi dimenticando l'ultima parte, il logOUT

    ecco le ultime riche che vi serviranno

    Codice PHP:
    $conn connetti();
    $elim mysql_query("DELETE FROM utenti_online WHERE ip='".$REMOTE_ADDR."' LIMIT 1",$conn) or die( "Errore eliminazione utenti online: " mysql_error() );
    disconnetti($conn);
    intestazione();
    print 
    "logout eseguito";
    finepagina(); 
    potete creare una pagina tipo logout.php ed inserire queste righe così siete a posto
    basterà entrare in questa pagina perchè venga eseguito il logout

    credo così di aver detto tutto
    nel caso non sia riuscito a spiegare tutto quello che non si riesce a capire, postate pure

    ciao
    Alessandro, l'unico pinguino con le scarpe da ginnastica

    PhpItalia.net - il portale definitivo sul PHP

  2. #2
    Utente bannato
    Registrato dal
    Aug 2001
    Messaggi
    696
    Ho cambiato il titolo e l'ho inserita


    Sarà molto utile a molti hai toccato due argomenti molto discussi.

  3. #3
    Secondo me il logout non ha senso in questo script visto ke c'e' gia' la funzione check ke pensa ad eliminare i superflui , funzione che andrebbe inserita all' interno della funzione connetti() per risparmiare tempo e bytes.

    Cio' nonostante, bel lavoro
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    è una cosa in più che ho messo
    Alessandro, l'unico pinguino con le scarpe da ginnastica

    PhpItalia.net - il portale definitivo sul PHP

  5. #5
    Utente di HTML.it L'avatar di Doimo
    Registrato dal
    Mar 2002
    Messaggi
    25
    Bravo, bel lavoro!

  6. #6
    manca una cosa però...

    se nella tabella utenti vedo:

    CREATE TABLE utenti (
    id_utente int(11) NOT NULL auto_increment,
    nick varchar(20) NOT NULL default '',
    pass varchar(20) NOT NULL default '',
    email varchar(50) NOT NULL default '',
    UNIQUE KEY id (id_utente)
    ) TYPE=MyISAM;

    a ke serve?
    per rikiedere password smarrita?

    se si..
    manca il codice per rikiederla..


    comunque molto utile lo script... e scritto in modo chiaro.
    bella pillola.

    (lo so sono noioso e perfettino... al lavoro mi kiamano "maniaco"..

    ah mancherebbe anke la regostrazione utenti.. e gruppi utenti..
    già che c'eri... avresti comopletato alla grande sto script con una parte amministrazione :tongue:
    MCSA Certified - SysAdmin / Network Admin

    Valentino RossiVord Cienpion cc MOTOGP 2005 - SET VOLT VORD CIENPION!! - [/SIZE]

  7. #7
    ok, se insiti lo faccio

    Ciao
    Alessandro, l'unico pinguino con le scarpe da ginnastica

    PhpItalia.net - il portale definitivo sul PHP

  8. #8
    insisto.. :metallica

    (:tongue: son rompicojones lo so... ma mi piacciono le cose fatte per benino!! )

    complimenti comunque
    chiaro conciso sei stato.
    MCSA Certified - SysAdmin / Network Admin

    Valentino RossiVord Cienpion cc MOTOGP 2005 - SET VOLT VORD CIENPION!! - [/SIZE]

  9. #9
    non ho capito una cosa...io ho fatto tutte le tabelle e le pagine con il tuo stesso codice, quando entro nella pagina dove c'è il form per loggarsi, che nick e password bisogna mettere per provare lo script?
    Il mio sito: CIONCO.ALTERVISTA.ORG
    Lloyd Bank$
    I roll with the gangstas don't get fly with your mouth
    The wrong punchline'll have niggas inside of your house

  10. #10
    bisogna registrarsi, ma non ho creato tale pagina
    Alessandro, l'unico pinguino con le scarpe da ginnastica

    PhpItalia.net - il portale definitivo sul PHP

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.