Membuat sistem pemesanan tiket dengan PHP Native dan Mysql

 

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>

Screenshots








Posting Komentar

Lebih baru Lebih lama

Formulir Kontak