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]
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
caballero пишет:
и шо сие за конструкция?
Ну эта конструкция выводит имя
caballero пишет:
по идее должно быть
Цитата:
echo $_SESSION->getUser()->getName();
Еще один метод?
caballero пишет:
во т это в конструкторе тоже не годится
Цитата:
$_SESSION = $this;
$_SESSION['user'] = $this ?
caballero пишет:
и чего вы данные с формы в юзера пихаете
Не ну это для примера, конечно данные фильтруются, запрос в БД...
И все это конечно не в конструкторе. Просто коротко написал.
Мне не понятно как положить объект в сессию и потом обращаться к его свойствам.
Плюс еще прочитал, что стартовать сессию при таком раскладе нужно после чтения классов. Но у меня почему-то и так заработало.
Я сначала отправлял данные, потом комментировал строки приема данных и объявления нового объекта, и в сессии все равно оставался объект класса Users.
caballero пишет:
если разлогинися
$_SESSION["user"] = null;
еслественно нужны проверки на null;
потму я и написал в соседней ветке что лучше фейковый юзер
В какой ветке? Какой фейковый?
И вообще я что-то не пойму смысла. Свойства приватные и чтобы к ним обратиться, нужно писать метод. В чем смысл?
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 29 Июля, 2013 - 20:34:12
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Еще один метод?
да
лишнее написал
echo $_SESSION["user"]->getName();
Цитата:
Мне не понятно как положить объект в сессию и потом обращаться к его свойствам.
я ж писал
$_SESSION["user"] = $user;
...
$_SESSION["user"]->getName();
Цитата:
Плюс еще прочитал, что стартовать сессию при таком раскладе нужно после чтения классов. Но у меня почему-то и так заработало.
если в сессии хранятся екземпяры классов то до старта сесси доджны быть включены инклуды с классами либо подключен автолоад
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
caballero пишет:
я ж писал
$_SESSION["user"] = $user;
...
$_SESSION["user"]->getName();
Ага понятно. То есть в $_SESSION['user'] кладем авторизованного юзера со всеми нужными свойствами и имеем метод для обращения к этим самым свойствам.
А почему такой метод не подойдет
У меня новая катастрофа... отключил куки в браузере и сломалась авторизация. Авторизация проходит, но сбрасывается после первого обновления страницы.
В .htaccess
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
caballero пишет:
лучше уж слделайте поля класса публичными и обращайтесь напрямую
Ну вот и я о том же - в чем смысл приватности?
caballero пишет:
ну и зачем их отключать и делать катастрофу на ровном месте?
Ну так, если пользователь отключит? phpsessid генерируется при каждом обновлении, но в адресную строку не передается.
Или авторизация без куков невозможна?
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
caballero
Отправлено: 29 Июля, 2013 - 22:02:49
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Ну вот и я о том же - в чем смысл приватности?
в PHP смысла немного а в компилируемых языках там можно реально закрыть доступ к приватным членам.
Цитата:
Ну так, если пользователь отключит?
с какой стати? тем более у него при этом будут проблеммы и с другими сайтами.
Цитата:
Или авторизация без куков невозможна?
авторизаия тут не при чем. просто не работает сессия. Но вообще она должна работать присваивая SESSIONID к URL
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
caballero пишет:
в PHP смысла немного а в компилируемых языках там можно реально закрыть доступ к приватным членам.
Теперь ясно.
caballero пишет:
с какой стати? тем более у него при этом будут проблеммы и с другими сайтами.
Ну так-то да - кто отключил, это ихние проблемы. Меня с этого форума выкидывает без куков. Просто я думал, что это я что-то не так написал в скрипте. Вроде написано, что phpsessid автоматически подставляется, но что-то не подставляется он.
Сделал такую ссылку:
И в к каждой ссылке приписывать <?php echo SID ?>
И еще формы.... (Добавление)
PPS
В формы вставляется скрытое поле. А вот к ссылкам не добавляется phpsessid
Ну и ладно...
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Hapson
Отправлено: 06 Августа, 2013 - 23:58:07
Посетитель
Покинул форум
Сообщений всего: 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 или он должен его подготовить для вставки?
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DeepVarvar
Отправлено: 07 Августа, 2013 - 02:10:31
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DelphinPRO пишет:
на этот вопрос нет однозначного ответа. как решите, так и будет. главное, чтобы это было удобно.
пожно подумать в таком направлении: данные нужно валидировать не только в модуле статей, а и в других модулях. значит код валидации следует вынести оттуда, и сделать легко доступным. Например описать несколько функций для валидации рзличных типов данных, или запилить целый класс Validator с набором методов (вероятно, статичных).
И это лишь одно из возможных видений решения задачи.
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
DeepVarvar
Прошу прощения за дубль. Просто запостил сообщение в старую тему, смотрю - а она не поднялась вверх, думаю ответов уже не дождусь. Поэтому начал новую тему. DelphinPRO
Все понятно. Мда... дальше будет видно. Думаю лучше оставить валидацию самому модулю, так как процесс специфичный - много нужно проверять. У каждого поля свои особенности. (Добавление)
PS
А вообще нормальный ли это подход - организовывать сборщик ошибок посредством сессии? Просто не вижу иного способа кроме как задействовать БД. В процессе добавления статьи сессия однозначно будет доступна, так как для данного действа необходимо авторизоваться на сайте.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DelphinPRO
Отправлено: 07 Августа, 2013 - 18:48:22
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
сессия доступна даже без авторизации
подход вполне нормальный.
----- Чем больше узнаю, тем больше я не знаю.
Hapson
Отправлено: 07 Августа, 2013 - 19:40:27
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
DelphinPRO пишет:
сессия доступна даже без авторизации
подход вполне нормальный.
Доступна... если она стартовала и у пользователя включены куки.
Массив $_SESSION доступен и без session_start(), но это какбы недокументырованная возможность.
Ну а я больше не вижу способа передавать ошибки между перезапросами страниц. Только БД или сессия. Ну я так думаю, те у кого откл куки - идут лесом.
Однако такой способ отлова ошибок жестко обязывает стартовать сессию для каждого. То есть уже не получится выборочный старт сессии только для тех, кто уже заходил на сайт.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
DelphinPRO
Отправлено: 07 Августа, 2013 - 23:22:35
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Hapson пишет:
и у пользователя включены куки.
неверно
Hapson пишет:
Однако такой способ отлова ошибок жестко обязывает стартовать сессию для каждого.
Пожалуйста - стартуйте только для тех, кто ошибся.
Hapson пишет:
Ну а я больше не вижу способа передавать ошибки между перезапросами страниц.
Сесси как раз и созданы для того, чтобы передавать данные между запросами.
----- Чем больше узнаю, тем больше я не знаю.
caballero
Отправлено: 07 Августа, 2013 - 23:40:18
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Hapson
почему бы вам не почитать какой нибудь учебник.
В том числе как работать с сессиями.
Зачем использовать метод тыка и предположения если есть четкие описания как что работает и для чего применяется.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.