2014-01-24 124 views
5

我在codeigniter中有一個php應用程序,我遇到了以下問題。 隨機提交表單時,會丟失發佈數據。 我試過以四種不同的方式訪問發佈數據。表單數據丟失

print_r($this->input->post()); 
print_r($_POST); 
print_r(file_get_contents('php://input')); 
print_r($_REQUEST); 

所有這些都不返回任何內容或空數組。 這隻在使用Ipad或Iphone時纔會發生,但它已經發生在桌面Safari瀏覽器上進行了50次以上的測試。 當在PC瀏覽器上測試大約100次(firefox,chrome,IE)時,它並沒有發生,只有safari中的一次。

表單的代碼;

<form id="email_report_form" name="email_report_form" method="post" accept-charset="utf-8" action="/handleajax/email_page" class="email_report_form ajaxform" onsubmit="return validate();"> 
    <div class="form_step_container clearfix"> 
     <div class="element clearfix"> 
      <div class="col_left"> 
       <label>Email: <span class="required">*</span></label> 
      </div> 
      <div class="col_right"> 
       <input type="text" name="form_email_to" id="form_email_to" /> 
       <div>&nbsp;</div> 
       <label>Separate multiple email addresses with a comma</label> 
      </div> 
     </div> 
     <div class="element clearfix"> 
      <div class="col_left"> 
       <label>Your Message:</label> 
      </div> 
      <div class="col_right"> 
       <textarea name="form_email_message" cols="125" rows="5" onkeypress="return checkLength(event, this, 1000);"></textarea> 
       <label>(Maximum of 1000 characters)</label> 
       <br /> 
       <input type="hidden" name="redirect_path" id="redirect_path" value="" /> 
       <input type="submit" value="Send" class="btn btn-primary" /> 
      </div> 
     </div> 
    </div> 
    <div class="element clearfix"> 
     <i>Information entered in this form will not be used for marketing purposes or passed to third parties.</i> 
    </div> 
</form> 

onSubmit validate()的代碼;

function validate() { 
    element = document.getElementById("form_email_to"); 
    addresses = element.value.split(","); 
    for (var i = 0; i < addresses.length; i++) { 
     address = addresses[i].replace(/^\s*|\s*$/g, ""); 
     if (!validateEmail(address)) { 
      alert('The email address "' + address + '" is invalid.'); 
      element.focus(); 
      return false; 
     } 
    } 

    if (window.location.hash.length > 2) { 
     $('#redirect_path').val(window.location.hash.substring(2)); 
    } else { 
     $('#redirect_path').val(window.location); 
    } 

    $('#email_report').slideUp(); 
    return true; 
} 

表單提交給函數的代碼;

public function email_page() { 
    echo "<br/>ci<br/>"; 
    print_r($this->input->post()); 
} 

正如您所看到的,這是我回應帖子數據的地方,此時數據已丟失。 有誰知道我爲什麼遇到這個問題以及如何解決它?

+0

我認爲代碼中沒有任何錯誤,請檢查config.php文件,特別是csrf_protection。 – Rajnish

+1

可能的原因可能是302或301重定向。您將表單提交至/ handleajax/email_page。如果您的web服務器或php將用戶重定向到其他位置,您將失去表單數據。當它是301永久性重定向時,大多數瀏覽器會在它們被重定向一次之前自動轉到新的位置。這只是衆多可能性中的一種,但很容易檢查。 – jan

+0

你使用真正的iPad或iPad的模擬器? –

回答

0

你可能會看看這個,這個人發現它是一個問題,當在服務器上進行協商時,你可能檢查你的服務器或者進行某種協商php頭部,在HTTP響應中檢查你的接受和他們一起玩,看一看這個

嗯,是的,我已經做了所有已經和它沒有透露任何, 這就是爲什麼我要求幫助......失敗請求跟蹤我張貼 只是我不得不繼續最顯露的事情。

通過我的 服務器與我們的測試服務器的所有配置進行挖掘後發現它有點不同。謝天謝地,我有這個區別,並且 能夠發現它。

認證>集成Windows身份驗證>高級設置

商> [協商,NTLM] < - 不工作驗證>集成Windows身份驗證>高級設置>供應商> [NTLM] < - 作品

所以看起來它與野生動物園的認證堆棧, 後身體協商已被啓用時不知何故被搞砸了一個錯誤。它 沒有任何意義,爲什麼會發生這種情況,但真的我看到一個 許多其他奇怪的行爲與5.1驗證。很多時候, 但並非總是如此,當它嘗試 來驗證頁面所做的子請求(css/js/img)時,我會得到多個密碼提示。我 不認爲這是一個與IIS的錯誤,因爲每個其他瀏覽器,甚至5.0是完全好的,並且NTLM堆棧應該被正確實現,並且 長時間保持穩定......除非最近的Windows更新 區域可能會有所貢獻...值得一提的是至少在 。星期一,我會跟進狩獵旅行者,看看我能否找到潛在的問題 。

感謝

鏈接這裏http://forums.iis.net/t/1182376.aspx?IIS7+5+receives+empty+post+body+from+Safari+5+1+

祝你好運!