【问题标题】:Sending data to a php file from reactJS with axios使用 axios 从 reactJS 将数据发送到 php 文件
【发布时间】: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 代码运行良好” - 很确定还不够好,你需要真正验证之类的东西这。这就是调试 - 确保你的代码做你期望它做的,而不是“相当确定”。

标签: php reactjs axios mariadb


【解决方案1】:

另外,请确保托管后端的端口是 3000。

axios({
    method: 'post',
    url: 'http://localhost:3000/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)
  });

【讨论】:

  • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 2016-08-20
相关资源
最近更新 更多