Menemui skrin hitam apabila cuba mendapatkan semula data pengguna dari bahagian belakang
P粉921130067
P粉921130067 2024-03-29 11:08:15
0
1
339

Di bahagian hadapan saya menggunakan ReactJs dan saya telah cuba mendapatkan data pengguna yang dilog masuk dari bahagian belakang (PHP) melalui axios.get, tetapkan syarat untuk pengguna dan jika dipenuhi mereka akan dikembalikan ke halaman log masuk Bahagian belakang tidak mengembalikan apa-apa dan pulangan muncul Dalam kes log masuk, kerana fail di mana bahagian hadapan bertanggungjawab untuk memproses data kosong, tiada apa yang dikembalikan.

Saya telah menyediakan sesi, menggantikan $_SESSION[] dengan $_POST[] dan meletakkan coretan kod ini di bahagian atas halaman:

error_reporting(E_ALL);
ini_set('display_errors','1');

Tetapi tiada apa yang berfungsi dan ralat tidak ditunjukkan. Saya juga menguji dalam Posman dan ia kembali kosong, tetapi apabila saya menguji dalam x-www-form-urlencoded dengan semua yang ditetapkan dan kunci dan nilai ditulis dalam apa jua cara yang mungkin, ia mengembalikan ralat 400, Semua medan mesti diisi .

Di bawah saya akan siarkan coretan kod untuk log masuk dan pendaftaran (di mana input pengguna diproses untuk dihantar ke pangkalan data).

Log masuk

$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();
        
            }

Pendaftaran - Tetapkan juga $_SESSION di sini kerana selepas mengesahkan akaun, saya bercadang untuk mengarahkan pengguna terus ke papan pemuka

$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();
        }
    }

Beginilah cara saya mengendalikan permintaan POST/GET di bahagian hadapan

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]);

Output fail log masuk.php

Jika anda perlu melihat kod bahagian hadapan dan bahagian belakang yang lain, sila beritahu saya.

Editor:

Sekarang saya dapat melihat apa yang salah dengan kod tetapi walaupun selepas menerima mesej Log masuk berjaya Saya terus dialihkan ke halaman log masuk dan hanya melihat axios.get not retriving apa-apa, hanya axios.post Berfungsi:

P粉921130067
P粉921130067

membalas semua(1)
P粉364642019

Masalahnya ialah anda menghantar JSON 数据,但尝试使用 $_POST 来提取它 根据文档适用于 x-www-form-urlencodedmultipart/form-data data borang dari bahagian hadapan.

Daripada menghantar data JSON, anda boleh menghantar data yang dijangkakan oleh bahagian belakang anda, yang merupakan rentetan parameter pertanyaan:

.post("http://localhost/api/login.php", new URLSearchParams({
  email: userInput.email,
  password: userInput.password,
}))
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!