2012-07-28 43 views
0

我在這裏錯過了什麼?這是我的PHP文件:

<? 
session_start(); 

echo print_r($_SESSION); 
echo "<br>"; 
echo print_r($_POST); 

// Save input in session 
$_SESSION = $_POST; 
echo "test1"; 
?> 

<br> 
test2 

該文件是從一種形式訪問提交,我敢肯定後的數據存在。輸出是:

陣列([登錄] => 1)1
陣列([名稱] =>測試[型] =>試驗)1
TEST2

,它使對我沒有意義。內容的session內容和post內容打印沒有問題。

但是$_SESSION = $_POST;似乎失敗,並且直到?>的腳本的其餘部分都沒有給出任何響應,這是顯而易見的,因爲test1文本未打印。我不知道$_SESSION = $_POST;會發生什麼情況。我在SO和其他地方找到的所有問題都可以通過這種方式在會話中存儲發佈數據。

我知道session_start();是在任何輸出之前需要的。在這種情況下還有其他需要的東西嗎?

我錯過了什麼?


更新 - 測試文件

一個完整的測試文件的確切代碼(鏈接刪除)是:

<? 
session_start(); 
?> 

<html> 
<head> 

</head> 
<body> 

<? 

echo print_r($_SESSION); 
echo "<br>"; 
echo print_r($_POST); 

// Save input in session 
$_SESSION = $_POST; 
echo "test1"; 
?> 

<p>test2</p> 

<form method="post" action="test.php"> 
    Type something to test: <input type="text" name="testfield" id="testfield"> 
    <input type="submit" value="Submit"> 
</form> 

</body> 
</html> 

更新 - 解決了嗎?

好的,現在就解決了。但這是奇怪的...

問題顯然是由評論引起的。 //停止腳本在<?..?>括號內運行。當我刪除評論// Save input in session,那麼它的作品...?

現在我在這裏錯過了什麼?它必須是一些PHP設置或什麼的。或者可能是某些已更改的文件或腳本數據。我想,因爲@CodeCaster有它的工作,我的個人電腦上發生了這樣的事情......但評論工作在其他地方?有沒有人見過這個?

+1

你'echo「test1」'你得到一個結果'test2'?這是同一個腳本嗎?是用'post'方法向該腳本提交的任何內容? – Gntem 2012-07-28 12:57:05

+0

請張貼實際的代碼,因爲您發佈的代碼確實有效。此外,如果PHP似乎「沒有打印任何內容失敗」,請啓用錯誤報告。 – CodeCaster 2012-07-28 12:57:47

+0

更正。我錯過了最後一行 – Steeven 2012-07-28 12:58:44

回答

5

你試過用$_SESSION['name'] = $_POST['name'];來代替嗎?

我從來沒有用過$_SESSION = $_POST;,從來沒有見過它,在我編程的整個PHP時間。

希望這會有所幫助。

+0

謝謝,好主意。它沒有區別,但是如果我使用'$ _SESSION = $ _POST;'或'$ _SESSION ['name'] = $ _POST ['name'];':(。 – Steeven 2012-07-28 13:32:11

+0

'$ _SESSION = $ _POST;'雖然工作正常但是當前會話被覆蓋 – Steeven 2012-07-29 11:23:10

+1

很棒:)如果你有身份驗證,不要忘記驗證$ _POST變量,因爲ic可以用來攻擊你的站點。 – peteroak 2012-07-29 15:03:15

-1

您可以修改$ _SESSION,但我不認爲您可以像這樣重新指定它。相反,將$ _POST的成員複製到它中。嘗試使用array_merge(),但如果這不起作用,然後寫一個foreach循環來做到這一點。

2

我會改爲foreach $ _POST並將其添加到$_SESSION['mypostvars']。請記住,您應該在存儲它們之前驗證並驗證$ _POST。

這是一個可能的複製的PHP merge $_POST into $_SESSION

+0

是的,我結束了使用'foreach'。如果我只是使用'$ _SESSION = $ _POST;'會覆蓋當前會話。 – Steeven 2012-07-29 11:22:13

1

與XAMPP工作,即例如工作得很好。 「test1」印在成功發佈之前和之後。使用PHP 5.3.8。

在使用PHP 5.3.6的Linux上進行測試,在兩種情況下也能正常打印'test1'。

所以,看來PHP不是這裏的問題。

+0

不,PHP不是這裏的問題:)我的更新。問題在這裏解決:http://stackoverflow.com/questions/11703611/using-notepad-comments-in-php-stops-the-script/11703647#11703647。 – Steeven 2012-07-29 11:23:49