Doug Smith
Doug Smith

Reputation: 29316

What's wrong with this PHP? Nothing is showing up

I'm trying to learn PHP, so I could very well be making a very beginner-level mistake.

Basically, I have a page.php file that is a class file for the page I want to create, and I want to include that in my home.php page (I do that using the require function). However, nothing shows up. I'm doing this based off a book I'm reading, and it seems to work fine there.

page.php:

<?php

class Page {
    // attributes
    public $content;
    public $title = "TLA Consulting Pty Ltd";
    public $keywords = "TLA Consulting, Three Letter Abbreviation, some of my best friends are search engines";
    public $buttons = array("Home" => "home.php", "Contact" => "contact.php", "Services" => "services.php", "Site Map" => "map.php");

    public function __set($name, $value) {
        $this->$name = $value;
    }

    public function display() {
        echo "<html>\n<head>\n";
        $this->displayTitle();
        $this->displayKeywords();
        $this->displayStyle();
        echo "</head>\n<body>\n";
        $this->displayHeader();
        $this->displayMenu($this->buttons); // try this line without giving it the parameter
        echo $this->content;
        $this->displayFooter();
        echo "</body>\n</html>";
    }

    public function displayTitle() {
        echo "<title>$this->title</title>";
    }

    public function displayKeywords() {
        echo "<meta name=\"keywords\" content=\"$this->keywords\" />";
    }

    public function displayStyle() {
?>
        <style>
            h1 {
                color: white;
                font-size: 24px;
                text-align: center;
                font-family: helvetica, arial, sans-serif;
            }

            .menu {
                color: white;
                font-size: 12px;
                text-align: center;
                font-family: helvetica, arial, sans-serif;
                font-weight: bold;
            }

            td {
                background-color: black;
            }

            p {
                color: black;
                font-size: 12px;
                text-align: justify;
                font-family: helvetica, arial, sans-serif;
            }
        </style>
<?php
    }

    public function displayHeader() {
?>
        <table width="100%" cellpadding="12" cellspacing="0" border="0">
            <tr bgcolor="black">
                <td aling="left"><img src="http://i.imgur.com/xBrUZ.png" alt="Iron Man's finger" /></td>
                <td><h1>TLA Consulting Pty Ltd</h1></td>
            </tr>
        </table>
<?php
    }

    public function displayMenu($buttons) {
        echo "<table width=\"100%\" bgcolor=\"white\">\n";
        echo "<tr>\n";

        // calculate button size
        $width = 100 / count($buttons);

        while (list($name, $url) = each($buttons)) {
            $this -> displayButton($width, $name, $url, !this->IsURLCurrentPage($url));
        }
        echo "</tr>\n</table>\n";
    }

    public function IsURLCurrentPage($url) {
        if (!strpos($_SERVER['PHP_SELF'], $url)) {
            return false;
        }
        else {
            return true;
        }
    }

    public function displayButton($width, $name, $url, $active = true) {
        if ($active) {
            echo "<td width=\"".$width."%\">
            <a href=\"$url\"><img src=\"http://i.imgur.com/xBrUZ.png\" alt=\"$name\" /></a>
            <a href=\"$url\"><span class=\"menu\">$name</span></a>
            </td>";
        }
        else {
            echo "<td width=\"".$width."%\">
            <img src=\"http://i.imgur.com/xBrUZ.png\" />
            <span class=\"menu\">$name</span>
            </td>";
        }
    }

    public function displayFooter() {
        echo "<p>I am a footer ololz</p>";
    }
}

?>

home.php:

<?php

    require("page.php");

    $homepage = new Page();

    $homepage->content = "<p>Hi there, I like blueberries greatlly.</p>
                          <p>I hope you'll join me in loving blueberries!</p>"

    $homepage->display();

?>

Any insight would be appreciated.

Upvotes: 2

Views: 3634

Answers (3)

user1389155
user1389155

Reputation:

you are using the beginning and ending of php inconsistently.

For example here:

    public function displayStyle() {
?>
    <style>
        h1 {
            color: white;
            font-size: 24px;
            text-align: center;
            font-family: helvetica, arial, sans-serif;
        }

        .menu {
            color: white;
            font-size: 12px;
            text-align: center;
            font-family: helvetica, arial, sans-serif;
            font-weight: bold;
        }

        td {
            background-color: black;
        }

        p {
            color: black;
            font-size: 12px;
            text-align: justify;
            font-family: helvetica, arial, sans-serif;
        }
    </style>
  <?php  
  }

You are starting a function, then you break it with closing the php block "?>" and paste a stylesheet part which will be echoed when the page loads. If you want to display the style with this function, then you have to make it like:

<?php
 public function displayStyle() {

 echo   "<style>".
        "h1 {".
            "color: white;";   
  }
 ?>

Upvotes: 2

Lobo
Lobo

Reputation: 4137

In the home.php file you're missing a semicolon in the ine 10

In the page.php file you're missing character "$" on line 86

$this -> displayButton($width, $name, $url, !$this->IsURLCurrentPage($url));

Upvotes: 1

Sam Starling
Sam Starling

Reputation: 5378

Two problems:

  • this should be $this on line 86 of page.php.
  • You need a semicolon at the end of ...blueberries!</p>"

You might not be seeing the errors if error reporting isn't turned on.

Upvotes: 5

Related Questions