2012-07-04 55 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'];'会存储所有的请求,并且你可以用print_r($ _ SESSION ['reqs'])在末尾显示它们。如果您看到的数据量多于您制作的请求数量,则意味着其他内容正在请求浏览器背景中的代码片段,也许您的代码是包含多个页面的包含文件的一部分。 –

+0

@ user1490145用简单的语言找出一种方法来查看访问该会话中的代码的http请求列表。 –

0

只需推动$_SESSION['sessionCount']++;外面的if/else语句,如果你想它每次增加。

+0

不,这个答案没有解决的情况 – user1490145

0

试试这个,我不知道这是否会工作,我不能在此刻测试,但我认为你的问题可能是,你不能做$ _SESSION ++。还your'e缺少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努力tho – user1490145

+0

我已经找到了$ _SESSION(sessionNum)上的var转储它输出这个:'string(1)“4”',这可能是一个主要因素,为什么它不能将它加1 ? – user1490145

+0

可能的话,我会检查你的帖子发送的值,并确保它们是实际的号码 –

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,如果它不能解析的数量。

+0

我认为问题是在http请求中的一个答案,因为我发现我得到了多个请求 – user1490145

+0

由于你报告'var_dump'返回一个字符串类型,这也可能是一个问题。 –

+0

@IoannisKaradimas我不认为它是这个问题,因为增量正在发生,并且被正确加盖,如果字符串比较是elseif不会触发的问题。 –

相关问题