Premetto che probabilmente dopo questa avrai l'istinto di menarmi... se supero la soglia fammi sapere che smetto di tartassarti di domande... (e magari mi risparmio le botte 0
:gun:
) comunque dalla tua stupenda guida (GUIDA PHP E MYSQL PRATICA):
Ora vorrei sapere se ho ben capito;
Inizi una sessione in modo che se l'utente è già stato autentificato (tramite $_SESSION['login']) questo non ha bisogni di rifare il procedimento...(poiché $_SESSION['login'] sarebbe già "risultato" all'interno di isset.
Se $_SESSION['login'] ha valore (tramite l'oggetto prelevato da
$res->login) allora l'utente va nella pagina protetta della gestione (gestisci.php)
Controlli se i parametri inviati hanno valore ...altrimenti fai la loro validazione applicando il filtro contro un eventuale codice pericoloso all'interno di essi (in questo caso ad esempio <?php rcho 'prova' ?> non sarebbe riconosciuto - e la password viene criptata tramite la funzione sha1(valore) il quale restituisce una stringa di 40 caratteri e rende incodificabile la password dal database
A questo punto istanzi la classe contenente tutti i metodi precedentemente creati (ovviamente non presenti qui)
Richiami il metodo query (che precedentemente hai creato per istruire il db mysql) nel quale ti da come risultato tutti gli username che hanno quel $username AND come password quella $password
Domanda: Perchè SELECT id-login anziché SELECT id_login, password_login?
poiché il metodo query sopra citato lo hai messo all'interno di mysql_fetch_rows se questo non ti restituisce righe significa che non è stato autentificato e lo rispedisci alla home
altrimenti applichi mysql_fetch_object tramite il metodo estrai($auth) e quindi valorizzi con $res->id_login la $_SESSION['login'] che a questo punto ha valore e risponde true all'isset iniziale
Se $username e $password non sono stati inviati allora mostra il form per l'inserimento dei dati
altra domanda:
perché nel controllo sul parametro di invio hai messo
trim($_POST['submit']) //che senso togliere gli spazi e all'inizio della stringa del pulsante di invio?
Ti ringrazio di una tua eventuale risposta... se nn rispondi capisco di aver esagerato e grazie lo stesso
:book:


Codice:
<?php
// inizializzazione della sessione
session_start();
// se la sessione di autenticazione
// è già impostata non sarà necessario effettuare il login
// e il browser verrà reindirizzato alla pagina di scrittura dei post
if (isset($_SESSION['login']))
{
// reindirizzamento alla homepage in caso di login mancato
header("Location: gestisci.php");
}
// controllo sul parametro d'invio
if(isset($_POST['submit']) && (trim($_POST['submit']) == "Login"))
{
// controllo sui parametri di autenticazione inviati
if( !isset($_POST['username']) || $_POST['username']=="" )
{
echo "Attenzione, inserire la username.";
}
elseif( !isset($_POST['password']) || $_POST['password'] =="")
{
echo "Attenzione, inserire la password.";
}else{
// validazione dei parametri tramite filtro per le stringhe
$username = trim(filter_var($_POST['username'], FILTER_SANITIZE_STRING));
$password = trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING));
$password = sha1($password);
// inclusione del file della classe
include "funzioni_mysql.php";
// istanza della classe
$data = new MysqlClass();
// chiamata alla funzione di connessione
$data->connetti();
// interrogazione della tabella
$auth = $data->query("SELECT id_login FROM login WHERE username_login = '$username' AND password_login = '$password'");
// controllo sul risultato dell'interrogazione
if(mysql_num_rows($auth)==0)
{
// reindirizzamento alla homepage in caso di insuccesso
header("Location: index.php");
}else{
// chiamata alla funzione per l'estrazione dei dati
$res = $data->estrai($auth);
// creazione del valore di sessione
$_SESSION['login'] = $res-> id_login;
// disconnessione da MySQL
$data->disconnetti();
// reindirizzamento alla pagina di amministrazione in caso di successo
header("Location: gestisci.php");
}
}
}else{
// form per l'autenticazione
?>
<h1>Accesso all'amministrazione:</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Username:<br />
<input name="username" type="text"><br />
Password:<br />
<input name="password" type="password" size="20"><br />
<input name="submit" type="submit" value="Login">
</form>
<?
}
?>
Ora vorrei sapere se ho ben capito;
Inizi una sessione in modo che se l'utente è già stato autentificato (tramite $_SESSION['login']) questo non ha bisogni di rifare il procedimento...(poiché $_SESSION['login'] sarebbe già "risultato" all'interno di isset.
Se $_SESSION['login'] ha valore (tramite l'oggetto prelevato da
$res->login) allora l'utente va nella pagina protetta della gestione (gestisci.php)
Controlli se i parametri inviati hanno valore ...altrimenti fai la loro validazione applicando il filtro contro un eventuale codice pericoloso all'interno di essi (in questo caso ad esempio <?php rcho 'prova' ?> non sarebbe riconosciuto - e la password viene criptata tramite la funzione sha1(valore) il quale restituisce una stringa di 40 caratteri e rende incodificabile la password dal database
A questo punto istanzi la classe contenente tutti i metodi precedentemente creati (ovviamente non presenti qui)
Richiami il metodo query (che precedentemente hai creato per istruire il db mysql) nel quale ti da come risultato tutti gli username che hanno quel $username AND come password quella $password
Domanda: Perchè SELECT id-login anziché SELECT id_login, password_login?
poiché il metodo query sopra citato lo hai messo all'interno di mysql_fetch_rows se questo non ti restituisce righe significa che non è stato autentificato e lo rispedisci alla home
altrimenti applichi mysql_fetch_object tramite il metodo estrai($auth) e quindi valorizzi con $res->id_login la $_SESSION['login'] che a questo punto ha valore e risponde true all'isset iniziale
Se $username e $password non sono stati inviati allora mostra il form per l'inserimento dei dati
altra domanda:
perché nel controllo sul parametro di invio hai messo
trim($_POST['submit']) //che senso togliere gli spazi e all'inizio della stringa del pulsante di invio?
Ti ringrazio di una tua eventuale risposta... se nn rispondi capisco di aver esagerato e grazie lo stesso
:book: