Sistem
Manajemen Konten
Dengan alasannya masing-masing, orang
cenderung mudah bosan. Salah satu tugas Anda sebagai administrator dari sebuah
situs web bukan hanya bagaimana mendapatkan sebanyak mungkin orang untuk
mengunjungi web site Anda, tetapi juga berusaha agar mereka tetap selalu
mengunjungi situs Anda.
Agar pengunjung nyaman di situs Anda, para
ahli mengusulkan agar situs web Anda didesain untuk mudah dinavigasi, diakses
dengan mudah. Situs web Anda juga sebaiknya memberikan pengalaman pribadi bagi
penggunanya.
Konten yang Segar Memerlukan Kerja Keras
Ingat semua situs yang sering Anda kunjungi
hampir setiap hari. Apa kesamaan dari semua situs tersebut? Sudah hampir pasti,
tiap situs tersebut secara periodik diperbarui dengan informasi baru. Anda
mungkin mengunjungi sebuah situs web setiap hari untuk melihat cuaca di daerah
Anda atau untuk melihat berita nasional terbaru. Pada tiap situs tersebut,
konten selalu diperbarui secara reguler, bisa mingguan, harian, dan kadangkala
tiap jam. Sekarang, Anda bisa membayangkan berapa banyak pekerjaan dari para
pengembang situs web tersebut untuk memperbarui kontennya setiap hari!
Apapun tujuan dari situs web Anda, yang biasa
dimuatnya adalah berita, gambar, komentar pengguna, dan lainnya. Anda sendiri
tidak mungkin bisa memperbarui semua konten situs tersebut. Situs Anda harus
memiliki kemampuan untuk membagi beban pekerjaan tersebut kepada beberapa pihak
lain.
Secara teori, yang harus dilakukan oleh para
pengembang situs web adalah memperbarui desain dan kode situs. Sebagai contoh,
memperbarui beberapa kode HTML, mengubah warna latar belakang, memperbarui
kekurangan minor pada kode PHP Anda, dan seterusnya. Konten seutuhnya
seharusnya terpisah dari desain situs sehingga konten dapat dilakukan oleh
pihak lain. Karena pengelolaan konten terpisah dari desain, orang yang Anda
utus untuk mengembangkan konten tidak perlu mengetahui apapun tentang
perancangan web!
Tergantung dari banyaknya konten yang
dimiliki situs Anda, pemuatan konten tersebut ke dalam situs Anda kemungkinan
besar akan menyita waktu. Anda perlu sebuah cara untuk mengorganisirnya,
mengkategorikannya, dan menempatkannya pada situs Anda. Anda mungkin memerlukan
sejumlah orang, setiap orang tersebut memegang peranan tertentu, yang bekerja
sama untuk menciptakan konten dan mempercantiknya sehingga menjadi sajian
menarik.
Sistem Manajemen Konten
Anda telah belajar bagaimana menciptakan
database dan tabel Anda sendiri, dan bagaimana menciptakan halaman-halaman web
yang dipakai untuk mengelola informasi di dalamnya. Anad juga telah belajar
bagaimana mengotentikasi pengguna situs Anda dengan mewajibkan mereka untuk
melakukan login. Diperlengkapi dengan semua pengetahuan ini, Anda dapat dengan
mudah menciptakan sebuah aplikasi sehingga pengguna dapat menciptakan konten
baru (pengarang atau penulis), mengedit konten tersebut (editor), dan
mempublikasikannya. Dengan menugaskan beberapa pengguna dengan peran masing-masing,
Anda dapat mengendalikan siapa yang memiliki akses terhadap fungsi-fungsi
tertentu di dalam situs. Dengan kata lain, Anda memerlukan sebuah sistem
sehingga Anda dapat mengelola konten situs web Anda yang terpisah dari
perancangan situs. Oleh karena itu, Anda memerlukan sebuah sistem manajemen
konten (CMS, content management system).
Ada banyak tingkatan manejemen konten. Pada
beberapa situs, hal ini berkaitan dengan papan pesan, dimana pengguna dapat
mendaftar dan kemudian menuliskan pesannya kepada pengguna lain. Pada situs
lain, hal ini berkaitan dengan laporan peliputan berita, penulisan cerita
pendek, dan lainnya.
Seperti yang Anda ketahui, CMS tidak hanya
berkaitan dengan bagaimana sebuah aplikasi dipakai untuk mengelola konten,
tetapi ia juga berkaitan dengan penentuan siapa yang bertanggung jawab dalam
pengembangan konten dan berkaitan pula dengan aturan-aturan yang harus
dipatuhi. Adalah tanggung jawab Anda untuk mencari siapa yang bisa Anda
percayai, buku ini hanya membantu Anda dalam menetapkan beberapa aturan dan
dalam mengembangkan aplikasi.
Aturan
Aplikasi CMS yang akan Anda bangun pada bab
ini akan memampukan para pengguna yang terdaftar untuk menampilkan artikel.
Artikel tersebut akan diberi label “pending” sampai seorang pengguna dengan
tingkat hak akses yang lebih tinggi mempublikasikannya. Begitu sebuah artikel
dipublikasikan, konten tersebut akan ditampilkan sebagai artikel terbaru pada
halaman rumah. Pengguna tak-terdaftar dapat membaca artikel tersebut, tetapi ia
tidak dapat memposkan artikel. Pengguna terdaftar dapat pula memposkan
komentarnya tentang artikel tertentu. Ketika seorang penjung situs web
membaca/melihat artikel utuh, semua komentar akan ditampilkan di bawahnya.
Mempersiapkan Database
Hal pertama yang Anda perlukan adalah
menciptakan skript yang akan membangun struktur database awal. Anda akan
menggunakan file otorisasi_komik.inc.php
dari beberapa bab sebelumnya untuk menetapkan koneksi ke database Anda.
Contoh
|
Menciptakan
struktur database
|
1.
Tempatkan
kode berikut dalam sebuah file dengan nama struktur_db.php,
jalankan dengan browser Anda. File tersebut akan menciptakan tabel-tabel Anda
dan menyisipkan seorang pengguna administratif sehingga Anda dapat mengelola
situs.
<?php
require 'otorisasi_komik.inc.php';
$db = mysql_connect(MYSQL_HOST,
MYSQL_USER, MYSQL_PASSWORD) or
die ('Tidak bisa terhubung. Periksa
parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB, $db) or
die(mysql_error($db));
$sql = 'CREATE TABLE IF NOT EXISTS
level_akses_cms (
level_akses TINYINT UNSIGNED NOT NULL
AUTO_INCREMENT,
nama_akses VARCHAR(50) NOT NULL DEFAULT
"",
PRIMARY
KEY (level_akses)
)
ENGINE=MyISAM';
mysql_query($sql, $db) or
die(mysql_error($db));
$sql = 'INSERT IGNORE INTO level_akses_cms
(level_akses, nama_akses)
VALUES
(1, "User"),
(2, "Moderator"),
(3, "Administrator")';
mysql_query($sql, $db) or
die(mysql_error($db));
$sql = 'CREATE TABLE IF NOT
EXISTS pengguna_cms (
id_user INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
email VARCHAR(100) NOT NULL UNIQUE,
password CHAR(41) NOT NULL,
nama VARCHAR(100) NOT NULL,
level_akses TINYINT UNSIGNED NOT NULL
DEFAULT 1,
PRIMARY
KEY (id_user)
)
ENGINE=MyISAM';
mysql_query($sql, $db) or
die(mysql_error($db));
$sql = 'INSERT IGNORE INTO
pengguna_cms
(id_user, email, password, nama, level_akses)
VALUES
(NULL, "admin@contoh.com",
PASSWORD("rahasia"), "Administrator", 3)';
mysql_query($sql, $db) or
die(mysql_error($db));
$sql = 'CREATE TABLE IF NOT
EXISTS artikel_cms (
id_artikel INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
id_user INTEGER UNSIGNED NOT NULL,
apa_dipublikasikan BOOLEAN NOT NULL
DEFAULT FALSE,
tanggal_submit DATETIME NOT NULL,
tanggal_publish DATETIME,
judul VARCHAR(255) NOT NULL,
teks_artikel MEDIUMTEXT,
PRIMARY
KEY (id_artikel),
FOREIGN KEY (id_user) REFERENCES
pengguna_cms(id_user),
INDEX (id_user, tanggal_submit),
FULLTEXT INDEX (judul, teks_artikel)
)
ENGINE=MyISAM';
mysql_query($sql, $db) or
die(mysql_error($db));
$sql = 'CREATE TABLE IF NOT
EXISTS komentar_cms (
id_komentar INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
id_artikel INTEGER UNSIGNED NOT NULL,
id_user INTEGER UNSIGNED NOT NULL,
tanggal_komentar DATETIME NOT NULL,
teks_komentar MEDIUMTEXT,
PRIMARY
KEY (id_komentar),
FOREIGN KEY (id_artikel) REFERENCES
artikel_cms(id_artikel),
FOREIGN KEY (id_user) REFERENCES
pengguna_cms(id_user)
)
ENGINE=MyISAM';
mysql_query($sql, $db) or
die(mysql_error($db));
echo 'Sukses!';
?>
Dalam struktur_db.php, Anda menciptakan tabel yang diperlukan untuk
level-level akses. Semua bidang, tipe datanya, dan parameter-parameter lain
didefinisikan pada statemen SQL ini. Anda menggunakan IF NOT EXISTS sehingga perintah
CREATE tidak melakukan apapun jika tabel telah ada sebelumnya.
$sql =
'CREATE TABLE IF NOT EXISTS akses_level_cms (
akses_level TINYINT UNSIGNED NOT NULL
AUTO_INCREMENT,
nama_akses VARCHAR(50) NOT NULL DEFAULT
"",
PRIMARY KEY (akses_level)
)
ENGINE=MyISAM';
mysql_query($sql, $db) or die(mysql_error($db));
Statemen SQL berikutnya menyisipkan data ke
dalam tabel akses_level_cms. Level-level akses dipakai pada aplikasi CMS untuk
menentukan apa fungsionalitas yang dimiliki oleh tiap user.
$sql
= 'INSERT IGNORE INTO akses_level_cms
(akses_level, nama_akses)
VALUES
(1, "User"),
(2, "Moderator"),
(3, "Administrator")';
mysql_query($sql,
$db) or die(mysql_error($db));
Ketika menciptakan tabel pengguna_cms, Anda
menggunakan katakunci UNIQUE untuk menambahkan pengekang dalam memastikan bahwa
setiap alamat email pengguna harus unik.
$sql
= 'CREATE TABLE IF NOT EXISTS pengguna_cms (
id_user INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
email VARCHAR(100) NOT NULL UNIQUE,
password CHAR(41) NOT NULL,
nama VARCHAR(100) NOT NULL,
akses_level TINYINT UNSIGNED NOT NULL
DEFAULT 1,
PRIMARY KEY (id_user)
)
ENGINE=MyISAM';
mysql_query($sql,
$db) or die(mysql_error($db));
Setelah Anda menciptakan tabel pengguna_cms,
Anda menyisipkan satu rekaman sehingga Anda
memiliki akun administrator yang dapat melakukan login dengan segera.
Akun ini diberikan hak akses administrator dan memampukan Anda untuk mengelola
situs.
$sql
= 'INSERT IGNORE INTO pengguna_cms
(id_user, email, password, nama,
akses_level)
VALUES
(NULL, "admin@contoh.com",
PASSWORD("rahasia"), "Administrator", 3)';
Tabel artikel_cms akan menyimpan
artikel-artikel yang diposkan oleh para pengguna terdaftar pada situs Anda:
$sql
= 'CREATE TABLE IF NOT EXISTS artikel_cms (
id_artikel INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
id_user INTEGER UNSIGNED NOT NULL,
apa_dipublikasikan BOOLEAN NOT NULL
DEFAULT FALSE,
tanggal_submit DATETIME NOT NULL,
tanggal_publish DATETIME,
judul VARCHAR(255) NOT NULL,
teks_artikel MEDIUMTEXT,
PRIMARY KEY (id_artikel),
FOREIGN KEY (id_user) REFERENCES
pengguna_cms(id_user),
INDEX (id_user, tanggal_submit),
FULLTEXT INDEX (judul, teks_artikel)
)
ENGINE=MyISAM';
mysql_query($sql,
$db) or die(mysql_error($db));
Pendaur-ulangan Kode
Semakin mahir Anda sebagai programer, Anda
akan memerhatikan bagian-bagian kode yang sering berulang pada aplikasi Anda.
Daripada harus mengetikkan kode secara berulang, Anda dapat menempatkan kode
tersebut pada file terpisah dan kemudian mencantumkan file tersebut pada skript
Anda. Pada aplikasi CMS, fungsionalitas inti yang sama dipakai pada banyak
halaman yang berbeda. Adalah masuk akal bila menuliskan kode ini sebagai fungsi
atau kelas pada file terpisah dan kemudian mencantumkannya di atas tiap skript
ketika fungsionalitas tersebut diperlukan.
Contoh
|
Menciptakan
skript yang akan didaur-ulang
|
1.
Masukkan
kode berikut, dan simpan dengan nama fungsi_keluaran_cms.inc.php.
File ini memuat fungsi-fungsi untuk menghasilkan elemen-elemen halaman yang
berbeda pada aplikasi CMS Anda.
<?php
// Menghasilkan sebuah string
yang dipotong pada jumlah karakter maksimum.
// Jika string telah dipotong, ia
akan memiliki $ekot yang
// ditempelkan di belakangnya.
function potong_tubuh($teks,
$panjang_maks = 500, $ekor = '...') {
$pjg_ekor = strlen($ekor);
if (strlen($teks) > $panjang_maks) {
$tmp_teks = substr($teks, 0,
$panjang_maks - $pjg_ekor);
if (substr($teks, $panjang_maks -
$pjg_ekor, 1) == ' ') {
$teks = $tmp_teks;
}
else {
$pos = strrpos($tmp_teks, ' ');
$teks = substr($teks, 0, $pos);
}
$teks = $teks . $ekor;
}
return $teks;
}
// Menampilkan sebuah artikel
dari database.
function tampil_cerita($db,
$id_artikel, $hanya_preview = FALSE) {
if (empty($id_artikel)) {
return;
}
$sql = 'SELECT
nama, apa_dipublikasikan, judul,
teks_artikel,
UNIX_TIMESTAMP(tanggal_submit) AS
tanggal_submit,
UNIX_TIMESTAMP(tanggal_publish) AS
tanggal_publish
FROM
artikel_cms a JOIN pengguna_cms u
ON a.id_user = u.id_user
WHERE
id_artikel = ' . $id_artikel;
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
if ($baris = mysql_fetch_assoc($hasil)) {
extract($baris);
echo '<h2>' .
htmlspecialchars($judul) . '</h2>';
echo '<p>Oleh: ' .
htmlspecialchars($nama) . '</p>';
echo '<p>';
if ($baris['apa_dipublikasikan']) {
echo date('F j, Y',
$tanggal_publish);
} else {
echo 'Artikel belum
dipublikasikan.';
}
echo '</p>';
if ($hanya_preview) {
echo '<p>' .
nl2br(htmlspecialchars(potong_tubuh($teks_artikel))) .
'</p>';
echo '<p><a
href="lihat_artikel_cms.php?id_artikel=' . $id_artikel .
'"> Baca Semuanya
</a></p>';
} else {
echo '<p>' .
nl2br(htmlspecialchars($teks_artikel)) . '</p>';
}
}
mysql_free_result($hasil);
}
function tampil_komentar($db,
$id_artikel, $tampil_link = TRUE) {
if (empty($id_artikel)) {
return;
}
$sql = 'SELECT apa_dipublikasikan FROM
artikel_cms WHERE id_artikel = ' .
$id_artikel;
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
$baris = mysql_fetch_assoc($hasil);
$apa_dipublikasikan =
$baris['apa_dipublikasikan'];
mysql_free_result($hasil);
$sql = 'SELECT
teks_komentar, UNIX_TIMESTAMP(tanggal_komentar)
AS tanggal_komentar,
nama, email
FROM
komentar_cms c LEFT OUTER JOIN
pengguna_cms u ON c.id_user = u.id_user
WHERE
id_artikel = ' . $id_artikel . '
ORDER BY
tanggal_komentar DESC';
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
if
($tampil_link) {
echo '<h3> ' .
mysql_num_bariss($hasil) . ' Komentar';
if (isset($_SESSION['id_user']) and
$apa_dipublikasikan) {
echo ' - <a href="komentar_cms.php?id_artikel='
. $id_artikel .
'">Tambah
satu</a>';
}
echo '</h3>';
}
if (mysql_num_rows($hasil)) {
echo '<div>';
while ($baris =
mysql_fetch_array($hasil)) {
extract($baris);
echo '<span>' .
htmlspecialchars($nama) . '</span>';
echo '<span>(' . date('l F j,
Y H:i', $tanggal_komentar) . ')
</span> ';
echo '<p>' .
nl2br(htmlspecialchars($teks_komentar)) . '</p>';
}
echo '</div>';
}
echo '<br>';
mysql_free_result($hasil);
}
?>
2.
Tiga
file lain yang akan dicantumkan pada beberapa skript: header_cms.inc.php, footer_cms.inc.php,
dan fungsi_http_cms.inc.php akan
memuat bagian bawah dan atas dari halaman, dan file cms_http.php akan memuat fungsi redireksi, yang dipakai untuk
mengarahkan pengguna ke halaman lain.
<?php session_start(); ?>
<html>
<head>
<title>
CMS </title>
<style
type="text/css">
td {
vertical-align: top; }
</style>
</head>
<body>
<h1>
Apresiasi Buku Komik </h1>
<?php
if (isset($_SESSION['nama'])) {
echo '<p>
Anda sekarang login dengan username: ' . $_SESSION['nama'] . '</p>';
}
?>
</div>
<div
id="navright">
<form
method="get" action="cari_cms.php">
<div>
<label
for="search"> Cari </label>
<?php
echo '<input type="text" id="cari"
name="cari" ';
if (isset($_GET['keywords'])) {
echo '
value="' . htmlspecialchars($_GET['keywords']) . '" ';
}
echo '/>';
?>
<input
type="submit" value="Cari" / >
</div>
</form>
</div>
<div
id='navigasi'>
<a
href="indeks_cms.php"> Artikel </a>
<?php
if (isset($_SESSION['id_user'])) {
echo ' | <a
href="komposisi_cms.php"> Komposisi </a>';
if
($_SESSION['level_akses'] > 1) {
echo ' |
<a href="pending_cms.php"> Review </a>';
}
if
($_SESSION['level_akses'] > 2) {
echo ' |
<a href="admin_cms.php"> Admin </a>';
}
echo ' | <a
href="cpanel_cms.php"> Control Panel </a> ';
echo ' | <a
href="pengguna_transaksi_cms.php?aksi=Logout">
Logout </a>';
} else {
echo ' | <a
href="login_cms.php"> Login </a>';
}
?>
</div>
<div id="artikel">
Masukkan kode berikut, dan simpan
dengan nama header_cms.inc.php:
3. Dan sekarang masukkan
footer_cms.inc.php:
</div>
</body>
</html>
4. Terakhir, masukkan file fungsi_http_cms.inc.php:
<?php
function redireksi($url) {
if
(!headers_sent()) {
header('Location: ' . $url);
}
else {
die('Tidak bisa meredireksi; Keluaran telah dikirim ke browser.');
}
}
?>
Banyak halaman di sini yang akan memerlukan
pekerjaan pemrosesan yang sama secara berulang. Kode ini ditulis sebagai fungsi
pendaur-ulang dan ditempatkan pada file fungsi_keluaran_cms.inc.php.
Jika sebuah artikel sangat panjang, maka Anda
hanya akan menampilkan ringkasannya saja. Fungsi potong_tubuh() mengambil
sebagian teks dan menghasilkan versi terpotong dari teks untuk ditampilkan pada
sebuah halaman. Parameter pertama, $teks, merupakan teks yang akan Anda potong.
Parameter kedua ($panjang_maks) adalah string teks terpanjang yang dapat
dihasilkan, diekspresikan dalam jumlah karakter. Nilai defaultnya adalah 500
karakter, jika nilainya tidak ditetapkan. Terakhir, parameter ketiga ($ekor)
merupakan karakter-karakter pengekor yang ditempatkan di akhir teks yang
terpotong. Nilai defaultnya adalah sebuah elipsis (…).
function
potong_tubuh($teks, $panjang_maks = 500, $ekor = '...') {
$pjg_ekor = strlen($ekor);
if (strlen($teks) > $panjang_maks) {
$tmp_teks = substr($teks, 0,
$panjang_maks - $pjg_ekor);
if (substr($teks, $panjang_maks -
$pjg_ekor, 1) == ' ') {
$teks = $tmp_teks;
}
else {
$pos = strrpos($tmp_teks, ' ');
$teks = substr($teks, 0, $pos);
}
$teks = $teks . $ekor;
}
return $teks;
}
Fungsi potong_tubuh() menggunakan
fungsi-fungsi built-in PHP seperti strlen(), substr(), dan strrpos() untuk
melakukan beberapa kalkulasi terhadap teks yang masuk dan memotongnya menjadi
sepanjang jumlah karakter maksimum. Fungsi strlen() menerima sebuah string dan
menghasilkan panjangnya. Fungsi substr() menerima sebuah string, sebuah offset
string, dan sebuah nilai panjang (parameter opsional) dan menghasilkan sebuah
substring yang berawal di offset. Jika tidak ada parameter panjang yang
dilewatkan, maka substr() akan menghasilkan karakter-karakter sampai di akhir
string. Fungsi strrpos() menerima sebuah string dan sebuah karakter dan
melakukan pencarian terhadap karakter tersebut, diawali dari akhir string,
bergerak maju ke awal string, dan kemudian menghasilkan posisi dari kemunculan
pertama dari karakter tersebut. Fungsi strrpos() adalah sepupu dari fungsi
strpos(), yang melakukan hal yang sama, kecuali bahwa fungsi ini melakukan
pencarian dimulai dari awal string.
// Menampilkan sebuah artikel dari database.
function tampil_cerita($db, $id_artikel,
$hanya_preview = FALSE) {
if
(empty($id_artikel)) {
return;
}
$sql =
'SELECT
nama, apa_dipublikasikan, judul, teks_artikel,
UNIX_TIMESTAMP(tanggal_submit) AS tanggal_submit,
UNIX_TIMESTAMP(tanggal_publish) AS tanggal_publish
FROM
artikel_cms a JOIN pengguna_cms u ON a.id_user = u.id_user
WHERE
id_artikel = ' . $id_artikel;
$hasil =
mysql_query($sql, $db) or die(mysql_error($db));
if
($baris = mysql_fetch_assoc($hasil)) {
extract($baris);
echo
'<h2>' . htmlspecialchars($judul) . '</h2>';
echo
'<p>Oleh: ' . htmlspecialchars($nama) . '</p>';
echo
'<p>';
if
($baris['apa_dipublikasikan']) {
echo date('F j, Y', $tanggal_publish);
}
else {
echo 'Artikel belum dipublikasikan.';
}
echo
'</p>';
if
($hanya_preview) {
echo '<p>' . nl2br(htmlspecialchars(potong_tubuh($teks_artikel)))
.
'</p>';
echo '<p><a href="lihat_artikel_cms.php?id_artikel=' .
$id_artikel .
'"> Baca Semuanya </a></p>';
}
else {
echo '<p>' . nl2br(htmlspecialchars($teks_artikel)) .
'</p>';
}
}
mysql_free_result($hasil);
}
Fungsi terakhir dalam
fungsi_keluaran_cms.inc.php adalah tampil_komentar(). Sama seperti tampil_cerita(),
tampil_komentar() menerima sebuah koneksi database yang terbuka dan ID artikel
yang berkaitan dengan komentar yang akan ditampilkan.
function
tampil_komentar($db, $id_artikel, $tampil_link = TRUE) {
if (empty($id_artikel)) {
return;
}
$sql = 'SELECT apa_dipublikasikan FROM
artikel_cms WHERE id_artikel = ' .
$id_artikel;
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
$baris = mysql_fetch_assoc($hasil);
$apa_dipublikasikan =
$baris['apa_dipublikasikan'];
mysql_free_result($hasil);
$sql = 'SELECT
teks_komentar,
UNIX_TIMESTAMP(tanggal_komentar) AS tanggal_komentar,
nama, email
FROM
komentar_cms c LEFT OUTER JOIN
pengguna_cms u ON c.id_user = u.id_user
WHERE
id_artikel = ' . $id_artikel . '
ORDER BY
tanggal_komentar DESC';
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
if ($tampil_link) {
echo '<h3> ' . mysql_num_bariss($hasil)
. ' Komentar';
if (isset($_SESSION['id_user']) and
$apa_dipublikasikan) {
echo ' - <a
href="komentar_cms.php?id_artikel=' . $id_artikel .
'">Tambah
satu</a>';
}
echo '</h3>';
}
if (mysql_num_rows($hasil)) {
echo '<div>';
while ($baris =
mysql_fetch_array($hasil)) {
extract($baris);
echo '<span>' .
htmlspecialchars($nama) . '</span>';
echo '<span>(' . date('l F j,
Y H:i', $tanggal_komentar) . ')
</span> ';
echo '<p>' .
nl2br(htmlspecialchars($teks_komentar)) . '</p>';
}
echo '</div>';
}
echo '<br>';
mysql_free_result($hasil);
}
File fungsi_keluaran_cms.inc.php
dicantumkan di atas setiap skript yang memerlukan salah satu fungsinya. Jika
Anda ingin menambagkan fungsionalitas pada CMS Anda nantinya dan memerlukan
kode pemroses yang sama pada beberapa tempat, maka Anda sebaiknya menempatkan
kode logika ke dalam sebuah fungsi dan menempatkannya di dalam fungsi_keluaran_cms.inc.php.
Dua file lainnya dicantumkan pada tiap
halaman yang menampilkan informasi pada web browser pengguna: header_cms.inc.php dan footer_cms.inc.php. Keduanya berperan
sebagai kode HTML pembungkus. File header_cms.inc.php
memuat porsi atas dari sebuah dokumen HTML, sedangkan file footer_cms.inc.php memuat porsi bawahnya. Ada hal yang perlu
diperhatikan pada baris pertama dari header_cms.inc.php,
yang memanggil session_start(). Anda
pasti mengingat pada bab sebelumnya bahwa sesi dapat Anda pakai untuk menyimpan
informasi yang bisa digunakan nantinya, pada halaman-halaman berikutnya. Jadi,
adalah masuk akal bila sesi dipakai untuk menyimpan data login. Dengan
session_start() di awal halaman Anda, Anda memiliki kemampuan dalam menetapkan
dan membaca variabel-variabel $_SESSION.
Berikut merupakan contoh pertama dari
variabel sesi. Ketika session_start() telah diinisialisasi, variabel
$_SESSION[‘nama’] tersedia untuk Anda, sepanjang pengguna telah melakukan
login. Jika isset($_SESSION[‘nama’]) bernilai TRUE, maka Anda mengetahui bahwa
pengguna tidak melakukan login.
if
(isset($_SESSION['nama'])) {
echo '<p> Anda sekarang login dengan
username: ' . $_SESSION['nama'] . '</p>';
}
Pada aplikasi CMS ini, ada tiga nilai yang
Anda simpan sebagai variabel sesi: nama pengguna, id login, dan level akses.
Anda menggunakan ketiga nilai ini untuk menentukan item-item menu mana yang
akan ditampilkan. Berikut merupakan opsi-opsi menu dan siapa yang memiliki akses
terhadapnya:
D
Artikel: Semua pengguna.
D
Komposisi: Semua pengguna yang
telah melakukan login.
D
Review: Semua pengguna yang
telah melakukan login dengan level akses 2 atau lebih.
D
Admin: pengguna yang telah
melakukan login dengan level akses 3 atau lebih.
D
Control Panel: Semua pengguna yang telah melakukan login.
D
Logout: Semua pengguna yang
telah melakukan login.
D
Login: Semua pengguna yang
belum melakukan login.
Anda menghasilkan menu-menu dengan menguji
apakah $_SESSION[‘id_user’] telah ditetapkan dan nilai
$_SESSION[‘level_akses’].
<div id='navigasi'>
<a href="indeks_cms.php">
Artikel </a>
<?php
if
(isset($_SESSION['id_user'])) {
echo ' | <a
href="komposisi_cms.php"> Komposisi </a>';
if ($_SESSION['level_akses'] > 1) {
echo ' | <a
href="pending_cms.php"> Review </a>';
}
if ($_SESSION['level_akses'] > 2) {
echo ' | <a
href="admin_cms.php"> Admin </a>';
}
echo ' | <a
href="cpanel_cms.php"> Control Panel </a> ';
echo ' | <a href="transaksi_pengguna_cms.php?action=Logout">
Logout </a>';
}
else {
echo ' | <a
href="login_cms.php"> Login </a>';
}
?>
</div>
Terakhir, Anda menempatkan fungsi di dalam
file fungsi_http_cms.inc.php, yang
dipakai untuk meredireksi pengunjung ke halaman lain.
<?php
function
redireksi($url) {
if (!headers_sent()) {
header('Location: ' . $url);
} else {
die('Tidak bisa meredireksi; Keluaran
telah dikirim ke browser.');
}
}
?>
Halaman Transaksi
Jadi, sekarang Anda memasuki jantung dari aplikasi
Anda: halaman-halaman transaksi. Data akan ditangani oleh salah satu skript: transaksi_pengguna_cms.php atau transaksi_artikel_cms.php ketika data diposkan dari sebuah form.
Contoh
|
Halaman
transaksi
|
1.
Masukkan
kode ini, dan simpan dengan nama transaksi_pengguna_cms.php:
<?php
require 'otorisasi_komik.inc.php';
require 'fungsi_http_cms.inc.php';
$db = mysql_connect(MYSQL_HOST, MYSQL_USER,
MYSQL_PASSWORD) or
die
('Tidak bisa terhubung. Periksa parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB, $db) or
die(mysql_error($db));
if (isset($_REQUEST['aksi'])) {
switch ($_REQUEST['aksi']) {
case 'Login':
$email = (isset($_POST['email'])) ? $_POST['email'] : '';
$password = (isset($_POST['password'])) ? $_POST['password'] : '';
$sql = 'SELECT
id_user, level_akses, nama
FROM
pengguna_cms
WHERE
email = "' .
mysql_real_escape_string($email, $db) . '" AND
password = PASSWORD("' .
mysql_real_escape_string($password,
$db) .
'")';
$hasil = mysql_query($sql, $db) or die(mysql_error($db));
if (mysql_num_rows($hasil) > 0) {
$baris = mysql_fetch_array($hasil);
extract($baris);
session_start();
$_SESSION['id_user'] = $id_user;
$_SESSION['level_akses'] = $level_akses;
$_SESSION['nama'] = $nama;
}
mysql_free_result($hasil);
redireksi('indeks_cms.php');
break;
case
'Logout':
session_start();
session_unset();
session_destroy();
redireksi('indeks_cms.php');
break;
case
'Ciptakan Akun':
$nama = (isset($_POST['nama'])) ? $_POST['nama'] : '';
$email = (isset($_POST['email'])) ? $_POST['email'] : '';
$password_1 = (isset($_POST['password_1'])) ? $_POST['password_1'] : '';
$password_2 = (isset($_POST['password_2'])) ? $_POST['password_2'] : '';
$password = ($password_1 == $password_2) ? $password_1 : '';
if (!empty($nama) && !empty($email) &&
!empty($password)) {
$sql = 'INSERT INTO pengguna_cms
(email, password, nama)
VALUES
("' .
mysql_real_escape_string($email, $db) . '",
PASSWORD("' .
mysql_real_escape_string($password, $db) . '"),
"' .
mysql_real_escape_string($nama, $db) . '")';
mysql_query($sql, $db) or
die(mysql_error($db));
session_start();
$_SESSION['id_user'] = mysql_insert_id($db);
$_SESSION['level_akses'] = 1;
$_SESSION['nama'] = $nama;
}
redireksi('indeks_cms.php');
break;
case
'Modifikasi Akun':
$id_user = (isset($_POST['id_user'])) ? $_POST['id_user'] : '';
$email = (isset($_POST['email'])) ? $_POST['email'] : '';
$nama = (isset($_POST['nama'])) ? $_POST['nama'] : '';
$level_akses = (isset($_POST['level_akses'])) ? $_POST['level_akses'] :
'';
if
(!empty($id_user) && !empty($nama) && !empty($email) &&
!empty($level_akses) && !empty($id_user)) {
$sql = 'UPDATE pengguna_cms SET
email = "' .
mysql_real_escape_string($email, $db) . '",
nama = "' .
mysql_real_escape_string($nama, $db) . '",
level_akses = "' .
mysql_real_escape_string ($level_akses, $db) . '",
WHERE
id_user = ' . $id_user;
mysql_query($sql, $db) or die(mysql_error($db));
}
redireksi('admin_cms.php');
break;
case
'Kirim Reminder!':
$email = (isset($_POST['email'])) ? $_POST['email'] : '';
if (!empty($email)) {
$sql = 'SELECT email FROM pengguna_cms WHERE email="' .
mysql_real_escape_string($email, $db) . '"';
$hasil = mysql_query($sql, $db) or die(mysql_error($db));
if (mysql_num_rows($hasil) > 0) {
$password =
strtoupper(substr(sha1(time()), rand(0, 32), 8));
$subjek = 'Reset password situs
komik';
$tubuh = 'Sepertinya Anda lupa
password Anda?
Jangan khawatir. ' .
'Kami meresetnya
untuk Anda!' . '\n\n';
$tubuh .= 'Katakunci Anda yang
baru adalah: ' . $password;
mail($email, $subjek, $tubuh);
}
mysql_free_result($hasil);
}
redireksi('login_cms.php');
break;
case
'Ubah Info':
session_start();
$email = (isset($_POST['email'])) ? $_POST['email'] : '';
$nama = (isset($_POST['nama'])) ? $_POST['nama'] : '';
if
(!empty($nama) && !empty($email) &&
!empty($_SESSION['id_user']))
{
$sql = 'UPDATE pengguna_cms SET
email = "' .
mysql_real_escape_string($email, $db) . '",
nama = "' .
mysql_real_escape_string($nama, $db) . '",
WHERE
id_user = ' .
$_SESSION['id_user'];
mysql_query($sql, $db) or die(mysql_error($db));
}
redireksi('cpanel_cms.php');
break;
default:
redireksi('indeks_cms.php');
}
} else {
redireksi('indeks_cms.php');
}
?>
Aplikasi ini perlu mengakss
database dan mengarahkan pengguna ke beberapa halaman setelah menyelesaikan
transaksi. Anda perlu mencantumkan otorisasi_komik.inc.php
dan fungsi_http_cms.inc.php. Karena
halaman transaksi tidak menampilkan apapun pada layar, Anda tidak perlu
mencantumkan header_cms.inc.php, footer_cms.inc.php, dan fungsi_keluaran_cms.inc.php.
require
'otorisasi_komik.inc.php';
require
'fungsi_http_cms.inc.php';
Variabel $_REQUEST[‘aksi’] memuat nilai
tombol yang Anda klik pada halaman sebelumnya, atau permintaan GET dalam URL
(seperti ?aksi=hapus). Jika $_REQUEST[‘aksi’] kosong, maka Anda tidak melakukan
transaksi apapun dan hanya mengarahkan pengguna ke halaman indeks_cms.php.
if (isset($_REQUEST[‘aksi’])) {
...
} else {
redireksi(‘indeks_cms.php’);
}
Anda menggunakan statemen switch karena
fleksibilitasnya. Jika Anda mengembangkan fungsionalitas dari CMS Anda, maka
Anda dapat perlu menambahkan beberapa aksi lain di dalam transaksi_pengguna_cms.php. Dengan switch, hal itu lebih mudah
dilakukan dengan menambahkan kondisi case yang baru.
switch ($_REQUEST[‘aksi’]) {
...
default:
redirect(‘indeks_cms.php’);
}
Kasus Login menangani pengguna yang melakukan
login. Email dan password adalah apa yang Anda pakai untuk melakukan login pada
aplikasi CMS ini. Jika keduanya tidak dilewatkan, maka pengguna tidak dibiarkan
masuk ke situs. Alamat dan password difilter, dan kemudian pencarian terhadap
rekaman yang cocok di dalam tabel pengguna_cms dilakukan. Jika kecocokan
ditemukan, maka sesi dimulai, dan $_SESSION[‘id_user’], $_SESSION[‘nama’], dan
$_SESSION[‘level_akses’] disimpan untuk membiarkan pengguna tersebut masuk.
case
'Login':
$email = (isset($_POST['email'])) ?
$_POST['email'] : '';
$katakunci =
(isset($_POST['katakunci'])) ? $_POST['katakunci'] : '';
$sql = 'SELECT
id_user, level_akses, nama
FROM
pengguna_cms
WHERE
email = "' .
mysql_real_escape_string($email, $db) . '" AND
katakunci = PASSWORD("' .
mysql_real_escape_string($katakunci,
$db) .
'")';
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
if (mysql_num_rows($hasil) > 0) {
$baris = mysql_fetch_array($hasil);
extract($baris);
session_start();
$_SESSION['id_user'] = $id_user;
$_SESSION['level_akses'] = $level_akses;
$_SESSION['nama'] = $nama;
}
mysql_free_result($hasil);
redireksi('indeks_cms.php');
break;
Melakukan logout cukup sederhana. Jika tidak
ada variabel sesi dengan id user, level akses, dan username, maka aplikasi
mengetahui tidak ada pengguna yang melakukan login. Yang perlu Anda lakukan
adalah membersihkan variabel sesi. Pertama, Anda menggunakan session_start()
untuk memberitahu PHP bahwa Anda sedang mengakses variabel sesi. Kemudian, Anda
membersihkan sesi dengan session_unset(), yang membersihkan semua variabel
sesi, dan terakhir Anda menghancurkan sesi dengan session_destroy(), yang
menghapus semua data yang terdaftar pada sebuah sesi. Semua data login harus
dihapus setelah pemanggilan session_unset() dan session_destroy().
case
'Logout':
session_start();
session_unset();
session_destroy();
redireksi('indeks_cms.php');
break;
Untuk menciptakan sebuah akun, semua bidang
yang disyaratkan harus diisi, dan dua bidang password harus sesuai (pengguna
sering juga diwajibkan untuk mengisi passwordnya dua kali ketika melakukan
registrasi pada sebuah akun, untuk mencegah error, dan Anda melakukannya pada
aplikasi CMS ini). Setelah nilai-nilai yang masuk difilter, jika segala
sesuatunya berjalan dengan baik, maka Anda menciptakan rekaman pada tabel
pengguna_cms, yang secara otomatis membiarkan pengguna masuk dengan menetapkan
$_SESSION[‘id_user’], $_SESSION[‘nama’], dan $_SESSION[‘level_akses’], dan
kemudian mengarahkan pengguna ke halaman indeks_cms.php.
case
'Ciptakan Akun':
$nama = (isset($_POST['nama'])) ?
$_POST['nama'] : '';
$email = (isset($_POST['email'])) ?
$_POST['email'] : '';
$katakunci_1 = (isset($_POST['katakunci_1']))
? $_POST['katakunci_1'] : '';
$katakunci_2 =
(isset($_POST['katakunci_2'])) ? $_POST['katakunci_2'] : '';
$katakunci = ($katakunci_1 ==
$katakunci_2) ? $katakunci_1 : '';
if (!empty($nama) &&
!empty($email) && !empty($katakunci)) {
$sql = 'INSERT INTO pengguna_cms
(email, katakunci, nama)
VALUES
("' .
mysql_real_escape_string($email, $db) . '",
PASSWORD("' .
mysql_real_escape_string($katakunci, $db) . '"),
"' .
mysql_real_escape_string($nama, $db) . '")';
mysql_query($sql, $db) or
die(mysql_error($db));
session_start();
$_SESSION['id_user'] =
mysql_insert_id($db);
$_SESSION['level_akses'] = 1;
$_SESSION['nama'] = $nama;
}
redireksi('indeks_cms.php');
break;
etika akun pengguna lain dimodifikasi oleh
administrator, maka semua bidang harus memiliki data. Setelah melakukan pembaruan,
administrator diarahkan ke halaman admin_cms.php.
case
'Modifikasi Akun':
$id_user = (isset($_POST['id_user'])) ?
$_POST['id_user'] : '';
$email = (isset($_POST['email'])) ?
$_POST['email'] : '';
$nama = (isset($_POST['nama'])) ?
$_POST['nama'] : '';
$level_akses =
(isset($_POST['level_akses'])) ? $_POST['level_akses'] : '';
if (!empty($id_user) &&
!empty($nama) && !empty($email) &&
!empty($level_akses) &&
!empty($id_user)) {
$sql = 'UPDATE pengguna_cms SET
email = "' .
mysql_real_escape_string($email, $db) . '",
nama = "' .
mysql_real_escape_string($nama, $db) . '",
level_akses = "' .
mysql_real_escape_string ($level_akses, $db) . '",
WHERE
id_user = ' . $id_user;
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('admin_cms.php');
break;
Jika pengguna lupa akan passwordnya sendiri,
maka pengguna tersebut dapat memiliki password baru yang dihasilkan dan dikirim
ke akun email yang terdaftar dalam sistem Di sini, Anda dianjurkan untuk
mengirim email plainteks sederhana.
Anda memfilter alamat email yang masuk dan
melakukan pencarian terhadap alamat tersebut di dalam database. Jika ditemukan,
maka Anda mengetahui bahwa alamat tersebut merupakan alamat yang terdaftar.
Kemudian Anda membangkitkan password acak, memasukkan subjek (judul) dan tubuh
pesan email (termasuk password baru), dan mengirimkan. Diasumsikan bahwa
pengguna akan menerima dan membaca password tersebut dan melakukan login.
case
'Kirim Reminder!':
$email = (isset($_POST['email'])) ?
$_POST['email'] : '';
if (!empty($email)) {
$sql = 'SELECT email FROM pengguna_cms
WHERE email="' .
mysql_real_escape_string($email, $db) . '"';
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
if (mysql_num_rows($hasil) > 0)
{
$katakunci =
strtoupper(substr(sha1(time()), rand(0, 32), 8));
$subjek = 'Reset katakunci
situs komik';
$tubuh = 'Sepertinya Anda lupa
katakunci Anda?
Jangan khawatir. ' .
'Kami meresetnya
untuk Anda!' . '\n\n';
$tubuh .= 'Katakunci Anda yang
baru adalah: ' . $katakunci;
mail($email, $subjek, $tubuh);
}
mysql_free_result($hasil);
}
redireksi('login_cms.php');
break;
Kode berikut tampak familiar. Kode tersebut
sangat identik dengan kasus Modifikasi Akun, kecuali bahwa pengguna mengubah
datanya sendiri. Oleh karena itu, level akses tidak ikut diperbarui.
case
'Ubah Info':
session_start();
$email = (isset($_POST['email'])) ?
$_POST['email'] : '';
$nama = (isset($_POST['nama'])) ?
$_POST['nama'] : '';
if (!empty($nama) &&
!empty($email) && !empty($_SESSION['id_user']))
{
$sql = 'UPDATE pengguna_cms SET
email = "' .
mysql_real_escape_string($email, $db) . '",
nama = "' .
mysql_real_escape_string($nama, $db) . '",
WHERE
id_user = ' .
$_SESSION['id_user'];
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('cpanel_cms.php');
break;
Contoh
|
Transaksi
artikel
|
1.
Masukkan
kode berikut, dan namai dengan transaksi_artikel_cms.php:
<?php
require
'otorisasi_komik.inc.php';
require 'fungsi_http_cms.inc.php';
$db = mysql_connect(MYSQL_HOST,
MYSQL_USER, MYSQL_PASSWORD) or
die ('Tidak bisa terhubung. Periksa
parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB, $db) or
die(mysql_error($db));
if (isset($_REQUEST['aksi'])) {
switch ($_REQUEST['aksi']) {
case 'Submit Artikel Baru':
$judul = (isset($_POST['judul'])) ?
$_POST['judul'] : '';
$teks_artikel =
(isset($_POST['teks_artikel'])) ? $_POST['teks_artikel'] : '';
if
(isset($_SESSION['id_user'])
&& !empty($judul) && !empty($teks_artikel)) {
$sql = 'INSERT INTO artikel_cms
(id_user, tanggal_submit,
judul, teks_artikel)
VALUES
(' . $_SESSION['id_user'] .
',
"' . date('Y-m-d
H:i:s') . '",
"' .
mysql_real_escape_string($judul, $db) . '",
"' .
mysql_real_escape_string($teks_artikel, $db) . '")';
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('indeks_cms.php');
break;
case
'Edit':
redireksi('komposisi_cms.php?aksi=edit & id_artikel=' .
$_POST['id_artikel']);
break;
case
'Simpan Perubahan':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
$id_user = (isset($_POST['id_user'])) ?
$_POST['id_user'] : '';
$judul = (isset($_POST['judul'])) ?
$_POST['judul'] : '';
$teks_artikel = (isset($_POST['teks_artikel'])) ?
$_POST['teks_artikel'] : '';
if
(!empty($id_artikel) && !empty($judul) &&
!empty($teks_artikel)) {
$sql = 'UPDATE artikel_cms SET
judul = "' .
mysql_real_escape_string($judul, $db) . '",
teks_artikel = "' . mysql_real_escape_string($teks_artikel, $db) . '",
tanggal_submit = "' .
date('Y-m-d H:i:s') . '"
WHERE
id_artikel = ' .
$id_artikel;
if
(!empty($id_user)) {
$sql .= ' AND id_user = ' .
$id_user;
}
mysql_query($sql, $db) or
die(mysql_error($db));
}
if (empty($id_user)) {
redireksi('pending_cms.php');
} else {
redireksi('cpanel_cms.php');
}
break;
case
'Publish':
$id_artikel = (isset($_POST['id_artikel'])) ? $_POST['id_artikel'] :
'';
if (!empty($id_artikel)) {
$sql = 'UPDATE artikel_cms SET
apa_dipublikasikan = TRUE,
tanggal_publish = "' .
date('Y-m-d H:i:s') . '"
WHERE
id_artikel = ' .
$id_artikel;
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('pending_cms.php');
break;
case
'Retraksi':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
if (!empty($id_artikel)) {
$sql = 'UPDATE artikel_cms SET
apa_dipublikasikan = FALSE,
tanggal_publish =
"0000-00-00 00:00:00"
WHERE
id_artikel = ' .
$id_artikel;
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('pending_cms.php');
break;
case
'Hapus':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
if (!empty($id_artikel)) {
$sql = 'DELETE a, c FROM
artikel_cms a LEFT JOIN
komentar_cms c ON
a.id_artikel =
c.id_artikel
WHERE
a.id_artikel = ' .
$id_artikel . ' AND
apa_dipublikasikan =
FALSE';
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('pending_cms.php');
break;
case
'Submit Komentar':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
$teks_komentar =
(isset($_POST['teks_komentar'])) ?
$_POST['teks_komentar'] : '';
if
(isset($_SESSION['id_user'])
&& !empty($id_artikel) && !empty($teks_komentar)) {
$sql = 'INSERT INTO komentar_cms
(id_artikel, id_user,
tanggal_komentar, teks_komentar)
VALUES
(' . $id_artikel . ',
' . $_SESSION['id_user'] .
',
"' . date('Y-m-d
H:i:s') . '",
"' .
mysql_real_escape_string($teks_komentar, $db) . '")';
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('lihat_artikel_cms.php?id_artikel=' . $id_artikel);
break;
default:
redireksi('indeks_cms.php');
}
} else {
redireksi('indeks_cms.php');
}
?>
Sama dengan transaksi_pengguna_cms.php, Anda memeriksa nilai dari
$_REQUEST[‘aksi’] pada transaksi_artikel_cms.php
untuk melihat apakah sebuah tombol ditekan atau sebuah aksi ditetapkan dalam
URL, dan jika ya, maka Anda akan bertindak sesuai dengan salah satu cabang pada
statemen switch. Pengguna akan diarahkan ke halaman indeks utama jika tidak ada
aksi yang dilewatkan atau jika aksi tidak dikenali oleh transaksi_artikel_cms.php.
if (isset($_REQUEST[‘aksi’])) {
switch ($_REQUEST[‘aksi’]) {
...
default:
redireksi(‘indeks_cms.php’);
}
} else {
redireksi(‘indeks_cms.php’);
}
Kasus pertama menangani penambahan sebuah
artikel baru dalam database. Anda pertama-tama memastikan bahwa judul dan tubuh
artikel keduanya dilewatkan ke skript dan bahwa pengguna telah melakukan login
(diuji dengan keberadaan $_SESSION[‘id_user’]. Kemudian, Anda menyisipkan
artikel ke dalam database, termasuk ID user untuk pengarang artikel dan tanggal
untuk tanggal penyerahan artikel.
case
'Submit Artikel Baru':
$judul = (isset($_POST['judul'])) ?
$_POST['judul'] : '';
$teks_artikel =
(isset($_POST['teks_artikel'])) ? $_POST['teks_artikel'] : '';
if (isset($_SESSION['id_user'])
&& !empty($judul) && !empty($teks_artikel))
{
$sql = 'INSERT INTO artikel_cms
(id_user, tanggal_submit,
judul, teks_artikel)
VALUES
(' . $_SESSION['id_user'] .
',
"' . date('Y-m-d
H:i:s') . '",
"' . mysql_real_escape_string($judul,
$db) . '",
"' .
mysql_real_escape_string($teks_artikel, $db) . '")';
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('indeks_cms.php');
break;
Penanganan kasus Edit cukup sederhana.
Halaman komposisi_cms.php digunakan untuk membaca artikel dan dimuat pada
bidang judul dan bidang tubuh. Anda hanya perlu menempelkan aksi=edit and
id_artikel=nn ke alamat.
case
'Edit':
redireksi('komposisi_cms.php?aksi=edit
& id_artikel=' . $_POST['id_artikel']);
break;
Untuk menyimpan perubahan pada sebuah
artikel, Anda membaca dan memfilter ID artikel, ID pengguna, judul dan tubuh
artikel. Jika $id_user memiliki nilai, maka Anda mengetahui bahwa pengguna
sedang mengedit dokumennya, dan Anda perlu menambahkan sebuah kondisi untuk
mencocokkan ID dengan statemen SQL. Anda kemudian mengarahkan pengguna ke panel
kontrol jika pengguna mengedit artikelnya atau ke halaman review jika pengguna
adalah moderator yang mengedit artikel orang lain.
case
'Simpan Perubahan':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
$id_user = (isset($_POST['id_user'])) ?
$_POST['id_user'] : '';
$judul = (isset($_POST['judul'])) ?
$_POST['judul'] : '';
$teks_artikel =
(isset($_POST['teks_artikel'])) ? $_POST['teks_artikel'] : '';
if (!empty($id_artikel) &&
!empty($judul) && !empty($teks_artikel)) {
$sql = 'UPDATE artikel_cms SET
judul = "' .
mysql_real_escape_string($judul, $db) . '",
teks_artikel = "' .
mysql_real_escape_string($teks_artikel, $db) . '",
tanggal_submit = "' .
date('Y-m-d H:i:s') . '"
WHERE
id_artikel = ' .
$id_artikel;
if (!empty($id_user)) {
$sql .= ' AND id_user = ' .
$id_user;
}
mysql_query($sql, $db) or
die(mysql_error($db));
}
if (empty($id_user)) {
redireksi('pending_cms.php');
} else {
redireksi('cpanel_cms.php');
}
break;
Pada kasus Publish, Anda menerima dan
memfilter ID artikel, dan kemudian memodifikasi rekaman dalam database untuk
menetapkan status dan tanggal publikasi.
case
'Publish':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
if (!empty($id_artikel)) {
$sql = 'UPDATE artikel_cms SET
apa_dipublikasikan = TRUE,
tanggal_publish = "' .
date('Y-m-d H:i:s') . '"
WHERE
id_artikel = ' .
$id_artikel;
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('pending_cms.php');
break;
Kasus Retraksi sebenarnya mirip dengan kasus
Publish, hanya kali ini, setelah pemeriksan ID artikel, Anda menetapkan
apa_dipublikasikan menjadi FALSE dan membersihkan bidang tanggal_publish.
Retraksi di sini merupakan kasus untuk menetapkan status prapublikasi.
case
'Retraksi':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
if (!empty($id_artikel)) {
$sql = 'UPDATE artikel_cms SET
apa_dipublikasikan = FALSE,
tanggal_publish =
"0000-00-00 00:00:00"
WHERE
id_artikel = ' .
$id_artikel;
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('pending_cms.php');
break;
Untuk menghapus sebuah artikel, Anda
memeriksa apakah ID artikel dilewatkan dan kemudian menggunakannya untuk
menghapus rekaman yang sesuai. Anda menggunakan JOIN dalam query agar Anda
dapat menghapus komentar yang diberikan pada artikel tersebut.
case
'Hapus':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
if (!empty($id_artikel)) {
$sql = 'DELETE a, c FROM
artikel_cms a LEFT JOIN
komentar_cms c ON
a.id_artikel = c.id_artikel
WHERE
a.id_artikel = ' .
$id_artikel . ' AND
apa_dipublikasikan =
FALSE';
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('pending_cms.php');
break;
Kasus terakhir menangani penambahan komentar
baru. Pada kasus Submit Komentar, Anda menyisipkan ID artikel, ID user, tanggal
komentar ditulis, dan teks komentar. Setelah itu, Anda mengarahkan pengguna
kembali ke artikel, sehingga ia dapat melihat komentar tersebut.
case
'Submit Komentar':
$id_artikel =
(isset($_POST['id_artikel'])) ? $_POST['id_artikel'] : '';
$teks_komentar =
(isset($_POST['teks_komentar'])) ?
$_POST['teks_komentar'] : '';
if (isset($_SESSION['id_user'])
&& !empty($id_artikel) && !empty($teks_komentar)) {
$sql = 'INSERT INTO komentar_cms
(id_artikel, id_user,
tanggal_komentar, teks_komentar)
VALUES
(' . $id_artikel . ',
' . $_SESSION['id_user'] .
',
"' . date('Y-m-d
H:i:s') . '",
"' .
mysql_real_escape_string($teks_komentar, $db) . '")';
mysql_query($sql, $db) or
die(mysql_error($db));
}
redireksi('lihat_artikel_cms.php?id_artikel=' . $id_artikel);
break;
Fungsionalitas Umum
Skript pertama yang akan Anda kode berkaitan
dengan aksi seorang pengguna ketika mengunjungi situs, melakukan login, meminta
password baru, dan menciptakan akun baru.
Contoh
|
Tampilan
indeks utama dan login
|
1.
Ciptakanlah
file login_cms.php:
<?php include
'header_cms.inc.php'; ?>
<h1> Login
Anggota </h1>
<form
method="post" action="transaksi_pengguna_cms.php">
<table>
<tr>
<td><label
for="email"> Alamat Email: </label></td>
<td><input type="text"
id="email" name="email"
maxlength="100"/></td>
</tr><tr>
<td><label
for="password"> Password: </label></td>
<td><input
type="password" id="password" name="password"
maxlength="20"/>
</td>
</tr><tr>
<td></td>
<td><input
type="submit" name="aksi"
value="Login"/></td>
</tr>
</table>
</form>
<p> Belum
Anggota? <a href="akun_pengguna_cms.php"> Ciptakan akun
baru!</a></p>
<p><a
href="lupa_password_cms.php"> Lupa password Anda?
</a></p>
<?php include
'footer_cms.inc.php';?>
2.
Selanjutnya,
ciptakanlah file lupa_password_cms:
<?php include
'header_cms.inc.php'; ?>
<h1> Email
Pengingat Passowrd </h1>
<p> Lupa
password Anda? Masukkan alamat email Anda, dan kami akan
mengemailkan password
baru pada Anda! </p>
<form
method="post" action="transaksi_pengguna_cms.php">
<div>
<label for="email" > Email
Address: </label>
<input type="text"
id="email" name="email" maxlength="100"/>
<input type="submit"
name="aksi" value="Send my reminder!"/>
</div>
</form>
<?php include
'footer_cms.inc.php'; ?>
3.
Ciptakanlah
indeks_cms.php berikut:
<?php
require 'otorisasi_komik.inc.php';
require
'fungsi_http_cms.inc.php';
$db =
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or
die ('Tidak bisa terhubung. Periksa
parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB,
$db) or die(mysql_error($db));
include
'header_cms.inc.php';
$sql = 'SELECT
id_artikel
FROM
artikel_cms
WHERE
apa_dipublikasikan = TRUE
ORDER BY
tanggal_publish DESC';
$hasil =
mysql_query($sql, $db);
if
(mysql_num_rows($hasil) == 0) {
echo '<p><strong> Sekarang,
sedang tidak ada artikel. </strong></p>';
} else {
while ($baris = mysql_fetch_array($hasil))
{
tampil_cerita($db,
$baris['id_artikel'], TRUE);
}
}
mysql_free_result($hasil);
include
'footer_cms.inc.php';
?>
4.
Sekarang,
jalankan indeks_cms.php dengan
browser Anda. Tampilan menjadi seperti berikut:
5.
Klik
pada link Login, dan halaman login_cms.php
akan terbuka. Masukkan alamat email admin@contoh.com dan password rahasia,
seperti yang Anda masukkan pada struktur database.
6.
Anda
akan melihat tampilan berikut setelah memasukkan alamat email admin@contoh.com dan password rahasia,
seperti yang Anda masukkan pada struktur database.
Contoh
|
Menciptakan
akun
|
1.
Ciptakanlah
file baru, dan simpanlah dengan nama akun_pengguna_cms.php:
<?php
require 'otorisasi_komik.inc.php';
$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or
die ('Tidak bisa terhubung.
Periksa parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));
$id_user = (isset($_GET['id_user']) &&
ctype_digit($_GET['id_user'])) ?
$_GET['id_user'] : '';
if (empty($id_user)) {
$nama = '';
$email = '';
$level_akses = '';
} else {
$sql = 'SELECT
nama, email, level_akses
FROM
pengguna_cms
WHERE
id_user=' . $id_user;
$hasil = mysql_query($sql, $db)
or die(mysql_error($db));
$baris =
mysql_fetch_array($hasil);
extract($baris);
mysql_free_result($hasil);
}
include 'header_cms.inc.php';
if (empty($id_user)) {
echo '<h1> Ciptakan Akun
</h1>';
} else {
echo '<h1> Modifikasi Akun
</h1>';
}
?>
<form method="post"
action="transaksi_pengguna_cms.php">
<table>
<tr>
<td><label
for="name"> Nama Penuh: </label></td>
<td><input
type="text" id="nama" name="nama"
maxlength="100"
value="<?php echo
htmlspecialchars($nama);?>"/></td>
</tr><tr>
<td><label
for="email"> Alamat Email: </label></td>
<td><input
type="text" id="email" name="email"
maxlength="100"
value="<?php echo
htmlspecialchars($email);?>"/></td>
</tr>
<?php
if (isset($_SESSION['level_akses']) && $_SESSION['level_akses'] ==
3)
{
echo '<tr><td> Level
Akses </td><td>';
$sql = 'SELECT
level_akses, nama_akses
FROM
level_akses_cms
ORDER BY
level_akses DESC';
$hasil = mysql_query($sql, $db)
or die(mysql_error($db));
while ($baris =
mysql_fetch_array($hasil)) {
echo '<input
type="radio" id="akl_' . $baris['level_akses'] .
'"
nama="level_akses" value="' . $baris['level_akses'] . '"';
if ($baris['level_akses'] ==
$level_akses) {
echo
'checked="checked"';
}
echo '/><label
for="akl_' . $baris['level_akses'] . '"> ' .
$baris['nama_akses'] .
'</label><br/>';
}
mysql_free_result($hasil);
echo '</td></tr> ';
}
if (empty($id_user)) {
?>
<tr>
<td><label
for="password_1" > Password: </label></td>
<td><input
type="password" id="password_1" name="password_1"
maxlength="50"/>
</td>
</tr><tr>
<td><label
for="password_2" > Password (lagi): </label></td>
<td><input
type="password" id="password_2" name="password_2"
maxlength="50"/>
</td>
</tr><tr>
<td></td>
<td>
<input
type="submit" name="aksi" value="Ciptakan
Akun"/>
</td>
</tr>
<?php
} else {
?>
<tr>
<td></td>
<td>
<input
type="hidden" name="id_user" value="<?php echo
$id_user;?>"/>
<input
type="submit" name="aksi" value="Modifikasi
Akun"/>
</td>
</tr>
<?php
}
?>
</table >
</form >
<?php
include 'footer_cms.inc.php';
?>
2.
Jika Anda masih login, klik link Logout.
3.
Selanjutnya, klik
Login, dan kemudian klik “Ciptakan akun baru!”. Kemudian Anda akan melihat
tampilan berikut:
4.
Setelah
Anda semua bidang yang disyaratkan, Anda akan otomatis login dan memiliki akun
dalam database, seperti berikut:
Anda perlu membaca semua data untuk pengguna
ini, jika ID user telah dilewatkan. Setelah pemilteran dan penugasan
$_GET[‘id_user’] kepada $id_user, Anda memeriksa apakah $id_user kosong atau tidak.
Jika kosong, maka ditampilkan form untuk menciptakan akun pengguna yang baru
dan menginisialisasi variabel. Jika $id_user memuat ID user, maka Anda membaca
informasi dari tabel pengguna_cms.
$id_user
= (isset($_GET['id_user']) && ctype_digit($_GET['id_user'])) ?
$_GET['id_user'] : '';
if
(empty($id_user)) {
$nama = '';
$email = '';
$level_akses = '';
}
else {
$sql = 'SELECT
nama, email, level_akses
FROM
pengguna_cms
WHERE
id_user=' . $id_user;
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
$baris = mysql_fetch_array($hasil);
extract($baris);
mysql_free_result($hasil);
}
Jika $id_user memiliki nilai, maka ini
berarti seorang pengguna telah melakukan login, dan halaman ini memuat data
terkini dari pengguna sehingga ia dapat memodifikasi akunnya.
if
(empty($id_user)) {
echo '<h1> Ciptakan Akun
</h1>';
}
else {
echo '<h1> Modifikasi Akun
</h1>';
}
Form memposkan datanya ke
transaksi_pengguna_cms.php. Porsi pertama dari kode form merupakan standar kode
HTML yang menampilkan bidang-bidang yang bercampur dengan kode PHP untuk
menampilkan isi variabel-variabel yang menyimpan nilai-nilai bidang.
<form method="post"
action="transaksi_pengguna_cms.php">
<table>
<tr>
<td><label for="name"> Nama Penuh:
</label></td>
<td><input type="text" id="nama"
name="nama" maxlength="100"
value="<?php echo
htmlspecialchars($nama);?>"/></td>
</tr><tr>
<td><label for="email"> Alamat Email:
</label></td>
<td><input type="text" id="email"
name="email" maxlength="100"
value="<?php echo
htmlspecialchars($email);?>"/></td>
</tr>
Jika pengguna telah melakukan login dan
mengedit informasinya, dan jika ia memiliki hak administratif, maka Anda
membangkitkan sebuah baris dalam tabel sehingga pengguna tersebut dapat
mengubah hak-hak akses pengguna lain. Daftar hak akses dibaca dari tabel
level_akses_cms, dan setiap hak akses ditampilkan sebagai tombol radio pada
form.
if
(isset($_SESSION['level_akses']) && $_SESSION['level_akses'] == 3)
{
echo '<tr><td> Level Akses
</td><td>';
$sql = 'SELECT
level_akses, nama_akses
FROM
level_akses_cms
ORDER BY
level_akses DESC';
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
while ($baris =
mysql_fetch_array($hasil)) {
echo '<input type="radio"
id="akl_' . $baris['level_akses'] .
'"
nama="level_akses" value="' . $baris['level_akses'] . '"';
if ($baris['level_akses'] ==
$level_akses) {
echo 'checked="checked"';
}
echo '/><label
for="akl_' . $baris['level_akses'] . '"> ' .
$baris['nama_akses'] .
'</label><br/>';
}
mysql_free_result($hasil);
echo '</td></tr> ';
}
Apa yang ditampilkan pada porsi terakhir pada
form tergantung dari apakah pengguna menciptakan akun pengguna baru atau
memperbarui informasinya yang telah ada. Jika pengguna menciptakan akun baru,
maka bidang-bidang password akan ditunjukkan, dan tombol submit akan diberikan
nilai “Ciptakan Akun”. Jika pengguna memperbarui informasinya, maka bidang
masukan tersembunyi akan ditampilkan yang memuat id_user, dan tombol submit
diberikan nilai “Modifikasi Akun”. File transaksi_pengguna_cms.php akan
menggunakan nilai dari tombol submit untuk memutuskan kasus switch yang mana
yang akan dijalankan.
if
(empty($id_user)) {
?>
<tr>
<td><label
for="password_1" > Password: </label></td>
<td><input
type="password" id="password_1" name="password_1"
maxlength="50"/>
</td>
</tr><tr>
<td><label
for="password_2" > Password (lagi): </label></td>
<td><input type="password"
id="password_2" name="password_2"
maxlength="50"/>
</td>
</tr><tr>
<td></td>
<td>
<input type="submit"
name="aksi" value="Ciptakan Akun"/>
</td>
</tr>
<?php
}
else {
?>
<tr>
<td></td>
<td>
<input type="hidden"
name="id_user" value="<?php echo $id_user;?>"/>
<input type="submit"
name="aksi" value="Modifikasi Akun"/>
</td>
</tr>
<?php
}
?>
Contoh
|
Halaman
administratif
|
1.
Ciptakanlah
admin_cms.php:
<?php
require
'otorisasi_komik.inc.php';
include 'header_cms.inc.php';
$db = mysql_connect(MYSQL_HOST,
MYSQL_USER, MYSQL_PASSWORD) or
die ('Tidak bisa terhubung. Periksa
parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB, $db) or
die(mysql_error($db));
$sql = 'SELECT
level_akses, nama_akses
FROM
level_akses_cms
ORDER BY
nama_akses ASC';
$hasil = mysql_query($sql, $db)
or die(mysql_error($db));
$hak_akses = array();
while ($baris =
mysql_fetch_assoc($hasil)) {
$hak_akses[$baris['level_akses']] =
$baris['nama_akses'];
}
mysql_free_result($hasil);
echo '<h2> Administrasi
Pengguna </h2>';
$limit = count($hak_akses);
for($i = 1; $i <= $limit;
$i++) {
echo '<h3>' . $hak_akses[$i] .
'</h3>';
$sql = 'SELECT
id_user, nama
FROM
pengguna_cms
WHERE
level_akses = ' . $i . '
ORDER BY
nama ASC';
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
if (mysql_num_rows($hasil) == 0) {
echo '<p><strong> Tidak ada
' . $hak_akses[$i] . ' akun ' .
'yang terdaftar.
</strong></p>';
} else {
echo '<ul>';
while ($baris =
mysql_fetch_assoc($hasil)) {
if ($_SESSION['id_user'] ==
$baris['id_user']) {
echo '<li>' .
htmlspecialchars($baris['nama']) . '</li>';
} else {
echo '<li><a
href="akun_pengguna_cms.php?id_user=' .
$baris['id_user'] .
'">' . htmlspecialchars($baris['nama']) .
'</a></li>';
}
}
echo '</ul>';
}
mysql_free_result($hasil);
}
require 'footer_cms.inc.php';
?>
2.
Silahkan
Anda melakukan logout, kemudian melakukan login kembali menggunakan akun admin.
Ketika Anda login, klik link Admin. Anda akan melihat tampilan berikut:
Anda akan melihat pengguna Robert Tohonan
Sianipar. Anda juga akan memperhatikan nama administrator di bawah
Administrator, tetapi itu bukan link. Anda dapat mengubah akun Anda sendiri
dari halaman Control Panel.
3.
Klik
user di bawah User. Anda akan melihat tampilan berikut. Perhatikan bahwa Anda
dapat mengubah nama pengguna dan passwordnya. Juga perhatikan opsi Level Akses.
Anda dapat mengubah pengguna tertentu menjadi User, Moderator, atau Admin. User
merupakan nilai default untuk pengguna baru.
Di awal skript, Anda melakukan query terhadap
database untuk membaca daftar hak akses dari level_akses_cms. Nama dari tiap
hak akses disimpan dalam $hak_akses, yaitu sebuah array yang menggunakan id
numerik level_akses sebagai indeksnya. Anda juga membaca jumlah rekaman dengan
fungsi mysql_num_rows() dan menyimpannya dalam $limit.
$sql
= 'SELECT
level_akses, nama_akses
FROM
level_akses_cms
ORDER BY
nama_akses ASC';
$hasil
= mysql_query($sql, $db) or die(mysql_error($db));
$hak_akses
= array();
while
($baris = mysql_fetch_assoc($hasil)) {
$hak_akses[$baris['level_akses']] =
$baris['nama_akses'];
}
mysql_free_result($hasil);
Anda menggunakan nilai $limit ketika Anda
mulai beriterasi menjejah daftar hak akses. Perhatikan bahwa Anda memulai loop
for dengan nilai awal 1, bukan 0. Array PHP umumnya diawali dengan indeks
numerik 0, tetapi Anda menon-aktifkan watak ini dengan menugaskan indeks-indeks
dengan id hak akses.
$limit
= count($hak_akses);
for($i
= 1; $i <= $limit; $i++) {
echo '<h3>' . $hak_akses[$i] .
'</h3>';
$sql = 'SELECT
id_user, nama
FROM
pengguna_cms
WHERE
level_akses = ' . $i . '
ORDER BY
nama ASC';
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
if (mysql_num_rows($hasil) == 0) {
echo '<p><strong> Tidak ada
' . $hak_akses[$i] . ' akun ' .
'yang terdaftar.
</strong></p>';
} else {
echo '<ul>';
while ($baris =
mysql_fetch_assoc($hasil)) {
if ($_SESSION['id_user'] ==
$baris['id_user']) {
echo '<li>' .
htmlspecialchars($baris['nama']) . '</li>';
} else {
echo '<li><a
href="akun_pengguna_cms.php?id_user=' .
$baris['id_user'] .
'">' . htmlspecialchars($baris['nama']) .
'</a></li>';
}
}
echo '</ul>';
}
mysql_free_result($hasil);
Contoh
|
Menciptakan
artikel
|
1.
Ciptakanlah
sebuah file baru, dan namai dengan komposisi_cms.php:
<?php
require
'otorisasi_komik.inc.php';
include 'header_cms.inc.php';
$db = mysql_connect(MYSQL_HOST,
MYSQL_USER, MYSQL_PASSWORD) or
die ('Tidak bisa terhubung. Periksa
parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB, $db) or
die(mysql_error($db));
$aksi = (isset($_GET['aksi'])) ?
$_GET['aksi'] : '';
$id_artikel =
(isset($_GET['id_artikel']) && ctype_digit($_GET['id_artikel'])) ?
$_GET['id_artikel'] : '' ;
$judul = (isset($_POST['judul']))
? $_POST['judul'] : '' ;
$teks_artikel =
(isset($_POST['teks_artikel'])) ? $_POST['teks_artikel'] : '' ;
$id_user =
(isset($_POST['id_user'])) ? $_POST['id_user'] : '' ;
if ($aksi == 'edit' &&
!empty($id_artikel)) {
$sql = 'SELECT
judul, teks_artikel, id_user
FROM
artikel_cms
WHERE
id_artikel = ' . $id_artikel;
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
$baris
= mysql_fetch_array($hasil);
extract($baris);
mysql_free_result($hasil);
}
?>
<h2> Komposisi Artikel
</h2>
<form method="post"
action="transaksi_artikel_cms.php">
<table>
<tr>
<td><label
for="judul"> Judul: </label></td>
<td><input type="text"
name="judul" id="judul" maxlength="255"
value="<?php echo
htmlspecialchars($judul);?>"/></td>
</tr><tr>
<td><label
for="teks_artikel"> Teks: </label></td>
<td><textarea
name="teks_artikel" name="teks_artikel" rows="10"
cols="60" ><?php echo
htmlspecialchars($teks_artikel);?></textarea></td>
</tr><tr>
<td></td>
<td>
<?php
if ($_SESSION['level_akses'] <
2) {
echo '<input type="hidden" name="id_user"
value="' . $id_user . '"/>';
}
if (empty($id_artikel)) {
echo '<input type="submit"
name="aksi" "value="Submit Artikel Baru"/>';
} else {
echo '<input type="hidden"
name="id_artikel" value="' . $id_artikel . '"/>';
echo '<input type="submit"
name="aksi" "value="Simpan Perubahan"/>';
}
?>
</td>
</tr>
</table>
</form>
<?php
require_once
'footer_cms.inc.php';
?>
2.
Klik
link Komposisi untuk menjalankan komposisi_cms.php,
yang menampilkan berikut:
3.
Masukkan
judul dan teks untuk artikel. Ketika selesai, klik Submit. Anda akan diarahkan
ke halaman indeks kembali, tetapi tidak ada artikel yang ditampilkan; Artikel
yang telah Anda tulis masih dalam status pending.
Anda telah menuliskan kode
untuk komposisi_cms.php, halaman dimana
Anda dan pengguna situs dapat menuliskan artikel baru. Pertama-tama, Anda
menerima dan memfilter nilai-nilai yang masuk:
$aksi
= (isset($_GET['aksi'])) ? $_GET['aksi'] : '';
$id_artikel
= (isset($_GET['id_artikel']) && ctype_digit($_GET['id_artikel'])) ?
$_GET['id_artikel'] : '' ;
$judul
= (isset($_POST['judul'])) ? $_POST['judul'] : '' ;
$teks_artikel
= (isset($_POST['teks_artikel'])) ? $_POST['teks_artikel'] : '' ;
$id_user
= (isset($_POST['id_user'])) ? $_POST['id_user'] : '' ;
Jika pengguna mengedit artikel, aksi=edit dan
id artikel dilewatkan dalam string URL,
maka $aksi akan memuat nilai ‘edit’, dan $id_artikel akan memuat ID dari
artikel. Anda bisa membaca artikel yang ada dari tabel artikel_cms.
if
($aksi == 'edit' && !empty($id_artikel)) {
$sql = 'SELECT
judul, teks_artikel, id_user
FROM
artikel_cms
WHERE
id_artikel = ' . $id_artikel;
$hasil = mysql_query($sql, $db) or
die(mysql_error($db));
$baris = mysql_fetch_array($hasil);
extract($baris);
mysql_free_result($hasil);
}
Kemudian Anda menampilkan form yang digunakan
untuk menulis atau mengedit artikel. Di akhir form, Anda memeriksa nilai dari
$_SESSION[‘level_akses’] dan mencantumkan bidang tersembunyi dengan ID pegguna,
jika level akses kurang dari 2 (pengguna biasa). Selain itu, Anda juga
menampilkan tombol submit dan id_artikel jika artikel terkait sedang diedit
atau jika artikel merupakan artikel baru.
<h2>
Komposisi Artikel </h2>
<form
method="post" action="transaksi_artikel_cms.php">
<table>
<tr>
<td><label
for="judul"> Judul: </label></td>
<td><input type="text"
name="judul" id="judul" maxlength="255"
value="<?php echo
htmlspecialchars($judul);?>"/></td>
</tr><tr>
<td><label
for="teks_artikel"> Teks: </label></td>
<td><textarea
name="teks_artikel" name="teks_artikel"
bariss="10"
cols="60" ><?php echo
htmlspecialchars($teks_artikel);?></textarea></td>
</tr><tr>
<td></td>
<td>
<?php
if
($_SESSION['level_akses'] < 2) {
echo '<input type="hidden"
name="id_user" value="' . $id_user . '"/>';
}
if
(empty($id_artikel)) {
echo '<input type="submit"
name="aksi" "value="Submit Artikel Baru"/>';
}
else {
echo '<input type="hidden"
name="id_artikel" value="' . $id_artikel . '"/>';
echo '<input type="submit"
name="aksi" "value="Simpan Perubahan"/>';
}
?>
</td>
</tr>
</table>
</form>
<?php
require_once
'footer_cms.inc.php';
?>
Contoh
|
Mereview
artikel baru
|
1.
Tuliskanlah
kode ke dalam file pending_cms.php
berikut:
<?php
require
'otorisasi_komik.inc.php';
include 'header_cms.inc.php';
$db = mysql_connect(MYSQL_HOST,
MYSQL_USER, MYSQL_PASSWORD) or
die ('Tidak bisa terhubung. Periksa
parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB, $db) or
die(mysql_error($db));
echo '<h2> Ketersediaan
Artikel </h2>';
echo '<h3> Artikel-Artikel
yang Dipending </h3>';
$sql = 'SELECT
id_artikel, judul,
UNIX_TIMESTAMP(tanggal_submit) AS tanggal_submit
FROM
artikel_cms
WHERE
apa_dipublikasikan = FALSE
ORDER BY
judul ASC';
$hasil = mysql_query($sql, $db)
or die(mysql_error($db));
if (mysql_num_rows($hasil) == 0) {
echo '<p><strong> Tidak ada
artikel yang tersedia. </strong></p>';
} else {
echo '<ul>';
while ($baris = mysql_fetch_array($hasil))
{
echo '<li><a
href="review_artikel_cms.php?id_artikel=' .
$baris['id_artikel'] . '" >
' . htmlspecialchars($baris['judul']) .
'</a>(' . date('F j, Y',
$baris['tanggal_submit']) . ')</li>';
}
echo '</ul>';
}
mysql_free_result($hasil);
echo '<h3> Artikel-Artikel
yang Dipublikasikan </h3>';
$sql = 'SELECT
id_artikel, judul,
UNIX_TIMESTAMP(tanggal_publish) AS tanggal_publish
FROM
artikel_cms
WHERE
apa_dipublikasikan = TRUE
ORDER BY
judul ASC';
$hasil = mysql_query($sql, $db)
or die(mysql_error($db));
if (mysql_num_rows($hasil) == 0)
{
echo '<p><strong> Tidak ada
artikel yang tersedia. </strong></p>';
} else {
echo '<ul>';
while ($baris = mysql_fetch_array($hasil))
{
echo '<li><a
href="review_artikel_cms.php?id_artikel=' .
$baris['id_artikel'] . '"
> ' . htmlspecialchars($baris['judul']) .
'</a> (' . date('F j, Y',
$baris['tanggal_publish']) . ')</li>';
}
echo '</ul>';
}
mysql_free_result($hasil);
include 'footer_cms.inc.php';
?>
2.
Selanjutnya,
tuliskan kode pada file review_artikel_cms.php
berikut:
<?php
require 'otorisasi_komik.inc.php';
require 'fungsi_keluaran_cms.inc.php';
include 'header_cms.inc.php';
$db = mysql_connect(MYSQL_HOST, MYSQL_USER,
MYSQL_PASSWORD) or
die ('Tidak
bisa terhubung. Periksa parameter-parameter koneksi.');
mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));
$id_artikel = (isset($_GET['id_artikel']) &&
ctype_digit($_GET['id_artikel'])) ?
$_GET['id_artikel'] : '';
echo '<h2> Review Artikel </h2>';
tampil_cerita($db, $id_artikel);
$sql = 'SELECT
apa_dipublikasikan, UNIX_TIMESTAMP(tanggal_publish) AS tanggal_publish,
level_akses
FROM
artikel_cms
a INNER JOIN pengguna_cms u ON a.id_user = u.id_user
WHERE
id_artikel
= ' . $id_artikel;
$hasil = mysql_query($sql, $db) or die(mysql_error());
$baris = mysql_fetch_array($hasil);
extract($baris);
mysql_free_result($hasil);
if (!empty($tanggal_dipublikasikan) and
$apa_dipublikasikan) {
echo
'<h4> Dipublikasikan: ' . date('l F j, Y H:i', $tanggal_dipublikasikan) .
'</h4>';
}
?>
<form method="post"
action="transaksi_artikel_cms.php">
<div>
<input
type="submit" name="aksi" value="Edit"/>
<?php
if ($level_akses > 1 || $_SESSION['level_akses'] >
1) {
if
($apa_dipublikasikan) {
echo
'<input type="submit" name="aksi"
value="Retraksi"/>';
} else {
echo
'<input type="submit" name="aksi"
value="Publish"/>';
echo
'<input type="submit" name="aksi"
value="Hapus"/>';
}
}
?>
<input
type="hidden" name="id_artikel" value="<?php echo
$id_artikel;?>"/>
</div>
</form>
<?php
include 'footer_cms.inc.php';
?>