2014-10-05 81 views
0

新信息:
我用在$_REQUESTprint_r功能,很奇怪的東西實在是太發生的事情。一些值正在被GET正確傳遞,例如在「TRUE」中傳遞的另一個表單上的值。這可以在print_r輸出中看到,但不會寫入文件中......但是,仍然沒有更接近找到解決我的問題的方法。奇怪的錯誤與複雜的PHP表格處理

我正在製作一個頁面,其中包含許多根據AJAX需要加載的表單。這一切工作正常,解析名稱:值對並適當地存儲它們。

我的錯誤發生在PHP解析用戶完成時由AJAX發送的GET請求時,它似乎只從特定字段檢索值。

這個想法是,用戶可以從任意數量的表單添加數據,然後轉換成GET請求併發送到服務器。

JavaScript正在完善我的請求,並且所有表格都能正確發送。

根據用戶提交的表單,數據由大型switch語句處理,該語句將相關名稱傳遞給可變參數函數,該參數獲取值並創建用於寫入文件的字符串。

奇怪的錯誤是,只有一些值被寫入文件,其他人只有一個空行。 Apache或PHP沒有報告錯誤,也沒有在JavaScript控制檯中報告錯誤。

我會使用顏色表單,因爲這是一個更復雜的。

所以我添加顏色操作,然後單擊該按鈕,提交各種形式(這時候,它只是雖然顏色形式)

我的GET請求看起來是這樣的: actionIDs=Colour&coOptionSelect=Tinting&coColourEffect=Sepia&coRemoveColour=#000000&coRemoveFuzzNumber=0&coRemoveHueSelect=None&coReplaceColour=#000000&coReplaceFuzzNumber=0&coReplacementColour=#000000&coReplacementAlphaNumber=0&coReplaceHueSelect=None&coReplacementHueSelect=None

接下來,PHP有時會解析actionIDs部分,會有很多操作。這工作正常。

我們現在跳轉到switch語句的Color部分。

case "Colour": 
    $config = processAction("coOptionSelect", "coColourEffect", "coRemoveColour", "coRemoveFuzzNumber", "coRemoveHueSelect", "coReplaceColour", "coReplaceFuzzNumber", "coReplacementColour", "coReplacementAlphaNumber", "coReplaceHueSelect", "coReplacementHueSelect"); 
    file_put_contents($confpath . "colour.conf", $config); 
    break; 

寫入到正確的文件,但奇怪的是,只有coOptionsSelectcoColourEffect有它們的值寫入文件。這不是它們的輸入類型,因爲它們是類似於窗體上其他選擇的選擇語句。在其他形式上,它可能是數字輸入或文本輸入,而是正確提交。

它也不是隨機的,相同的將始終正確寫出。當我移動數值並且它仍然是正確寫入的相同數據時,它也不是位置,它們的位置不影響任何東西。

最後這裏是processAction函數。

function processAction() 
{ 
    $config = ""; 

    foreach(func_get_args() as $field) 
    { 
     $temp = isset($_REQUEST[$field]) ? $_REQUEST[$field] : null; 
     $config = $config . $temp . "\n"; 
    } 

    return $config; 
} 

最終的結果應該是所有數值應寫信給他們的相關文件正確,而不是在那裏從每個窗體只有幾個值寫入當前的問題,與其餘值被寫爲空行。

+0

簡而言之,請說明您嘗試了什麼以及您想要做什麼/預期結果。由於這個長時間的故事留下了一段時間沒有回答.. – 2014-10-05 18:50:25

+0

@PuzzledBoy這是相當長的,但沒有錯誤日誌解僱,我似乎無法精確確定錯誤可能在哪裏。 我的最終目標是處理來自AJAX發送的大量GET請求的值並將其寫入相關文件。 我的問題:只有一些值是爲了什麼而寫的,看似沒有邏輯。 我試過尋找各種錯誤日誌和寫出變量值以及試圖打破邏輯。沒有運氣。 – Arcana 2014-10-05 18:54:15

回答

1

你可能需要您的標誌編碼爲一個編碼方法%23

你也可以使用進行urlencode將它傳遞給你的變量之前做到這一點。

參考:http://php.net/manual/en/function.urlencode.php


更新:

如果你想嘗試通過JavaScript編碼我會嘗試使用這種方法

var newURL = 
    "http://example.com/index.php?url=" + encodeURIComponent(actionIDs); 

var newURL = 
    "http://example.com/index.php?url=" + escape(actionIDs); 

參考:Encode URL in JavaScript?

你有三個選擇:

  • escape()不會編碼:@*/+

  • encodeURI()不會編碼:[email protected]#$&*()=:/,;?+'

  • encodeURIComponent()不會編碼: ~!*()'

但在你的情況,如果你想要一個URL傳遞到其他頁面的GET參數,你應該使用escapeencodeURIComponent,但不encodeURI

查看堆棧溢出問題Best practice: escape, or encodeURI/encodeURIComponent進一步討論。

+0

這有幫助,所以謝謝你!現在值3,4和5也被正確寫入。然後它再次停止... 我使用JavaScript實現它在GET字符串上執行字符串替換我用「%23」替​​換「#」 它已經幫助,但它再次停止... – Arcana 2014-10-05 19:14:37

+0

有你試圖用JavaScript來添加編碼方法,而不是僅僅修復#符號?我更新了我的答案 – 2014-10-05 20:36:24

+0

我已經使用了escape,現在它都可以很好地傳遞給PHP,如print_r輸出所示。然而,我需要做些事情來讓我處理這個事情,因爲它現在看起來像是字符串數據。 編輯:雖然這對我來說應該沒問題,因爲我的問題是將數據傳給PHP,只要我能在某種程度上解析它,那就解決了我的問題! – Arcana 2014-10-05 21:26:18