2012-01-16 149 views
0

以下代碼涉及使用由php表單事件觸發的腳本對Facebook應用程序用戶進行身份驗證。我通過一個HTML表單張貼字符串下面的代碼:PHP會話將保留文本,但不保留髮布的變量值

<html> 
<body> 
<form name="form" enctype="multipart/form-data" action="test.php" method="post"> 
    <input name="message" type="text" value=""><br/><br/> 
    <input type="submit" value="Upload"/><br/> 
</form> 
</body> 
</html> 

爲test.php的代碼是:

<?php session_start(); ?> 
<html> 
    <head xmlns:worldcentric="https://apps.facebook.com/testapp/ns#"> 
    <title>Test App</title> 
    </head> 
    <body> 
    <?php 
    $app_id = "191622610935428"; 
    $my_url = "http://www.thepropagator.com/facebook/testapp/test1.php"; 
    $string1 = (string)$_POST["message"]; 
    $_SESSION['str'] = $string1; 
    // $string2 = "teststring"; 
    // $_SESSION['str'] = $string2; 

    $code = $_REQUEST["code"]; 
    if(empty($code)) { 
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&scope=email,publish_actions"; 
    echo("<script>top.location.href='" . $dialog_url . "'</script>"); 
    } 

$string3 = $_SESSION['str']; 
echo $string3; 
    ?> 
    </body> 
</html> 

對於我試圖在

存儲信息上面的代碼
$_SESSION['str'] 

沒有被保存。然而,當我更換線

$string1 = (string)$_POST["message"]; 
    $_SESSION['str'] = $string1; 

隨着註釋掉行:

$string2 = "teststring"; 
    $_SESSION['str'] = $string2; 

文本「的TestString」並得到傳承下去。正如你所看到的,我嘗試將$ _POST [「message」]轉換爲一個字符串,但它不能以任何方式工作。有任何想法嗎?

+0

[執行top.location.href後丟失php發佈的字符串變量信息](http://stackoverflow.com/questions/8875154/losing-php-posted-string-variable-information-after-executing- top-location-href) – 2012-01-16 05:00:58

+0

這是一個來自同一個項目的更嚴格的問題,因此也有相似之處。 – 2012-01-16 06:12:47

回答

0

行:

echo("<script>top.location.href='" . $dialog_url . "'</script>"); 

是導致腳本從頂部再次執行以上。這個問題有兩個問題,那就是我的信息存儲在一個普通的變量中,當腳本重新開始時會被擦除,修復的方法是使用會話變量。西奧另一個問題是不是當腳本開始了,讀行:

$string1 = (string)$_POST["message"]; 

所以被刪除的變量有沒有張貼這一次。我通過用以下代替上面的行來解決這個問題:

if(empty($ _ SESSION ['string'])) $ _SESSION ['string'] = $ _ POST [「message」]; ($ _SESSION ['string'])) $ _SESSION ['string'] = $ _ POST [「message」];

1

您不應該將其轉換爲字符串,因爲默認情況下PHP會將其視爲字符串。

我能想到的唯一的事情是,你確定$_POST['message']擁有一些東西嗎?迴應它以確保它不是空的。

嘗試這樣:

$_SESSION['str'] = (empty($_POST['message'])) ? "empty" : $_POST['message']; 

而且,在你的HTML,

<input name="message" type="text" value=""> 

你沒有關閉輸入標籤。

+0

我試過了回聲測試。數據正在從表單中獲取。 – 2012-01-16 04:45:45