2012-04-05 15 views
1

我最近問這個問題Posting data with curl - actually refreshing to the next page但我很快意識到,該解決方案是不完全偉大的...嘗試在PHP頁面之間發送數據;郵政/捲曲沒有工作,會議越來越凌亂

所以我通過PHP頁面之間的數據在幾個地方。這裏是我當前的問題:

我靠餅乾,所以我在每一個頁面的頂部是否餅乾已啓用:

session_start(); 
if (!isset($_COOKIE['PHPSESSID'])) { 
    if ($_GET['rd'] == '1') { 
     header('Location: *redirect url*'); 
    } else { 
     *refresh the page, setting 'rd' to '1'* 
    } 
} 

然而,因爲這是每個頁面上的「頭」,它需要是通用的。例如,發送給它的任何帖子或獲取數據(來自另一個頁面或表單)應發送到重定向頁面。

獲取很容易,因爲我可以將它包含在url中,但是我一直在Post方面遇到問題。

我開始捲曲發送數據發佈到下一個頁面,但我意識到,這是不是真的要到頁面

$ch = curl_init($some_url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'myvar=something'); 
curl_exec($ch); 
curl_close($ch);$ch = curl_init($some_url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'myvar=something'); 
curl_exec($ch); 
curl_close($ch); 

捲曲後不會加載$網址;它返回它

所以我被建議使用會議,我很快意識到,它不是一個很好的解決方案;

  1. 重定向時,如果設置了POST數據到Session變量(存儲),然後使用後的數據每個頁面都需要檢查,如果數據在發佈或會話。
  2. 效率不高 - 我在兩頁之間發送數據,不一定關於會話的信息。

關於數字2,我設置了另一個會話變量來告訴下一頁,如果發佈數據已被移到會話。但是,每次我必須重置該變量時,它會使事情變得複雜而不整潔。

示例: 我有一個註冊頁面,將表單數據發送到驗證頁面。這兩個都有頭來檢查cookie是否啓用。

發佈數據發送到驗證頁面,如果有問題,我不能將數據發回驗證頁面(告訴用戶有什麼問題),我必須設置會話變量與註冊錯誤。每一次,我都必須取消註冊錯誤變量。

現在我不認爲我在驗證頁面上需要cookies,但我不想要任何漏洞,我不知道我將在稍後添加什麼。

回到問題

  1. 我需要檢查,如果餅乾每一頁上啓用。
  2. 我不知道我目前的應用程序是否是最有效的方式(重定向);這是 無疑造成了很大的問題
  3. 如果有人能告訴我如何 檢查網站的Cookie重定向(和不 別的衝突),這是作爲一個 解決好
  4. 我不想依靠javascript或隱藏表格;我想要控制體驗
  5. 我需要有效地在兩頁之間發送數據 。不喜歡某些應用程序的會話,因爲我需要 設置和取消設置 每個頁面的變量。

我知道這是一個很大的任務,但如果有人可以幫助它將不勝感激!

+1

更準確地說,你想要做什麼?爲什麼「在兩頁之間發送數據」?用戶將在頁面之間旅行,並且您需要每個頁面都知道另一個頁面上的數據?這只是爲了完成表格,還是你在做更復雜的事情? – Aerik 2012-04-05 18:28:55

+0

可以說我有兩個頁面:一個表單和另一個驗證。表單通過表單發送發佈數據,另一個檢查錯誤。如果有錯誤,則必須將錯誤發送回窗體以顯示它們。我可以使用會話,但數據僅適用於1頁,並且每次在兩個頁面之間發送數據時,Id都必須設置和取消設置會話變量。在這個例子中,如果我把這兩個頁面放在一起,它會工作,但還有其他一些情況;最重要的檢查cookies和保存發佈數據 - 閱讀我的帖子在底部它解釋了我的主要問題 – Raekye 2012-04-06 15:15:13

回答

1

如果所有中間頁面正在做的是驗證表單數據,請將其廢棄;只需在同一個PHP腳本中完成。在最簡單的,你可以有:

<?php 
    $yourkey = 'goeshere'; 
    if (!isset($_COOKIE[$yourkey])) { 
     setcookie($yourkey, $value, $expires); 
    } 

    if (isset($_POST['submit'])) { 
     $errors = array(); 
     // do validation here 
     // iterate over your fields and add any errors to $errors array 
     if (empty($errors)) { 
      // redirect if there are no errors, if you really need to 
      header('Location: success.php'); 
      exit; 
     } 
    } 
?> 
<html> 
    <body> 
    <form method="post" action=""> 
     <label for="name">Your name:</label> 
     <input type="text" name="name" value="<?php echo isset($_POST['name']) ? $_POST['name'] : ''; ?>" id="name" /> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
    </body> 
</html> 

有XSS漏洞echo在HTML頁面中荷蘭國際集團POST數據,但我會離開,你來固定。

+0

這實際上並沒有解決原來的問題,但我會採取你的建議。我的主要問題是,有代碼檢查cookie是否已設置(即啓用cookie)。如果不是,它會嘗試設置一個並重定向到同一頁面。我的意思是,從技術上講,第一次用戶訪問我的網站時,應該在一些類似「registration.php」的通用頁面上,但我試圖使其可擴展,以便如果由於某種原因Cookie在驗證頁面中,發佈數據在重定向期間仍將保留。我知道這很複雜,不要以爲我是以最好的方式解釋它...... – Raekye 2012-04-05 21:26:55

+0

@Raeki你知道你可以在同一頁上做到這一點;你不需要重定向?您可以檢查cookie並將其設置在HTML上方的PHP塊中,就像我在示例中所做的一樣。只需將您的代碼放在表單驗證上方的Cookie中即可。 – 2012-04-06 11:08:34

+0

我花了一個星期的時間;該cookie不會顯示,直到後續頁面。這樣的代碼。如果cookies被禁用,那麼這段代碼只會嘗試每次都設置cookie。它讓我感到困惑的時間最長,並且我做了很多測試。只有下一頁可以檢查cookie是否已成功設置 – Raekye 2012-04-06 15:13:46

0

我不確定這是否有幫助,但也許你可以嘗試限制頁面的數量?我通常會做的,就是在一個php頁面上進行驗證。您可以檢查用戶是否在開始時發送了某些內容,如果他這樣做,請檢查它並顯示任何錯誤。如果沒有,請顯示錶格。