Overall I am very happy with our web-app as we ended up having time to add features that we hadn’t planned to add. As the first time I had made a fully functioning website and having to code in PHP (which I had never done before) I was pleased that by the end of the project I was able to fix errors, add code such as queries and functions and understand the code we had written.

Teamwork played a vital role in being able to finish our web-app. We spent a lot of time outside tutorials trying to fix the code we had written and making sure we had made it to our initial aims of a functioning database connected site with the elements we had set out to incorporate into the site.

Kyle helped us fix the complicated errors and took us through the code that we may not have understood fully, meaning we had a good knowledge of the code we had written. Bootstrap was a very helpful tool in this project and gave us a great CSS basis to work from so we had more time to work out the PHP. We even used a little bit of jQuery to enhance our site and give it some aesthetically pleasing elements like the scrolling down of the log in and sign up forms.

If I was to do this project again I may choose to maybe be a bit more adventurous with the site and do more research on PHP to find some other functions we had not thought of in this project. Design wasn’t our main priority for this project but I would have liked to spend more time on the branding and colours to make a website that would potentially be ready for full use. However I feel that I would be a lot more competent in writing my PHP as I know fully understand its capabilities and how to structure the code to make a fully functioning site.


Fixing Timestamp Error


When I first added the timestamp function to the code it seemed to work. While finishing the code and testing the site I saw that an error appeared and instead of it saying for example “10 mins ago” it said “-3457 seconds ago”. This meant that the filters for most recent were getting confused to I needed to fix the error.

Example of the error:

Screen Shot 2015-04-19 at 16.21.14

I spent a long time trying to fix the code and realised that it started from -3600 seconds which is an hour. I then realised that it could be because the clocks changed a few days after I finished this code. I then found an alternative to “UTC” as the default timezone on the code on the php site. I had tried other timezones such as EST and GMT just as a test but these apparently aren’t readable by the PHP. This seemed to work successfully and now I had an accurate timezone on my timestamp function.

Screen Shot 2015-04-19 at 16.18.09 Screen Shot 2015-04-19 at 16.17.57

Now the site looks this this:

Screen Shot 2015-04-19 at 16.25.30

Deleting a User’s Posts


As another extra feature of the site I wanted the user to be able to delete their post so they could either redo it or be able to update it. I had to add a new delete_post.php file and create an if statement so if the user was logged in then the delete button would appear and they were able to delete only their posts. I also created a message if they were not able to delete their post then it would appear with an error message.

Screen Shot 2015-04-19 at 16.49.17

I then needed to add the function to the box1.php as that is where I wanted the button to appear.

<!--?php if ($_SESSION["user_id"]==$row["user_id"]) {?--></pre>
<div id="delete_post" class="delete"><a id="" href="delete_post.php?id=<?php echo $row[">"><button class="btn btn-danger" type="button">Delete Post</button></a></div>
<pre><!--?php } ?-->
<!--?php } else { ?-->
    <!--?php } ?-->

I then wanted to style this button so the text would stand out in  the box and it actually looked like a delete button. I went onto Bootstrap and found the best delete button (the danger button) I could find and added it to the box1.php code.

Screen Shot 2015-04-19 at 16.53.58

This is what the final product looks like:

Screen Shot 2015-04-19 at 17.00.52



This project was very reliant on teamwork. Amy Wichelow and I had never really done much coding before let alone PHP! This meant that we had to work together a lot to get the work done and to be able to understand what the code did.

We spent a lot of time in the labs, both working on the same computer trying to fix errors. Amy seemed to understand the PHP more than I had done so she took me through the code and helped me understand this. I did research on another elements we could add to the site like the timestamp and trying to let a user delete a post. I had some prior knowledge on HTML and CSS so I did a lot of the styling and in the end ended up designing the whole site.

Amy and I communicated a lot outside of the labs if we were trying to get some code to work. I asked for my group’s opinions of the design.

Amy and I tried to stay organised by creating to-do lists on the elements and parts of the coding we still had to do. I took charge of uploading the project to GitHub and installing the Wiki onto the server.

Overall Amy and I worked well as a team and I feel that if we did not work as well we may have not finished the project to the deadline, as we spent a lot of time together trying to fix the code. We weren’t afraid to ask Kyle if after a while of trying to fix an error we were still stuck which helped us understand PHP and PHPMyAdmin in a lot more depth.



I decided that I would try and add a timestamp to the post that come up on the homepage. To do this I needed to add a timestamp row on PHPMyAdmin so it would record the time that the post was submitted. Adding this feature would prove to be  an aesthetic element to the posts and also meant that sorting the post by most recent would be easier to do.

This is a video someone recommened me to watch that gave me the details to add a timestanmp onto the post:

I used this video to understand what code to write and how it worked. I ended up changing the layout of the timestamp so that It said “3 hours ago” or “2 minutes ago”.

Firstly I had to create the function which would cause the time to be posted in the post box. This code also included the way that the timestamp would be printed and named the function as “$timestamp”. The code below is the code I wrote for the functions.php file.

class convertToAgo {
    function convert_datetime($str) {
        //sets the timezone to UTC
        //explode breaks a string into an array
   		list($date, $time) = explode(' ', $str);
    	list($year, $month, $day) = explode('-', $date);
    	list($hour, $minute, $second) = explode(':', $time);
    	$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
    	return $timestamp;
        //this function converts into a timestamp in the "2015-01-01 12:12:12" format
    function makeAgo($timestamp){
   		$difference = time() - $timestamp;
   		$periods = array("sec", "min", "hr", "day", "week", "month", "year", "decade");
   		$lengths = array("60","60","24","7","4.35","12","10");
   		for($x = 0; $difference >= $lengths[$x]; $x++){
   			$difference /= $lengths[$x];
   			$difference = round($difference);
   		if($difference != 1) $periods[$x].= "s";
   			$text = "$difference $periods[$x] ago";
   			return $text;
        //this function gives out the differences between the time and the timestamp-time

Screen Shot 2015-04-17 at 18.08.58

The next step was to place the function in box1.php as the timestamp needed to be shown in the box with the other profile information. This linked the database time data with the function so it could find the right information to use.

include_once("../includes/functions.php"); // Include the class library
    $timeAgoObject = new convertToAgo; // Create an object for the time conversion functions
    // Query your database here and get timestamp
    $ts = $row["dateofpost"];
    $convertedTime = ($timeAgoObject -> convert_datetime($ts)); // Convert Date Time
    $when = ($timeAgoObject -> makeAgo($convertedTime)); // Then convert to ago time
    <div class="time_ago" <h2><?php echo "".$when; ?></h2> </div>

This is the code I placed into the box1.php file. Screen Shot 2015-04-17 at 18.08.01

I then styled this timestamp in the CSS by making the font slightly opaque and giving the text a different colour.

Screen Shot 2015-04-17 at 18.19.46

Creating Sign Up Form


We created the sign-up form in a slightly different way from other forms like the login form. The ‘SELECT * FROM’ query was used so that it can look up the existing users and lets them log in to the site.  The ‘$_SESSION [“message”]’ and ‘$_SESSION [“username”]’ bits of code echo out a message which tells the user whether or not they have logged in successful.


This part of the code was slightly complicated as we had to adapt the code so that a user could log in with their username and password. The singup.php was used so submit their details when they signed up. This was code we used in other areas of our site. However we kept on having errors with this code including the data not being placed onto the database and then the user not being able to log in. Another problem we couldn’t overcome was that someone could create a user without typing anything in the fields as we did not know how to set the character limit for the password and username. Kyle helped us sort out some of these errors. He noticed that we had put ‘SELECT*FROM’ in the code but it actually needed to be ‘INSERT INTO’ as we were trying to add data to the database rather than pull it from the database. This finally made the sign up page work and we were now able to log into our site.

This is the code for the sign up page form:


After being able to log in we now realised that when you logged in you could see the log in feature in the nav bar and we wanted to show the ‘New Post’ page at the top so a user was able to create a profile. We thought that this might cause errors and it didn’t look right for it to be there if a user was already logged in so we asked Kyle how to do this and there was an easy fix for it. We had to work out the code that would mean that “if the user isn’t logged in then show the login and sign up button on the page”. It was a simple bit of code to add to hide and show the elements we wanted in different situations.




For this project we needed to create 2 databases on the PHPMyAdmin server. One was needed to record usernames and passwords and the second was to record the data from the profiles.

This is the database for the usernames and passwords:

Screen Shot 2015-04-17 at 16.37.51

This was the structure for that database:

Screen Shot 2015-04-17 at 16.39.18

The second database was slightly more confusing. We had to remember to make an ID row and name all of the elements appropriately so we could accurately link this table to the form we will create using PHP. This is the second table:

Screen Shot 2015-04-17 at 16.41.25

This was the structure for this database:

Screen Shot 2015-04-17 at 16.41.37

To add this to our code we needed to create a connect.php file and link this PHPMyAdmin database to our code. This is what it looks like:

Screen Shot 2015-04-17 at 16.42.51

Below is the code from the signup.php and is where we linked our PHPMyAdmin to the code and created the form where the user would be able to submit their information and then it would save on the PHPMyAdmin and then would be echoed out on the homepage as a profile.

&lt;?php require_once(&quot;../includes/session.php&quot;); ?&gt;
&lt;?php require_once(&quot;../includes/connect.php&quot;); ?&gt;
&lt;?php require_once(&quot;../includes/functions.php&quot;); ?&gt;
&lt;?php include_once(&quot;../includes/templates/header.php&quot;); ?&gt;

&lt;a name=&quot;formlogin&quot;&gt;&lt;/a&gt;
&lt;a name=&quot;formsignup&quot;&gt;&lt;/a&gt;


    if(isset($_POST[&quot;post&quot;])) {
        $fullname = ucfirst($_POST[&quot;full_name&quot;]);
        $email = ucfirst($_POST[&quot;email&quot;]);
        $age = ucfirst($_POST[&quot;age&quot;]);
        $gender = ucfirst($_POST[&quot;gender&quot;]);
        $personalprofile = ucfirst($_POST[&quot;bio&quot;]);
        $location = ucfirst($_POST[&quot;location&quot;]);
        $user_id = $_SESSION[&quot;user_id&quot;];
        //$photoupload = ucfirst($_POST[&quot;photo_upload&quot;]);
        //$cvupload = ucfirst($_POST[&quot;cv_upload&quot;]);

        $query = &quot;INSERT INTO newpost (user_id, full_name, email, age,
 gender, bio, location) VALUES ('{$_SESSION['user_id']}', 
'{$fullname}', '{$email}', '{$age}', '{$gender}', '{$personalprofile}',
        $result = mysqli_query($connection, $query);

        if($result) {
            $_SESSION[&quot;message&quot;] = &quot;Post successful&quot;;
        } else {
            $_SESSION[&quot;message&quot;] = &quot;Something went wrong!&quot;;
    } else 

            $fullname = &quot;&quot;;
            $email = &quot;&quot;;
            $age = &quot;&quot;;
            $gender = &quot;&quot;;
            $personalprofile = &quot;&quot;;
            $location = &quot;&quot;;
            //$photoupload = &quot;&quot;;
            //$cvupload = &quot;&quot;;


&lt;div class=&quot;container&quot;&gt;
    &lt;h3 class=&quot;post&quot;&gt;New Post&lt;/h3&gt;
    &lt;div class=&quot;jumbotronlogin&quot;&gt;
	    &lt;div class=&quot;row&quot;&gt;
	        &lt;div class=&quot;col-md-12&quot;&gt;
	            &lt;div id=&quot;form-box&quot;&gt;

                &lt;form action=&quot;profile.php&quot; method=&quot;post&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
	&lt;label for=&quot;inputName&quot;&gt;Full Name&lt;/label&gt;
		&lt;input type=&quot;text&quot; class=&quot;form-control&quot; name=&quot;full_name&quot; id=&quot;exampleInputName2&quot; placeholder=&quot;Full Name&quot;&gt;
                    &lt;div class=&quot;form-group&quot;&gt;
	&lt;label for=&quot;inputName&quot;&gt;Email Address&lt;/label&gt;
		&lt;input type=&quot;text&quot; class=&quot;form-control&quot; name=&quot;email&quot; id=&quot;exampleInputName2&quot; placeholder=&quot;Enter Your Email Address&quot;&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
	&lt;label for=&quot;inputName&quot;&gt;Age&lt;/label&gt;
		&lt;input type=&quot;text&quot; class=&quot;form-control&quot; name=&quot;age&quot; id=&quot;exampleInputName2&quot; placeholder=&quot;Age&quot;&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
	&lt;label for=&quot;inputName&quot;&gt;Gender&lt;/label&gt;
						&lt;select class=&quot;form-control&quot; name=&quot;gender&quot;&gt;
				            &lt;option&gt;Please Select&lt;/option&gt;
				            &lt;option value=&quot;male&quot;&gt;Male&lt;/option&gt;
				            &lt;option value=&quot;female&quot;&gt;Female&lt;/option&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
	&lt;label for=&quot;inputName&quot;&gt;Personal Profile&lt;/label&gt;
                    &lt;textarea name=&quot;bio&quot; class=&quot;form-control&quot; rows=&quot;3&quot; placeholder=&quot;250 Characters&quot;&gt;&lt;/textarea&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
	&lt;label for=&quot;inputName&quot;&gt;Location&lt;/label&gt;
		&lt;input type=&quot;text&quot; class=&quot;form-control&quot; name=&quot;location&quot; id=&quot;exampleInputName2&quot; placeholder=&quot;Location&quot;&gt;
                     &lt;!--&lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;exampleInputFile&quot;&gt;Photo Upload&lt;/label&gt;
                        &lt;input type=&quot;file&quot; id=&quot;exampleInputFile&quot;&gt;

                    &lt;div class=&quot;form-group&quot;&gt;
                        &lt;label for=&quot;exampleInputFile&quot;&gt;CV Upload (optional)&lt;/label&gt;
                        &lt;input type=&quot;file&quot; id=&quot;exampleInputFile&quot;&gt;
                    &lt;input type=&quot;submit&quot; name=&quot;post&quot; class=&quot;btn btn-default&quot;&gt;


&lt;?php include_once(&quot;../includes/templates/footer.php&quot;); ?&gt;

The signup would mean that a user could sign in and if the data was different to what was on the PHPMyAdmin then it would not log them in.Screen Shot 2015-04-17 at 16.43.08