diff --git a/coursework-blog/step-6/admin.php b/coursework-blog/step-6/admin.php
new file mode 100644
index 0000000000000000000000000000000000000000..91f6afddc026b5755a13e17b0c75368c563d23bf
--- /dev/null
+++ b/coursework-blog/step-6/admin.php
@@ -0,0 +1,30 @@
+<?php
+error_reporting( E_ALL );
+ini_set( "display_errors", 1 );
+
+include_once "../../../coursework_blog_config.php"; 
+$db = new PDO( $dbInfo, $dbUser, $dbPassword );
+$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
+
+$title = "PHP/MySQL blog demo";
+$css="css/blog.css";
+$embeddedStyle = "";
+
+include_once "views/header.php";
+include_once "views/admin/admin-navigation.php";
+
+$navigation = isset( $_GET['page'] );
+if ( $navigation ) {
+    //prepare to load corresponding controller
+    $contrl = $_GET['page'];
+} else {
+    //or prepare to load default controller
+    $contrl = "entries";
+}
+//load the controller
+include_once "controllers/admin/$contrl.php";
+
+include_once "views/footer.php";
+
+?>
+
diff --git a/coursework-blog/step-6/controllers/admin/editor.php b/coursework-blog/step-6/controllers/admin/editor.php
new file mode 100644
index 0000000000000000000000000000000000000000..4effa65124082aece3b8bc1b4b4f3111052195ab
--- /dev/null
+++ b/coursework-blog/step-6/controllers/admin/editor.php
@@ -0,0 +1,38 @@
+<?php
+
+include_once "models/Blog_Entry_Table.class.php";
+$entryTable = new Blog_Entry_Table( $db );
+
+//was editor form submitted?
+$editorSubmitted = isset( $_POST['action'] );
+if ( $editorSubmitted ) {  
+    $buttonClicked = $_POST['action'];
+    //was "save" button clicked
+    $insertNewEntry = ( $buttonClicked === 'save' );
+     
+    if ( $insertNewEntry ) {
+        $title = $_POST['title'];
+        $entry = $_POST['entry'];
+        //save the new entry
+        $entryTable->saveEntry( $title, $entry );
+    } 
+}
+
+$entryRequested = isset( $_GET['id'] );
+if ( $entryRequested ) {
+    $id = $_GET['id'];
+    $entryData = $entryTable->getEntry( $id );
+    $entryData->entry_id = $id;
+//    $entryData->message = "";
+} else {
+    $entryData = new StdClass();
+    $entryData->entry_id = 0;
+    $entryData->title = "";
+    $entryData->entry_text = "";
+//    $entryData->message = "";
+}
+
+
+include_once "views/admin/editor-html.php";
+
+?>
diff --git a/coursework-blog/step-6/controllers/admin/entries.php b/coursework-blog/step-6/controllers/admin/entries.php
new file mode 100644
index 0000000000000000000000000000000000000000..adf710348c5a3e9b33b3ec2a9a8bb193c7e9fad6
--- /dev/null
+++ b/coursework-blog/step-6/controllers/admin/entries.php
@@ -0,0 +1,10 @@
+<?
+
+include_once "models/Blog_Entry_Table.class.php";
+$entryTable = new Blog_Entry_Table( $db );
+$allEntries = $entryTable->getAllEntries(); 
+
+include_once "views/admin/entries-html.php";
+
+
+?>
diff --git a/coursework-blog/step-6/controllers/blog.php b/coursework-blog/step-6/controllers/blog.php
new file mode 100644
index 0000000000000000000000000000000000000000..51823f9e6dc517223b0deb9cc598e62909aa7dcf
--- /dev/null
+++ b/coursework-blog/step-6/controllers/blog.php
@@ -0,0 +1,16 @@
+<?
+include_once "models/Blog_Entry_Table.class.php";
+$entryTable = new Blog_Entry_Table( $db );
+
+
+$entryClicked = isset( $_GET['id'] );
+if ($entryClicked ) {
+    $entryId = $_GET['id'];
+    $entryData = $entryTable->getEntry( $entryId ); 	
+//    print_r($entryData);
+    include_once "views/entry-html.php";
+} else {
+    $entries = $entryTable->getallentries();
+    include_once "views/list-entries-html.php";
+}
+?>
diff --git a/coursework-blog/step-6/coursework-blog.sql b/coursework-blog/step-6/coursework-blog.sql
new file mode 100644
index 0000000000000000000000000000000000000000..61ba3ff71306180219cf21698d4129ce56252898
--- /dev/null
+++ b/coursework-blog/step-6/coursework-blog.sql
@@ -0,0 +1,8 @@
+-- this will create a table for blog entries
+CREATE TABLE blog_entry (
+    entry_id INT NOT NULL AUTO_INCREMENT,
+    title VARCHAR( 150 ),
+    entry_text TEXT,
+    date_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    PRIMARY KEY ( entry_id )
+)
diff --git a/coursework-blog/step-6/css/blog.css b/coursework-blog/step-6/css/blog.css
new file mode 100644
index 0000000000000000000000000000000000000000..c1b6d0670a8fd4ef1d0b8d9b856a04639d5d583e
--- /dev/null
+++ b/coursework-blog/step-6/css/blog.css
@@ -0,0 +1,24 @@
+/* code listing for blog/css/blog.css */
+form#editor{
+    width: 300px;
+    margin:0px;
+    padding:0px;   
+}
+
+form#editor label, form#editor input[type='text']{
+    display:block;
+}
+
+form#editor #editor-buttons{
+    border:none;
+    text-align:right;
+}
+
+form#editor textarea, form#editor input[type='text']{
+    width:90%;
+    margin-bottom:2em;
+}
+
+form#editor textarea{
+    height:10em;
+}
diff --git a/coursework-blog/step-6/index.php b/coursework-blog/step-6/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..d15e46128c23bde74a1f5f5130449f4f805659a7
--- /dev/null
+++ b/coursework-blog/step-6/index.php
@@ -0,0 +1,19 @@
+<?php
+error_reporting( E_ALL );
+ini_set( "display_errors", 1 );
+
+include_once "../../../coursework_blog_config.php"; 
+$db = new PDO( $dbInfo, $dbUser, $dbPassword );
+$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
+
+$title = "PHP/MySQL blog demo";
+$css="css/blog.css";
+$embeddedStyle = "";
+include_once "views/header.php";
+
+include_once "controllers/blog.php";
+
+include_once "views/footer.php";
+
+?>
+
diff --git a/coursework-blog/step-6/models/Blog_Entry_Table.class.php b/coursework-blog/step-6/models/Blog_Entry_Table.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..2063813168d498ca4037f4ad16ad0ffa1aafc8d5
--- /dev/null
+++ b/coursework-blog/step-6/models/Blog_Entry_Table.class.php
@@ -0,0 +1,53 @@
+<?php
+class Blog_Entry_Table {
+    private $db;
+    
+
+    public function __construct ( $db ) {
+        $this->db = $db;
+    }
+     
+        public function saveEntry ( $title, $entry ) {
+        $entrySQL = "INSERT INTO blog_entry ( title, entry_text ) 
+                     VALUES ( ?, ?)";
+        $entryStatement = $this->db->prepare( $entrySQL );
+        $formData = array( $title, $entry ); 
+        try{
+            $entryStatement->execute( $formData );
+        } catch (Exception $e){
+            $msg = "<p>You tried to run this sql: $entrySQL<p>
+                    <p>Exception: $e</p>";
+            trigger_error($msg);
+        }
+    }
+
+    public function getAllEntries () {
+        $sql = "SELECT entry_id, title, SUBSTRING(entry_text, 1, 150) AS intro  FROM blog_entry";
+	$statement = $this->makeStatement($sql);
+	return $statement;
+    }
+
+
+   public function getEntry( $id ){
+	$sql = "SELECT entry_id, title, entry_text, date_created FROM blog_entry WHERE entry_id = ?"; 
+	$data = array($id);
+	$statement = $this->makeStatement( $sql, $data);
+	$model = $statement->fetchObject();
+        return $model;
+    }
+
+   public function makeStatement( $sql, $data = NULL) {
+        $statement = $this->db->prepare( $sql );
+        try{
+            $statement->execute( $data );
+        } catch (Exception $e) {
+            $exceptionMessage = "<p>You tried to run this sql: $sql <p>
+                    <p>Exception: $e</p>";
+            trigger_error($exceptionMessage);
+        }
+	return $statement;
+    }	
+
+}
+
+?>
diff --git a/coursework-blog/step-6/views/admin/admin-navigation.php b/coursework-blog/step-6/views/admin/admin-navigation.php
new file mode 100644
index 0000000000000000000000000000000000000000..c58b361f5687bc015c0bb084ec1adcfdf87c0c23
--- /dev/null
+++ b/coursework-blog/step-6/views/admin/admin-navigation.php
@@ -0,0 +1,11 @@
+<?php
+
+$out = "
+<nav id='admin-navigation'>
+    <a href='admin.php?page=entries'>All entries</a>
+    <a href='admin.php?page=editor'>Editor</a>
+</nav>";
+
+echo $out;
+
+?>
diff --git a/coursework-blog/step-6/views/admin/editor-html.php b/coursework-blog/step-6/views/admin/editor-html.php
new file mode 100644
index 0000000000000000000000000000000000000000..bf86ba2747d1df2ea2e63ef21412315e0f2d8a2a
--- /dev/null
+++ b/coursework-blog/step-6/views/admin/editor-html.php
@@ -0,0 +1,23 @@
+<?php
+
+$out = "
+<form method='post' action='admin.php?page=editor' id='editor'>
+    <input type='hidden' name='id' value='$entryData->entry_id' />
+    <fieldset>
+        <legend>New Entry Submission</legend>
+        <label>Title</label>
+        <input type='text' name='title' maxlength='150' value='$entryData->title' required />
+        
+        <label>Entry</label>
+        <textarea name='entry'>$entryData->entry_text</textarea>    
+        
+        <fieldset id='editor-buttons'>
+            <input type='submit' name='action' value='save' />
+        </fieldset>
+    </fieldset>
+</form>
+";
+
+echo $out;
+
+?>
diff --git a/coursework-blog/step-6/views/admin/entries-html.php b/coursework-blog/step-6/views/admin/entries-html.php
new file mode 100644
index 0000000000000000000000000000000000000000..2097a76b3afa1ec464ca5dccfc984d5ad63cfafe
--- /dev/null
+++ b/coursework-blog/step-6/views/admin/entries-html.php
@@ -0,0 +1,16 @@
+<?php
+
+if ( isset( $allEntries ) === false ) {
+trigger_error('views/admin/entries-html.php needs $allEntries');
+}
+
+$entriesAsHTML = "<ul>";
+while ( $entry = $allEntries->fetchObject() ) {
+    $href = "admin.php?page=editor&amp;id=$entry->entry_id";
+    $entriesAsHTML .= "<li><a href='$href'>$entry->title</a></li>";
+}
+
+$entriesAsHTML .= "</ul>";
+echo $entriesAsHTML;
+
+?>
diff --git a/coursework-blog/step-6/views/entry-html.php b/coursework-blog/step-6/views/entry-html.php
new file mode 100644
index 0000000000000000000000000000000000000000..44c629f34b48ce2b432a58a5fe9c6b0fd8c83e80
--- /dev/null
+++ b/coursework-blog/step-6/views/entry-html.php
@@ -0,0 +1,14 @@
+<?php
+
+//check if required data is available
+$entryDataFound = isset( $entryData );
+if ( $entryDataFound === false ) {
+    trigger_error('views/entry-html.php needs an $entryData object');
+}
+//properties available in $entry: entry_id, title, entry_text, date_created
+
+echo "<article>
+    <h1>$entryData->title</h1>
+    <div class='date'>$entryData->date_created</div>
+    $entryData->entry_text
+</article>";
diff --git a/coursework-blog/step-6/views/footer.php b/coursework-blog/step-6/views/footer.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7373f51428a6aa5ef1ffa5d974b7d30d633c526
--- /dev/null
+++ b/coursework-blog/step-6/views/footer.php
@@ -0,0 +1,8 @@
+<?php
+$out = "
+</body>
+</html>
+";
+
+echo $out;
+?>
diff --git a/coursework-blog/step-6/views/header.php b/coursework-blog/step-6/views/header.php
new file mode 100644
index 0000000000000000000000000000000000000000..4c5a94f334184fa5e665e83abf16d0407fc05c98
--- /dev/null
+++ b/coursework-blog/step-6/views/header.php
@@ -0,0 +1,12 @@
+<?php
+$out = "<!DOCTYPE html>
+<html>
+    <head>
+        <title>$title</title>
+        <meta http-equiv='Content-Type' content='text/html;charset=utf-8' />
+        <link rel='stylesheet' type='text/css' href='$css'>
+        <link rel='stylesheet' type='text/css' href='$embeddedStyle'>
+    </head>";
+
+echo $out;
+?>
diff --git a/coursework-blog/step-6/views/list-entries-html.php b/coursework-blog/step-6/views/list-entries-html.php
new file mode 100644
index 0000000000000000000000000000000000000000..f568bc89d29cae908caedf77b8d659b17599da94
--- /dev/null
+++ b/coursework-blog/step-6/views/list-entries-html.php
@@ -0,0 +1,24 @@
+<?php
+
+$entriesFound = isset( $entries );
+if ( $entriesFound === false ) {
+    trigger_error( 'views/list-entries-html.php needs $entries' );
+}
+
+$entriesHTML = "<ul id='blog-entries'>";
+
+while ( $entry = $entries->fetchObject() ) {
+    $href  = "index.php?page=blog&amp;id=$entry->entry_id";
+    //create an <li> for each of the entries
+    $entriesHTML .= "<li>
+        <h2>$entry->title</h2>
+        <div>$entry->intro
+            <p><a href='$href'>Read more</a></p>
+        </div>
+    </li>"; 
+}
+$entriesHTML .= "</ul>";
+
+echo $entriesHTML;
+
+?>