2013-06-24 119 views
1

我的問題是,當我使用會話變量在不同的PHP腳本之間複製我的數組元素時,沒有任何內容會被打印出來。以下是我的兩個PHP文件。在多個php腳本之間共享會話變量

file1.php

<?PHP 
    session_start(); 
     $SQL = "SELECT * FROM tblquestions"; 

     if ($db_found) { 
      $result = mysql_query($SQL); 
      $numRows = mysql_num_rows($result); //return number of rows in the table 

      echo '<FORM NAME ="form1" METHOD ="POST" ACTION ="file2.php">'; 
      for ($i = 1; $i <= 2; $i++) 
      { 
       $db_field = mysql_fetch_assoc($result); 
       $qID[$i] = $db_field['QID']; 
       $question[$i] = $db_field['Question']; 
       $A[$i] = $db_field['qA']; 
       $B[$i] = $db_field['qB']; 
       $C[$i] = $db_field['qC']; 
       echo '<P>'; 
       print $question[$i]; 
       echo '<P>'; 
       echo "<INPUT TYPE = 'Radio' Name = '".$qNum."' value= 'A'>"; 
       print $A[$i]; 
       echo '<P>'; 
       echo "<INPUT TYPE = 'Radio' Name = '".$qNum."' value= 'B'>"; 
       print $B[$i]; 
       echo '<P>'; 
       echo "<INPUT TYPE = 'Radio' Name = '".$qNum."' value= 'C'>"; 
       print $C[$i]; 
       //if (isset($_POST[$name_Value])) 
       $survey_Answers[$i-1] = $_POST[$qNum]; 
       print '</BR>'.$survey_Answers[$i-1]."</BR>"; 
       $question_Number = ltrim($qNum,'q'); 
       $question_Number++; 
       $qNum ='q'.$question_Number; 
      } 

      echo '<p>'; 
      $_SESSION['answers'] = $survey_Answers; 
      echo '<INPUT TYPE = "Submit" Name = "Submit1" VALUE = "Click here to vote">'; 

      echo '</form>'; 
?> 

On my Second file (file2.php), I have the following: 



<?PHP 
    session_start(); 
    if (isset($_POST['Submit1'])) { 
      $results = $_SESSION['answers']; 
      print $results[0]; 
} 
?> 

然而,在我的file2.php我得到以下錯誤:未定義抵消:0沒有東西打印出來。

+0

**如果條件**沒有在第二個文件中關閉 – ejo

+0

你是否在進入如果塊? – exussum

+0

缺少大括號是我沒有在我的原始代碼中的類型。 –

回答

1
echo '<p>'; 
session_start(); 

不能工作,session_start必須在任何輸出之前調用! 如果你把session_start()放在你的文件的開頭,你應該沒問題。

+0

我在兩個文件中都這樣做了,但它不起作用。 –

+0

你確實把它放在兩個文件的任何輸出之前?在調用 – luk2302

+1

之前,在php開始標記之前不能有任何echo/print/var_dump或純html或空行,這是我目前擁有的。 –

1

To use cookie-based sessions, session_start() must be called before outputing anything to the browser.

來源:http://php.net/manual/en/function.session-start.php

你需要你輸出任何東西之前調用session_start()。在輸出任何內容之前,將它放在腳本的開頭是一個最佳實踐。

+0

我將file1.php中的session_start()移到頂端,但它也不起作用。 –

+0

我得到以下錯誤,而不是:未定義偏移量:0在file2.php –

+0

我不知道該告訴你什麼。我的猜測是在訪問第二個文件之前,第一個文件沒有被執行。它也可能是其他的東西。在你提供的代碼中有很多東西可能會出錯。 – user729928

0
在file1.php session_start();

應該是同一代碼的第一行中file2.php

+1

這是我目前擁有的。 –

+0

如果不工作,那麼檢查$ db_found的值,我認爲'if($ db_found){'代碼塊沒有運行,因此$ survey_Answers也沒有設置。 –

+1

我沒有連接到數據庫的問題。這種情況很好。實際上,如果我將操作更改爲file1.php,則可以在page1上讀取此會話變量,但不能在page2上讀取此會話變量。 –

0

請下面的代碼添加到您想要使用的會話data.Other明智它會返回一個錯誤的每一頁。

<?php 
session_start(); 
?> 
+1

這就是我所擁有的 –

+0

檢查文件是否位於同一個域中。 –

+0

親愛的所有人,我修改了我的代碼以反映您之前提到的更改。任何其他想法? –

0

對於session_start()的PHP手冊頁有一個評論,這聽起來與您的問題非常相似。 http://php.net/manual/en/function.session-start.php#65944

它說,一個整數鍵被指定爲一個直數組或整數的數組將失敗,數據將不會傳遞到下一頁。

修改您的代碼以使用字符串作爲鍵。