U bevindt zich hier: Forum » Tutorials » [PHP] Artikel systeem
   Actief Topic: [PHP] Artikel systeem

Vorige ( 1 ) Volgende

vlerknozem
Admin
avatar
# Gepost op 08-01-2010 23:22


Dit artikel systeem wordt vrij basic. Iedereen kan een artikel maken, iedereen kan reageren. Ik heb vrijwel geen beveiliging erin (zoals captcha) om het nog enigzins simpel te houden. Deze tutorial is puur zodat jij de basis van een artikelsysteem kan bouwen. De rest mag je zelf doen, al is hulp vragen natuurlijk atlijd mogelijk. Dit keer gebruik ik geen OOP.

Stap 1: De database
De volgende SQL code kan je gebruiken om de database op te zetten:
Plain | Plain new window | SQL code:
  1. CREATE TABLE IF NOT EXISTS `artikelen` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `titel` varchar(300) NOT NULL,
  4.   `bericht` text NOT NULL,
  5.   PRIMARY KEY  (`id`)
  6. );
  7.  
  8. CREATE TABLE IF NOT EXISTS `reacties` (
  9.   `id` int(11) NOT NULL AUTO_INCREMENT,
  10.   `art_id` int(11) NOT NULL,
  11.   `bericht` text NOT NULL,
  12.   PRIMARY KEY  (`id`)
  13. ) ;


Stap 2: De belangrijkste code
Met deze code kan je artikelen weergeven. Alle artikelen verschijnen als links. Indien je op een link klikt ga je naar dat artikel. Ook wordt er in deze code de formulieren afgehandeld voor reacties en voor een nieuw artikel.
Plain | Plain new window | PHP code:
  1. <?php
  2. // Connectie
  3. $c = mysql_connect('localhost', 'root', '');
  4. $d = mysql_select_db('test', $c);
  5.  
  6. // Artikel ID opvragen van de url
  7. $id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? $_GET['id'] : false;
  8.  
  9. // Kijken of er een post-verzoek is
  10. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  11.     // kijken wel formulier
  12.     switch($_POST['action']) {
  13.         // Post een artikel
  14.         case 'artikel':
  15.             $SQL  = "INSERT INTO artikelen ";
  16.             $SQL .= "SET titel = '". mysql_real_escape_string($_POST['titel']) ."' ";
  17.             $SQL .= ", bericht = '". mysql_real_escape_string($_POST['bericht']) ."' ";
  18.             mysql_query($SQL) or die("Er is een MySQL fout opgetreden");
  19.             header("Location: ". $_SERVER['REQUEST_URI']);
  20.             break;
  21.         // Post een bericht
  22.         case 'bericht':
  23.             $SQL  = "INSERT INTO artikelen ";
  24.             $SQL .= ", bericht = '". mysql_real_escape_string($_POST['bericht']) ."' ";
  25.             $SQL .= ", art_id = '". mysql_real_escape_string($_GET['id']) ."' ";
  26.             mysql_query($SQL) or die("Er is een MySQL fout opgetreden");
  27.             header("Location: ". $_SERVER['REQUEST_URI']);
  28.             break;
  29.     }
  30. }
  31.  
  32.  
  33.  
  34. // De query. Ziet er ingewikkeld uit, maar is niet zo moeilij.
  35. // Eerst alles uit de nieuwsbericht tabel (let op a.veldnaam):
  36. $SQL  = "SELECT a.id, a.titel, a.bericht ";
  37. // Kijken of we een bepaald artikel willen opvragen of juist alle
  38. if($id) {
  39.     // Nu alles uit de reactie tabel (let op r.veldnaam)
  40.     $SQL .= ", r.id, r.art_id, r.bericht AS r_bericht FROM artikelen AS a ";
  41.     // Reactie tabel erbij laden zoalang id uit tabel nieuwsberichten gelijk is aan nb_id uit de reactie tabel
  42.     $SQL .= "LEFT JOIN reacties AS r ON a.id = r.art_id ";
  43.  
  44.  
  45.     // Waar het nieuwsbrief id gelijk is aan wat de user wil opvragen
  46.     $SQL .= "WHERE a.id = '". mysql_real_escape_string($id) ."' ";
  47. } else {
  48.     $SQL .= " FROM artikelen AS a ";
  49. }
  50.  
  51. $q = mysql_query($SQL) or die(mysql_error());
  52.  
  53. // Kijken of de query resultaat oplevert
  54. if(mysql_num_rows($q)) {
  55.     $firstresult = false;
  56.     while($lst = mysql_fetch_array($q)) {
  57.         if(!$id) {
  58.             // Eerst het nieuwsbericht weergeven
  59.             if(!$firstresult) {
  60.                 ?>
  61.                 <a href="?id=<?php echo $lst['id'];?>"><?php echo htmlspecialchars($lst['titel']); ?></a><br />
  62.                 <?php
  63.             }
  64.         } else {
  65.             // Eerst het nieuwsbericht weergeven
  66.             if(!$firstresult) {
  67.                 ?>
  68.                 <h1><?php echo htmlspecialchars($lst['titel']);?></h1>
  69.  
  70.                 <p>
  71.                     <?php echo htmlspecialchars($lst['bericht']);?></h1>
  72.                 </p>   
  73.                 <b>Reacties</b><br />          
  74.                 <?php
  75.                 // Firstresult op true zetten, want we willen het artikel zelf en de titel maar een keer.
  76.                 $firstresult = true;
  77.             }
  78.  
  79.             // Dan nu de reacties
  80.             ?>
  81.             <p>
  82.                 <?php echo htmlspecialchars($lst['r_bericht']);?>
  83.             </p>
  84.             <?php
  85.         }
  86.  
  87.     }
  88.  
  89.     if(mysql_num_rows($q) === 1) {
  90.         echo "Er zijn nog geen reacties";
  91.     }
  92. } else {
  93.     // Geen resultaat.
  94.     echo ($id) ? 'Het artikel dat u probeert te bezoeken bestaat niet' : 'Er zijn nog geen artikelen';
  95. }
  96. ?>

Let erop dat je je mysql inloggegevens moet invullen, en de juiste database moet kiezen.

Stap 3: De formulieren
Nu de formulieren om reacties en artikelen toe te voegen.

Voor de artikelen
Plain | Plain new window | HTML code:
  1. <form action="" method="post">
  2.     <input type="hidden" name="action" value="artikel" />
  3.     Titel <input type="text" name="titel" />
  4.     Bericht <textarea name="bericht"></textarea>
  5.     <input type="submit" value="verstuur" />
  6. </form>


Voor de reacties
Plain | Plain new window | HTML code:
  1. <form action="" method="post">
  2.     <input type="hidden" name="action" value="reactie" />
  3.     Bericht <textarea name="bericht"></textarea>
  4.     <input type="submit" value="verstuur" />
  5. </form>


Tot slot
Nu hebben we een werkend artikel systeem. Maar het is natuurlijk nog erg kaal. Je kan er nog leuke dingen mee doen zoals het toevoegen als een ubb parser. Een inlogsysteem zou handig zijn om te zorgen dat alleen admins artikelen kunnen plaatsen. Misschien maak ik later nog een OO versie van deze tutorial.

Lees de forum regels

Vorige ( 1 ) Volgende

U moet aangemeld zijn om een reactie te kunnen plaatsen.

Indien u nog geen account heeft kunt u zich hier registreren.



© copyright 2009/2010 WebProjects 1.02 - Template van Sebastaan Franken