gpt4 book ai didi

PHP MySQL 登录失败

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:59 24 4
gpt4 key购买 nike

我必须使用 PHP 和 MYSQL 创建一个登录系统。如果数据库中存在用户名和密码,则必须授予用户访问权限。我有以下代码,但在我输入字段后,它返回到同一页面。我是 php 和 stackoverflow 编程的新手。请帮忙。

    <?php
ini_set('display_errors',1);
error_reporting(E_ALL);
//Start session
session_start();

//Include database connection details
require_once('config.php');

//Array to store validation errors
$errmsg_arr = array();

//Validation error flag
$errflag = false;

//Connect to mysql server
$link = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if(!$link) {
die('Failed to connect to server: ' . mysql_error());
}

//Select database
$db = mysqli_select_db($link, DB_DATABASE);
if(!$db) {
die("Unable to select database");
}

//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysqli_real_escape_string($str);
}

//Sanitize the POST values
$login = clean($_POST['login']);
$password = clean($_POST['password']);

//Input Validations
if($login == '') {
$errmsg_arr[] = 'Login ID missing';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = 'Password missing';
$errflag = true;
}

//If there are input validations, redirect back to the login form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: index.php");
exit();
}

//Create query

$result=mysqli_query("SELECT * FROM login-teachers WHERE login=$login AND password=".md5($_POST['password'])."");

//Check whether the query was successful or not
if($result) {
if(mysqli_num_rows($result) == 1) {
//Login Successful
session_regenerate_id();
$member = mysqli_fetch_assoc($result);
$_SESSION['SESS_USERNAME'] = $member['member_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
$_SESSION['SESS_LAST_NAME'] = $member['lastname'];
session_write_close();
header("location: member-index.php");
exit();
}else {
//Login failed
header("location: login-failed.php");
exit();
}
}else {
die("Query failed");
}
?>

最佳答案

正如我在评论中所说:

你也没有在这里连接 $result=mysqli_query("SELECT...

然后我们有这个 SELECT * FROM login-teachers 你正在使用连字符。 必须打勾

SELECT * FROM `login-teachers`
  • MySQL 会将其解释为“登录 MINUS 教师”并认为您想要做数学。

检查错误后,仅此一项就会引发语法错误。

旁注:为避免打勾,请使用下划线作为分隔符重命名您的表格,选择权在您login_teachers

这个AND password=".md5($_POST['password'])."就是一个字符串。

它需要读作 AND password='".md5($_POST['password'])."'

旁注:如果 $login 是一个字符串,那么它也需要被引用。

然而,我会完全摆脱用于密码散列的 MD5。

您使用的 MD5 被认为不能安全地用作密码哈希函数。如果它是供您个人使用或教育目的,并且不会在 Web 上出现,那很好。

  • 只是不要让它上线

使用以下之一:

其他链接:

另外,不确定您是否首先保存了该散列,以及该列的类型是否正确以及它的长度是否足以容纳散列。

也不确定您的 POST 数组是否包含值以及您的表单是否具有 POST 方法。对这些使用条件 !empty()

检查错误。

添加error reporting到您的文件的顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:显示错误只应在试运行中进行,绝不能在生产中进行。

同时将 or die(mysqli_error($link)) 添加到 mysqli_query()

然后这个 die("Unable to select database"); 得到真正的错误 mysqli_error($link) 如果有的话。

添加注释:

我不知道你在下面使用它,你已经在它上面声明了所有 4 个参数并且可以安全地删除它:

$db = mysqli_select_db($link, DB_DATABASE);
if(!$db) {
die("Unable to select database");
}

并确保正确定义了这些常量。

关于PHP MySQL 登录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com