gpt4 book ai didi

php - 使用用户名和密码字段中输入的任何内容进行脚本登录

转载 作者:行者123 更新时间:2023-11-29 21:15:11 24 4
gpt4 key购买 nike

抱歉,但我再次为那些可以花一点时间帮助陷入困境的菜鸟的人带来一篇很长的帖子。

我遇到了一些困难,之前在这里询问过如何在登录时仅提供用户名和密码的情况下从数据库中提取任何用户的名字和姓氏的指导。

现在编辑我的代码后,似乎任何人都可以使用他们想要的任何内容登录。

Login.php脚本如下:

<?php
session_start();

require_once 'classes/membership.php';
$membership = new Membership();

// If the user clicks the "Log Out" link on the index page.
if(isset($_GET['status']) && $_GET['status'] == 'loggedout') {
$membership->log_User_Out();
}

// Did the user enter a password/username and click submit?
if($_POST && !empty($_POST['username']) && !empty($_POST['pwd'])) {
$response = $membership->validate_User($_POST['username'], $_POST['pwd']);
}
?>

这首先指向Membership.php:

<?php

require 'mysql.php';

class Membership {

function validate_user($un, $pwd) {
$mysql = New Mysql();
$ensure_credentials = $mysql->verify_Username_and_Pass($un, md5($pwd));

list($ensureCredentials, $data) = $mysql->verify_Username_and_Pass($un, md5($pwd));
if($ensure_credentials) {
$_SESSION['status'] = 'authorized';
$_SESSION['fname'] = $data['fname'];
$_SESSION['lname'] = $data['lname'];
header("location: medlem.php");
} else return "Please enter correct username and password";

}

function log_User_Out() {
if(isset($_SESSION['status'])) {
unset($_SESSION['status']);

if(isset($_COOKIE[session_name()]))
setcookie(session_name(), '', time() - 1000);
session_destroy();
}
}
function confirm_Member() {
session_start();
if($_SESSION['status'] !='authorized') header("location: login.php");
}
}

这再次指向 mysql.php:

<?php

require_once 'includes/constants.php';

class Mysql {
private $conn;

function __construct() {
$this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or
die('There was a problem connecting to the database.');
}

function verify_Username_and_Pass($un, $pwd) {

$query = "SELECT *
FROM users
WHERE username = ? AND password = ?
LIMIT 1";

if($stmt = $this->conn->prepare($query)) {
$stmt->bind_param('ss', $un, $pwd);
$stmt->execute();
// UPDATE : I added correct usage of the stmt here.
$result = $stmt->get_result();
if($row = $result->fetch_array()) {
$stmt->free_result();
$stmt->close();
// returning an array the first item is the validation the second is the data.
return array(true, $row);
}
}
// if there is no just return empty data, and false for validation.
return array(false, array());
}
}

为了可重用性,我在这个项目中使用了常量:

<?php

// Define constants here

define('DB_SERVER', 'localhost');
define('DB_USER', 'myusername');
define('DB_PASSWORD', 'mypassword');
define('DB_NAME', 'sameige_membership');

使用当前的脚本集,它将使用我在用户名和密码字段中设置的任何内容登录。网页还应该通过 $_SESSION('fname/lname') 发布名字和姓氏来告诉用户谁以及他是否登录。

当我恢复到一开始的状态时,登录工作正常。在添加到查询部分以从数据库中绘制名字和姓氏之前。

这是原始的:

<?php

require_once 'includes/constants.php';

class Mysql {
private $conn;

function __construct() {
$this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or
die('There was a problem connecting to the database.');
}

function verify_Username_and_Pass($un, $pwd) {

$query = "SELECT *
FROM users
WHERE username = ? AND password = ?
LIMIT 1";

if($stmt = $this->conn->prepare($query)) {
$stmt->bind_param('ss', $un, $pwd);
$stmt->execute();

if($stmt->fetch()) {
$stmt->close();
return true;
}
}
}
}

据我了解,此脚本应将 $_POST['username']/['password'] 与数据库中选定的用户名和密码字段进行比较。如果它们是正确的,应该会登录并重定向到 medlem.php 页面。否则它应该返回输入正确的用户名和密码。

尽管如此,这仍然会登录并重定向。

任何对我正在做的事情的回答都将受到极大的赞赏,因为我在这个问题上完全是菜鸟。

问候,乔什

最佳答案

首先,关于检查用户输入的代码是错误的...您应该检查 if isset($_POST['username'] && isset($_POST['password']) 和不像你那样if($_POST)

第二个你说:$response = $membership->validate_User($_POST['username'], $_POST['pwd']);并且你的类(class)是:validate_user.... 区分大小写(如果可以,请使用 Dreamweaver,它会警告您此类错误)

第三次解决它们并再次检查。

关于php - 使用用户名和密码字段中输入的任何内容进行脚本登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36005701/

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