Kamis, 24 Januari 2013

Membuat aplikasi registrasi dengan aktivasi email menggunakan PHP.

Ketika mendaftar untuk website, forum, membuat email dan lain-lain. pertama-tama adalah melakukan registrasi dan hasil registrasi akan dikirim email sebagai konfirmasi registrasi untuk melakukan pengaktifan akun. metode ini sudah banyak digunakan hampir diseluruh website.

Berikut sedikit tutorial dalam membuat Aplikasi registrasi dengan aktivasi email menggunakan PHP. Agar aplikasi ini dapat berjalan dengan baik, maka dibutuhkan beberapa syarat yaitu, server suport PHP mailer, tentunya harus kondisi online dan kalau ada warning ganti setting php.ini display_error = off. Langkah-langkah sebagai berikut :


1 Membuat struktur database
diperlukan database untuk menyimpan informasi user :
CREATE TABLE IF NOT EXISTS `anggota` (
  `id_anggota` int(10) NOT NULL AUTO_INCREMENT,
  `Username` varchar(50) NOT NULL,
  `Email` varchar(50) NOT NULL,
  `Password` varchar(10) NOT NULL,
  `Aktivasi` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id_anggota`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

2. Membuat database koneksi dan beberapa konfigurasi untuk mengirim email dan aktivasi :
<?php

/*setting untuk koneksi ke database */
DEFINE('DATABASE_USER', 'username_database');
DEFINE('DATABASE_PASSWORD', 'password_database');
DEFINE('DATABASE_HOST', 'localhost');
DEFINE('DATABASE_NAME', 'nama_database');
/*setting default time zone untuk dapat mengirimm email */
date_default_timezone_set('UTC');

//menetukan pengirim email
define('EMAIL', 'sesuatu@webanda.com');

/*menentuk root url dari script php yang dibuat http://website.com atau http://website.com/Folder/ */
DEFINE('WEBSITE_URL', 'http://localhost/registrasi');


// membuat koneksi ke database
$dbc = @mysqli_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASSWORD,
    DATABASE_NAME);

if (!$dbc) {
    trigger_error('koneksi tidak sukses: ' . mysqli_connect_error());
}

?>

3. Membuat Form isian registrasi :
<form action="index.php" method="post" class="registration_form">
  <fieldset>
    <legend>From Registrasi </legend>

    <p>Buat akun baru <span style="background:#EAEAEA none repeat scroll 0 0;line-height:1;margin-left:210px;;padding:5px 7px;">Apakah sudah terdaftar? <a href="login.php">Log in</a></span> </p>
    
    <div class="elements">
      <label for="name">Nama :</label>
      <input type="text" id="name" name="name" size="25" />
    </div>
    <div class="elements">
      <label for="e-mail">E-mail :</label>
      <input type="text" id="e-mail" name="e-mail" size="25" />
    </div>
    <div class="elements">
      <label for="Password">Password:</label>
      <input type="password" id="Password" name="Password" size="25" />
    </div>
    <div class="submit">
     <input type="hidden" name="formsubmitted" value="TRUE" />
      <input type="submit" value="Register" />
    </div>
  </fieldset>
</form>
</body>

4. Membuat aturan-aturan dalam pengisian form registrasi, membuat link aktivasi dan mengirim email konfirmasi.
<?php
    session_start();
    if(isset($_SESSION['Username'])){
     header("Location: page.php");
 }
 
include ('database_connection.php');
if (isset($_POST['formsubmitted'])) {
    $error = array();//buat array untuk menampung pesan eror  
    if (empty($_POST['name'])) {//jika variabel nama kosong 
        $error[] = 'Silahkan masukkan nama ';//tambahkan ke array sebagai pesan error
    } else {
        $name = $_POST['name'];//jika ada maka masukan isi dari variabel nama
    }

    if (empty($_POST['e-mail'])) {
        $error[] = 'Please Enter your Email ';
    } else {


        if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_POST['e-mail'])) {
           //regular expression untuk validasi email
            $Email = $_POST['e-mail'];
        } else {
             $error[] = 'Email tidak valid';
        }


    }


    if (empty($_POST['Password'])) {
        $error[] = 'Silahkan masukkan password ';
    } else {
        $Password = $_POST['Password'];
    }


    if (empty($error)) //kirim ke database jika tidak ada eror

    { 

        // memastikan apakah email sudah ada di database atau belum
        $query_verify_email = "SELECT * FROM anggota  WHERE Email ='$Email'";
        $result_verify_email = mysqli_query($dbc, $query_verify_email);
        if (!$result_verify_email) {//if the Query Failed ,similar to if($result_verify_email==false)
            echo ' Terjadi eror pada database ';
        }

        if (mysqli_num_rows($result_verify_email) == 0) { // Jika tidak ada user lain yang teregistrasi telah menggunakan email ini


            // membuat kode aktivasi
            $activation = md5(uniqid(rand(), true));


            $query_insert_user = "INSERT INTO `anggota` ( `Username`, `Email`, `Password`, `Aktivasi`) VALUES ( '$name', '$Email', '$Password', '$activation')";


            $result_insert_user = mysqli_query($dbc, $query_insert_user);
            if (!$result_insert_user) {
                echo 'Query Failed ';
            }

            if (mysqli_affected_rows($dbc) == 1) { //Jika data yang dimasukan ke database sukses


                // kirim email
    $message = "Terimakasih sudah mencoba demo "Membuat aplikasi registrasi dengan aktivasi email menggunakan PHP." nn";
    $message .= " Untuk aktivasi contoh akun anda, silahkan klik link di bawah ini:nn";
                $message .= WEBSITE_URL . '/activate.php?email=' . urlencode($Email) . "&key=$activation";
                mail($Email, 'Registration Confirmation', $message, 'From: sesuatu@webanda.com');

                


                // Jika registrasi berhasil dan email telah terkirim
                echo '<div class="success">Terimakasih telah melakukan registrasi di demo ini, sebuah email telah dikirim ke '.$Email.' Silahkan klik pada link aktivasi untuk mengaktivkan account anda </div>';


            } else { // Jika terjadi kesalahan maka : 
                echo '<div class="errormsgbox">Tidak dapat melakukan registrasi karena kesalahan system</div>';
            }

        } else { // email addres telah terdaftar
            echo '<div class="errormsgbox" >email yang anda masukkan telah teregistrasi
</div>';
        }

    } else {//Jika terdapat kesalahan pada array error maka tampilkan
        
        

echo '<div class="errormsgbox"> <ol>';
        foreach ($error as $key => $values) {
            
            echo ' <li>'.$values.'</li>';


       
        }
        echo '</ol></div>';

    }
  
    mysqli_close($dbc);//Tutup koneksi database

}



?>

5. membuat program PHP untuk melakuka pengaktifan akun jika link aktivasi yang dikirim dalam email di klik :
<?php
include ('database_connection.php');

if (isset($_GET['email']) && preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/', $_GET['email']))
{
    $email = $_GET['email'];
}
if (isset($_GET['key']) && (strlen($_GET['key']) == 32))
{
    $key = $_GET['key'];
}


if (isset($email) && isset($key))
{

    // Update databse untuk menset isi aktivasi ke "NULL" 

    $query_activate_account = "UPDATE anggota SET Aktivasi=NULL WHERE(Email ='$email' AND Aktivasi='$key')LIMIT 1";

   
    $result_activate_account = mysqli_query($dbc, $query_activate_account) ;

   
    if (mysqli_affected_rows($dbc) == 1)//Jika proses update telah berhasil
    {
    echo '<div class="success">Akun anda telah aktive, untuk masuk klik <a href="login.php">Log in</a></div>';

    } else
    {
        echo '<div class="errormsgbox">'.$email .' , ' . $key .' Ooops akun anda tidak dapat diaktivasi. silahkan lakukan registrasi ulang atau hubungi administrator.</div>';

    }

    mysqli_close($dbc);

} else {
        echo '<div class="errormsgbox">Terjadi kesalahan.</div>';
}


?>

6. Membuat Form Login jika user telah terkativasi, dan ingin masuk ke halaman member:
<form action="login.php" method="post" class="registration_form">
  <fieldset>
    <legend>Form Login  </legend>

    <p>Masukkan username dan password anda  </p>
    
    <div class="elements">
      <label for="name">Email :</label>
      <input type="text" id="e-mail" name="e-mail" size="25" />
    </div>
  
    <div class="elements">
      <label for="Password">Password:</label>
      <input type="password" id="Password" name="Password" size="25" />
    </div>
    <div class="submit">
     <input type="hidden" name="formsubmitted" value="TRUE" />
      <label>Jika belum memiliki akun <a href="index.php">Buat Akun</a></label><input type="submit" value="Login" />
    </div>
  </fieldset>
</form>

7. Membuat program PHP untuk melakuka proses login ke halaman member :
<?php
session_start();
    if(isset($_SESSION['Username'])){
     header("Location: page.php");
 }


include ('database_connection.php');
if (isset($_POST['formsubmitted'])) {
    // Mulai session
session_start();
    $error = array();//buat array untuk simpan pesan kesalahan
  

    if (empty($_POST['e-mail'])) {//jika email kosonh
        $error[] = 'Silahkan isi email anda ';
    } else {


        if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_POST['e-mail'])) {
           
            $Email = $_POST['e-mail'];
        } else {
             $error[] = 'Email anda tidak valid  ';
        }


    }


    if (empty($_POST['Password'])) {
        $error[] = 'Silahkan masukkan password anda ';
    } else {
        $Password = $_POST['Password'];
    }


       if (empty($error))//Jika array kosong, berarti tidak ada kesalahan
    { 

       

        $query_check_credentials = "SELECT * FROM anggota WHERE (Email='$Email' AND password='$Password') AND Aktivasi IS NULL";
   
        

        $result_check_credentials = mysqli_query($dbc, $query_check_credentials);
        if(!$result_check_credentials){//Jika query gagal
            echo 'Query Failed ';
        }

        if (@mysqli_num_rows($result_check_credentials) == 1)//Jika query berhasil
        { 

           


            $_SESSION = mysqli_fetch_array($result_check_credentials, MYSQLI_ASSOC);//Masukkan hasil ke session
           
            header("Location: page.php");
          

        }else
        { 
            
            $msg_error= 'Mungkin akun anda belum dikativasi atau alamat Email/password salah';
        }

    }  else {
        
        

echo '<div class="errormsgbox"> <ol>';
        foreach ($error as $key => $values) {
            
            echo ' <li>'.$values.'</li>';


       
        }
        echo '</ol></div>';

    }
    
    
    if(isset($msg_error)){
        
        echo '<div class="warning">'.$msg_error.' </div>';
    }
    
    mysqli_close($dbc);

} 
?>

7. Membuat halaman member jika berhasil melakukan proses login untuk halaman ini sesuai dengan kebutuhan anda, pertama harus dicek apakah username sudah login tau belum jika belum arahkan ke halaman login :
<?php
 ob_start();
    session_start();
    if(!isset($_SESSION['Username'])){
         header("Location: login.php");
    }
    
    
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Member Area </title>
<style type="text/css">
 .success {
 border: 1px solid;
 margin: 0 auto;
 padding:10px 5px 10px 60px;
 background-repeat: no-repeat;
 background-position: 10px center;
     font-weight:bold;
     width:450px;
     color: #4F8A10;
 background-color: #DFF2BF;
 background-image:url('images/success.png');
     
}



</style>
</head>

<body>
<div class="success">Selamat datang , <?php echo $_SESSION['Username'] ; ?><br /><a href="logout.php">Logout</a></div>
</body>
</html>

8. Membuat program PHP untuk proses logout, dimana cek session username apakah ada, kalau ada session dihapus dan arahkan ke index.php:
<?php
// Inialize session
session_start();

if(isSet($_SESSION['Username']))
{
  unset($_SESSION['Username']);

  header("Location: index.php");
exit;
}else{
  header('Location: index.php');
}
?>

Untuk melihat hasil dari program registrasi diatas dapat dilihat disini.
Demikian tutorial mengenai pembuatan registrasi dengan validasi email menggunakan PHP, diatas merupakan penggalan dari program keseluruhan, Untuk program lengkapnya dapat didownload disini.

Aplikasi ini dapat mengirim email jika menggunakan freehosting, jika ingin menggunakan webserver local (xampp)berikut referensi tentang mengirim email menggunakan php dengan PHPmailer.

Hubungi saya

Nama

Email *

Pesan *



* maaf buat teman-teman yang belum di respons komentarnya di disqus (karena penullisnys sok sibuk sie...), bisa hubungi lewat sini ya...

Tentang Blog

Banyak sekali informasi-informasi tentang dunia TI (Teknologi Informasi) yang sekarang merupakan sebuah kebutuhan yang boleh dibilang sudah menjadi kebutuhan utama dalam pekerjaan. Tetapi teknologi juga sering digunakan untuk kepentingan yang merugikan orang lain, misal carding, cracking, dan lain-lain. Dengan internet saya mendapat banyak sekali masukkan yang membangun, dengan blog ini saya ingin berbagi pengalaman tentang ilmu komputer yang saya dapat.

Penulis

authorHallo, Nama saya Andreas Thedy Feriyanto.