| Schrijver |
Bericht |
myown Forum Lid
366 posts |
# Geplaatst: 4 Nov 2009 12:16 · Aangepast door: myown
Dit is nog niet af, dit is nog maar een test om te kijken hoe het er hier op het forum uitziet !
[PHP] Simpel forum tutorial:
----------------------------
Wat Hebben we nodig
// Mysql database met volgende tabellen:
1. Een tabel gebruiksers ( deze hoor je al te hebben ).
2. Een tabel forum_onderwerpen
3. Een tabel forum_reacties
// Pagina's:
1. forum.php ( een overzicht van de alle categorien )
Ja, maar 1 pagina, we werken met GET.
// Include's:
1. config.php
2. forum_lijst.php
3. forum_onderwerpen_lijst.php
4. forum_bericht.php
Hoe zien deze tabellen eruit
// Tabel gebruikers
Hierin is alleen het veld gebruikersnaam belangrijk
// Tabel forum_onderwerpen
forum_id | int | 11
forum_titel | varchar | 256 ( de titel van het onderwerp )
forum_bericht | varchar | 1000 ( het 1ste bericht )
forum_categorie | varchar | 30 ( met dit veld kunnen we ons forum opdelen in categorien )
forum_starter | varchar | 30 ( degene die het onderwerp begonnen is )
forum_toegevoegd_op | datetime ( de datum waarop het onderwerp begonnen is )
forum_bekeken | int | 11 ( aantal keer dat dit onderwerp bekeken is )
// Tabel forum_reacties
reactie_id | int | 11
reactie_forum_id | int | 11 ( link met het onderwerp )
reactie_bericht | varchar | 1000 ( bericht )
reactie_toegevoegd_door | varchar | 30 ( de gebruikersnaam van de persoon die gereageerd heeft )
reactie_toegevoegd_op | datetime ( de datum waarop de reactie toegevoegd is )
Pagina's
// forum.php
php code
if( isset( $_GET['categorie'] ) ) // Is er een categorie aangeklikt
{
// Er is een categorie aangeklikt, we laten de onderwerpen van die categorie zien.
include('forum_onderwerpen_lijst.php');
}
else
{
// Er is geen categorie aangeklikt, laat de beginpagina zien
include('forum_lijst.php');
}
Include's
// forum_lijst.php
html code
<table>
<!-- Hoofding -->
<tr>
<td style="width: 45%; border: 0px;"> Forum </td> <!-- dit is de categorie -->
<td style="width: 15%; border: 0px;"> Onderwerpen </td>
<td style="width: 15%; border: 0px;"> Berichten </td>
<td style="width: 25%; border: 0px;"> Laatste post </td>
</tr>
<!-- Indeling 1 :: Welkom -->
<tr>
<td colspan="4"> Welkom </td>
</tr>
<!-- Categorie :: Welkom -->
<?php
// Categorie bepalen
$categorie = "Welkom";
// Aantal onderwerpen
$query = "SELECT * FROM forum_onderwerpen WHERE forum_categorie LIKE '" . $categorie . "'";
$exec = mysql_query( $query );
$aantal_onderwerpen = mysql_num_rows( $exec );
// Aantal reacties
$query = "SELECT * FROM forum_reacties WHERE reactie_categorie LIKE '" . $categorie . "'";
$exec = mysql_query( $query );
$aantal_reacties = mysql_num_rows( $exec );
// Laatste post
$query = "SELECT *, date_format( reactie_toegevoegd_op, '%a %e %b - %H:%iu' ) as datum
FROM forum_reacties
WHERE reactie_categorie LIKE '" . $categorie . "'
ORDER BY reactie_toegevoegd_op DESC LIMIT 0, 1";
$exec = mysql_query( $query ) or die( mysql_error() );
?>
<tr>
<td style="width: 45%;"> <a href="?categorie=Welkom">Welkom</a> </td>
<td style="width: 15%;"> <?php echo $aantal_onderwerpen; ?> </td>
<td style="width: 15%;"> <?php echo $aantal_reacties; ?> </td>
<td style="width: 25%">
<?php
while( $record = mysql_fetch_object( $exec ) )
{
$datum = $record->datum;
$gebruiker = $record->reactie_toegevoegd_door;
echo $gebruiker . "<br />" . $datum;
}
?>
</td>
</tr>
<!-- Categorie :: Stel jezelf voor -->
<?php
// Categorie bepalen
$categorie = "Stel jezelf voor";
// Aantal onderwerpen
$query = "SELECT * FROM forum_onderwerpen WHERE forum_categorie LIKE '" . $categorie . "'";
$exec = mysql_query( $query );
$aantal_onderwerpen = mysql_num_rows( $exec );
// Aantal reacties
$query = "SELECT * FROM forum_reacties WHERE reactie_categorie LIKE '" . $categorie . "'";
$exec = mysql_query( $query );
$aantal_reacties = mysql_num_rows( $exec );
// Laatste post
$query = "SELECT *, date_format( reactie_toegevoegd_op, '%a %e %b - %H:%iu' ) as datum
FROM forum_reacties
WHERE reactie_categorie LIKE '" . $categorie . "'
ORDER BY reactie_toegevoegd_op DESC LIMIT 0, 1";
$exec = mysql_query( $query ) or die( mysql_error() );
?>
<tr>
<td style="width: 45%;"> <a href="?categorie=Stel jezelf voor">Stel jezelf voor</a> </td>
<td style="width: 15%;"> <?php echo $aantal_onderwerpen; ?> </td>
<td style="width: 15%;"> <?php echo $aantal_reacties; ?> </td>
<td style="width: 25%">
<?php
while( $record = mysql_fetch_object( $exec ) )
{
$datum = $record->datum;
$gebruiker = $record->reactie_toegevoegd_door;
echo $gebruiker . "<br />" . $datum;
}
?>
</td>
</tr>
<!-- Indeling 2 :: tutorials -->
<tr>
<td colspan="4"> Tutorials </td>
</tr>
<!-- Categorie :: tutorials -->
<?php
// Categorie bepalen
$categorie = "Tutorials";
// Aantal onderwerpen
$query = "SELECT * FROM forum_onderwerpen WHERE forum_categorie LIKE '" . $categorie . "'";
$exec = mysql_query( $query );
$aantal_onderwerpen = mysql_num_rows( $exec );
// Aantal reacties
$query = "SELECT * FROM forum_reacties WHERE reactie_categorie LIKE '" . $categorie . "'";
$exec = mysql_query( $query );
$aantal_reacties = mysql_num_rows( $exec );
// Laatste post
$query = "SELECT *, date_format( reactie_toegevoegd_op, '%a %e %b - %H:%iu' ) as datum
FROM forum_reacties
WHERE reactie_categorie LIKE '" . $categorie . "'
ORDER BY reactie_toegevoegd_op DESC LIMIT 0, 1";
$exec = mysql_query( $query ) or die( mysql_error() );
?>
<tr>
<td style="width: 45%;"> <a href="?categorie=Tutorials">Tutorials</a> </td>
<td style="width: 15%;"> <?php echo $aantal_onderwerpen; ?> </td>
<td style="width: 15%;"> <?php echo $aantal_reacties; ?> </td>
<td style="width: 25%">
<?php
while( $record = mysql_fetch_object( $exec ) )
{
$datum = $record->datum;
$gebruiker = $record->reactie_toegevoegd_door;
echo $gebruiker . "<br />" . $datum;
}
?>
</td>
</tr>
</table>
Zoals je ziet hebben we links aangemaakt met ?categorie=decategorie, deze gaan we nu gebruiken.
Vervolg in reactie 3
|
| |
|
DNA Forum Lid
7709 posts |
# Geplaatst: 4 Nov 2009 13:12
dit wordt een groot script hoor :p
Maare, misschien is het ook makkelijk om de SQL te posten. Hoeven mensen het niet zelf aan te maken.
|
myown Forum Lid
366 posts |
# Geplaatst: 4 Nov 2009 13:35 · Aangepast door: myown
Goed idee, maar dit is nog maar het begin he xD, Damn het graakt niet in 1 bericht
|
myown Forum Lid
366 posts |
# Geplaatst: 4 Nov 2009 13:55 · Aangepast door: myown
// forum_onderwerpen_lijst
Eerst testen we of er geen bericht is aangeklikt.
Dit doen we zo:
php code
if( isset( $_GET['bericht'] ) )
{
// Er is een bericht aangeklikt, link door.
include('forum_bericht.php');
}
else
{
// Er is geen bericht aangeklikt, laat alle onderwerpen van de gekozen categorie zien.
?>
<table>
<tr>
<td style="width: 40%; border: 0px;"> Titel </td>
<td style="width: 15%; border: 0px;"> Antwoorden </td>
<td style="width: 15%; border: 0px;"> Bekeken </td>
<td style="width: 30%; border: 0px;"> Laatste post </td>
</tr>
</table>
<?php
// Gekozen categorie declareren.
$categorie = $_GET['categorie'];
$query = "SELECT * FROM forum_onderwerpen
WHERE forum_categorie LIKE '" . $ categorie . "'";
$exec = mysql_query( $query );
echo '<table>';
while( $record = mysql_fetch_object( $exec ) )
{
$id = $record->forum_id;
$titel = $record->forum_titel;
$starter = $record->forum_starter;
$bekeken = $record->forum_bekeken;
// Aantal antwoorden
$query = "SELECT * FROM forum_reacties
WHERE forum_id LIKE '" . $id . "'";
$aantal_antwoorden = mysql_num_rows( mysql_query( $query ) );
// Laatste post
$laatste_post = "SELECT *, date_format( reactie_toegevoegd_op, '%a %e %b - %H:%iu' ) as datum
FROM forum_reacties WHERE reactie_forum_id LIKE '" . $id ."'
ORDER BY reactie_toegevoegd_op DESC LIMIT 0, 1";
$laatste_post = mysql_query( $laatste_post ) or die( mysql_error() );
?>
<tr>
<td style="width: 40%; border: 0px;">
<a href="forum.php?categorie=<?php echo $categorie; ?>&bericht=<?php echo $id; ?>">
<?php echo $titel; ?>
</a>
</td>
<td style="width: 15%; border: 0px;"> <?php echo $aantal_antwoorden; ?> </td>
<td style="width: 15%; border: 0px;"> <?php echo $bekeken; ?> </td>
<td style="width: 30%; border: 0px;">
<?php
while( $record = mysql_fetch_object( $laatste_post ) )
{
$datum = $record->datum;
$gebruiker = $record->reactie_toegevoegd_door;
echo $gebruiker . "<br />" . $datum;
}
?>
</td>
</tr>
<?php
}
echo '</table>';
}
Ook hier hebben we weer een link gemaakt, &bericht=<?php echo $id; ?>, als hierop geklikt is laten we het bericht met het meegegeven id zien.
Dit doen we zo:
php code
<?php
// Bekeken updaten.
// ----------------
$query = "UPDATE forum_onderwerpen SET forum_bekeken = forum_bekeken + 1 WHERE forum_id LIKE '" . $_GET['bericht'] . "'";
mysql_query( $query );
// Gegevens uit de tabel halen.
// ----------------------------
$query = "SELECT * , date_format( forum_toegevoegd_op, '%a %e %b - %H:%iu' ) as datum
FROM forum_onderwerpen WHERE forum_id LIKE '" . $_GET['bericht'] . "'";
$exec = mysql_query( $query );
while( $record = mysql_fetch_object( $exec ) )
{
$titel = $record->forum_titel;
$starter = $record->forum_starter;
$bericht = nl2br($record->forum_bericht);
$datum = $record->datum;
?>
<table>
<tr>
<td style="width: 30%; border: 0px;"> Schrijver </td>
<td style="width: 70%; border: 0px;"> Bericht </td>
</tr>
</table>
<table class="forum">
<tr>
<td style="width: 30%; text-align: left; vertical-align: top; border: 0px;">
<?php echo $starter; ?> <br>
</td>
<td style="width: 70%; text-align: left; vertical-align: top;" rowspan="2">
<span style="text-decoration: underline; margin-bottom: 10px;"> <?php echo $datum; ?> </span><br>
<?php echo $bericht; ?>
</td>
</tr>
<tr>
<td style="text-align: left; width: 30%; vertical-align: bottom;">
<span style="font-size: 40px;"> # 1 </span>
</td>
</tr>
</table>
<?php
}
/* ----------- */
/* Reactie's */
/* ----------- */
// Gegevens uit de tabel halen.
// ----------------------------
$query = "SELECT * , date_format( reactie_toegevoegd_op, '%a %e %b - %H:%iu' ) as datum
FROM forum_reacties WHERE reactie_forum_id LIKE '" . $_GET['bericht'] . "' ORDER BY reactie_toegevoegd_op";
$exec = mysql_query( $query );
while( $record = mysql_fetch_object( $exec ) )
{
$reactie_id = $record->reactie_id;
$poster = $record->reactie_toegevoegd_door;
$reactie_nummer = $record->reactie_nummer;
$bericht = nl2br( $record->reactie_bericht );
$datum = $record->datum;
?>
<table class="forum">
<tr>
<td style="width: 30%; text-align: left; vertical-align: top; border: 0px;">
<?php echo $poster; ?> <br><br>
</td>
<td style="width: 70%; text-align: left; vertical-align: top;" rowspan="2">
<span style="text-decoration: underline; margin-bottom: 10px;"> <?php echo $datum; ?> </span><br>
<?php echo $bericht; ?>
</td>
</tr>
<tr>
<td style="text-align: left; width: 30%; vertical-align: bottom;">
<span style="font-size: 40px;"> # <?php echo $reactie_nummer + 1; ?> </span>
</td>
</tr>
</table>
<?php
}
?>
Zo, dit was het voor even, de reactieknop en nieuw bericht knop zal ik zeer binnekort toevoegen, maar heb nu even geen zin meer, hopelijk heb je er wat aan.
Schiet me niet af als het niet zo goed is, ik kan pas sinds 2 maand php en dit was mijn eerste tutorial.
Myown
|
DNA Forum Lid
7709 posts |
# Geplaatst: 4 Nov 2009 15:51
je weet wel dat hoe jij het nu doet, het echt ontzettend moeilijk is om iets te veranderen of problemen op te lossen.
Daarnaast is het echt nog moeilijk om het design aan te passen...
Je hebt nu alles op 1 pagina. Maak gebruik van de MVC pattern.
Wat betekend dus dat je alles gescheiden houdt. Model, View, Controller.
|
myown Forum Lid
366 posts |
# Geplaatst: 4 Nov 2009 15:59
Ik zei het al, kben een beginner xD snap dus niet veel van wat jij net zei.
|
Kwintendr Forum Lid
47 posts |
# Geplaatst: 15 Jul 2010 17:05
Is dit nu af?
|
Anywhy Forum Lid
1459 posts |
# Geplaatst: 15 Jul 2010 17:44
Quoting: Kwintendr Is dit nu af?
Je kan er wel mee aan de slag ;)
Er moeten denk ik nog wat verbeteringen/toevoegingen komen...
|
jwvos Forum Lid
1391 posts |
# Geplaatst: 15 Jul 2010 18:37
Allereerst, als je zelf zegt dat je een beginner bent moet je zeker geen Forum tutorial gaan maken.. zoals DNA al zei is het erg on overzichtelijk en niet gestructureerd, ook zitten er erge lekken in het script, zie bijvoorbeeld dit stukje:
php code$categorie = $_GET['categorie'];
$query = "SELECT * FROM forum_onderwerpen
WHERE forum_categorie LIKE '" . $ categorie . "'";
In dat stukje moet de variable $categorie uiteraard gefilterd worden met mysql_real_escape_string() of iets dergelijks.
|
Waldio Forum Lid
880 posts |
# Geplaatst: 15 Jul 2010 19:15
jwvos, gaan we nu een beginner van een jaar geleden uitleggen dat hij het niet moet doen? :p
|