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