PDA

Просмотр полной версии : Помогите разобратса с MVC (PHP)



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:

commando
24.05.2009, 08:56
ну что-то типа такого. Основной смысл в аббревиатуре: контроллер управляет действиями, взаимодействую с базой через модели, также в моделях делаются все необходимые расчеты. Полученные результаты отдаются вьюву, который их отображает в соответствии со своим шаблоном.

Mихаил
24.05.2009, 13:17
Хорошо, но вот по коду, елемент модели controll он должен строитса как отдельный класс, и взаимодейстовать например с user.php, или он сразу должен принимать данные от пользователя, а модель view отображать их, либо нужно использовать как я написал выше еще файл user.php, который передает и принимает данные от модели mvc.

И еще одни вопрос CakePHP на данный момент актуальный фреймворк, либо есть более распространенней? И какие?

Mихаил
24.05.2009, 13:41
Фух... с MVC разобрался и сам себе ответил на свой вопрос выше :-) Классика:


/application
--/models
---model.php
--/controllers
---controller.php
--/view
---/user
----index.html

Тоесть без всяких дополнительных файлов user.php, все разбиваем по каталогам и передаем управления, притом данные от формы передаютса в файл index.html папки user ветки view.

Думаю это правильно?

Mихаил
24.05.2009, 13:43
По framework'ой подсказали актуально Drupal и Jommla.
Тема еще не закрыта, буду разбиратса будут вопросы:rolleyes:

D>C
24.05.2009, 15:46
Mихаил
джумла (http://ru.wikipedia.org/wiki/Joomla) и друпал (http://ru.wikipedia.org/wiki/Drupal)- это цмски (поправьте, если ошибаюсь)


И еще одни вопрос CakePHP на данный момент актуальный фреймворк, либо есть более распространенней? И какие?
ну, думаю, это личные предпочтения.
смотришь оффсайты,комьюнити, доки каждого и выбираешь, что тебе нравицо =)

Сравнение кодигнитера, кейка и yii/ (http://habrahabr.ru/blogs/php/50341/)
на хабре еще было сравнение кодингнитера, кейка, зенда и симфони вродь, но сцылко, к сожалению, потирялось(

commando
24.05.2009, 19:03
Действительно фремворк можно выбирать какой больше нравится, я например люблю codeIgniter.
Mихаил: по поводу твоей структуры. Когда файлов много, вьюхи конечно разделять по категориям. Также существуют и субконтроллеры, это вполне нормально, но только когда действительно нужно, а не лишь бы сделать схему и радоваться что она работает.
По поводу другапа и ждумлы все верно сказано. Мой совет - пока что не думать о них, потому что работа в виде "разработать гавномодуль под джумлу за 100 у.е." нормального человека вряд ли заинтересует. Берегите мозк

Mихаил
24.05.2009, 21:02
...Также существуют и субконтроллеры, это вполне нормально, но только когда действительно нужно, а не лишь бы сделать схему и радоваться что она работает...
Так требуют работадатели.

...По поводу другапа и ждумлы все верно сказано. Мой совет - пока что не думать о них, потому что работа в виде "разработать гавномодуль под джумлу за 100 у.е." нормального человека вряд ли заинтересует. Берегите мозк...

Та дело в том, что мне нужна работа, а сейчас звездные требования на должность PHP-программиста.

commando
25.05.2009, 12:08
я бы сказал так: "сейчас модно писать звездные требования" и берут как правило более слабых работников, или берут слабых на должность сильных, что еще хуже. просто у нас такая психология: получить самый качественный товар\услуги, вот и пишут что нужно знать все. А когда рядом еще отметка 500 у.е. становится смешно )))

Mихаил
25.05.2009, 20:06
Тогда подскажите мне пожалуйста ориентировочную сумму на которую может претендовать PHP программист, без опыта работы со средним уровнем знаний в PHP(ООП,MVC), MySQL, HTML (верстка table,div)(XHTML), CSS, JavaScript, Ajax, и Smarty. Притом знаком с фреймворком CakePHP и apache фишкой mod_rewrite. + к этому ANSI C++, Python?

D>C
25.05.2009, 20:55
Mихаил
200-400, имхо

commando
25.05.2009, 22:00
ну 200 это слишком. Я думаю джуниору на выращивание баков 500 дадут

Mихаил
25.05.2009, 22:20
ну 200 это слишком. Я думаю джуниору на выращивание баков 500 дадут

Согласен. Столько знать и за 200 работать, торговый представитель больше получает чем программёр.

Mихаил
25.05.2009, 22:21
Ладно, появятса сложности с кодом, напишу в эту тему, а то с MVC тема переростает в трудоустройство %)

D>C
26.05.2009, 01:53
/offtop

ну 200 это слишком. Я думаю джуниору на выращивание баков 500 дадут
кгм..ну я вообще изначально на 150 шел :shine:

commando
26.05.2009, 14:54
а я на 100, только это было 7 лет назад.

Mихаил
26.05.2009, 15:49
<offtop>А сейчас за 150 где можно найти? Нужно же опыт работы нарабатывать...</offtop>

commando
27.05.2009, 11:44
гугли побольше, не бойся звонить. И не нужно говорить сразу что ты неопытный. Вполне возможен вариант, что тебя возьмут на должность чуть выше, чем ты умеешь и в боевых условиях ты быстро нарастишь скилл.

Human Factor
06.06.2009, 14:54
критика по коду:
в принципе по концепции MVC разнесено верно.

есть замечания по реализации veryquery($name,$password), а именно:
- зачем выбирать ВСЕХ пользователей, а затем идти по ним циклом??? можно ведь сразу выбрать одного, который интересует. см. SQL: WHERE
- хранение паролей в открытом виде, как следует из $filds->password==$password. Если уведут базу, получат пароли всех юзеров. Идея в том, что хранить не пароль, а ХЭШ от него (например md5). а проверять на соответствие хеша, типа $filds->passwordHash==md5($password)

а так вобщем неплохо. трудоустраивайся, набирайся опыта, удачи во всем :)

Mихаил
06.06.2009, 20:38
критика по коду:
в принципе по концепции MVC разнесено верно.

есть замечания по реализации veryquery($name,$password), а именно:
- зачем выбирать ВСЕХ пользователей, а затем идти по ним циклом??? можно ведь сразу выбрать одного, который интересует. см. SQL: WHERE
- хранение паролей в открытом виде, как следует из $filds->password==$password. Если уведут базу, получат пароли всех юзеров. Идея в том, что хранить не пароль, а ХЭШ от него (например md5). а проверять на соответствие хеша, типа $filds->passwordHash==md5($password)

а так вобщем неплохо. трудоустраивайся, набирайся опыта, удачи во всем :)

Большое спасибо. Очень хорошое замечание. Буду впредь опытней :)

commando
09.06.2009, 18:25
да это все прийдет после допущенных ошибок, главное идти дальше.

Mихаил
10.06.2009, 20:21
На работу уже устроился, испытательный срок, пока не буду говорить куда. Взяли как Junior Developer'а :-)

JST
11.06.2009, 19:13
Кто там любит CodeIgniter? :)
Я тоже раньше любил CodeIgniter. Потом как-то встретил Kohana и полюбил его. Вообще это спин-офф от CI, но только полностью PHP5, да еще и с ORM. Вобщем всем любителям CI рекомендую. Структурных отличий там немного.

commando
13.06.2009, 08:30
в Игниторе тоже можно на пхп5 писать, просто изначально он предусматривал совместимость. ОРМ можно подключить куда угодно - дело вкуса. На счет Kohana интересно - посмотрим :)

zetra
21.06.2009, 12:08
Human Factor

благодарю! мне тоже помогло)
(http://znay-tekst.ru) (http://povarro.ru) (http://antiqus.ru) (http://game-stash.ru)
(http://beutel.ru) (http://znay-tekst.ru) (http://povarro.ru) (http://antiqus.ru) (http://game-stash.ru)
(http://beutel.ru)

Human Factor
26.06.2009, 18:14
Human Factor

благодарю! мне тоже помогло)


всегда пжлста, и вам пасиб за интерес к теме :)

Ge-org
07.07.2009, 20:41
Тогда подскажите мне пожалуйста ориентировочную сумму на которую может претендовать PHP программист, без опыта работы со средним уровнем знаний в PHP(ООП,MVC), MySQL, HTML (верстка table,div)(XHTML), CSS, JavaScript, Ajax, и Smarty. Притом знаком с фреймворком CakePHP и apache фишкой mod_rewrite. + к этому ANSI C++, Python?

Можно пойти "Дизайнером на PHP 5" или "Программистом в Photoshop" в одну из Одесских веб-студий, по таким или подобным объявлениям: http://www.liveinternet.ru/users/ge-org/post89030623/
и зарабатывать от $200 до $400 в месяц. )
Можно (и ИМХО нужно) попытаться макнуться в какую-нибудь аутсорсинговую компанию Junior'ом и претендовать на $500 - $800.
Следует учесть, что средняя зп грамотного PHP программиста (при большом количестве PHP-программистов грамотных, к сожалению, мало) составляет 1000+. Самая высокая которая я слышал 1500.

ulot3049
05.02.2012, 18:24
По теме, предлагаю почитать о паттерне MVC на примере создания интернет магазина:
MVC – фундамент интернет магазина (http://lifeexample.ru/php-primeryi-skriptov/mvc-fundament-internet-magazina.html)

vadoru
06.02.2012, 20:21
Кто там любит CodeIgniter? :)
Я тоже раньше любил CodeIgniter. Потом как-то встретил Kohana и полюбил его. Вообще это спин-офф от CI, но только полностью PHP5, да еще и с ORM. Вобщем всем любителям CI рекомендую. Структурных отличий там немного.

Kohana это же форк CI потому и структурных отличий немного. Хороший фреймворк.

SooR
22.02.2012, 09:27
Автор, разбери по косточкам OpenCart.

Manhetten
22.02.2012, 19:06
Джуниору, который упорно пишет -тса вместо -ться и -тся и 200 - слишком много...