【发布时间】:2020-11-13 10:33:42
【问题描述】:
我在 reactJS 中有一个网站,我想让我的用户在我的网站上注册,所以我有代码:
import React from 'react'
import axios from 'axios'
import './Style/button.css'
class Register extends React.Component {
constructor(props) {
super(props);
this.state = {
email: '',
password: '',
confirmPassword: ''
}
}
handleFormSubmit(event) {
event.preventDefault();
let formData = new FormData();
formData.append('email', this.state.email)
formData.append('password', this.state.password)
console.log(formData);
axios({
method: 'post',
url: './api/contact/contact.php',
data: formData,
config: { headers: { 'Content-Type': 'multipart/form-data' } }
})
.then(function (response) {
//handle success
console.log(response)
})
.catch(function (response) {
//handle error
console.log(response)
});
}
render() {
return (
<form className="formulaire">
<fieldset>
<legend> Register : </legend>
<p>Mail adress :</p>
<input type="text" placeholder="Mail" name="email" value={this.state.email} onChange={e => this.setState({ email: e.target.value })}></input>
<br />
<p>Choose a password :</p>
<input type="password" placeholder="password" name="password" value={this.state.password} onChange={e => this.setState({ password: e.target.value })}></input>
<br />
<p>Confirm your password :</p>
<input type="password" placeholder=" confirm password" name="confirmPassword" value={this.state.confirmPassword} onChange={e => this.setState({ confirmPassword: e.target.value })}></input>
<br /><br /><br /><br />
<input className="button" type="submit" onClick={e => this.handleFormSubmit(e)} value="Sign up" />
</fieldset>
</form>
);
}
}
export default Register;
当我想用 axios 将信息发送到我的 php 文件时:
<?php
$host = "localhost";
$user = "root";
$password = "azertyuiop3104";
$dbname = "reactdb";
$id = '';
$con = mysqli_connect($host, $user, $password, $dbname);
$method = $_SERVER['REQUEST_METHOD'];
$request = explode('/', trim($_SERVER['PATH_INFO'], '/'));
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
switch ($method) {
case 'GET':
break;
case 'POST':
$email = $_POST["email"];
$password = $_POST["password"];
$sql = "insert into user (username, password) values ('$email', '$password')";
break;
}
// run SQL statement
$result = mysqli_query($con, $sql);
// die if SQL statement failed
if (!$result) {
http_response_code(404);
die(mysqli_error($con));
}
if ($method == 'POST') {
echo json_encode($result);
} else {
echo mysqli_affected_rows($con);
}
$con->close();
我的文件 register.js(第一个代码)在 src/ 目录中,我的 contact.php(第二个代码)在 src/api/contact/ 目录中
我不知道如何解决这个问题,如果有人可以帮助我吗?
【问题讨论】:
-
您收到 404 响应,这通常意味着您只是针对一个不存在的 URL,但由于在这种情况下,如果您的数据库查询,您的 PHP 脚本本身会响应 404 状态代码失败了,很可能是后者。所以,找出这两种情况中的哪一种——然后调试为什么你的数据库查询失败了,如果是后者……
-
“我的contact.php(第二个代码)在src/api/contact/目录中”——你项目的web根目录到底指向什么?跨度>
-
切勿以明文形式或使用 MD5/SHA1 存储密码! 仅存储使用 PHP 的
password_hash()创建的密码哈希,然后您可以使用password_verify()进行验证。看看这个帖子:How to use password_hash 并了解更多关于bcrypt & password hashing in PHP -
在代码中使用
die(mysqli_error($$conn));是一个非常糟糕的主意,因为它可能会泄露敏感信息。更多解释见这篇文章:mysqli or die, does it have to die? -
“我很确定我的 php 代码运行良好” - 很确定还不够好,你需要真正验证之类的东西这。这就是调试是 - 确保你的代码做你期望它做的,而不是“相当确定”。