2012-07-04 2 views
0

В моем коде ниже, почему он не увеличивает число целых чисел на каждый раз? Например, скажем, у меня есть 1 OF 5, когда я отправлю форму. После представления он должен быть 2 OF 5, но вместо этого он отображает 5 OF 5. Это происходит, даже если я изменяю максимум от 5 до 3; он начинается с 1 OF 3 и сразу же переходит в 3 OF 3. Это код для отображения .. OF ..Почему этот код не увеличивает счетчик правильно?

<h1><?php echo $sessionMinus ?> OF <?php echo $_SESSION['initial_count'] ?></h1> 

Ниже приведен код, который должен увеличить значение на единицу каждый раз:

if(isset($_POST['sessionNum'])){ 
    //Declare my counter for the first time 

    $_SESSION['initial_count'] = $_POST['sessionNum']; 
    $_SESSION['sessionNum'] = $_POST['sessionNum']; 
    $_SESSION['sessionCount'] = 1; 
} 
else if ($_SESSION['sessionCount'] < $_SESSION['sessionNum']) { 
    $_SESSION['sessionCount']++; 
} 

$sessionMinus = $_SESSION['sessionCount']; 
+0

Вы уверены, что код не вызывается несколько раз, например, может произойти, если правило перезаписи делает загрузку страницы несколько раз? –

+0

Я нахожу это очень запутанной частью кода. Ваш код, кажется, имеет смысл и выглядит совершенно правильно. Почему бы не попытаться использовать '' exit ($ sessionMinus); '' в вашем коде, чтобы отменить какой-либо другой код? – Luceos

+0

Вы уверены, что '$ _SESSION ['sessionNum']' является целым числом? Если это не так, сравнение не имеет значения. –

ответ

1

Код выглядит хорошо. Однако возможно, что страница запрашивается в фоновом режиме без вашего ведома. Например, сломанный путь изображения и т. Д. Можно поместить на этот файл, тем самым увеличивая счетчик. Чтобы убедиться, что это не так, добавьте новый массив сеансов var, который записывает $_SERVER['REQUEST_URI'] или записывает его в текстовый файл или что-то в этом роде.

+0

Можете ли вы предоставить мне пример того, как добавить $ _SERVER ['REQUEST_URI'] в массив сеансов, я запутался на что вы имеете в виду. – user1490145

+0

Идея состоит в том, чтобы узнать, сколько запросов приземляется на этот фрагмент кода. Итак, что-то вроде '$ _SESSION ['reqs'] [] = $ _SERVER ['REQUEST_URI'];' будет хранить все запросы, а u может отображать их в конце с помощью print_r ($ _ SESSION ['reqs']). Если вы видите больше запросов, чем вы делаете, это означает, что что-то еще запрашивает часть кода в фоновом режиме браузера, и, возможно, ваш код является частью файла include, который входит во многие страницы. –

+0

@ user1490145 в простых словах выяснить способ просмотра списка http-запросов, которые обращаются к этому коду в сеансе ур. –

0

Просто двигаться $_SESSION['sessionCount']++; нерабочие, если/иначе, если вы хотите для увеличения каждый раз.

+0

Нет, этот ответ не разрешил ситуацию – user1490145

0

Попробуйте, я не знаю, будет ли это работать, поскольку я не могу проверить его на данный момент, но я думаю, что ваша проблема может заключаться в том, что вы не можете выполнить $ _SESSION ++. Также у вас отсутствует session_start();

<?php 
session_start(); 

if(isset($_SESSION['sessionNum'])) { 
    if ($_SESSION['sessionCount'] < $_SESSION['sessionNum']) { 
     $_SESSION['sessionCount'] = $_SESSION['sessionCount'] + 1; 
    } 
} 
else { 
    $_SESSION['initial_count'] = $_POST['sessionNum']; 
    $_SESSION['sessionNum'] = $_POST['sessionNum']; 
    $_SESSION['sessionCount'] = 1; 
}?> 

<h1><?php echo $sessionMinus ?> OF <?php echo $_SESSION['initial_count'] ?></h1> 
+0

Привет, извините, это ничего не изменило. gud effort tho – user1490145

+0

Я выяснил, выполнив var dump на $ _SESSION (sessionNum), который выводит это: 'string (1)" 4 "', может ли это быть основным фактором, почему он не может добавить его 1 к 1 ? – user1490145

+0

Возможно, я проверил бы значения, которые вы отправляете, со своим сообщением и убедитесь, что они являются действительными числами. –

0

Проблема заключается в том, что вы получаете строку из массива http: $_POST, которая автоматически не преобразуется в целочисленное значение. Для того, чтобы сделать то, что вы хотите, приведенный выше код можно изменить следующим образом:

if(isset($_POST['sessionNum'])){ 
    //Declare my counter for the first time 

    $_SESSION['initial_count'] = intval($_POST['sessionNum']); 
    $_SESSION['sessionNum'] = intval($_POST['sessionNum']); 
    $_SESSION['sessionCount'] = 1; 
} 
else if ($_SESSION['sessionCount'] < $_SESSION['sessionNum']) { 
    $_SESSION['sessionCount']++; 
} 

$sessionMinus = $_SESSION['sessionCount']; 

код также обеспечивает проверку элементарную ввода, так как intval() вернется 0, если он не может разобрать номер.

+0

Я думаю, что проблема связана с http-запросом в одном из ответов, поскольку я обнаружил, что получаю несколько запросов. – user1490145

+0

Поскольку вы сообщаете, что 'var_dump' возвращает тип строки, это тоже может быть проблемой. –

+0

@ IoannisKaradimas Я действительно не думаю, что это проблема, потому что приращение происходит и исправляется правильно, если сравнение строк было проблемой, иначе elseif не срабатывал. –