Anda di halaman 1dari 18

@Teknologi Informasi

DASAR PEMROGRAMAN WEB


PERTEMUAN 14 – 15
Universitas Muhammadiyah Palembang
Membuat koneksi PHP ke MYSQLI dan
membuat proses login form
Pertemuan 14
Pada pertemuan kali ini kita akan membuat koneksi php menggunankan PDO ke
mysql untuk menghubungkan ke database silahkan gunakan bahan seperti di bawah ini:
Xampp versi 3 build 19/21 menggunakan PHP 7+
Mysqli PHPMyadmin
Sublime text / visual studio code
Silahkan gunakan bahan yang sudah di tentukan jangan gunakan xamp versi lama
karna itu akan menentukan versi dari php dan mysql nya jika menggunakan versi lama
itu akan mempengaruhi beberapa syntax yang tidak bisa digunakan lagi pada versi php
terbaru maupun versi mysql nya.
Silahkan nyalakan xampnya terlebih dahulu
Disini anda bisa membuka bisa langsung lewat xamp dengan menekan pada bagian button
admin pada menu mysql pada xampp maka akan langsung di arahkan pada websitenya

Dasar Pemrograman web


@Teknologi Informasi

Atau anda juga bisa menggunakan link url pada chrome seperti ini”
http://localhost/phpmyadmin/ “ maka tampilan awal akan seperti ini

Lalu kita akan membuat script untuk koneksi ke database tapi sebelum itu kita harus
memahami terlebih dahulu apa itu PDO pada php
Pdo adalah singkatan dari php data object. lain halnya dengan mysqli, pdo justru
berorientasi hanya pada objek dan mendukung sejumlah tipe database yang menggunakan
php, seperti mysql, mssql, informix, dan postgresql
Note: Fungsi mysql_ sudah usang dan tidak boleh lagi digunakan karena tidak aman serta
tidak pernah lagi dipelihara (maintainance) atau dikembangkan.
Salah satu fungsi penting yang juga didukung oleh MySQLi dan PDO
adalah prepared statements. Fungsi ini akan mempercepat waktu yang dibutuhkan oleh
MySQL untuk menjalankan query yang sama berkali-kali. Prepared statement juga
berfungsi untuk mencegah terjadinya serangan injeksi SQL ketika menjalankan
perubahan di database menggunakan PDO akan encrypt dan hash sebuah password yang
sudah di buat hal itu lah yang membuat pdo ini lebih secure dibanding mysqli karena
menggunakan hash md5 supaya tidak terjadi injeksi SQL.

Dasar Pemrograman web


@Teknologi Informasi

Buka sublime lalu buat folder baru pert14 dan buat file dengan nama database.php
Lalu kita buat terlebih dahulu databasenya buka Kembali phpMyAdmin buat database
denga nama “login” lalu klik create

Lanjut kita membuat script menghubungkan ke databasenya menggunakan PDO php


isikan pada $dbname dengan nama database yang sudah kalian buat tadi

Ketika berhasil terhubung maka akan menampilkan seperti ini

Dasar Pemrograman web


@Teknologi Informasi

Kenapa menampilkan tampilan seperti itu karena kita membuat statemen ketika koneksi
berhasil terhubung maka akan menampilkan statement echo yang sudah di buat

Tampilan Ketika gagal menampilkan ke database karena nama database tidak di


identifikasi/nama database tidak ada

Supaya tidak menggangu saat sudah menampilkan sebuah website pada bagian
echo’Koneksi Berhasil’; hapus pada bagian Koneksi Berhasil Saja.
Penjelasan :
- Block try adalah code yg akan dieksekusi apabila tidak ada kesalahan didalamnya.
- Block catch untuk penangan error yang didalam block try terdapat kesalahan atau error.
- PDOException -> merupakan error handling untuk PDO
- $error -> variabel penampung biasa, disini kita bebas menggunakan nama apa saja, mau
$error, $gagal dll.
- $error->getMessage(); -> merupakan notifikasi kesalahan yang menyebabkan koneksi
gagal dilakukan.

Dasar Pemrograman web


@Teknologi Informasi

Mengenal Method Post dan Get


Metode GET adalah metode yang datanya dikirim melalui URL, data yang dikirim di
URL berupa rangkaian pasangan nama dan nilai yang dipisahkan oleh ampersand (&).
Contoh program method GET
<html lang="en">

<head>
<title>Method GET</title>
</head>

<body>
<form action="" method="GET">
<input type="text" name="nama"><br />
<input type="number" name="umur"><br />
<input type="submit" name="submit" value="Sumbit">
</form>

<?php
if ($_GET) {
echo "Nama: " . $_GET["nama"];
echo "<br/>";
echo "Umur: " . $_GET["umur"];
}
?>
</body>

</html>

URL dengan data GET akan terlihat sebagai berikut:


Maka akan menampilkan sebuah nilai yang sudah di inputkan pada url website

Dasar Pemrograman web


@Teknologi Informasi

Seperti itulah penggunaan Method GET pada PHP. Ada yang sering mengatakan
Methode ini tidak aman karena Data yang kira inputkan terlihat di URL dan bisa diganti-
ganti secara asal
Method POST adalah metode pengiriman data yang Datanya tidak disimpan pada
URL. Data pada method POST ini tetap dikirimkan akan tetapi tidak ditampilan pada
URL seperti GET. Method POST ini biasanya digunakan saat registrasi yang
membutuhkan input email dan password yang seharusnya tidak muncul di URL
Contoh Program method post

Dasar Pemrograman web


@Teknologi Informasi

<html lang="en">

<head>
<title>Method POST</title>
</head>

<body>
<form action="" method="POST">
<input type="text" name="nama"><br />
<input type="number" name="umur"><br />
<input type="submit" name="submit"
value="Sumbit">
</form>

<?php
if ($_POST) {
echo "Nama: " . $_POST["nama"];
echo "<br/>";
echo "Umur: " . $_POST["umur"];
}
?>
</body>

</html>

Potongan syntax diatas akan menghasilkan Hasil yang sama seperti yang ada di
Method GET. Tapi bedanya, saat kita isi kita tidak bisa melihat yang kita inputkan di
URL

Dasar Pemrograman web


@Teknologi Informasi

Pertemuan 15 - Membuat Proses Login menggunakan PHP PDO


Buka Kembali phpMyAdmin lalu buat baru database dengan nama “db_login” atau
kalian bisa rename saja nama db nya selanjutnya select db_login masuk ke menu SQL
lalu masukan script ini
CREATE TABLE `members` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(255) NOT NULL DEFAULT '0',
`last_name` VARCHAR(255) NOT NULL DEFAULT '0',
`email` VARCHAR(255) NOT NULL DEFAULT '0',
`password` VARCHAR(255) NOT NULL DEFAULT '0',
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=7
;

Kalo sudah klik GO

Dasar Pemrograman web


@Teknologi Informasi

Ketika sudah di buat maka akan tampil tabel struktur berikut

Selanjutnya kita akan membuat script kodingan untuk proses login


Untuk Struktur folder bisa di lihat di bawah

Buat file dengan nama database.php untuk menghubungkan databasenya


Lalu coba script di bawah ini database.php
<?php
$host = "localhost"; //host server
$user = "root"; // user server
$pass = ""; // isikan password jika user anda memiliki password
$dbname = "db_login"; // nama database yang ingin anda koneksikan

try
{

Dasar Pemrograman web


@Teknologi Informasi

$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);


$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $error)
{
echo 'Koneksi Gagal '.$error -> getMessage();
}

?>
Buat file lagi dengan nama login.php
<?php
session_start();
require_once('database.php');

if(isset($_POST['submit']))
{
if(isset($_POST['email'],$_POST['password']) && !empty($_POST['email'])
&& !empty($_POST['password']))
{
$email = trim($_POST['email']);
$password = trim($_POST['password']);

if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
$sql = "select * from members where email = :email ";
$handle = $pdo->prepare($sql);
$params = ['email'=>$email];
$handle->execute($params);
if($handle->rowCount() > 0)
{
$getRow = $handle->fetch(PDO::FETCH_ASSOC);
if(password_verify($password, $getRow['password']))
{
unset($getRow['password']);
$_SESSION = $getRow;
header('location:dashboard.php');
exit();
}
else
{
$errors[] = "Email atau Password salah";
}
}

Dasar Pemrograman web


@Teknologi Informasi

else
{
$errors[] = "Email atau Password salah";
}

}
else
{
$errors[] = "Email tidak valid ";
}

}
else
{
$errors[] = "Email dan Password perlu di isi ";
}

}
?>

<!doctype html>
<html>
<head>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-
MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdkn
LPMO" crossorigin="anonymous">

</head>
<body class="bg-dark">

<div class="container h-100">


<div class="row h-100 mt-5 justify-content-center align-items-center">
<div class="col-md-5 mt-5 pt-2 pb-5 align-self-center border bg-
light">
<h1 class="mx-auto w-25" >Login</h1>
<?php
if(isset($errors) && count($errors) > 0)
{
foreach($errors as $error_msg)
{
echo '<div class="alert alert-
danger">'.$error_msg.'</div>';

Dasar Pemrograman web


@Teknologi Informasi

}
}
?>
<form method="POST" action="<?php echo
$_SERVER['PHP_SELF'];?>">
<div class="form-group">
<label for="email">Email:</label>
<input type="text" name="email"
placeholder="Masukan Email.." class="form-control">
</div>
<div class="form-group">
<label for="email">Password:</label>
<input type="password" name="password"
placeholder="Masukan Password..." class="form-control">
</div>

<button type="submit" name="submit" class="btn btn-


primary">Login</button>

<a href="register.php" class="btn btn-


primary">Register</a>
</form>
</div>
</div>
</div>
</body>
</html>
Buat file register .php
<?php
session_start();
require_once('database.php');

if(isset($_POST['submit']))
{

if(isset($_POST['first_name'],$_POST['last_name'],$_POST['email'],$_POST['passw
ord']) && !empty($_POST['first_name']) && !empty($_POST['last_name']) &&
!empty($_POST['email']) && !empty($_POST['password']))
{
$firstName = trim($_POST['first_name']);
$lastName = trim($_POST['last_name']);
$email = trim($_POST['email']);
$password = trim($_POST['password']);

Dasar Pemrograman web


@Teknologi Informasi

$options = array("cost"=>4);
$hashPassword = password_hash($password,PASSWORD_BCRYPT,$options);
$date = date('Y-m-d H:i:s');

if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
$sql = 'select * from members where email = :email';
$stmt = $pdo->prepare($sql);
$p = ['email'=>$email];
$stmt->execute($p);

if($stmt->rowCount() == 0)
{
$sql = "insert into members (first_name, last_name, email, `password`,
created_at,updated_at) values(:fname,:lname,:email,:pass,:created_at,:updated_at)";

try{
$handle = $pdo->prepare($sql);
$params = [
':fname'=>$firstName,
':lname'=>$lastName,
':email'=>$email,
':pass'=>$hashPassword,
':created_at'=>$date,
':updated_at'=>$date
];

$handle->execute($params);

$success = 'Akun berhasil dibuat!';

}
catch(PDOException $e){
$errors[] = $e->getMessage();
}
}
else
{
$valFirstName = $firstName;
$valLastName = $lastName;
$valEmail = '';
$valPassword = $password;

Dasar Pemrograman web


@Teknologi Informasi

$errors[] = 'Alamat email sudah terdaftar';


}
}
else
{
$errors[] = "Alamat Email tidak valid";
}
}
else
{
if(!isset($_POST['first_name']) || empty($_POST['first_name']))
{
$errors[] = 'First name dibutuhkan';
}
else
{
$valFirstName = $_POST['first_name'];
}
if(!isset($_POST['last_name']) || empty($_POST['last_name']))
{
$errors[] = 'Last name dibutuhkan';
}
else
{
$valLastName = $_POST['last_name'];
}

if(!isset($_POST['email']) || empty($_POST['email']))
{
$errors[] = 'Email dibutuhkan';
}
else
{
$valEmail = $_POST['email'];
}

if(!isset($_POST['password']) || empty($_POST['password']))
{
$errors[] = 'Password dibutuhkan';
}
else
{
$valPassword = $_POST['password'];
}

Dasar Pemrograman web


@Teknologi Informasi

}
?>

<!doctype html>
<html>
<head>
<!--Boostrap link-->
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-
MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdkn
LPMO" crossorigin="anonymous">

</head>
<body class="bg-dark">

<div class="container h-100">


<div class="row h-100 mt-5 justify-content-center align-items-center">
<div class="col-md-5 mt-3 pt-2 pb-5 align-self-center border bg-
light">
<h1 class="mx-auto w-25" >Daftar</h1>
<?php
if(isset($errors) && count($errors) > 0)
{
foreach($errors as $error_msg)
{
echo '<div class="alert alert-
danger">'.$error_msg.'</div>';
}
}

if(isset($success))
{

echo '<div class="alert alert-success">'.$success.'</div>';


}
?>
<form method="POST" action="<?php echo
$_SERVER['PHP_SELF'];?>">
<div class="form-group">

Dasar Pemrograman web


@Teknologi Informasi

<label for="email">First Name:</label>


<input type="text" name="first_name"
placeholder="Masukan Nama awal.." class="form-control" value="<?php echo
($valFirstName??'')?>">
</div>
<div class="form-group">
<label for="email">Last Name:</label>
<input type="text" name="last_name"
placeholder="Masukan Nama akhir.." class="form-control" value="<?php echo
($valLastName??'')?>">
</div>

<div class="form-group">
<label for="email">Email:</label>
<input type="text" name="email"
placeholder="Masukan Email.." class="form-control" value="<?php echo
($valEmail??'')?>">
</div>
<div class="form-group">
<label for="email">Password:</label>
<input type="password" name="password"
placeholder="Masukan Password.." class="form-control" value="<?php echo
($valPassword??'')?>">
</div>

<button type="submit" name="submit" class="btn btn-


primary">Register</button>
<p class="pt-2">Kembali ke halaman <a
href="login.php">Login</a></p>

</form>
</div>
</div>
</div>
</body>
</html>

Buat file lagi dengan nama dashboard.php perhatikan pada syntax session first name
syntax tersebut akan memproses Ketika user berhasil masuk akan menginisialisasi dan
akan menampilkan first name yang sudah di buat pada form register
<?php
session_start();

Dasar Pemrograman web


@Teknologi Informasi

if(!$_SESSION['id']){
header('location:login.php');
}

?>

<center><b><h1 style="color: blue;">Selamat Datang <?php echo


ucfirst($_SESSION['first_name']); ?></h1></b>
<a href="logout.php?logout=true">Logout</a></center>

Hasil output di browser


Login.php

Register.php

Dasar Pemrograman web


@Teknologi Informasi

Tampilan Ketika user berhasil login

TUGAS
Buatlah file dengan nama logout.php kemudian buang fungsi untuk logout/keluar dari
tampilan awal dan Kembali pada tampilan login.

Dasar Pemrograman web

Anda mungkin juga menyukai