Использование файлов cookie в PHP - PullRequest
0 голосов
/ 06 мая 2020

У меня есть код, который подсчитывает, сколько раз пользователь посещал страницу. Я пытаюсь вывести особое сообщение, когда кто-то приходит в 5-й раз.

   <?php
session_start();
if (empty($_SESSION['count'])) {
    $_SESSION['count'] = 1;
} if($_SESSION['count'] === 5){
    echo '<p> This is your' . $_SESSION['count'] . 'th time! Glad to have you back! </p>';
}if($_SESSION['count'] === 10) {
    echo '<p> This is your' . $_SESSION['count'] . 'th time! You must love it here</p>';
}if($_SESSION['count'] === 20){
    echo '<p> Hi again, this is your' . $_SESSION['count'] . 'th time! This will restart the page. Thanks for visiting so much! </p>';
    $_SESSION['count'] = 0;
} else {
    $_SESSION['count']++;
}

?>

<p> Hello Visitor! You have seen this page <?php echo $_SESSION['count'];?> times!</p>

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Этот вопрос немного изменился, поэтому я интерпретирую то, что вы хотите, потому что это неясно. Я понял, что вам нужен взаимоисключающий обмен сообщениями. Вы делаете это с помощью цепочки операторов if-then-else.

<?php
  session_start();
  if (empty($_SESSION['count'])) {
    $_SESSION['count'] = 1;
  } else {
    $_SESSION['count']++;    
  }

  // Display message
  if ($_SESSION['count'] == 5){
    echo "<p>This is your {$_SESSION['count']}th time! Glad to have you back!</p>";
  } else if ($_SESSION['count'] == 10) {
    echo "<p>This is your {$_SESSION['count']}th time! You must love it here</p>";
  } else if ($_SESSION['count'] == 20) {
    echo "<p>Hi again, this is your {$_SESSION['count']}th time! This will restart the page. Thanks for visiting so much!</p>";
    $_SESSION['count'] = 0;
  } else {
    echo "<p>Hello Visitor! You have seen this page {$_SESSION['count']} times!</p>";
  } 

Более простой способ сделать это - использовать оператор switch.

<?php
  session_start();
  if (empty($_SESSION['count'])) {
    $_SESSION['count'] = 1;
  } else {
    $_SESSION['count']++;    
  }

  // Display message
  switch ($_SESSION['count']) {
    case 5:
      echo "<p>This is your {$_SESSION['count']}th time! Glad to have you back!</p>";
      break;
    case 10:
      echo "<p>This is your {$_SESSION['count']}th time! You must love it here</p>";
      break
    case 20:
      echo "<p>Hi again, this is your {$_SESSION['count']}th time! This will restart the page. Thanks for visiting so much!</p>";
      $_SESSION['count'] = 0;
      break
    default:
      echo "<p>Hello Visitor! You have seen this page {$_SESSION['count']} times!</p>";      
  }

Некоторые советы:

  1. Нет причин для вычисления 5,10,20 сообщений, потому что вы используете равенство, поэтому они должны быть 5-м, 10-м, 20-м. Это бесполезные вычисления. Это тоже не код DRY. Было бы лучше, если бы у вас была функция, которая выводит это сообщение, а не тот же вычислительный код.
  2. Я использовал интерполяцию строк, так как это легче читается и легче обновляется по сравнению с большим количеством конкатенации строк. Когда у вас есть массив с одинарными кавычками, вы выполняете эту работу, заключая переменную в {}, как я сделал здесь: {$_SESSION['count']}th time! Вы используете двойные кавычки, чтобы указать PHP, что переменные вставляются в строку.
  3. Не используйте конечный тег php ?> в конце скрипта. В этом нет необходимости и могут возникнуть некоторые странные ошибки вывода, когда вы включаете скрипты.

Надеюсь, вы видите, что это будет генерировать только одно сообщение за посещение страницы.

0 голосов
/ 06 мая 2020

Просто используйте оператор if, например,

if($_SESSION['count'] >= 5){
    echo '<p> Hello Visitor! You have seen this page ' . $_SESSION['count'] . ' times!</p>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...