- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
[Tutorial] Area privata
Ho scritto un piccolo tutorial, una basilare area privata, con ovviamente registrazione e login.
Manca la grafica visto che l'obiettivo era solo quello di dare le basi a chi si avvicina da poco al php.database
[php]CREATE TABLEutenti
(
id
INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
user
TEXT NOT NULL ,
pass
TEXT NOT NULL ,
mail
TEXT NOT NULL
) ENGINE = MYISAM ;[/php]config.php
[php]<?php
// avvio la sessione
session_start();// Dati connessione al database
$db_host = 'localhost'; // Host - solitamente localhost
$db_utente = 'root'; // Nome utente del Database
$db_password = 'pass'; // Password del Database
$db_nomedb = 'thedarkita'; // Nome del Database// Effettua la connessione al database
$dbh=mysql_connect ($db_host, $db_utente, $db_password) or die ('Errore nella stringa di connessione al database: '.mysql_error());
mysql_select_db($db_nomedb);
?>[/php]index.php
[php]<?php
// Includo la connessione al database
require('config.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tutorial by TheDarkITA</title>
</head><body>
Menu:<br />
<br />
<br />
<?php
if(isset($_SESSION['login']))
echo '<a href="privata.php">Area privata</a><br /><a href="logout.php">Logout</a><br />';
else
echo '<a href="registrati.php">Registrazione</a><br /><a href="login.php">Login</a><br />';
?>
</body>
</html>[/php]login.php
[php]<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['login']))
{// Dati Inviati dal modulo $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $user = addslashes($user); $pass = addslashes($pass); } // Crypto la password e la confronto con quella nel database $pass = md5($pass); // Controllo l'utente esiste $query = mysql_query("SELECT id FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1"); // Se ha trovato un record if(mysql_num_rows($query) == 1) { // prelevo l'id dal database $login = mysql_fetch_array($query); // Creo una variabile di sessione $_SESSION['login'] = $login['id']; // reindirizzo l'utente header('Location: privata.php'); exit; } // se non esiste da l'errore else die('Nome Utente o Password errati');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head><body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>[/php]logout.php
[php]<?php
// Includo la connessione al database
require('config.php');// Esegue il logout cancellando la sessione
session_destroy();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Logout</title>
</head><body>
Logout eseguito<br />
<a href="index.php">Vai all'index</a><br />
</body>
</html>[/php]privata.php
[php]<?php
// Includo la connessione al database
require('config.php');// Se non è stata definita la variabile manda l'utente alla homepage
if(!isset($_SESSION['login']))
{
header('Location: index.php');
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Area privata</title>
</head><body>
Pagina privata!<br />
<br />
<br />
<a href="logout.php">Logout</a><br />
</body>
</html>[/php]registrati.php
[php]<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['registra']))
{// Dati Inviati dal modulo $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default '' $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $user = addslashes($user); $pass = addslashes($pass); $mail = addslashes($mail); } // Controllo il Nome Utente if(strlen($user) < 4 || strlen($user) > 12) die('Nome Utente troppo corto, o troppo lungo'); // Controllo la Password elseif(strlen($pass) < 4 || strlen($pass) > 12) die('Password troppo corta, o troppo lunga'); // Controllo l'email elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail)) die('Email non valida'); // Controllo il nome utente non sia già occupato elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) die('Nome Utente non disponibile'); // Controllo l'indirizzo email non sia già registrato elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) die('Questo indirizzo email risulta già registrato ad un altro utente'); // Registrazione dell'utente nel database else { // Crypt della password per garantire una miglior sicurezza $pass = md5($pass); // Query per l'inserimento dell'utente nel database $strSQL = "INSERT INTO utenti (user,pass,mail)"; $strSQL .= "VALUES('$user', '$pass', '$mail')"; mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error()); // Reindirizzo l'utente ad una pagina di conferma della registrazione header('Location: registrato.php'); exit; }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registrazione</title>
</head><body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
<input name="registra" type="submit" value="Registrati" /><br />
</form>
</body>
</html>[/php]registrato.php
[php]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registrazione Completa</title>
</head><body>
Registrazione completa!<br />
<br />
<br />
<a href="index.php">Vai all'index</a><br />
</body>
</html>[/php]Per i più pigri è possibile scaricare lo script completo a questo indirizzo scarica i file
-
Grazie Thedarkita,
un ottimo tutorial.
-
Veramente ben fatto... e ben commentato soprattutto
keiske
-
Ho utilizzato i tuoi script per creare la pagina di log in e registrazione ma ottengo sempre degli errori.
Ci sono delle parti da cambiare negli script?
-
-
Grazie
devi modificare solo il file config.php mettendo i dati di accesso al database...
-
ciao ragazzi,
davvero un utile tutorial!!!ma... in questo modo tutti gli utenti potranno vedere la stessa pagina???
quindi sia l'utente cia che l'utente tantisaluti vedranno la pag. privata???
-
-
@Motherboard said:
ciao ragazzi,
davvero un utile tutorial!!!ma... in questo modo tutti gli utenti potranno vedere la stessa pagina???
quindi sia l'utente cia che l'utente tantisaluti vedranno la pag. privata???
Si
-
Ovviamente sarai tu poi a diversificare i contenuti a seconda dell'utente...
se si logga l'utente PIPPO e vuoi fargli vedere cose solo sue e queste cose le estrai da un database farai una query al database chiedendo tutti i dati necessari che coincidono con PIPPO o che coincidono col numero utente di PIPPO e siccome PIPPO deve loggarsi, salvando nelle variabili di sessione il suo nome o il suo numero lo puoi ricavare da $_SESSION['nome'] o $_SESSION['id'] precedentemente salvate
keiske
-
salve a tutti, la mia domandina è :
come integrare l'autologin, il "ricordami" sul file login e credo poi su tutti gli altri file qui in questione ?
-
dovresti creare dei cookie con user e pass. e all'accesso dovresti vedere se sono settati i cookie e in quel caso mandarlo ad una pagina di login che prenda i valori dai cookie invece che dal form
-
scusate ho sbagliato ho risposto ad un altro post !!!!!!!!!perdonatemi
-
nel database manca una virgola nel codice sql
il file corretto è il seguente:
[php]
CREATE TABLEutenti
(
id
INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
user
TEXT NOT NULL ,
pass
TEXT NOT NULL ,
mail
TEXT NOT NULL
) ENGINE = MYISAM ;
[/php]
-
Mi chiedo come mai l'ho installato ma non mi fa il redirect quando mi registro e quando mi loggo.
Lo script aggiunge correttamente i dati sul database.
Dove sto sbagliando?
-
Cosa vedi invece di essere reindirizzato?
dopo la funzione header() hai messo exit; perchè con internet explorer senza quello da qualche problemino...
-
ma dopo questa istruzione
[PHP] if(mysql_num_rows($query) == 1){
[/PHP]non ci va un
[PHP]session_start()[/PHP]
?
a me senza quello non funzionava....
-
è nel config session_start... se lo rimetti genera errore...
-
ok però ho un altro problema.
se accedo all'area privata da un server win 2003, salta la pagina di login ed entra direttamente.
come si può risolvere questo preblema??
-
Cioè?