Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Outputting HTML with echo considered bad practice in PHP?

Tags:

html

php

echo

In PHP, I'm using an if statement to identify whether a user is logged in or not, and depending on the result, displaying the main menu (if logged in) or a "you need to login" message if not. I am doing this like so:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <link rel="stylesheet" href="style.css" type="text/css" />
    <title>Home</title>
</head>
<body>
    <div id="header">
       <a href="index.php"><img src="wtcdblogo.png" alt="WTC DB logo" /></a>
    </div>
    <?php 
       if($_SESSION['loggedIn'] == 1) {
          echo "<div id='main'>MAIN MENU stuff goes here</div>";
       } else {
          echo "<div id='main'>Please login...</div>";
       } 
    ?>
</body>
</html>

As you can see, the code to display either the main menu or the "please login" message is produced by an echo. Is this bad practice, perhaps there's a better way?

By the way, I've cut out most of the HTML from the echos in my snippet above. The main menu is made up of a list, but I didn't bother including that as it's irrelevant to the question, I guess.

like image 560
james246 Avatar asked Nov 29 '11 21:11

james246


People also ask

Can you echo a HTML file in PHP?

Using echo or print: PHP echo or print can be used to display HTML markup, javascript, text or variables.

Does echo work in PHP?

The PHP echo StatementThe echo statement can be used with or without parentheses: echo or echo() .

Why do we use echo in PHP?

PHP echo statement can be used to print the string, multi-line strings, escaping characters, variable, array, etc. Some important points that you must know about the echo statement are: echo is a statement, which is used to display the output.

How do I echo an HTML file?

You should use readfile() : readfile("/path/to/file"); This will read the file and send it to the browser in one command.


2 Answers

I consider it to be bad practice. Not sure about what anyone else thinks. For one thing, it looks terrible in text editors with syntax highlighting, then you have to worry about escaped strings, etc.

This is how I do it:

   <div>
      <? if ($_SESSION['loggedIn'] === 1): ?>
         <div id="main">Main Menu stuff goes here</div>
      <? else: ?>
         <div id="main">Please log in...</div>
      <? endif ?>
   </div>

You can hop out of the PHP tags and use straight up HTML. There are pros and cons to doing it this way. I like it way better than echoing stuff out. Other options would be to render new views into those areas based on the results of the if statements. Lots of possibilities, but the above is just one way to make that a little cleaner and (I think) better.

like image 185
Jemaclus Avatar answered Sep 23 '22 01:09

Jemaclus


There's nothing wrong with echo for html, when used in moderation. Just don't use it for long multi-line blocks. You'll invariably end up with some ugly construct requiring escaping and whatnot, which makes things even uglier to read.

If the html you're outputting is "static" (no variables to insert), then consider breaking OUT of php mode (?>) and simply dumping the html as is. If you do need to insert variables, then consider using a HEREDOC, which act like a double-quoted string, but without the quotes.

like image 42
Marc B Avatar answered Sep 19 '22 01:09

Marc B