E' solo un inizio
Ci occorrono quattro pagine:
registrazione.php
conterra il form di registrazione e le funzioni javascript per le chiamate ajax
style.css
un po di stile
checkform.php
la pagina richiamata da ajax per i controlli
users.class.php
la classe puo essere implementata con tutti i metodi per la gestione degli utenti
un esempio online per vedere come funziona ( username gia presenti : criric , borgoitalia)
come sempre sono ben accettati consigli per migliorare il codice
ps
appena riesco a capire come caricare uno zip magari vi allego i file
Ci occorrono quattro pagine:
registrazione.php
conterra il form di registrazione e le funzioni javascript per le chiamate ajax
PHP:
<?php
// se premuto il pulsante registrati
if (isset($_POST['register']) && $_POST['register'] == "Registrati") {
// richiamo la classe
require_once 'users.class.php';
// istanza della classe
$users = new userClass();
// elimino il post del submit
unset($_POST['register']);
// richiamo la registrazione
$registrazione = $users->registrazione($_POST);
// stampo il risultato
echo $registrazione;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Esempio validazione form ajax php</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="style.css"/>
<script type="text/javascript">
$("document").ready(function() {
// disattivo il pulsante del submit
$("#submit").attr("disabled",true);
// chiamata ajax sugli eventi keyup e blur
$(".check").bind("keyup blur",function(){
$.ajax({
type: "POST",
url: "checkform.php",
data: $("#form").serialize(),
success: function(response){
eval(response);
}
});
});
// informazioni per l'utente su come compilare il modulo
$(".check").focus(function(){
switch($(this).attr("name")) {
case "username":
var info = "La username deve contenere da 6 a 12 caratteri alfanumerici e non puo' essere gia' assegnata ad un altro utente";
break;
case "password":
var info = "La password deve contenere da 8 a 12 caratteri almeno un numero, una lettera maiuscola e una minuscola";
break;
default:
var info = "Compila il modulo per la registrazione <br/>I campi contrassegnati dall'asterisco sono obbligatori";
break;
}
$("#info").html(info);
});
});
</script>
</head>
<body>
<fieldset>
<legend>Modulo di registrazione</legend>
<form id="form" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<div id="info">
Compila il modulo per la registrazione <br/>I campi contrassegnati dall'asterisco sono obbligatori
</div>
<p>Username :</p>
<p>
<input class="check" type="text" name="username"/>
<span id="username">! - campo obbligatorio</span>
</p>
<p>Password :</p>
<p>
<input class="check" type="password" name="password"/>
<span id="password">! - campo obbligatorio</span>
</p>
<p>Ripeti password :</p>
<p>
<input class="check" type="password" name="r_password"/>
<span id="r_password">! - campo obbligatorio</span>
</p>
<p>
<input class="fright" type="submit" id="submit" name="register" value="Registrati"/>
</p>
</form>
</fieldset>
</body>
</html>
un po di stile
Codice:
html body {
font-family: Verdana;
font-size: .8em;
}
fieldset {
width: 330px;
padding:22px;
}
p {
margin:2px;
padding:3px;
}
.fright {
float: right;
}
p span {
color: #EE0D0D;
font-family: "Trebuchet MS";
font-weight: bold;
margin-left: 12px;
}
span.valid {
color:#5CC10C;
}
div#info {
margin-bottom: 12px;
}
la pagina richiamata da ajax per i controlli
PHP:
<?php
// richiamo classe users
require_once 'users.class.php';
// istanza classe users
$users = new userClass();
// inizializzo variabili per abilitazione submit
$u = $p = $r = false;
// se passata la stringa username
if (isset($_REQUEST['username'])) {
// se non è vuota
if (!empty($_REQUEST['username'])) {
// rimuovo l'eventuale classe assegnata
echo "$('#username').removeClass('valid');";
// verifica username
$checkUsername = $users->checkUsername($_REQUEST['username']);
if ($checkUsername === true) {
// username valida
$u = true;
echo "$('#username').addClass('valid');";
echo "$('#username').html('V - valida');";
} else {
// username non valida mostro il messaggio
echo "$('#username').html('$checkUsername');";
}
} else {
// la username è vuota avviso
echo "$('#username').html('! - campo obbligatorio');";
}
}
// se passata la stringa password
if (isset($_REQUEST['password'])) {
// se non è vuota
if (!empty($_REQUEST['password'])) {
// // rimuovo l'eventuale classe assegnata
echo "$('#password').removeClass('valid');";
$checkPassword = $users->checkPassword($_REQUEST['password']);
if ($checkPassword === true) {
// password valida
$p = true;
echo "$('#password').addClass('valid');";
echo "$('#password').html('V - valida');";
} else {
// password non valida mostro il messaggio
echo "$('#password').html('$checkPassword');";
}
} else {
// la password è vuota avviso
echo "$('#password').html('! - campo obbligatorio');";
}
}
// se passata la stringa r_password
if (isset($_REQUEST['r_password'])) {
// se non è vuota
if (!empty($_REQUEST['r_password'])) {
// rimuovo l'eventuale classe assegnata
echo "$('#r_password').removeClass('valid');";
if ($_REQUEST['r_password'] == $_REQUEST['password']) {
// r_password valida
$r = true;
echo "$('#r_password').addClass('valid');";
echo "$('#r_password').html('V - valida');";
} else {
// r_password non valida mostro il messaggio
echo "$('#r_password').html('non corrispondono');";
}
} else {
// la r_password è vuota avviso
echo "$('#r_password').html('! - campo obbligatorio');";
}
}
if ($u == true && $r == true && $p == true) {
// abilito il submit
echo "$('#submit').attr('disabled',false);";
} else {
// disabilito il submit
echo "$('#submit').attr('disabled',true);";
}
?>
la classe puo essere implementata con tutti i metodi per la gestione degli utenti
PHP:
<?php
/**
* Gestione utenti
*
* CriRic 12 giugno 2013
* Aggiunti metodi per il controllo della username e della password
* Iniziato il metodo per la registrazione dei dati
*
*/
class userClass {
var $sql;
/**
* Istanzia la classe mysqli
*/
public function __construct() {
// connetto al database cambiare parametri di connessione
$this->sql = new mysqli("localhost", "root", "", "database");
}
/**
* Chiude la connessione al database
*/
public function __destruct() {
// disconnetto dal database
$this->sql->close();
}
/**
* Se la username rispetta i seguenti parametri
* - da 6 a 12 caratteri alfanumerici
* - non deve essere gia presente nella tabella users
* il metodo restituirà true, altrimenti una stringa contenente il messaggio di errore
* @param type $username
* @return type true or string
*/
public function checkUsername($username) {
// pulizia stringa
$username = $this->protect($username);
// verifico lunghezza username
if (strlen($username) < 6) {
// la username è minore di 6 caratteri
return "! - min 6 chr";
} else if (strlen($username) > 12) {
// la username è maggiore di 12 caratteri
return "! - max 12 chr";
}
// verifico caratteri alfanumerici
if (!ctype_alnum($username)) {
return "! - chr alfanumerici";
}
// query di ricerca username
$query = "SELECT username FROM users WHERE username = '" . $username . "'";
// esecuzione query
$result = $this->sql->query($query);
// verifico presenza username
if (!$result || $result->num_rows > 0) {
// la query non è andata a buon fine o la username è già presente
return "! - non disponibile";
}
// username valida
return true;
}
/**
* Se la password rispetta i seguenti parametri
* - da 8 a 12 caratteri
* - almeno una lettera maiuscola
* - almeno una lettera minuscola
* - almeno un numero
* il metodo restituirà true, altrimenti una stringa contenente il messaggio di errore
* @param type $password
* @return type true or string
*/
public function checkPassword($password) {
// pulizia stringa
$password = $this->protect($password);
// verifico lunghezza username
if (strlen($password) < 8) {
// la password è minore di 8 caratteri
return "! - min 8 chr";
} else if (strlen($password) > 12) {
// la password è maggiore di 12 caratteri
return "! - max 12 chr";
}
// espressione regolare
if (!preg_match("/^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $password)) {
return "! - chr non validi";
}
// password valida
return true;
}
/**
* NON FINITO
* Prende come parametro l'intero POST del submit
* rielabora i dati ricevuti e prepara la registrazione dell'utente
* se tutto va a buon fine il metodo restituisce true altrimenti una stringa contenente l'errore
* @param type $post
* @return type true or string
*/
public function registrazione($post) {
// ciclo del post
foreach ($post as $key => $value) {
// creazione variabile e pulizia stringa
${$key} = $this->protect($value);
}
// verifico username
$checkUsername = $this->checkUsername($username);
if ($checkUsername !== true) {
return $checkUsername;
}
// verifico password
$checkPassword = $this->checkPassword($password);
if ($checkPassword !== true) {
return $checkPassword;
}
// query di inserimento nuovo utente
$query = "INSERT INTO users SET username = '$username', password = '" . md5($password) . "'";
// restituzione elaborazione
return $query . " <br/>Tutto OK <br/>Per ora mi fermo qui";
}
/**
* Accetta una stringa elimina i tag HTML e restituisc l'escape
* @param type $string
* @return type $string
*/
private function protect($string) {
// pulizia tag html
$string = strip_tags($string);
// restituzione escape stringa
return $this->sql->real_escape_string($string);
}
}
?>
come sempre sono ben accettati consigli per migliorare il codice
ps
appena riesco a capire come caricare uno zip magari vi allego i file
Ultima modifica di un moderatore: