【发布时间】:2020-03-16 09:38:46
【问题描述】:
编辑:我现在明白,为了重定向,我需要使用 ajax,这取决于我从 php 获得的响应,这要归功于 ADyson。最佳答案,谢谢老兄,谢谢大家的帮助。
我一直在尝试在 PHP 上制作一个简单的登录表单,将 POST 请求变量发送到 PHP 并使用 MySQL 进行身份验证。我已经尝试了所有方法,例如配置 xampp,将 htaccess 文件放在同一个文件夹中,尝试了各种 ajax 语法,但它仍然无法正常工作。我把它做得很简单,所以我可以轻松调试。问题是成功函数正在触发,但未将帖子变量发送到位置标头不会转到 register.php。这是代码:
PHP
<?php
require_once 'dbconnect.php';
if (isset($_POST['nickname']) && !empty($_POST['nickname'])) {
$nickname = $_POST['nickname'];
}
if (isset($_POST['password']) && !empty($_POST['password'])) {
$password = $_POST['password'];
}
$sql = "SELECT nickname,password FROM users WHERE nickname = '$nickname' and password = '$password'";
$result = mysqli_query($mysqli, $sql);
$count = mysqli_num_rows($result);
if ($count == 1) {
header('location:register.php');
} else {
header("HTTP/1.1 500 Internal Server Error");
}
?>
JS
$("#submitBtn").on("click",function(){
$.ajax({
type:"POST",
url:"dologin.php",
data:{nickname:"alex",password:"123"},
success:function(){
alert("skata");
}});
});
【问题讨论】:
-
如果你想重定向用户,你为什么使用ajax而不是简单的表单提交?
-
“所以位置标头不会转到 register.php” - 即使您的 PHP 脚本 确实 发出了正确的位置标头,这也不会重定向您的前端 - 因为您正在发出后台请求。如果有的话,您必须将一些信息发送回 JS 部分,以便 that 可以决定在客户端的其他位置导航。
-
“post 变量没有被发送,因此位置标头不会转到 register.php”......正如 CBroe 所暗示的那样,这两件事是不相关的。您确定 POST 值真的没有被发送吗?你是如何验证的,究竟是什么?所有这部分都可以成功,但它仍然不会重定向您,因为您无法从 AJAX 请求重定向。事实上,AJAX 的全部意义 是允许您停留在同一页面上,而不需要重定向。如果要进行重定向,请使用普通形式的回发而不是 AJAX。
-
警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL 中。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
-
@mike510a 情况并非如此,如果它是关键字或其他一些要求(例如空格),您只需要一个字符串作为名称(您为什么要这样做?)