menu

Laravel - Tutorial Java Script 2 (Hide and Show Class)


Java Script memang benar-benar sangat mengasyikan, ada banyak sekali yang akan kita bahas pada Java Script sehingga codedoct.com akan membahasnya pada satu chapter full pada Laravel.

Jika pada tutorial kemarin kita sudah belajar cara hide and show pada JS, kali ini kita akan memanipulasi Class pada JS untuk keperluan hide and show.

Oke langsung saja kita mulai prakteknya.

Pertama, buat dulu route baru untuk halaman ini dengan mengedit file web.php pada path protected/app/routes/ menjadi seperti ini,
.
.
.
Route::group(array('prefix' => 'javaScript'), function(){
 Route::get('js1', 'Controller\belajar_js\Js1Controller@Index');
 Route::get('js2', 'Controller\belajar_js\Js2Controller@Index');
});
.
.
.

Selanjutnya, buat controller baru dengan nama js2Controller.php pada path protected/app/controllers/belajar_js/ isi dengan code berikut,
<?php namespace Controller\belajar_js;

use \View;
use Model\User;

Class Js2Controller Extends \BaseController
{
 public function Index()
 {
  $users = User::all();

  $content['users'] = $users;

  return View::make('web/java-script2')
     ->with('content', $content);
 }
}

Jangan lupa compile file composer lihat disini pada bab composer.

Kemudian buat file view baru dengan nama java-script2.blade.php pada path protected/app/views/web/ isi dengan code berikut,
@extends('layouts/web/master')

<?php $title = 'Java Script 2' ?>

@section('style')
 {{ HTML::style('public/css/content/belajar_js/js2.css') }}
@stop

@section('script')
 {{ HTML::script('public/js/js2.js') }}
@stop

@section('content')
<div class="isi">
 <h4>Belajar java script 2</h4>
 <br>
 <label>Hide and Show Class</label>
 <br><br>
 <div class="user-list">
  @if($content['users'])
   @foreach($content['users'] as $user)
    {{ Form::open(array('url' => 'crud/update/'.$user['id'])) }}
    <div class="box-user">
     <table>
      <tbody class="showing">
       <tr>
        <td>Name</td><td>:</td><td>{{ $user['name'] }}</td>
       </tr>
       <tr>
        <td>Username</td><td>:</td><td>{{ $user['username'] }}</td>
       </tr>
       <tr>
        <td>Email</td><td>:</td><td>{{ $user['email'] }}</td>
       </tr>
      </tbody>
      <tbody class="editing hidden">
       <tr>
        <td>Name</td><td>:</td><td><input type="text" name="name" value="{{ $user['name'] }}"></td>
       </tr>
       <tr>
        <td>Username</td><td>:</td><td><input type="text" name="username" value="{{ $user['username'] }}"></td>
       </tr>
       <tr>
        <td>Email</td><td>:</td><td><input type="text" name="email" value="{{ $user['email'] }}"></td>
       </tr>
      </tbody>
     </table>
     <div class="tombol">
      <div class="edit">
       <button type="button" onclick="edit(this, event)">Edit</button>
      </div>
      <div class="save hidden">
       <button type="button" onclick="back(this, event)">Return</button>
       <input type="submit" class="btn" value="Save">
      </div>
     </div>
    </div>
    {{ Form::close() }}
   @endforeach
  @else
   <label>Data user empty ...</label>
  @endif
 </div>
</div>
@stop

Setelah itu buat file js baru dengan nama js2.js pada path public/js/ isi dengan code berikut,
function edit(button,event)
{
 var e = event || window.event;

 e.preventDefault();

 $(button).closest('.tombol').find('.edit').addClass('hidden');
 $(button).closest('.box-user').find('.showing').addClass('hidden');

 $(button).closest('.tombol').find('.save').removeClass('hidden');
 $(button).closest('.box-user').find('.editing').removeClass('hidden');
}
function back(button,event)
{
 var e = event || window.event;

 e.preventDefault();

 $(button).closest('.tombol').find('.save').addClass('hidden');
 $(button).closest('.box-user').find('.editing').addClass('hidden');

 $(button).closest('.tombol').find('.edit').removeClass('hidden');
 $(button).closest('.box-user').find('.showing').removeClass('hidden');
}

Buat file sass baru dengan nama js2.scss pada path public/css/content/belajar_js/ isi dengan code berikut,
.user-list{
 width: 350px;
 margin: 0 60px;
 .box-user{
  background-color: #F3F5F7;
  border: 1px solid #ddd;
  border-radius: 2px;
  margin-bottom: 30px;
  padding: 20px;
  .tombol{
   margin-top: 10px;
   text-align: right;
  }
 }
}

Dan edit pula file sass main.scss dengan menambahkan code berikut,
.
.
.
.hidden{
 display: none;
}
.
.
.

Jangan lupa untuk mengcompile file sass lihat disini.

Terakhir edit file header.blade.php pada path protected/app/views/layouts/web/ tambahkan code berikut,
    <div class="dropdown">
      <button class="button">Menu(css)</button>
      <div class="dropdown-content">
        <a href="{{ URL::to('crud/users')}}">User</a>
        <a href="{{ URL::to('book')}}">Index Book</a>
        <a href="{{ URL::to('javaScript/js1')}}">Belajar Script</a>
        <a href="{{ URL::to('javaScript/js2')}}">Belajar Script2</a>
      </div>
    </div>


Sehingga tampilannya akan tampak seperti ini




===DONE!===

Laravel - Tutorial Java Script (Hide and Show Dropdown)


Akhirnya kita sampai pada chapter laravel yang ke-4.

Pada chapter 4 ini kita akan lebih banyak membahas tentang Java Script, karena menurut saya dengan menggabungkan sebuah project website php dengan Java Script akan membuat website tersebut jauh lebih dinamis dan menarik untuk dilihat.

Pada Bab pertama Laravel chapter 4 ini saja akan memberikan tutorial tentang membuat sebuah program hide and show dropdown dengan menggunakan Java Script.

Program hide and show dropdown ini sangat berguna misalnya dalam membuat index halaman sebuah website contohnya bisa lihat disini.

Oke langsung saja kita praktekan tutorialnya,

Pertama, buat routes baru untuk tutorial ini dengan mengedit file web.php pada path protected/app/routes/ menjadi seperti ini,
/////////////////
// java script //
/////////////////
Route::group(array('prefix' => 'javaScript'), function(){
 Route::get('js1', 'Controller\belajar_js\Js1Controller@Index');
});

Selanjutnya, buat controller baru dengan nama js1Controller.php pada path protected/app/controllers/belajar_js isi dengan code berikut,
<?php namespace Controller\belajar_js;

use \View;

Class Js1Controller Extends \BaseController
{
 public function Index()
 {
  return View::make('web/java-script1');
 }
}

Jangan lupa untuk mengcompile composer nya

Kemudian, buat file view baru dengan nama java-script1.blade.php pada path protected/app/views/web isi dengan code berikut,
@extends('layouts/web/master')

<?php $title = 'Java Script' ?>

@section('style')
 {{ HTML::style('public/css/content/js-satu.css') }}
@stop

@section('script')
 {{ HTML::script('public/js/js1.js') }}
@stop

@section('content')
<div class="isi">
 <h4>Belajar java script 1</h4>
 <br>
 <label>Hide and Show</label>
 <ul>
  <a href="#" style="display: none;" class="dropdownHide" onclick="dropdownHide(this,event)">Dropdown Link</a>
  <a href="#" class="dropdownShow" onclick="dropdownShow(this,event)">Dropdown Link</a>
  <ul style="display: none;" class="dropdown">
   <li>Test 1</li>
   <li>Test 2</li>
   <li>Test 3</li>
  </ul>
 </ul>
</div>
@stop

Setelah itu buat file js baru dengan nama js1.js pada path public/js/js1.js isi dengan code berikut
function dropdownShow(button,event)
{
 var e = event || window.event;

 e.preventDefault();

 $(button).closest('.isi').find('.dropdownHide').show();
 $(button).hide();
 $(button).closest('.isi').find('.dropdown').show(200);
}
function dropdownHide(button,event)
{
 var e = event || window.event;

 e.preventDefault();

 $(button).closest('.isi').find('.dropdownShow').show();
 $(button).hide();
 $(button).closest('.isi').find('.dropdown').hide(200);
}

Terakhir edit file header.blade.php dan master.blade.php pada path protected/app/views/layouts/web tambahkan code berikut
- header.blade.php
.
.
.
    <div class="dropdown">
      <button class="button">Menu(css)</button>
      <div class="dropdown-content">
        <a href="{{ URL::to('crud/users')}}">User</a>
        <a href="{{ URL::to('book')}}">Index Book</a>
        <a href="{{ URL::to('javaScript/js1')}}">Belajar Script</a>
      </div>
    </div>
.
.
.

- master.blade.php
.
.
.
 <!-- Custom Scripts -->
 @section('script')
 @show
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
.
.
.

Sehingga tampilannya akan tampak seperti ini,


===DONE!===

Laravel - Membuat halaman buku


Akhirnya kita sampai pada halaman terakhir pada chapter 3 Laravel, kali ini saya akan membagikan sebuah tutorial untuk membuat sebuah halaman buku pada website laravel menggunakan script.

Tutorial ini sangat berguna saat kita akan membuat sebuah halaman yang penuh dengan text, dan untuk mempermudah user dalam navigasi halaman tersebut maka harus dibuat sebuah link pada daftar isi agar saat link diklik akan langsung menuju bab atau bagian yang ingin dibaca tanpa harus scroll manual.

Oke langsung saja kita mulai tutorialnya,

Pertama, buat root baru pada path protected/app/routes/web.php dengan menambahkan code dibawah pada file web.php
.
.
.
//////////
// BOOK //
//////////
Route::get('book', 'Controller\BookController@Index');

Selanjutnya buat controller baru dengan nama BookController.php pada path protected/app/controllers/ dan isikan code berikut,
<?php namespace Controller;

use \View;

Class BookController Extends \BaseController
{
 Public function Index()
 {
  return View::make('book');
 }
}

Jangan lupa setelah membuat class baru kita harus mengcompilenya dengan cara,
masuk ke path protected terlebih dahulu kemudian ketikan syntax.
php composer.phar dump-autoload

Kemudian edit sedikit file master.blade.php pada path protected/app/views/layouts/web/ menjadi seperti ini,
<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 
 <title>
  @if($title)
   {{ $title }}
  @else
   Codedoct.com
  @endif
 </title>

 <!-- Custom Style -->
 @section('style')
 @show
 {{ HTML::style('public/css/master/main.css') }}

 <!-- Custom Scripts -->
 @section('script')
 @show

</head>
<body>
 @include('layouts.web.header')
 @yield('content')
 @include('layouts.web.footer')
</body>
</html>

Setelah itu buat file view baru dengan nama book.blade.php pada path protected/app/views/book.blade.php isikan code berikut,
@extends('layouts/web/master')

<?php $title = "Book" ?>

@section('style')
 {{ HTML::style('public/css/book.css') }}
@stop

@section('script')
 <script>
 //offset anchor tags with fixed header and smooth scroll
 $(function() {
   $('a[href*=#]:not([href=#])').click(function() {
     if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') 
 && location.hostname == this.hostname) {

       var target = $(this.hash);
       target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
       if (target.length) {
         $('html,body').animate({
           scrollTop: target.offset().top - 60 //offset height
         }, 500);
         return false;
       }
     }
   });
   //Executed on page load with URL containing an anchor tag.
   if($(location.href.split("#")[1])) {
       var target = $('#'+location.href.split("#")[1]);
       if (target.length) {
         $('html,body').animate({
           scrollTop: target.offset().top - 60 //offset height
         }, 500);
         return false;
       }
     }
 });

 </script>
@stop

@section('content')
<div class="daftar-isi">
 <h2>My Book</h2>
 <ul>
  <li><a href="#test1">Test 1</a></li>
  <li><a href="#test2">Test 2</a></li>
  <li><a href="#test3">Test 3</a></li>
  <li><a href="#test4">Test 4</a></li>
 </ul>
</div>

<!-- Begin book -->
<div class="book">
 <div id="test1">
  <h4>Test 1</h4>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
 </div>

 <div id="test2">
  <h4>Test 2</h4>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
 </div>

 <div id="test3">
  <h4>Test 3</h4>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
 </div>
 
 <div id="test4">
  <h4>Test 4</h4>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
 </div>
</div>
@stop

Kemudian buat file scss baru dengan nama book.scss pada path public/css/book.scss isikan code berikut,
.daftar-isi{
 margin-top: 20px;
 padding: 20px 2%;
 text-align: left;
 width: 96%;
 border-radius: 5px;
 background-color: white;
 border: 1px solid #e1e8ed;
 overflow: auto;
}

.book{
 margin-top: 20px;
 padding: 20px 2%;
 text-align: left;
 width: 96%;
 border-radius: 5px;
 background-color: white;
 border: 1px solid #e1e8ed;
 overflow: auto;
}

Jangan lupa setelah membuat dan mengedit file sass kita harus mengcompilenya, tutorial sass bisa lihat disini.

Setelah itu buat link baru untuk menuju ke view book.blade.php dengan mengedit sedikit file header.blade.php pada path protected/app/views/layouts/web/ menjadi seperti ini.
.
.
.
  <div class="dropdown">
     <button class="button">Menu(css)</button>
     <div class="dropdown-content">
       <a href="{{ URL::to('crud/users')}}">User</a>
       <a href="{{ URL::to('book')}}">Index Book</a>
       <a href="#">Link 3</a>
     </div>
   </div>
.
.
.

Sehingga hasil akhirnya akan tampak seperti ini.


===DONE!===

Engine PHP - Create txt file


Pada tutorial kali ini kita akan belajar membuat sebuah file .txt dari php, biasanya file .txt ini sering kali digunakan saat kita akan membuat sebuah sistem crontab yang membutuhkan data log dari proses crontab tersebut.

Data log ini biasanya disimpan pada file .txt agar suatu saat nanti jika terjadi error pada crontab yang menyebabkan proses crontab terhenti kita bisa tahu sampai diproses mana crontab tersebut terhenti, sehingga kita bisa mengidentifikasi penyebab berhentinya crontab dan dapat melanjutkan kembali proses crontab tersebut dari posisi dia berhenti sebelumnya.

Berikut syntax-syntax membuat file .txt,
//akses file yang akan dipakai
$myfile = fopen("/path/file/name_file.txt", "a") or die("Unable to open file!");
//write text
$txt = "------------test-----------";
fwrite($myfile, $txt);
//close file
fclose($myfile);

Aturan akses file bisa dilihat disini.
Tutorial ini adalah penyempurnaan dari tutorila sebelumnya tentang Move database field to other database.

Oke langsung saja kita praktekan tutorialnya.

Pertama buka file movedatabaselog.php yang sudah dibuat pada tutorial sebelumnya, edit menjadi seperti ini.
<?php
  $host="localhost";
  $user="root";
  $pass="root";  

  $dbname1 = "source_logs";
  $dbname2 = "backup_logs";

  $db=mysql_connect($host,$user,$pass);
  
  $sql2="USE $dbname2";
  mysql_query($sql2,$db);

  //create logs processing--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  $myfile = fopen("/var/www/html/crontab/log_processing.txt", "a") or die("Unable to open file!");
  $date=strtotime("now");
  $enddate = strtotime("-7 days", $date);
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  //cek any databse or not?
  $sql = "SELECT * FROM user_logs";
  $hsl1 = mysql_query($sql,$db);
  if (!$hsl1) {
    //create database if not exists
    $sql4 ="CREATE DATABASE IF NOT EXISTS `backup_FE` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci";
    mysql_query($sql4,$db);

    $txt = "Database was create \n";
    fwrite($myfile, $txt);

    $sql2="USE $dbname2";
    mysql_query($sql2,$db);

    //create table if not exists
    $sql4 = "CREATE TABLE IF NOT EXISTS `user_logs` (
              `id` bigint(20) NOT NULL,
              `user_id` bigint(20) DEFAULT NULL,
              `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `request_method` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `url` text COLLATE utf8_unicode_ci,
              `parameter_json` text COLLATE utf8_unicode_ci,
              `status` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `logable_id` int(11) DEFAULT NULL,
              `logable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `device_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `device` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `platform` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `platform_version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `browser` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `browser_version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `app_version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `android` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `ios` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `duration` decimal(10,4) DEFAULT NULL,
              `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
              `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
              `deleted_at` timestamp NULL DEFAULT NULL
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
    mysql_query($sql4,$db);

    //add primary key
    $sql4 = "ALTER TABLE `user_logs` ADD PRIMARY KEY (`id`)";
    mysql_query($sql4,$db);

    //add auto increment
    $sql4 = "ALTER TABLE `user_logs` MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT";
    mysql_query($sql4,$db);

    $txt = "Table was create \n";
    fwrite($myfile, $txt);
  }

  //begin backup
  $sql = "SELECT * FROM user_logs";
  $hsl2 = mysql_query($sql,$db);
  $array2 = mysql_fetch_array($hsl2);
  if (!$array2) {
    //if empty field on database insert this

    $txt = "first insert on ".date("Y-m-d h:i:sa", $date)."\n";
    fwrite($myfile, $txt);
 
    $sql2="USE $dbname2";
    mysql_query($sql2,$db);
    
    $sql2="INSERT INTO user_logs (user_id,type,request_method,url,parameter_json,status,logable_id,logable_type,ip,device_type,device,platform,platform_version,browser,browser_version,app_version,android,ios,duration,created_at,updated_at,deleted_at) ";
    $sql2.="(SELECT user_id,type,request_method,url,parameter_json,status,logable_id,logable_type,ip,device_type,device,platform,platform_version,browser,browser_version,app_version,android,ios,duration,created_at,updated_at,deleted_at "; 
    $sql2.="FROM $dbname1.user_logs)";
    mysql_query($sql2,$db);

    $txt = "user_logs insert first DONE! at \n".$date;
    fwrite($myfile, $txt);
  } elseif ($array2) {
    //if database was insert before so insert this

    $txt = "backup from ".date("Y-m-d h:i:sa", $date)." until ".date("Y-m-d h:i:sa", $enddate)."\n";
    fwrite($myfile, $txt);

    $sql2="USE $dbname2";
    mysql_query($sql2,$db);
    
    $sql2="INSERT INTO user_logs (user_id,type,request_method,url,parameter_json,status,logable_id,logable_type,ip,device_type,device,platform,platform_version,browser,browser_version,app_version,android,ios,duration,created_at,updated_at,deleted_at) ";
    $sql2.="(SELECT user_id,type,request_method,url,parameter_json,status,logable_id,logable_type,ip,device_type,device,platform,platform_version,browser,browser_version,app_version,android,ios,duration,created_at,updated_at,deleted_at "; 
    $sql2.="FROM $dbname1.user_logs WHERE created_at > (SELECT created_at FROM $dbname2.user_logs ORDER BY created_at DESC LIMIT 1))";
    mysql_query($sql2,$db);

    $txt = "\n user_logs backup DONE! \n";
    fwrite($myfile, $txt);

    //delete logs that are not used anymore
    $sql3="USE $dbname1";
    mysql_query($sql3,$db);
    $sql3="DELETE FROM user_logs WHERE created_at < DATE_ADD(CURDATE(), INTERVAL -6 DAY)";
    mysql_query($sql3,$db);

    $txt = "delete user_logs source DONE! \n";
    fwrite($myfile, $txt); 

    $txt = "----------------------------------------- \n";
    fwrite($myfile, $txt);
    fclose($myfile);
  }
?>

Kemudian jalankan file tersebut pada terminal Ubuntu seperti ini.
php /var/www/html/crontab/movedatabaselog.php

Sehingga program tersebut akan secara otomatis membuat file log_processing.txt pada path /var/www/html/crontab/ yang berisi log dari proses menjalankan program tersebut.

Jika anda ingin menjalankannya pada crontab bisa lihat disini.

===DONE!===

How to - Import big file database(.sql)


Ada berbagai cara upload file sql yang terlalu besar pada phpmyadmin, Tutorial kali ini akan membagikan cara upload atau import file sql yang terlalu besar pada phpmyadmin.

Oke langsung saja yang pertama akan kita praktekan pada:

Windows

Pertama, ubah konfigurasi pada file php.ini jika menggunakan  xampp ada pada path C:\xampp\php\php.ini jika menggunakan wamp ada pada path C:\wamp\bin\apache\Apache2.4.4\bin\php.ini ubah konfigurasi ini ini,
max_execution_time = 259200
max_input_time = 259200
memory_limit = 1000M
upload_max_filesize = 128M
post_max_size = 128M

Selanjutnya ubah file config.default jika menggunakan xampp ada pada path C:\xampp\phpMyAdmin\libraries jika menggunakan wamp ada pada path C:\wamp\apps\phpmyadmin4.0.4\libraries ubah konfigurasi ini.
$cfg['ExecTimeLimit'] = 0;

Restart xampp/wamp


Ubuntu

Pertama bisa menggunakan cara diatas dengan mengubah konfigurasi file php.ini pada path cd /etc/php5/apache2/php.ini buka dengan  vim atau terserah anda, ubah konfigurasi ini.
max_execution_time = 259200
max_input_time = 259200
memory_limit = 1000M
upload_max_filesize = 128M
post_max_size = 128M

Restart apache2: sudo service apache2 restart

Kedua bisa juga dengan cara import melalui terminal.
mysql -uUSERNAME(database) -pPASSWORD(database) DATABASENAME < MYDATABASE.sql

Jika import to server maka tinggal tambahkan hostnamenya saja menjadi seperti ini.
mysql -hroot@IP/HOSTNAME -uUSERNAME(database) -pPASSWORD(database) DATABASENAME < MYDATABASE.sql

Check localhost/phpmyadmin hasilnya seperti ini.


Untuk sintax ubuntu bisa lihat disini.

===DONE!===

Laravel - Unit Test


Unit test merupakan bagian terpenting saat anda membuat sebuah project besar, fungsi dari unit test merupakan memastikan atau mengecheck apakah coding anda berjalan dengan baik sebagaimana semestinya.

Dalam unit test sendiri kita akan membuat sebuah sistem dimana saat coding dijalankan jika coding success maka akan menghasilkan apa, begitu juga jika coding fail maka akan menghasilkan apa.

Proses ini bertujuan untuk mengurangi terjadinya bugs pada suatu project yang sedang kita buat.

Tutorial ini meneruskan tutorial sebelumya tentang Laravel - Grouping Route 2.

Oke langsung saja kita mulai membuat sebuah unit test pada project yang sudah dibuat sebelumnya pada website ini.

Pertama buat configurasi terlebih dahulu database yang akan kita gunakan untuk unit test ini.
Buat file baru bernama database.php pada path protected/app/config/testing dan isikan code berikut,
<?php

return array(

 /*
 |--------------------------------------------------------------------------
 | Database Connections
 |--------------------------------------------------------------------------
 |
 | Here are each of the database connections setup for your application.
 | Of course, examples of configuring each database platform that is
 | supported by Laravel is shown below to make development simple.
 |
 |
 | All database work in Laravel is done through the PHP PDO facilities
 | so make sure you have the driver for your particular database of
 | choice installed on your machine before you begin development.
 |
 */

 'connections' => array(

  'mysql' => array(
   'driver'    => 'mysql',
   'host'      => 'localhost',
   'database'  => 'project-blog-testing',
   'username'  => 'root',
   'password'  => 'root',
   'charset'   => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix'    => '',
  ),

  'pgsql' => array(
   'driver'    => 'mysql',
   'host'      => 'localhost',
   'database'  => 'project-blog-testing',
   'username'  => 'root',
   'password'  => 'root',
   'charset'   => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix'    => '',
  ),

  'sqlite' => array(
   'driver'   => 'sqlite',
   //'database' => ':memory:',
   'database' => app_path() . '/database/testing.sqlite',
   'prefix'   => ''
  ),

 ),
);

Setelah itu buat database baru pada phpmyadmin bernama project-blog-testing(sesuai dengan configurasi database.php yang sudah kita buat), seperti ini.



Selanjutnya tambahkan testsuite baru pada file phpunit.xml pada path protected
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false"
>
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./app/tests/</directory>
        </testsuite>

        <testsuite name="controllers">
            <directory>./app/tests/controllers</directory>
        </testsuite>

        <testsuite name="crud">
            <directory>./app/tests/controllers/crud</directory>
        </testsuite>

        <testsuite name="create">
            <directory>./app/tests/controllers/crud/CreateControllerTest</directory>
        </testsuite>

    </testsuites>
</phpunit>

Kemudian buat file test baru bernama CreateControllerTest.php pada path protected/app/tests/controllers/crud, controllers dan crud adalah folder baru silahkan tambahkan sendiri sehingga akan tampak seperti ini.


Isikan code berikut pada file CreateControllerTest,
<?php

use Model\User;

class CreateControllerTest extends \TestCase {

    private static $setupDatabase = true;

    /**
     * Default preparation for each test
     *
     */
    public function setUp()
    {
        parent::setUp();
     
        if(self::$setupDatabase) {
            $this->setupDatabase();
        }

        \Mail::pretend(true);
    }

    /**
     * Migrates the database and set the mailer to 'pretend'.
     * This will cause the tests to run quickly.
     *
     */
    private function setupDatabase()
    {
        fwrite(STDERR, print_r("\n\n--- Initializing Migration and Seeding DB ---\n", TRUE));
        
        Artisan::call('migrate');
        $this->seed();

        self::$setupDatabase = false;

        fwrite(STDERR, print_r("--- End Migration and Seeding DB ---\n\n", TRUE));
    }

    //begin test
    //test koneksi ke route
    public function testConnectionRoute()
    {
        $crawler = $this->client->request('GET', 'crud/create');

        $this->assertTrue($this->client->getResponse()->isOk());
    }

    //test view pada route crud/create
    public function testCreateUser()
    {
        $crawler = $this->client->request('GET', 'crud/create');
        
        $this->assertCount(1, $crawler->filter('td:contains("Name")'));
        $this->assertCount(1, $crawler->filter('td:contains("Username")'));
        $this->assertCount(1, $crawler->filter('td:contains("Email")'));
        $this->assertCount(1, $crawler->filter('td:contains("Password")'));
    }

    //test jika berhasil menyimpan database
    public function testCreatePostUserSuccess()
    {
        $input = array(
            'name' => 'test1',
            'username' => 'Username_test',
            'email' => 'test1@mail.com',
            'password' => 'xxxxxx',
        );
        // dd($input);
        $this->call('POST', 'crud/create', $input);

        $check = User::where('name', 'test1')->first();
        $this->assertEquals('test1', $check['name']);
    }

    //test jika gagal menyimpan database karena password kurag dari 6 char
    public function testCreatePostUserFail()
    {
        $input = array(
            'name' => 'testFail',
            'username' => 'Username_test_fail',
            'email' => 'testfail@mail.com',
            'password' => 'xxx',
        );
        // dd($input);
        $this->call('POST', 'crud/create', $input);

        $check = User::where('name', 'testFail')->first();
        $this->assertNotEquals('testFail', $check['name']);
    }
}

Dapat dilihat pada code tersebut yang pertama adalah kita migrate dan seed terlebih dahulu field database unit test kemudian menjalankan testnya. Silahkan pahami sendiri comment yang sudah saya buat pada code tersebut.

Untuk menjalankannya buka terminal masuk ke path protected dan ketikkan code berikut.


===DONE!===

Engine PHP - Move database filed to other database


Postingan kali ini saya akan membagikan sebuah tutorial membuat sebuah engine crontab untuk memindahkan field suatu database ke database lain.

Tujuan dari pembuatan engine ini biasanya digunakan untuk membackup log sebuah website dimana isi log yang dipergunakan hanya dalam rentang waktu tertentu saja, misalnya log user login jika log ini dibiarkan saja pada database tentu saja semakin hari data lognya akan sangat banyak dan akan memberatkan akses ke database server.

Untuk itulah kita harus memindahkan log-log tersebut kesebuah database baru untuk meringankan kerja server.

Tutorial ini akan saya terapkan pada Ubuntu...
Oke langsung saja ketutorialnya,

Pertama buat sebuah file php baru lokasinya terserah anda, saya akan menempatkanya pada path /var/www/html/crontab/ dengan nama movedatabaselog.php kemudian isi dengan code berikut.
<?php
  $host="localhost";
  $user="root";
  $pass="root";  

  $dbname1 = "source_logs";
  $dbname2 = "backup_logs";

  $db=mysql_connect($host,$user,$pass);
  
  $sql2="USE $dbname2";
  mysql_query($sql2,$db);

  //cek any databse or not?
  $sql = "SELECT * FROM user_logs";
  $hsl1 = mysql_query($sql,$db);
  if (!$hsl1) {
    //create database if not exists
    $sql4 ="CREATE DATABASE IF NOT EXISTS `backup_FE` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci";
    mysql_query($sql4,$db);

    $sql2="USE $dbname2";
    mysql_query($sql2,$db);

    //create table if not exists
    $sql4 = "CREATE TABLE IF NOT EXISTS `user_logs` (
              `id` bigint(20) NOT NULL,
              `user_id` bigint(20) DEFAULT NULL,
              `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `request_method` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `url` text COLLATE utf8_unicode_ci,
              `parameter_json` text COLLATE utf8_unicode_ci,
              `status` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `logable_id` int(11) DEFAULT NULL,
              `logable_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `device_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `device` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `platform` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `platform_version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `browser` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `browser_version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `app_version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `android` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `ios` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
              `duration` decimal(10,4) DEFAULT NULL,
              `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
              `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
              `deleted_at` timestamp NULL DEFAULT NULL
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
    mysql_query($sql4,$db);

    //add primary key
    $sql4 = "ALTER TABLE `user_logs` ADD PRIMARY KEY (`id`)";
    mysql_query($sql4,$db);

    //add auto increment
    $sql4 = "ALTER TABLE `user_logs` MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT";
    mysql_query($sql4,$db);
  }

  //begin backup
  $sql = "SELECT * FROM user_logs";
  $hsl2 = mysql_query($sql,$db);
  $array2 = mysql_fetch_array($hsl2);
  if (!$array2) {
    //if empty field on database insert this 
    $sql2="USE $dbname2";
    mysql_query($sql2,$db);
    
    $sql2="INSERT INTO user_logs (user_id,type,request_method,url,parameter_json,status,logable_id,logable_type,ip,device_type,device,platform,platform_version,browser,browser_version,app_version,android,ios,duration,created_at,updated_at,deleted_at) ";
    $sql2.="(SELECT user_id,type,request_method,url,parameter_json,status,logable_id,logable_type,ip,device_type,device,platform,platform_version,browser,browser_version,app_version,android,ios,duration,created_at,updated_at,deleted_at "; 
    $sql2.="FROM $dbname1.user_logs)";
    mysql_query($sql2,$db);
  } elseif ($array2) {
    //if database was insert before so insert this
    $sql2="USE $dbname2";
    mysql_query($sql2,$db);
    
    $sql2="INSERT INTO user_logs (user_id,type,request_method,url,parameter_json,status,logable_id,logable_type,ip,device_type,device,platform,platform_version,browser,browser_version,app_version,android,ios,duration,created_at,updated_at,deleted_at) ";
    $sql2.="(SELECT user_id,type,request_method,url,parameter_json,status,logable_id,logable_type,ip,device_type,device,platform,platform_version,browser,browser_version,app_version,android,ios,duration,created_at,updated_at,deleted_at "; 
    $sql2.="FROM $dbname1.user_logs WHERE created_at > (SELECT created_at FROM $dbname2.user_logs ORDER BY created_at DESC LIMIT 1))";
    mysql_query($sql2,$db);

    //delete logs that are not used anymore
    $sql3="USE $dbname1";
    mysql_query($sql3,$db);
    $sql3="DELETE FROM user_logs WHERE created_at < DATE_ADD(CURDATE(), INTERVAL -6 DAY)";
    mysql_query($sql3,$db);
  }
?>

Terakhir silahkan jalankan code php pada Crontab caranya dengan mengetikkan crontab -e dan masukkan code berikut.
0 0 * * 0 /usr/bin/php /var/www/html/crontab/movedatabaselog.php

Crontab tersebut dijalankan seminggu sekali setiap hari minggu jam 12 malam menit pertama.
Selanjutnya save, cara menggunakan editor vim atau nano saat mengedit crontab bisa lihat disini.
Untuk aturan lain dalam penjadwalan crontab bisa lihat disini.

Pahami code tersebut saya sudah menjelaskan tiap-tiap fungsi sql yang saya tulis, jika belum mengerti silahkan contact-us atau comment juga boleh.

Jika tidak mengerti sintax SQL silahkan lihat disini,

===DONE!===

Laravel - Grouping Route 2


Tutorial kali ini saya akan memberikan sedikit trik pada framework Laravel, yang berguna untuk membuat struktur routing project Laravel menjadi lebih rapi.

Pada postingan sebelumnya kita sudah membuat routing group pada file routes.php, sekarang kita akan membuat routing group menjadi beberapa sebuah folder dan mengelompokkannya pada beberapa sub routes.

Langsung saja kita mulai tutorialnya.

Pertama buat folder routes pada path /protected/app dan kemudian buat file web.php pada folder routes tersebut seperti ini.


Selanjutnya pindahkan isi file routes.php (path protected/app/routes.php) pada file web.php yang baru dibuat sehingga isi file web.php yang baru akan terlihat seperti ini.
<?php

/*-----------WEB-----------*/
Route::get('/', 'HomeController@showWelcome');

//pahamilah group route dibawah
Route::group(array('prefix' => 'crud'), function(){
 Route::get('users', 'Controller\Crud\ReadController@readUsers');

 Route::get('create', 'Controller\Crud\CreateController@createUser');
 Route::post('create', 'Controller\Crud\CreateController@createpostUser');

 Route::get('update/{id}', 'Controller\Crud\UpdateController@updateUser');
 Route::post('update/{id}', 'Controller\Crud\UpdateController@updatepostUser');

 Route::get('delete/{id}', 'Controller\Crud\DeleteController@deleteUser');
});

Terakhir edit file routes.php pada path protected/app/ menjadi seperti ini.
<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/

//--------------------------WEB---------------------------
Route::group(array('prefix' => ''), function() 
{
 require app_path().'/routes/web.php';
});


Dapat dilihat pada code tersebut jika saya memasukkan url dengan prefix kosong atau '' maka route akan mengarah pada path routes/web.php

===DONE!===

How to - Setting id_rsa


Id_rsa merupakan kumpulan string yang digunakan sebagai identitas dari sebuah komputer, Id_rsa ini sering digunakan untuk mempermudah akses ssh dari suatu komputer ke komputer lain, atau mungkin ke suatu server sehingga tidak diperlukan lagi authentifikasi username dan password.

Setting id_rsa ini digunakan untuk OS Ubuntu.

Oke langsung saja tutorialnya,

Pertama ketikkan code berikut pada terminal untuk membuat id_rsa
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa

Chmod digunakan untuk file permission baca disini.

Masukkan passphrase jika diperlukan untuk menambah tingkat keamanan id_rsa jika tidak tekan enter saja.

Sehingga akan tampil seperti ini,


Selanjutnya pastikan komputer/server tujuan yang akan di ssh sudah memiliki folder .ssh juga pada home jika belum lakukan kembali cara untuk membuat id_rsa diatas pada komputer/server tujuan.

Kemudian jika komputer/server tujuan sudah memiliki folder .ssh cek apakah ada file authorized_keys?, jika ada ketikkan code berikut
ssh-copy-id <username_tujuan>@<host/IP_tujuan>

Code diatas digunakan jika komputer/server tujuan yang sudah memiliki file authorized_keys sehingga kita hanya perlu mengcopy id_rsa.pub komputer sumber ke file authorized_keys komputer/server tujuan.

Jika belum ada file authorized_keys ketikkan code berikut,
cat .ssh/id_rsa.pub | ssh <username_tujuan>@<host/IP_tujuan> 'cat >> .ssh/authorized_keys'

Code diatas digunakan jika komputer/server tujuan yang belum memiliki file authorized_keys sehingga kita harus membaca id_rsa.pub komputer sumber kemudian membuat file authorized_keys pada komputer/server tujuan yang selanjutnya mengcopy id_rsa.pub sumber ke tujuan.

Terakhir masukkan authentifikasi komputer/server tujuan

Untuk lebih memahaminya silahkan praktekkan sendiri.
Untuk lebih memahami sintax ubuntu silahkan baca disini.

===DONE!===

How to - Change url phpmyadmin


Phpmyadmin merupakan url yang disediakan untuk mengelola database sebuah project, default dari url phpmyadmin biasanya diletakkan pada 'localhost/phpmyadmin' tentu saja hal ini tidak secure jika project tersebut dionlinekan, karena siapapun bisa saja mengakses database project tersebut.

Itulah sebabnya mengganti url phpmyadmin pada project yang sudah online adalah sebuah keharusan untuk menghindari aksi hacking.

Oke langsung saja kita praktekkan pada project yang kita miliki, jika anda mengikuti tutorial pada website ini maka ada baiknya anda sudah mencapai pada tahap ini.

Caranya cukup mudah,
Pertama silahkan buka terminal ubuntu anda, kemudian ketikkan code berikut,
$ vim /etc/phpmyadmin/apache.conf

Maka akan muncul tampilan vim yang berisikan konfigurasi dari phpmyadmin, selanjutnya pada baris ketiga silahkan ganti 'Alias' sesuai dengan keinginan anda misalnya seperti ini.
# phpMyAdmin default Apache configuration

Alias /ganti_sesuai_yang_anda_inginkan /usr/share/phpmyadmin

<directory phpmyadmin="" share="" usr="">

.
.
.

Terakhir silahkan buka kembali url phpmyadmin anda dan ganti phpmyadmin dengan alias yang sudah anda buat dalam tutorial ini urlnya sudah diganti menjadi 'localhost/ganti_sesuai_yang_anda_inginkan'.

Mudah bukan?

Jika tidak terlalu mengerti cara menggunakan vim silahkan lihat disini.
Jika vim not recognize pada ubuntu anda, silahkan install lihat disini atau bisa menggunakan text editor lainnya seperti atom atau nano

===DONE!===

Sintax - Mysql


Mysql merupakan sebuah perangkat lunak sistem manajemen basis data SQL yang paling sering digunakan untuk sebuah project sistem skala besar, jika anda ingin membuat sebuah project sistem yang simpel dan ringan maka lebih baik menggunakan SQL Lite, adapun PostgreSQL yang lebih sering digunakan pada project sistem cloud untuk pembackup-an database.

Pada kesempatan kali ini codedoct  akan berbagi beberapa sintax SQL pada mysql yang akan sering kita gunakan pada tutorial yang ada pada website ini.

Select
//select database
USE database_name

//select table and show all column
SELECT * FROM table_name

//select table and show all column with limit field
SELECT * FROM table_name
LIMIT 10

//select table and show all column with sorting field ASC or DSC
SELECT * FROM table_name
ORDER BY id ASC

//select table and show all column with condition
SELECT * FROM table_name
WHERE id=1

//select join table and show column
SELECT t1.column1, t2.column2
FROM table1 as t1
INNER JOIN table2 as t2 on t1.id=t2.t1_id

Operation Table
//insert table
INSERT table1 (column1,column2,column3)
VALUES ('column1_field','column2_field','column3_field')

//insert table with other databse table field
USE database_name
INSERT INTO table1(field1, field2, field3)
SELECT field1, field2, field3
FROM database2.table2
WHERE (some condition)

//update field table
UPDATE table_name 
SET column1='ss', column2='ss@mail.com', column3='dasdasdasdasds' 
WHERE id=4

//delete all column
DELETE FROM table_name

//delete column with condition
DELETE FROM table_name
WHERE id=4

//delete foreign_key
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

//drop primary_key
ALTER TABLE `user_logs`
DROP PRIMARY KEY

//add primary_key
ALTER TABLE `user_logs`
ADD PRIMARY KEY(`id`);