Unmantained Guida [HowTo]Form Login! (Il vostro sito in php!)

Una guida contrassegnata come Unmantained contiene informazioni su un argomento obsoleto, non più utile o files non aggiornati da parte del creatore.
Stato
Discussione chiusa ad ulteriori risposte.

ErNabbone

Utente Gold
24 Settembre 2008
765
51
121
328
Ultima modifica da un moderatore:
[font='Georgia, Times New Roman, Times, serif']Indice
Introduzione
Preparazione al lavoro
Form Login
Pagina delle Registrazioni
Pagina con Classifica Personaggi
Servizio di ticket (Via Database)

Form Login

Apriamo con un editor di testo il file index.php (consiglio vivamente di usare Notepad++). Creiamo in html un form con method "post", con il nome "login" e con il file di destinazione "./login.php".
PHP:
<form id="login" method="post" action="./login.php"></form>
Dopodichè, creiamo due "input". Uno deve essere di tipo "text" e l'altro di tipo "password". Entrambi di dimensione 16 (non maggiore). I nomi dei due input dovranno essere rispettivamente "userid" e "password. A vostro piacere potete inserire anche dei label per indicare quale dei due input è password e quale è ID.
A questo punto creiamo un altro input questa volta di tipo "submit" che servirà per confermare il modulo.
PHP:
<form id="login" method="post" action="./login.php">
UserID: <input type="text" name="userid" size="16" value="" />
Passowrd: <input type="password" name="password" size="16" value="" />
<input type="submit" value="Login" />
</form>
È ovvio che ognuno di voi poi curerà l'aspetto grafico di questo form.
Fatto ciò salviamo il file index.php e ci rispostiamo nella directory "A:/" dove creeremo un nuovo file chiamato "./login.php".
Questo file ci servirà per creare una nuova sessione dati e cercherò di spiegarne passo passo ogni funzione.
Iniziamo con il creare una sessione in questo modo:
PHP:
<?php
session_start();
Ora riprendiamo i dati che ci pervengono dalla pagina "index.php" e impostiamoli come due variabili:
PHP:
$userid=$_POST["userid"];
$password=$_POST["password"];
Fatto ciò preveniamo un po' di errori dando quest'ordine:
PHP:
if (strlen($userid) < 1 || strlen($password)< 1){
echo "Errore durante il login!";
Quest'ultima funzione stampa "Errore durante il login!" nel caso in cui il numero di caratteri della stringa "$userid" o della stringa "$password" sia inferiore ad 1.
Ora, se così non fosse...
PHP:
}else{
$aaa_ip = "";
$aaa_user = "";
$aaa_psw = "";
$aaa_db = "account";
$conn=mysql_connect($aaa_ip, $aaa_user, $aaa_psw);
mysql_select_db($aaa_db);
Qui su dobbiamo inserire l'ip del database tra le virgolette che seguono a "$aaa_ip =", l'user per il login al database tra le virgolette che seguono a "$aaa_user =", la password per il login al database tra le virgolette che seguono a "$aaa_psw =" e, nel caso in cui la tabella "account" non si trovi nel database "account", modificare la stringa "$aaa_db" con il corrispettivo database.
PHP:
$query1="select * from account where Login='$userid' and Password=password('$password')";
$result=mysql_query($query1);
$rs=mysql_fetch_object($result);
Subito sopra abbiamo visto la dichiarazione della stringa "$query1", l'esecuzione di quest'ultima in qualità di query ed una funzione "mysql_fetch_object" che restituisce valori 1 o 0 dipendenti dall'esistenza di risultanti dalla query.
Quindi ora creiamo una macro che per il valore 1 di "$rs" segnerà nuovi dati nella sessione che riceverà dal risultato della query e che per il valore 0 di "$rs" ci darà un errore e terminerà la sessione.
PHP:
if($rs){
$_SESSION["UserID"] = $rs->Login;
$_SESSION["cash"] = $rs->cash;
$_SESSION["real_name"] = $rs->real_name;
$_SESSION["email"] = $rs->email;
$_SESSION["social_id"] = $rs->social_id;
$_SESSION["status"] = $rs->status;
header("location:index.php");
}else{
echo "Userid o Password sbagliati!";
exit;
}
Per esempio io ho salvato in sessione solo alcuni dati del form risultante dalla query, ma voi potete aggiungere a vostro piacimento altri "$_SESSION["AsD"] = $rs->NomeColonnaDaCuiDevoPrendereIDati".
Non ci dimentichiamo a questo punto di chiudere la nostra macro aperta con "}else{" e quindi mettiamo una parentesi graffa chiusa alla fine (codici ascii per parentesi graffe, molto utile impararli: 123-125) e di chiudere il php con un "?>".
Come sicuramente avrete notato, compare anche una funzione "header("location:index.php");" che è un comando che al termine della macro rimanda alla pagina index.php.

Pagina che sicuramente vorremo far sì che sia diversa a seconda che tu sia o non sia loggato.
Far ciò è forse il passaggio più complicato del nostro sistema di login, ma cercherò di semplificarlo il più possibile.

Chiariamo un paio di concetti: a questo punto ciò che faremo è "duplicare" la pagina html e di modificare una delle due in modo che sia quella che apparirà quando in Session saranno presenti alcuni dati come ad esempio $userid.
Fate ben attenzione a questo passaggio abbastanza delicato.
Posizioniamoci nella directory "A:/" e rinominiamo il file "index.php" in "index_out.php".
Fatto ciò copiamo il file "index_out.php" ed incolliamolo in "A:/" questa volta però con il nome di "index_in.php" e sarà questa (index_in.php) la pagina visibile dopo aver effettuato il login.
Creiamo ora un file chiamato "index.php" ed al suo interno scriviamo:
PHP:
<?
session_start();
if(isset($_SESSION["UserID"]) && strlen($_SESSION["UserID"])>1){
loggato();
}else{
loggante();
}
function loggante(){
include("index_out.php"); 
}
function loggato(){
include("index_in.php");
}
?>
Cos'abbiamo scritto? Se $_SESSION["UserID"] esiste ed è maggiore di 1, il risultato è "loggato()" perchè avendo già dei dati in sessione, vuol dire che abbiamo effettuato il login in precedenza, altrimenti è "loggante()".
Quindi se il risultato è "loggante()", visualizziamo la pagina "index_out.php", altrimenti essendo loggati, visualizziamo la pagina "index_in.php".

Ultimo accorgimento per il php è quello di inserire all'inizio della pagina "index_in.php" un qualcosa che blocchi chi cerca di raggiungere direttamente il file senza effettuare il login, quindi aggiungeremo all'inizio della pagina:
PHP:
<?
if(isset($_SESSION["UserID"]) && strlen($_SESSION["UserID"])>1){ 
?>
Ed infine aggiungendo ai piedi della pagina:
PHP:
	<?
}else{
header("location:index.php");
}
?>
[/font]
 
Miglioramento:
"Ora riprendiamo i dati che ci pervengono dalla pagina "index.php" e impostiamoli come due variabili:"
Vi consiglio di inserire subito dopo questo:
Codice:
$userid = addslashes($userid);
$password = addslashes($password);
 
Stato
Discussione chiusa ad ulteriori risposte.
Indietro
Top Bottom