Minggu, 26 April 2020

Belajar PHP CRUD Dengan MySql-Part3

Tags

Ini adalah bagian 3 dari 3 dalam tutorial PHP CRUD Dengan MySql.

Silahkan baca:


Di bagian tutorial ini, kita akan membuat halaman "Update" dan "Delete" dari tabel PHP CRUD. Kita akan menyelesaikan fungsi CRUD dari tabel PHP CRUD. Proses dalam posting ini sebenarnya sangat mirip dengan bagian 2.

1. Menambahkan tombol "Update" dan tombol "Delete"

Mirip dengan membuat bagian "Create" dan "Read" dari tabel PHP CRUD. Pertama-tama kita buat tombol "Update" dan "Delete" untuk setiap baris tabel. Buka file "index.php" dan tambahkan kode yang berwarna berikut:

Sekarang kode file "index.php" akan terlihat seperti di bawah ini, kode yang berwarna adalah apa yang telah kita tambahkan (atau bisa juga copy semua kode di bawah):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <link   href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/bootstrap.min.js"></script>
</head>
 
<body>
    <div class="container">
            <div class="row">
                <h3>PHP CRUD Basic</h3>
            </div>
            <div class="row">
                <p>
                    <a href="create.php" class="btn btn-success">Create</a>
                </p>
                 
                <table class="table table-striped table-bordered">
                      <thead>
                        <tr>
                          <th>Nama</th>
                          <th>Email</th>
                          <th>Telpon</th>
                          <th>Opsi</th>
                        </tr>
                      </thead>
                      <tbody>
                      <?php
                       include 'database.php';
                       $pdo = Database::connect();
                       $sql = 'SELECT * FROM pelanggan ORDER BY id DESC';
                       foreach ($pdo->query($sql) as $row) {
                                echo '<tr>';
                                echo '<td>'. $row['nama'] . '</td>';
                                echo '<td>'. $row['email'] . '</td>';
                                echo '<td>'. $row['nomorhp'] . '</td>';
                                echo '<td width=250>';
                                echo '<a class="btn" href="read.php?id='.$row['id'].'">Read</a>';
                                echo ' ';
                                echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>';
                                echo ' ';
                                echo '<a class="btn btn-danger" href="delete.php?id='.$row['id'].'">Delete</a>';
                                echo '</td>';
                                echo '</tr>';
                       }
                       Database::disconnect();
                      ?>
                      </tbody>
                </table>
        </div>
    </div> <!-- /container -->
  </body>
</html>

Sekarang jika kita menavigasi ke halaman "index.php". Kita akan melihat tombol "Update" dan "Delete" untuk setiap baris. Tombol-tombol tersebut belum berfungsi.



2. Membuat halaman "Update"

Buat file "update.php". File ini hampir sama dengan bagian "Create", kecuali file ini tidak hanya akan memperbarui record, tetapi juga menampilkan data.

Kita juga akan memperlakukan file ini sebagai dua bagian seperti yang saat pembuatan halaman "Create".

Bagian pertama dari kode adalah form html. Bagian form ini persis sama dengan halaman "Create". Salin kode di bawah ini ke file "update.php":

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <link   href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/bootstrap.min.js"></script>
</head>
 
<body>
    <div class="container">
     
                <div class="span10 offset1">
                    <div class="row">
                        <h3>Update Pelanggan</h3>
                    </div>
             
                    <form class="form-horizontal" action="update.php?id=<?php echo $id?>" method="post">
                      <div class="control-group <?php echo !empty($namaError)?'error':'';?>">
                        <label class="control-label">Nama</label>
                        <div class="controls">
                            <input name="nama" type="text"  placeholder="Nama" value="<?php echo !empty($nama)?$nama:'';?>">
                            <?php if (!empty($namaError)): ?>
                                <span class="help-inline"><?php echo $namaError;?></span>
                            <?php endif; ?>
                        </div>
                      </div>
                      <div class="control-group <?php echo !empty($emailError)?'error':'';?>">
                        <label class="control-label">Email</label>
                        <div class="controls">
                            <input name="email" type="text" placeholder="Alamat Email" value="<?php echo !empty($email)?$email:'';?>">
                            <?php if (!empty($emailError)): ?>
                                <span class="help-inline"><?php echo $emailError;?></span>
                            <?php endif;?>
                        </div>
                      </div>
                      <div class="control-group <?php echo !empty($nomorhpError)?'error':'';?>">
                        <label class="control-label">Nomor HP</label>
                        <div class="controls">
                            <input name="nomorhp" type="text"  placeholder="Nomor HP" value="<?php echo !empty($nomorhp)?$nomorhp:'';?>">
                            <?php if (!empty($nomorhpError)): ?>
                                <span class="help-inline"><?php echo $nomorhpError;?></span>
                            <?php endif;?>
                        </div>
                      </div>
                      <div class="form-actions">
                          <button type="submit" class="btn btn-success">Update</button>
                          <a class="btn" href="index.php">Back</a>
                        </div>
                    </form>
                </div>
                 
    </div> <!-- /container -->
  </body>
</html>

Bagian kedua dari kode adalah di mana proses update record terjadi. Salin kode di bawah ini ke awal file "update.php"; kita akan membahasnya setelahnya:

<?php
    require 'database.php';
 
    $id = null;
    if ( !empty($_GET['id'])) {
        $id = $_REQUEST['id'];
    }
     
    if ( null==$id ) {
        header("Location: index.php");
    }
     
    if ( !empty($_POST)) {
        // cek error validasi
        $namaError = null;
        $emailError = null;
        $nomorhpError = null;
         
        // ambil nilai input
        $nama = $_POST['nama'];
        $email = $_POST['email'];
        $nomorhp = $_POST['nomorhp'];
         
        // validate input
        $valid = true;
        if (empty($nama)) {
            $namaError = 'Nama Wajib Diisi';
            $valid = false;
        }
         
        if (empty($email)) {
            $emailError = 'Email Wajib Diisi';
            $valid = false;
        } else if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
            $emailError = 'Email Tidak Valid';
            $valid = false;
        }
         
        if (empty($nomorhp)) {
            $nomorhpError = 'Nomor HP Wajib Diisi';
            $valid = false;
        }
         
        // update data
        if ($valid) {
            $pdo = Database::connect();
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql = "UPDATE pelanggan  set nama = ?, email = ?, nomorhp =? WHERE id = ?";
            $q = $pdo->prepare($sql);
            $q->execute(array($nama,$email,$nomorhp,$id));
            Database::disconnect();
            header("Location: index.php");
        }
    } else {
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT * FROM pelanggan where id = ?";
        $q = $pdo->prepare($sql);
        $q->execute(array($id));
        $data = $q->fetch(PDO::FETCH_ASSOC);
        $nama = $data['nama'];
        $email = $data['email'];
        $nomorhp = $data['nomorhp'];
        Database::disconnect();
    }
?>

Seperti yang terlihat, pertama-tama periksa apakah ada form submit dengan memeriksa variabel $_POST. Jika ada, periksa setiap entri untuk memastikan lulus aturan validasi, setelah itu perbarui data menggunakan $_POST data. Akhirnya arahkan user ke "index.php" menggunakan fungsi PHP header(). Di sisi lain, ini adalah permintaan $_GET yang akan mengambil record dari database.

Sekarang coba klik tombol "Update" di halaman "index.php" yang akan mengarahkan ke halaman yang mirip dengan di bawah ini:



3. Membuat halaman "Delete"

Inilah bagian terakhir. Buat file "delete.php". Salin kode di bawah ini.

<?php
    require 'database.php';
    $id = 0;
     
    if ( !empty($_GET['id'])) {
        $id = $_REQUEST['id'];
    }
     
    if ( !empty($_POST)) {
        // melacak nilai posting
        $id = $_POST['id'];
         
        // hapus data
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "DELETE FROM pelanggan  WHERE id = ?";
        $q = $pdo->prepare($sql);
        $q->execute(array($id));
        Database::disconnect();
        header("Location: index.php");
         
    }
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <link   href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/bootstrap.min.js"></script>
</head>
 
<body>
    <div class="container">
     
                <div class="span10 offset1">
                    <div class="row">
                        <h3>Hapus Pelanggan</h3>
                    </div>
                     
                    <form class="form-horizontal" action="delete.php" method="post">
                      <input type="hidden" name="id" value="<?php echo $id;?>"/>
                      <p class="alert alert-error">Anda yakin hapus data?</p>
                      <div class="form-actions">
                          <button type="submit" class="btn btn-danger">Yes</button>
                          <a class="btn" href="index.php">No</a>
                        </div>
                    </form>
                </div>
                 
    </div> <!-- /container -->
  </body>
</html>

Mari kita lihat bagian awal dari kode PHP. Pertama-tama ambil $id dari permintaan $_GET. Setelah permintaan $_GET ditentukan. Arahkan ke halaman konfirmasi. Jika permintaan $_POST terdeteksi, itu berarti user melakukan klik tombol konfirmasi "Ya". Kemudian akan dilanjutkan untuk menghapus record data dan mengalihkan ke halaman "index.php".

Bagian selanjutnya, yang merupakan bagian statis html cukup sederhana yaitu menyimpan $_GET['id'] ke bidang tersembunyi (hidden field).

Halaman "delete.php" akan terlihat seperti di bawah ini. Jika kita mengklik tombol "Yes", akan diarahkan ke halaman indeks dan record yang dipilih akan dihapus.



EmoticonEmoticon