Codice PHP:
<?php
require dirname(__FILE__) . '/' . 'dbconfig.php';
class User {
var $errors = null;
var $info = null;
var $fields = null;
var $conn;
//COSTRUTTORE
function user($data) {
if(isset($data['nome'])) {
$this->fields['nome'] = trim($data['nome']);
}
if(isset($data['cognome'])) {
$this->fields['cognome'] = trim($data['cognome']);
}
if(isset($data['telefono'])) {
$this->fields['telefono'] = trim($data['telefono']);
}
if(isset($data['citta'])) {
$this->fields['citta'] = trim($data['citta']);
}
if(isset($data['data_nascita'])) {
$this->fields['data_nascita'] = trim($data['data_nascita']);
}
if(isset($data['email'])) {
$this->fields['email'] = trim($data['email']);
}
if(isset($data['email2'])) {
$this->fields['email2'] = trim($data['email2']);
}
if(isset($data['username'])) {
$this->fields['username'] = trim($data['username']);
}
if(isset($data['password'])) {
$this->fields['password'] = trim($data['password']);
}
if(isset($data['password2'])) {
$this->fields['password2'] = trim($data['password2']);
}
if(isset($data['autorizzazione'])) {
$this->fields['autorizzazione'] = trim($data['autorizzazione']);
}
if(isset($data['sesso'])) {
$this->fields['sesso'] = trim($data['sesso']);
}
}
//VALIDA UTENTE (METODO MAIN)
function validate() {
$i=1;
$ret = array();
foreach($this->fields as $k => $v) {
$returnForm = false;
switch($k) {
case 'nome':
if($v == '') {
$this->setError('Inserire nome', $k);
$ret['nome'] = false;
} elseif(!$this->only_character($k, $v)) {
$this->setError('Nome non valido', $k);
$ret['nome'] = false;
}elseif(!$this->check_lenght($k, $v, "20")) {
$this->setError('Nome troppo lungo per essere archiviato', $k);
$ret['nome'] = false;
}else{
$ret['nome']= true;
}
break;
case 'cognome':
if($v == '') {
$this->setError('Inserire cognome', $k);
$ret['cognome'] = false;
} elseif(!$this->only_character($k, $v)) {
$this->setError('Cognome non valido', $k);
$ret['cognome'] = false;
}elseif(!$this->check_lenght($k, $v, "30")) {
$this->setError('Cognome troppo lungo per essere archiviato', $k);
$ret['cognome'] = false;
}else{
$ret['cognome'] = true;
}
break;
case 'sesso':
if($v == '') {
$this->setError('Inserire il sesso', $k);
$ret['sesso'] = false;
}else{
$ret['sesso'] = true;
}
break;
case 'telefono':
if($v == '') {
$this->setError('Inserire numero di telefono', $k);
$ret['telefono'] = false;
} elseif(!$this->only_number($k, $v)) {
$this->setError('Telefono non valido(solo numeri)', $k);
$ret['telefono'] = false;
}elseif(!$this->check_lenght_tel($k, $v, "10")) {
//$this->setError('Lunghezza numero di telefono errata(10 caratteri)', $k);
$ret['telefono'] = false;
}else{
$ret['telefono'] = true;
}
break;
case 'citta':
if($v == '') {
$this->setError('Inserire una città', $k);
$ret['citta']= false;
}elseif($v == 'Seleziona una Città') {
$this->setError('Inserire una città', $k);
$ret['citta'] = false;
}else{
$ret['citta'] = true;
}
break;
case 'data_nascita':
if($v == '') {
$this->setError('Inserire data di nascita', $k);
$ret['data_nascita']= false;
} elseif(!$this->check_date_of_birth($k, $v)) {
// $this->setError('La data di nascita inserita non è corretta(formato: gg/mm/aaaa)', $k);
$ret['data_nascita'] = false;
}else{
$ret['data_nascita'] = true;
}
break;
case 'email':
if($v == '') {
$this->setError('Inserire indirizzo email', $k);
$ret['email'] = false;
}elseif(!eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$', $v)) {
$this->setError('Indirizzo email non valido', $k);
$ret['email'] = false;
} elseif(!$this->uniqueField('Indirizzo email', $k, $v)) {
$this->setError('Indirizzo email già presente in archivio', $k);
$ret['email'] = false;
}else{
$ret['email'] = true;
}
break;
case 'email2':
if($v == '') {
$this->setError('Inserire indirizzo email', $k);
$ret['email2'] = false;
}elseif(!eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$', $v)) {
$this->setError('Indirizzo email non valido', $k);
$ret['email2'] = false;
} elseif(!$this->uniqueField('Indirizzo email', "email", $v)) {
$this->setError('Indirizzo email già presente in archivio', $k);
$ret['email2']= false;
}elseif(!$this->equals($k, $v, $this->fields['email'])) {
$this->setError('L´indirizzo email inserito non coincide con il precedente', $k);
$ret['email2']= false;
}else{
$ret['email2'] = true;
}
break;
case 'username':
if($v == '') {
$this->setError('Inserire nome utente'.$v, $k);
$ret['username']= false;
} elseif(!$this->uniqueField('Nome utente', $k, $v)) {
$this->setError('L´username scelta è già presente in archivio. Scegliere un´altra user', $k);
$ret['username'] = false;
}else{
$ret['username']= true;
}
break;
case 'password':
if($v == '') {
$this->setError('Inserire password'.$v, $k);
$ret['password'] = false;
} elseif(!$this->check_password($k, $v)) {
$ret['password'] = false;
}else{
$ret['password'] = true;
}
break;
case 'password2':
if($v == '') {
$this->setError('Ripetere password'.$v, $k);
$ret['password2']= false;
} elseif(!$this->check_password($k, $v)) {
$ret['password2'] = false;
}elseif(!$this->equals($k, $v, $this->fields['password'])) {
$this->setError("Le due password inserite non coincidono", $k);
$ret['password2']= false;
}else{
$ret['password2'] = true;
}
break;
case 'autorizzazione':
if($v != 'false' ) {
$this->setError('Autorizzazione al trattamento dei dati necessaria per la registrazione', $k);
$ret['autorizzazione']= false;
}elseif($v == '' ) {
$this->setError('Autorizzazione al trattamento dei dati necessaria per la registrazione', $k);
$ret['autorizzazione']= false;
}else{
$ret['autorizzazione'] = true;
}
break;
}
$i++;
}
//CONTROLLO CHE TUTTI I RITORNI DEI CONTROLLI SIANO TRUE
if($ret['nome'] == true && $ret['cognome'] == true && $ret['sesso'] == true && $ret['telefono'] == true && $ret['citta'] == true && $ret['data_nascita'] == true &&
$ret['username'] == true && $ret['password'] == true && $ret['password2'] == true && $ret['email'] == true && $ret['email2'] == true && $ret['autorizzazione'] == true){
$returnForm = true;
}
return $returnForm;
}
//CONTROLLO CHE NELLA STRINGA PASSWORD SIANO PRESENTI SOLO DETERMINATI CARATTERI E CHE SIA LUNGA MINIMO 6 MAX 12 CARATTERI
function check_password($fld_name, $fld_val) {
$reg_exp = '/^[a-zA-Z0-9\_\*\-\+\!\?\,\:\;\.\xE0\xE8\xE9\xF9\xF2\xEC\x27]{6,10}/';
if(!preg_match($reg_exp, $fld_val)){
$this->setError("Password non conforme(min 6, max 10 caratteri)", $fld_name);
return false;
}
return true;
}
//CONTROLLO CHE NELLA STRINGA SIANO PRESENTI SOLO CARATTERI ALFABETICI
function only_character($fld_name, $fld_val) {
$reg_exp = '/^([a-zA-Z])+$/';
if(!preg_match($reg_exp, $fld_val)){
$this->setError("Non sono ammessi caratteri diversi da lettere nel campo '$fld_name'", $fld_name);
return false;
}
return true;
}
//CONTROLLO CHE NELLA STRINGA SIANO PRESENTI SOLO CARATTERI NUMERICI
function only_number($fld_name, $fld_val) {
$reg_exp = '/^([0-9])+$/';
if(!preg_match($reg_exp, $fld_val)){
$this->setError("Non sono ammessi caratteri diversi da numeri nel campo '$fld_name'", $fld_name);
return false;
}
return true;
}
//CONTROLLO CHE L'USERNAME INSERITA NON SIA GIÀ PRESENTE IN ARCHIVIO
function uniqueField($fld, $fld_name, $fld_val) {
if(!$this->_connect()) {
return false;
}
$sql = "SELECT count(*) FROM utenti " .
"WHERE $fld_name = '" . mysql_real_escape_string($fld_val, $this->conn) . "'";
$r = mysql_query($sql, $this->conn);
if(!$r) {
$this->setError(mysql_error());
return false;
}
if(mysql_result($r, 0) > 0) {
$this->setError("$fld già esistente", $fld_name);
return false;
}
return true;
}
//CONTROLLO CHE DUE STRINGHE SIANO UGUALI
function equals($fld_name, $fld_val, $fld_val2) {
if($fld_val != $fld_val2){
return false;
}
return true;
}
//CONTROLLO CHE LA STRINGA NON SIA PIÙ LUNGA DEL VALORE PASSATO COME SECONDO PARAMETRO
function check_lenght_tel($fld_name, $fld_val, $lenght) {
if(strlen($fld_val) != $lenght){
$this->setError("Numero di telefono di lunghezza non prevista", $fld_name);
return false;
}
return true;
}
//CONTROLLO CHE LA STRINGA NON SIA PIÙ LUNGA DEL VALORE PASSATO COME SECONDO PARAMETRO
function check_lenght($fld_name, $fld_val, $lenght) {
if(strlen($fld_val) > $lenght){
$this->setError("La stringa inserita supera la lunghezza massima prevista", $fld_name);
return false;
}
return true;
}
//RECUPERO FIELD
function get($fld) {
if(isset($this->fields[$fld])) {
return $this->fields[$fld];
}
}
//SETTO GLI ERRORI
function setError($errmsg, $dest= 'info') {
$this->errors[$dest] = $errmsg;
}
//SETTO GLI INFO
function setInfo($infoMsg, $dest= 'info') {
$this->info[$dest] = $infoMsg;
}
//RECUPERO ERRORI
function getErrors() {
return $this->errors;
}
//RECUPERO INFO
function getInfo() {
return $this->info;
}
//METODO CHE GESTISCE LA CONNESSIONE
function _connect() {
if(!$conn = @mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)) {
$this->setError(mysql_error());
return false;
}
if(!mysql_select_db(DB_NAME)) {
$this->setError(mysql_error());
return false;
}
$this->conn = $conn;
return true;
}
}
?>