2012-03-28 74 views
0

在上一頁中,用戶在文本框中輸入一個數字,當提交該表單時,該數字在此頁上發佈爲$_SESSION['sessionNum']。現在我想把這個號碼存儲在頂部,作爲$sessionMinus顯示相同的號碼,區別在於每次將此表單提交給它時,每次提交表單時數字都會減1。問題是它給了我一個未定義的變量$sessionMinus。這怎麼解決?如何解決這個未定義的變量

<?php 
session_start(); 
//validate the post data if necessary 
if (isset($_POST['sessionNum'])) { 

$_SESSION['sessionNum'] = $_POST['sessionNum']; 
}else{ 
     $_SESSION['sessionNum']--; 
} 

$sessionMinus = $_SESSION['sessionNum']; 

?> 


    <body> 

    <?php echo $sessionMinus; ?> 

     <form id="enter" 
       action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" 
       method="post" 
       onsubmit="return validateForm(this);" > 
     <p> 
      <input id="submitBtn" name="submitDetails" type="submit" value="Submit Details" /> 
     </p> 
     </form> 

     <?php 

     $outputDetails = ""; 
     $outputDetails .= " 
     <table id='sessionDetails' border='1'> 
     <tr> 
     <th>Number of Sessions:</th> 
     <th>{$_SESSION['sessionNum']}</th> 
     </tr>"; 
     $outputDetails .= "</table>"; 

     echo $outputDetails; 

     ?> 

    </body> 
+0

'$ sessionMinus'是一個局部變量。它應該是一個會話變量,例如'$ _SESSION ['minus']'如果你想讓它在頁面請求中持續存在。另外,如果它已經被定義,那麼你只能定義它,這是不可能的。 – MrCode 2012-03-28 11:17:47

回答

2

$sessionMinus永遠不會初始化。

當你做isset($sessionMinus)你正在檢查變量是否已被聲明,因爲它沒有,它當然是未定義的。如果您希望在每次提交時攜帶變量,則必須將其存儲在$_SESSION變量中,而不是局部變量。您可以瞭解variable scope here和約session variables here


您使用$_POST

您使用$_POST但你不能發送你的形式命名sessionNum變量。


保持清潔

你也應該儘量保持你的HTML作爲「乾淨」成爲可能,通過分離PHP處理和PHP輸出。

這是你的設置應該如何看起來像

<?php 
    session_start(); 

    if(!isset($_SESSION['my_counter'])){ 
     if(isset($_POST['my_count'])){ 
      //Declare my counter for the first time 
      $_SESSION['initial_count'] = $_POST['my_count']; 
      $_SESSION['my_counter'] = $_POST['my_count']; 
     } 
    }else{ 
     //Decrement my counter 
     $_SESSION['my_counter']--; 
    } 

    $actionurl = htmlentities($_SERVER['PHP_SELF']); 

    if($_SESSION['my_counter'] <= 0) 
     $number_of_sessions = "No sessions left!"; 
    else 
     $number_of_sessions = $_SESSION['my_counter']; 

    $started_with_sessions = $_SESSION['initial_count']; 
?> 

<!DOCTYPE html> 
<body> 
    <form id="enter" action="<?php echo $actionurl; ?>" method="post" onsubmit="return validateForm(this);" > 
     <input type='hidden' name='my_count' value='5' /> 
     <input id="submitBtn" name="submitDetails" type="submit" value="Submit Details" /> 
    </form> 

    <table id='sessionDetails' border='1'> 
     <tr> 
      <th>Number of sessions: </th> 
      <th><?php echo $number_of_sessions; ?></th> 
     </tr> 
     <tr> 
      <th>Started with: </th> 
      <th><?php echo $started_with_sessions; ?> sessions</th> 
     </tr> 
    </table> 
</body> 
</html> 
+0

嗨,你已經修復了通知。唯一值得一提的是,如果按照您的示例進行操作,則每次提交表單時,$ _SESSION ['sessionNum']和$ number_of_sessions都會減1。我只希望$ number_of_sessions從提交時開始倒數1,我希望$ _SESSION ['sessionNum']保持不變。這可以做到嗎? – user1292857 2012-03-28 11:32:01

+0

@ user1292857然後你需要聲明兩個單獨的變量,一個是初始計數,另一個是計數。我會更新我的帖子。 – ShadowScripter 2012-03-28 11:34:32

+0

嗨,你快到了。我上面更新了我的代碼。假設我在前一頁的文本框中輸入數字3,然後顯示$ _SESSION ['sessionNum']和$ sessionMinus的數字3,然後在提交表單時它們都減1。我只希望$ sessionMinus每次減1,$ _SESSION ['sessionNum']保持'3'。這是[鏈接](https://helios.hud.ac.uk/u0867587/Mobile_app/QandATable2.php)到應用程序,所以你可以看到發生了什麼:) – user1292857 2012-03-28 11:47:14

0

如果未設置$ sessionMinus,則永遠不會設置它。也許你應該檢查在設置之前是否沒有設置它?

if (!isset($sessionMinus)) { 
    $sessionMinus = ""; 
    $sessionMinus .= $_POST['sessionNum']--; 

} 
+0

如果我這樣做,那麼它會給我一個通知:$ sessionMinus。= $ _POST ['sessionNum'] - ;它在哪裏陳述未定義的索引:sessionNum – user1292857 2012-03-28 11:25:06

相關問題