Cara membuat forum diskusi dengan php

'; echo ''; echo ''; include 'footer.php'; ?>

Itu dia: ikhtisar yang bagus dan bersih. Kami akan memperbarui halaman ini seluruh tutorial sehingga menjadi lebih seperti hasil akhirnya, langkah demi langkah!

Langkah 5: Mendaftarkan Pengguna

Mari kita mulai dengan membuat form HTML sederhana sehingga pengguna baru bisa mendaftar.

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Sebuah halaman PHP diperlukan untuk memproses form. Kita akan menggunakan variabel $_SERVER. Variabel $_SERVER adalah array dengan nilai yang disetel secara otomatis dengan setiap permintaan. Salah satu nilai-nilai $_SERVER array adalah 'REQUEST_METHOD'. Bila halaman diminta dengan GET, variabel ini akan menyimpan nilai 'GET'. Bila halaman diminta melalui POST, maka akan memegang nilai 'POST'. Kita dapat menggunakan nilai ini untuk memeriksa apakah sebuah form telah diposting. Lihat halaman signup.php di bawah ini.

Sign up';

if($_SERVER['REQUEST_METHOD'] != 'POST')
{
    /*the form hasn't been posted yet, display it
	  note that the action="" will cause the form to post to the same page it is on */
    echo '
Username: Password: Password again: E-mail: '; } else { /* so, the form has been posted, we'll process the data in three steps: 1. Check the data 2. Let the user refill the wrong fields (if necessary) 3. Save the data */ $errors = array(); /* declare the array for later use */ if(isset($_POST['user_name'])) { //the user name exists if(!ctype_alnum($_POST['user_name'])) { $errors[] = 'The username can only contain letters and digits.'; } if(strlen($_POST['user_name']) > 30) { $errors[] = 'The username cannot be longer than 30 characters.'; } } else { $errors[] = 'The username field must not be empty.'; } if(isset($_POST['user_pass'])) { if($_POST['user_pass'] != $_POST['user_pass_check']) { $errors[] = 'The two passwords did not match.'; } } else { $errors[] = 'The password field cannot be empty.'; } if(!empty($errors)) /*check for an empty array, if there are errors, they're in this array (note the ! operator)*/ { echo 'Uh-oh.. a couple of fields are not filled in correctly..'; echo '
    '; foreach($errors as $key => $value) /* walk through the array so all the errors get displayed */ { echo '
  • ' . $value . '
  • '; /* this generates a nice error list */ } echo '
'; } else { //the form has been posted without, so save it //notice the use of mysql_real_escape_string, keep everything safe! //also notice the sha1 function which hashes the password $sql = "INSERT INTO users(user_name, user_pass, user_email ,user_date, user_level) VALUES('" . mysql_real_escape_string($_POST['user_name']) . "', '" . sha1($_POST['user_pass']) . "', '" . mysql_real_escape_string($_POST['user_email']) . "', NOW(), 0)"; $result = mysql_query($sql); if(!$result) { //something went wrong, display the error echo 'Something went wrong while registering. Please try again later.'; //echo mysql_error(); //debugging purposes, uncomment when needed } else { echo 'Successfully registered. You can now sign in and start posting! :-)'; } } } include 'footer.php'; ?>

Banyak penjelasan yang ada di komentar yang saya buat di file, jadi pastikan untuk memeriksanya. Pengolahan data berlangsung dalam tiga bagian:

  • Memvalidasi data
  • Jika data tidak valid, tampilkan form lagi
  • Jika data valid, simpan record di database

Bagian PHP sudah cukup jelas. Namun, query SQL mungkin memerlukan penjelasan sedikit lebih banyak.

INSERT INTO
       users(user_name, user_pass, user_email ,user_date, user_level)
VALUES('" . mysql_real_escape_string($_POST['user_name']) . "',
       '" . sha1($_POST['user_pass']) . "',
       '" . mysql_real_escape_string($_POST['user_email']) . "',
       NOW(),	
       0);

Pada baris 1 kita memiliki pernyataan INSERT INTO yang menjelaskan dirinya sendiri. Nama tabel ditentukan pada baris kedua. Kata-kata di antara tanda kurung mewakili kolom di mana kita ingin memasukkan data. Pernyataan VALUES memberitahu database bahwa kita telah mendeklarasikan nama kolom dan saatnya menentukan nilainya. Ada sesuatu yang baru di sini: mysql_real_escape_string. Fungsi escapes special characters dalam string yang unescaped, sehingga aman untuk menempatkannya dalam query. Fungsi ini HARUS selalu digunakan, dengan sangat sedikit pengecualian. Ada terlalu banyak skrip yang tidak menggunakannya dan bisa di-hack dengan mudah. Jangan mengambil risiko, gunakan mysql_real_escape_string().

"Jangan pernah memasukkan password biasa seperti apa adanya. Anda HARUS mengenkripsinya."

Juga, Anda dapat melihat bahwa fungsi sha1() digunakan untuk mengenkripsi password pengguna. Ini juga hal yang sangat penting untuk diingat. Jangan pernah memasukkan password biasa seperti apa adanya. Anda HARUS mengenkripsinya. Bayangkan seorang hacker yang entah bagaimana berhasil mendapatkan akses ke database Anda. Jika dia melihat semua password teks biasa, dia bisa masuk ke akun (admin) yang dia inginkan. Jika kolom password mengandung string sha1 dia harus memecahkannya terlebih dahulu yang hampir tidak mungkin.

Catatan: ini juga memungkinkan menggunakan md5(), saya selalu menggunakan sha1() karena benchmark telah membuktikan bahwa ia sedikit lebih cepat, namun tidak banyak. Anda bisa mengganti sha1 dengan md5 jika Anda suka.

Jika proses pendaftaran berhasil, Anda harus melihat hal seperti ini:

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Coba refresh layar phpMyAdmin Anda, sebuah record baru harus terlihat di tabel users.

Langkah 6: Menambahkan Otentikasi dan Tingkat Pengguna

Aspek penting dari sebuah forum adalah perbedaan antara pengguna biasa dan admin/moderator. Karena ini adalah forum kecil dan menambahkan fitur seperti menambahkan moderator baru dan banyak hal akan memakan banyak waktu, kita akan fokus pada proses login dan membuat beberapa fitur admin seperti membuat kategori baru dan menutup sebuah thread.

Setelah menyelesaikan langkah sebelumnya, kita akan membuat akun yang baru dibuat menjadi akun admin. Di phpMyAdmin, klik tabel users, lalu 'Browse'. Akun Anda mungkin akan langsung muncul. Klik ikon edit dan ubah nilai field user_level dari 0 menjadi 1. Itu saja untuk saat ini. Anda tidak akan melihat adanya perbedaan dalam aplikasi kita dengan segera, namun saat kita menambahkan fitur admin, akun normal dan akun Anda akan memiliki kemampuan yang berbeda.

Proses sign-in bekerja dengan cara berikut:

  • Pengunjung memasukkan data pengguna dan mengirimkan form
  • Jika username dan password sudah benar, kita bisa memulai sebuah sesi
  • Jika username dan password salah, kita tampilkan form lagi dengan sebuah pesan
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

File signin.php berada di bawah. Jangan berpikir saya tidak menjelaskan apa yang saya lakukan, tapi periksa komentar di file. Jauh lebih mudah untuk memahami seperti itu.

Sign in';

//first, check if the user is already signed in. If that is the case, there is no need to display this page
if(isset($_SESSION['signed_in']) && $_SESSION['signed_in'] == true)
{
	echo 'You are already signed in, you can sign out if you want.';
}
else
{
	if($_SERVER['REQUEST_METHOD'] != 'POST')
	{
		/*the form hasn't been posted yet, display it
		  note that the action="" will cause the form to post to the same page it is on */
		echo '
Username: Password: '; } else { /* so, the form has been posted, we'll process the data in three steps: 1. Check the data 2. Let the user refill the wrong fields (if necessary) 3. Varify if the data is correct and return the correct response */ $errors = array(); /* declare the array for later use */ if(!isset($_POST['user_name'])) { $errors[] = 'The username field must not be empty.'; } if(!isset($_POST['user_pass'])) { $errors[] = 'The password field must not be empty.'; } if(!empty($errors)) /*check for an empty array, if there are errors, they're in this array (note the ! operator)*/ { echo 'Uh-oh.. a couple of fields are not filled in correctly..'; echo '
    '; foreach($errors as $key => $value) /* walk through the array so all the errors get displayed */ { echo '
  • ' . $value . '
  • '; /* this generates a nice error list */ } echo '
'; } else { //the form has been posted without errors, so save it //notice the use of mysql_real_escape_string, keep everything safe! //also notice the sha1 function which hashes the password $sql = "SELECT user_id, user_name, user_level FROM users WHERE user_name = '" . mysql_real_escape_string($_POST['user_name']) . "' AND user_pass = '" . sha1($_POST['user_pass']) . "'"; $result = mysql_query($sql); if(!$result) { //something went wrong, display the error echo 'Something went wrong while signing in. Please try again later.'; //echo mysql_error(); //debugging purposes, uncomment when needed } else { //the query was successfully executed, there are 2 possibilities //1. the query returned data, the user can be signed in //2. the query returned an empty result set, the credentials were wrong if(mysql_num_rows($result) == 0) { echo 'You have supplied a wrong user/password combination. Please try again.'; } else { //set the $_SESSION['signed_in'] variable to TRUE $_SESSION['signed_in'] = true; //we also put the user_id and user_name values in the $_SESSION, so we can use it at various pages while($row = mysql_fetch_assoc($result)) { $_SESSION['user_id'] = $row['user_id']; $_SESSION['user_name'] = $row['user_name']; $_SESSION['user_level'] = $row['user_level']; } echo 'Welcome, ' . $_SESSION['user_name'] . '. Proceed to the forum overview.'; } } } } } include 'footer.php'; ?>

Ini adalah query yang ada di file signin.php:

SELECT 
	user_id,
	user_name,
	user_level
FROM
	users
WHERE
	user_name = '" . mysql_real_escape_string($_POST['user_name']) . "'
AND
	user_pass = '" . sha1($_POST['user_pass'])

Hal ini jelas kita perlu memeriksa untuk memberitahu jika kredensial disediakan milik pengguna yang ada. Banyak skrip mengambil password dari database dan membandingkannya menggunakan PHP. Jika kita melakukan ini secara langsung melalui SQL password akan disimpan dalam database sekali selama pendaftaran dan tidak pernah meninggalkan itu lagi. Hal ini lebih aman, karena semua tindakan nyata yang terjadi di lapisan database dan tidak di aplikasi kita.

Jika pengguna masuk berhasil, kami melakukan beberapa hal:

Pertama, kita menetapkan 'signed_in' $_SESSION var ke true, jadi kita dapat menggunakannya pada halaman lain untuk memastikan pengguna masuk. Kami juga menempatkan id pengguna dan pengguna dalam variabel $_SESSION untuk penggunaan pada halaman yang berbeda. Akhirnya, kami menampilkan link ke forum sekilas sehingga pengguna dapat mulai segera.

Tentu saja sign in membutuhkan fungsi lain, sign out! Proses sign-out sebenarnya jauh lebih mudah daripada proses sign-in. Karena semua informasi tentang pengguna disimpan dalam variabel $_SESSION, yang harus kita lakukan adalah unset mereka dan menampilkan pesan.

Setelah kita menetapkan variabel $_SESSION, kita dapat menentukan apakah seseorang masuk. Mari membuat perubahan sederhana terakhir ke header.php:

Menggantikan:

Hello Example. Not you? Log out.

Dengan:

 	if($_SESSION['signed_in'])
 	{
 	 	echo 'Hello' . $_SESSION['user_name'] . '. Not you? Sign out';
 	}
 	else
 	{
 		echo 'Sign in or create an account.';
 	}

Jika pengguna masuk, dia akan melihat namanya ditampilkan di halaman depan dengan link ke halaman keluar. Otentikasi kita sudah selesai! Sekarang forum kita akan terlihat seperti ini:

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Langkah 7: Membuat Kategori

Kita ingin membuat kategori, jadi mari kita mulai dengan membuat sebuah form.

Category name: Category description:

Langkah ini terlihat banyak seperti langkah 4 (sign up pengguna '), jadi saya tidak akan melakukan penjelasan mendalam di sini. Jika Anda mengikuti semua langkah yang Anda harus mampu memahami hal ini agak cepat.

 	 	Category name: 
 		Category description: 
 		
 	 ';
}
else
{
    //the form has been posted, so save it
    $sql = ìINSERT INTO categories(cat_name, cat_description)
 	   VALUES('' . mysql_real_escape_string($_POST['cat_name']) . ì',
 		     '' . mysql_real_escape_string($_POST['cat_description']) . ì')';
    $result = mysql_query($sql);
    if(!$result)
    {
        //something went wrong, display the error
        echo 'Error' . mysql_error();
    }
    else
    {
        echo 'New category successfully added.';
    }
}
?>

Seperti yang Anda lihat, kita telah memulai skrip dengan pemeriksaan $_SERVER, setelah memeriksa apakah pengguna memiliki hak admin, yang diperlukan untuk membuat kategori. Form akan ditampilkan jika belum dikirim. Jika sudah, nilainya akan disimpan. Sekali lagi, query SQL disiapkan dan kemudian dieksekusi.

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Langkah 8: Menambahkan Kategori ke index.php

Kami telah membuat beberapa kategori, sehingga sekarang kita dapat menampilkan mereka di halaman depan. Mari kita tambahkan query berikut untuk wilayah isi index.php.

SELECT
 	categories.cat_id,
	categories.cat_name,
 	categories.cat_description,
FROM
 	categories

Query ini memilih semua kategori dan nama dan deskripsi mereka dari tabel categories. Kita hanya butuh sedikit PHP untuk menampilkan hasilnya. Jika kita menambahkan bagian itu seperti yang kita lakukan pada langkah sebelumnya, kode akan terlihat seperti ini.

			  
'; while($row = mysql_fetch_assoc($result)) { echo ''; echo ''; echo ''; echo ''; } } } include 'footer.php'; ?>

Perhatikan bagaimana kita menggunakan cat_id untuk membuat link ke category.php. Semua link ke halaman ini akan terlihat seperti ini: category.php?cat_id=x, dimana x bisa berupa nilai numerik. Ini mungkin baru bagi Anda. Kita bisa mengecek url dengan PHP untuk nilai $_GET. Misalnya, kita memiliki tautan ini:

category.php?cat_id=23

Pernyataan itu meng-echo $_GET['cat_id']; akan menampilkan '23'. Dalam beberapa langkah berikutnya, kita akan menggunakan nilai ini untuk mengambil topik saat melihat satu kategori, namun topik tidak dapat dilihat jika kita belum membuatnya. Jadi mari kita membuat beberapa topik!

Langkah 9: Membuat sebuah Topik

Pada langkah ini, kita menggabungkan teknik yang telah kita pelajari di langkah sebelumnya. Kita memeriksa apakah pengguna masuk, kita akan menggunakan query input untuk membuat topik dan membuat beberapa form HTML dasar.

Struktur create_topic.php hampir tidak dapat dijelaskan dalam daftar atau sesuatu, jadi saya menuliskannya kembali dalam pseudo-code.

Inilah kode sebenarnya dari bagian forum kita ini, periksa penjelasan di bawah kode untuk melihat apa yang dilakukannya.

Create a topic';
if($_SESSION['signed_in'] == false)
{
	//the user is not signed in
	echo 'Sorry, you have to be signed in to create a topic.';
}
else
{
	//the user is signed in
	if($_SERVER['REQUEST_METHOD'] != 'POST')
	{	
		//the form hasn't been posted yet, display it
		//retrieve the categories from the database for use in the dropdown
		$sql = "SELECT
					cat_id,
					cat_name,
					cat_description
				FROM
					categories";
		
		$result = mysql_query($sql);
		
		if(!$result)
		{
			//the query failed, uh-oh :-(
			echo 'Error while selecting from database. Please try again later.';
		}
		else
		{
			if(mysql_num_rows($result) == 0)
			{
				//there are no categories, so a topic can't be posted
				if($_SESSION['user_level'] == 1)
				{
					echo 'You have not created categories yet.';
				}
				else
				{
					echo 'Before you can post a topic, you must wait for an admin to create some categories.';
				}
			}
			else
			{
		
				echo '
Subject: Category:'; echo ''; echo 'Message: '; } } } else { //start the transaction $query = "BEGIN WORK;"; $result = mysql_query($query); if(!$result) { //Damn! the query failed, quit echo 'An error occured while creating your topic. Please try again later.'; } else { //the form has been posted, so save it //insert the topic into the topics table first, then we'll save the post into the posts table $sql = "INSERT INTO topics(topic_subject, topic_date, topic_cat, topic_by) VALUES('" . mysql_real_escape_string($_POST['topic_subject']) . "', NOW(), " . mysql_real_escape_string($_POST['topic_cat']) . ", " . $_SESSION['user_id'] . " )"; $result = mysql_query($sql); if(!$result) { //something went wrong, display the error echo 'An error occured while inserting your data. Please try again later.' . mysql_error(); $sql = "ROLLBACK;"; $result = mysql_query($sql); } else { //the first query worked, now start the second, posts query //retrieve the id of the freshly created topic for usage in the posts query $topicid = mysql_insert_id(); $sql = "INSERT INTO posts(post_content, post_date, post_topic, post_by) VALUES ('" . mysql_real_escape_string($_POST['post_content']) . "', NOW(), " . $topicid . ", " . $_SESSION['user_id'] . " )"; $result = mysql_query($sql); if(!$result) { //something went wrong, display the error echo 'An error occured while inserting your post. Please try again later.' . mysql_error(); $sql = "ROLLBACK;"; $result = mysql_query($sql); } else { $sql = "COMMIT;"; $result = mysql_query($sql); //after a lot of work, the query succeeded! echo 'You have successfully created your new topic.'; } } } } } include 'footer.php'; ?>

Saya akan membahas halaman ini dalam dua bagian, menunjukkan form-nya dan pengolahan form.

Menampilkan form-nya
Kita memulai dengan form HTML sederhana. Sebenarnya ada sesuatu yang istimewa di sini, karena kita menggunakan dropdown. Dropdown ini diisi dengan data dari database, dengan menggunakan query ini:

SELECT
 	cat_id,
 	cat_name,
 	cat_description
FROM
 	categories

Itulah satu-satunya bagian yang berpotensi membingungkan di sini; ini hanyalah sepotong kode, seperti yang bisa Anda lihat saat melihat file create_topic.php di bagian bawah langkah ini.

Pengolahan form

Proses menyimpan topik terdiri dari dua bagian: menyimpan topik di tabel topics dan menyimpan posting pertama di tabel posts. Ini membutuhkan sesuatu yang cukup lanjut yang berjalan sedikit di luar cakupan tutorial ini. Ini disebut transaction, yang pada dasarnya berarti kita memulai dengan menjalankan perintah start dan kemudian rollback ketika ada kesalahan database dan komit saat semuanya berjalan dengan baik. Lebih lanjut tentang transactions.

Query pertama yang digunakan untuk menyimpan data adalah query pembuatan topik, yang terlihat seperti ini:

INSERT INTO 
	topics(topic_subject,
               topic_date,
               topic_cat,
               topic_by)
VALUES('" . mysql_real_escape_string($_POST['topic_subject']) . "',
       NOW(),
       " . mysql_real_escape_string($_POST['topic_cat']) . ",
       " . $_SESSION['user_id'] . ")

Pada awalnya field didefinisikan, kemudian nilai yang akan dimasukkan. Kita pernah melihat yang pertama sebelumnya, itu hanya string yang dibuat aman dengan menggunakan mysql_real_escape_string(). Nilai kedua, NOW(), adalah fungsi SQL untuk waktu saat ini. Nilai ketiga, bagaimanapun, adalah nilai yang belum pernah kita lihat sebelumnya. Ini mengacu pada id (valid) dari sebuah kategori. Nilai terakhir mengacu pada user_id (yang ada), yaitu dalam hal ini, nilai $_SESSION['user_id']. Variabel ini dinyatakan selama proses sign-in.

Jika query dieksekusi tanpa kesalahan kita melanjutkan ke query kedua. Ingat kita masih melakukan transaction di sini. Jika kita memiliki kesalahan, kita akan menggunakan perintah ROLLBACK.

INSERT INTO
        posts(post_content,
        post_date,
        post_topic,
        post_by)
VALUES
        ('" . mysql_real_escape_string($_POST['post_content']) . "',
         NOW(),
         " . $topicid . ",
         " . $_SESSION['user_id'] . ")

Hal pertama yang kita lakukan dalam kode ini adalah menggunakan mysql_insert_id() untuk mengambil id yang dihasilkan terbaru dari field topic_id di tabel topik. Seperti yang mungkin Anda ingat dari langkah pertama tutorial ini, id dihasilkan di database menggunakan auto_increment.

Kemudian posting tersebut dimasukkan ke dalam tabel posts. Query ini terlihat sangat mirip query topik. Satu-satunya perbedaan adalah bahwa posting ini mengacu pada topik dan topik yang mengacu ke kategori. Sejak awal, kita memutuskan untuk membuat model data yang bagus dan inilah hasilnya: struktur hirarkis yang bagus.

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Langkah 10: Tampilan Kategori

Kita akan membuat halaman ikhtisar untuk satu kategori. Kita baru saja membuat sebuah kategori, akan sangat berguna untuk dapat melihat semua topik di dalamnya. Pertama, buatlah halaman yang disebut category.php.

Daftar singkat hal-hal yang kita butuhkan:

Diperlukan untuk menampilkan kategori

  • cat_name
  • cat_description

Diperlukan untuk menampilkan semua topik

  • topic_id
  • topic_subject
  • topic_date
  • topic_cat

Mari membuat dua query SQL yang mengambil data persis ini dari database.

SELECT
    cat_id,
    cat_name,
    cat_description
FROM
    categories
WHERE
    cat_id = " . mysql_real_escape_string($_GET['id'])

Query di atas memilih semua kategori dari database.

SELECT	
    topic_id,
    topic_subject,
    topic_date,
    topic_cat
FROM
    topics
WHERE
    topic_cat = " . mysql_real_escape_string($_GET['id'])

Query di atas dijalankan pada while loop dimana kita echo kategori. Dengan melakukannya dengan cara ini, kita akan melihat semua kategori dan topik terbaru untuk masing-masing.
Kode lengkap dari category.php akan sebagai berikut:

Topics in ′' . $row['cat_name'] . '′ category';
		}
	
		//do a query for the topics
		$sql = "SELECT	
					topic_id,
					topic_subject,
					topic_date,
					topic_cat
				FROM
					topics
				WHERE
					topic_cat = " . mysql_real_escape_string($_GET['id']);
		
		$result = mysql_query($sql);
		
		if(!$result)
		{
			echo 'The topics could not be displayed, please try again later.';
		}
		else
		{
			if(mysql_num_rows($result) == 0)
			{
				echo 'There are no topics in this category yet.';
			}
			else
			{
				//prepare the table
				echo '

  • Description
  • Reviews (0)

Description

Source Code Website Forum Menggunakan PHP dan MySQLi

Source Code Website Forum Menggunakan PHP dan MySQLi – Website Forum adalah website yang dibuat denga tujuan membuat forum. forum adalah suatu wadah tempat bertemu atau berkomunikasi untuk sebuah komunitas yang memiliki minat yang sama.

Sehingga memudahkan pertukaran informasi antara satu anggota komunitas dengan anggota komunitas yang lain, begitu juga sebaliknya.

Website forum ini dibuat dengan menggunakan PHP dan MySQLi. dan sangat cocok untuk menjadi bahan referensi untuk teman-teman yang ingin membuat sebuah forum berbasis web.

Fitur Apa Saja Yang Tersedia Pada Website Forum Ini ?

Berikut ini adalah beberapa fitur unggulan yang tersedia pada website forum. diantaranya adalah :

  • Terdapat form pencarian diskusi.
  • Melihat list member yang terdaftar.
  • Melihat diskusi pada forum.
  • Terdapat fitur yang mencatat berapa kali sebuah diskusi dilihat.
  • Terdapat fitur yang mencatat berapa jumlah komentar pada diskusi.
  • Mengurutkan diskusi dari diskusi yang paling banyak dilihat, dan diskusi yang paling baru.
  • Menampilkan diskusi berdasarkan kategori.
  • Terdapat list diskusi paling populer pada sidebar.
  • Mengupload foto/gambar pada postingan diskusi dan komentar.

Hak Akses Website Forum

Ada dua hak akses yang ada pada website forum ini, yaitu :

  • admin
  • member

Hak Akses Admin

Berikut ini adalah beberapa fitur yang tersedia pada hak akses admin.

  • Melakukan login ke dashboard admin.
  • Mengelola kategori diskusi forum seperti menambah kategori, mengedit dan menghapus kategori.
  • Mengelola data member forum. seperti menambahkan member baru, mengedit data member dan menghapus data member.
  • Melihat data diskusi.
  • Menghapus diskusi.
  • Melihat komentar pada masing-masing diskusi.
  • Menghapus komentar pada diskusi.
  • Mengelola data admin. seperti menambahkan admin baru, mengedit dan menghapus admin.
  • Mengganti password.
  • Logout.

Hak Akses Member

Berikut adalah beberapa hal yang bisa dilakukan oleh hak akses member.

  • Mendaftar sebagai member baru.
  • Melakukan login ke forum.
  • Melihat diskusi.
  • Membuat diskusi baru.
  • Memberikan komentar pada diskusi.
  • Mengganti password.
  • Mengubah data pribadi member.
  • Mengubah foto profil member.
  • Logout.

Untuk Siapa Source Code Website Forum Ini Cocok ?

Source code ini cocok untuk teman-teman yang ingin membuat website forum atau forum berbasis web.

Source code ini sangat cocok sebagai dijadikan bahan referensi  untuk membuat website forum, blog, form pendaftaran / form registrasi dan lain-lain.

Untuk detail tentang source code website forum menggunakan PHP dan MySQLi ini bisa teman-teman lihat pada link demo berikut.

DEMO WEBSITE FORUM

Incoming search terms:

  • source code php website
  • cara membuat forum diskusi dengan php source code
  • contoh kode web yang di buat menggunakan php
  • forum php source code
  • member source code php
  • membuat forum dengan codeigniter
  • membuat forum duskusi di bootstrap
  • membuat web forum lengkap dengan php
  • php web source code
  • program forum dengan php

Dalam tutorial ini, kita akan membangun sebuah forum didukung PHP/MySQL dari awal. Tutorial ini sempurna untuk mendapatkan penggunaan PHP dan database yang digunakan untuk dasar. Mari kita langsung menyelaminya!

Langkah 1: Membuat Tabel Database

Adalah selalu ide yang bagus untuk memulai dengan membuat model data yang bagus saat membuat aplikasi. Mari kita jelaskan aplikasi kita dalam satu kalimat: Kita akan membuat forum yang memiliki users yang membuat topics di berbagai categories. Pengguna lain dapat post balasan. Seperti yang Anda lihat, saya menyoroti beberapa kata benda yang mewakili nama tabel kita.

Users

  • Categories
  • Topics
  • Posts

Ketiga objek ini saling terkait satu sama lain, jadi kita akan mengolahnya dalam desain tabel kita. Lihatlah skema di bawah ini.

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Terlihat cukup rapi ya? Setiap kotak adalah tabel database. Semua kolom yang tercantum di dalamnya dan garis di antara keduanya mewakili relasi. Saya akan menjelaskannya lebih jauh, jadi tidak apa-apa jika itu tidak masuk akal bagi Anda saat ini.

Saya akan membahas setiap tabel dengan menjelaskan SQL, yang saya buat dengan menggunakan skema di atas. Untuk skrip Anda sendiri Anda bisa membuat skema serupa dan SQL juga. Beberapa editor seperti MySQL Workbench (yang saya gunakan) dapat menghasilkan file .sql juga, tapi saya akan merekomendasikan belajar SQL karena lebih menyenangkan melakukannya sendiri. Pengenalan SQL dapat ditemukan di W3Schools.

Tabel Users

CREATE TABLE users (
user_id   INT(8) NOT NULL AUTO_INCREMENT,
user_name	VARCHAR(30) NOT NULL,
user_pass  	VARCHAR(255) NOT NULL,
user_email	VARCHAR(255) NOT NULL,
user_date	DATETIME NOT NULL,
user_level	INT(8) NOT NULL,
UNIQUE INDEX user_name_unique (user_name),
PRIMARY KEY (user_id)
) TYPE=INNODB;

Pernyataan CREATE TABLE digunakan untuk menunjukkan bahwa kita ingin membuat tabel baru, tentu saja. Pernyataannya diikuti dengan nama tabel dan semua kolom yang dicantumkan di antara tanda kurung. Nama semua field sudah cukup jelas, jadi kita hanya akan membahas tipe data di bawah ini.

user_id

"Primary key digunakan untuk mengidentifikasi setiap baris dalam sebuah tabel secara unik."

Jenis field ini adalah INT, yang berarti field ini memegang integer. Field tidak boleh kosong (NOT NULL) dan penambahan disetiap record yang dimasukkan. Di bagian bawah tabel, Anda dapat melihat field user_id dideklarasikan sebagai primary key. Primary key digunakan untuk mengidentifikasi setiap baris dalam sebuah tabel secara unik. Tidak ada dua baris yang berbeda dalam tabel yang memiliki nilai (atau kombinasi nilai) yang sama di semua kolom. Itu mungkin sedikit tidak jelas, jadi inilah sedikit contohnya.

Ada seorang pengguna bernama John Doe. Jika pengguna lain mendaftar dengan nama yang sama, ada masalah, karena: pengguna mana adalah yang mana? Anda tidak bisa mengatakannya dan database juga tidak bisa membedakan keduanya. Dengan menggunakan primary key masalah ini diselesaikan, karena kedua topik itu unik.

Semua tabel lainnya juga mempunyai primary key juga dan mereka bekerja dengan cara yang sama.

user_name

Ini adalah field teks, yang disebut field VARCHAR di MySQL. Jumlah antara tanda kurung adalah panjang maksimum. Pengguna dapat memilih nama pengguna hingga 30 karakter. Field ini tidak boleh NULL. Di bagian bawah tabel, Anda bisa melihat field ini dinyatakan UNIQUE, yang berarti nama pengguna yang sama tidak dapat didaftarkan dua kali. Bagian UNIQUE INDEX menunjukkan database yang ingin kita tambahkan kunci unik. Kemudian kita mendefinisikan nama kunci unik, user_name_unique dalam kasus ini. Antara tanda kurung adalah field kunci unik yang berlaku, yaitu user_name.

user_pass

Field ini sama dengan field user_name, kecuali panjang maksimumnya. Karena password pengguna, tidak peduli berapa panjangnya, digabung dengan sha1(), password akan selalu 40 karakter panjangnya.

user_email

Field ini sama dengan field user_pass.

user_date

Ini adalah field dimana kita akan menyimpan tanggal pendaftaran pengguna. Jenisnya adalah DATETIME dan field-nya tidak boleh NULL.

user_level

Field ini berisi tingkat pengguna, misalnya: '0' untuk pengguna biasa dan '1' untuk admin. Lebih lanjut tentang ini nanti.

Tabel Categories

CREATE TABLE categories (
cat_id 		 	INT(8) NOT NULL AUTO_INCREMENT,
cat_name	 	VARCHAR(255) NOT NULL,
cat_description 	VARCHAR(255) NOT NULL,
UNIQUE INDEX cat_name_unique (cat_name),
PRIMARY KEY (cat_id)
) TYPE=INNODB;

Tipe data ini pada dasarnya bekerja dengan cara yang sama dengan tabel users. Tabel ini juga memiliki primary key dan nama kategori haruslah unik.

Tabel Topics

CREATE TABLE topics (
topic_id		INT(8) NOT NULL AUTO_INCREMENT,
topic_subject  		VARCHAR(255) NOT NULL,
topic_date		DATETIME NOT NULL,
topic_cat		INT(8) NOT NULL,
topic_by		INT(8) NOT NULL,
PRIMARY KEY (topic_id)
) TYPE=INNODB;

Tabel ini hampir sama dengan tabel lainnya, kecuali field topic_by. Field itu mengacu pada pengguna yang menciptakan topik. Topic_cat mengacu pada kategori topik miliknya. Kita tidak bisa memaksa relasi ini hanya dengan menyatakan field-nya. Kita harus membiarkan database mengetahui bidang ini harus berisi user_id yang ada dari tabel pengguna, atau tabel cat_id yang valid dari tabel kategori. Kita akan menambahkan beberapa relasi setelah saya membahas tabel posting.

Tabel Posts

CREATE TABLE posts (
post_id 		INT(8) NOT NULL AUTO_INCREMENT,
post_content		TEXT NOT NULL,
post_date 		DATETIME NOT NULL,
post_topic		INT(8) NOT NULL,
post_by		INT(8) NOT NULL,
PRIMARY KEY (post_id)
) TYPE=INNODB;

Ini sama dengan tabel lainnya; ada juga field yang mengacu pada user_id di sini: field post_by. Field post_topic mengacu pada topik pos miliknya.

"Foreign key adalah batasan referensi antara dua tabel. Foreign key mengidentifikasi kolom atau kumpulan kolom dalam satu tabel (referensi) yang mengacu pada kolom atau kumpulan kolom di tabel lain (yang direferensikan)."

Setelah kita mengeksekusi query ini, kita memiliki model data yang cujup bagus, namun relasinya masih hilang. Mari kita mulai dengan definisi sebuah relasi. Kita akan menggunakan sesuatu yang disebut foreign key. Foreign key adalah batasan referensi antara dua tabel. Foreign key mengidentifikasi kolom atau kumpulan kolom dalam satu tabel (referensi) yang mengacu pada kolom atau kumpulan kolom di tabel lain (yang direferensikan). Beberapa kondisi:

  • Kolom di tabel referensi yang foreign key mengacu harus menjadi primary key
  • Nilai yang harus dirujuk harus ada dalam tabel yang direferensikan

Dengan menambahkan foreign key, informasi dihubungkan bersamaan yang sangat penting untuk normalisasi database. Sekarang Anda tahu apa itu foreign key dan mengapa kita menggunakannya. Saatnya untuk menambahkannya ke tabel yang telah kita buat dengan menggunakan pernyataan ALTER, yang bisa digunakan untuk mengubah tabel yang sudah ada.

Kita akan menghubungkan topik ke kategori terlebih dulu:

ALTER TABLE topics ADD FOREIGN KEY(topic_cat) REFERENCES categories(cat_id) ON DELETE CASCADE ON UPDATE CASCADE;

Bagian terakhir dari query sudah mengatakan apa yang terjadi. Saat kategori dihapus dari database, semua topik akan dihapus juga. Jika cat_id dari kategori berubah, setiap topik akan diperbarui juga. Itulah kegunaan dari bagian ON UPDATE CASCADE. Tentu saja, Anda dapat membalikkan ini untuk melindungi data Anda, sehingga Anda tidak dapat menghapus kategori selama masih memiliki topik yang terkait dengannya. Jika Anda ingin melakukannya, Anda bisa mengganti bagian 'ON DELETE CASCADE' dengan 'ON DELETE RESTRICT'. Ada juga SET NULL dan NO ACTION, yang berbicara untuk mereka sendiri.

Sekarang, setiap topik terkait dengan kategori. Mari tautkan topik ke pengguna yang membuatnya.

ALTER TABLE topics ADD FOREIGN KEY(topic_by) REFERENCES users(user_id) ON DELETE RESTRICT ON UPDATE CASCADE;

Foreign key ini sama dengan yang sebelumnya, tapi ada satu perbedaan: pengguna tidak bisa dihapus asalkan masih ada topik dengan user id dari pengguna. Kita tidak menggunakan CASCADE di sini karena mungkin ada informasi berharga dalam topik kita. Kita tidak ingin informasi tersebut dihapus jika seseorang memutuskan untuk menghapus akun mereka. Untuk tetap memberi pengguna kesempatan untuk menghapus akun mereka, Anda dapat membuat beberapa fitur yang menganonimkan semua topik mereka dan kemudian menghapus akun mereka. Sayangnya, itu diluar lingkup tutorial ini.

Tautkan posting ke topik:

ALTER TABLE posts ADD FOREIGN KEY(post_topic) REFERENCES topics(topic_id) ON DELETE CASCADE ON UPDATE CASCADE;

Dan akhirnya, tautkan setiap posting ke pengguna yang membuatnya:

ALTER TABLE posts ADD FOREIGN KEY(post_by) REFERENCES users(user_id) ON DELETE RESTRICT ON UPDATE CASCADE;

Itulah bagian database! Cukup banyak pekerjaan, tapi hasilnya, model data yang hebat, yang pasti layak dilakukan.

Setiap halaman forum kita membutuhkan beberapa hal mendasar, seperti DOCTYPE dan beberapa markup. Itu sebabnya kita akan menyertakan file header.php di bagian atas setiap halaman, dan footer.php di bagian bawah. Header.php berisi DOCTYPE, link ke stylesheet dan beberapa informasi penting tentang forum, seperti tag title dan metatag.

header.php




	
	
	
	PHP-MySQL forum
	


My forum

Div pembungkus akan digunakan untuk memudahkan menata keseluruhan halaman. Menu div jelas berisi menu dengan link ke halaman yang masih harus kita buat, tapi ini membantu untuk melihat sedikit kemana kita pergi. Div userbar akan digunakan untuk bar atas kecil yang berisi beberapa informasi seperti nama pengguna dan link ke halaman logout. Halaman konten menyimpan konten yang sebenarnya dari halaman, jelas.

Pembaca yang penuh perhatian mungkin telah memperhatikan bahwa kita kehilangan beberapa hal. Tidak ada tag atau . Mereka ada di halaman footer.php, seperti yang bisa Anda lihat di bawah ini.

Ketika kami menyertakan header dan footer pada setiap halaman sisa halaman mendapatkan tertanam antara header dan footer. Metode ini telah mendapat beberapa keuntungan. Pertama dan terutama, semuanya akan bergaya dengan benar. Contoh singkat:

some text';
}
else
{
 	//bad looking, unstyled error :-( 
} 
?>

Seperti yang Anda lihat, sebuah halaman tanpa kesalahan akan menghasilkan halaman yang bagus dengan kontennya. Tapi jika ada kesalahan, semuanya terlihat sangat jelek; jadi itu sebabnya lebih baik memastikan tidak hanya konten nyata yang ditata dengan benar, tapi juga kesalahan yang mungkin kita dapatkan.

Keuntungan lain adalah kemungkinan untuk membuat perubahan yang cepat. Anda bisa melihat sendiri dengan mengedit teks di footer.php saat Anda menyelesaikan tutorial ini; Anda akan melihat perubahan footer pada setiap halaman dengan segera. Akhirnya, kita menambahkan stylesheet yang memberi kita beberapa markup dasar - tidak ada yang terlalu mewah.

body {
	background-color: #4E4E4E;
	text-align: center;			/* make sure IE centers the page too */
}

#wrapper {
	width: 900px;
	margin: 0 auto; 			/* center the page */
}

#content {
	background-color: #fff;
	border: 1px solid #000;
	float: left;
	font-family: Arial;
	padding: 20px 30px;
	text-align: left;
	width: 100%;				/* fill up the entire div */
}

#menu {
	float: left;
	border: 1px solid #000;
	border-bottom: none;		/* avoid a double border */
	clear: both;				/* clear:both makes sure the content div doesn't float next to this one but stays under it */
	width:100%;
	height:20px;
	padding: 0 30px;
	background-color: #FFF;
	text-align: left;
	font-size: 85%;
}

#menu a:hover {
	background-color: #009FC1;
}

#userbar {
	background-color: #fff;
	float: right;
	width: 250px;
}

#footer {
	clear: both;
}

/* begin table styles */
table {
	border-collapse: collapse;
	width: 100%;
}

table a {
	color: #000;
}

table a:hover {
	color:#373737;
	text-decoration: none;
}

th {
	background-color: #B40E1F;
	color: #F0F0F0;
}

td {
	padding: 5px;
}

/* Begin font styles */
h2, #footer {
	font-family: Arial;
	color: #F1F3F1;
}

h3 {margin: 0; padding: 0;}

/* Menu styles */
.item {
	background-color: #00728B;
	border: 1px solid #032472;
	color: #FFF;
	font-family: Arial;
	padding: 3px;
	text-decoration: none;
}

.leftpart {
	width: 70%;
}

.rightpart {
	width: 30%;
}

.small {
	font-size: 75%;
	color: #373737;
}
#footer {
	font-size: 65%;
	padding: 3px 0 0 0;
}

.topic-post {
	height: 100px;
	overflow: auto;
}

.post-content {
	padding: 30px;
}

textarea {
	width: 500px;
	height: 200px;
}

Langkah 3: Siap Beraksi

Sebelum kita bisa membaca apapun dari database kita, kita membutuhkan sebuah koneksi. Itulah gunanya connect.php. Kita akan memasukkannya ke dalam setiap file yang akan kita buat.

Cukup ganti nilai default dari variabel di bagian atas halaman dengan database Anda sendiri, simpan file dan Anda siap untuk pergi!

Langkah 4: Menampilkan Ikhtisar Forum

Karena kami baru saja mulai dengan beberapa teknik dasar, kita akan membuat versi sederhana dari forum sekilas untuk sekarang.

';
	echo '
'; echo '

Category name

Category description goes here'; echo '
'; echo 'Topic subject at 10-10'; echo '
Category Last topic
'; echo '

' . $row['cat_name'] . '

' . $row['cat_description']; echo '
'; echo 'Topic subject at 10-10'; echo '
'; while($row = mysql_fetch_assoc($result)) { echo ''; echo ''; echo ''; echo ''; } } } } } include 'footer.php'; ?>

Dan inilah hasil akhir dari halaman kategori kita:

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Langkah 11: Tampilan Topik

Query SQL dalam langkah ini adalah yang rumit. Bagian PHP adalah semua hal yang pernah Anda lihat sebelumnya. Mari kita lihat query-nya. Yang pertama mengambil informasi dasar tentang topik ini:

SELECT
    topic_id,
    topic_subject
FROM
    topics
WHERE
    topics.topic_id = " . mysql_real_escape_string($_GET['id'])

Informasi ini ditampilkan di head tabel yang akan kita gunakan untuk menampilkan semua data. Selanjutnya, kita mengambil semua posting dalam topik ini dari database. Query berikut memberi kita apa yang kita butuhkan:

SELECT
    posts.post_topic,
    posts.post_content,
    posts.post_date,
    posts.post_by,
    users.user_id,
    users.user_name
FROM
    posts
LEFT JOIN
    users
ON
    posts.post_by = users.user_id
WHERE
    posts.post_topic = " . mysql_real_escape_string($_GET['id'])

Kali ini, kita menginginkan informasi dari tabel users dan posts - jadi kita menggunakan LEFT JOIN lagi. Kondisinya adalah: id pengguna harus sama dengan field post_by. Dengan cara ini kita bisa menampilkan username dari pengguna yang membalas di setiap postingan.

Tampilan topik terakhir terlihat seperti ini:

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Langkah 12: Menambahkan Balasan

Mari membuat bagian terakhir dari forum ini, kemungkinan untuk menambahkan balasan. Kita akan mulai dengan membuat form:

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Kode reply.php lengkap terlihat seperti ini.

the topic.';
		}
	}
}

include 'footer.php';
?>

Komentar dalam kode cukup banyak terperinci apa yang terjadi. Kita memeriksa pengguna sebenarnya dan kemudian memasukkan posting ke database.

Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php
Cara membuat forum diskusi dengan php

Menyelesaikan

Setelah Anda telah menyelesaikan tutorial ini, Anda seharusnya sudah memiliki pemahaman yang lebih baik tentang apa yang diperlukan untuk membangun sebuah forum. Saya harap penjelasan saya sudah cukup jelas! Terima kasih lagi untuk membaca.

Topic Created at
'; echo '

' . $row['topic_subject'] . '

'; echo '

'; echo date('d-m-Y', strtotime($row['topic_date'])); echo '