PHP Switch хочет сломать HTML внутри кода - PullRequest
0 голосов
/ 16 мая 2019

Я использую сеанс iukit и PHP.

На моем сайте 3 человека (роли): администратор, оператор и партнер.

Когда я захожу с одним из них и перехожу на другую страницу, я хочу вернуться назадесли возможно.

Но мне нужно изменить одну ссылку навигатора.

Поэтому я попытался сделать php-переключатель следующим образом:

Сначала я попробовал простой переключатель с

echo '<li ..>foo</li>'; 

но я видел документацию, и это то, что я нашел (гораздо лучше, я думаю).

Я пытался поставить break вместо exit.

<?php switch($_SESSION['person_role']): ?>
<?php case 'admin': ?>
<li class="uk-margin-left uk-margin-right"><a href="admin.html">Admin</a></li>
<?php exit;?>
<?php case 'operator': ?>
<li class="uk-margin-left uk-margin-right"><a href="operator.html">Operator</a></li>
<?php exit;?>
<?php case 'partner': ?>
<li class="uk-margin-left uk-margin-right"><a href="partner.html">Partner</a></li>
<?php exit;?>
<?php default: ?>
nothing
<?php endswitch;; ?>

Результатом является то, что все ссылки доступны для каждого человека.Почему коммутатор не может взломать код?

Ответы [ 3 ]

2 голосов
/ 16 мая 2019

Здесь нет необходимости в переключателе:

$roles = array(
    'admin' => 'Admin',
    'operator' => 'Operator',
    'partner' => 'Partner'
);

if (array_key_exists($_SESSION['person_role'], $roles)) {
    echo '<li class="uk-margin-left uk-margin-right"><a href="' . $_SESSION['person_role'] . '.html">' . $roles[$_SESSION['person_role']] . '</a></li>';
}
0 голосов
/ 16 мая 2019
<?php
$roles = array("admin", "operator", "partner");
$current_role = $_SESSION['person_role'];
if(in_array($current_role, $roles)) {
   echo '<li class="uk-margin-left uk-margin-right"><a href="'.$current_role.'\.html">'.ucfirst($current_role).'</a>
     </li>';
} else {
  echo 'No role in session';
}
?>
0 голосов
/ 16 мая 2019

Вот пример, который вы можете запустить: https://3v4l.org/iQqqn

Вместо того, чтобы писать PHP в и из HTML кода, почему бы просто не оценить switch/case, установить переменные и echo их в 1 строку кода HTML вместо повторения? Или, если вы дезинфицируете свои $_SESSION данные, вы можете просто echo это в HTML, как в примере:

<?php
$_SESSION['person_role'] = 'admin';  // set for testing demo

// Either do your switch case and set variables...
$page = "default";
$role = "default";

// You technically don't even need the variables, but this example 
// shows that based on the case, if you need to use a different name
// for role/page this is where you would do so...
switch($_SESSION['person_role']) {
    case 'admin':
        $page = $role = "admin";
    break;
    case 'operator': 
        $page = $role = "operator";
    break;
    case 'partner':
        $page = $role = "partner";
    break;
}
?>
  Example W/ Switch Case..
  <ul>
    <li class="uk-margin-left uk-margin-right">
      <a href="<?php echo $page; ?>.html">
        <?php echo ucwords($role); ?>
      </a>
    </li>
  </ul>

С другой стороны

<?php
// Just use $_SESSION data (assuming sanitized) in the HTML...
$_SESSION['person_role'] = 'operator';  // set for testing demo
?>
    Example just using $_SESSION data..
    <ul>
      <li class="uk-margin-left uk-margin-right">
        <a href="<?php echo $_SESSION['person_role']; ?>.html">
          <?php echo ucwords($_SESSION['person_role']); ?>
        </a>
      </li>
    </ul>
...