Dalam tutorial ini, kita akan membangun forum yang didukung PHP/MySQL dari awal. Tutorial ini sangat cocok untuk membiasakan diri dengan PHP dan database yang digunakan untuk kebijakan. Mari selami langsung Show
Langkah 1. Membuat Tabel DatabaseItu selalu merupakan ide yang baik untuk memulai dengan membuat model data yang bagus saat membuat aplikasi. Mari kita jelaskan aplikasi kita dalam satu kalimat. Kami akan membuat forum yang memiliki pengguna yang membuat topik dalam berbagai kategori. Pengguna lain dapat memposting balasan. Seperti yang Anda lihat, saya menyoroti beberapa kata benda yang mewakili nama tabel kami Pengguna
Ketiga objek ini saling terkait satu sama lain, jadi kami akan mengolahnya dalam desain tabel kami. Lihatlah skema di bawah ini Terlihat cukup rapi bukan? . Semua kolom yang tercantum di dalamnya dan garis di antaranya mewakili hubungan. Saya akan menjelaskannya lebih lanjut, jadi tidak apa-apa jika saat ini tidak masuk akal bagi Anda Saya akan membahas setiap tabel dengan menjelaskan SQL, yang saya buat menggunakan skema di atas. Untuk skrip Anda sendiri, Anda juga dapat membuat skema dan SQL yang serupa. Beberapa editor seperti MySQL Workbench (yang saya gunakan) dapat menghasilkan file. sql juga, tapi saya akan merekomendasikan belajar SQL karena lebih menyenangkan melakukannya sendiri. Pengantar SQL dapat ditemukan di W3Schools Tabel penggunaCREATE 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. Pernyataan tersebut diikuti dengan nama tabel dan semua kolom yang diapit oleh tanda kurung. Nama semua field sudah cukup jelas, jadi kita hanya akan membahas tipe datanya di bawah ini identitas pengguna"Kunci utama digunakan untuk mengidentifikasi secara unik setiap baris dalam sebuah tabel. " Jenis bidang ini adalah INT, yang berarti bidang ini berisi bilangan bulat. Bidang tidak boleh kosong (BUKAN NULL) dan ditambahkan ke setiap catatan yang dimasukkan. Di bagian bawah tabel, Anda dapat melihat kolom user_id yang dideklarasikan sebagai kunci utama. Kunci utama digunakan untuk mengidentifikasi secara unik setiap baris dalam sebuah tabel. Tidak ada dua baris berbeda dalam tabel yang memiliki nilai (atau kombinasi nilai) yang sama di semua kolom. Itu mungkin sedikit tidak jelas, jadi inilah sedikit contoh Ada seorang pengguna bernama John Doe. Jika pengguna lain mendaftar dengan nama yang sama, ada masalah, karena. pengguna yang mana? . Dengan menggunakan kunci utama masalah ini dapat diselesaikan, karena kedua topik tersebut unik Semua tabel lain juga memiliki kunci utama dan bekerja dengan cara yang sama nama belakangIni adalah bidang teks, yang disebut bidang VARCHAR di MySQL. Jumlah antara tanda kurung adalah panjang maksimum. Pengguna dapat memilih nama pengguna hingga 30 karakter. Kolom ini tidak boleh NULL. Di bagian bawah tabel, Anda dapat melihat bahwa bidang ini dinyatakan UNIK, artinya nama pengguna yang sama tidak dapat didaftarkan dua kali. Bagian INDEKS UNIK menunjukkan database yang ingin kita tambahkan kunci unik. Kemudian kami mendefinisikan nama kunci unik, user_name_unique dalam kasus ini. Di antara tanda kurung adalah bidang kunci unik yang berlaku, yaitu nama_pengguna user_passBidang ini sama dengan bidang nama_pengguna, kecuali untuk panjang maksimum. Karena kata sandi pengguna, berapa pun panjangnya, digabungkan dengan sha1(), kata sandi akan selalu sepanjang 40 karakter email_penggunaBidang ini sama dengan bidang user_pass tanggal_penggunaIni adalah bidang tempat kami akan menyimpan tanggal pendaftaran pengguna. Jenisnya adalah DATETIME dan bidangnya tidak boleh NULL tingkat_penggunaBidang ini berisi tingkat pengguna, misalnya. '0' untuk pengguna biasa dan '1' untuk admin. Lebih lanjut tentang ini nanti Tabel KategoriCREATE 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 seperti tabel pengguna. Tabel ini juga memiliki primary key dan nama kategori harus unik Topik TabelCREATE 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 untuk field topic_by. Bidang mengacu pada pengguna yang membuat topik. Topic_cat mengacu pada kategori topik yang dimilikinya. Kami tidak dapat memaksakan hubungan ini hanya dengan menentukan bidang. Kita harus memberi tahu database bahwa bidang ini harus berisi user_id yang ada dari tabel user, atau tabel cat_id yang valid dari tabel kategori. Kami akan menambahkan beberapa relasi setelah saya membahas tabel postingan Tabel postingCREATE 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; . bidang post_by. Bidang post_topic mengacu pada topik posting "Kunci asing adalah batasan referensi antara dua tabel. Kunci asing mengidentifikasi kolom atau grup kolom dalam satu tabel (referensi) yang merujuk ke kolom atau grup kolom di tabel lain (direferensikan). " Setelah kami menjalankan kueri ini, kami memiliki model data yang cukup baik, tetapi hubungannya masih hilang. Mari kita mulai dengan definisi relasi. Kami akan menggunakan sesuatu yang disebut kunci asing. Kunci asing adalah batasan referensi antara dua tabel. Kunci asing mengidentifikasi kolom atau grup kolom dalam satu tabel (referensi) yang merujuk ke kolom atau grup kolom di tabel lain (direferensikan). Beberapa kondisi
Dengan menambahkan kunci asing, informasi dihubungkan bersama yang sangat penting untuk normalisasi basis data. Sekarang Anda tahu apa itu kunci asing dan mengapa kami menggunakannya. Saatnya menambahkannya ke tabel yang telah kita buat dengan menggunakan pernyataan ALTER, yang dapat digunakan untuk mengubah tabel yang sudah ada Kami akan menautkan topik ke kategori terlebih dahulu ALTER TABLE topics ADD FOREIGN KEY(topic_cat) REFERENCES categories(cat_id) ON DELETE CASCADE ON UPDATE CASCADE;_ Bagian terakhir dari kueri sudah mengatakan apa yang terjadi. Saat kategori dihapus dari database, semua topik juga akan dihapus. Jika cat_id dari kategori berubah, setiap topik juga akan diperbarui. Itu adalah penggunaan bagian ON UPDATE CASCADE. Tentu saja, Anda dapat membalikkan ini untuk melindungi data Anda, jadi Anda tidak dapat menghapus kategori selama Anda masih memiliki topik yang terkait dengannya. Jika Anda ingin melakukannya, Anda dapat mengganti bagian 'ON DELETE CASCADE' dengan 'ON DELETE RESTRICT'. Ada juga SET NULL dan NO ACTION, yang berbicara sendiri Sekarang, setiap topik dikaitkan 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; Kunci asing ini sama dengan yang sebelumnya, tetapi ada satu perbedaan. pengguna tidak dapat dihapus selama masih ada topik dengan id pengguna dari pengguna. Kami tidak menggunakan CASCADE di sini karena mungkin ada informasi berharga dalam topik kami. Kami tidak ingin informasi tersebut dihapus jika seseorang memutuskan untuk menghapus akunnya. 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 di luar cakupan tutorial ini Tautkan postingan ke topik ALTER TABLE posts ADD FOREIGN KEY(post_topic) REFERENCES topics(topic_id) ON DELETE CASCADE ON UPDATE CASCADE;_ Dan terakhir, tautkan setiap postingan ke pengguna yang membuatnya ALTER TABLE posts ADD FOREIGN KEY(post_by) REFERENCES users(user_id) ON DELETE RESTRICT ON UPDATE CASCADE; Itu bagian database. Cukup banyak pekerjaan, tetapi hasilnya, model data yang bagus, yang pasti layak untuk dilakukan Langkah 2. Pengenalan Sistem Header/FooterSetiap halaman forum kami memerlukan beberapa hal dasar, seperti DOCTYPE dan beberapa markup. Itu sebabnya kami akan menyertakan file header. php di bagian atas setiap halaman, dan footer. php di bagian bawah. Tajuk. php berisi DOCTYPE, tautan ke stylesheet dan beberapa informasi penting tentang forum, seperti tag judul dan metatag tajuk. php<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="description" content="A short description." /> <meta name="keywords" content="put, keywords, here" /> <title>PHP-MySQL forum</title> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body> <h1>My forum</h1> <div id="wrapper"> <div id="menu"> <a class="item" href="/forum/index.php">Home</a> - <a class="item" href="/forum/create_topic.php">Create a topic</a> - <a class="item" href="/forum/create_cat.php">Create a category</a> <div id="userbar"> <div id="userbar">Hello Example. Not you? Log out.</div> </div> <div id="content">_ Div pembungkus akan digunakan untuk memudahkan tata letak seluruh halaman. Menu div jelas berisi menu dengan tautan ke halaman yang masih harus kita buat, tetapi ini membantu untuk melihat sedikit ke mana kita akan 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 halaman yang sebenarnya, tentu saja Pembaca yang penuh perhatian mungkin memperhatikan bahwa kami kehilangan beberapa hal. Tidak ada tag 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;_9 atau ALTER TABLE topics ADD FOREIGN KEY(topic_cat) REFERENCES categories(cat_id) ON DELETE CASCADE ON UPDATE CASCADE;0. Mereka ada di halaman footer. php, seperti yang Anda lihat di bawah ini </div><!-- content --> </div><!-- wrapper --> <div id="footer">Created for Nettuts+</div> </body> </html> Saat kami menyertakan header dan footer di setiap halaman, sisa halaman akan disematkan di antara header dan footer. Metode ini telah memperoleh beberapa keuntungan. Pertama dan terpenting, semuanya akan ditata dengan benar. Contoh singkat 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;_0 Seperti yang Anda lihat, halaman tanpa kesalahan akan menghasilkan halaman yang bagus dengan kontennya. Tapi jika ada kesalahan, semuanya terlihat sangat jelek; Keuntungan lain adalah kemungkinan untuk membuat perubahan cepat. Anda dapat melihatnya sendiri dengan mengedit teks di footer. php saat Anda menyelesaikan tutorial ini; . Akhirnya, kami menambahkan lembar gaya yang memberi kami beberapa markup dasar - tidak ada yang terlalu mewah 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;_1 Langkah 3. Siap BeraksiSebelum kita dapat membaca apapun dari database kita, kita membutuhkan sebuah koneksi. Itulah gunanya connect. php. Kami akan memasukkannya ke dalam setiap file yang akan kami buat 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;_2 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 ForumKarena kita baru saja memulai dengan beberapa teknik dasar, untuk saat ini kita akan membuat versi sederhana dari forum ini 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;_3 Itu dia. ikhtisar yang bagus dan bersih. Kami akan memperbarui halaman ini sepanjang tutorial hingga lebih seperti hasil akhirnya, selangkah demi selangkah Langkah 5. Mendaftarkan PenggunaMari kita mulai dengan membuat formulir HTML sederhana agar pengguna baru dapat mendaftar Halaman PHP diperlukan untuk memproses formulir. Kami akan menggunakan variabel $_SERVER. Variabel $_SERVER adalah larik dengan nilai yang ditetapkan secara otomatis dengan setiap permintaan. Salah satu nilai dari array $_SERVER adalah 'REQUEST_METHOD'. Saat halaman diminta dengan GET, variabel ini akan menyimpan nilai 'GET'. Ketika halaman diminta melalui POST, itu akan menyimpan nilai 'POST'. Kita dapat menggunakan nilai ini untuk memeriksa apakah suatu formulir telah diposting. Lihat halaman pendaftaran. php di bawah ini 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;_4 Ada banyak penjelasan di komentar yang saya buat di file, jadi pastikan untuk memeriksanya. Pemrosesan data berlangsung dalam tiga bagian
Bagian PHP cukup jelas. Namun, kueri SQL mungkin memerlukan lebih banyak penjelasan 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;_5 Pada baris 1 kami memiliki pernyataan INSERT INTO yang cukup jelas. Nama tabel ditentukan pada baris kedua. Kata-kata di antara tanda kurung mewakili kolom tempat kita ingin memasukkan data. Pernyataan VALUES memberi tahu database bahwa kami telah mendeklarasikan nama kolom dan inilah saatnya untuk menentukan nilainya. Ada sesuatu yang baru di sini. mysql_real_escape_string. Fungsi lolos dari karakter khusus dalam string yang tidak lolos, sehingga aman untuk menempatkannya dalam kueri. Fungsi ini HARUS selalu digunakan, dengan sangat sedikit pengecualian. Terlalu banyak skrip yang tidak menggunakannya dan mudah diretas. Jangan mengambil risiko, gunakan mysql_real_escape_string() "Jangan pernah memasukkan kata sandi normal seperti itu. Anda HARUS mengenkripsinya. " Juga, Anda dapat melihat bahwa fungsi sha1() digunakan untuk mengenkripsi kata sandi pengguna. Ini juga merupakan hal yang sangat penting untuk diingat. Jangan pernah memasukkan kata sandi normal seperti itu. Anda HARUS mengenkripsinya. Bayangkan seorang peretas yang entah bagaimana berhasil mendapatkan akses ke database Anda. Jika dia melihat semua kata sandi teks biasa, dia dapat masuk ke akun (admin) yang dia inginkan. Jika kolom kata sandi berisi string sha1, dia harus memecahkannya terlebih dahulu, yang hampir tidak mungkin Catatan. ini juga memungkinkan untuk menggunakan md5(), saya selalu menggunakan sha1() karena tolok ukur telah membuktikan bahwa ini sedikit lebih cepat, tetapi tidak terlalu banyak. Anda dapat mengganti sha1 dengan md5 jika Anda mau Jika proses pendaftaran berhasil, Anda akan melihat sesuatu seperti ini Coba segarkan layar phpMyAdmin Anda, catatan baru akan muncul di tabel pengguna Langkah 6. Menambahkan Otentikasi dan Tingkat PenggunaAspek 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, kami akan fokus pada proses login dan membuat beberapa fitur admin seperti membuat kategori baru dan menutup utas. Setelah menyelesaikan langkah sebelumnya, kami akan menjadikan akun yang baru dibuat sebagai akun admin. Di phpMyAdmin, klik pada tabel pengguna, lalu 'Jelajahi'. Akun Anda mungkin langsung muncul. Klik ikon edit dan ubah nilai bidang user_level dari 0 menjadi 1. Itu saja untuk saat ini. Anda tidak akan langsung melihat perbedaan apa pun dalam aplikasi kami, tetapi ketika kami menambahkan fitur admin, akun normal Anda dan akun Anda akan memiliki kemampuan yang berbeda Proses masuk bekerja dengan cara berikut
File masuk. php ada di bawah. Jangan mengira saya tidak menjelaskan apa yang saya lakukan, tetapi periksa komentar di file. Jauh lebih mudah dipahami dengan cara itu 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;_6 Ini adalah kueri di file masuk. php 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;_7 Ini jelas kami perlu memeriksa untuk mengetahui apakah kredensial yang diberikan milik pengguna yang ada. Banyak skrip mengambil kata sandi dari database dan membandingkannya menggunakan PHP. Jika kita melakukan ini secara langsung melalui SQL, kata sandi akan disimpan dalam database satu kali selama pendaftaran dan tidak akan pernah meninggalkannya lagi. Ini lebih aman, karena semua tindakan nyata yang terjadi di lapisan basis data dan bukan di aplikasi kita Jika pengguna berhasil masuk, kami melakukan beberapa hal 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;_8 Pertama, kami menyetel 'signed_in' $_SESSION var ke true, sehingga kami dapat menggunakannya di halaman lain untuk memastikan pengguna masuk. Kami juga menempatkan id pengguna dan pengguna dalam variabel $_SESSION untuk digunakan pada halaman yang berbeda. Terakhir, kami menampilkan tautan sekilas ke forum sehingga pengguna dapat langsung memulai Tentu saja, masuk membutuhkan fungsi lain, keluar. Proses keluar sebenarnya jauh lebih mudah daripada proses masuk. Karena semua informasi tentang pengguna disimpan dalam variabel $_SESSION, yang harus kita lakukan adalah menghapusnya dan menampilkan pesan Setelah kami mengatur variabel $_SESSION, kami dapat menentukan apakah seseorang masuk. Mari buat satu perubahan sederhana terakhir pada header. php Mengganti 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;_9 Oleh 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;0 Jika pengguna masuk, dia akan melihat namanya ditampilkan di halaman depan dengan tautan ke halaman keluar. Otentikasi kami selesai. Sekarang forum kita akan terlihat seperti ini Langkah 7. Buat KategoriKami ingin membuat kategori, jadi mari kita mulai dengan membuat formulir 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;1 Langkah ini sangat mirip dengan langkah 4 (pengguna mendaftar), jadi saya tidak akan melakukan penjelasan mendalam di sini. Jika Anda mengikuti semua langkah, Anda seharusnya dapat mengetahuinya dengan cukup cepat 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;2 Seperti yang Anda lihat, kami memulai skrip dengan pemeriksaan $_SERVER, setelah memeriksa apakah pengguna memiliki hak admin, yang diperlukan untuk membuat kategori. Formulir akan ditampilkan jika belum terkirim. Jika ya, nilainya akan disimpan. Sekali lagi, kueri SQL disiapkan dan kemudian dieksekusi Langkah 8. Menambahkan Kategori ke index. phpKami telah membuat beberapa kategori, jadi sekarang kami dapat menampilkannya di halaman depan. Mari tambahkan kueri berikut untuk wilayah konten indeks. php 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;_3 Kueri ini memilih semua kategori beserta nama dan deskripsinya dari tabel kategori. Kita hanya perlu sedikit PHP untuk menampilkan hasilnya. Jika kita menambahkan bagian tersebut seperti yang kita lakukan pada langkah sebelumnya, kodenya akan terlihat seperti ini 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;_4 Perhatikan bagaimana kami menggunakan cat_id untuk membuat tautan ke kategori. php. Semua tautan ke halaman ini akan terlihat seperti ini. kategori. php?cat_id=x, di mana x bisa berupa nilai numerik. Ini mungkin baru bagi Anda. Kita dapat memeriksa url dengan PHP untuk nilai $_GET. Misalnya, kami memiliki tautan ini 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;5 Pernyataan echo $_GET['cat_id']; . Dalam beberapa langkah berikutnya, kami akan menggunakan nilai ini untuk mengambil topik saat melihat kategori, tetapi topik tidak akan terlihat jika kami belum membuatnya. Jadi mari kita membuat beberapa topik Langkah 9. Buat TopikPada langkah ini, kami menggabungkan teknik yang telah kami pelajari pada langkah sebelumnya. Kami memeriksa apakah pengguna masuk, kami akan menggunakan kueri input untuk membuat topik dan membuat beberapa formulir HTML dasar Struktur create_topic. php hampir tidak dapat dijelaskan dalam registri atau semacamnya, jadi saya menulisnya kembali dalam kode semu 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;6 Ini adalah kode sebenarnya dari bagian forum kami ini, periksa penjelasan di bawah kode untuk melihat fungsinya 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;7 Saya akan membahas halaman ini dalam dua bagian, menampilkan form dan form processing Tunjukkan formulir 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;_8 Itulah satu-satunya bagian yang berpotensi membingungkan di sini; . php di bagian bawah langkah ini Pemrosesan formulir Proses menyimpan topik terdiri dari dua bagian. simpan topik di tabel topik dan simpan posting pertama di tabel posting. Ini membutuhkan sesuatu yang cukup canggih yang sedikit melampaui cakupan tutorial ini. Ini disebut transaksi, yang pada dasarnya berarti kita mulai dengan menjalankan perintah mulai dan kemudian kembalikan ketika ada kesalahan database dan lakukan ketika semuanya berjalan dengan baik. Lebih lanjut tentang transaksi 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;_9 Kueri pertama yang digunakan untuk menyimpan data adalah kueri pembuatan topik, yang terlihat seperti ini 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;0 Mula-mula bidang ditentukan, kemudian nilai yang akan dimasukkan. Kami telah melihat yang pertama sebelumnya, itu hanya sebuah string yang dibuat aman dengan menggunakan mysql_real_escape_string(). Nilai kedua, NOW(), adalah fungsi SQL untuk waktu saat ini. Namun, nilai ketiga adalah nilai yang belum pernah kita lihat sebelumnya. Ini mengacu pada id (valid) dari suatu kategori. Nilai terakhir mengacu pada user_id (yang ada), yang dalam hal ini adalah nilai $_SESSION['user_id']. Variabel ini ditentukan selama proses masuk Jika kueri dijalankan tanpa kesalahan, kami melanjutkan ke kueri kedua. Ingat kita masih melakukan transaksi di sini. Jika kami memiliki kesalahan, kami akan menggunakan perintah ROLLBACK 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;1 Hal pertama yang kami lakukan dalam kode ini adalah menggunakan mysql_insert_id() untuk mengambil id terbaru yang dihasilkan dari bidang topic_id di tabel topik. Seperti yang mungkin Anda ingat dari langkah pertama tutorial ini, id dibuat di database menggunakan auto_increment Kemudian postingan tersebut dimasukkan ke dalam tabel postingan. Kueri ini terlihat sangat mirip dengan kueri topik. Satu-satunya perbedaan adalah bahwa posting ini mengacu pada topik dan topik mengacu pada kategori. Dari awal kami memutuskan untuk membuat model data yang bagus dan inilah hasilnya. struktur hirarki yang baik Langkah 10. Tampilan KategoriKami akan membuat halaman ikhtisar untuk satu kategori. Kita baru saja membuat sebuah kategori, akan sangat berguna untuk dapat melihat semua topik di dalamnya. Pertama, buat halaman bernama kategori. php Daftar singkat hal-hal yang kita butuhkan Diperlukan untuk menampilkan kategori
Diperlukan untuk menampilkan semua topik
Mari buat dua kueri SQL yang mengambil data persis ini dari database 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;2 Kueri di atas memilih semua kategori dari database 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;_3 Kueri di atas dijalankan dalam loop sementara di mana kami menggemakan kategori. Dengan melakukannya dengan cara ini, kita akan melihat semua kategori dan topik terbaru untuk masing-masing kategori 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;_4 Dan inilah hasil akhir dari halaman kategori kami Langkah 11. Tampilan TopikKueri SQL pada langkah ini adalah yang rumit. Bagian PHP adalah semua yang pernah Anda lihat sebelumnya. Mari kita lihat kueri. Yang pertama mengambil informasi dasar tentang topik ini 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;5 Informasi ini ditampilkan di head table yang akan kita gunakan untuk menampilkan semua data. Selanjutnya, kami mengambil semua posting di topik ini dari database. Permintaan berikut memberi kita apa yang kita butuhkan 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;6 Kali ini, kami menginginkan informasi dari tabel pengguna dan posting - jadi kami menggunakan LEFT JOIN lagi. Syaratnya adalah. Id pengguna harus sama dengan kolom post_by. Dengan cara ini kita bisa menampilkan username dari user yang membalas di setiap postingan Tampilan topik terakhir terlihat seperti ini Langkah 12. Menambahkan BalasanMari kita buat bagian terakhir dari forum ini, kemungkinan untuk menambahkan balasan. Kita akan mulai dengan membuat form 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;7 Kode balasan. Php lengkapnya seperti ini. 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;8 Komentar dalam kode cukup merinci apa yang terjadi. Kami memeriksa pengguna yang sebenarnya dan kemudian memasukkan posting ke dalam database MemecahkanSetelah Anda menyelesaikan tutorial ini, Anda akan memiliki pemahaman yang lebih baik tentang apa yang diperlukan untuk membangun sebuah forum. Saya harap penjelasan saya cukup jelas. Terima kasih lagi untuk membaca Langkah demi langkah untuk membuat formulir login HTML?Cara Membuat Formulir Login yang Menarik dengan HTML . Deklarasikan Dokumen HTML Anda. Sekarang, buka file html formulir login Anda. . 2. Buat Header Halaman Formulir Login. . 3. Berikan Judul Halaman Form Login. . 3. Tempel File CSS. . 4. Buat Badan Formulir Masuk. . Buat Tata Letak Formulir Login. . 6. Beri Judul pada Form Login. . 7. Buat Kotak Formulir Login Langkah-langkah Membuat Website dengan HTML?Cara Membuat Halaman Web Sederhana dengan HTML . Buka editor teks. . Setel jenis dokumen ke HTML. . Tambahkan tab judul ke halaman web Anda. . Ketuk di bawah tanda "Kepala" tertutup. . Selanjutnya buat judul halaman. . Tambahkan judul tambahan jika Anda mau. . Buatlah sebuah paragraf. . Mengubah warna teks Bagaimana cara kerja HTML jelaskan secara singkat?HTML (HyperText Markup Language) adalah bahasa yang menggunakan tanda (tag) tertentu untuk mengekspresikan kode-kode yang harus ditafsirkan oleh browser agar halaman dapat ditampilkan dalam benar.
Sebutkan urutan apa saja dalam membuat form di HTML?Tag dasar yang akan kita gunakan untuk membuat formulir pada HTML terdapat tag form , input, textarea, select dan option. |