There are four ways to show a message bar up front of the web page when needed in PHP. As shown below, the main function of the message bar is to notify users a warning message.
Four ways to build up a message bar are as follows:
1. Passing message by assigning a smarty variable.
index.php
<?php
:
$msg = 'Please login!';
:
$smarty->assign('msg', $msg);
// redirect to index.html
$smarty->display('index.html');
?>
index.html
{if (isset($msg)}
{$msg}
{/if}
It works very good except one situation: program redirects to another page and exits the original one before Smarty variable has been assigned.
Considering a situation below:
<?php
:
if !login() {
$msg = 'Please login!';
header("location:login.php");
exit;
}
:
$smarty->assign('msg', $msg);
// redirect to index.html
$smarty->display('index.html');
?>
Normally, we put $smarty->assign('msg', $msg);
at the end of index.php
file. It will not work in the above example since a header()
command redirects to the login page and exits index.php
. $msg
will not be assigned to a Smarty variable.
2. Query string parameters
ex.
shopping_cart.html
<a href="index.php?msg=Cart is empty!">Empty Cart</a>
index.php
$msg = isset($_REQUEST['msg']) ?
filter_var($_REQUEST['msg'],
FILTER_SANITIZE_MAGIC_QUOTES) : '';
echo $msg;
It shows a long line of words in the url windows of the browser. I really don’t like it. It is not a good way to do it.
3. Using Cookie
ex.
index.php
:
setcookie('msg', 'Hello! New user!', time() + 365*86400);
:
function show_message() {
$msg = $_COOKIE['msg'];
setcookie('msg', '', time() - 3600);
return $msg;
}
index.html
{if isset($smarty.cookies.msg)}
{show_message()}
{/if}
It seems to be a good solution, However, it resulted in some unexpected error while using cookie method. It was not stable when I tested it. The browser could not render the correct page. I recommend not to use it.
4. Using Session
ex.
index.php
<?php
session_start();
:
:
write_message('Hello! New user!');
header("location:{$_SERVER['HTTP_REFERER']}");
function write_message($msg = '') {
$_SESSION['msg'] = $msg;
}
function show_message() {
$msg = $_SESSION['msg'];
unset($_SESSION['msg']);
return $msg;
}
?>
index.html
{if isset($smarty.session.msg)}
<div class="alert alert-danger alert-dismissible show" role="alert">
{show_message()}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
{/if}
The session method is the most recommended method to show a message bar at the redirected page. It’s quite easy, simple and no restriction at all. You can insert write_message('xxxxx')
anywhere in code and it will show up in the redirected page. The only one drawback to criticize is that it consumes server’s resources since session runs on the server.