Im Frontend verwende ich ReactJs und habe versucht, die Daten des angemeldeten Benutzers vom Backend (PHP) über axios.get abzurufen, eine Bedingung für den Benutzer festzulegen und wenn sie erfüllt ist, werden sie zur Anmeldeseite zurückgeleitet Das Backend gibt nichts zurück und die Rückgabe erscheint. Da bei der Anmeldung die Datei, in der das Frontend für die Datenverarbeitung verantwortlich ist, leer ist, wird nichts zurückgegeben.
Ich habe die Sitzung eingerichtet, $_SESSION[] durch $_POST[] ersetzt und diese Codeausschnitte oben auf der Seite platziert:
error_reporting(E_ALL); ini_set('display_errors','1');
Aber nichts funktioniert und der Fehler wird nicht angezeigt. Ich habe es auch in Postman getestet und es kam leer zurück, aber als ich es in x-www-form-urlencoded getestet habe, wobei alles eingestellt und die Schlüssel und Werte auf irgendeine mögliche Weise geschrieben waren, gab es einen 400-Fehler zurück: Alle Felder müssen ausgefüllt werden .
Nachfolgend werde ich Codeausschnitte für die Anmeldung und Registrierung posten (wo die Eingaben des Benutzers verarbeitet und an die Datenbank gesendet werden).
Anmelden
$db = _db(); try { $q=$db->prepare("SELECT * FROM users WHERE email = :email"); $q->bindValue(":email", $_POST["email"]); $q->execute(); $row = $q->fetch(); if(!empty($row)){ if (password_verify($_POST["password"], $row["password"])) { $user = array( "user_id" => $row["user_id"], "first_name" => $row["first_name"], "last_name" => $row["last_name"], "email" => $row["email"], "company" => $row["company"], "phone_number" => $row["phone_number"], "verified" => $row["verified"], "token" => $row["token"], ); header("Content-type: application/x-www-form-urlencoded"); http_response_code(200); echo json_encode($user); exit(); } else { header("Content-type: application/x-www-form-urlencoded"); http_response_code(400); echo json_encode("Wrong email or password"); exit(); } } else { header("Content-type: application/x-www-form-urlencoded"); http_response_code(400); echo json_encode("User does not exist"); exit(); }
Registrierung – Legen Sie hier auch $_SESSION fest, da ich nach der Bestätigung des Kontos vorhabe, den Benutzer direkt zum Dashboard weiterzuleiten
$q=$db->prepare("INSERT INTO users(user_id, first_name, last_name, company, email, phone_number, password, forgot_password, token, verified) VALUES(:user_id, :first_name, :last_name, :company, :email, :phone_number, :password, :forgot_password, :token, :verified)"); $q->bindValue(":user_id", null); $q->bindValue(":first_name", $firstName); $q->bindValue(":last_name", $lastName); $q->bindValue(":company", $company); $q->bindValue(":email", $email); $q->bindValue(":phone_number", $phoneNumber); $q->bindValue(":password", $passwordHash); $q->bindValue(":forgot_password", $forgotPass); $q->bindValue(":token", $token); $q->bindValue(":verified", false); $q->execute(); $user_id = $db->lastInsertId(); $to_email = $email; $subject = "Email subject"; $message = "Click on the following link to verify your account: <a href='http://localhost/api/confirm_account.php?token=$token'>Confirm your account</a>"; require_once(__DIR__."/emailVerification/send_email.php"); $user = array( "user_id" => $_SESSION["user_id"] = $row["user_id"], "first_name" => $_SESSION["first_name"] = $row["first_name"], "last_name" => $_SESSION["last_name"] = $row["last_name"], "email" => $_SESSION["email"] = $row["email"], "company" => $_SESSION["company"] = $row["company"], "phone_number" => $_SESSION["phone_number"] = $row["phone_number"], "verified" => $_SESSION["verified"] = $row["verified"], "token" => $_SESSION["token"] = $row["token"], ); header("Content-type: application/json"); http_response_code(200); echo json_encode($user); exit(); } }
So gehe ich mit POST/GET-Anfragen im Frontend um
const handleLogInSubmit = (event) => { event.preventDefault(); axios .post("http://localhost/api/login.php", { email: userInput.email, password: userInput.password, }) .then((response) => { if (response.data) { navigate("/dashboard"); } else { setErrorMessage("Login failed, try again"); } }) useEffect(() => { axios.get("http://localhost/api/login.php") .then((response) => { if(response.data){ setUser(response.data); console.log(response.data) } else { console.log(response) navigate("/login"); } }); }, [navigate]);
Ausgabe der login.php-Datei
Wenn Sie den Rest des Frontend- und Backend-Codes sehen möchten, lassen Sie es mich bitte wissen.
Herausgeber:
Jetzt kann ich sehen, was mit dem Code falsch läuft, aber selbst nachdem ich die Meldung Anmeldung erfolgreich erhalten habe, werde ich immer wieder zur Anmeldeseite weitergeleitet und sehe nur, dass axios.get nichts abruft, nur axios.post Funktioniert:
问题是您从前端发送
JSON
数据,但尝试使用$_POST
来提取它 根据文档适用于x-www-form-urlencoded
或multipart/form-data
表单数据。您可以发送后端期望的数据,而不是发送 JSON 数据,这是一串查询参数: