2014-01-24 12 views
5

Ich habe eine PHP-Anwendung in codeigniter und ich habe das folgende Problem. Wenn Sie ein Formular mit einem Ipad nach dem Zufallsprinzip senden, werden Postdaten verloren. Ich habe versucht, auf die Postdaten auf vier verschiedene Arten zuzugreifen.Formulardaten verloren

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

Alle von denen nichts oder ein leeres Array zurückgeben. Dies scheint nur zu passieren, wenn Sie ein Ipad oder Iphone verwenden, aber es ist passiert, Einmal aus mehr als 50 Tests auf einer Desktop-Safari. Beim Testen auf einem PC-Browser etwa 100 Mal (Firefox, Chrome, IE) ist es nicht aufgetreten, nur das eine Mal in Safari.

Der Code für das Formular;

<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> 

Code für die 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; 
} 

Code für die Funktion, an die das Formular übergeben wird;

Wie Sie sehen können, ist dies, wo ich die Post-Daten aushöre und an dieser Stelle die Daten verloren gegangen sind. Weiß jemand, warum ich dieses Problem erlebe und wie ich es lösen kann?

+0

Ich denke, es gibt keine Fehler im Code, überprüfen Sie bitte die config.php-Datei und besonders csrf_protection. – Rajnish

+1

Eine mögliche Ursache könnte eine 302 oder 301 Redirect sein. Sie senden das Formular an/handleajax/email_page. Wenn dein Webserver oder PHP den Benutzer an einen anderen Ort weiterleitet, verlierst du deine Formulardaten. Wenn es sich um eine permanente 301-Umleitung handelt, werden die meisten Browser automatisch zum neuen Standort weitergeleitet, nachdem sie bereits einmal umgeleitet wurden. Dies ist nur eine der vielen Möglichkeiten, aber es ist einfach zu überprüfen. – jan

+0

Verwenden Sie ein echtes iPad oder einen iPad Simulator? –

Antwort

0

Sie könnten sich dies ansehen, dieser Typ hat festgestellt, dass es ein Problem ist, wenn Negotiate auf dem Server läuft, Sie könnten Ihren Server überprüfen oder eine Art von Verhandlungs-PHP-Header setzen, überprüfen Sie Ihre Akzeptiert in der HTTP-Antwort und mit ihnen zu spielen, haben einen Blick auf diese

Nun ja, ich habe alles getan, was bereits und es hat nicht alles verraten, , weshalb ich um Hilfe gebeten ... Die gescheiterte Anfrage Spur I gepostet gab es einfach die aufschlussreichste Sache, die ich weitermachen musste.

Nach dem Graben durch die Konfiguration meines Servers gegenüber unserem Testserver etwas herausgefunden. Zum Glück hatte ich diesen Unterschied und war in der Lage, es zu erkennen.

Authentication> integrierte Windows-Authentifizierung> erweiterte Einstellungen

providers> [Verhandeln, NTLM] < - Funktioniert nicht Authentication> Integrierte Windows-Authentifizierung> erweiterte Einstellungen> Anbieter> [NTLM] < - Werke

So sieht es aus wie es ein Fehler mit Safari Authentifizierungs-Stack ist, wo der Post Körper wird irgendwie verkorkst wenn negotiate aktiviert ist. Es macht keinen Sinn, warum das passieren würde, aber ich sehe wirklich eine viele andere ungerade Verhalten mit Authentifizierung in 5.1. Viele Male, , aber nicht immer, ich werde mehr als eine Passwortabfrage bekommen, wenn es versucht, die Kindanfragen zu authentifizieren, die die Seite macht (css/js/img). I glaube nicht, dass es ein Fehler mit IIS ist, da jeder andere Browser sogar 5.0 ist völlig in Ordnung, plus, dass NTLM-Stack sollte ordnungsgemäß implementiert und unberührte stabil für eine lange Zeit jetzt ... es sei denn, ein aktuelles Windows-Update in diesem Bereich könnte beitragen ... das ist es wert, unter am wenigsten auschecken.Am Montag werde ich mit den Safari-Leuten aufwarten und sehen, ob ich das zugrunde liegende Problem finden kann.

Dank

Link-hier http://forums.iis.net/t/1182376.aspx?IIS7+5+receives+empty+post+body+from+Safari+5+1+

Viel Glück!