That's my code. I always use jquery for instant registration without refreshing page, so my code is composed of 3 parts.
The html form, the javascript that performs the validation (also check if username and email are already used) and the php that performs registration process. After registration user will redirect to profile page with welcome message.
There are some code lines you probably don't need but you can easily clean...simple php.
Note: because of jquery you cannot have the php code inside PW folders so i have an external folder called "process" with all my php files called by jquery at the same level of "site" folder, in this case "/process/register.php".
P.S.: i'm using jquery validate plugin for validation.
FORM
<script type="text/javascript" src="/site/templates/scripts/register.js"></script>
<div class="row">
<div class="span16">
<fieldset>
<legend></legend>
<form action='/iscrizione/' method='post' id="registerform">
<div class="clearfix"><label for="login_name">Username</label><div class="input"><input type="text" id="login_name" name="login_name" value="" maxlength="50" /></div></div>
<div class="clearfix"><label for="login_pass">Password</label><div class="input"><input type="password" id="login_pass" name="login_pass" value="" /></div></div>
<div class="clearfix"><label for="confirm_pass">Ripeti password</label><div class="input"><input type="password" name="confirm_pass" value="" /></div></div>
<div class="clearfix"><label for="email">Email</label><div class="input"><input type="text" name="email" id="email" value="" maxlength="40" /></div></div>
<div class="actions">
<input type="submit" value="Iscriviti" class="btn primary" name="register_submit" id="register_submit" />
</div>
</form>
</fieldset>
</div>
</div>
JS
$(document).ready(function(){
$("#registerform").validate({
debug: false,
rules: {
login_name: {
required: true,
minlength: 6,
remote: "/process/username.php"
},
login_pass: {
required: true,
minlength: 6
},
confirm_pass: {
required: true,
minlength: 6,
equalTo: "#login_pass"
},
email: {
required: true,
email: true,
remote: "/process/emails.php"
}
},
messages: {
login_name: {
required: "Inserisci il tuo username",
minlength: jQuery.format("Inserisci almeno {0} caratteri"),
remote: jQuery.validator.format("Lo username {0} non è disponibile.")
},
login_pass: {
required: "Inserisci la password",
minlength: jQuery.format("Inserisci almeno {0} caratteri")
},
confirm_pass: {
required: "Ripeti la password",
minlength: jQuery.format("Inserisci almeno {0} caratteri"),
equalTo: "Le password non sono uguali"
},
email: {
required: true,
email: "Inserisci una email valida",
remote: jQuery.validator.format("Questa email è già presente nel nostro database.")
},
},
submitHandler: function(form) {
$("#register_submit").attr('value','Attendi...');
$("#register_submit").attr('disabled', 'disabled');
$.post('/process/register.php', $("#registerform").serialize(), function(data) {
if (data=='success'){
var url = "/mioprofilo/";
$(location).attr('href',url);
}else{
$(".span16").prepend(
$(data).hide().fadeIn('slow')
);
$(".error").fadeOut(5000);
$("#register_submit").attr('value','Iscriviti');
$("#register_submit").removeAttr('disabled');
}
});
}
});
});
PHP
<?php
require_once('../index.php');
require_once('class.tempmail.php');
$input = wire('input');
$sanitizer = wire('sanitizer');
$roles = wire('roles');
if($input->post->register_submit) {
$username = $sanitizer->username($input->post->login_name);
$pass = $input->post->login_pass;
$email = $sanitizer->email($input->post->email);
$u = new User();
$u->name = $username;
$u->pass = $pass;
$u->email = $email;
$u->roles->add($roles->get("guest"));
$u->roles->add($roles->get("utente-basic")); // my custom role
$u->save();
// i add profile picture to every user after registration using 5 different random avatar images.
$pnum = rand(0,5);
$profilephoto = wire('config')->paths->root."site/templates/styles/images/noprofile".$pnum.".jpg";
$u->profilephoto->add($profilephoto);
$u->profilethumb->add($profilephoto);
$u->save();
if (wire('session')->login($username, $pass)){
$array_content[]=array("username", $username);
$array_content[]=array("login", $username);
$array_content[]=array("password", $pass);
$admin_id = "noreply@domain.com";
$user_email = $email;
sendingemail_phpmailer($array_content, "register.html","class.phpmailer.php","Sitename",$admin_id,$user_email,"Welcome to website");
print "success";
}else{
print '<div class="alert-message error">
<p>Errore durante la registrazione. Riprova.</p>
</div>';
}
}
?>
Code for checking the existing email (or username, same code, just change variable)
<?php
require_once('../index.php');
$email = trim(strtolower($_REQUEST['email']));
$sql_check=wire('users')->find("email=$email");
if($sql_check<>""){
echo 'false';
}else{
echo 'true';
}
?>
And that's the login
HTML FORM
<?php if ($session->get("_user_id")){
$session->redirect('/');
} ?>
<? include('./head.inc'); ?>
<div class="topbar">
<div class="fill">
<div class="container">
<h3><a href="/">Sitename</a></h3>
<ul class="nav">
<li class="active"><a href="/">Login</a></li>
</ul>
</div>
</div>
</div>
<br><br><br>
<script type="text/javascript" src="/site/templates/scripts/login.js"></script>
<div class="container">
<div class="content">
<div class="page-header">
<h1><?php echo $page->title; ?><small> effettua l'accesso</small></h1>
</div>
<div class="row">
<div class="span16">
<fieldset id="formlogin">
<legend>Login</legend>
<form action='/login/' method='post' id="loginform">
<div class="clearfix"><label for="login_name">Username</label><div class="input"><input type="text" name="login_name" value="" class="required" /></div></div>
<div class="clearfix"><label for="login_pass">Password</label><div class="input"><input type="password" name="login_pass" value="" class="required" /></div></div>
<div class="actions">
<input type="submit" value="Accedi" class="btn primary" name="login_submit" id="login_submit" />
</div>
</form>
</fieldset>
</div>
</div>
</div>
<? include('./foot.inc'); ?>
</div> <!-- /container -->
</body>
</html>
JS
$(document).ready(function(){
$("#loginform").validate({
debug: false,
rules: {
login_name: {
required: true
},
login_pass: {
required: true
}
},
messages: {
login_name: "Inserisci il tuo username",
login_pass: "Inserisci la password",
},
submitHandler: function(form) {
$("#login_submit").attr('value','Sto accedendo...');
$("#login_submit").attr('disabled', 'disabled');
$.post('/process/login.php', $("#loginform").serialize(), function(data) {
if (data=='success'){
var url = "/";
$(location).attr('href',url);
}else{
$(".span16").prepend(
$(data).hide().fadeIn('slow')
);
$(".error").fadeOut(5000);
$("#login_submit").attr('value','Accedi');
$("#login_submit").removeAttr('disabled');
}
});
}
});
});
PHP
<?php
require_once('../index.php');
$input = wire('input');
if($input->post->login_submit) {
$name = wire('sanitizer')->username($input->post->login_name);
$pass = $input->post->login_pass;
if(wire('session')->login($name, $pass)){
print 'success';
}else{
print '<div class="alert-message error">
<p>Dati non validi. Riprova</p>
</div>';
}
}
?>
After registration i send a welcome email.
That's the tempmail php that use the well known phpmailer class for sending emails adding templating functionality. You need to download the class.phpmailer.php from the web.
<?
function sendingemail_phpmailer ($var_array,$template,$phpmailer,$FromName,$From,$to,$Subject,$videolist){
if (!is_array($var_array)){
echo "first variable should be an array. ITS NOT !";
exit;
}
require_once($phpmailer);
$mail = new PHPMailer();
$mail->IsSendmail(); // telling the class to use SMTP
$mail->Host = ""; // SMTP server
$mail->FromName = $FromName;
$mail->Sender = $FromName;
$mail->From = $From;
$mail->AddAddress($to);
$mail->Subject = $Subject;
$mail->IsHTML(true);
$filename = $template;
$fd = fopen ($filename, "r");
$mailcontent = fread ($fd, filesize ($filename));
foreach ($var_array as $key=>$value){
$mailcontent = str_replace("%%$value[0]%%", $value[1],$mailcontent );
}
$mailcontent = stripslashes($mailcontent);
fclose ($fd);
$mail->Body=$mailcontent;
if(!$mail->Send()){
echo "Errore durante l'invio del messaggio";
exit;
}
}
?>