PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (24): В начало « ... 12 13 14 15 [16] 17 18 19 20 ... » В конец

> Найдено сообщений: 359
Hapson Отправлено: 12 Августа, 2013 - 21:34:52 • Тема: Маршрутизация • Форум: Объектно-ориентированное программирование

Ответов: 46
Просмотров: 8269
caballero
caballero пишет:
и что?

Ну... это разве хорошо?
Все до чего я пока додумался - это разобрать адресную строку типа
http://exemple[dot]com/auth/register
Получится что-то типа:

Это делает класс ContentRouter
А в файлике модуля content я написал
PHP:
скопировать код в буфер обмена
  1. ContentRouter::start($_SERVER['REQUEST_URI']);


Короче в адресной строке появляется что-то... ну на данном этапе это имя модуля и действие. Это что-то ловит модуль content и передает в класс ContentRouter методу start.
Метод start разбирает адресную строку и подрубает модуль с нужным действием. Ну и выводит результат этого действия в область контента. В данном случае это форма регистрации.

Я уж думал делать в БД какую-то табличку. Ну типа если register, то это значит нужно запустить auth и выполнить register...

Однако! Все это нужно будет расширять. Появятся другие модули. Появится больше параметров в адресной строке. Уже сейчас вот хочется например убрать auth из адресной строки...
(Добавление)
Hapson пишет:
Метод start разбирает адресную строку и подрубает модуль с нужным действием. Ну и выводит результат этого действия в область контента

Точнее метод start подрубает модуль, указывает модулю на нужное действие, а модуль его выполняет и выводит на экран результат своей работы. Дальше этот модуль может продолжить взаимодействие с юзером при необходимости. (ну регистрация здесь или авторизация)
(Добавление)
Вот мой мега роутер ))) Это очень черный черновик

PHP:
скопировать код в буфер обмена
  1. class ContentRouter{
  2.         public $modul;
  3.         public $action;
  4.        
  5.         function start($data){
  6.                 $params = explode("/", $data);
  7.                 $router = array();
  8.                 foreach($params as $val){
  9.                         if(!empty($val)){
  10.                                 $router[] = trim($val);
  11.                         }
  12.                 }
  13.                 if(count($router) > 0){
  14.                         return include_once ROOT .'/mod/'. $router[0] .'/'. $router[1] .'.php';
  15.                 }else{
  16.                         return include_once ROOT .'/mod/articles/articles.php';
  17.                 }
  18.         }
  19. }


А это файлик модуля content

PHP:
скопировать код в буфер обмена
  1. ContentRouter::start($_SERVER['REQUEST_URI']);
Hapson Отправлено: 12 Августа, 2013 - 21:06:01 • Тема: Маршрутизация • Форум: Объектно-ориентированное программирование

Ответов: 46
Просмотров: 8269
Okula
Спасибо за ссылку на ваше творение, но увы - разобраться не могу.
Нет ли у вас на примете ссылок, где можно почитать про азы маршрутизации?
То что я написал больше похоже на банальный switch...case, хоть это и класс...
Короче опять у меня ступор. Огорчение
Hapson Отправлено: 12 Августа, 2013 - 20:08:23 • Тема: Маршрутизация • Форум: Объектно-ориентированное программирование

Ответов: 46
Просмотров: 8269
Okula
Смотрел-смотрел ваш код - слишком его много, ничего не понял.
Сейчас попробую поискать про регулярки
Hapson Отправлено: 12 Августа, 2013 - 18:17:21 • Тема: Маршрутизация • Форум: Объектно-ориентированное программирование

Ответов: 46
Просмотров: 8269
Всем привет!
Столкнулся я с небольшой проблемой.
Вобщем все пишу я свой блог. Структура примерно такова:
Есть папка с классами - каждый класс в отдельном файле. Классы подгружаются автолоадом.
Есть папка с модулями:
auth - авторизация и регистрация пользователей. Использует класс Users.
articles - отвечает за добавление и вывод статей. Использует класс Articles.
Ну и так далее...
Каждый модуль имеет свой класс. Есть еще и вспомогательные классы, например, класс для работы с БД, класс для различной обработки текста и прочие.
Теперь вот озадачился я написанием некоего маршрутизатора, который будет парсить адресную строку и подключать нужные модули. Вот тут у меня случился творческий ступор.
Читал я про MVC, но не очень понимаю, как его применить.
Модели - ну это наверное мои модули.
Представление и маршрутизация - это наверное модуль content и собственно маршрутизатор, который я все никак не могу написать.
Модуль content отвечает за вывод контента. Контент - это в первую очередь статьи. То есть модуль content использует модуль articles. Модуль content также использует модуль auth - выводит в область контента формы авторизации и регистрации.
То есть модуль content - это модуль, который по сути использует любые нужные ему модули, чтобы вывести какой-то контент.
Модуль content использует класс ContentRouter. В классе происходит разбор адресной строки и подключение нужных модулей. Класс только начал писать и умеет он пока мало.

В частности сейчас так:
http://exemple[dot]com/auth/autorized - подключается модуль авторизации и выводится форма авторизации
http://exemple[dot]com/auth/register - подключается модуль авторизации и выводится форма регистрации
Если просто
http://exemple[dot]com - подключается модуль articles, который выводит 5 последних статей в виде блога.

Вопрос в чем. Как сделать не http://exemple[dot]com/auth/register а просто http://exemple[dot]com/register

Сейчас у меня первое значение - это имя модуля, второе значение - это необходимое действие.
Hapson Отправлено: 10 Августа, 2013 - 11:41:08 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
Опять у меня вопросы)))
Сделал я авторизацию пользователей. При удачной авторизации я беру объект $user со всеми его свойствами и кладу в $_SESSION['user']. Дальше я могу вызывать свойства так:
$_SESSION['user']->name
$_SESSION['user']->city и т.д...

Но! Я не кладу в сессию два свойства: email и password. Поэтому, чтобы обратиться к ним, нужно будет делать запрос к БД.
Да и вообще, как-то не сильно возбуждает запись $_SESSION['user']->name, хотелось бы проще, например $user->name.

Может быть задействовать для этого метод __get ? Как вообще такое можно реализовать? Или хранение объекта в сессии - нормальная практика?
(Добавление)
Ну например

PHP:
скопировать код в буфер обмена
  1. function __get($val){
  2.         //делаю запрос типа
  3.         $sql = "SELECT $val FROM users WHERE MD5(CONCAT(email, password)) = $_SESSION['user_pid']";
  4.         //в сессии при этом лежит хеш email и password авторизованного юзера
  5.         //и return то что вернул запрос
  6. }


Однако так будет идти запрос при каждом обращении к свойству
Hapson Отправлено: 09 Августа, 2013 - 23:37:48 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
caballero пишет:
вынесите все эти методы обработки текста в какие нибудь отдельные функции или статический класс типа Utilites

наверняка они еще пригодятся

Да, вот это точно. Я уже думал о том, что эти функции будет использовать не только этот модуль, но вот не мог определиться, куда их пристроить.
Спасибо за наводку)))
Hapson Отправлено: 09 Августа, 2013 - 23:12:02 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
caballero пишет:
ну если создали статью то значит и создали объект.
логичнее вместо
Articles::saveArticle($data);
писать

$article = new Article($data);

$article->save();

паттерн Active record вам в помощь.

Ну видимо я все еще не вник в смысл этого паттерна.
Когда мы с вами обсуждали авторизацию пользователя, то ход был таков:
нельзя писать $user = new Users(); так как пока не произошла авторизация юзера еще нет.
Я сделал так: сначала написал Users::auth(), а в статичном методе авторизации написал $user = new Users() только после того, как выяснилось, что этот юзер действительно есть.

Здесь вы предлагаете создавать объект на тот момент, когда еще неизвестно, станет ли он вообще объектом. Может юзер некорректно заполнит какое-то поле в форме, и тогда статья не запишется в БД.

Я вижу это так:
вызвали метод сохранения статьи
это метод передал данные методу валидации
если метод валидации вернул переданные ему данные, то да - эти данные однозначно станут свойствами объекта и запишутся в БД.
если метод валидации вернул массив ошибок, то ничего не запишется в БД и незачем создавать объект, так как не получилось записать все его свойства.

caballero пишет:
и вообще у вас куча какого то непонятного кода - какие то очистители тегов и прочее
обычно достаточно пары стандартных функций


cleanTag - убирает теги, заменяет символы перевода строки на пробелы и убирает пробелы по краям - для подсчета кол-ва символов в тексте. (допустим статья минимум 500 символов - зачем считать теги?)
textTrim - обрезает текст не разрывая слова
translit - формирует alias

Я тоже смотрю на весь этот код, особенно на foreach со switch и как-то неказисто он смотрится. Ну а как иначе, если все поля нужно проверять по-разному. Тайтл - минимальная и максимальная длина, Alias - длина и только анг. символыб цифры и тире, id категории - нужно проверить по БД реально ли есть категория с таким id и т.д...
Hapson Отправлено: 09 Августа, 2013 - 22:28:54 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
caballero
caballero пишет:
проше валидировать в одном месте
а то в одном поля валидируются в другом некий валидатор

То есть проверять поля непосредственно в классе Articles?

caballero пишет:
проверили создали екземпляр класса и сунули в БД

Проверил поля, создал объект $article класса Articles и его в БД? Зачем так, ведь на момент создания статьи ее еще нет, а значит по логике и объекта быть не должно. Вот при просмотре статей да - они есть, значит можно делать $article = new Articles();

Или не так?
(Добавление)
PS
то есть вы предлагаете запихать весь код класса Validator в класс Articles?
В классе Articles описать свойства одноименные полям в БД. В процессе проверки валить корректные данные в свойства, а ошибки в свойство $error - которое массив. Ну конечно же перед этим создавать объект и если в $error ничего нет, то писать полученный объект в БД?
(Добавление)
PPS
Точнее так:

1. Проверяем - все ли поля пришли
2. Передаем ассоциативный массив с полями формы в класс Articles::saveArticle($array)
3. Метод saveArticle вызывает метод validate - self::validate($array)
4. В методе validate есть два массива: $correct и $error - изначально пустые. В процессе проверки метод валит в массивы ошибки и корректные поля. Если в массиве $error хоть что-то оказалось, то возвращается он, если нет, то массив $correct.
5. получив массив $correct, метод saveArticle просто пишет его в БД.

Зачем создавать объект?
Hapson Отправлено: 09 Августа, 2013 - 21:19:36 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
DelphinPRO
DelphinPRO пишет:
Пожалуйста - стартуйте только для тех, кто ошибся.

Действительно, что-то я...
Если есть ошибка, то старт сессии, а в классе отлова ошибок тоже старт сессии.

caballero
Конечно же читал. Читаю в основном мануалы на php.net. Доходит просто не сразу))) А метод тыка - есть практика
(Добавление)
Еще такой вопрос. Вот все мучаю модуль добавления статей. Получилось как-то мудрено.
Есть модуль, класс Articles и класс Validator.
Модуль проверяет, пришли ли постом все поля (вдруг юзер вырезал некоторые поля из html), далее вызывается статический метод класса Articles - saveArticle. В этом методе создается новый объект класса Validator и в конструктор передается ассоциативный массив с полями формы. Конструктор в свою очередь вызывает метод класса Validator - validateForm. В это метод передается этот же массив с полями формы. В методе validateForm выполняется foreach по массиву с вложенным switch по названию полей. В классе Validator есть свойства $error и $correct - оба массивы. В $correct пишутся поля, прошедшие валидацию - массив также ассоциативный. В $error пишутся все ошибки - массив типа список.
Далее метод saveArticle смотрит - есть ли что-то в $error, и если есть, то ничего не сохраняется, делается редирект на форму и вываливаются все ошибки. Ну и все введенные юзером данные вставляются в поля.

Ну вот как-то так.
Приведу код для наглядности. Результирующие действия тестовые (var_dump())

PHP:
скопировать код в буфер обмена
  1.  
  2. //form.php
  3. <?PHP
  4.  
  5. if(isset($_GET['option']) && $_GET['option'] == 'add'){
  6.         if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['add_article'])){
  7.                 if(isset($_POST['id_category']) && isset($_POST['title'])    &&
  8.                         isset($_POST['alias'])       && isset($_POST['article'])  &&
  9.                         isset($_POST['status'])      && isset($_POST['year'])     &&
  10.                         isset($_POST['month'])       && isset($_POST['day'])      &&
  11.                         isset($_POST['hour'])        && isset($_POST['minute'])   &&
  12.                         isset($_POST['description']) && isset($_POST['keywords']) &&
  13.                         isset($_POST['robot'])){
  14.                         $data = array(  'id_category' => $_POST['id_category'],
  15.                                                                 'title' => $_POST['title'],
  16.                                                                 'alias' => $_POST['alias'],
  17.                                                                 'article' => $_POST['article'],
  18.                                                                 'status' => $_POST['status'],
  19.                                                                 'created' => array(     'year' => $_POST['year'],
  20.                                                                                                                         'month' => $_POST['month'],
  21.                                                                                                                         'day' => $_POST['day'],
  22.                                                                                                                         'hour' => $_POST['hour'],
  23.                                                                                                                         'minute' => $_POST['minute'],
  24.                                                                                                                         'second' => date("s")),
  25.                                                                 'description' => $_POST['description'],
  26.                                                                 'keywords' => $_POST['keywords'],
  27.                                                                 'robot' => $_POST['robot']);
  28.                         $result = Articles::saveArticle($data);
  29.                         if(!$result){
  30.                                 var_dump($_SESSION['tmp_error']);
  31.                         }else{
  32.                                 echo "<pre>";
  33.                                 var_dump($_SESSION['art']);
  34.                                 echo "</pre>";
  35.                         }
  36.                 }else{
  37.                         echo "<h1>Новая статья</h1>";
  38.                         include_once(ROOT .'/mod/articles/articles_form_add.php');
  39.                 }
  40.         }else{
  41.                 echo "<h1>Новая статья</h1>";
  42.                 include_once(ROOT .'/mod/articles/articles_form_add.php');
  43.         }
  44. }else{
  45.         echo "<h1>Управление контентом</h1>";
  46. }
  47. ?>
  48.  


PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4. //Article.class.php
  5. class Articles{
  6.        
  7.         static function saveArticle($form){
  8.                 if(is_array($form) && count($form) > 0){
  9.                         $validate = new Validator($form);
  10.                         if(count($validate->error) > 0){
  11.                                 $_SESSION['tmp_error'] = $validate->error;
  12.                                 return false;
  13.                         }else{
  14.                                 $_SESSION['art'] = $validate->correct;
  15.                                 return true;
  16.                         }
  17.                 }
  18.         }
  19. }
  20. ?>
  21.  


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //Validator.class.php
  4.  
  5. class Validator{
  6.        
  7.         public $error = array();
  8.         public $correct = array();
  9.        
  10.         function __construct($data){
  11.                 $this->validateForm($data);
  12.         }
  13.        
  14.         private function validateForm($form){
  15.                 foreach($form as $k => $v){
  16.                         switch($k){
  17.                                 case 'id_category':
  18.                                         $db = DB::getDB();
  19.                                         $sql = "SELECT `id_category` FROM `". DB_PREFIX ."category` WHERE `id_category` = {?}";
  20.                                         $test = $db->selectOneValue($sql, array($v));
  21.                                         if(!$test){
  22.                                                 $this->error[] = 'Укажите категорию.';
  23.                                         }else{
  24.                                                 $this->correct[$k] = $v;
  25.                                         }
  26.                                         break;
  27.                                 case 'title':
  28.                                         $title = $this->cleanTag($v);
  29.                                         if((mb_strlen($title, 'UTF-8') < 10) || (mb_strlen($title, 'UTF-8') > 100)){
  30.                                                 $this->error[] = 'Длина заголовка от 10 до 100 символов.';
  31.                                         }else{
  32.                                                 $this->correct[$k] = $title;
  33.                                         }
  34.                                         break;
  35.                                 case 'alias':
  36.                                         $alias = $this->cleanTag($v);
  37.                                         if((mb_strlen($alias, 'UTF-8') < 10) || (mb_strlen($alias, 'UTF-8') > 100) || (preg_match("/[a-z0-9-]+/", $alias) != 1)){
  38.                                                 $this->correct[$k] = $this->translit($form['title']);
  39.                                         }else{
  40.                                                 $this->correct[$k] = $v;
  41.                                         }
  42.                                         break;
  43.                                 case 'article':
  44.                                         $article = $this->cleanTag($v);
  45.                                         if(mb_strlen($article, 'UTF-8') < 500){
  46.                                                 $this->error[] = 'Длина статьи не менее 500 символов.';
  47.                                         }else{
  48.                                                 $this->correct[$k] = $v;
  49.                                         }
  50.                                         break;
  51.                                 case 'status':
  52.                                         $status = $this->cleanTag($v);
  53.                                         if($v == 'ok'){
  54.                                                 $this->correct[$k] = 1;
  55.                                         }else{
  56.                                                 $this->correct[$k] = 3;
  57.                                         }
  58.                                         break;
  59.                                 case 'created':
  60.                                         $created = $this->cleanTag($v);
  61.                                         if(checkdate($created['month'], $created['day'], $created['year']) && ($created['hour'] <= 23 && $created['hour'] >= 0) && ($created['minute'] <= 59 && $created['minute'] >= 0)){
  62.                                                 $this->correct[$k] = $v['year'] .'-'. $v['month'] .'-'. $v['day'] .' '. $v['hour'] .':'. $v['minute'] .':'. $v['second'];
  63.                                         }else{
  64.                                                 $this->correct[$k] = date("Y-m-d H:i:s");
  65.                                         }
  66.                                         break;
  67.                                 case 'description':
  68.                                         $description = $this->cleanTag($v);
  69.                                         if(mb_strlen($description, 'UTF-8') > 140){
  70.                                                 $description = $this->textTrim($description, 140);
  71.                                                 $this->correct[$k] = $description;
  72.                                         }else{
  73.                                                 $this->correct[$k] = $description;
  74.                                         }
  75.                                         break;
  76.                                 case 'keywords':
  77.                                         $keywords = $this->cleanTag($v);
  78.                                         $arr_key = explode(",", $keywords);
  79.                                         if(count($arr_key) > 3){
  80.                                                 $arr_key = array_slice($arr_key, 0, 3);
  81.                                                 $this->correct[$k] = implode(", ", $arr_key);
  82.                                         }elseif(((count($arr_key) > 0) && (count($arr_key) <= 3)) || ((count($arr_key) == 0) && (gettype($keywords) == 'string'))){
  83.                                                 $this->correct[$k] = $keywords;
  84.                                         }
  85.                                         break;
  86.                                 case 'robot':
  87.                                         $robot = (int)$v;
  88.                                         if($robot < 1 || $robot > 4){
  89.                                                 $this->correct[$k] = 1;
  90.                                         }else{
  91.                                                 $this->correct[$k] = $robot;
  92.                                         }
  93.                                         break;
  94.                         }
  95.                 }
  96.         }
  97.        
  98.         private function translit($str){
  99.                 $str = mb_strtolower($str, 'UTF-8');
  100.                 $abc = array(   'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
  101.                                                         'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i',
  102.                                                         'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n',
  103.                                                         'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't',
  104.                                                         'у' => 'u', 'ф' => 'f', 'х' => 'kh', 'ц' => 'ts', 'ч' => 'ch',
  105.                                                         'ш' => 'sh', 'щ' => 'shh', 'ъ' => ' ', 'ы' => 'y', 'ь' => ' ',
  106.                                                         'э' => 'e', 'ю' => 'yu', 'я' => 'ya', ' ' => '-',
  107.                                                 );
  108.                 $result = iconv('UTF-8', 'UTF-8//TRANSLIT', strtr($str, $abc));
  109.                 $result = preg_replace("/[^a-z0-9-]/", "", $result);
  110.                 $result = preg_replace("/-{2,}/", "-", $result);
  111.                 $result = trim($result, '-');
  112.                 return $result;
  113.         }
  114.        
  115.         private function textTrim($text, $length, $points = false){
  116.                 /*
  117.                 ** $text   - усекаемый текст
  118.                 ** $length - необходимая длина текста
  119.                 ** $points - окончание (...)
  120.                 ** Возвращает
  121.                 **  - урезанный текст
  122.                 **  - или пустую строку
  123.                 */
  124.                 $text_cut = mb_substr($text, 0, $length, 'utf-8');
  125.                 $text_cut = mb_strrichr($text_cut, " ", true, 'utf-8');
  126.                 $lc = mb_substr($text_cut, -1, 1, 'utf-8');
  127.                 while(preg_match("/[a-z]|[а-я]|[0-9]/ui", $lc) != 1){
  128.                         $text_cut = rtrim($text_cut, $lc);
  129.                         $lc = mb_substr($text_cut, -1, 1, 'utf-8');
  130.                 }
  131.                 if(!$text_cut){
  132.                         return "";
  133.                 }else{
  134.                         if($points && (gettype($points) == 'string')){
  135.                                 return $text_cut . $points;
  136.                         }else{
  137.                                 return $text_cut;
  138.                         }
  139.                 }
  140.         }
  141.        
  142.         private function cleanTag($val){
  143.                 if(is_array($val) && count($val) > 0){
  144.                         foreach($val as $k => $v){
  145.                                 $val[$k] = trim(preg_replace("/\n|\r|\n\r|\r\n/", " ", strip_tags($v)));
  146.                         }
  147.                 }else{
  148.                         $val = trim(preg_replace("/\n|\r|\n\r|\r\n/", " ", strip_tags($val)));
  149.                 }
  150.                 return $val;
  151.         }
  152. }
  153. ?>
  154.  
Hapson Отправлено: 09 Августа, 2013 - 21:15:11 • Тема: Синтаксис сложного if с операторами сравнения • Форум: Вопросы новичков

Ответов: 3
Просмотров: 132
Мелкий
Спасибо, понятно.
Просто работает и так и так, но хотелось бы знать, как будет более правильно. То что лишние скобки не помешают - это понятно. Не хочется захламлять код лишними знаками.
Hapson Отправлено: 09 Августа, 2013 - 21:02:20 • Тема: Синтаксис сложного if с операторами сравнения • Форум: Вопросы новичков

Ответов: 3
Просмотров: 132
Здравствуйте.
Помогите пожалуйста разобраться. Ниже приведу код if - скажите, какой более правильный

PHP:
скопировать код в буфер обмена
  1. if(checkdate($month, $day, $year) && ($hour >= 0 && $hour <= 23) && ($minute >= 0 && $minute <= 59)){
  2.         echo "Дата верна";
  3. }
  4. //или так
  5. if(checkdate($month, $day, $year) && (($hour >= 0) && ($hour <= 23)) && (($minute >= 0) && ($minute <= 59))){
  6.         echo "Дата верна";
  7. }


Обратите внимание на дополнительные скобки во втором примере - нужны ли они?
(Добавление)
ps
или вот еще

PHP:
скопировать код в буфер обмена
  1. if(preg_match("/[a-z]+/", $str) == 1 && $val1 == $val2){
  2.         echo "Совпадает";
  3. }
  4.  
  5. if((preg_match("/[a-z]+/", $str) == 1) && ($val1 == $val2)){
  6.         echo "Совпадает";
  7. }
Hapson Отправлено: 07 Августа, 2013 - 19:40:27 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
DelphinPRO пишет:
сессия доступна даже без авторизации Улыбка

подход вполне нормальный.

Доступна... если она стартовала и у пользователя включены куки.
Массив $_SESSION доступен и без session_start(), но это какбы недокументырованная возможность.
Ну а я больше не вижу способа передавать ошибки между перезапросами страниц. Только БД или сессия. Ну я так думаю, те у кого откл куки - идут лесом.
Однако такой способ отлова ошибок жестко обязывает стартовать сессию для каждого. То есть уже не получится выборочный старт сессии только для тех, кто уже заходил на сайт.
Hapson Отправлено: 07 Августа, 2013 - 18:03:27 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
DeepVarvar
Прошу прощения за дубль. Просто запостил сообщение в старую тему, смотрю - а она не поднялась вверх, думаю ответов уже не дождусь. Поэтому начал новую тему.
DelphinPRO
Все понятно. Мда... дальше будет видно. Думаю лучше оставить валидацию самому модулю, так как процесс специфичный - много нужно проверять. У каждого поля свои особенности.
(Добавление)
PS
А вообще нормальный ли это подход - организовывать сборщик ошибок посредством сессии? Просто не вижу иного способа кроме как задействовать БД. В процессе добавления статьи сессия однозначно будет доступна, так как для данного действа необходимо авторизоваться на сайте.
Hapson Отправлено: 06 Августа, 2013 - 23:58:07 • Тема: ООП пытаюсь писать • Форум: Объектно-ориентированное программирование

Ответов: 68
Просмотров: 9277
Наставьте меня на путь истинный Огорчение
Пишу модуль управления контентом. Пока в папке mod_articles есть два файла:
articles.php - обрабатывает форму добавления статьи
articles_form.php - форма добавления

В форме есть поля:
category
title
alias (заполняется в ручную или формируется из title, но обязательно соответствует шаблону "a-z0-9-")
article (сама статья)
public (показывать или нет статью)
created (дата создания)
description
keywords
robot ("index, follow", "index, nofollow", "noindex, follow" или "noindex, ofollow")

И есть класс, который по задумке будет сохранять новые статьи, обновлять существующие (редактирование) и выводить статьи.
Пока в классе ничего нет, кроме функции транслитерации для формирования alias.

Проблема в чем: кто должен проверять валидность полей формы - модуль или метод класса?
Сейчас у меня в файле модуля куча if, которые проверяют валидность. После поста проверяются все поля и если где-то есть несоответствие, то сообщение об ошибке пишется в массив $_SESSION['tmp_art']. После сбора всех ошибок, провряется, есть ли этот массив, и если он есть, то происходит редирект на форму и вывод всех найденных ошибок. Введенные данные вставляются в форму.

Так вот, где должна проходить валидация полей - в файле модуля или в методе класса - saveArticle().
Модуль должен передать методу $_POST или он должен его подготовить для вставки?
Hapson Отправлено: 02 Августа, 2013 - 10:32:55 • Тема: Запись временных данных в $_SESSION • Форум: Вопросы новичков

Ответов: 7
Просмотров: 421
DlTA пишет:
Hapson, а записанные данные вы в других файлах, без станта сессии тоже читаете?

Записывал в одном, а читалось в другом.
Если $_SESSION подменял на простую переменную, то уже не прокатывало. Переменная, в которую я записал строку, в другом файле уже считалась не определенной, так как другой файл подключался после перезагрузки страницы.
(Добавление)
Мелкий пишет:
$_SESSION - суперглобальный массив.
В пределах скрипта ему нет разницы, был ли session_start, он останется суперглобальным. Но без старта сессии всё записанное сохранено в следующем вызове не будет.
Однако, не рекомендовал бы пользоваться этой особенностью. Это недокументированная особенность, может поменяться.

Понятно.
А я уже губу раскатал...
Я сделал старт сессии только тем, у кого есть идентификатор в куках. Видимо придется просто стартовать сессию в начале.
(Добавление)
ЗЫ
А нет ли еще способа передачи временных данных между скриптами, кроме гет и сессий.
Никак не могу красиво реализовать авторизацию.
Форму авторизации сделал вверху страницы - горизонтальную. Если пользователь правильно ввел email и password, то на этом же месте появляется приветствие. Здесь все просто - в скрипте авторизации в конце инклудится либо форма, либо приветствие, в зависимости от результата работы скрипта.
Однако, результатов не два, а много больше:

1. пользователь ввел не верные данные
2. ввел не все данные
3. нажал кнопку регистрации
4. нажал кнопку восстановления пароля...

Во всех этих случаях нужно выводить другие формы, но уже не вверху страницы, а в области контента.

Ну инклудить в область контента файлики с html формами я могу только через гет:

index.php?mod=auth&error=incorrect
index.php?mod=auth&error=empty_field
index.php?mod=auth&option=register
...

А вот как передать сообщение в эти формы я не знаю. Причем если пользователь ввел не верные данные или ввел не все данные, то инклудится одна и та же форма, а вот сообщения нужно вывести разные.

Как-то так...

Страниц (24): В начало « ... 12 13 14 15 [16] 17 18 19 20 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB