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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ООП пытаюсь писать [4]

 PHP.SU

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


 Страниц (5): « 1 2 3 [4] 5 »   

> Описание: Посмотрите, это ООП или ГК...?
caballero
Отправлено: 29 Июля, 2013 - 18:04:53
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




зачем вам тогда ООП если можно сляпать массив и все туда запихнуть

и шо сие за конструкция?

PHP:
скопировать код в буфер обмена
  1. echo $_SESSION->getUser("name")



по идее должно быть

Цитата:
echo $_SESSION->getUser()->getName();


во т это в конструкторе тоже не годится
Цитата:
$_SESSION = $this;



и чего вы данные с формы в юзера пихаете


PHP:
скопировать код в буфер обмена
  1. $user = User::checkLogin($_POST['name'],  $_POST['password']);
  2.  
  3. if($user  instanceof  User){
  4.    $_SESSION["user"] = $user;
  5. }
  6.  

а дальше где нужно уже как написано выше

PHP:
скопировать код в буфер обмена
  1. echo $_SESSION->getUser()->getName();


если разлогинися

$_SESSION["user"] = null;


еслественно нужны проверки на null;
потму я и написал в соседней ветке что лучше фейковый юзер

(Отредактировано автором: 29 Июля, 2013 - 18:05:54)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 29 Июля, 2013 - 18:24:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


caballero пишет:
и шо сие за конструкция?

Ну эта конструкция выводит имя
caballero пишет:
по идее должно быть

Цитата:
echo $_SESSION->getUser()->getName();

Еще один метод?
caballero пишет:
во т это в конструкторе тоже не годится
Цитата:
$_SESSION = $this;

$_SESSION['user'] = $this ?
caballero пишет:
и чего вы данные с формы в юзера пихаете

Не ну это для примера, конечно данные фильтруются, запрос в БД...
И все это конечно не в конструкторе. Просто коротко написал.
Мне не понятно как положить объект в сессию и потом обращаться к его свойствам.
Плюс еще прочитал, что стартовать сессию при таком раскладе нужно после чтения классов. Но у меня почему-то и так заработало.
Я сначала отправлял данные, потом комментировал строки приема данных и объявления нового объекта, и в сессии все равно оставался объект класса Users.
caballero пишет:
если разлогинися

$_SESSION["user"] = null;


еслественно нужны проверки на null;
потму я и написал в соседней ветке что лучше фейковый юзер

В какой ветке? Какой фейковый?

И вообще я что-то не пойму смысла. Свойства приватные и чтобы к ним обратиться, нужно писать метод. В чем смысл?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 29 Июля, 2013 - 20:34:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Еще один метод?

да
лишнее написал

echo $_SESSION["user"]->getName();

Цитата:
Мне не понятно как положить объект в сессию и потом обращаться к его свойствам.

я ж писал
$_SESSION["user"] = $user;
...
$_SESSION["user"]->getName();

Цитата:
Плюс еще прочитал, что стартовать сессию при таком раскладе нужно после чтения классов. Но у меня почему-то и так заработало.
если в сессии хранятся екземпяры классов то до старта сесси доджны быть включены инклуды с классами либо подключен автолоад


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 29 Июля, 2013 - 21:23:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


caballero пишет:
я ж писал
$_SESSION["user"] = $user;
...
$_SESSION["user"]->getName();

Ага понятно. То есть в $_SESSION['user'] кладем авторизованного юзера со всеми нужными свойствами и имеем метод для обращения к этим самым свойствам.
А почему такой метод не подойдет

PHP:
скопировать код в буфер обмена
  1. class Users{
  2.    private $name;
  3.    private $password;
  4.  
  5.    function getUserData($val){
  6.       return $this->$val;
  7.    }
  8. }
  9.  
  10. //и обращаться
  11.  
  12. echo $_SESSION['user']->getUserData("name");


PS

У меня новая катастрофа... отключил куки в браузере и сломалась авторизация. Авторизация проходит, но сбрасывается после первого обновления страницы.
В .htaccess

php_value session.use_trans_sid 1
php_value session.use_cookies 1
php_value session.use_only_cookies 0

PHPSESSID не передается...


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 29 Июля, 2013 - 21:39:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
А почему такой метод не подойдет

подойдет но как то это через одно место

лучше уж слделайте поля класса публичными и обращайтесь напрямую

Цитата:
У меня новая катастрофа... отключил куки в браузере и сломалась авторизация.

ну и зачем их отключать и делать катастрофу на ровном месте?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 29 Июля, 2013 - 21:44:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


caballero пишет:
лучше уж слделайте поля класса публичными и обращайтесь напрямую

Ну вот и я о том же - в чем смысл приватности?
caballero пишет:
ну и зачем их отключать и делать катастрофу на ровном месте?

Ну так, если пользователь отключит? phpsessid генерируется при каждом обновлении, но в адресную строку не передается.
Или авторизация без куков невозможна?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 29 Июля, 2013 - 22:02:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Ну вот и я о том же - в чем смысл приватности?

в PHP смысла немного а в компилируемых языках там можно реально закрыть доступ к приватным членам.

Цитата:
Ну так, если пользователь отключит?

с какой стати? тем более у него при этом будут проблеммы и с другими сайтами.

Цитата:
Или авторизация без куков невозможна?


авторизаия тут не при чем. просто не работает сессия. Но вообще она должна работать присваивая SESSIONID к URL


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 29 Июля, 2013 - 22:17:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


caballero пишет:
в PHP смысла немного а в компилируемых языках там можно реально закрыть доступ к приватным членам.

Теперь ясно.
caballero пишет:
с какой стати? тем более у него при этом будут проблеммы и с другими сайтами.

Ну так-то да - кто отключил, это ихние проблемы. Меня с этого форума выкидывает без куков. Просто я думал, что это я что-то не так написал в скрипте. Вроде написано, что phpsessid автоматически подставляется, но что-то не подставляется он.
Сделал такую ссылку:
PHP:
скопировать код в буфер обмена
  1. <a href="http://blog/index.php?<?PHP echo SID ?>">Link</a>

При клике по ней id сессии не меняется и не выкидывает. А если кликнуть на
PHP:
скопировать код в буфер обмена
  1. <a href="http://blog/index.php">Link</a>

то id меняется и сразу выкидывает. id не подставляется автоматом, как пишут.
(Добавление)
PS
Я так понял, чтоб работало у всех, то нужно писать так
PHP:
скопировать код в буфер обмена
  1. session_id(md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']));//и еще что-нибудь...


И в к каждой ссылке приписывать <?php echo SID ?>
И еще формы....
(Добавление)
PPS
В формы вставляется скрытое поле. А вот к ссылкам не добавляется phpsessid
Ну и ладно...

(Отредактировано автором: 29 Июля, 2013 - 22:22:32)



-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Hapson
Отправлено: 06 Августа, 2013 - 23:58:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


Наставьте меня на путь истинный Огорчение
Пишу модуль управления контентом. Пока в папке 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 или он должен его подготовить для вставки?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Августа, 2013 - 02:10:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




DelphinPRO пишет:
на этот вопрос нет однозначного ответа. как решите, так и будет. главное, чтобы это было удобно.
пожно подумать в таком направлении: данные нужно валидировать не только в модуле статей, а и в других модулях. значит код валидации следует вынести оттуда, и сделать легко доступным. Например описать несколько функций для валидации рзличных типов данных, или запилить целый класс Validator с набором методов (вероятно, статичных).
И это лишь одно из возможных видений решения задачи.
 
 Top
Hapson
Отправлено: 07 Августа, 2013 - 18:03:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


DeepVarvar
Прошу прощения за дубль. Просто запостил сообщение в старую тему, смотрю - а она не поднялась вверх, думаю ответов уже не дождусь. Поэтому начал новую тему.
DelphinPRO
Все понятно. Мда... дальше будет видно. Думаю лучше оставить валидацию самому модулю, так как процесс специфичный - много нужно проверять. У каждого поля свои особенности.
(Добавление)
PS
А вообще нормальный ли это подход - организовывать сборщик ошибок посредством сессии? Просто не вижу иного способа кроме как задействовать БД. В процессе добавления статьи сессия однозначно будет доступна, так как для данного действа необходимо авторизоваться на сайте.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DelphinPRO
Отправлено: 07 Августа, 2013 - 18:48:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




сессия доступна даже без авторизации Улыбка

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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Hapson
Отправлено: 07 Августа, 2013 - 19:40:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


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

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

Доступна... если она стартовала и у пользователя включены куки.
Массив $_SESSION доступен и без session_start(), но это какбы недокументырованная возможность.
Ну а я больше не вижу способа передавать ошибки между перезапросами страниц. Только БД или сессия. Ну я так думаю, те у кого откл куки - идут лесом.
Однако такой способ отлова ошибок жестко обязывает стартовать сессию для каждого. То есть уже не получится выборочный старт сессии только для тех, кто уже заходил на сайт.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
DelphinPRO
Отправлено: 07 Августа, 2013 - 23:22:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




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

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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 07 Августа, 2013 - 23:40:18
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Hapson
почему бы вам не почитать какой нибудь учебник.
В том числе как работать с сессиями.

Зачем использовать метод тыка и предположения если есть четкие описания как что работает и для чего применяется.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (5): « 1 2 3 [4] 5 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB