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> </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?
Ich denke, es gibt keine Fehler im Code, überprüfen Sie bitte die config.php-Datei und besonders csrf_protection. – Rajnish
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
Verwenden Sie ein echtes iPad oder einen iPad Simulator? –