Tuesday, 16 October 2018

PHP MySql CRUD Dengan Konsep MVC

Pada postingan kali ini saya akan sharing cara membuat CRUD dengan php menggunakan konsep MVC, ok langsung saja buka code editor (saya menggunakan sublime text) dan buat folder baru dengan nama phpmvc didalam folder htdocs kalian dan tambah folder seperti berikut : 



Setelah itu kita siapkan database di mysql, buat database dengan nama phpmvc dan tablenya seperti gambar berikut :



tambahkan file config.php didalam folder app/config :


<?php

define('BASEURL', 'http://localhost:8181/phpmvc/public');
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'phpmvc');

kemudian tambahkan 3 file controller didalam folder app/controllers, yaitu Home, About, dan Mahasiswa :

Home.php

<?php

class Home extends Controller {
public function index()
{
$data['nama'] = $this->model('User_model')->getUser();
$data['title'] = 'Halaman Home';

$this->view('templates/header', $data);
$this->view('home/index', $data);
$this->view('templates/footer');
}

}

About.php

<?php

class About extends Controller{

public function index($nama = 'bejo', $pekerjaan = 'guru'){
$data['title'] = 'Halaman About';
$this->view('templates/header', $data);
$this->view('about/index');
$this->view('templates/footer');
}

}

Mahasiswa.php

<?php

class Mahasiswa extends Controller {
public function index(){
$data['title'] = 'Data Mahasiswa';
$data['mhs'] = $this->model('Mahasiswa_model')->getAllMhasiswa();
$this->view('templates/header', $data);
$this->view('mahasiswa/index', $data);
$this->view('templates/header');
}

public function detail($id){

$data['title'] = 'Detail Mahasiswa';
$data['mhs'] = $this->model('Mahasiswa_model')->getAllMhasiswaById($id);
$this->view('templates/header', $data);
$this->view('mahasiswa/detail', $data);
$this->view('templates/header');
}

public function edit($id){

$data['title'] = 'Detail Mahasiswa';
$data['mhs'] = $this->model('Mahasiswa_model')->getAllMhasiswaById($id);
$this->view('templates/header', $data);
$this->view('mahasiswa/edit', $data);
$this->view('templates/header');
}

public function tambah(){
$data['title'] = 'Tambah Mahasiswa';
$this->view('templates/header', $data);
$this->view('mahasiswa/tambah');
$this->view('templates/header');
}

public function simpanmahasiswa(){
$nim     = $_POST['nim'];
$nama    = $_POST['nama'];
$jurusan = $_POST['jurusan'];
$data['mhs'] = $this->model('Mahasiswa_model')->tambahMahasiswa($nim,$nama,$jurusan);
// return $this->index();
header('location:../mahasiswa');
}

public function updateMahasiswa(){
$nim     = $_POST['nim'];
$nama    = $_POST['nama'];
$jurusan = $_POST['jurusan'];
$data['mhs'] = $this->model('Mahasiswa_model')->updateMahasiswa($nim,$nama,$jurusan);
// return $this->index();
header('location:../mahasiswa');
}

public function hapus($id){
$data['mhs'] = $this->model('Mahasiswa_model')->deleteMhs($id);
// return $this->index();
header('location:../../mahasiswa');
}
}

Tambah 3 file didalam folder app/core : App.php, Controller.php, Database.php

App.php

<?php

class App{

protected $controller = 'Home';
protected $method = 'index';
protected $params = [];

public function __construct(){
$url = $this->parseURL();

if(file_exists('../app/controllers/' . $url[0] . '.php')){
$this->controller = $url[0];
unset($url[0]);
}

require_once '../app/controllers/' . $this->controller . '.php';
$this->controller = new $this->controller;

if(isset($url[1])){
if(method_exists($this->controller, $url[1])){
$this->method = $url[1];
unset($url[1]);
}
}

if(!empty($url)){
$this->params = array_values($url);
}

//jalankan controller
call_user_func_array([$this->controller, $this->method], $this->params);
}

public function parseURL(){
if( isset($_GET['url'])){
$url = rtrim($_GET['url'], '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/',$url);
return $url;
}
}

}

Controller.php

<?php

class Controller{
public function view($view, $data = [])
{
require_once '../app/views/' . $view . '.php';
}

public function model($model)
{
require_once '../app/models/' . $model . '.php';
return new $model;
}

}

Database.php

<?php

class Database{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbnm = DB_NAME;

private $dbh;
private $stmt;

public function __construct()
{
$dsn = 'mysql:host='. $this->host .';dbname='. $this->dbnm;

$option = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];

try{
$this->dbh = new PDO($dsn,$this->user,$this->pass, $option);
}catch(PDOException $e){
die($e->getMessage());
}
}


public function query($query)
{
$this->stmt = $this->dbh->prepare($query);
}

public function bind($param, $value, $type = null){
if(is_null($type)){
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}

$this->stmt->bindValue($param, $value, $type);
}

public function execute()
{
$this->stmt->execute();
}

public function resultSet()
{
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}

public function single()
{
$this->execute();
return $this->stmt->fetch(PDO::FETCH_ASSOC);
}
}



tambahkan model didalam folder models : Mahasiswa_model.php

<?php

class Mahasiswa_model{

private $table = 'mahasiswa';
private $db;

public function __construct()
{
$this->db = new Database;
}

public function getAllMhasiswa()
{
$this->db->query('SELECT * FROM ' . $this->table);
return $this->db->resultSet();
}

public function getAllMhasiswaById($id)
{
$this->db->query('SELECT * FROM ' . $this->table . ' WHERE id=:id');
$this->db->bind('id',$id);
return $this->db->single();
}

public function tambahMahasiswa($nim, $nama, $jurusan)
{
$this->db->query('INSERT INTO ' . $this->table . '(nim, nama, jurusan) VALUES(:nim, :nama, :jurusan)');
$this->db->bind('nim',$nim);
$this->db->bind('nama',$nama);
$this->db->bind('jurusan',$jurusan);
$this->db->execute();
}

public function updateMahasiswa($nim, $nama, $jurusan)
{
$this->db->query('UPDATE ' . $this->table . ' SET nama=:nama, jurusan=:jurusan WHERE nim=:nim');
$this->db->bind('nim',$nim);
$this->db->bind('nama',$nama);
$this->db->bind('jurusan',$jurusan);
$this->db->execute();
}

public function deleteMhs($id)
{
$this->db->query('DELETE FROM ' . $this->table . ' WHERE id=:id');
$this->db->bind('id',$id);
$this->db->execute();
}

}

didalam folder view tambahkan folder untuk masing-masing controller yaitu : folder home, about, mahasiswa dan satu foder tambahan yaitu templates 
didalam folder templates tambahkan dua file : header.php dan footer.php

header.php

<!DOCTYPE html>
<html>
<head>
<title><?= $data['title']; ?></title>
<link rel="stylesheet" href="<?= BASEURL; ?>/css/bootstrap.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container">
  <a class="navbar-brand" href="<?= BASEURL; ?>">Toekang Ketik</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
    <div class="navbar-nav">
      <!-- <a class="nav-item nav-link active" href="<?= BASEURL; ?>">Home <span class="sr-only">(current)</span></a> -->
      <a class="nav-item nav-link" href="<?= BASEURL; ?>/mahasiswa">Mahasiswa</a>
      <a class="nav-item nav-link" href="<?= BASEURL; ?>/about">About Me</a>
      
    </div>
  </div>
  </div>

</nav>

footer.php

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="<?= BASEURL; ?>/js/bootstrap.js"></script>
</body>

</html>

pada folder home tambahkan file index.php :

<div class="container mt-3">
<div class="jumbotron">
<h1 class="display-4">Belajar PHP MVC</h1>
<p class="lead">This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>
<hr class="my-4">
<p>It uses utility classes for typography and spacing to space content out within the larger container.</p>
<a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a>
</div>

</div>

pada folder about juga tambahkan file index.php

<div class="container mt-3">
<div class="jumbotron jumbotron-fluid">
<div class="container" align="center">
<h1 class="display-4">About Me</h1>
<img src="<?= BASEURL ?>/img/husnulm.jpg" alt="Husnul M" width="200" height="250" class="rounded-circle shadow">

<p class="lead">
</p>
<table>
<tr>
<td>Nama Saya</td><td> : </td>
<td>Husnul Mub</td>
</tr>
<tr>
<td>Pekerjaan</td><td> : </td>
<td>SAP ABAP Consultant</td>
</tr>
</table>
</div>
</div>

</div>

kemudian didalam folder mahasiswa tambahkan file : index.php, detail.php, tambah.php dan edit.php 

index.php

<div class="container mt-3">
<div class="row">
<div class="col-12">
<h1>Data Mahasiswa</h1>
<ul class="list-group">
<table class="table table-stripped">
<thead>
<tr>
<th scope="col">Nama</th>
<th scope="col" width="200px">Action</th>
</tr>
</thead>
<tbody>
<?php foreach ($data['mhs'] as $mhs) :?>
<tr>
<td><?= $mhs['nama'];?></td>
<td>
<a href="<?= BASEURL; ?>/mahasiswa/detail/<?= $mhs['id'] ?>" class="badge badge-primary badge-pill">Detail</a>

<a href="<?= BASEURL; ?>/mahasiswa/edit/<?= $mhs['id'] ?>" class="badge badge-primary badge-pill">Edit</a>
<a href="<?= BASEURL; ?>/mahasiswa/hapus/<?= $mhs['id'] ?>" class="badge badge-primary badge-pill">Hapus</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</ul>
<a href="<?= BASEURL; ?>/mahasiswa/tambah" class="btn btn-success mt-2">Tambah Mahasiswa</a>
</div>
</div>
</div>

detail.php

<div class="container mt-3">
<div class="card" style="width: 18rem;">
<img class="card-img-top" src="<?= BASEURL ?>/img/husnulm.jpg" alt="Card image cap">
<div class="card-body">
<h5 class="card-title"><?= $data['mhs']['nama']; ?></h5>
<p class="card-text"><?= $data['mhs']['jurusan']; ?></p>
<a href="<?= BASEURL; ?>/mahasiswa" class="btn btn-primary">Kembali</a>
</div>
</div>

</div>

tambah.php

<div class="container mt-3">
<form action="<?= BASEURL; ?>/mahasiswa/simpanmahasiswa" method="POST" enctype="multipart/form-data">
<input class="form-control form-control-lg mt-2" type="text" name="nim" placeholder="NIM">
<input class="form-control form-control-lg mt-2" type="text" name="nama" placeholder="Nama">
<input class="form-control form-control-lg mt-2" type="text" name="jurusan" placeholder="Jurusan">
<input type="submit" value="simpan" class="btn btn-success mt-2">
<a href="<?= BASEURL; ?>/mahasiswa" class="btn btn-primary mt-2">Kembali</a>
</form>

</div>

edit.php

<div class="container mt-3">
<form action="<?= BASEURL; ?>/mahasiswa/updateMahasiswa" method="POST" enctype="multipart/form-data">
<input class="form-control form-control-lg mt-2" type="text" readonly="true" name="nim" placeholder="NIM" value="<?= $data['mhs']['nim']; ?>">
<input class="form-control form-control-lg mt-2" type="text" name="nama" placeholder="Nama" value="<?= $data['mhs']['nama']; ?>">
<input class="form-control form-control-lg mt-2" type="text" name="jurusan" placeholder="Jurusan" value="<?= $data['mhs']['jurusan']; ?>">
<input type="submit" value="simpan" class="btn btn-success mt-2">
<a href="<?= BASEURL; ?>/mahasiswa" class="btn btn-primary mt-2">Kembali</a>
</form>
</div>

kemudian tambah file init.php dan .htaccess didalam folder app

init.php

<?php

require_once 'core/App.php';
require_once 'core/Controller.php';
require_once 'core/Database.php';

require_once 'config/config.php';

.htaccess

Options -Indexes


kemudian pada folder public folder css dan js berisi bootstrap, silahkan di dowload di website bootstrap dan didalam folder img bisa kalian tambahkan image terserah teman2 mau pakai image apa saja dan tambah file index dan .htaccess


index.php

<?php

require_once '../app/init.php';


$app = new App;

.htaccess

Options -Multiviews

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f


RewriteRule ^(.*)$ index.php?url=$1 [L]


ok sudah selesai dan berikut hasilnya :













ok semoga bermanfaat :D



sumber : 
https://www.youtube.com/watch?v=tBKOb8Ib5nI&list=PLFIM0718LjIVEh_d-h5wAjsdv2W4SAtkx

https://www.facebook.com/WebProgrammingUNPAS/

Wednesday, 10 October 2018

SAP - ABAP : Dynamic ALV Cell Style

report zalv_edit.

class lcl_report definition.
*
  public section.
*
*   Final output table
    typesbegin of ty_vbak,
             vbeln      type vbak-vbeln,
             erdat      type erdat,
             auart      type auart,
             kunnr      type kunnr,
             i_celltype type salv_t_int4_column,
           end   of ty_vbak.
    datat_vbak type standard table of ty_vbak.

*   ALV reference
    datao_alv type ref to cl_salv_table.

    methods:
      get_data,           "  data selection
      generate_output.    "  Generating output
*
  private section.
    methods:
      set_columns.        "  Set columns
endclass.                    "lcl_report DEFINITION
*
*
start-of-selection.
  datalo_report type ref to lcl_report.
*
  create object lo_report.
  lo_report->get_data).
  lo_report->generate_output).


*
class lcl_report implementation.
*
  method get_data.
*   data selection

    select vbeln erdat auart kunnr
           into  corresponding fields of table t_vbak
           from  vbak
           up to 20 rows.

    field-symbols<lfs_vbak> like line of t_vbak.
    datalt_celltype type salv_t_int4_column.
    datals_celltype like line of lt_celltype.
    loop at t_vbak assigning <lfs_vbak>.
      clearlt_celltype.
* Only VBELN for 2nd record
      if sy-tabix 2.
        ls_celltype-columnname 'VBELN'.
        ls_celltype-value      if_salv_c_cell_type=>hotspot.
        append ls_celltype to lt_celltype.
* Only ERDAT for 3rd record
      elseif sy-tabix 3.
        ls_celltype-columnname 'ERDAT'.
        ls_celltype-value      if_salv_c_cell_type=>button.
        append ls_celltype to lt_celltype.
* Entire 5th record
      elseif sy-tabix 5.
        ls_celltype-columnname ".
        ls_celltype-value      if_salv_c_cell_type=>hotspot.
        append ls_celltype to lt_celltype.
      endif.
      <lfs_vbak>-i_celltype lt_celltype.
    endloop.

  endmethod.                    "get_data
*
  method generate_output.
* New ALV instance
    datalx_msg type ref to cx_salv_msg.
    try.
        cl_salv_table=>factory(
          importing
            r_salv_table o_alv
          changing
            t_table      t_vbak ).
      catch cx_salv_msg into lx_msg.
    endtry.
*
* Setting up the Columns
    me->set_columns).

* Displaying the ALV
    o_alv->display).

  endmethod.                    "generate_output
*
  method set_columns.
*
*...Get all the Columns
    datalo_cols type ref to cl_salv_columns_table.
    lo_cols o_alv->get_columns).
*
*   set the Column optimization
    lo_cols->set_optimize'X' ).

*   Set the Cell Type
    try.
        lo_cols->set_cell_type_column'I_CELLTYPE' ).
      catch cx_salv_data_error.                         "#EC NO_HANDLER
    endtry.

  endmethod.                    "SET_COLUMNS

*
*
endclass.                    "lcl_report IMPLEMENTATION

Saturday, 6 October 2018

Mengirim Email Dengan PHP

pada postingan kali ini saya akan sharing cara mengirim email dengan PHPMailer di php, sebelumnya download dulu PHPMailer DISINI, setelah itu masuk folder htdoc di xampp, kemudian buat folder baru dengan nama email, dan tambahkan 2 buah file yaitu index.php dan sendEmail.php

disini kita akan menggunakan account email gmail, pastikan sobat sudah account email gmail dan setting gmail kalian DISINI aktifkan jadi ON agar diberikan akses mengirim email oleh google :D

untuk index.php seperti berikut :

<!DOCTYPE html>
<html>
<head>
<title>Kirim Email - PHP</title>
</head>
<body>
<h1>Kirim Email - PHP</h1>
<div>
<form action="sendEmail.php" method="POST">
<table>
<tr>
<td>To</td><td>:</td>
<td><input type="text" name="toEmail"> </td>
</tr>
<tr>
<td>Isi Email</td><td>:</td>
<td><textarea name="isiemail" cols="100" rows="10"></textarea> </td>
</tr>
</table>
<input type="submit" value="Send">
</form>
</div>
</body>
</html>


Lalu pada sendEmail.php

<?php
require 'PHPMailer/PHPMailerAutoload.php';

$toemail = $_POST['toEmail']; //email penerima
$pesan   = $_POST['isiemail']; //isi email

$email = 'emailkalian@gmail.com'; //email pengirim, silahkan diganti dengan email sendiri
$password = 'passwordemailkalaian'; //password gmail

$to_id = $toemail;
$message = $pesan;
$subject = 'Admin Email';
$mail = new PHPMailer;
$mail->FromName = "Admin Email";
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = $email;
$mail->Password = $password;
$mail->addAddress($to_id);
$mail->Subject = $subject;
$mail->msgHTML($message);
if (!$mail->send()) {
$error = "Mailer Error: " . $mail->ErrorInfo;
echo $error; 
}
else {
echo "<script>
alert('Email Terkirim');
</script>";
}


dan coba jalankan localhost, apakah sudah bisa kirim email apa belum








Belajar Database SQL Server Untuk Pemula Part1

Pada postingan kali ini, saya akan sharing tentang database SQL Server untuk pemula, yaitu mulai dari bagaimana cara membuat database, membuat table, mengupdate table, menghapus table, menyimpan, mengupdate, dan menghapus isi table, membuat stored procedure, membuat function dan lain-lain :D

ok langsung saja kita buka SQL Server

Create Database
untuk membuat database di SQL Server bisa dengan query atau dengan GUI, membuat database dengan GUI dengan cara seperti berikut :


klik kanan pada databases dan pilih new database lalu isikan nama databasenya seperti dibawah ini dan klik OK


jika sudah maka akan muncul database baru di object explorer seperti gambar berikut 


kita sudah berhasil membuat database dengan GUI, berikut cara membuat database dengan query SQL :



tinggal kita menuliskan source code seperti diatas dan klik execute, 


Create Table
selanjutnya kita akan membuat table, untuk membuat table kita bisa menggunakan source code berikut :

CREATE TABLE TB_SISWA(
NIS VARCHAR(10) PRIMARY KEY,
NAMA VARCHAR(50) NULL,
ALAMAT VARCHAR(100) NULL,
TG_LAHIR DATE NULL,
J_KELAMIN VARCHAR(1) NULL
)

TB_SISWA merupakan nama table bisa diganti sesuai keinginan lalu klik execute, di dalam table TB_SISWA field NIS menjadi primary key, primary key ini bisa menjadi attribut field kunci dari table TB_SISWA

mengupdate type data column / field pada table, disini kita akan coba mengganti type data field J_KELAMIN dari VARCHAR(1) menjadi VARCHAR(10), query-nya seperti berikut :

ALTER TABLE TB_SISWA ALTER COLUMN J_KELAMIN VARCHAR(10)

setelah menjalankan query diatas coba refresh table TB_SISWA pasti field j_kelamin akan berubah menjadi varchar(10).

Insert, Update, Delete, Select
setelah membuat table dan merubah type data field pada table kita akan lanjutkan dengan mengisikan, mengupdate, menghapus dan menampilkan data table TB_SISWA

untuk insert data bisa menggunakan query berikut :

INSERT INTO TB_SISWA(NIS,NAMA,ALAMAT,TG_LAHIR,J_KELAMIN)
VALUES('10001','BEJO','SURABAYA','2010-10-06','PRIA');

INSERT INTO TB_SISWA(NIS,NAMA,ALAMAT,TG_LAHIR,J_KELAMIN)
VALUES('10002','ANI','MALANG','2010-10-06','WANITA');


untuk melihat hasilnya kita bisa menggunakan query select seperti berikut :

SELECT * FROM TB_SISWA

query diatas akan menampilkan semua data yang ada didalam table dan hasilnya seperti berikut :




jika kita hanya ingin menampilkan data siswa yang NIS nya 10001 maka querynya akan seprti berikut :

SELECT * FROM TB_SISWA WHERE NIS = '10001'

dalam select ada banyak parameter yang bisa kita gunakan untuk menampilkan data dan kita bisa menggunakan lebih dari satu parameter adapun parameter yang bisa kita pakai antara lain sebagai berikut :

LIKE : like ini bisa kita gunakan untuk mencari karakter yang mirip dalam sebuah paramter
contohnya kita ingin menampilkan data siswa yang alamatnya mengandung karakter 'SU'

SELECT * FROM TB_SISWA WHERE ALAMAT LIKE 'SU%'

BETWEEN : between ini biasanya digunakan untuk menfilter berdasarkan tanggal, misalnya kita mau menampilkan data siswa yang tanggal lahirnya antara tanggal 09-10-2010 sampai 10-10-2010

SELECT * FROM TB_SISWA WHERE TG_LAHIR BETWEEN '09-10-2010' AND '10-10-2010'


selanjutnya kita akan mengupdate data, misalnya kita akan meng-update nama siswa yang NIS nya 10001

UPDATE TB_SISWA SET NAMA = 'BEJO SUTEDJO' WHERE NIS = '10001'

jika ingin menghapus data siswa, kita bisa langsung menghapus semua atau siswa tertentu, untuk menghapus data tertentu contoh query-nya seperti berikut, misal kita mau menghapus siswa dengan NIS 10002


DELETE TB_SISWA WHERE NIS = '10002'

kalau kita mau menghapus semua kita tidak perlu menggunakan parameter atau WHERE nya dihapus saja.



OK untuk part1 cukup sampai disini, untuk selanjutnya saya akan sharing tentang view dan join table. Terimakasih semoga bermanfaat

ABAP CDS View Part 10 : Authorization & DCL untuk ABAP CDS

Authorization & DCL di ABAP CDS | Panduan Lengkap (PFCG, @AccessControl, DCL) Authorization & DCL untuk ABAP CDS — Pandua...