Avatar billede Slettet bruger
09. maj 2006 - 22:21 Der er 10 kommentarer

At lave et forum

Hej..
Jeg ku godt tænke mig at "lære" hvordan man egentligt skal sættet et forum op, altså kode det for bunden..
En der måske ku komme med en lille hurtig toturials eller noget?
Jeg har ikke lavet så meget i php i nu, men sidder og udvikler videre på et community som går rigtig godt, og har lige fået kodet et nyheds system, (med lidt hjælp) og det virker..
Avatar billede the_email Nybegynder
09. maj 2006 - 22:28 #1
Jeg skrev et forum forleden som dog stadigvæk mangler lidt detaljer. Du kan se det her: http://gaming.nal-net.dk Klik på Nyheder-knappen i midten (der er tre)
Jeg har bygget det op med tre tabeller. En som indholder de forskellige fora, som er i selve forummet. En anden som indeholder tråde/emner i et bestemt. Hver række i tabellen er en ny tråd, som bl.a. indholder et unikt id og et forumid, således at når man klikker sig ind på et bestemt forum, vil man få alle tråde udskrevet med dette forumid.
Den trejde tabel indholder alle posts i diverse forum. Hver tråd har et unikt id, en tråd/emneid og et forumid, så når en bruger beder om at se en bestemt tråd, bliver alle posts med dette trådid udskrevet fra databasen.
Grunden til at jeg sætte forumid på posts, er kun for at kunne vise antal posts i et bestemt forum

Skriv hvis du har spørgsmål.

/TheEmail
Avatar billede Slettet bruger
09. maj 2006 - 22:31 #2
Ku jeg ikke få lov at se dine php koder?
Avatar billede the_email Nybegynder
10. maj 2006 - 17:02 #3
Jo, det kan du såmænd godt.
Du skal lige vide at det her er Version 0.001 :-) Det virker men der skal ryddes op i meget af det, og planen er at lave det til funktioner.

Første fil er forum.php
Den trækker de fora ud som er oprettet i databasen, og sætter dem "pænt" i en tabel.
Der laves også udtræk fra brugerdatabasen, til at vise hvilken bruger der har skrevet sidste post:
<?php
// Get connectioninfo for MySQL
include('/var/www/mysqlcon.php');

// Values for MySQL Tagwall
$mysqlhost=localhost;
$mysqldatabase=forum;
$mysqlforum=forums;
$mysqlthread=threads;
$mysqlposts=posts;

// Connect MySQL and choose database
mysql_connect("$mysqlhost", "$mysqluser", "$mysqlpass") or die ('MySQL-login error: ' . mysql_error());
mysql_select_db($mysqldatabase);
$queryforum = mysql_query("SELECT * FROM $mysqlforum ORDER BY id ASC") or die('MySQL-query error: ' . mysql_error());

while($row = mysql_fetch_array($queryforum)) {

// Number of threads
$querythread = mysql_query("SELECT * FROM $mysqlthread WHERE forumid=$row[id]") or die('MySQL-query error: ' . mysql_error());
$numberthreads = mysql_num_rows($querythread);

// Number of posts and last post
$queryposts = mysql_query("SELECT * FROM $mysqlposts WHERE forumid=$row[id] ORDER BY id DESC") or die('MySQL-query error: ' . mysql_error());
$lastpostrow = mysql_fetch_array($queryposts);
$numberposts = mysql_num_rows($queryposts);

// Get user from UserID
$user = $lastpostrow[userid];
mysql_select_db(nalgaming);
$queryuser = mysql_query("SELECT * FROM login WHERE id='$user'") or die('MySQL-query error: ' . mysql_error());
$rowuser = mysql_fetch_array($queryuser);
mysql_select_db($mysqldatabase);

$forum .= "
  <tr>
      <td><a href=\"./?page=thread&amp;forumid=$row[id]\"> $row[titleda] </a><br /><div style=\"font-size:10px;\"> $row[descriptda] </div>
  </td>
  <td align=\"center\">$numberthreads
  </td>
  <td align=\"center\">$numberposts
  </td>
  <td align=\"center\">$lastpostrow[date] $lastpostrow[time] <br /> <a href=\"./?page=account&amp;id=$rowuser[id]\">$rowuser[name]</a>
  </td>
  </tr>
";
}
echo "<table border=\"0\" cellspacing=\"1\" cellpadding=\"1\" style=\"width:98%;\">
  <tr>
      <td style=\"width:46%;\"> <b>Forum</b>
  </td>
  <td style=\"width:12%;\" align=\"center\"> Threads
  </td>
  <td style=\"width:12%;\" align=\"center\"> Posts
  </td>
  <td style=\"width:20%;\" align=\"center\">Last post
  </td>
  </tr>
";
echo $forum;
echo "</table><br />";
?>


Den næste er thread.php
Den henter forumid vha. $_GET['$id']; og henter de respektive threads ud

<?php
// Get connectioninfo for MySQL
include('/var/www/mysqlcon.php');

// Values for MySQL Tagwall
$mysqlhost=localhost;
$mysqldatabase=forum;
$mysqltable=threads;
$mysqlforumtable=forums;
$userdatabase=nalgaming;
$mysqltableuser=login;

// Values from adressbar
$forumid = $_GET['forumid'];
$forumid = intval($forumid);

// Connect MySQL and choose database
mysql_connect("$mysqlhost", "$mysqluser", "$mysqlpass") or die ('MySQL-login error: ' . mysql_error());
mysql_select_db($mysqldatabase);

// Get forumtitle from forumid
$titlequery = mysql_query("SELECT * FROM $mysqlforumtable WHERE id = $forumid");
$titlerow = mysql_fetch_array($titlequery);
$forumtitle = $titlerow[titleda];
$forumdescript = $titlerow[descriptda];

// Get thread
$query = mysql_query("SELECT * FROM $mysqltable WHERE forumid = $forumid ORDER BY id DESC") or die('MySQL-query error: ' . mysql_error());
while($row = mysql_fetch_array($query)) {

// Get user from UserID
$user = $row['userid'];
mysql_select_db($userdatabase);
$queryuser = mysql_query("SELECT * FROM $mysqltableuser WHERE id='$user'") or die('MySQL-query error: ' . mysql_error());
$rowuser = mysql_fetch_array($queryuser);

// Count posts
mysql_select_db($mysqldatabase);
$querycount = mysql_query("SELECT * FROM posts WHERE threadid = $row[id] ORDER BY id DESC") or die('MySQL-query error: ' . mysql_error());
$numberposts = mysql_num_rows($querycount);
$rowcount = mysql_fetch_array($querycount);


// Get user from UserID
$user = $rowcount[userid];
mysql_select_db($userdatabase);
$queryuser = mysql_query("SELECT * FROM $mysqltableuser WHERE id='$user'") or die('MySQL-query error: ' . mysql_error());
$rowcountuser = mysql_fetch_array($queryuser);



$thread .= "
<tr>
    <td>
    <a href=\"./?page=posts&amp;forumid=$forumid&amp;threadid=$row[id]\">$row[title]</a>
    </td>
    <td align=\"left\">
    <a href=\"./?page=account&amp;id=$rowuser[id]\">$rowuser[name]</a>
    </td>
    <td align=\"center\">
    $numberposts
    </td>
    <td align=\"center\">
    $rowcount[date] $rowcount[time] <br /> <a href=\"./?page=account&amp;id=$rowcountuser[id]\">$rowcountuser[name]</a>
    </td>
</tr>

";
}




echo "<table border=\"0\" cellspacing=\"1\" cellpadding=\"1\" style=\"width:98%;\">
    <tr>
        <td colspan=\"4\">
        <b>$forumtitle</b>
        </td>
    </tr>
    <tr>
        <td colspan=\"4\" style=\"font-size:10px;\">
        $forumdescript
        </td>
    </tr>
<tr>
    <td colspan=\"4\">
    <a href=\"./?page=newthread&amp;forumid=$forumid\">Ny tråd</a>
    </td>
</tr>
    <tr>
        <td>
        <b>Tråd</b>
        </td>
        <td style=\"width:100px;\">
        <b>Starter</b>
        </td>
        <td style=\"width:85px;\">
        <b>Antal posts</b>
        </td>
        <td style=\"width:125px;\">
        <b>Sidste post</b>
        </td>
    </tr>
";

echo $thread;
echo "</table><br />";
?>

For at oprette en ny tråd er der et link til newthread.php
<?php

// Get values from addressbar
$forumid = $_GET['forumid'];
$forumid = intval($forumid);
$newthread = "
        <tr>
            <td colspan=\"4\">
            Ny tråd
            <br />
            <form action=\"pages/forum/sendthread.php\" method=\"post\">
            Titel <br />
            <input type=\"text\" name=\"threadtitle\" value=\"\" style=\"font-size:10px;\" /> <br /> <br />
            Besked
            <div style=\"overflow:hidden;\" align=\"center\">
            <textarea cols=\"85\" rows=\"12\" name=\"message\"></textarea>
            <br />
            <input type=\"hidden\" name=\"return_page\" value=\"$_SERVER[PHP_SELF]\" />
            <input type=\"hidden\" name=\"user\" value=\"$_SESSION[id]\" />
            <input type=\"hidden\" name=\"forumid\" value=\"$forumid\" />
            <input type=\"submit\" value=\"Send\" style=\"font-size:10px; float:right;\" accesskey=\"s\" title=\"[alt+s]\" />
            </div>
            </form>
            </td>
        </tr>
";

echo "
    <table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" align=\"center\" style=\"width:98%;\">";

if(isset($_SESSION['user'])) {
echo $newthread;
} else {
echo "   
            <tr><td>Du skal være logget ind for at kunne oprette nye tråde i forummet </td></tr>";
}
echo "
    </table> <br />";
?>


Det indtastede i newthread.php sendes til sendthread.php
<?php

$userid = $_POST['user'];
$threadtitle = $_POST['threadtitle'];
$message = $_POST['message'];
$message = nl2br($message);
$forumid = $_POST['forumid'];
$date = "" . date(Y) . "-" . date(m) . "-" . date(d) . "";
$time =  "" . date(H) . ":" . date(i) . "";
$forumid = intval($forumid);


// Get connectioninfo for MySQL
include('/var/www/mysqlcon.php');

// Values for MySQL Tagwall
$mysqlhost = localhost;
$mysqldatabase = forum;
$mysqlthread = threads;
$mysqlposts = posts;

// If try post tag, cancel
if( ereg ("<", $threadtitle)){
unset($threadtitle);
}

if(isset($threadtitle)) {
// Connect MySQL and choose database
mysql_connect("$mysqlhost", "$mysqluser", "$mysqlpass") or die ('MySQL-login error: ' . mysql_error());
mysql_select_db($mysqldatabase);

mysql_query("INSERT INTO $mysqlthread (`forumid`, `title`, `date`, `time`, `userid`) VALUES ('$forumid', '$threadtitle', '$date', '$time', '$userid')") or die('MySQL-query error: ' . mysql_error());

// Get threadid
$threadquery = mysql_query("SELECT * FROM $mysqlthread ORDER BY id DESC")  or die('MySQL-query error: ' . mysql_error());
$rowthread = mysql_fetch_array($threadquery);
$threadid = $rowthread['id'];
mysql_query("INSERT INTO $mysqlposts (`threadid`, `forumid`, `message`, `date`, `time`,  `userid`) VALUES ('$threadid', '$forumid', '$message', '$date', '$time', '$userid')") or die('MySQL-query error: ' . mysql_error());

$redirect = "http://gaming.nal-net.dk/?page=posts&forumid=$forumid&threadid=$threadid";

header("Location: $redirect");
}
else
{
$redirect = "http://gaming.nal-net.dk/?page=thread&forumid=$forumid";

header("Location: $redirect");

}
?>

Så er der posts.php som viser selve tråden, med alle posts:
<?php
// Get connectioninfo for MySQL
include('/var/www/mysqlcon.php');

// Values for MySQL Tagwall
$mysqlhost=localhost;
$mysqldatabase=forum;
$mysqltable=posts;
$mysqlthreadtable=threads;
$userdatabase=nalgaming;
$mysqltableuser=login;

// Values from adressbar
$forumid = $_GET[forumid];
$threadid = $_GET['threadid'];
$forumid = intval($forumid);
$threadid = intval($threadid);

// Connect MySQL and choose database
mysql_connect("$mysqlhost", "$mysqluser", "$mysqlpass") or die ('MySQL-login error: ' . mysql_error());
mysql_select_db($mysqldatabase);


// Get threadname from table
$threadquery = mysql_query("SELECT * FROM $mysqlthreadtable WHERE id = $threadid ORDER BY id ASC") or die('MySQL-query error: ' . mysql_error());
$threadrow = mysql_fetch_array($threadquery);

// Get posts
$query = mysql_query("SELECT * FROM $mysqltable WHERE threadid = $threadid ORDER BY id ASC") or die('MySQL-query error: ' . mysql_error());
while($row = mysql_fetch_array($query)) {

// Get UserID
$user = $row['userid'];

// Antal posts bruger
$queryposts = mysql_query("SELECT * FROM $mysqltable WHERE userid='$user'") or die('MySQL-query error: ' . mysql_error());
$numberpostsuser = mysql_num_rows($queryposts);

// Antal threads bruger
$querythreads = mysql_query("SELECT * FROM $mysqlthreadtable WHERE userid='$user'") or die('MySQL-query error: ' . mysql_error());
$numberthreadsuser = mysql_num_rows($querythreads);

// Get user from UserID
$user = $row['userid'];
mysql_select_db($userdatabase);
$queryuser = mysql_query("SELECT * FROM $mysqltableuser WHERE id='$user'") or die('MySQL-query error: ' . mysql_error());
$rowuser = mysql_fetch_array($queryuser);
mysql_select_db($mysqldatabase);

$thread = "
<tr>
    <td colspan=\"2\" style=\"border-bottom: 1px dashed #555555;\">
    <div style=\"font-size:16px; font-weight:bold;\">$threadrow[title] </div>
    </td>
</tr>
";

// Check whether user has a picture
if(file_exists('/var/www/pics/users/' . $user . '.gif')) {
$userpic = '' . $user . '.gif';
$picturetitle = "" . $rowuser[name] . "'s billede";
} else {
$userpic = '0.gif';
$picturetitle = "Intet billede";
}

$posts .= "

<tr>
    <td colspan=\"2\" style=\"border-bottom: 1px dashed #555555; height: 25px; align:center; \">
    <div style=\"color:#333333; font-size:11px; \"> <a href=\"./?page=account&amp;id=$rowuser[id]\">$rowuser[name]</a> - $row[date] $row[time] </div>
    </td>
</tr>
<tr>
    <td style=\"width:100px; font-size:11px; background-repeat:repeat; vertical-align:top; border-right: 1px dashed #555555; border-bottom: 1px dashed #555555;\">

    <div style=\"width:100px; vertical-align:top;\">
    Antal posts: $numberpostsuser <br />
    Antal tråde: $numberthreadsuser <br /> &nbsp; <br />
    &nbsp;<a href=\"./pics/users/$userpic\" target=\"_BLANK\"><img src=\"./pics/users/$userpic\" style=\"width:90px; border: 0px;\" title=\"$picturetitle\" alt=\"$picturetitle\" /></a> <br /> &nbsp;    
    </div>
    </td>
    <td width=\"85%\" style=\"border-bottom: 1px dashed #555555; height:100; vertical-align:top;\">
    <div style=\"font-size:11px;\"> $row[message] <br /> &nbsp; </div>
    </td>
</tr>
";
}

$newpost = "

<tr>
    <td colspan=\"2\">
    <div style=\"overflow:hidden; \" align=\"center\">
    <br />
    <form action=\"pages/forum/sendpost.php\" method=\"post\">
    <textarea cols=\"80\" rows=\"12\" name=\"message\"></textarea>
    <br />
    <input type=\"hidden\" name=\"return_page\" value=\"$_SERVER[PHP_SELF]\" />
    <input type=\"hidden\" name=\"user\" value=\"$_SESSION[id]\" />
    <input type=\"hidden\" name=\"threadid\" value=\"$threadid\" />
    <input type=\"hidden\" name=\"forumid\" value=\"$forumid\" />
    <input type=\"submit\" value=\"Send\" style=\"font-size:10px; float:right;\" accesskey=\"s\" title=\"[alt+s]\" /> &nbsp;
    </form>
    </div>
    </td>
</tr>
";


echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" align=\"center\" style=\"width:98%;\">";
echo $thread;
echo $posts;

if(isset($_SESSION['user'])) {
echo $newpost;
} else {
echo "<tr><td colspan=\"2\"> <br /> Du skal være logget ind for at kunne poste i forummet </td></tr>";
}
echo "</table><br />";
?>

Og for at oprette en ny post i tråden, postes der til sendpost.php

<?php

$userid = $_POST['user'];
$message = $_POST['message'];
$message = nl2br($message);
$forumid = $_POST['forumid'];
$threadid = $_POST['threadid'];
$date = "" . date(Y) . "-" . date(m) . "-" . date(d) . "";
$time =  "" . date(H) . ":" . date(i) . "";
$forumid = intval($forumid);
$threadid = intval($threadid);

// Get connectioninfo for MySQL
include('/var/www/mysqlcon.php');

// Values for MySQL Tagwall
$mysqlhost = localhost;
$mysqldatabase = forum;
$mysqlposts = posts;

// Connect MySQL and choose database
mysql_connect("$mysqlhost", "$mysqluser", "$mysqlpass") or die ('MySQL-login error: ' . mysql_error());
mysql_select_db($mysqldatabase);

mysql_query("INSERT INTO $mysqlposts (`threadid`, `forumid`, `message`, `date`, `time`,  `userid`) VALUES ('$threadid', '$forumid', '$message', '$date', '$time', '$userid')") or die('MySQL-query error: ' . mysql_error());

$redirect = "http://gaming.nal-net.dk/?page=posts&forumid=$forumid&threadid=$threadid";

header("Location: $redirect");

?>



Som du kan se er systemet integreret med min loginsystem, men enten kan du skrive et lille loginsystem, eller også kan du gå ind og fjerne brugertjek helt.

Som sagt er det en noget rodet og ikke optimeret kode, men den kan måske lede dig på vej.

/TheEmail
Avatar billede Slettet bruger
10. maj 2006 - 17:21 #4
jo tak..
Avatar billede the_email Nybegynder
10. maj 2006 - 18:17 #5
Skal lige huske at sige at jeg har smidt user og pass til mysql'en i mysqlcon.php.
Men den havde du nok regnet ud ;-)
Avatar billede Slettet bruger
10. maj 2006 - 18:41 #6
jah...
Men forstår ikke så meget af den..
Men vis det er dig selv der har lavet dette, ku du måske så ikke lave en nem taturials til mig?
Du skal nok få de points du vil have..!
Avatar billede the_email Nybegynder
10. maj 2006 - 20:57 #7
Lave en touturial til det tager sgu for lang tid. Det gider jeg ikke bare for point.
Men hvis du har fundet et løsning på databasestruktur, er resten vel temlig pice of cake?

/TheEmail
Avatar billede Slettet bruger
10. maj 2006 - 21:10 #8
Problemet er at jeg godt vil lære lidt af det..:P
Avatar billede the_email Nybegynder
10. maj 2006 - 22:27 #9
Ja, men du lærer da langt mere ved selv at skrive det frem for at jeg laver en toturial.
Prøv først at finde ud af hvordan du vil strukturer din database, så vil jeg gerne hjælpe dig på vej.

/TheEmail
Avatar billede Slettet bruger
11. maj 2006 - 13:00 #10
okey..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester