PHP Tutorial
In this tutorial we will create a simple twitter copycat. In step 5 we will create a new page that lists tweets from one user only.
Step 5
1. To create a new page we will start by creating the PHP file responsible for the business logic of that page. This page will be very similar to the list_all.php page we created before with two differences:
- It will receive a parameter containing the username of the user whose tweets we want to list.
- It will call a different function to get the list of tweets for a particular username.
The template to use can be the same one we used for the list_all.php pages (code reuse FTW).
2. The new page will be called tweets/list_user.php and it will look like this:
<?php
include_once('../../config/init.php');
include_once($BASE_DIR .'database/tweets.php');
$username = $_GET['username'];
$tweets = getUserTweets($username);
$smarty->assign('tweets', $tweets);
$smarty->display('tweets/list.tpl');
?>
3. We should always verify if the input parameters are correct. For now we will just exit with an error if the //username// doesn’t exist in the $_GET array. Later we will do some better error handling. Add this to the top of your page.
if (!isset($_GET['username'])) die('username missing');
4. We now have to create the new function in the database/tweets.php file:
function getUserTweets($username) {
global $conn;
$stmt = $conn->prepare('SELECT *
FROM tweets JOIN
users USING(username)
WHERE username = ?
ORDER BY time DESC');
$stmt->execute(array($username));
return $stmt->fetchAll();
}
While we were at it we also made our queries more pleasant to the eye.
5. Now, in our tweets/list.tpl template we just have to make sure that clicking an username will get us to this page. Change this line:
<a href="#" class="username">@{$tweet.username}</a>
to this:
<a href="{$BASE_URL}pages/tweets/list_user.php?username={$tweet.username}" class="username">@{$tweet.username}</a>
6. We still need a way to return to our initial page and every page should have an header with a link to the beginning. So lets create a header in our common/header.tpl template:
<!DOCTYPE html>
<html>
<head>
<title>Fritter</title>
<meta charset='utf-8'>
<link rel="stylesheet" href="{$BASE_URL}/css/style.css">
</head>
<body>
<header>
<h1><a href="{$BASE_URL}">Fritter</a></h1>
</header>
We needed a name, I decided to call ou site Fritter:
fritter
ˈfrɪtə
verb
1. waste time, money, or energy on trifling matters.
"I wish we hadn't frittered the money away so easily"
synonyms: squander, waste, misuse, misspend, spend unwisely, throw away, dissipate, make poor use of;
It seemed appropriate…
In step 6 we will create a form for user registration.