Showing posts with label PHP. Show all posts
Showing posts with label PHP. Show all posts

Monday, January 2, 2023

Menggunakan Query Like MongoDB Pada PHP

 


Berikut adalah query mysql untuk like:

select * from namatabel where namakolom LIKE '%katakunci%' order by kolomsort DESC LIMIT 0, 10;


Untuk digunakan di mongoDB php :

<?php

$dbName = 'namadb';

$tableName = 'namacollection';

$kolom = 'kolomygdicari';

$keyword = 'katakunci';

$sortby = 'kolomsort';

$limit = 10;

$skip = 0;

$returns = array();

$manager = new MongoDB\Driver\Manager();

$filter = array($kolom=> new MongoDB\BSON\Regex($keyword, 'i'));

$options = array('limit'=>$limit,'skip'=>$skip,'sort'=>array($sortby=>-1));

$query = new MongoDB\Driver\Query($filter, $options);

$cursor = $manager->executeQuery($dbName.'.'.$tableName, $query);

$cursor->setTypeMap(['root' => 'array', 'document' => 'array', 'array' => 'array']);

$cursor = $cursor->toArray();

foreach ($cursor as $document) {

    $document['_id'] = (array) $document['_id'];

    $returns[] = $document;

}

echo '<pre>';

print_r($returns);

echo '</pre>';

echo '<hr />';


Penggunaan MongoDB group by & count ( MySQL dan PHP )

 


Pada MySQL menjalankan query group by dan count atau sum 

select kolomA, count(kode) as jumkode from tabel where status='oke' group by kolomA order by jumkode DESC 

Pada mongoDB, menggunakan fungsi aggregate

 db.namacollection.aggregate([{ $match: { status: "oke" } },{"$group": {_id: "$kolomA",count: {$sum: 1}}},{$sort: {count: -1}}])

Menggunakan php driver mongoDB :

$manager = new MongoDB\Driver\Manager();
$command = new MongoDB\Driver\Command([
  'aggregate' => 'namacollection',
  'pipeline' => [
      ['$match'=>['status'=>'oke']],
      ['$group' => ['_id' => '$kolomA', 'count' => ['$sum' => 1]]],
      ['$sort'=>['count'=>-1]],
  ],
  'cursor' => new stdClass,
]);
$cursor = $manager->executeCommand('namadatabase', $command);


Memberi filter range tanggal dari tanggal sekian sampai tanggal sekian :

db.namacollection.aggregate([{ $match: { tanggal: {$gte:ISODate("2021-05-01"),$lt:ISODate("2020-05-30"}} } },{"$group": {_id: "$kolomA",count: {$sum: 1}}},{$sort: {count: -1}}])
//$gte bisa diganti $gt kalau error


Versi php adalah :

$manager = new MongoDB\Driver\Manager();
$command = new MongoDB\Driver\Command([
  'aggregate' => 'namacollection',
  'pipeline' => [
    ['$match'=>['tanggal'=>
                    [
                        '$gt'=>new MongoDB\BSON\UTCDatetime(strtotime('2021-05-01 00:00:00') * 1000),
                        '$lt'=>new MongoDB\BSON\UTCDatetime(strtotime('2020-05-30 23:59:59') * 1000),
                    ] 
                   ]
        ],
      ['$group' => ['_id' => '$kolomA', 'count' => ['$sum' => 1]]],
      ['$sort'=>['count'=>-1]],
  ],
  'cursor' => new stdClass,
]);
$cursor = $manager->executeCommand('namadatabase', $command);
//format kolom tanggal haruslah berupa datetime


Menggunakan CRUD MongoDB Pada PHP

 


Berikut adalah cara menggunakan CRUD mongoDB pada PHP :

1. Buat file insert-mongo.php

<?php

//$manager = new MongoDB\Driver\Manager("mongodb://user:password@localhost:27017");

//$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

//$manager = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");

$manager = new MongoDB\Driver\Manager();

$bulkWrite = new MongoDB\Driver\BulkWrite;

$bulkWrite->insert(['nama' => 'Erlangga', 'umur' => 26, 'status' => 'pria']);

$bulkWrite->insert(['nama' => 'Arbi', 'umur' => 31, 'status' => 'pria', 'lahir' => new MongoDB\BSON\UTCDatetime(strtotime('1987-04-02') * 1000)]);

$bulkWrite->insert(['nama' => 'Deswita', 'umur' => 25, 'status' => 'wanita']);

$manager->executeBulkWrite("databaseAnda.collectionUser", $bulkWrite);


2. Buat File select-mongo.php

<?php

$manager = new MongoDB\Driver\Manager();

$query = new MongoDB\Driver\Query( [] );

$cursor = $manager->executeQuery("databaseAnda.collectionUser", $query);

foreach ($cursor as $document) {

    echo '<pre>';

    print_r($document);

    echo '</pre>';

}


3. Buat File select-filter-mongo.php

<?php

$manager = new MongoDB\Driver\Manager();

$filter = ['umur' => ['$lt' => 26]];

$options = [];

$query = new MongoDB\Driver\Query($filter, $options);

$cursor = $manager->executeQuery("databaseAnda.collectionUser", $query);

//convert cursor menjadi array

    $cursor->setTypeMap(['root' => 'array', 'document' => 'array', 'array' => 'array']);

    $cursor = $cursor->toArray();

foreach ($cursor as $document) {

        //convert id menjadi array

        $document['_id'] = (array) $document['_id'];

    echo '<pre>';

    print_r($document);

    echo '</pre>';

}


4. Menambah limit, offset, dan juga sort pada mongo DB:

$limit = 10;

$skip = 5;

$options = array('limit'=>$limit,'skip'=>$skip,'sort'=>array('kolomA'=>1, 'kolomB'=>-1));

//limit adalah jumlah data yang ingin ditampilkan.

//skip adalah offset, mulai dari index keberapa data ditampilkan.

//sort by kolom, nilai 1 = ascending, nilai -1 = descending.


5. Filter query not equal atau != dalam SQL

$query = array('namakolom'=>array('$ne'=>null));//namakolom tidak sama dengan null


6. Menghitung jumlah kolom atau perintah count di SQL

$manager = new MongoDB\Driver\Manager();

//query not equal null

$query = array('namakolom'=>array('$ne'=>null));//array('namakolom'=>'2020')

$command = new MongoDB\Driver\Command(array('count'=>'namatabelorcollection','query'=>$query));

$result = $manager->executeCommand('namadatabase', $command);

$count = $result->toArray()[0]->n;

 

7. Buat File update-mongo.php

<?php

$manager = new MongoDB\Driver\Manager();

//start update

$bulkWrite = new MongoDB\Driver\BulkWrite;

$bulkWrite->update(

    ['nama' => 'Deswita'],

    ['$set' => ['umur' => 30]],

    ['multi' => true, 'upsert' => false]

);

$manager->executeBulkWrite("databaseAnda.collectionUser", $bulkWrite);

//update selesai

//query utk menampilkan hasilnya

$query = new MongoDB\Driver\Query([]);

$cursor = $manager->executeQuery("databaseAnda.collectionUser", $query);

foreach ($cursor as $document) {

    echo '<pre>';

    print_r($document);

    echo '</pre>';

}


Keterangan :

multi = true, artinya semua nama “deswita” akan di update. Kalau muti = false, hanya 1 baris dokumen pertama yang diupdate.

upsert = false, artinya jika tidak ada data yang diupdate maka tidak melakukan update apa-apa. Jika upsert = true, maka akan menginsert data baru sesuai filter ada.


8. Buat File delete-mongo.php

<?php

$manager = new MongoDB\Driver\Manager();

$bulkWrite = new MongoDB\Driver\BulkWrite;

$bulkWrite->delete(['nama' => 'Deswita'], ['limit' => true]);

$manager->executeBulkWrite("databaseAnda.collectionUser", $bulkWrite);

$query = new MongoDB\Driver\Query([]);

$cursor = $manager->executeQuery("databaseAnda.collectionUser", $query);

foreach ($cursor as $document) {

    echo '<pre>';

    print_r($document);

    echo '</pre>';

}


Keterangan :

limit = true, artinya hanya menghapus 1 data. jika limit = false atau 0, maka semua nama “deswita” akan dihapus di collectionUser.


Wednesday, August 17, 2022

Membuat Email dengan Laravel

 


Berikut adalah cara membuat pengiriman email dengan Laravel :

1. Buat project dengan nama : laravel-mail

composer create-project --prefer-dist laravel/laravel:^9.1 laravel-mail

lalu masuk ke folder tersebut dengan perintah pada commandpromt ( CMD ) / terminal 

cd laravel-mail

Setelah jalankan perintah dibawah pada terminal . CMD :

php artisan serve

Untuk melihat hasil , buka browser lalu ketik http://localhost:8000


2.  Konfigurasi .env

2.1.  Jika menggunakan SMTP Gmail : Modif file .env menjadi seperti dibawah ini 

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=namaemail@gmail.com

MAIL_PASSWORD=passwordemail

MAIL_ENCRYPTION=tls

MAIL_FROM_ADDRESS=namaemail@gmail.com

MAIL_FROM_NAME=”${APP_NAME}”

Setelah itu masuk ke pengaturan Google Security pada akun Gmail yang digunakan. Masuk halaman Google Account, lalu klik Security. Scroll ke bawah sampai menemukan bagian Less secure app access, set , kemudian On kan 


kalau menggunakan bahasa indonesia pada gmail :

Masuk pengaturan Google Keamanan pada akun Gmail yang digunakan. Mmasuk halaman Kelola Akun Google Anda, lalu klik Keamanan. Scroll ke bawah sampai menemukan bagian Akses aplikasi yang kurang aman, set menjadi Nonaktif


2.2. Jika menggunakan SMTP hosting, modif file .env menjadi seperti dibawah :

MAIL_DRIVER=smtp

MAIL_HOST=mail.ptxyz.com

MAIL_PORT=465

MAIL_USERNAME=namaemail@ptxyz.com

MAIL_PASSWORD=passwordemail

MAIL_ENCRYPTION=tls

MAIL_FROM_ADDRESS=namaemail@ptxyz.com

MAIL_FROM_NAME=”${APP_NAME}”


3. Buat Class Mail : nama kelas adalah SendEmail

Jalankan perintah dibawah ini pada terminal / cmd

hp artisan make:mail SendEmail

maka akan tercipta class SendEmail.php pada folder email


Kemudian pilih SendEmail.php, lalu modif menjadi :

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Mail\Mailable;

use Illuminate\Queue\SerializesModels;

class SendEmail extends Mailable

{

    use Queueable, SerializesModels;

    public $data;

    /**

     * Create a new message instance.

     *

     * @return void

     */

    public function __construct($data)

    {

        $this->data = $data;

    }


    /**

     * Build the message.

     *

     * @return $this

     */

    public function build()

    {

        return $this->subject('Testing Kirim Email')

                    ->view('emails.sendemail');

    }

}


4. Membuat Blade View

Kemudian ke folder resources/views, lalu buatlah folder dengan nama emails. dan buatlah file dengan nama sendemail.blade.php di dalam folder tersebut, lalu isikan sintak dibawah :

<!DOCTYPE html>

<html>

<head>

    <title>ptxzy.com</title>

</head>

<body>

    <h3>{{ $data['name'] }}</h3>

    <h4>{{ $data['body'] }}</h4>

   

    <p> Terima kasih </p>

</body>

</html>


5.  Membuat Mail Controller

Jalankan perintah dibawah ini pada terminal / cmd 

php artisan make:controller MailController

atau dibuat secara manual dengan cara masuk ke app/Http/Controllers lalu buat file baru dalam folder controllers.  

Setelah itu, modif isi Mail Controller tersebut :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Mail\SendEmail;

use Illuminate\Support\Facades\Mail;

class MailController extends Controller

{

    public function index(){

$details = [

    'title' => 'Mail from ptxyz.com',

    'body' => 'Email menggunakan smtp'

    ];

    \Mail::to('emailpenerima@gmail.com')->send(new \App\Mail\SendEmail($details));

    dd("Email berhasil dikirim.");

}

}


6.  Menambahkan Route

Masuk ke folder routes, lalu edit file web.php, tambahkan route di bawah ini.

Route::get('send-email','App\Http\Controllers\MailController@index');


pada  tahap no 5 dan 6 digabungkan dalam menambahkan router :

<?php

use Illuminate\Support\Facades\Mail;

use App\Mail\SendEmail;

use Illuminate\Support\Facades\Route;


Route::get('/', function () {

    return view('Email Laravel');

});


Route::get('/send-email',function(){

    $data = [

        'name' => 'Admin PT. XYZ',

        'body' => 'Kirim Email Dengan Laravel'

    ];

    Mail::to('emailpenerima@gmail.com')->send(new SendEmail($data));

    dd("Email Berhasil dikirim.");

});


7. Mengirim Email

Buka browser lalu ketikan  http://localhost:8000/send-email. maka akan menampilkan hasil seperti berikut ini.


Kemudian lihat email yang dikirim :



Membuat Email dengan PHP


Berikut adalah contoh membuat email dengan PHP :

1. Buat class  mail, dengan nama : 

Mailer.class.php

<?php
/*  Class name  : Mailer  Description : Class untuk mengirim Email 
*/
class Mailer {
// declare private attributes
private $from;
private $subject;
private $to = array();
private $cc = array();
private $bcc = array();
private $message;
public $error;
// Class constructor
public function __construct($from, $to, $subject, $message) {
$this->from = $from;
$this->to = $to;
$this->subject = $subject;
$this->message = $message;
}
// accessor functions
public function __set($name, $value) {
        $this->$name = $value;
    }
    public function __get($name) {
        return $this->$name;
    }
 
public function send_mail() {
if (!empty($this->to) && count($this->to) > 0) {
$destination = implode (',',$this->to);
}
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
if (!empty($this->to)) {
$headers .= 'From: '. $this->from . "\r\n";
}
if (!empty($this->cc) && count($this->cc) > 0) {
$headers .= 'Cc: ';
$headers .= implode (',',$this->cc);
$headers .= "\r\n";
}
if (!empty($this->bcc) && count($this->bcc) > 0) {
$headers .= 'Bcc: ';
$headers .= implode (',',$this->bcc);
$headers .= "\r\n";
}
 
if(mail($destination, $this->subject, $this->message, $headers)) {
return true;
} else {
$this->error = 'Server mail error.';
return false;
}
}
}
?>



2. Buat form untuk send email dengan nama :

send_mail.php

<html>
<head><title>Kirim Email dengan PHP</title></head>
<body>
<h1>Kirim Email</h1>
<form action="" method="post">
<table width="100%">
<tr>
<td width="150">Pengirim </td>
<td><input type="text" name="pengirim" size="40"/></td>
</tr>
<tr>
<td>Penerima  </td>
<td><input type="text" name="penerima" size="40"/></td>
</tr>
<tr>
<td>Judul: </td>
<td><input type="text" name="judul" size="40"/></td>
</tr>
<tr>
<td>Pesan: </td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2"><textarea cols="58" rows="10" name="pesan"></textarea></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Send" value="Send"/><input type="reset" name="reset" value="Cancel"/></td>
</tr>
</table>
</form>
 
<?php
include "Mailer.class.php";
if (isset($_POST['Send'])) {
$pengirim = $_POST['pengirim'];
$penerima = $_POST['penerima'];
$judul    = $_POST['judul'];
$pesan    = $_POST['pesan'];
 
if ($pengirim=='') {
die("Pengirim harus diisi");
}
 
$mailer = new Mailer($pengirim,$penerima, $judul, $pesan);
$mailer->send_mail();
}
?>
</body>
</html>

Tampilan Layout :


Isikan data pengiri,, penerima, judul, dan pesan, lalu klik Send, maka email akan dikirimkan ke penerima

Wednesday, August 3, 2022

Read & Write File Dengan PHP

 

1. Berapa Contoh Code untuk read File dangan PHP

Buat file text dengan nama baca.txt

AJAX = Asynchronous JavaScript and XML

CSS =  Cascading Style Sheets

HTML = Hyper Text Markup Language

PHP = PHP Hypertext Preprocessor

SQL = Structured Query Language

SVG = Scalable Vector Graphics

XML = EXtensible Markup Language

lalu simpan file tersebut;

1.1.  Read keseluruhan file text tersebut 

<!DOCTYPE html>

 <html>  

 <body>  

 <?php  

 if(readfile("baca.txt"))

 {

    echo readfile("baca.txt");  

 }

 else echo "file tidak ada";

 ?>  

 </body>  

 </html>  


hasil : 


1.2. PHP Periksa End-Of-File – feof()

<?php

$fileread = fopen("baca.txt", "r") or die("Unable to open file!");

// Output one line until end-of-file

while(!feof($fileread)) {

  echo fgets($fileread) . "<br>";

}

fclose($fileread);

?>

Keterangan :

Fungsi feof() berfungsi untuk memeriksa apakah “end-of-file” (EOF) telah tercapai.

Fungsi feof() berguna untuk melakukan perulangan melalui data yang panjangnya tidak diketahui.


1.3.  PHP Membaca Karakter Tunggal – fgetc()

<?php

$fileread = fopen("baca.txt", "r") or die("Unable to open file!");

// Output one character until end-of-file

while(!feof($fileread)) {

  echo fgetc($fileread);

}

fclose($fileread);

?>

Keterangan :

Fungsi fgetc() digunakan untuk membaca satu karakter dari sebuah file setelah penunjuk file berpindah ke karakter berikutnya.


2. Contoh Code untuk write file dengan PHP

menulis beberapa nama ke dalam file “write.txt”:

2.1.  Menulis ke file kosong

<?php

$ilewrite = fopen("write.txt", "w") or die("Unable to open file!");

$txt = "Dony Tan\n";

fwrite($filewrite, $txt);

$txt = "Mike Lie\n";

fwrite($filewrite, $txt);

fclose($filewrite);

?>

Keterangan  :

data yang di tulis ke file “write.txt” sebanyak 2xi. Setiap menulis ke file, maka akan mengirim string $txt yang pertama berisi “John Tan” dan yang kedua berisi “Jane Lie”. Setelah selesai menulis,  menutup file tersebut menggunakan fungsi fclose().

Jika file write.txt dibuka isi nya :

Dony Tan

Mike Lie


2.2. Overwriting File txt

<?php

$ilewrite = fopen("write.txt", "w") or die("Unable to open file!");

$txt = "PHP Language\n";

fwrite($ilewrite, $txt);

$txt = "Java Language\n";

fwrite($ilewrite, $txt);

fclose($ilewrite);

?>

membuka file “write.txt”, baik Dony dan MIke telah berubah menjadi:

PHP Language

Java Language

Membuat Paginasi dengan PHP



Paginasi merupakan proses mengambil keselurahan hasil dan menyebarkan ke beberapa halaman dengan 1 halaman yang record baris di sesuaikan dengan keinginan, supaya membuat lebih mudah untuk dilihat atau dibaca datanya.

Berikut adalah cara membuat Paginasi :
1. Buat file Paginator.class.php

Kelas paginator hanya akan memiliki dua metode dan constructor.

Code kelas Paginator

<?php
class Paginator {
 
     private $_conn;
        private $_limit;
        private $_page;
        private $_query;
        private $_total;
}

Code Kelas construct :

<?php

public function __construct( $conn, $query ) {
     
    $this->_conn = $conn;
    $this->_query = $query;
 
    $rs= $this->_conn->query( $this->_query );
    $this->_total = $rs->num_rows;
     
}

Code Kelas mengambil data ( pada pengambilan data per hal 10 baris isi ) :

<?php
public function getData( $limit = 10, $page = 1 ) {
     
    $this->_limit   = $limit;
    $this->_page    = $page;
 
    if ( $this->_limit == 'all' ) {
        $query      = $this->_query;
    } else {
        $query      = $this->_query . " LIMIT " . ( ( $this->_page - 1 ) * $this->_limit ) . ", $this->_limit";
    }
    $rs             = $this->_conn->query( $query );
 
    while ( $row = $rs->fetch_assoc() ) {
        $results[]  = $row;
    }
 
    $result         = new stdClass();
    $result->page   = $this->_page;
    $result->limit  = $this->_limit;
    $result->total  = $this->_total;
    $result->data   = $results;
 
    return $result;
}

Code kelas membuat link paginasi :

<?php
public function createLinks( $links, $list_class ) {
    if ( $this->_limit == 'all' ) {
        return '';
    }
 
    $last       = ceil( $this->_total / $this->_limit );
 
    $start      = ( ( $this->_page - $links ) > 0 ) ? $this->_page - $links : 1;
    $end        = ( ( $this->_page + $links ) < $last ) ? $this->_page + $links : $last;
 
    $html       = '<ul class="' . $list_class . '">';
 
    $class      = ( $this->_page == 1 ) ? "disabled" : "";
    $html       .= '<li class="' . $class . '"><a href="?limit=' . $this->_limit . '&page=' . ( $this->_page - 1 ) . '">&laquo;</a></li>';
 
    if ( $start > 1 ) {
        $html   .= '<li><a href="?limit=' . $this->_limit . '&page=1">1</a></li>';
        $html   .= '<li class="disabled"><span>...</span></li>';
    }
 
    for ( $i = $start ; $i <= $end; $i++ ) {
        $class  = ( $this->_page == $i ) ? "active" : "";
        $html   .= '<li class="' . $class . '"><a href="?limit=' . $this->_limit . '&page=' . $i . '">' . $i . '</a></li>';
    }
 
    if ( $end < $last ) {
        $html   .= '<li class="disabled"><span>...</span></li>';
        $html   .= '<li><a href="?limit=' . $this->_limit . '&page=' . $last . '">' . $last . '</a></li>';
    }
 
    $class      = ( $this->_page == $last ) ? "disabled" : "";
    $html       .= '<li class="' . $class . '"><a href="?limit=' . $this->_limit . '&page=' . ( $this->_page + 1 ) . '">&raquo;</a></li>';
 
    $html       .= '</ul>';
 
    return $html;
}

2. Buat file index.php ( untuk menggunakan class Paginator  dan menampilkan data )  juga menggunakan bootstrap dasar styling halaman:

<!DOCTYPE html>
    <head>
        <title>PHP Pagination</title>
        <link rel="stylesheet" href="css/bootstrap.min.css">
    </head>

<?php
    require_once 'Paginator.class.php';
 
    $conn       = new mysqli( '127.0.0.1', 'root', 'root', 'world' );
 
    $limit      = ( isset( $_GET['limit'] ) ) ? $_GET['limit'] : 25;
    $page       = ( isset( $_GET['page'] ) ) ? $_GET['page'] : 1;
    $links      = ( isset( $_GET['links'] ) ) ? $_GET['links'] : 7;
    $query      = "SELECT City.Name, City.CountryCode, Country.Code, Country.Name AS Country, Country.Continent, Country.Region FROM City, Country WHERE City.CountryCode = Country.Code";
 
    $Paginator  = new Paginator( $conn, $query );
 
    $results    = $Paginator->getData( $page, $limit );
?>

    <body>
        <div class="container">
                <div class="col-md-10 col-md-offset-1">
                <h1>PHP Pagination</h1>
                <table class="table table-striped table-condensed table-bordered table-rounded">
                        <thead>
                                <?php for( $i = 0; $i < count( $results->data ); $i++ ) : ?>
        <tr>
                <td><?php echo $results->data[$i]['Name']; ?></td>
                <td><?php echo $results->data[$i]['Country']; ?></td>
                <td><?php echo $results->data[$i]['Continent']; ?></td>
                <td><?php echo $results->data[$i]['Region']; ?></td>
        </tr>
<?php endfor; ?>
                        </tr>
                        </thead>
                        <tbody></tbody>
                </table>
<?php echo $Paginator->createLinks( $links, 'pagination pagination-sm' ); ?>
                </div>
        </div>
        </body>
</html>

Hasil :


Memunculkan Simbol & Emoji Pada OS Mac

  Memunculkan Simbol & Emoji  1. Buka aplikasi Pages / Notes pada Macbook. 2. Klik pada Menubar Edit --> Pilih Emoji and Symbols a...