De opdracht van periode 2, jaar 1 MBO was om een CMS systeem te maken. Om mezelf een uitdaging te geven probeerde ik dan ook gelijk iets groots, door een forum te maken. Uiteindelijk is een volledige forum niet gelukt, en aan de CMS kwam ik niet eens toe, maar ik heb wel veer veel geleerd. Een vriend van mij had een web-game, die daarop wel een forum wilde hebben. Daarom vroeg hij mij om het voor zijn webgame te maken, wat de opdracht weer wat leuker maakte. Hij gebruikte Ajax in zijn webgame en wilde dat ik het ook ging gebruiken. Dit maakte het wel weer lastiger, maar mer de uitleg die hij me gaf en zijn stukjes code is het goed gelukt.
Met dit forum deed ik ook mijn best om het object oriented te programmeren.
Ik heb geleerd:
- PDO
- Object Oriented Programming
- Ajax
- PHP Sessions
- Analyseren
- Plan van aanpak
- Functioneel ontwerp
- Technisch ontwerp
Hier zijn een paar stukken van de code om een idee te krijgen:
private function countPosts($bid){ global $db; $query = $db->prepare("SELECT topics.id FROM topics WHERE id_board = '$bid' LIMIT 1"); $query->execute(); $row = $query->fetchAll(); if ($row){ $id = $row[0][0]; $query = $db->prepare("SELECT COUNT(*) FROM topics_posts WHERE id_topic = '$id'"); $query->execute(); return $query->fetchColumn(); } else { return '0'; } }
public function makeBoards($cid){ global $db; $query = $db->prepare("SELECT * FROM boards WHERE id_cat=$cid ORDER BY order_boards ASC"); $query->execute() or die ("error".$db->errorCode()); $return = ""; $color = "0e5980"; foreach ($query->fetchAll() as $row){ $color=="#03406e"?$color="#0e5980":$color="#03406e"; $return = $return."<tr> <td bgcolor=\"$color\" onMouseOver=\"this.bgColor='#4a8bac'\" onMouseOut=\"this.bgColor='$color'\" height=\"50px\"><table id=\"forumInf\" border=\"0px\" OnClick=\"ajaxFunction('ajaxforummain','?goto=topics&bid=".$row['id']."&bname=".$row['name']."')\"> <tr> <td width=\"32px\"><b id='profileMenu'>[img]</b></td> <td width=\"200px\" class=\"left\"><b id='profileMenu'>".$row['name']."</b></td> <td width=\"248px\"><b id='profileMenu'>".$row['description']."</b></td> <td width=\"70px\" class=\"left\"><b id='profileMenu'>".$this->countTopics($row['id'])." Topics</b></td> <td width=\"70px\" class=\"left\"><b id='profileMenu'>".$this->countPosts($row['id'])." Posts</b></td> <td width=\"250px\" ><b id='profileMenu'>Last topic stuff</b></td> </tr> </table></td> </tr>"; } return "<table id=\"forums\" border=\"0px\">".$return."</table>"; }
public function printPages($tname,$tid){ global $db; global $p_posts; global $p_show; global $prefix; global $userTable; isset($_GET['tpage'])?$_GET['tpage']>5?$start=$_GET['tpage']-5:$start=$_GET['tpage']:$start=1; $end = $start+$p_show; $query = $db->prepare("SELECT COUNT(*) FROM ".$prefix."topics_posts"); $query->execute() or die("SELECT COUNT(*) FROM topics_posts"); $aantal = $query->fetchColumn(); $amount = ceil($aantal / $p_posts); // 1st 3 pages $j = "Pages: | "; for ($i=1;$i<=3 && $i <=$amount;$i++){ $j = $j . "<span class=\"page\" onClick=\"ajaxFunction('ajaxforummain','?goto=posts&tname={$tname}&tid={$tid}&page=$i')\">$i | </span>"; } if ($amount <= 5 && $amount > 3){ for ($i=4;$i<=$amount;$i++){ $j = $j . "<span class=\"page\" onClick=\"ajaxFunction('ajaxforummain','?goto=posts&tname={$tname}&tid={$tid}&page=$i')\">$i | </span>"; } } else if ($amount > 5){ $gotoFor = true; $bAmount = 6; $eAmount = $amount; if ($amount == 6){ $j = $j . "<span class=\"page\" onClick=\"ajaxFunction('ajaxforummain','?goto=posts&tname={$tname}&tid={$tid}&page=$i')\">$i | </span>"; $gotoFor = false; } else if ($amount > 10){ $bAmount = ceil($amount / 2 - 3); $eAmount = ceil($amount / 2 + 3); $bAmount < 4?:$gotoFor = false; } for ($i = $bAmount;$i<=$eAmount && $gotoFor;$i++){ $j = $j . "<span class=\"page\" onClick=\"ajaxFunction('ajaxforummain','?goto=posts&tname={$tname}&tid={$tid}&page=$i')\">$i | </span>"; } } echo "<br />".$j; }