Warum ist $_POST hier leer?
Hi, arbeite gerade an nem Kontaktformular, welches mit JQuery und Ajax gesendet werden soll. Hier der Code:
let form = $(this);
let actionUrl = "assets/php/contact.php";
$.ajax({
type: "POST",
url: actionUrl,
contentType: "application/json",
data: form.serialize(),
success: function (backendError) {
console.log(backendError);
errorHandler(backendError);
},
error: function () {
console.log("failure");
alert("Internal Error occured. Please try again later");
}
});
hier der PHP Code zum senden:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
try {
$errors = array();
$name = "";
$email = "";
$human = "";
$message = "";
if (empty($_POST["name"])) {
$errors[] = "name";
} else {
$name = $_POST["name"];
}
if (empty($_POST["email"])) {
$errors[] = "email";
} else {
$email = $_POST["email"];
}
if (empty($_POST["human"])) {
$errors[] = "human";
}
if (empty($_POST["message"])) {
$errors[] = "message";
} else {
$message = $_POST["message"];
}
if (count($errors) === 0) {
$to = "my@email.de";
$subject = "Kontaktformular - " . $name;
$message = "";
$additional_headers = array(
"From" => $email,
"Reply-To" => $email,
"X-Mailer" => phpversion()
);
mail($to, $subject, $message, $additional_headers);
$response["error"] = false;
echo json_encode($response);
exit;
} else {
$response["error"] = $errors;
echo json_encode($response);
exit;
}
} catch (Exception $exception) {
// in Log File Time + Error + IP
exit;
}
}
mein Problem: das POST Array is leer. Habs mir mal ganz oben ausgeben lassen, und stand nix drin, obwohl jquery die inputfelder per POST an das PHP File sendet. Ich denke, dass ich irgendwas bei der $ajax methode falsch gemacht habe, und es deshalb net funktioniert. bin am verzweifeln :) danke für jede Hilfe!
achso, ich hab jetzt nicht den ganzen JavaScript code reingepackt, also ich hab noch vor der Ajax methode clientseitige input validierung und e.preventDefault(), daran kanns also net liegen :)
2 Antworten
Mit jQuery hab ich nicht so viel gearbeitet, aber ich würde mir als erstes mal anschauen, was eigentlich rausgeschickt wird.
Unter Chrome in den Dev Tools auf "Network" und auf "Fetch/XHR" begrenzen. Wenn du dann den AJAX-Call machst, sollte der Request dann in der Liste auftauchen, da kannst du ihn dann inspizieren und dir unter anderem die Payload anschauen. Dann hättest du zumindest mal einen Anhaltspunkt ob gar nichts oder was falsches geschickt wird.
Funktioniert jetzt, nachdem ich contectType bei der ajax methode rausgenommen hab :) ich denke mal, das jquery versucht hat die FormData in nen String umzuwandeln, das aber logischerweise nicht funktioniert hat. Daher wurden wahrscheinlich die Daten auch nicht richtig in Post eingelesen. Funktioniert jetzt auf jeden Fall. Danke an euch beide :)
dein
contentType: "application/json",
rausnehmen .
Danke, das war das Problem :) hast du noch ne Erklärung warum ich das rausnehmen muss?
weil der grundtyp für POST ist
contentType: 'application/x-www-form-urlencoded',
sonst kommt glaub ich alles nur in $_POST['data']
sonst kommt glaub ich alles nur in $_POST['data'] als JSON string
Hab da gerade nachgeschaut, rausgeschickt wirds genau so wie ichs will... Hab da jetzt bisschen was geändert, hab anstatt form.serialize() die Form-Daten in ein FormData Objekt gepackt und das wird auch richtig gesendet. Die Dinge die ich in die einzelnen input Felder geschrieben habe, stehen da. Das PHP File sagt aber immernoch, POST is leer :(