Diblog ini kita akan membahas cara membuat pemesanan tiket dengan PHP native dan mysql
Jadi disini kita buat terlebih dahulu core.php yang berisi segala fungsi yang akan dipakai diproject ini
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
class Libcore
{
public $pdo = null;
/**
* Melakukan koneksi ke database
*/
function connect()
{
// Database credentials
$host = 'localhost'; // your database host
$username = 'root'; // your database username
$password = ''; // your database password
$database = 'tugas_udintiket'; // your database name
try {
$this->pdo = new PDO("mysql:host=$host;dbname=$database", $username, $password);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
}
/**
*`
*/
function insertFlight($a, $file)
{
$sql = "INSERT INTO Flight (foto,maskapai, tanggal_penerbangan, kuota, bandara_asal, jam_kedatangan, tujuan_akhir, sektor, harga, jam_berangkat, jam_tiba)
VALUES (:foto, :maskapai, :tanggal_penerbangan, :kuota, :bandara_asal, :jam_kedatangan, :tujuan_akhir, :sektor, :harga, :jam_berangkat, :jam_tiba)";
// Prepare and execute the SQL statement
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':maskapai', $a["maskapai"]);
$stmt->bindParam(':tanggal_penerbangan', $a["tanggal_penerbangan"]);
$stmt->bindParam(':kuota', $a["kuota"]);
$stmt->bindParam(':bandara_asal', $a["bandara_asal"]);
$stmt->bindParam(':jam_kedatangan', $a["jam_kedatangan"]);
$stmt->bindParam(':tujuan_akhir', $a["tujuan_akhir"]);
$stmt->bindParam(':sektor', $a["sektor"]);
$stmt->bindParam(':harga', $a["harga"]);
$stmt->bindParam(':jam_berangkat', $a["jam_berangkat"]);
$stmt->bindParam(':jam_tiba', $a["jam_tiba"]);
$namafoto = uniqid() . ".png";
$this->uploadFile($file, getcwd() . "/../public/foto/", $namafoto);
$stmt->bindParam(':foto', $namafoto);
return $stmt->execute();
}
function insertTicket($user_id, $kode_pnr, $tanggal, $flight_id)
{
$sql = "INSERT INTO Orders (user_id, kode_pnr, tanggal, flight_id) VALUES (:user_id, :kode_pnr, :tanggal, :flight_id) ";
// Prepare and execute the SQL statement
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':user_id', $user_id);
$stmt->bindParam(':kode_pnr', $kode_pnr);
$stmt->bindParam(':tanggal', $tanggal);
$stmt->bindParam(':flight_id', $flight_id);
return $stmt->execute();
}
function deleteFlight($id)
{
$stmt = $this->pdo->prepare("DELETE FROM `Flight` WHERE `flight_id`=:id");
$stmt->bindParam(":id", $id);
return $stmt->execute();
}
function getTicket($user_id)
{
$stmt = $this->pdo->prepare("SELECT * FROM Orders INNER JOIN User INNER JOIN Flight ON Orders.user_id = User.user_id AND Flight.flight_id = Orders.flight_id WHERE Orders.user_id = :user_id");
$stmt->bindParam(":user_id", $user_id);
$stmt->execute();
return $stmt->fetchAll();
}
function getTicketList()
{
$stmt = $this->pdo->prepare("SELECT * FROM Orders INNER JOIN User INNER JOIN Flight ON Orders.user_id = User.user_id AND Flight.flight_id = Orders.flight_id");
$stmt->execute();
return $stmt->fetchAll();
}
function uploadFile($file, $targetDirectory, $nf)
{
$targetFile = $targetDirectory . $nf;
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// Check if the file already exists
if (file_exists($targetFile)) {
return "Sorry, the file already exists.";
}
// Check file size (adjust as needed)
if ($file["size"] > 50000000) {
return "Sorry, your file is too large.";
}
// Allow certain file formats (you can customize this list)
$allowedExtensions = ["jpg", "jpeg", "png", "gif"];
if (!in_array($imageFileType, $allowedExtensions)) {
return "Sorry, only JPG, JPEG, PNG, and GIF files are allowed.";
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
return "Sorry, your file was not uploaded.";
} else {
// If everything is ok, try to upload the file
if (move_uploaded_file($file["tmp_name"], $targetFile)) {
return "The file " . htmlspecialchars(basename($file["name"])) . " has been uploaded.";
} else {
return "Sorry, there was an error uploading your file.";
}
}
}
function editFlight($a, $id)
{
$sql = "UPDATE Flight SET
maskapai = :maskapai,
tanggal_penerbangan = :tanggal_penerbangan,
kuota = :kuota,
bandara_asal = :bandara_asal,
jam_kedatangan = :jam_kedatangan,
tujuan_akhir = :tujuan_akhir,
sektor = :sektor,
harga = :harga,
jam_berangkat = :jam_berangkat,
jam_tiba = :jam_tiba
WHERE flight_id= :flight_id";
// Prepare and execute the SQL statement
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':flight_id', $id);
$stmt->bindParam(':maskapai', $a["maskapai"]);
$stmt->bindParam(':tanggal_penerbangan', $a["tanggal_penerbangan"]);
$stmt->bindParam(':kuota', $a["kuota"]);
$stmt->bindParam(':bandara_asal', $a["bandara_asal"]);
$stmt->bindParam(':jam_kedatangan', $a["jam_kedatangan"]);
$stmt->bindParam(':tujuan_akhir', $a["tujuan_akhir"]);
$stmt->bindParam(':sektor', $a["sektor"]);
$stmt->bindParam(':harga', $a["harga"]);
$stmt->bindParam(':jam_berangkat', $a["jam_berangkat"]);
$stmt->bindParam(':jam_tiba', $a["jam_tiba"]);
return $stmt->execute();
}
function getFlightList()
{
$stmt = $this->pdo->prepare("SELECT * FROM `Flight`");
$stmt->execute();
return $stmt->fetchAll();
}
function getFlight($id)
{
$stmt = $this->pdo->prepare("SELECT * FROM `Flight` WHERE `flight_id`=:id");
$stmt->bindParam(":id", $id);
$stmt->execute();
return $stmt->fetch();
}
function getUser($email)
{
$stmt = $this->pdo->prepare("SELECT * FROM `User` WHERE `email`=:email");
$stmt->bindParam(":email", $email);
$stmt->execute();
return $stmt->fetch();
}
function loginUser($u, $p)
{
$stmt = $this->pdo->prepare("SELECT * FROM `User` WHERE `email`=:user AND `password`=:pass AND `role`=0");
$stmt->bindParam(':user', $u);
$stmt->bindParam(':pass', $p);
// Execute the statement
$stmt->execute();
// Fetch all rows as an associative array
$tickets = $stmt->fetch();
if (gettype($tickets) == "boolean") {
return false;
} else if (gettype($tickets) == "array" && count($tickets) > 0) {
setcookie("user", $u, time() + 3600);
setcookie('pass', $p, time() + 3600);
return count($tickets) > 0;
}
return false;
}
function loginStaff($u, $p)
{
$stmt = $this->pdo->prepare("SELECT * FROM `User` WHERE `email`=:user AND `password`=:pass AND `role`=1");
$stmt->bindParam(':user', $u);
$stmt->bindParam(':pass', $p);
// Execute the statement
$stmt->execute();
// Fetch all rows as an associative array
$tickets = $stmt->fetch();
if (gettype($tickets) == "boolean") {
return false;
} else if (gettype($tickets) == "array" && count($tickets) > 0) {
setcookie("user", $u, time() + 3600);
setcookie('pass', $p, time() + 3600);
return count($tickets) > 0;
}
return false;
}
function loginAdmin($u, $p)
{
$stmt = $this->pdo->prepare("SELECT * FROM `User` WHERE `email`=:user AND `password`=:pass AND `role`=2");
$stmt->bindParam(':user', $u);
$stmt->bindParam(':pass', $p);
// Execute the statement
$stmt->execute();
// Fetch all rows as an associative array
$tickets = $stmt->fetch();
if (gettype($tickets) == "boolean") {
return false;
} else if (gettype($tickets) == "array" && count($tickets) > 0) {
setcookie("user", "", time() - 3600, "/");
setcookie("pass", "", time() - 3600, "/");
setcookie("user", $u, time() + 3600);
setcookie('pass', $p, time() + 3600);
return count($tickets) > 0;
}
return false;
}
function registerUser($nama, $email, $pass)
{
$stmt = $this->pdo->prepare("INSERT INTO `User`(`nama`, `email`, `password`, role) VALUES (:nama, :email, :pass, 0) ");
$stmt->bindParam(':email', $email);
$stmt->bindParam(':nama', $nama);
$stmt->bindParam(':pass', $pass);
// Execute the statement
return $stmt->execute();
// Fetch all rows as an associative array
}
function confirmTicket($id)
{
$stmt = $this->pdo->prepare("UPDATE `Orders` SET `konfirmasi`=1 WHERE `order_id`=:order_id");
$stmt->bindParam(':order_id', $id);
// Execute the statement
return $stmt->execute();
// Fetch all rows as an associative array
}
function isUserLogin()
{
if (isset($_COOKIE["user"]) && isset($_COOKIE["pass"])) {
if (!$this->loginUser($_COOKIE["user"], $_COOKIE["pass"])) {
die("akun anda salah username atau password");
}
} else {
die("<script>alert('Anda belum login');window.location.href = 'login.php'</script>");
}
}
function isStaffLogin()
{
if (isset($_COOKIE["user"]) && isset($_COOKIE["pass"])) {
if (!$this->loginStaff($_COOKIE["user"], $_COOKIE["pass"])) {
die("<script>alert('Anda belum masuk sebagai petugas');window.location.href = 'login.php'</script>");
}
} else {
die("<script>alert('Anda belum login sebagai petugas');window.location.href = 'login.php'</script>");
}
}
function isAdminLogin()
{
if (isset($_COOKIE["user"]) && isset($_COOKIE["pass"])) {
if (!$this->loginAdmin($_COOKIE["user"], $_COOKIE["pass"])) {
die(var_dump($_COOKIE));
}
} else {
die("<script>alert('Anda belum login sebagai admin');window.location.href = 'login.php'</script>");
}
}
function logout()
{
setcookie("user", "", time() - 3600, "/");
setcookie("pass", "", time() - 3600, "/");
setcookie("user", "", time() - 3600);
setcookie("pass", "", time() - 3600);
setcookie("user", "", time() - 3600, "/admin");
setcookie("pass", "", time() - 3600, "/admin");
setcookie("user", "", time() - 3600, "/petugas");
setcookie("pass", "", time() - 3600, "/petugas");
}
}
nah sekarang kita tinggal file autentikasi dan dashboard:
<?php
include "./core/libcore_backend.php";
$core = new Libcore();
$core->connect();
$msg = '<div class="alert alert-warning p-2"><small>Masuk ke akun anda</small></div>';
if(isset($_POST["user"]) && isset($_POST["pass"])) {
if($core->loginUser($_POST["user"], $_POST["pass"])){
header("Location: index.php");
}
else {
$msg = '<div class="alert alert-danger p-2"><small>Email atau Passsword salah</small></div>';
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>UDINTIKET - LOGIN</title>
<link href="./styles/bootstrap.min.css" rel="stylesheet">
<link href="./styles/styles.css" rel="stylesheet">
</head>
<body class="container" style="background-image: url(./image/ryan_air.jpeg); background-repeat: no-repeat;background-size: cover;">
<center>
<form class=" p-3" action="" style="max-width: 500px;border: 2px solid #eee;border-radius: 10px;margin-top: 25vh;background: rgba(255,255,255,0.8)" method="post">
<center><h3 class="mb-0">Udintiket</h3></center>
<small class="text-muted">Pelayanan cepat harga merakyat</small>
<hr>
<?= $msg; ?>
<input class="form-control" placeholder="Email" name="user">
<input class="form-control mt-3" placeholder="Password" name="pass">
<button class="btn btn-success mt-3 w-100">Login</button>
<hr>
<a href="register.php">Klik untuk mendaftar akun</a>
</form>
</center>
</body>
</html>
register.php:<?php
include "./core/libcore_backend.php";
$core = new Libcore();
$core->connect();
if(isset($_POST["nama"]) && isset($_POST["email"]) && isset($_POST["pass"])) {
$x = $core->registerUser($_POST["nama"], $_POST["email"], $_POST["pass"]);
if($x){
$msg = '<div class="alert alert-success p-2"><small>Akun telah dibuat </small></div>';
}
else {
if($x){
$msg = '<div class="alert alert-success p-2"><small>Akun gagal dibuat </small></div>';
}
}
}
$msg = '<div class="alert alert-warning p-2"><small>Registrasi Akun</small></div>';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>UDINTIKET - LOGIN</title>
<link href="./styles/bootstrap.min.css" rel="stylesheet">
<link href="./styles/styles.css" rel="stylesheet">
</head>
<body class="container" style="background-image: url(./image/ryan_air.jpeg); background-repeat: no-repeat;background-size: cover;">
<center>
<form class=" p-3" action="" style="max-width: 500px;border: 2px solid #eee;border-radius: 10px;margin-top: 20vh;background: rgba(255,255,255,0.8)" method="post">
<center><h3 class="mb-0">Udintiket</h3></center>
<small class="text-muted">Pelayanan cepat harga merakyat</small>
<hr>
<?= $msg; ?>
<input class="form-control mt-3 w-100" placeholder="Nama" name="nama">
<div class="d-flex justify-content-start"><small class="text-muted" style="text-align: start;">Masukkan nama depan dan belakang anda</small></div>
<input class="form-control mt-3" placeholder="Email" name="email" type="email">
<div class="d-flex justify-content-start"><small class="text-muted" style="text-align: start;">Masukkan email yang valid (harus memiliki simbol '@')</small></div>
<input class="form-control mt-3" placeholder="Password" name="pass">
<div class="d-flex justify-content-start"><small class="text-muted" style="text-align: start;">Masukkan password yang ingin digunakan</small></div>
<button class="btn btn-success mt-3 w-100">Register</button>
</form>
</center>
</body>
</html>
index.php untuk melakukan transaksi:
<?php
include "./core/libcore_backend.php";
$core = new Libcore();
$core->connect();
$core->isUserLogin();
$data = $core->getFlightList();
$x = $core->getUser($_COOKIE["user"]);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>UDINTIKET - RESERVASI PESAWAT</title>
<link href="./styles/bootstrap.min.css" rel="stylesheet">
<link href="./styles/styles.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: rgba(60,160, 60,0.8);">
<div class="container-fluid ps-5">
<a class="navbar-brand" href="#">UDINTIKET</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav w-100 ms-auto" style="float: right;">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Form Pemesanan</a>
</li>
<li class="nav-item w-75">
<a class="nav-link" aria-current="page" href="pesanan.php">Tiket Saya</a>
</li>
<li class="nav-item dropdown" style="margin-left: 3%;">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<?= $x["nama"] ?>
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="#">Logout</a></li>
<li><a class="dropdown-item" href="admin/login.php">Login Admin</a></li>
<li><a class="dropdown-item" href="petugas/login.php">Login Staff</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-5 d-flex">
<?php foreach ($data as $flight) : ?>
<div class="col-md-3 mb-4 h-50 m-1">
<div class="card" style="height: 550px;">
<div class="card-body">
<img src="./public/foto/<?= $flight['foto']; ?>" class="card-img-top" alt="..." height="250">
<h5 class="card-title mb-0"><?= $flight['maskapai'] ?> #<?= $flight['flight_id'] ?></h5>
<p class="text-muted mb-3 h6"><?= $flight['bandara_asal'] ?> - <?= $flight['tujuan_akhir'] ?></p>
Jam Penerbangan: <?= $flight['tanggal_penerbangan'] ?><br>
Quota: <?= $flight['kuota'] ?><br>
<!-- Add other data fields as needed -->
<!-- Example: -->
Sektor: <?= $flight['sektor'] ?><br>
Waktu Kedatangan: <?= $flight['jam_kedatangan'] ?>
</p>
<!-- Add more fields as needed -->
<form method="post" action="booking.php">
<input name="id" value="<?= $flight['flight_id'] ?>" type="hidden">
<hr>
<small class="text-muted">harga: Rp<?= $flight['harga'] ?></small>
<button class="btn btn-success w-100">Pesan Tiket</a>
</form>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<script src="./styles/bootstrap.bundle.min.js"></script>
</body>
</html>
landing page setelah user melakukan pemesanan:
<?php
include "./core/libcore_backend.php";
$core = new Libcore();
$core->connect();
$core->isUserLogin();
$x = $core->getUser($_COOKIE["user"]);
if (isset($_POST["id"])) {
$f = $core->getFlight($_POST["id"]);
}
$arr = [];
$tickets = [];
$kode_pnr = uniqid();
$date = new DateTime("now");
$core->insertTicket(
intval($x["user_id"]),
$kode_pnr,
$date->format("Y-m-d"),
$_POST["id"]
);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>UDINTIKET - RESERVASI PESAWAT</title>
<link href="./styles/bootstrap.min.css" rel="stylesheet">
<link href="./styles/styles.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: rgba(60,160, 60,0.8);">
<div class="container-fluid ps-5">
<a class="navbar-brand" href="#">UDINTIKET</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav w-100 ms-auto" style="float: right;">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Form Pemesanan</a>
</li>
<li class="nav-item w-75">
<a class="nav-link" aria-current="page" href="pesanan.php">Tiket Saya</a>
</li>
<li class="nav-item dropdown" style="margin-left: 3%;">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<?= $x["nama"] ?>
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="#">Logout</a></li>
<li><a class="dropdown-item" href="admin/login.php">Login Staff</a></li>
<li><a class="dropdown-item" href="petugas/login.php">Login Admin</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-5">
<center>
<h4>Pemesanan selesai</h4>
</center>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Maskapai</th>
<th>Tujuan</th>
<th>Sektor</th>
<th>Tanggal Penerbangan</th>
<th>Jam Kedatangan</th>
<th>Jam Keberangkatan</th>
<th>Jam Tiba</th>
<th>Kode PNR</th>
<th>Harga</th>
</tr>
</thead>
<tbody>
<tr>
<td><?= $f["maskapai"] ?></td>
<td><?= $f["bandara_asal"] ?> - <?= $f["tujuan_akhir"] ?> </td>
<td><?= $f["sektor"] ?></td>
<td><?= $f["tanggal_penerbangan"] ?></td>
<td><?= $f["jam_kedatangan"] ?></td>
<td><?= $f["jam_berangkat"] ?></td>
<td><?= $f["jam_tiba"] ?></td>
<td><?= $kode_pnr; ?></td>
<td><?= $f["harga"] ?></td>
</tr>
</tbody>
</table>
<center><a class="btn btn-success" href="pesanan.php">cek status konfirmasi tiket</a></center>
</div>
</body>
</html>