Cara Membuat CMS Berita dengan PHP


Tahun baru semangat baru kali ini kita akan membuat sebuah CMS berita dengan PHP. CMS(Conten management system) adalah sebuah aplikasi web yang tujuanya untuk memudahkan pengelolaan konten dalam sebuah website contohnya seperti wordpress, joomla, drupal, magento dll.

Untuk membuat aplikasi berita, pertama buat dulu database nya di phpmyadmin. disini saya menggunakan nama pw2 untuk database nya, kemudian buat dua buah tabel yaitu tabel kategori dan table berita

Kemudian buat koneksi ke database, saya menggunakan nama koneksi.php isinya seperti berikut:
<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbnm = "pw2";
$conn = mysql_connect ($host, $user, $pass);
if ($conn) {
    $buka = mysql_select_db ($dbnm);
    if    (!$buka)    {  
        die ("Database tidak dapat dibuka");    
    }  
} else {
    die ("Server MySQL tidak terhubung");
}
?>

Lalu buat halaman input berita disini saya menggunakan nama input_berita.php
<?php
include "koneksi.php";
//proses input berita
if (isset($_POST['input'])) {
    $judul = addslashes (strip_tags ($_POST['judul']));
    $kategori = $_POST['kategori'];
    $headline = addslashes (strip_tags ($_POST['headline']));
    $isi_berita = addslashes (strip_tags ($_POST['isi']));
    $pengirim = addslashes (strip_tags ($_POST['pengirim']));
    //insert ke tabel
    $query = "INSERT INTO berita
VALUES('','$kategori','$judul','$headline','$isi_berita','$pengirim', now())";
    $sql = mysql_query ($query);
    if    ($sql)    {  
        echo "<h2><font color=blue>Berita telah berhasil ditambahkan</font></h2>";        
    } else {
        echo "<h2><font color=red>Berita gagal ditambahkan</font></h2>";        
    }  
}
?>
<html>
    <head><title>Input Berita</title>  
    <link    rel="stylesheet"    href="style.css">  
    </head>  
    <body>  
        <a href="index.php">Halaman Depan</a> |
        <a href="arsip_berita.php">Arsip Berita</a> |
        <a href="input_berita.php">Input Berita</a>
        <br><br>  
<form action="" method="POST" name="input">
<table cellpading="0" cellspacing="0" border="0" width="700">
<tr>
<td colspan="2"><h2>Input Berita</h2></td>
</tr>
<tr>
<td width="200">Judul Berita</td>
<td>: <Input type="text" name="judul" size="30"></td>
</tr>
<tr>
<td>Kategori</td>
<td>:
<select name="kategori">
<option value=0 selected>- Pilih Kategori -</option>";
<?php
$tampil=mysql_query("SELECT * FROM kategori  ORDER BY nm_kategori");
while($r=mysql_fetch_array($tampil)){
echo "<option value=$r[id_kategori]>
$r[nm_kategori]</option>";
}  ?>
</select></td>
</tr>
<tr>
<td>Headline Berita</td>
<td>: <textarea name="headline" cols="50" rows="4"></textarea></td>
</tr>
<tr>
<td>Isi Berita</td>
<td>: <textarea name="isi" cols="50" rows="10"></textarea></td>
</tr>
<tr>
<td>Pengirim</td>
<td>: <input type="text" name="pengirim" size="20" ></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;&nbsp; <input type="submit" name="input" value="Input Berita"> &nbsp;<input type="reset" name="reset" value="Cancel"></td>
</tr>
</table>
</form>
</body>
</html>

Untuk kategori bisa diinputkan manual melalui PHPmyadmin, tambahkan beberapa kategori. kemudian buat file arsip berita disini saya menggunakan nama arsip_berita.php
<?php
include "koneksi.php";
?>
<html>
    <head><title>Arsip    Berita</title>  
    <link    rel="stylesheet"    href="style.css">  
    <script    language="javascript">  
        function tanya() {
            if (confirm ("Apakah Anda yakin akan menghapus berita ini ?")) {
                 return    true;        
            } else {
                 return    false;      
             }  
        }  
    </script>  
    </head>  
    <body>  
        <a href="index.php">Halaman Depan</a> |
        <a href="arsip_berita.php">Arsip Berita</a> |
        <a href="input_berita.php">Input Berita</a>
        <br><br>  
        <h2>Arsip Berita</h2>  
        <ol>  
        <?php
$query = "select A.id_berita, B.nm_kategori, A.judul, A.pengirim, A.tanggal from berita A, kategori B where A.id_kategori=B.id_kategori order by A.id_berita DESC";
$sql = mysql_query ($query);
while ($hasil = mysql_fetch_array ($sql)) {
$id_berita = $hasil['id_berita'];
$kategori = stripslashes($hasil['nm_kategori']);
$judul = stripslashes ($hasil['judul']);
$pengirim = stripslashes ($hasil['pengirim']);
$tanggal = stripslashes ($hasil['tanggal']);
//tampilkan    arsip    berita  
             echo "<li><a href='berita_lengkap.php?id=$id_berita'>$judul</a><br>";
            echo "<small>Berita dikirimkan oleh <b>$pengirim</b>
               pada tanggal <b>$tanggal</b> dalam kategori <b>$kategori</b><br>";
            echo "<b>Action : </b><a href='edit_berita.php?id=$id_berita'>Edit</a> | ";
             echo "<a href='delete_berita.php?id=$id_berita' onClick='return tanya()'>Delete</a>";
             echo "</small></li><br><br>";
}
        ?>  
<p></p>
        </ol>  
    </body>  
</html>

Kemudian buat file berita lengkap untuk menampilkan berita lengkapnya. disini saya menggunakan berita_lengkap.php. berikut kodenya:

<?php
include "koneksi.php";

if (isset($_GET['id'])) {
$id_berita = $_GET['id'];
}else{
die ("Error. No Id Selected! ");
}
?>
<html>
<head><title>Berita Lengkap</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<a href="index.php">Halaman Depan</a> |
<a href="arsip_berita.php">Arsip Berita</a> |
<a href="input_berita.php">Input Berita</a>
<br><br>
<h2>Berita Lengkap</h2>
<?php
$query = "select A.id_berita, B.nm_kategori, A.judul,A.isi, A.pengirim, A.tanggal from berita A, kategori B where A.id_kategori=B.id_kategori && A.id_berita='$id_berita'";
$sql = mysql_query ($query);
$hasil = mysql_fetch_array ($sql);
$id_berita = $hasil['id_berita'];
$kategori = stripslashes ($hasil['nm_kategori']);
$judul = stripslashes ($hasil['judul']);
$isi = nl2br(stripslashes ($hasil['isi']));
$pengirim = stripslashes ($hasil['pengirim']);
$tanggal = stripslashes ($hasil['tanggal']);
//tampilkan berita
echo "<font size='5' color='blue'>$judul</font><br>";
echo "<small>Berita dikirimkan oleh <b>$pengirim</b> pada tanggal <b>$tanggal</b> dalam kategori <b>$kategori</b></small>";
echo "<p>$isi</p>";
?>
</body>
</html>

Selanjutnya yaitu membuat edit berita untuk mengedit beritanya, disini saya menggunakan nama edit_berita.php. ini source kodenya:
<?php
include "koneksi.php";
if (isset($_GET['id'])) {
    $id_berita = $_GET['id'];
} else {
    die ("Error. No Id Selected! ");
}
$query = "SELECT id_berita, id_kategori, judul, headline, isi,
pengirim, tanggal
          FROM berita WHERE id_berita='$id_berita'";
$sql = mysql_query ($query);
$hasil = mysql_fetch_array ($sql);
$id_berita = $hasil['id_berita'];
$id_kategori = stripslashes ($hasil['id_kategori']);
$judul = stripslashes ($hasil['judul']);
$headline = stripslashes ($hasil['headline']);
$isi = stripslashes ($hasil['isi']);
$pengirim = stripslashes ($hasil['pengirim']);
$tanggal = stripslashes ($hasil['tanggal']);
//proses edit berita
if (isset($_POST['Edit'])) {
    $id_berita = $hasil['id_berita'];
    $judul = addslashes (strip_tags ($_POST['judul']));
    $kategori = $_POST['kategori'];
    $headline = addslashes (strip_tags ($_POST['headline']));
    $isi_berita = addslashes (strip_tags ($_POST['isi']));
    $pengirim = addslashes (strip_tags ($_POST['pengirim']));
    //update    berita  
    $query = "UPDATE berita SET id_kategori='$kategori',judul='$judul',headline='$headline',
              isi='$isi_berita',pengirim='$pengirim' WHERE id_berita='$id_berita'";
    $sql = mysql_query ($query);
    if    ($sql)    {  
        echo "<h2><font color=blue>Berita telah berhasil diedit</font></h2>";      
    } else {
        echo    "<h2><font color=red>Berita gagal diedit</font></h2>";      
    }  
}
?>
<html>
    <head><title>Edit    Berita</title>  
    <link    rel="stylesheet"    href="style.css">  
    </head>  
    <body>  
        <a href="index.php">Halaman Depan</a> |
        <a href="arsip_berita.php">Arsip Berita</a> |
        <a href="input_berita.php">Input Berita</a>
        <br><br>  
        <FORM ACTION="" METHOD="POST" NAME="input">
            <table cellpadding="0" cellspacing="0" border="0" width="700">
                  <tr>  
                       <td    colspan="2"><h2>Input Berita</h2></td>  
                  </tr>  
                  <tr>  
                       <td    width="200">Judul Berita</td>  
                    <td>: <input type="text" name="judul" size="30" value="<?=$judul?>"></td>
                  </tr>  
                  <tr>  
                       <td>Kategori</td>  
                       <td>:      
                       <select name="kategori">
<?php
$tampil=mysql_query("SELECT * FROM kategori  ORDER BY nm_kategori");
while($r=mysql_fetch_array($tampil)){
echo "<option value=$r[id_kategori]>
$r[nm_kategori]</option>";
}  ?>
                       </select></td>  
                  </tr>  
                  <tr>  
                       <td>Headline Berita</td>  
                    <td>: <textarea name="headline" cols="50" rows="4"><?=$headline?></textarea></td>
                  </tr>  
                  <tr>  
                       <td>Isi Berita</td>  
                    <td>: <textarea name="isi" cols="50" rows="10"><?=$isi?></textarea></td>
                  </tr>  
                  <tr>  
                       <td>Pengirim</td>  
                    <td>: <input type="text" name="pengirim" size="20" value="<?=$pengirim?>"></td>
                  </tr>  
                  <tr>  
                       <td>&nbsp;</td>  
                       <td>&nbsp;&nbsp;  
                       <input type="hidden" name="hidberita" value="<?=$id_berita?>">
                    <input type="submit" name="Edit" value="Edit Berita">&nbsp;
                       <input type="reset" name="reset" value="Cancel"></td>
                  </tr>  
             </table>  
        </FORM>  
</body>  
</html>

Lalu membuat file delete_berita.php untuk menghapus berita. berikut kodenya:
<?php
include "koneksi.php";
if (isset($_GET['id'])) {
    $id_berita = $_GET['id'];
} else {
    die ("Error. No Id Selected! ");
}
?>
<html>
    <head><title>Delete    Berita</title>  
    <link    rel="stylesheet"    href="style.css">  
    </head>  
    <body>  
        <a href="index.php">Halaman Depan</a> |
        <a href="arsip_berita.php">Arsip Berita</a> |
        <a href="input_berita.php">Input Berita</a>
        <br><br>  
        <?php  
        //proses delete berita
        if (!empty($id_berita) && $id_berita != "") {
            $query = "DELETE FROM berita WHERE id_berita='$id_berita'";
            $sql = mysql_query ($query);
             if    ($sql)    {  
             echo "<h2><font color=blue>Berita telah berhasil dihapus</font></h2>";    
            } else {
             echo "<h2><font color=red>Berita gagal dihapus</font></h2>";    
             }  
            echo "Klik <a href='arsip_berita.php'>di sini</a> untuk kembali ke halaman arsip berita";
        } else {
             die    ("Access    Denied");      
        }  
        ?>  
    </body>  
</html>

Terakhir adalah membuat halaman index.php halaman ini berfungsi sebagai halaman utama yang ditampilkan untuk pengunjung. berikut ini kodingnya:
<?php
include "koneksi.php";
?>
<html>
<head><title>Berita Utama</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<ul>
<li><a href="index.php">Halaman Depan</a></li>
<li><a href="arsip_berita.php">Arsip Berita</a></li>
<li><a href="input_berita.php">Input Berita</a></li>
</ul>
<br><br>
<h2>Halaman Depan ~ Lima Berita terbaru</h2>
<?php
$query = "select A.id_berita, B.nm_kategori, A.judul, A.headline, A.pengirim, A.tanggal from berita A, kategori B where A.id_kategori=B.id_kategori order by A.id_berita DESC LIMIT 0,5";
$sql = mysql_query ($query) ;
while ($hasil = mysql_fetch_array ($sql)) {
$id_berita = $hasil['id_berita'];
$kategori = stripslashes ($hasil['nm_kategori']);
$judul = stripslashes ($hasil['judul']);
$headline = nl2br(stripslashes ($hasil['headline']));
$pengirim = stripslashes($hasil['pengirim']);
$tanggal = stripslashes($hasil['tanggal']);
//tampilkan berita
echo "<font size='4'><a href='berita_lengkap.php?id=$id_berita'>$judul</a></font><br>";
echo "<small>Berita dikirim oleh <b>$pengirim</b> pada tanggal <b>$tanggal</b> dalam kategori <b>$kategori</b></small>";
echo "<p>$headline</p>";
echo "<hr>";
}
?>
</body>
</html>

dan yang paling terakhir adalah menambahkan CSS untuk mempercantik tampilanya. disini saya menggunakan nama style.css berikut ini kode cssnya:
* {
margin: 0;
padding: 0;
}
body {
font-family:verdana;
font-size:11px;
width: 80%;
margin: 0 auto;
}
a {
color:#0000ff;
text-decoration:underline;
}
a:hover {
color:#ffffff;
background-color:#8AC452;
text-decoration:none;
}
input, textarea, select, option {
font-family:verdana;
}
ul {
list-style: none;
background-color: yellow;
}
li {
display: inline-block;
padding: 10px;
}

Mysqli vs PDO


Berdasarkan informasi dari group PHP Indonesia dan informasi dari internet bahwa sekarang mysql extension sudah tidak didukung lagi di PHP versi 7 dan untuk PHP 5 pun hanya untuk Penelitian. Jadi disarankan agar Pindah ke MYSQLi atau PDO(PHP Data Objek). Pada dasarnya jika kita ingin mengkoneksikan ke database kita dapat menggunakan tiga pilihan yaitu mysql extension, mysqli extension atau pdo extension. tetapi untuk sekarang hanya ada dua pilihan yaitu mysqli dan pdo. karena mysql extension sudah tidak didukung lagi oleh php generasi terbaru.

Jika Menggunakan PDO sudah Pasti perogram kita berbasis OOP(Objek Oriented Programming) dan keunggulanya PDO ini sudah support 12 jenis Basis data jadi jika ingin pindah dari basis data MYSQL ke basis data lain kita tidak Perlu merombak semua script. Namun jika masih Pemula menggunakan MYSQLi tidak akan terlalu sulit dari mysql extension biasa tetapi kelemahanya MYSQLi hanya mendukung satu basis data saja yaitu MYSQL

nah berikut ini adalah perbedaan penulisan script pdo dan mysqli
1. Koneksi
// PDO
$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password');
// mysqli, procedural
$mysqli = mysqli_connect('localhost','username','password','database');
// mysqli, object oriented
$mysqli = new mysqli('localhost','username','password','database');

2. Penamaan Parameter
mysqli:
$query = $mysqli->prepare('
    SELECT * FROM users
    WHERE username = ?
    AND email = ?
    AND last_login > ?');
     
$query->bind_param('sss', 'test', $mail, time() - 3600);
$query->execute();
pdo:
$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600);
     
$pdo->prepare('
    SELECT * FROM users
    WHERE username = :username
    AND email = :email
    AND last_login > :last_login');
     
$pdo->execute($params);