I’m developing my a web application.
I have this piece of code:
<?php if($_SESSION['add'] == 1) echo '<input type="button" name="add" id="add" value="Add" onclick="add()" >'; if($_SESSION['edit'] == 1) echo '<input type="button" name="edit" id="edit" value="Edit" onclick="edit()">'; ?>
Basically, when the user logs in, I set session variables which indicate whether or not that user is authorised to make changes and add records. So when they get to the home page, I use this code to decide whether or not to display my add and edit buttons.
Is this code breaking the rule of logic/presentation separation? If so, how can I achieve separation?
I am not using any web framework.
While conditions in View are perfectly fine, your View should not try to fetch any data from any source by itself. This is not its role and it should only work on data your Controller (or Presenter, depending on whatever your application architecture is) feed it with. Your View shouldn’t not know the logic behind why and when to switch between
add modes. It only must know how to do that when ordered. In your case, Controller should check
$_SESSION and make the decision what mode, add or edit your View should display and pass that decision to your View (i.e.
edit|add) for dumb execution.
PS: I recommend to make a habit to always put code blocks (even one-liners) in