Въпрос за class

yordanov

Registered
Здравейте, тепърва започвам да се занимавам с ООП и все още имам някой неясноти.

index.php
________

<?php
include('../include/session.php');
?>
<form method="POST" action="proc.php">
username: <input type="text" name="username" />
password: <input type="password" name="password" />
<input type="submit" name="login" value="Вход" />
</form>


session.php
__________
<?php
class Session {

var $logged;
var $last_action;
var $username;

function checkUser($username) {
global $db;
$check = $db->checkUser($username);

if($check == 1) {
$this->username = $_SESSION['username'] = $username;
return $this->username;
} else {
return false;
}
}

function confirmUser($password) {
global $db;
if($db->confirmUser($password) != false) {
return $this->username;
}

}

function startSession() {
session_start();
$this->last_action = $_SESSION['last_action'] = time();
$this->logged = $_SESSION['logged'] = 1;
return true;
}

function login($username, $password) {

if($this->checkUser($username) != false) {

if($this->confirmUser($password) != false ) {

$this->startSession();

}
}
return true;
}

}

$session = new Session();
?>


db.php
_____
<?php
class DB {

public function __construct() {
if(!mysql_connect('localhost', '', '')) {
die(mysql_error());
}
if(!mysql_select_db('new_db')) {
die(mysql_error());
}
}

function query($q) {
return mysql_query($q);
}

function checkUser($username) {
return mysql_num_rows($this->query("SELECT * FROM `users` WHERE `username` = '".$username."' LIMIT 1"));
}

function confirmUser($password) {
global $session;
$q = "SELECT * FROM `users` WHERE `username` = '".$session->username."' AND `password` = '".$password."' LIMIT 1";

$r = $this->query($q);
if(mysql_num_rows($r)==1) {
return $session->username;
} else {
return false;
}
}
}

$db = new DB();
?>

така... в класа $db всичко си работи нормално, но нямам никаква идея защо в index.php не мога да използвам $session след като съм го include-нал... ще съм ви много благодарен ако някой ми помогне
 
session_start(); го има в $session->startSession();

пробвал съм и така както ти казваш и не става...
 
А ти как се опитваш да го използваш?
Ето това какво ти дава?
<?php
include('session.php');
$session->startSession();
echo $_SESSION['logged'];

?>
<form method="POST" action="">
username: <input type="text" name="username" />
password: <input type="password" name="password" />
<input type="submit" name="login" value="Вход" />
</form>
 
Аз не виждам метод logged в класа session?
logged е свойство. Ти можеш да му придадеш стойност така $session->logged = true;
И след това да използваш твоя начин. Може и да стане. Може да пробваш и
if($session->logged == 1)
Но колкото класове съм гледал, всичките работят с методи, а не със свойства в този случай извън класа.
В класа:
public function logged(){if($_SESSION['logged'] == 1){return true;}else{return false;}}
и в кода:
if($session->logged())...
Съвет.
Като гледам малко си объркал архитектурата на това проложение. Смисълът на ООП е да събереш логиката на отделните обекти в отделни класове или някаква дървовидна структура от класове. А ти тук имаш 2 класа, които отговарят за авторизацията. Ако искаш да имаш и нещо като регистри, то този session клас е хубаво да го направиш да работи с всички сесийни променливи от приложението, а не само с авторизацията. Авторизацията само ще го ползва, както и другите класове. Същото е с базата данни. Направи си отделен клас за базата данни. И то стана много дълго, но е препоръчително класът за базата данни да е шаблон синглтон.
 

Back
Горе