为什么这段代码没有正确递增计数器?

时间:2012-07-04 15:11:34

标签: php session

在下面的代码中,为什么每次都不将整数递增1?例如,我提交表单时说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'];

4 个答案:

答案 0 :(得分:1)

代码看起来很好。但是,有可能在您不知情的情况下在后台请求页面。例如,损坏的图像路径等可能会登陆此文件,从而增加您的计数器。为了确保不是这种情况,添加一个新的会话数组var,它记录$_SERVER['REQUEST_URI']或将其记录到文本文件或其他内容。

答案 1 :(得分:0)

如果您希望每次都增加{/ 1}},请将其移到if / else语句之外。

答案 2 :(得分: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>

答案 3 :(得分:0)

问题是你从$_POST http数组中得到一个字符串,它不会自动转换为整数值。为了做你想做的事,可以修改上面的代码:

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

相关问题