класс добавляет пользователей через админку
<?php
class AddUse{
private $templating;
private $sql;
private $tpl;
private $login;
private $password;
private $password2;
private $email;
private $name;
private $surname;
private $age_d;
private $age_m;
private $age_y;
private $age_mkTime;
private $country;
private $city;
private $isq;
private $skype;
private $vk;
public $Grup;
public $ChekedAction;
public $ChekedBot;
public $ChekedBaned;
public $Errors;
public $Goods;
//Параметры влидации
public $MinSimbolsName =2;
public $MaxSimbolsName =20;
public $MinSimbolsLogin=2;
public $MaxSimbolsLogin=5;
public $MinSimbolspassword=3;
public $MaxSimbolspassword=20;
//Параметры генерации меню даты
public $MinYear =1880;//С какова года
public $MaxYear =2012;//По какой год
public $MinDey =1; //С какова Дня
public $MaxDey =31; //По какой День
public $Minmonth=1; //С какова Месяца
public $Maxmonth=12; //По какой Месяц
//Параметры валидации
public $ValidLogin=TRUE;
public $ValidStrlenLogin=TRUE;
public $ValidStatusLogin=TRUE;
//Валидация пароля
public $ValidPassword=TRUE;
public $ValidStrlenPasword=TRUE;
public $ValidIdentityPasswords=TRUE;
//Валидация емайла
public $ValidEmail=TRUE;
public $ValidStatusEmail=TRUE;
//Валидация Даты рождения
public $ValidAge=FALSE; //Проверяет допустимость временного диапазона
//Валидация группы
public $ValidGrup=TRUE;
function __construct() {
$this->sql = Sql::getInstance();
$this->templating = new templating();
$this->templating->ModDir('users');
$this->tpl = $this->templating->ModLoad('AddUser');
//Указываем максимальный и минимальный год
$this->MaxYear = date('Y');
$this->MinYear = $this->MaxYear-150;
}
//Запись и обработка данных класса
function InsertDataVar(){
function trash($string){return trim(strip_tags(addslashes($string)));}
//Чистим от мусора и записсываем строки в класс
$this->login = trash($_POST['login']);
$this->password = trash($_POST['password']);
$this->password2= trash($_POST['password2']);
$this->email = trash($_POST['email']);
$this->name = trash($_POST['name']);
$this->surname = trash($_POST['surname']);
$this->age_d = intval($_POST['age_d']);
$this->age_m = intval($_POST['age_m']);
$this->age_y = intval($_POST['age_y']);
$this->country = trash($_POST['country']);
$this->city = trash($_POST['city']);
$this->isq = trash($_POST['isq']);
$this->skype = trash($_POST['skype']);
$this->vk = trash($_POST['vk']);
$this->Grup = intval($_POST['Grup']);
$this->ChekedAction= intval($_POST['ChekedAction']);
$this->ChekedBot = intval($_POST['ChekedBot']);
$this->ChekedBaned = intval($_POST['ChekedBaned']);
//Устовавливаем булив тип на флаги
if($this->ChekedAction==1){$this->ChekedAction=true;}else{$this->ChekedAction=false;}
if($this->ChekedBaned==1) {$this->ChekedBaned=true;}else {$this->ChekedBaned=false;}
if($this->ChekedBot==1) {$this->ChekedBot=true;}else {$this->ChekedBot=false;}
//Конвектируем дату в сикунды
$this->age_mkTime = mktime(0,0,0,$this->age_m,$this->age_d,$this->age_y);
}
//Валидация данных класса
function AutoValid(){
//Валидация логина
if($this->ValidLogin){
$this->ValidLogin();
}
//Валидация мыла
if($this->ValidEmail){
$this->ValidEmail();
}
//Валидация пароля
if($this->ValidPassword){
$this->ValidPassword();
}
//Валидация группы
if($this->ValidGrup){
$this->ValidGrup();
}
//Валидация даты рождения
if($this->ValidAge){
$this->ValidAge();
}
if(!empty($this->Errors)){
return false;}else{
return true;}
}
/*Валидаторы*/
//Валидатор логина
function ValidLogin(){
if(empty($this->login)){$this->Errors[]='Вы не ввели логин';return;}
if($this->ValidStrlenLogin){
$simbols = iconv_strlen($this->login,'utf-8')-1;
if($simbols < $this->MinSimbolsLogin & $simbols > $this->MaxSimbolsLogin){
$this->Errors[]='Длина логина должна быть не белее чем ("'.$this->MaxSimbolsLogin.'") и не менее чем ("'.$this->MinSimbolsLogin.'") симвалов';
}
}
if($this->ValidStatusLogin){
$this->sql->select('`id`,`login`','users',"`login`='".$this->sql->slesh($this->login)."'");
if($this->sql->num_rows()){
$this->Errors[] ='Данный логин уже используется другим пользователем';
}
}
}
//Валидатор мыла
function ValidEmail(){
if(empty($this->email)){$this->Errors[]='Вы не ввели Email';return;}
if(!is_email($this->email)){
$this->Errors[] ='Вы ввели некорректный адрес электронной почты';
}elseif($this->ValidStatusEmail){
$this->sql->select('`id`,`email`','users',"`email`='".$this->sql->slesh($this->email)."'");
if($this->sql->num_rows()){
$this->Errors[] ='Данный почтовый адрес уже используется другим пользователем';
}
}
}
//Валидатор пароля
function ValidPassword(){
if(empty($this->password)) {$this->Errors[]='Вы не ввели Пароль';return;}
if(empty($this->password2)){$this->Errors[]='Вы не ввели Потверждение пароля';return;}
if($this->ValidStrlenPasword){
$simbols = iconv_strlen($this->password, 'utf-8');
$simbols2 = iconv_strlen($this->password2,'utf-8');
if($simbols < $this->MinSimbolspassword |
$simbols > $this->MaxSimbolspassword |
$simbols2 < $this->MinSimbolspassword |
$simbols2 > $this->MaxSimbolspassword){
$this->Errors[]='Длина пароля должна быть не белее чем ("'.$this->MaxSimbolspassword.'") и не менее чем ("'.$this->MinSimbolspassword.'") симвалов';
}
}
if($this->ValidIdentityPasswords){
if($this->password!==$this->password2){
$this->Errors[]='Поля "Пароль" и "Подтверждение пароля" не совпадают';
}
}
}
//Валидатор группы
function ValidGrup(){
if(empty($this->Grup)) {$this->Errors[]='Вы не указали Группу';return;}
$this->sql->query("SELECT `grup_id` FROM `grups` WHERE `grup_id`='".$this->Grup."'");
if(!$this->sql->num_rows()){
$this->Errors[]='Группы по указанному идентификатору не существует';
}
}
//Валидатор даты рождения
function ValidAge(){
if($this->age_d > $this->MaxDey | $this->age_d < $this->MinDey |
$this->age_m > $this->Maxmonth | $this->age_m < $this->Minmonth |
$this->age_y > $this->MaxYear | $this->age_y < $this->MinYear){
$this->Errors[]='Не правельный формат даты рождения.';
}
}
/*/Валидаторы*/
function PasswordMd5(){
return md5(md5(sqlslesh($this->password)).'i87dw87fc');
}
function DateMenu_D(){
for($i=1;$i<=$this->MaxDey;$i++){
if($i<10){$d ='0'.$i;}else{$d =$i;}
if($this->age_d == $i){$selected='SELECTED';}else{unset($selected);}
$menu .='<option value="'.$d.'" '.$selected.'>'.$d.'</option>';
}
return $menu;
}
function DateMenu_M(){
for($i=1;$i<=$this->Maxmonth;$i++){
if($i<10){$m ='0'.$i;}else{$m =$i;}
if($this->age_m == $i){$selected='SELECTED';}else{unset($selected);}
$menu .='<option value="'.$m.'" '.$selected.'>'.$m.'</option>';
}
return $menu;
}
function DateMenu_Y(){
for($this->MaxYear;$this->MinYear<=$this->MaxYear;$this->MaxYear--){
if($this->age_y == $this->MaxYear){$selected='SELECTED';}else{unset($selected);}
$menu .='<option value="'.$this->MaxYear.'" '.$selected.'>'.$this->MaxYear.'</option>';
}
return $menu;
}
function GrupsMenu(){
$this->sql->select('*','grups');
if($this->sql->num_rows()){
while($result = $this->sql->fetch_assoc()){
$menu .='<option value="'.$result['grup_id'].'">'.$result['grup_name'].'</option>';
}
return $menu;
}
}
function Errors(){
if(is_array($this->Errors)){
foreach($this->Errors as $error){
$errors .='<p>'.$error.'</p>';
}
return $errors;
}
}
function ChekedAction(){if($this->ChekedAction){return 'checked';}}
function ChekedBaned(){if($this->ChekedBaned){return 'checked';}}
function ChekedBot(){if($this->ChekedBot){return 'checked';}}
function Goods(){
if(is_array($this->Goods)){
foreach($this->Goods as $Good){
$Goods .='<p>'.$Good.'</p>';
}
return $Goods;
}
}
function TplObr(){
$this->tpl = strtr($this->tpl,array(
'{login}' =>stripcslashes($this->login),
'{email}' =>stripcslashes($this->email),
'{name}' =>stripcslashes($this->name),
'{surname}'=>stripcslashes($this->surname),
'{age_d}' =>$this->DateMenu_D(),
'{age_m}' =>$this->DateMenu_M(),
'{age_y}' =>$this->DateMenu_Y(),
'{country}'=>stripcslashes($this->country),
'{city}' =>stripcslashes($this->city),
'{isq}' =>stripcslashes($this->isq),
'{skype}' =>stripcslashes($this->skype),
'{vk}' =>stripcslashes($this->vk),
'{Grup}' =>$this->GrupsMenu(),
'{Error}' =>$this->Errors(),
'{Goods}' =>$this->Goods(),
'{ChekedAction}'=>$this->ChekedAction(),
'{ChekedBot}' =>$this->ChekedBot(),
'{ChekedBaned}' =>$this->ChekedBaned()
));
}
function AddUse(){
$this->sql->insertArray('users',array(
'login' =>mysql_real_escape_string($this->login),
'email' =>mysql_real_escape_string($this->email),
'password' =>$this->PasswordMd5(),
'grup' =>$this->Grup,
'baned' =>$this->baned,
'activation'=>$this->ChekedAction,
'bot' =>$this->ChekedBot
),NULL,FALSE);
if($this->sql->insert_id){
$id = $this->sql->insert_id;
unset($this->sql->insert_id);
$this->sql->insertArray('users_profile',array(
'user_id'=>$id,
'name' =>mysql_real_escape_string($this->name),
'surname'=>mysql_real_escape_string($this->surname),
'age' =>$this->age_mkTime,
'country'=>mysql_real_escape_string($this->country),
'city' =>mysql_real_escape_string($this->city),
'isq' =>mysql_real_escape_string($this->isq),
'skype' =>mysql_real_escape_string($this->skype),
'vk' =>mysql_real_escape_string($this->vk)
),NULL,FALSE);
if($this->sql->insert_id){
$this->Goods[]= 'Пользователь успешно создан';
return true;
}else{
$this->Errors[]='Не удалось создать профиль';
//Удоляем созданный профиль
$this->sql->delete('users',"WHERE `id`='".$id."'");
}
}else{
$this->Errors[]='Не удалось добавить пользователя';}
}
function Wiev(){return $this->tpl;}
}
?>
/////////////////Вызов класса
<?php
function AddUse(){
$this->obj = new AddUse();
if(!empty($_POST['AddUserStartButton'])){
$this->obj->InsertDataVar();
if($this->obj->AutoValid()){
if($this->obj->AddUse()){
echo 'Пользователь добавлен';
}
}
$this->obj->TplObr();
$this->tpl = $this->obj->Wiev();
}else{
$this->obj->TplObr();
$this->tpl = $this->obj->Wiev();
}
}
Спустя 4 часа, 30 минут, 26 секунд (9.09.2012 - 08:18) johniek_comp написал(а):
размер не главное! (с)
Спустя 6 минут, 21 секунда (9.09.2012 - 08:24) lans8097 написал(а):
Цитата (johniek_comp @ 9.09.2012 - 05:18) |
размер не главное! (с) |
Просто показал знакомаму он сказал что очень плохо когда классы за 200 строк.
Я конечно магу написать с минимум табуляции абзацев итд но оно будит практически не читабельно.
Я делаю так чтобы мне было удобно и приятно ориентироваться в коде даи самниваюсь что эти отступы серёзно влияют на производительность
Спустя 1 час, 11 минут, 8 секунд (9.09.2012 - 09:35) johniek_comp написал(а):
lans8097
Цитата |
очень плохо когда классы за 200 строк. |
обычно классы по 600-1000 строк пишут...
на производительность ни как не повлияет, но:
1. Почитай про тернарный оператор.
2. WTF? ф-я trash делает в другой функции?
3. Не понял сути...
if($this->sql->insert_id){
$id = $this->sql->insert_id;
unset($this->sql->insert_id);
а потом
if($this->sql->insert_id){
???
Спустя 49 минут, 2 секунды (9.09.2012 - 10:24) Dezigo написал(а):
Всё сводиться к тому, что нельзя оценивать класс по количеству строк. Это ГЛУПО.
Всё берёт с собою проектирования, это выше этап, чем просто писать код.
1. Заметь у тебя класс делает ВСЁ , начиная ( добавления в БД, выборка, валидация)
2. Раздели главные моменты.
Валидация ,для неё создай отдельно класс.
И у тебя будет
Тогда ты избавишься от объявление переменных в классе + проверки метода в классе.
3. Вот это вот
Так не делай, класс должен работать с данными, который в конце концов, можно будет обработать. Возвращай массив.
В противном случае, всё можно засунуть в класс, а нужно ли?
Всё берёт с собою проектирования, это выше этап, чем просто писать код.
1. Заметь у тебя класс делает ВСЁ , начиная ( добавления в БД, выборка, валидация)
2. Раздели главные моменты.
Валидация ,для неё создай отдельно класс.
И у тебя будет
- 1. Класс валидации email
- 2. Класс валидации username
- 3. Класс валидации password
- 4. и т.д
Тогда ты избавишься от объявление переменных в классе + проверки метода в классе.
3. Вот это вот
while($result = $this->sql->fetch_assoc()){
$menu .='<option value="'.$result['grup_id'].'">'.$result['grup_name'].'</option>';
}
ret
Так не делай, класс должен работать с данными, который в конце концов, можно будет обработать. Возвращай массив.
В противном случае, всё можно засунуть в класс, а нужно ли?
Спустя 1 час, 24 минуты, 25 секунд (9.09.2012 - 11:49) Guest написал(а):
"Чистый код" Мартина - помогает промыть извилины 
http://www.kodges.ru/84462-chistyj-kod.-so...efaktoring.html

http://www.kodges.ru/84462-chistyj-kod.-so...efaktoring.html
Спустя 58 минут, 46 секунд (9.09.2012 - 12:47) lans8097 написал(а):
Цитата (johniek_comp @ 9.09.2012 - 06:35) | ||
lans8097
обычно классы по 600-1000 строк пишут... на производительность ни как не повлияет, но: 1. Почитай про тернарный оператор. 2. WTF? ф-я trash делает в другой функции? 3. Не понял сути... if($this->sql->insert_id){ а потом if($this->sql->insert_id){ ??? |
На щёт двух insert_id & unset
Просто sql клас ещо не до конца дописан он не вычищает старый индефикатор
Спустя 2 минуты, 17 секунд (9.09.2012 - 12:50) lans8097 написал(а):
Цитата (Dezigo @ 9.09.2012 - 07:24) |
Всё сводиться к тому, что нельзя оценивать класс по количеству строк. Это ГЛУПО. Всё берёт с собою проектирования, это выше этап, чем просто писать код. 1. Заметь у тебя класс делает ВСЁ , начиная ( добавления в БД, выборка, валидация) 2. Раздели главные моменты. Валидация ,для неё создай отдельно класс. И у тебя будет
3. Вот это вот while($result = $this->sql->fetch_assoc()){ Так не делай, класс должен работать с данными, который в конце концов, можно будет обработать. Возвращай массив. В противном случае, всё можно засунуть в класс, а нужно ли? |
я тоже об этом думал но както решил так написать
В следующий раз папробую сделать раздельные моменты.
За советы спс.
А что вы можете сказать в замечании кода ?
Спустя 1 час, 16 минут, 44 секунды (9.09.2012 - 14:06) Dezigo написал(а):
- 1. Перед тем как объявить метод обязательно пиши идентификатор доступа
public,protected,private (просто привыкни )
public function test() {
}
2.
//Параметры влидации
public $MinSimbolsName =2;
public $MaxSimbolsName =20;
public $MinSimbolsLogin=2;
public $MaxSimbolsLogin=5;
public $MinSimbolspassword=3;
public $MaxSimbolspassword=20;
Объяви их как константы в классе
const
MIN_SYMBOLS_NAME= 2,
MAX_SYMBOLS_NAME= 5;
3. небрежное название методов и переменных, тебе нужно придерживаться каково нибудь стиля.
Например
метод TplObr
- не должен начинаться с большо буквы, только классы так называют , ну и переменные.
Например
http://pear.php.net/manual/en/standards.funcdef.php
3 стандарта ( который вспомнил ) , выбырай любой
- Zend Coding Standard
PEAR Coding Standard
Horde Coding Standards
Спустя 2 часа, 24 минуты, 21 секунда (9.09.2012 - 16:31) Invis1ble написал(а):
Может я чего-то не знаю, но ликвидность вроде как экономический термин. Причем здесь класс?