使用 URLSearchParams 传递的数据是 PHP 后端中的其他内容

Passed data with URLSearchParams is something other in PHP backend

我正在尝试通过调用后端来创建异步验证。我需要使用 let params = new URLSearchParams(); params.append('email', registerEmail); 传递数据,因为在其他方面 PHP 看不到 $_POST[email].

我附加到参数的

registerEmail123@123.pl.

    let params = new URLSearchParams();
    params.append('email', registerEmail);

    return axios.post('/api/auth/checkUnique.php', params, axiosConfig)
        .then(res => {
            console.log('true');
            console.log(res);
            return true;
        })
        .catch(res => {
            console.log('false');
            console.log(res);
            return false;
        });

在后端我正在做 select 使用这个值做 db 之前 var_dump() 它。

var_dump('email is: ');
var_dump($_POST['email']);

$query = "
    SELECT 
      * 
    FROM 
      " . $this->table_name . " 
    WHERE 
      nick = ?
    OR
      email = ?
  ";

// prepare query statement
$stmt = $this->conn->prepare($query);

// bind params
$stmt->bindParam(1, $nick);
$stmt->bindParam(2, $email);

// execute query
$stmt->execute();

//count if there is any
$num = $stmt->rowCount();

if ($num > 0)
{
    return false;
}
else
{
    return true;
}

虽然我确信在我的数据库中我有一封电子邮件 123@123.pl 但找不到它并且它正在返回 true。

var_dump() 第一行中的函数返回 data: "string(10) \"email is: \"\nstring(25) \"[object HTMLInputElement]\"\n"。我认为这并不完全是我想要的 123@123.pl,这就是为什么我的 SELECT 找不到任何记录。

为什么?

就像你说的那样返回 object HTMLInputElement, 那不好。

return axios.post('/api/auth/checkUnique.php', params, axiosConfig)

PHP 期望得到 <input name='email'> 或本例中的类似 params 必须是类型 json

{email: some@email.com}

还有你的问题。