0

我有一個基本的表單提交腳本,它可以從循環中設置多維$ _SESSION變量(2個級別) - 然後使用標題位置重定向。

我在我的本地機器(運行PHP 5.3.8的xampp/windows服務器)上開發了這個,沒有問題,但我在運行PHP 5.3.3的Web服務器上遇到了問題,甚至升級到5.3.21的問題。

這裏是我的腳本:

if($_POST['submitted']){ 


    $_SESSION['c'] = array(); 
    $_SESSION["RETURNING_DISCOUNT"] = array(); 
    $seq = 1; 

    for($d=1; $d<=10; $d++){ 

     if($_POST["COMPANY_$d"] && $_POST["PHONE_$d"]){ 

      $_SESSION['c'][$seq] = array(); 

      $_SESSION['c'][$seq]["COMPANY"] = str_replace("\'", "", str_replace('\"', '', $_POST["COMPANY_$d"])); 
      $_SESSION['c'][$seq]["PHONE"] = str_replace("\'", "", str_replace('\"', '', $_POST["PHONE_$d"])); 

      if($_POST["COUNTRY_$d"] == 'Canada'){ 
       $_SESSION['c'][$seq]["STATE"] = str_replace("\'", "", str_replace('\"', '', $_POST["STATE_$d"])); 
      }else{ 
       $_SESSION['c'][$seq]["STATE"] = str_replace("\'", "", str_replace('\"', '', $_POST["STATE_2_$d"])); 
      } 
      $_SESSION['c'][$seq]["COUNTRY"] = $_POST["COUNTRY_$d"]; 
      $_SESSION['c'][$seq]["ADDY1"] = str_replace("\'", "", str_replace('\"', '', $_POST["ADDY1_$d"])); 
      $_SESSION['c'][$seq]["ADDY2"] = str_replace("\'", "", str_replace('\"', '', $_POST["ADDY2_$d"])); 
      $_SESSION['c'][$seq]["CITY"] = str_replace("\'", "", str_replace('\"', '', $_POST["CITY_$d"])); 
      $_SESSION['c'][$seq]["ZIP"] = str_replace("\'", "", str_replace('\"', '', $_POST["ZIP_$d"])); 
      $_SESSION["RETURNING_DISCOUNT"][$_SESSION['c'][$seq]["COMPANY"]] = $_POST["RETURNING_COMPANY_$d"]; 

      $seq++; 

     }//end declare var in $_SESSION 

    }//end for 


       header("location: register3.php"); 



}//end usersubmit 

,並將它設置什麼是以下幾點:

[RETURNING_DISCOUNT] => Array 
    (
     [working] => 1 
    ) 

[c] => 11 

它所應該設置(如果我停用頭的位置沒有設置)爲:

[RETURNING_DISCOUNT] => Array 
     (
      [working] => 1 
     ) 

    [c] => Array 
     (
      [1] => Array 
       (
        [COMPANY] => jk 
        [PHONE] => jhgk 
        [STATE] => 
        [COUNTRY] => 
        [ADDY1] => 
        [ADDY2] => 
        [CITY] => 
        [ZIP] => 
       ) 

     ) 

因此,你可以看到問題是$ _SESSION ['c']數組。就像我說的那樣,當你禁用標題時(「location:register3.php」);它會起作用。就好像頁面在多維數組值正確設置之前重定向一樣。

難道這是一個output_buffering問題?我的php.ini文件中有output_buffering = off。我也打開它看看它會有所作爲,但沒有運氣。

任何有識之士將不勝感激。謝謝。

+0

我沒有看到你的'session_start()'調用,你是否在最初調用它? – MrCode 2013-02-18 10:16:35

+0

你有session_start()嗎? – vectorialpx 2013-02-18 10:17:54

+0

是的,抱歉,它已經超出了我複製的代碼,但session_start()肯定設置在頁面頂部。 – 2013-02-18 10:18:13

回答

0

路人設置我在正確的道路上。 register3.php是罪魁禍首。 我仍然不明白如何在兩臺服務器上呈現相同的代碼。

這裏是我有什麼:

for($c=0; $c<=10; $c++){ 
    if($_SESSION['c'][$c]){ 
     $all_co[] = "taco"; 
    }//end if something is found in array 
}//end for 

,當我改變了var $ C給$ x,一切運行良好。我很高興終於解決了這個問題,但仍然不確定爲什麼會發生這種情況。

0

請嘗試在標題重定向之前打印會話內容,並檢查此頁是否格式良好。

print_r($_SESSION); 
exit; 

並註釋頁面上的標題重定向行。

+0

如果我添加print_r($ _ SESSION)來代替標題重定向,它會正確格式化。我不相信register3.php上的任何內容正在改變$ _SESSION值,但我仍在繼續調查這種可能性。無論是或者它可能是一個PHP錯誤,我在想什麼?!? – 2013-02-18 10:50:28

+0

你可以嘗試從該頁面中刪除所有的php代碼,並使用session_start();和print_r($ _ SESSION);在該頁面上也使用ob_start()清除緩衝區;剛好在session_start()之上;功能線 – user2082783 2013-02-18 11:21:17