Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: ООП и структурный подход
Форумы портала PHP.SU » » Объектно-ориентированное программирование » ООП и структурный подход

Страниц (1): [1]
 

1. Bio man - 27 Июля, 2011 - 14:26:39 - перейти к сообщению
изначально писал скрипт регистрации на ооп, и решил сравнить с классичеким подходом. время генерации сильно не отличилось, НО как обстоят дела с памятью? какой подход использовать при написании простых страниц, например регистрации, index.php, и других?
2. OrmaJever - 27 Июля, 2011 - 15:44:59 - перейти к сообщению
калсы работают немного медленее чем простые функции и памяти забирают больше. Если скриптик не большой то лутше разложить всё по функциям, но в больших проэктах без них не обойтись.
3. Bio man - 28 Июля, 2011 - 22:27:11 - перейти к сообщению
что лучше?
1 вариант:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. require_once "common.php";
  4. require_once "modules/getpost.php";
  5.  
  6. class register extends getpost {
  7.        
  8.         private $error = false;
  9.         private $errortext = array();
  10.         private $show_reg = true;
  11.        
  12.         function __construct($lang) {
  13.                 $html = new template(false);
  14.                 if($_POST) {
  15.                         parent::__construct();
  16.                         $this->validate($html, $lang);
  17.                 }
  18.                
  19.                 if($this->show_reg) {
  20.                        
  21.                         $html->set_filenames(array('register' => 'register.html'));
  22.                         $html->set_vars(array('TITLE' => $lang['register']['title'],
  23.                                                                         'USERNAME' => $lang['register']['username'],
  24.                                                                         'PASSWORD' => $lang['register']['password'],
  25.                                                                         'R_PASSWORD' => $lang['register']['r_password'],
  26.                                                                         'SEX' => $lang['sex']['sex'],
  27.                                                                         'MAN' => $lang['sex']['M'],
  28.                                                                         'WOMAN' => $lang['sex']['W'],
  29.                                                                         'EMAIL' => $lang['general']['email'],
  30.                                                                         'REGISTER' => $lang['register']['register']
  31.                                                                         ));
  32.                
  33.                        
  34.                        
  35.                        
  36.                                 $html->parse('register');
  37.                         }
  38.         }
  39.        
  40.         private function insert_in_db($html, $lang) {
  41.                 $db = new database();
  42.                 $sql = "INSERT INTO `users` (`username`, `password`, `sex`, `e-mail`, `reg_time`, `last_visit`) VALUES ('{$this->post['username']}', '{$this->post['password1']}', '{$this->post['sex']}', '{$this->post['email']}', NOW(), NOW())";
  43.                 $db->db('query', $sql);
  44.                
  45.                 if($db->result) {
  46.                         $this->show_reg = false;
  47.                         $_SESSION['logged_in'] = true;
  48.                         $sql = "SELECT `id` FROM `users` WHERE `username` = '{$this->post['username']}' AND `password` = '{$this->post['password1']}'";
  49.                         $db->db('array', $sql);
  50.                         $_SESSION['id'] = $db->array['id'];
  51.                                 unset($html);
  52.                         $html = new template($user = new user($lang));
  53.                         $html->set_filenames(array('welcome' => 'welcome.html'));
  54.                         $html->set_vars(array('TITLE' => $lang['login']['welcome'].', '.$user->user_data['username'],
  55.                                                                         'ENTER' => $lang['login']['enter']
  56.                                                                         ));
  57.                         $html->parse('welcome');
  58.                 }
  59.                 else {
  60.                         die('Сбой регистрации');
  61.                 }
  62.         }
  63.        
  64.         private function validate($html, $lang) {
  65.                
  66.                 if(empty($this->post['username'])) {
  67.                         $this->error = true;
  68.                         $this->errortext[] = $lang['errors']['empty_un'];
  69.                 }
  70.                 else {
  71.                         if(strlen($this->post['username']) < 4 || strlen($this->post['username']) > 20) {
  72.                                 $this->error = true;
  73.                                 $this->errortext[] = $lang['errors']['un_len'];
  74.                         }
  75.                         else {
  76.                                 $db = new database();
  77.                                 $db->db('num_rows', "SELECT `id` FROM `users` WHERE `username` = '{$this->post['username']}'");
  78.                                 if($db->num_rows) {
  79.                                         $this->error = true;
  80.                                         $this->errortext[] = $lang['errors']['un_exists'];
  81.                                 }
  82.                         }
  83.                 }
  84.                
  85.                 if(empty($this->post['password1'])) {
  86.                         $this->error = true;
  87.                         $this->errortext[] = $lang['errors']['empty_pass'];
  88.                 }
  89.                 else {
  90.                         if(strlen($this->post['password1']) < 6) {
  91.                                 $this->error = true;
  92.                                 $this->errortext[] = $lang['errors']['pass_len'];
  93.                         }
  94.                         else {
  95.                                 if($this->post['password1'] != $this->post['password2']) {
  96.                                         $this->error = true;
  97.                                         $this->errortext[] = $lang['errors']['pass_n_m'];
  98.                                 }
  99.                         }
  100.                 }
  101.                
  102.                 if($this->error) {
  103.                         $errortext = '<font color="#FF0000"><ul><li>'.implode('</li><li>', $this->errortext).'</li></ul></font>';
  104.                         $html->set_var('ERROR', $errortext);
  105.                 }
  106.                 else $this->insert_in_db($html, $lang);
  107.         }
  108. }
  109. new register($lang);
  110. ?>
  111.  

или:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. require_once "common.php";
  4. require_once "modules/getpost.php";
  5.        
  6. $error = false;
  7. $errortext = array();
  8. $show_reg = true;
  9.  
  10. $html = new template(false);
  11. if($_POST) {
  12.        
  13.         $data = new getpost();
  14.        
  15.         if(empty($data->post['username'])) {
  16.                         $error = true;
  17.                         $errortext[] = $lang['errors']['empty_un'];
  18.                 }
  19.                 else {
  20.                         if(strlen($data->post['username']) < 4 || strlen($data->post['username']) > 20) {
  21.                                 $error = true;
  22.                                 $errortext[] = $lang['errors']['un_len'];
  23.                         }
  24.                         else {
  25.                                 $db = new database();
  26.                                 $db->db('num_rows', "SELECT `id` FROM `users` WHERE `username` = '{$data->post['username']}'");
  27.                                 if($db->num_rows) {
  28.                                         $error = true;
  29.                                         $errortext[] = $lang['errors']['un_exists'];
  30.                                 }
  31.                         }
  32.                 }
  33.                
  34.                 if(empty($data->post['password1'])) {
  35.                         $error = true;
  36.                         $errortext[] = $lang['errors']['empty_pass'];
  37.                 }
  38.                 else {
  39.                         if(strlen($data->post['password1']) < 6) {
  40.                                 $error = true;
  41.                                 $errortext[] = $lang['errors']['pass_len'];
  42.                         }
  43.                         else {
  44.                                 if($data->post['password1'] != $data->post['password2']) {
  45.                                         $error = true;
  46.                                         $errortext[] = $lang['errors']['pass_n_m'];
  47.                                 }
  48.                         }
  49.                 }
  50.                
  51.                 if($error) {
  52.                         $errortext = '<font color="#FF0000"><ul><li>'.implode('</li><li>', $errortext).'</li></ul></font>';
  53.                         $html->set_var('ERROR', $errortext);
  54.                 }
  55.                 else {
  56.                         /////
  57.                         unset($db);
  58.                         $db = new database();
  59.                         $sql = "INSERT INTO `users` (`username`, `password`, `sex`, `e-mail`, `reg_time`, `last_visit`) VALUES ('{$data->post['username']}', '{$data->post['password1']}', '{$data->post['sex']}', '{$data->post['email']}', NOW(), NOW())";
  60.                         $db->db('query', $sql);
  61.                        
  62.                         if($db->result) {
  63.                                 $show_reg = false;
  64.                                 $_SESSION['logged_in'] = true;
  65.                                 $sql = "SELECT `id` FROM `users` WHERE `username` = '{$data->post['username']}' AND `password` = '{$data->post['password1']}'";
  66.                                 $db->db('array', $sql);
  67.                                 $_SESSION['id'] = $db->array['id'];
  68.                                 unset($html);
  69.                                 $html = new template($user = new user($lang));
  70.                                 $html->set_filenames(array('welcome' => 'welcome.html'));
  71.                                 $html->set_vars(array('TITLE' => $lang['login']['welcome'].', '.$user->user_data['username'],
  72.                                                                                 'ENTER' => $lang['login']['enter']
  73.                                                                                 ));
  74.                                 $html->parse('welcome');
  75.                         }
  76.                         else {
  77.                                 die('Сбой регистрации');
  78.                         }
  79.                         /////
  80.                 }
  81. }
  82.                
  83. if($show_reg) {
  84.                        
  85.         $html->set_filenames(array('register' => 'register.html'));
  86.         $html->set_vars(array('TITLE' => $lang['register']['title'],
  87.                                                         'USERNAME' => $lang['register']['username'],
  88.                                                         'PASSWORD' => $lang['register']['password'],
  89.                                                         'R_PASSWORD' => $lang['register']['r_password'],
  90.                                                         'SEX' => $lang['sex']['sex'],
  91.                                                         'MAN' => $lang['sex']['M'],
  92.                                                         'WOMAN' => $lang['sex']['W'],
  93.                                                         'EMAIL' => $lang['general']['email'],
  94.                                                         'REGISTER' => $lang['register']['register']
  95.                                                         ));    
  96.         $html->parse('register');
  97. }
  98. ?>
  99.  


если не сложно, проверьте какие недостатки и ошибки
4. OrmaJever - 29 Июля, 2011 - 01:32:37 - перейти к сообщению
2 подход думая лутше будет, но его ещё нужно оптимизировать. Например

Зачем это условие? пост суперглобальный масив и существует всегда, условие всегда будет истино.
Затем вот такие вещи
PHP:
скопировать код в буфер обмена
  1. else {
  2.          if(...) {

лутше писать так
PHP:
скопировать код в буфер обмена
  1. elseif(...) {

лутше для поимания и меньш строк.
Обьвлять переменую $error со значением false вначале, а потом при появлении ошибок просто давать значение true глупо, ибо есть масив с ошибками.
Вначале скрипта обьявляем
$errortext = false;
Если появляются ошибки пишем их в масив как и раньше, затем проверяем
PHP:
скопировать код в буфер обмена
  1. if($errortext === false) // ошибок нет, если они будут то $errortext будет масивом.
  2. или
  3. if($errortext !== false) echo 'ошибки! ', implode('<br>', $errortext);

ну и думаю некоторые условия можно сократить
5. Мелкий - 29 Июля, 2011 - 08:52:06 - перейти к сообщению
OrmaJever пишет:
Зачем это условие? пост суперглобальный масив и существует всегда, условие всегда будет истино.

Бессмысленно условие isset($_POST), а пустой массив при приведении к bool становится false, так что условие работает корректно.
6. Bio man - 29 Июля, 2011 - 16:29:22 - перейти к сообщению
спасибо за советы. нащет массива пост, не знаю другого приема как определить были ли данные переданы скрипту на обработку или нет, мне кажется
самое простое решение. хочу уточнить,
PHP:
скопировать код в буфер обмена
  1.  
  2. $variable1 = '';
  3. $variable2 = 0;
  4. $variable3 = array();
  5. $variable4;
  6.  
во всех случаях эти переменные будут false?
7. OrmaJever - 29 Июля, 2011 - 17:16:17 - перейти к сообщению
Bio man пишет:
во всех случаях эти переменные будут false?

false они будут через двойное равно или просто так

(Добавление)
Мелкий пишет:
Бессмысленно условие isset($_POST), а пустой массив при приведении к bool становится false, так что условие работает корректно.

и правда, спасибо за внимательность Подмигивание

 

Powered by ExBB FM 1.0 RC1