Mихаил
23.05.2009, 20:22
Хочу понять MVC, за часик разобрался и написал вот такое творение. Хочу услышать критику, о том похоже это на MVC либо нет, и как реализовать правильно.
форма ввода пользователем логина и пароля.
<form action="user.php" name="autoriz" method="post">
Ваше имя:
<input type="text" name="username" maxlenght="15" value="">
Ваш пароль:
<input type="password" name="userpassword" maxlenght="15" value="">
<a href="javascript:void()" onClick="autoriz.submit()">вход</a>
</form>
соответственно код user.php
<?
require_once("user.inc.php");
$user = new view($_REQUEST['username'],$_REQUEST['userpassword']);
echo $user->message.'<br>';
?>
и код модуля user.inc.php
<?
/*для проверки введенных пользователем данных*/
class controller {
function verifydata($uname,$upassword) { //если левые символи заменяем их
$uname=controller::criterytype($uname);
$upassword=controller::criterytype($upassword);
$mod = new model();
//Передаем в клас model для сравнения с БД.
if(mysql_error()) //Если были ошибки с БД, тогда нечего уже не ищим
view::showtoscreen(mysql_error());
else
if($mod->veryquery($uname,$upassword))
view::showtoscreen("Пользователь зарегистрирован в БД");
else
view::showtoscreen("Регистрации в БД нет");
} //verifydata
// Проверка данных на левые символы
function criterytype($string) {
return $string=htmlspecialchars(trim($string));
} //criterytype
} //controller
/*для ввода данных от пользователя*/
class view {
var $message;
/*Получаем данные от пользователя через класс*/
function __construct($name,$password) {
if(empty($name) or empty($password)) //Проверяем на содержание данных
view::showtoscreen("Вы не указали имя либо пароль");
else
/*все в порядке можно отправлять данные
для проверки на корректность ввода данных */
controller::verifydata($name,$password);
}
function showtoscreen($message) { //То что выведем на печать
$this->message=$message;
}
} //view
/*класс для работы с БД*/
class model {
private $error; //На случай ошибок при связи с БД
private $resultquery; //информация о наличии регистрации пользователя в БД
private $dbhost = 'localhost';
private $dbusername = 'dbuser';
private $dbuserpass = 'dbpass';
private $dbname = 'dbname';
function __construct() {
$connect=mysql_connect($this->dbhost,$this->dbusername,$this->dbuserpass);
if($result=mysql_select_db($this->dbname,$connect))
$this->error=false;
else {
$this->error=true;
}
} //__construct()
function veryquery($name,$password) {
if(!$this->error) { // Если есть связь с БД посылаем запрос
if($query = mysql_query("SELECT * FROM users"))
while($filds=mysql_fetch_object($query)) {
if($filds->name==$name and $filds->password==$password)
{
$this->resultquery = true; //Запись найдена
break; //Прерываем while чтобы не маслать БД в "холостую"
}
else
$this->resultquery = false; //Соотвественно не найдена
} //while
} //if error
return $this->resultquery;
}//veryquery
}
?>
Насчет проверки вводимых данных строго не судите делал лайт вариант кода, главная задумка была разобратса с MVC :rolleyes:
форма ввода пользователем логина и пароля.
<form action="user.php" name="autoriz" method="post">
Ваше имя:
<input type="text" name="username" maxlenght="15" value="">
Ваш пароль:
<input type="password" name="userpassword" maxlenght="15" value="">
<a href="javascript:void()" onClick="autoriz.submit()">вход</a>
</form>
соответственно код user.php
<?
require_once("user.inc.php");
$user = new view($_REQUEST['username'],$_REQUEST['userpassword']);
echo $user->message.'<br>';
?>
и код модуля user.inc.php
<?
/*для проверки введенных пользователем данных*/
class controller {
function verifydata($uname,$upassword) { //если левые символи заменяем их
$uname=controller::criterytype($uname);
$upassword=controller::criterytype($upassword);
$mod = new model();
//Передаем в клас model для сравнения с БД.
if(mysql_error()) //Если были ошибки с БД, тогда нечего уже не ищим
view::showtoscreen(mysql_error());
else
if($mod->veryquery($uname,$upassword))
view::showtoscreen("Пользователь зарегистрирован в БД");
else
view::showtoscreen("Регистрации в БД нет");
} //verifydata
// Проверка данных на левые символы
function criterytype($string) {
return $string=htmlspecialchars(trim($string));
} //criterytype
} //controller
/*для ввода данных от пользователя*/
class view {
var $message;
/*Получаем данные от пользователя через класс*/
function __construct($name,$password) {
if(empty($name) or empty($password)) //Проверяем на содержание данных
view::showtoscreen("Вы не указали имя либо пароль");
else
/*все в порядке можно отправлять данные
для проверки на корректность ввода данных */
controller::verifydata($name,$password);
}
function showtoscreen($message) { //То что выведем на печать
$this->message=$message;
}
} //view
/*класс для работы с БД*/
class model {
private $error; //На случай ошибок при связи с БД
private $resultquery; //информация о наличии регистрации пользователя в БД
private $dbhost = 'localhost';
private $dbusername = 'dbuser';
private $dbuserpass = 'dbpass';
private $dbname = 'dbname';
function __construct() {
$connect=mysql_connect($this->dbhost,$this->dbusername,$this->dbuserpass);
if($result=mysql_select_db($this->dbname,$connect))
$this->error=false;
else {
$this->error=true;
}
} //__construct()
function veryquery($name,$password) {
if(!$this->error) { // Если есть связь с БД посылаем запрос
if($query = mysql_query("SELECT * FROM users"))
while($filds=mysql_fetch_object($query)) {
if($filds->name==$name and $filds->password==$password)
{
$this->resultquery = true; //Запись найдена
break; //Прерываем while чтобы не маслать БД в "холостую"
}
else
$this->resultquery = false; //Соотвественно не найдена
} //while
} //if error
return $this->resultquery;
}//veryquery
}
?>
Насчет проверки вводимых данных строго не судите делал лайт вариант кода, главная задумка была разобратса с MVC :rolleyes: