javascript - 提交信息后,我如何成功地重定向到我的 .js 文件(reactjs)而不是我的 php 文件?
问题描述
截至目前,我已通过成功将信息插入数据库(SQL,phpMyAdmin),Home.js
但问题是每次用户输入信息并点击submit
时,它都会被重定向到我的demo.php
文件而不是Next.js
.
换句话说,如何才能使用户信息成功进入数据库并转到下一页?( Next.js
)?
我知道<form action="http://localhost/demo_react/api/demo.php" method={"POST"} encType="multipart/form-data">
将不可避免地带我去,demo.php
但如果我不使用它,那么什么都不会提交到我的数据库。
我做错了什么,我该如何解决?
这是Home.js
:
import React, { Component } from 'react';
import Next from '../Home/Next';
class Home extends Component {
constructor(props) {
super(props);
this.state = {
show: false
};
this.getPHP = this.getPHP.bind(this);
}
getPHP(e) {
this.setState({show: true});
let formData = new FormData();
fetch(`http://localhost/demo_react/api/demo.php`, {
method: 'POST',
body: formData
}).then(res => res.json())
.then(response => {
console.log('response');
console.log(response);
e.preventDefault();
});
}
render() {
const goNext = this.state.show;
if(goNext) {
return <Next/>;
}
return (
<div>
<form action="http://localhost/demo_react/api/demo.php" method={"POST"} encType="multipart/form-data">
<div className="form-group">
<label htmlFor="username">Email</label>
<input className="form-control" type="text" name="username"/>
</div>
<div className="form-group">
<label htmlFor="password">Password</label>
<input className="form-control" type="password" name="password"/>
</div>
<input className="btn btn-primary" type="submit" value="Login" onSubmit={e => this.getPHP(e)} name={"submit"}/>
</form>
</div>
);
}
}
export default Home;
这是demo.php
:
$connection = mysqli_connect("localhost", "root", "", "loginapp");
$username = $_POST['username'];
$password = $_POST['password'];
if(isset($_POST['submit'])) {
$query = "INSERT INTO users(username, password) ";
$query .= " VALUES('$username', '$password')";
$result = mysqli_query($connection, $query);
if (!$result) {
die("Query failed" . mysqli_error($connection));
} else {
echo "check database";
}
}
解决方案
不要使用 type="submit" 按钮。使用 type="button" 或 <button>。如果您的表单没有提交,则问题已解决。
显然,在您的 JS 代码中您需要发送信息。您可以在不触发表单提交的情况下收集并发送到 demo.php。我将向您展示一个基本示例。
var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
var user = (document.getElementById(form).username) ? encodeURIComponent(document.getElementById(form).username.value) : '';
var pass = (document.getElementById(form).password) ? encodeURIComponent(document.getElementById(form).password.value) : '';
var data = 'username=' + user + '&password=' + pass;
request.open('POST', document.getElementById(form).action, false);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset:UTF-8");
request.setRequestHeader("Content-length", data.length);
request.send(data);
if (request.status == 200) {
alert('Send OK.');
} else {
alert('Send error.');
}
包含的代码段获取 URL 以从表单操作本身发送信息。您可能可以对代码进行很多优化,但这是一个起点。此代码使用纯 JS,例如,您可以将其更改为 jQuery(例如,jQuery 版本更短)。
此外,如果您最终需要进行重定向,请改用 JS 重定向。
推荐阅读
- java - 用户 'root'@'localhost' 的访问被拒绝 - 无法使用 java 应用程序连接到数据库
- grep - 递归grep仅匹配模式的目录?
- apache-spark - 我的 Spark UI 事件时间线中的空白区域是什么?
- python - Keras sparse_categorical_accuracy 指标产生“不兼容的形状”错误
- java - 具有多对一引用的类的分页和排序问题
- python - 从左到右不同颜色的分布图
- javascript - 无法使用highcharts在angularjs中绘制饼图
- javascript - Webaudio 振荡器 start() 回调?
- python - Gitlab CI Runner 无法在 Python 中导入 Google.Cloud
- html - html节点溢出时完全隐藏div