HTML-site forum


 · Forums · Reactie · Statistieken · Registreren · Zoeken · Regels · Tips · FAQ
HTML-site forum / Tutorials / [PHP] Simpel forum
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

Reactie

Tekst vet maken  Tekst cursief maken  Tekst onderstrepen  Afbeelding invoegen  Insert YouTube video  Link invoegen  html code invoeren  css code invoeren  php code invoeren   javascript code invoeren  Uitschakelen *Wat is dat?


» Naam  » Wachtwoord 
 Alleen geregistreerde bezoekers kunnen hier een bericht plaatsen. Je kunt inloggen of je hier registreren.

 



Dit forum is gebaseerd op miniBB © 2001-2010

cursus html


Sponsor: BlueYellow

Sitemap