如何在PHP中使用用户名作为登录名来发布从MySQL中提取的全名?

Joh*_*ehl 5 php mysql variables fetch

已解决:在多次重写mysql和成员代码后,最后一个在启用mysqlind(本机驱动程序)时有效.


我有一个完美的登录脚本,但我希望它将我登录的用户的全名发布到我的页面.

我希望它使用在登录时提供给会话的用户名在任何给定页面上的div中获取和发布,名字和姓氏.

登录脚本:

<?php
session_start();

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

// If the user clicks "Log Out".
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']);
}
?>
Run Code Online (Sandbox Code Playgroud)

检查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";
    print_r($row);
    exit;

} 

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");
}

}
Run Code Online (Sandbox Code Playgroud)

在mysql.php中建立与mysql的连接:

<?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());
}
Run Code Online (Sandbox Code Playgroud)

为了重用性,我在constants.php中定义了常量:

<?php

// Define constants here

define('DB_SERVER', 'localhost');
define('DB_USER', 'myusername');
define('DB_PASSWORD', 'mypassword');
define('DB_NAME', 'membership');
Run Code Online (Sandbox Code Playgroud)

当会话只知道登录用户的用户名时,如何从MySQL数据库中轻松获取它来检索名字(fname)和姓氏(lname).

如上所述,名字和姓氏的行名称是fname和lname.

我想用浮动的CSS格式div id'ed topr尽可能简单地显示它,如下所示:

<?php 
session_start();
if(isset($_SESSION['status'])){
    echo "<div id='topr'>Welcome, " . $_SESSION['fname'] . "!</div>";
} ?>
Run Code Online (Sandbox Code Playgroud)

我主要关注首先显示名字.当我做对了,我肯定会把它显示为姓氏.

只想了解更多相关信息.由于我的网络搜索没有提出任何我可以设法在我的代码中实现而不会弄乱的东西.

FZE*_*FZE 4

按如下方式更改您的验证功能。我添加了相关评论。

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());
}
Run Code Online (Sandbox Code Playgroud)

因此,在您调用 verify_Username_and_Pass 的 MemberShip 类中,只需将数组数据放入变量中即可。并使用它发送到会话变量。因此,您将有资格在任何您想要的地方使用会话。

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