php sınıfı - Geçerli kullanıcı kimliği kapmak

1 Cevap php

I am buidling a small job application website, and i'm using a the basis of a login system taken from a Nettuts.com tutorial. The logging in works fine, but I am having trouble getting the details for the currently logged in user, for example if a user enters their personal details, i can process the data into the database but it's not linked to which user!

Ben ideal id $ userID adında bir değişkene koymak istiyorum.

I need a way to identify the user currently logged in, so i can update my insert statements to something like ... 'UPDATE cv where userID = $userID'.

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;

		}
	}		
}

}

class Üyelik {

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

	// if above = true
	if($ensure_credentials) {
		$_SESSION['status'] = 'authorized';
		$_SESSION['username'] = $un;
		$_SESSION['password'] = $pwd;
		header("location: ../myIWC.php");
	} else return "Please enter a correct username and password";

}

function log_User_Out() {
	if(isset($_SESSION['status'])) {
		unset($_SESSION['status']);
		unset($_SESSION['username']);
		unset($_SESSION['password']);
		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");
}


$currentUN = $_SESSION['username'];
$currentPWD = $_SESSION['password'];

$mysql = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('There was a     problem connecting to the database');
$stmt = $mysql->prepare('SELECT id FROM users WHERE username = ? AND password = ? LIMIT 1');
$stmt->bind_param('ss',$currentUN, $currentPWD);
$stmt->execute();
$stmt->bind_result($currentID);
}

1 Cevap

Peki ben öğretici verilen kod çok iyi bir örnek değil söyleyebilirim. Veritabanı sınıf sadece ve sadece gerçekten orada (verify_Username_and_Pass) kullanıcı işlevleri olmamalıdır veritabanı fonksiyonları ele olmalıdır. Ayrıca bakış güvenlik açısından ben şiddetle oturumda şifrelenmemiş parolalar depolamak karşı tavsiye ederim.

Ancak verdiğiniz kod parçacıkları, muhtemelen daha geniş bir uygulama parçası olan ve gibi çok fazla onunla oynamak mümkün olmayacaktır takdir. Aşağıdaki gibi kodu bağlamında çalışır gibi.

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 id
                        FROM users
                        WHERE username = ? AND password = ?
                        LIMIT 1";

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

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

                } else {
                    return false;
                }
        }               
}

Sonra kullanıcı sınıfında

if($ensure_credentials !== false) {
                $_SESSION['id'] = $ensure_credentials;
                $_SESSION['status'] = 'authorized';
                $_SESSION['username'] = $un;
                $_SESSION['password'] = $pwd;
                header("location: ../myIWC.php");
        } else return "Please enter a correct username and password";