Forum i PHP/MySQL

Tags:    php
Skrevet af Bruger #285 @ 26.10.2002
Forum i php med mySQL som back-end


Introduktion

Denne artikel vil handle om, hvordan man lavet et forum med mySQL som back-end i, som katagorien hentyder, php.

Da min filosofi, når man skal lære noget, er, at det hele ikke skal serveres på et sølvfad, kommer der i denne artikel ikke 15 siders blandet html og php-kode. Der vil selvfølgelig komme noget php-kode, bare rolig…

Dette forum vil ikke indeholde forskellige kategorier, da jeg mener, at det udmærket kan udbygges senere, hvis der er behov for det



Analyse af database

Et værktøj, der er rigtig godt at bruge, når man programmerer er "analyse af problemstilling" (ja, det lyder mega-fint, men det virker!). Grunden til, at man skal analysere sit problem, inden man går i gang med det er, at der måske lige pludselig dukker uventede ting op.

I et forum skal der være threads (på dansk er det vel "tråde"). Altså en sammenhørende kæde af indlæg, der besvarer "masteren". Vi har nu allerede også fundet ud af, at der er noget, der hedder master og svar (bare forslag til, hvad de kunne kaldes). Der skal være noget, der skal adskille dem. I dette forum bestemmer jeg, at masteren skal have et emne – dvs. trådens navn – det skal svarene ikke. Alle indlæggene kan sagtens være i en mySQL tabel, da vi har fundet ud af, hvoordan vi skal afgøre, om det er en master eller et svar (om der er et emne). Felterne af tabellen skal altså være:

Feltnavn, type
id, int
email, text
homepage, text
emne, text
tekst, text,
thread, int
tid, int

Jeg vil ikke forklare, hvordan du oprettet dem, eller i det hele taget noget om, hvordan typerne er mm.



Analyse af interface

Nu har vi fundet ud af, hvordan vores tabel i databasen skal se ud. Nu mangler vi selve "fronten" til brugeren. Altså interfacet, hvor brugerne på hjemmesiden kan læse indlæg, tilføje osv. Vi skal nu finde ud af, hvilke sider, vi skal bruge (antallet kommer selvfølgelig an på den ønskede funktionalitet, men I kan selv udvide den bagefter). Mit forslag er, at der i starten er følgende sider:

oversigt.php (giver en oversigt over hvilke tråde, der er i dette forum)
new.php (på denne side oprettes en ny tråd – dvs. man indtaster oplysningerne)
add_thread.php (her tilføjes dataene til databasen fra den nyoprettede tråd)
add_comment.php (her tilføjes dataene til databasen fra det nyoprettede indlæg til en tråd)
view.php (her vises tråden og alle dens indlæg)

Ud af disse er det ikke alle sammen, at brugeren opdager. Følgende sider har følgende funktionalitet: dataene bliver tilføjet databasen, hvorefter man stilles videre til side – dvs. der overhovedet ikke er andet end php-kode på denne side. Det drejer sig om følgende sider:
add_thread.php
add_comment.php

Begge stiller brugeren videre til view.php.



Koden til "ny tråd"

Den første side er new.php den indeholder udelukkende html-koder. Her skal være nogle indtastningsfelter i en form. Formes action skal være add_thread.php. Felterne på denne side skal være:
navn
e-mail
hjemmeside
emne
tekst

Som sagt skal formens action være add_thread.php. Koden til add_thread.php kan se sådan ud (man kan jo selv bestemme, hvordan det skal være – men her er et forslag).

<?
//det nødvendige connect til databasen og valg af denne

if ($_POST["navn"] == "" || $_POST["emne"] == "" || $_POST["tekst"] == "")<br>
{
header("Location: new.php?status=fejl");
exit;
}


$max = 0;

$query = mysql_query("SELECT * FROM forum ORDER BY id");
while($r = mysql_fetch_array($query))
{<br>
$thread = $r["thread"];

  if ($thread > $max)
    $max = $thread;
}

$max = $max + 1;


$navn	= $_POST["navn"];
$emai	= $_POST["email"];
$homepage	= $_POST["homepage"];
$emne	= $_POST["emne"];
$tekst	= $_POST["tekst"];
$tid 	= time();
<br>
mysql_query("INSERT INTO forum (navn, email, homepage, emne, tekst, tid, thread) values
('$navn', '$email', '$homepage', '$emne', '$tekst', '$tid', '$max')"); header("Location: view.php?thread=$max"); ?>

Som der kan ses, har jeg i starten lavet sådan, at man stilles tilbage til new.php med en GET-variabel. I kan jo selv tænke over, hvad den skal bruges til :) og om I overhovedet ønsker den…



Koden til view.php


Det sidste, jeg vil have med i denne artikel er koden til view.php. Denne sides funktion er at vise en tråd og alle de tilhørende indlæg. Det gør den med en GET-variabel, der fortæller hvilket id "masteren" har. Det er kun forespørgslerne, jeg tager med, for resten er ganske alm. behandling af mySQL-output.

Koden til visning af "masteren":
$thread 		= $_GET["thread"];
$query = mysql_query("SELECT * FROM forum WHERE thread = '$thread' AND emne != ''");

Koden til visning af indlæggene:
$query = mysql_query("SELECT * FROM forum WHERE thread = '$thread' AND emne = ''");

Som beskrevet i starten skal forskellen på de to slags ("master" og "kommentarer") være, at i den ene, er der sat et emne – det er der ikke i den anden. Husk det, når du skal lave siden til tilføjelse af svar/kommentarer til masteren (altså, at man ikke skal kunne skrive et emne).



Afsluttende bemærkning

I denne artikel har du lært at lave et forum. Hvis du føler, at der var for lidt kode heri, så har jeg måske ramt lidt rigtigt. Jeg ville i den artikel prøve at give tankegangen til, hvordan man laver et forum. Jeg ønsker ikke at lave en artikel, der henvender sig til "copy’n’paste"- folket. Dermed ikke sagt, at du er fra sådan en gruppe, for jeg mener stadig, at man lærer bedste ved selv at løse nogle problemer (som der med 99% sikkerhed kommer i forbindelse med at lave et forum udfra min artikel). Jeg laver måske en 2’er, der fortæller, hvordan man gør sådan, at der er flere katagorier.



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (23)

User
Bruger #1454 @ 12.01.03 16:48
Din mening er god med denne artikkel. MEN, jeg har ikke fået noget ud af den. jeg fik det ikke til at virke.. det hjælper meget når man har noget at sammen ligne sin kode med. Det er ret irriterende at du ikke har givet al koden.
User
Bruger #285 @ 30.03.03 15:36
Skal man ikke lære at løse de problemer, man støder på under programmeringen? :)

Det nytter jo intet, at man ikke er i stand til at analysere sin kode og finde fejl - det er en af de vigtigste ting, da det er sjældent, at koden virker 1. gang...
User
Bruger #3667 @ 27.07.03 00:31
Enig i at meningen er god, men det hjælper ikke med den der smartass holdning at vi bare skal lære det ;)

User
Bruger #4130 @ 17.09.03 16:24
[Cornuto

Din mening er god med denne artikkel. MEN, jeg har ikke fået noget ud af den. jeg fik det ikke til at virke.. det hjælper meget når man har noget at sammen ligne sin kode med. Det er ret irriterende at du ikke har givet al koden. ]

Jeg er enig!!!!

//NightWolf

User
Bruger #4391 @ 08.10.03 15:05
Den ku du altså godt ha gjort lidt mere ud af, må jeg sige..
User
Bruger #4623 @ 23.10.03 00:45
Jeg sys' artiklen er skide god! Man lærer intet ved at få hele koden og så "skrive den af".

Peter
User
Bruger #4842 @ 06.03.04 16:50
RIGTIG GOD ARTIKEL!!!
Hjalp mig enormt meget :D
User
Bruger #5870 @ 25.05.04 19:22
Kunne godt have en "edit" funktion så admin eller andre "priviligrede" kunne rette siden, fik ellers lidt af den, det er fint nok at skippe hvordan man opretter tabellerne i SQL og Connect funtionen.

GJ!
User
Bruger #7500 @ 10.04.05 16:54
Jeg er temelig ny i dette PHP, om med denne artikel to det mig kun 4 timer at få den til at virke. Hatten af sådan skal det gøres :)
Jeg glædre mig til at læse flere af dine artikler.
mvh. Thorbjørn
User
Bruger #7553 @ 29.05.05 17:39
Jeg har det sådan at alt det jeg har lært har jeg gjort med vopy og past metoden. Først copy og paster jeg alt og bagefter analysere jeg hvad der "holder" den.
User
Bruger #7553 @ 29.05.05 17:40
Jeg lavede faktisk selv den der SQL fil. Tog mig 2 min.
User
Bruger #7771 @ 20.06.05 19:50
sys det er rigtig nok men det er tit lige så godt hvis der er en go forklaring med til hvad hver enkelt del af koden gør...
User
Bruger #8025 @ 03.09.05 17:26
Møget virker jo ikke! Træls vi ikke kan få koden, og så selv analysere den bagefter! Det kunne være 1000 gange bedre..
User
Bruger #8025 @ 03.09.05 17:26
Møget virker jo ikke! Træls vi ikke kan få koden, og så selv analysere den bagefter! Det kunne være 1000 gange bedre..
User
Bruger #7603 @ 23.09.05 21:18
Givr den et 4 tal, fordi den forklarer hvorn tingende kan gøres, og nej der ingen smartass over det.... hvis du får det hele leveret på sølvfad, vil du ikk lærer en skid!! :P
User
Bruger #8199 @ 15.10.05 19:38
Kommer der ikke en tooer der beskriver hvordan man laver kategorier ? :D
User
Bruger #4734 @ 18.01.06 21:34
Kan godt ske man ikke skal have alt på et sølvfad, men lidt mere dybte-gående måtte den gerne have været. Jeg synes du skriver den på et niveau, hvor folk der forstår den, nok godt kunne have lavet det selv, og folk der ikke selv ville kunne, nok også godt kunne have brugt noget mere forklaring.. Ellers god artikkel
User
Bruger #10039 @ 28.05.06 21:44
Hej
En god artikel forsæt med det

L
User
Bruger #10039 @ 28.05.06 21:49
Hej
En god artikel forsæt med det

L
User
Bruger #11860 @ 06.06.07 09:48
Det er jo let at ændre koden. Og lave sin admin session i det. .. Det vil nok tage 3-4 timer. Så skulle det være oppe.
Har dog lavet min egen i nat. :)
User
Bruger #11860 @ 06.06.07 09:49
Det er jo let at ændre koden. Og lave sin admin session i det. .. Det vil nok tage 3-4 timer. Så skulle det være oppe.
Har dog lavet min egen i nat. :)

Mangler en ting. Så den viser hvor mange gange en tråd er blivet set..
User
Bruger #5978 @ 20.06.07 18:48
fint at man selv skal tænke, men jeg får ihvertfald fejl i de kodestykker der er med, gider ikke også til at sidde og rette fejl i de småting man så får med
User
Bruger #10379 @ 16.04.08 17:45
i koden til add_thread.php har du glemt et "l" i variablen $emai :)
Du skal være logget ind for at skrive en kommentar.
t