Hoi,

Ik ben aan het oefenen met php. En heb een doel vastgesteld: Deze is namelijk om een forum te maken. Ik denk dat als ik een forum kan maken, dat ik dan php wel aardig onder de knie heb. Goed idee?

Mijn volgende vraag: Ik heb een klein forumpje waar het enige wat php is, dat je iets kan posten en lezen. Dus hij post in een sql db om berichten te kunnen posten, en hij select van de db om posts te laten zien. Verder is alles html. Kortom: dit moet allemaal ge'php't worden. Althans, dat is de bedoeling van een forum denk ik?

Ik heb met html een tabel gemaakt op de index zegmaar, met onderwerpen. Op dit moment natuurlijk 1. Maargoed dat is html. Is het de bedoeling dat elke keer dat iemand een nieuw topic aanmaakt, dat er dan een nieuwe php pagina word aangemaakt voor deze topic? En hoe doe ik dat precies?

Dit is een voorbeeldje van 1 topic in ieder geval:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

	<title>Forum J.Kraakman</title>
	<link rel="stylesheet" type="text/css" href="layout.css" />

</head>

<body>

<div id="forum">


		<?php
		include("db.php");

		mysql_select_db("my_db", $con);

		$result = mysql_query("SELECT * FROM messages");

		while($row = mysql_fetch_assoc($result))
			{
			echo '<div id="message_user">' . nl2br($row['nickname']) . '</div>';
			echo '<div id="message">' . nl2br($row['message']) . '</div>';
			}

		mysql_close($con);
		?>



		<form action="post.php" method="post">
Naam:		<input type="text" name="nickname" /><br /><br />
 		<input type="hidden" name="message" />
				<label for="reply">Reply:</label>
				<textarea rows="12" cols="55" id="reply" name="message"></textarea>
			<input type="submit" value="Send Reply" />
		</form>

<br />

<a href="http://localhost/W3Schools/Forum/index.php>Terug naar de index.</a>

<br />
<br />


</div>

</body>
</html>
Je bouwt een soort van template in HTML, waarin je berichten worden weergegeven.

Vervolgens bepaal je aan de hand van een ID o.i.d. in de $_GET welk bericht moet worden weergegeven..

Je hebt bij een forum 2 verschillende 'views':

Thread overzicht (overzicht van alle threads)
Thread details (overzicht van berichten binnen een thread)

Je zou dan ook een DB kunnen opzetten die hierop gericht is..

Thread
- id
- title
- author
- date_created
- ...

Messages
- id
- Thread
- author
- message
- date_created (voor sorteervolgorde, en om te kunnen achterhalen wie wanneer de laatste post heeft geplaatst)
- ...

Als je een 'auteur' wil weergeven, moet je er over nadenken of je gebruikers (met gebruikersnamen/wachtwoorden e.d.) wilt opnemen. Dan moet de auteur verwijzen naar een tabel 'users'..

Maar nou weet ik niet goed hoe ik deze html template gebruik voor iedere view. En betekent dit dus wel dat er echt nieuwe php pagina's worden aangemaakt op basis van deze template zodra er een nieuwe topic word gestart?

Uiteraard heeft forumgedeelte 1 andere topics dan forumgedeelte 2, en hiervoor hetzelfde template gebruiken betekent logischerwijze dat ik met variabelen moet werken. Maar hoe doe ik dat precies?

Ik wil in ieder geval nog niet met users werken. Ik wil eerst graag nog topics kunnen plaatsen enz enz, gewoon eerst maar een standaard simpel forum zonder users.
Boven in je code vraag je op welke thread wordt aangevraagd

De url wordt danb iets als: forum.php?thread=[het id van de thread]

En in je code zet je dan:


<?php

// Todo: zorg voor een DB connectie

// Vraag thread id op
$iThreadId = urldecode($_GET["thread"]);

// Valideer thread id
if(is_numeric($iThreadId))
{
// Kijk of thread bestaat (todo: en of de bezoeker toegang heeft)
$sql = "SELECT * FROM `thread` WHERE `id` = '" . mysql_real_escape_string($iThreadId) . "' LIMIT 1;";
$rsThread = mysql_query($sql) or die('Error in query');
}

if(THREAD GEVONDEN)
{
// Toon gevonden thread
}
else
{
// Toon thread overzicht
}

?>
@Pholeron: Gooi die gore backtics ` uit je queries, die vervuilen de zooi alleen maar. In een goed script heb je ze echt helemaal nooit nodig. Je gebruikt ze namelijk om fouten te verbergen.
Dankje, dit snap ik nu.

Maar eerst: hoe maak je een nieuwe thread? Tot nu toe heb ik ze gewoon zelf gemaakt: nieuw --> txt document --> hernoemen naar php, snapje? Hoe maak ik een nieuwe thread? Want dat gaat niet hetzelfde als een nieuw bericht plaatsen. Je moet echt een nieuwe pagina maken via php, en een template gebruiken voor de layout. En moet er ook een DB zijn met de namen van deze threads? Of moeten er echt nieuwe pagina's gemaakt worden met de namen van deze threads? Ik denk een DB, en dan zorgen dat je een thread id krijgt ofzo. Van die threads snap ik weiniggg.
Euhm, geen backticks... *whaaah* Die MOET je juist wel gebruiken.. hoezo fouten verdoezelen?

Het hoort bij de syntax en is JUIST om duidelijk onderscheid te maken tussen syntax en kolomnamen..

Wil je bijv. de kolom `group` benaderen, maar gebruik je geen backtick, krijg je netjes een INVALID QUERY error, omdat het woord GROUP (zonder backticks) gezien wordt als SQL syntax.. als in "GROUP BY".

Spaties in je kolomnamen, of speciale karakters? Geen probleem met backticks (of het aan te raden is het te doen staat hier niet ter discussie).. Backtick is gewoon een onderdeel van de MYSQL SYNTAX!!!
@Julien

Je maakt een formuliertje om een nieuwe thread aan te maken, en die voegt een record toe aan de thread-tabel..

Dit formulier plaats je bij het thread overzicht..

Binnen een thread plaats je een formulier oom een berichtje binnen die thread toe te voegen..
Oke, dat had ik zelf al bedacht lol =p

Maar hoe maak je automatich een link naar de pagina met de thread dan? En hoe maak je die pagina met die thread?

Een vraag die mij onbeantwoord is gebleven: Word elke thread echt een nieuwe php pagina? Of word het alleen een record in je tabel en gebruik je 1 php (template) pagina met daarin dat bovenstaande wat je had gepost.

Wat ikd aarvan trouwens niet begrijp ik de term "Todo"??
Ik heb nu dit op de index om de threads te laten zien:

index.php
		<?php
		
		include("db.php");

		mysql_select_db("my_db", $con);

		$result = mysql_query("SELECT * FROM threads");

		while($row = mysql_fetch_assoc($result))
			{
			echo '<tbody><tr><td>' . ($row['title']) . '</td></tr></tbody>';
			}

		mysql_close($con);
		?>


Dit heb ik om de thread te maken:

nieuwe_thread.php
	<form action="post_thread.php" method="post">
Naam:		<input type="text" name="title" /><br /><br />
		<input type="submit" value="Maak Thread" />
	</form>


En dit heb ik om de thread te verwerken:

post_thread.php
	<?php
	include("db.php");
	
	mysql_select_db("my_db", $con);

	$sql="INSERT INTO threads (title)
	VALUES
	('$_POST[title]')";

	if (!mysql_query($sql,$con))
		{
		die('Error: ' . mysql_error());
		}
	echo "Thread is geplaatst.<br />";

	mysql_close($con);
	?>


Goed? Fout? Mis ik nog iets?
Hmm, ik snap toch nog iets niet. Waar moet ik de nieuwe thread naartoe linken, en hoe? (i.v.m. threadID) Als ik nu een thread toevoeg, komt hij als record idd in een tabel te staan. Maar wat moet ik er verder mee doen om deze aan een pagina te koppelen? En aan welke pagina moet hij gekoppeld worden? Moeten er allemaal nieuwe pagina's komen steeds met de ID van de thread?

Reageren