Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialPrakhar Patwa
11,260 Pointsi have a question regarding contact-thanks.php page
why we have added
$pageTitle = "Contact Mike";
$section = "contact";
not able to clearing that doubt
2 Answers
Jeff Lemay
14,268 PointsIn your head tag in the header.php file you are including at the top of contact-thanks.php, there are variables for the page title (the text that shows in the tabs of your browser) and the section (this is probably used to add an 'active' class to a nav item). This allows you to use the same global header for all files (same doctype, stylesheets, favicons, etc.) but still somewhat customize it (unique page title, highlight this specific page's nav item, add content to the page with this $section, etc.).
These two variables you mention should be set just before you include the header.php file.
Ted Sumner
Courses Plus Student 17,967 PointsJeff is largely correct. The complete code for the contact page is at the end of this post. It may be different because I have completed all three courses that use this code. But here is the answer:
The beginning of the contact page is not relevant to your question, so I will not explain that code. The page title and section are defined before the header include. Those variables are used in the header. The relevant code for the header is:
<html>
<head>
<title><?php echo $pageTitle; ?></title>
<link rel="stylesheet" href="<?php echo BASE_URL; ?>css/style.css" type="text/css">
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Oswald:400,700" type="text/css">
<link rel="shortcut icon" href="<?php echo BASE_URL; ?>favicon.ico">
</head>
<body>
<div class="header">
<div class="wrapper">
<h1 class="branding-title"><a href="<?php echo BASE_URL; ?>">Shirts 4 Mike</a></h1>
<ul class="nav">
<?php
/* list items with a class of "on" indicate the current section; those links
* are underlined in the CSS to communicate that back to the site visitor;
* the $section variable is set in each individual file
*/
?>
<li class="shirts <?php if ($section == "shirts") { echo "on"; } ?>"><a href="<?php echo BASE_URL; ?>shirts/">Shirts</a></li>
<li class="contact <?php if ($section == "contact") { echo "on"; } ?>"><a href="<?php echo BASE_URL; ?>contact/">Contact</a></li>
<li class="search <?php if ($section == "search") { echo "on"; } ?>"><a href="<?php echo BASE_URL; ?>search/">Search</a></li>
The first thing the code does in echo the page title in the head section. That allows us to use one code and still change the title that appears on browser tabs.
The second variable is used in the nav section. Each line of the unordered list contains an if statement that examines the section. If the section meets the if statement, the code returns on in the class, which changes the display so that the page you are on is highlighted.
The purpose of all of this is to not repeat your code. Each page now requires two variables to be defined and a require (or include) statement so that it will be customized without duplicate code.
<?php
require_once("../inc/config.php");
/* This file contains instructions for three different states of the form:
* - Displaying the initial contact form
* - Handling the form submission and sending the email
* - Displaying a thank you message
*/
// a request method of post indicates that
// we are receiving a form submission
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// the form has fields for name, email, and message
$name = trim($_POST["name"]);
$email = trim($_POST["email"]);
$message = trim($_POST["message"]);
// the fields name, email, and message are required
if ($name == "" OR $email == "" OR $message == "") {
$error_message = "You must specify a value for name, email address, and message.";
}
// this code checks for malicious code attempting
// to inject values into the email header
if (!isset($error_message)) {
foreach( $_POST as $value ){
if( stripos($value,'Content-Type:') !== FALSE ){
$error_message = "There was a problem with the information you entered.";
}
}
}
// the field named address is used as a spam honeypot
// it is hidden from users, and it must be left blank
if (!isset($error_message) && $_POST["address"] != "") {
$error_message = "Your form submission has an error.";
}
require_once(ROOT_PATH . "inc/phpmailer/class.phpmailer.php");
$mail = new PHPMailer();
if (!isset($error_message) && !$mail->ValidateAddress($email)){
$error_message = "You must specify a valid email address.";
}
// if, after all the checks above, there is no message, then we
// have a valid form submission; let's send the email
if (!isset($error_message)) {
$email_body = "";
$email_body = $email_body . "Name: " . $name . "<br>";
$email_body = $email_body . "Email: " . $email . "<br>";
$email_body = $email_body . "Message: " . $message;
$mail->SetFrom($email, $name);
$address = "orders@shirts4mike.com";
$mail->AddAddress($address, "Shirts 4 Mike");
$mail->Subject = "Shirts 4 Mike Contact Form Submission | " . $name;
$mail->MsgHTML($email_body);
// if the email is sent successfully, redirect to a thank you page;
// otherwise, set a new error message
if($mail->Send()) {
header("Location: " . BASE_URL . "contact/?status=thanks");
exit;
} else {
$error_message = "There was a problem sending the email: " . $mail->ErrorInfo;
}
}
}
?><?php
$pageTitle = "Contact Mike";
$section = "contact";
include(ROOT_PATH . 'inc/header.php'); ?>
<div class="section page">
<div class="wrapper">
<h1>Contact</h1>
<?php // if status=thanks in the query string, display an thank you message instead of the form ?>
<?php if (isset($_GET["status"]) AND $_GET["status"] == "thanks") { ?>
<p>Thanks for the email! I’ll be in touch shortly!</p>
<?php } else { ?>
<?php
if (!isset($error_message)) {
echo '<p>I’d love to hear from you! Complete the form to send me an email.</p>';
} else {
echo '<p class="message">' . $error_message . '</p>';
}
?>
<form method="post" action="<?php echo BASE_URL; ?>contact/">
<table>
<tr>
<th>
<label for="name">Name</label>
</th>
<td>
<input type="text" name="name" id="name" value="<?php if (isset($name)) { echo htmlspecialchars($name); } ?>">
</td>
</tr>
<tr>
<th>
<label for="email">Email</label>
</th>
<td>
<input type="text" name="email" id="email" value="<?php if(isset($email)) { echo htmlspecialchars($email); } ?>">
</td>
</tr>
<tr>
<th>
<label for="message">Message</label>
</th>
<td>
<textarea name="message" id="message"><?php if (isset($message)) { echo htmlspecialchars($message); } ?></textarea>
</td>
</tr>
<tr style="display: none;">
<?php // the field named address is used as a spam honeypot ?>
<?php // it is hidden from users, and it must be left blank ?>
<th>
<label for="address">Address</label>
</th>
<td>
<input type="text" name="address" id="address">
<p>Humans (and frogs): please leave this field blank.</p>
</td>
</tr>
</table>
<input type="submit" value="Send">
</form>
<?php } ?>
</div>
</div>
<?php include(ROOT_PATH . 'inc/footer.php') ?>