Cytat
2. Metoda validate - przecież ona niczego nie sprawdza - jedyne co robi to przygotowuje dane do zapisu do bazy.
Metoda ta usuwa, zastępuje niedozwolone znaki, następnie w ifie porównuję login wprowadzony przez użytkownika z tym, który został przepuszczony przez validację. Jeśli oba są jednakowe to login uznany jest za poprawny.
Cytat
2.1. Tym powinno zajmować się PDO (czy coś takiego).
PDO będzie, nie użyłem go tylko w tym kodzie "szkoleniowym"
Cytat
2.2. Usuwanie "dobrodziejstw" magic quotes powinno być raczej gdzie indziej.
Chodzi Ci o to, że powinno być uaktywnione na serwerze?
Cytat
5. Twój obiekt to: reprezentant użytkownika, walidator danych z formularza, warstwa zapisująca dane po rejestracji, jakiś ogólny filtr dla danych trafiających do bazy - a jedna z podstawowych zasad OOP brzmi: jeden obiekt - jedno zadanie.
Nie bardzo rozumiem, co i jak mam jeszcze podzielić. Możesz to napisać łopatologiczniej?

Poniżej kod po poprawkach, proszę o kolejne uwagi i wskazówki:)
try {
$pdo = new PDO('mysql:host=localhost;dbname=baza', 'log', 'pass');
$pdo -> query("SET NAMES 'utf8'");
//echo 'Połączenie nawiązane!';
}
catch(PDOException $e)
{
echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage(); }
class user
{
public $login;
public $pass;
public $re_pass;
public $email;
private $pdo; //obiekt klasy PDO
public function __construct(&$pdo)
{
$this->pdo =& $pdo; //przekazanie obiektu PDO do klasy.
}
function validate($dane)
{
//$dane = mysql_real_escape_string($dane);
{
}
return $dane;
}
function check_login ()
{
if ($this->login != $this->validate($this->login))
{
throw new Exception('Login zawiera niedozwolone znaki');
}
$sql = "SELECT id FROM `test` WHERE login= :login";
$start = $this->pdo->prepare($sql);
$start->bindParam(':login' , $this->login , PDO::PARAM_STR);
$start->execute();
$result=$start->rowCount();
$start->closeCursor();
//$query = mysql_query('SELECT id FROM test WHERE login = "'.$this->login.'"') or die (mysql_error());
if ($result != 0)
{
throw new Exception('Wybrany login jest zajęty');
}
return $this->login;
}
function check_pass ()
{
if ($this->pass != $this->validate($this->pass))
{
throw new Exception('Hasło zawiera niedozwolone znaki');
}
if ($this->pass != $this->re_pass)
{
throw new Exception('Podane hasła są różne');
}
{
throw new Exception('Podane hasło jest za krótkie (min. 6 znaków)');
}
}
function check_email ()
{
if (filter_var($this->email, FILTER_VALIDATE_EMAIL))
{
return $this->email;
}
throw new Exception('Podaj poprawny adres e-mail');
}
function save()
{
if($this->check_login() && $this->check_pass() && $this->check_email())
{
//mysql_query("INSERT INTO test(login,pass,email) VALUES('".$this->check_login()."','".$this->check_pass()."','".$this->check_email()."')");
$sql = "INSERT INTO `test` (login,pass,email) VALUES (:login,:pass,:email)";
$start = $this->pdo->prepare($sql);
$start->bindParam(':login' , $this->check_login() , PDO::PARAM_STR);
$start->bindParam(':pass' , $this->check_pass() , PDO::PARAM_STR);
$start->bindParam(':email' , $this->check_email() , PDO::PARAM_STR);
$result=$start->execute();
$start->closeCursor();
if ($result == 1)
{
return true;
}
else
{
throw new Exception('Wystąpił błąd podczas dodawania użytkownika.');
}
}
}
}
try
{
$new = new user($pdo);
$new->login = 'ssss#%@#&;"sg/s0aa';
$new->pass = 'aaaaaaaaa';
$new->re_pass = 'aaaaaaaaa';
$new->email = 'tttttg@ggggg.pl';
$new->save();
echo 'Użytkownik dodany pomyślnie'; }
catch (Exception $error)
{
echo $error->getMessage(); }
Za dalsze uwagi, będę bardzo wdzięczny

W kodzie, jak widać użyłem już PDO. Co jeszcze można/należałoby poprawić ?