2012-07-04 98 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不會觸發的問題。 –

相關問題