Codice PHP:
<?php
## Script per REGISTRAZIONE UTENTI con attivazione via email con php/mysql ########
## autore: U.Alessandro - email: [email]xxxxxxxx@yahoo.it[/email] - ultima modifica: 6-3-2008 ##
####################################################
/*
- il seguente file contiene tutte le funzioni neccessarie per la registrazione e attivazione, basta includerlo dove serve, es: include './reguserFunc.php';
- nella funzione deleteoldreg() � possibile impostare i minuti dopo i quali non sar� pi� possibile attivare un account registrato e verr� cancellato, questo per evitare la
registrazione di utenti che non attivano l' account
- lo script utilizza la funzione mail() di PHP
- la funzione RegUser() ritorna come valori true/false, ma in alternativa si pu� tranquillamente far stampare una stringa a piacere per personalizzare la notifica di errori
NB: la passowrd viene salvata nel database come $md5pass = md5(md5($passwordDB)) , da tenere conto se dobbiamo fare una SELECT in uno script per il Login,
*/
// qui inserire i propri dati per la connessione ad database mysql
function dbconn(){
$connessione = mysql_connect("xx.xxx.xxx.xxx", "Sqlxxxxx_2", "xxxxxxxx");
mysql_select_db("utenti", $connessione);
return $connessione;
}
// link file attivazione
define('pathactiveuser', 'http://www.monesito.it/provautenti/reguser_attiva.php');
// mail webmaster/amministratore del sito
define('adminmail', 'myname@gmail.com');
// nome/indirizzo del proprio sito web
define('nomesito', 'http://www.miosito.it/provautenti/');
// stringa formata da letter/numeri da usare per la creazione di una chiave di attivazione casuale
define('secretword','sthh45w45s');
// controlla dati passati( username e password deve avere caratteri alfanumerici e almeno 6 caratteri e un massimo di 20 )
function strip_char($char){
$result = false;
$pr = "/^[a-zA-Z0-9_]{6,20}$/";
if(preg_match($pr, $char)){
$result = true;
}
return $result;
}
// controllo email
function checkMail( $m ) {
// andr3a / HTML.IT / caruccis
$r1 = "([a-z0-9]+[";
$r2 = "\-]?){1,3}([a-z0-9])*";
return preg_match("/(?i)^{$r1}\._{$r2}\@{$r1}\.{$r2}\.[a-z]{2,6}$/", $m);
}
// strip magic
function strip_magic ($value){
$value = (get_magic_quotes_gpc()) ? stripslashes($value) : $value;
return $value;
}
// cancella vecchie registrazioni senza attivazione
function deleteoldreg(){
// minuti dopo i quali l'attivazione non � pi� possibile
$minuti = 30;
$sql = "DELETE FROM utenti WHERE (data + INTERVAL $minuti MINUTE) < NOW() AND attivo='0'";
mysql_query($sql);
}
//creazione codice attivazione account
function ActiveCode($nome_utemte){
$chiave_attivazione = md5(time().$nome_utemte.secretword);
return $chiave_attivazione;
}
// attivazione account utente
//@ $user = campo user del link di attivazione
//@ $active = campo active del link di attivazione
function ActiveUser($user,$active){
$return = false;
if(!strip_char($user) && !preg_match("/^[a-zA-Z0-9]{32}$/",$active)){
return $return;
} else {
$conn = dbconn();
$userDb = mysql_real_escape_string(strip_magic($user),$conn);
$chiaveDb = mysql_real_escape_string(strip_magic($active),$conn);
$sql_attiva = "UPDATE utenti SET attivo = '1' WHERE username = '$userDb' AND chiave = '$chiaveDb' AND attivo = '0'";
$res_attiva = mysql_query($sql_attiva,$conn);
$num_righe = mysql_affected_rows($conn);
if($num_righe == 1){$return = true;}
return $return;
}
}
/*
@ la funzione restituisce true solo se i dati passati sono validi(preg_match) e NON esiste un user con lo stesso username o email
*/
function RegUser($username,$email,$password,$passwordver){
$return = false;
$connessione = dbconn();
deleteoldreg();
$usernameStrip = strip_magic(trim($username));
$emailStrip = strip_magic(trim($email));
$passwordStrip = strip_magic(trim($password));
$passwordverStrip = strip_magic(trim($passwordver));
if(
strip_char($usernameStrip) &&
checkMail($emailStrip) &&
strip_char($passwordStrip) &&
$passwordStrip===$passwordverStrip
){
$userDB = mysql_real_escape_string($usernameStrip,$connessione);
$emailDB = mysql_real_escape_string($emailStrip,$connessione);
$passwordDB = mysql_real_escape_string($passwordStrip,$connessione);
$sql = "SELECT id FROM utenti WHERE username='$userDB' OR email='$emailDB'";
$risultato = mysql_query($sql, $connessione);
$num_righe = mysql_num_rows($risultato);
if($num_righe == 0){
$md5pass = md5(md5($passwordDB));
$chiave = ActiveCode($usernameStrip);
$sql2 = "INSERT INTO utenti(username,password,email,data,chiave,attivo) VALUES('$userDB','$md5pass','$emailDB',NOW(),'$chiave','0')";
$result = mysql_query($sql2, $connessione);
$linkattivazione = pathactiveuser.'?$user='.$usernameStrip.'&active='.$chiave;
$headers = 'From: '.adminmail."\r\n" .
'Reply-To: '.adminmail. "\r\n" .
'X-Mailer: PHP/' . phpversion();
$subject = "Email di attivazione ".nomesito;
$message = "Per attivare il tuo account devi visitare il seguente link: ".$linkattivazione;
if(mail($emailStrip, $subject, $message, $headers)){
// email inviata
$return = true;
}
// esiste un utente con lo stesso username o password
} else {
$return = false;
}
// dati passati dal form non sono validi
} else {
$return = false;
}
return $return;
}
?>
Rimango in attesa! Grazie.