Ciao ragazzi,
come vi avevo detto ho il tempo di pubblicare ciò che 'ho fatto'. Con la doverosa premessa che 1. mi sono messo a studiare ma 2. ho dovuto necessariamente basarmi su qualcosa di già fatto che ho trovato in rete 3. facendo si da coniugare i più input ricevuti\trovati in modo tale da soddisfare il mio fine (che ribadisco essere quello di creare un sistema di registrazione tramite mail e di login\autenticazione successiva sicura).
Il sistema si articola così: chi intenderà visitare parte del contenuto del mio futuro sito dovrà necessariamente possedere credenziali per accedere al medesimo. Le credenziali le otterrà inviandomi una mail (tramite form presente nel sito) ed attendendo la conferma delle stesse tramite mia risposta alla sua mail e con quelle egli potrà autenticarsi nel sito e poterne visitare la parte di contenuto nascosto (che altro non sarà che un gioco di calcio manageriale, sperando di realizzarlo :-) )
Finito il preambolo pubblico a step ciò che ho fatto:
1) ho inserito nel mio sito un link che mi rimanda ad una pagina di registrazione
Codice:
<a href="registrazione.php" title="Iscriviti">Iscriviti</a>
2) a questo punto occorre creare 2 pagine web
2 a) creare la pagine registrazione.php dove si inserisce il form, ossia il corpo che dovrà essere compilato dall’utente che vuole registrarsi con i suoi dati. Il form che ho fatto io è il seguente:
Codice:
<form action="invio.php">
<div><table border="10" align = "center" cellpadding="10" cellspacing="10" >
<tr width="150">
<td width="300" align="center"><FONT FACE="Arial" SIZE="5" color="red"> REGISTRAZIONE </FONT></td>
</tr>
<tr width="150" >
<td width="300"> Username <input name="username" type="text"></td>
</tr>
<tr width="150" >
<td width="300"> Mail <input name="mail" type="text"></td>
</tr>
<tr width="150" >
<td width="300"> Password <input name="pw" type="text"></td>
</tr>
<tr width="150" >
<td width="300"> Squadra <input name="squadra" type="text"></td>
</tr>
<tr>
<td width="100" align="center">
<input type="hidden" name="ip" value="<?php
/* prendere ip del visitatore*/
echo $_SERVER['REMOTE_ADDR'];
?>" >
<input type="submit" align="center" value="Registrati" title="Una volta cliccato, dovrai attendere la mail di conferma dati!!">
</td>
</tr>
</table></div>
</form>
In sintesi questo form si collega ad una pagina invio.php (punto 2 b) che prende I dati inseriti dall’utente e li manda alla vostra mail. Non manda solo dati inseriti ma anche un dato (ip) che l’utente non inserisce. L’ho fatto perché a me servirebbe di evitare che un utente possa registrarsi con molti account (anche se utilizzando altra rete internet lo potrebbe comunque fare, ma è comunque una forma seppur minima di tutela).
2 b) si crea la pagina invio.php connessa al punto precedente
Codice:
<?php
$mail = "miamail@altervista.it";
$oggetto = "email";
$testo = "username: ".$_GET['username']."
mail: ".$_GET['mail']."
pw: ".$_GET['pw']."
squadra: "
.$_GET['squadra']."
ip: ".$_GET['ip'];
mail($mail,$oggetto,$testo);
?>
3) a questo punto inserirete i dati inviati dall’utente nel database, invierete conferma all’utente e lui si potrà autenticare sul sito. Per farlo creiamo un link nella pagina del sito che lo mandi alla pagina autenticazione.php:
Codice:
<a href="autenticazione.php" title="login">login</a>
4) nella pagina php ho probabilmente fatto un po’ di confusione perché è la pagina scaturita dal famoso ‘mix di contunuti’ che ho anche in parte copiato da altri suggerimenti..
Codice:
<?php
$DB_host = 'host';
$DB_user = 'miousername';
$DB_password = 'miapassword';
$DB_name = 'miodatabase';
$link = mysql_connect($DB_host, $DB_user, $DB_password);
if (!$link) {
die ('Non riesco a connettermi: ' . mysql_error());
}
$db_selected = mysql_select_db($DB_name, $link);
if (!$db_selected) {
die ("Errore nella selezione del database: " . mysql_error());
}
if($_POST) {
effettua_login();
} else {
mostra_form();
}
function mostra_form()
{
// mostro un eventuale messaggio
if(isset($_GET['msg'])) {
echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
}
?>
<html>
<table>
<tr>
<td>
<form name="form_login" method="post" action="">
<div><table align = "center" cellpadding="10" cellspacing="10" >
<tr width="150">
<td width="300" align="center"><FONT FACE="Arial" SIZE="5" color="red"> Autenticazione </FONT></td>
</tr>
<tr width="150" >
<td width="300"> Username <input name="nome" type="text" value=""></td>
</tr>
<tr width="150" >
<td width="300"> Password <input name="password" type="password" value=""></td>
</tr>
<tr>
<td width="100" align="center">
<input name="invia" type="submit" value="Autenticati">
</td>
</tr>
</table></div>
</form>
</td>
</tr>
</table>
<?
}
function effettua_login()
{
// recupero il nome e la password inseriti dall'utente
$nome = trim($_POST['nome']);
$password = trim($_POST['password']);
// verifico se devo eliminare gli slash inseriti automaticamente da PHP
if(get_magic_quotes_gpc()) {
$nome = stripslashes($nome);
$password = stripslashes($password);
}
// verifico la presenza dei campi obbligatori
if(!$nome || !$password) {
$messaggio = urlencode("Non hai inserito il nome o la password");
header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
exit;
}
// effettuo l'escape dei caratteri speciali per inserirli all'interno della query
$nome = mysql_real_escape_string($nome);
$password = mysql_real_escape_string($password);
// preparo ed invio la query
$query = "SELECT id FROM utenti WHERE nome = '$nome' AND pswd = MD5('$password')";
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
$record = mysql_fetch_array($result);
if(!$record) {
$messaggio = urlencode('Nome utente o password errati');
header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
} else {
session_start();
$_SESSION['user_id'] = $record['id'];
$messaggio = urlencode('Login avvenuto con successo');
header("location: homepage.php");
}
}
?>
5) adesso in tutte le pagine che collegherete (io ho collegato homepage.php) inserirete il codice seguente così solo chi avrà le credenziali sarà nella possibilità di accedere al relativo contenuto!
Codice:
<?php
session_start(); // se la sessione non è stata già avviata altrove
if(empty($_SESSION['user_id'])) {
die('accesso non consentito');
}
?>
Concludo con
1. Ringraziamenti verso Karl94, Miki92 e Alemoppo che con me hanno un sacco di pazienza :-)
2. I codici riportati in parte sono presi da altri lavori di altre persone alle quali giustamente do il merito di tutto. Io li ho solo utilizzati, dopo aver capito come poterli usare, per i miei fini
3. Se volete vedere come è realizzato il sistema, esso è ospitato sul sito di alter vista del mio account