«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
PHP THREAD Аноним 2016/07/28 18:52:22  №807538 1
14697211425470.png (32, 500x500)
500x500
14697211425471.jpg (29, 300x428)
428x300
14697211425482.jpg (38, 604x453)
453x604
14697211425493.jpg (61, 488x604)
604x488
PHP Thread не легитимный, поднятый непонятно кем, откуда-то со дна.

Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

Это не чат! Пожалуйста старайтесь постить только вопросы, решения и ответы по теме. Сколько лет вы не можете найти работу никому не интересно. Высказывайтесь одним большим постом, а не цепочкой мелких

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).

Предыдущий тред был тут: >>793705 (OP) (OP)

Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост прежде чем писать код).

Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.

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

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

Надо переходить к более серьезным задачкам, которые научат тебя всему этому.

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1

Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить?
— hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Аноним 2016/07/28 19:16:14  №807554 2
>>807538 (OP)
Щас Оп сначала будет ныть, а потом просто зарепортит тред и сделает дубль. Ты понимаешь, что отбираешь у шизика смысл жизни?
Аноним 2016/07/28 19:26:04  №807562 3
>>807554
При чем тут ныть? Надо переносить нормально со вторым и третьим постом со всеми пастами и прочим номером и тегом.

Нахуй браться переносить, если ты не можешь нормально сделать???
Аноним 2016/07/28 19:43:29  №807577 4
>>793705 (OP)
Кокой из тредов теперь легитимный? Посоны, мне нужна жс галерейка типа такой:
http://www.family.su/woman.html
+ в идеале, подписи запилить к каждой
увеличиваемой пикче.
+ очень опционально - форма заказа.
Сам вряд ли справлюсь. Подскажете какую-нибудь готовую и максимум лаконичную и понятную реализацию, просто готовый скрипт "встрой в страницу и забудь" или русскоязычный гайд по самостоятельному запилу подобного на жс? Попова не предлагать, там не то и еще большие азы.
Аноним 2016/07/28 23:38:44  №807835 5
Аноним 2016/07/29 11:10:40  №808084 6
>>807554
Только быдло может назвать шизиком того кто приносит пользу.
Только быдлу нужно никак не отличаться чтобы считаться нормальным.
Аноним 2016/07/29 17:04:31  №808390 7
Аноним 2016/07/30 14:30:55  №808789 8
>>808390
а что тебя смущает?
Аноним 2016/07/30 16:22:48  №808962 9
14698849689890.png (6, 800x600)
600x800
почему не происходит переопределение элементов массива result ?
Аноним 2016/07/30 16:23:16  №808963 10
>>808962
массив return , быстрофикс
Аноним 2016/07/30 16:29:57  №808966 11
Посоветуйте нормальную IDE (можно крякнутую) под мои скромные требования, а то сложные проги под себя настроить не могу:
1) Автозакрытие скобок и кавычек, но такое, чтоб если я сам дописывал скобки - автоматические "затирались".
2) Логические фигурные скобки

3) Список юзерский классов и методов сбоку
4) Чтоб ошибки отображал
5) Сворачивание блоков кода
6) Приятная подробная подсветка кода
Аноним 2016/07/30 16:30:38  №808967 12
>>808966
Еще "проекты" и вкладки, но это везде есть)
Аноним 2016/07/30 16:40:46  №808977 13
>>808966
netbeans , phpstorm

без отображения ошибок , про классы и методы не знаю, возможно достроить можно - sublime
Аноним 2016/07/30 17:26:40  №809011 14
>>807538 (OP)
антоны, какой минимум надо иметь в портфолио чтобы устроиться пхп разрабом на первую работу?
мне 24 года...
Аноним 2016/07/30 23:59:25  №809129 15
>>809011
джуном можно и без портфолио, а вообще просто пробуй и ходи по собеседованиям
Аноним 2016/07/31 11:11:43  №809250 16
>>808966
НетЕбинс достаточно толковая идешка, в тобой названные пункты вполне может, только надо немного повозиться с настройкой.
Аноним 2016/07/31 12:01:41  №809279 17
Хочу устроиться на работу, небольшой опит с похапе есть - писал на нём диплом, еще одну шнягу, немного решал задачки ОП`а(хочу еще дорешать, вот сел). Но конкретно не работал на похапе нигде.

Но у меня есть несколько вопросов:
1). Какой уровень надо, чтобы устраиваться на работу в первый раз? Что знать, что уметь?
2). Мне искать стажировку или сразу должность джуниора?
Аноним 2016/07/31 12:14:32  №809290 18
>>809279
>Что знать, что уметь?
Глотать и оптимистично улыбаться краешками губ.
Аноним 2016/07/31 17:34:09  №809562 19
>>809279
зависит от студии/фирмы куда собираешься устраиваться.. кто-то берет новичков и прокачивает их за пару месяцев и потом берет на должность джуниора. У нас такая куйня практикуется.

В общем с чего-то начинать в любом случае надо. Если толком не умеешь ничего - то придется на дошираке пару месяцев посидь
Аноним 2016/07/31 17:36:36  №809564 20
>>809250
кривая она как черти что, еще и на линуксе вечные проблемы с интерфейсом
Аноним 2016/07/31 18:02:52  №809603 21
>>809562
Ну а как самому знать на что претендовпть? Или в компании скажут?
Аноним 2016/07/31 18:05:42  №809605 22
>>809129
пробовал.
из одной компании прислали задания на время, сделал около 70пр. Через неделю прислали письмо что мой результат ниже среднего по кандидатам на эту должность. Остальные компании просто игнорят.
Аноним 2016/07/31 21:42:30  №809752 23
Всем привет. Поясните, пожалуйста, как наступает момент перехода от самой джуновской работы до чуть более продвинутой. Вот я сейчас делаю самую легчайшую работу, уже она никаких вопросов давно не вызывает, в свободное время учусь дальше, не стою на месте. В какой момент нужно просить работы сложнее? И как правильно просить? Если скажут, что сиди и делай то, что делаешь, стоит искать другую работу, или сидеть на этой, и учиться пока не появится 100%-ая уверенность в себе?
Аноним 2016/08/01 12:19:08  №810168 24
Аноним 2016/08/01 14:20:23  №810240 25
>>809752
не торопись слазить с простой работы. осваивай жабу или хаскель в свободное время, андроид на жаве посмотри опять же. это все денежное, интересное и очень востребованное.
Аноним 2016/08/01 17:12:19  №810339 26
Аноним 2016/08/01 21:10:42  №810539 27
>>808789
Я нубка конечно, но :: - вызов метода статичного класса? А в коде "new Singleton();" тоесть класс динамический.
Почему не ->
Аноним 2016/08/02 04:11:17  №810823 28
Аноним 2016/08/02 08:00:00  №810853 29
>>808390
1) У синглтона приватный конструктор, ты не понимаешь синглтон.
2) Синглтон это антипаттерн, так как является по сути глобальной переменной.

>>810339
>>810823
Хули ты бампаешь через каждый пост? Написано же в шапке "PHP Thread не легитимный, поднятый непонятно кем".
Аноним 2016/08/02 11:15:27  №810948 30
http://ideone.com/4yP8nu
Аноны, можете помочь с задачкой? Я что-то вообще в тупике.
Аноним 2016/08/02 11:39:04  №810967 31
>>810948
function splitStr(str)
{
var myArray=str.split("");
console.log(myArray);
};
splitStr('Кот');
Аноним 2016/08/02 11:40:55  №810970 32
>>810948
А что ты пытаешься сделать, непонятно же.
Аноним 2016/08/02 12:13:58  №810988 33
14701292384480.jpg (6, 252x288)
288x252
>>807538 (OP)
Суп, аноны. Ответьте ньюфагу, плиз.

Ноль в программировании является натуральным числом?
Аноним 2016/08/02 12:21:06  №810994 34
Аноним 2016/08/02 12:28:33  №810998 35
>>810994
Ну не стукай, братишка.
Существуют два подхода к определению натуральных чисел — одни авторы причисляют ноль к натуральным числам[6], другие этого не делают. В российских школьных программах по математике не принято причислять ноль к натуральным числам, хотя это затрудняет некоторые формулировки (например, приходится различать деление с остатком и деление нацело). В качестве компромисса в источниках иногда рассматривают «расширенный натуральный ряд», включающий нуль[7].
Аноним 2016/08/02 12:50:47  №811009 36
>>810988
А тебе зачем? В программировании все на английском языке, там такого слова нет. В программирование int (integer) и str(string), positive integer (понятно. что ноль не входит), whole, floats. Все гораздо яснее, чем на русском манязыке.
Аноним 2016/08/02 13:07:14  №811042 37
>>811009
Да просто интересно стало. Конечно, ноль - целое число. Но если говорить о том, что с 0 начинается отсчет в программировании, тогда, если его можно посчитать (как и другие числа), то оно становится натуральным ТАМ. И как оно может быть целым, абсолютным или каким-либо еще в других сферах. Вот такой вот вопрос.
Аноним 2016/08/02 14:53:59  №811139 38
>>810853
И чо мне делать? Оп прошлого треда сказал, мол, хтмл у тебя говно, делай задачки, потом покажешь мне.

Тот тред лежит на семисотых постах, а здесь не пишет никто. Чо делать-то?
Аноним 2016/08/02 15:15:17  №811148 39
>>811139
> И чо мне делать?
Не думать, что у людей, которые "за спасибо" тебе (и не только тебе) помогают, всегда и на всех есть время. Делай следующие задачи.

> Тот тред лежит
Он по-прежнему активен.
Аноним 2016/08/03 03:31:09  №811690 40
Устроился на работу с Маджентой. Есть подводные камни?
Аноним 2016/08/03 05:29:53  №811707 41
>>811139

ОП придет и проверит, но не сегодня. И наверно не завтра. Решай пока дальше, не жди никого.
Аноним 2016/08/03 09:06:02  №811781 42
Вот вы мне скажите, в задачке на палинжромы умышленно вводят в заблуждение открытыми частями кода, или блять я тупой нахуй в край, я заебался же
Аноним 2016/08/03 09:37:34  №811794 43
>>811781
Нафига зацикливать с половины фразы у которой есть пробелы и заглавные буквы? Помогити =(99
Аноним 2016/08/03 10:10:18  №811805 44
14702082184930.png (44, 1149x756)
756x1149
14702082184941.png (57, 1280x1024)
1024x1280
14702082184962.png (44, 706x692)
692x706
>>811781
>>811794
Короче, на первой картинке не палиндром, на второй палиндром.

На третьей то, чего от меня хотел добиться оп

Че там делать то надо? Поясните же!
Аноним 2016/08/03 10:10:50  №811806 45
Сука, не обрезал картинку
Аноним 2016/08/03 12:50:32  №811903 46
бамп
Composer Аноним 2016/08/03 15:52:06  №812083 47
14702287263620.jpg (15, 382x215)
215x382
привет аноно. уже который раз возвращаюсь к попыткам установить composer и терплю трудности.
что я уже сделал: скачал экзешник компосера.
при установки он запрашивает php.exe (я указываю путь к денверу где лежит этот файл, но установщик ловит много ошибок и прекращает работу)
что мне делать? что он от меня хочет?
мне дополнительно установить апач и туда php? нихуя не пойму.
помоги аноно!
Аноним 2016/08/03 16:38:54  №812110 48
14702315351100.jpg (26, 563x329)
329x563
>>811805
Не совсем понял суть проблемы. Вообще просто пиши понятный для себя код, решающий эту задачу, ну например:
Аноним 2016/08/03 16:43:52  №812114 49
>>812083
к какому денверу, блджад
в денвере должна быть какая-то папка с модулями, найди ее, там должен быть твой пхп, в нем же php.exe
должно сработать, я этой хуйней давно не пользовался, адекватыши делают все ручками
Аноним 2016/08/03 16:51:41  №812118 50
>>812114
но смысл компосера, что ты не делаешь все руками, а он делает это за тебя. тем более почти все мануалы прописаны под композер. например поставить Twig
Аноним 2016/08/03 16:55:53  №812122 51
>>812083
На знаю как винде, на линуксе тебе нужно набрать команду вроде "пакетный_менеджер_нейм install composer" и ты уже можешь вызывать composer из командной строки. И удаляй денвер, ставь апач руками как написано у ОПа. У денвера протухшая версия PHP.
Аноним 2016/08/03 16:58:26  №812127 52
>>812122
хорошо. поставлю апачь. спасибо!
Витя 2016/08/03 18:14:03  №812181 53
ребята, после задач кто нибудь делал приложение веб?
хочу сделать межсерверник, но никак от задач не получается отойти..
Аноним 2016/08/03 19:37:57  №812260 54
>>812181
Вообще ничего не понятно. Переформулируй.
Аноним 2016/08/03 21:00:54  №812325 55
14702472541620.jpg (95, 1178x586)
586x1178
посоны, кто-нибудь шарит в modx? нужно добавить пункт в меню в настройках страницы, тот который расчет стоимости пикрелейтед. как можно это сделать?
Аноним 2016/08/03 23:03:18  №812452 56
>>812181
Студенты из задач ОПа, файлообменник, тестхаб - всё это веб-приложения.
Аноним 2016/08/03 23:55:58  №812518 57
Если нет профильного образования и вышки, смогу вкатиться на норм должность? Или джун на века?
Аноним 2016/08/04 01:21:00  №812595 58
>>812518
> Если нет профильного образования и вышки
ето вообще не важно, главное, чтобы ты был крут, да, и тогда попадешь на норм должность.
Аноним 2016/08/04 11:25:44  №812776 59
Аноним 2016/08/04 12:06:28  №812800 60
Аноним 2016/08/04 12:12:56  №812808 61
Аноним 2016/08/04 13:10:18  №812850 62
>>807538 (OP)
(ВОПРОС НЬЮФАГА). Здравствуйте, здравствуй двач, здравствуй /pr/ (я впервые тут), хочу научиться создавать сайты на php. В создании сайтов знаю всё, но по понемногу и на начальном уровне (т.е. js, jquery, php, mysql, html), в процессе обучения в виртуалке вроде даже клепал свои недосайты. Мой вопрос в том как перейти на нормальный уровень, к примеру как создавать более серьёзные проекты вроде качественных интернет магазинов куда из б.д. будут просто выгружаться тысячи товаров? И это пожалуй самый главный вопрос который меня интересует т.к. я не знаю как построить архитектуру сайта так, чтобы страницы создавались сами, не создавая самому в ручную тысячи файлов. Нужно ли мне для этого изучать MVC или может быть что-то другое, какие-то фреймворки может быть? Т.к. очевидно то что я не знаю ооп и вместе с этим я не могу понять и mvc, но вопрос опять же не в этом, а в том что по правильному ли я пути иду для озвученной цели, изучать ооп и MVC? И если да, то может быть подкинете мне информации откуда лучше будет начать изучение? Если вам не лень конечно же, если да, то можете как обычно в трёх буквах написать мне "пнх".
Аноним 2016/08/04 13:12:58  №812854 63
Аноним 2016/08/04 13:34:43  №812866 64
Всем хай. Я новичок в программировании, начал изучать yii: пока с mvc разобрался, всякую простую хуNту вроде выгрузки данных с бд под пагинацией могу осуществить, но вопрос состоит в том на какие еще внутренние возможности фреймворка нужно обратить внимание и что лучше для начала на практике запилить чтобы набраться опыта?
Аноним 2016/08/04 14:33:17  №812923 65
14703103980350.png (66, 1162x813)
813x1162
Аноним 2016/08/04 15:39:50  №812984 66
>>812110
ОП явно не просто так открывает код, ОП хочет чтобы я сделал задуманное им для дальнейшего обучения. Нет?
Аноним 2016/08/04 15:53:09  №812999 67
>>812923
Теперь допили так, чтобы программа давала победителя
Аноним 2016/08/04 15:56:35  №813004 68
>>812866
Запили TestHub из ОП-поста.
Аноним 2016/08/04 18:16:46  №813152 69
14703238070350.png (217, 1920x1080)
1080x1920
Аноним 2016/08/04 20:05:17  №813267 70
http://ideone.com/zm8DHP
Объясните пожалуйста, почему сработал preg_match без объявления массива $matches? Он получается его сам как глобальную переменную создает после во время выполнения?
Аноним 2016/08/04 21:09:29  №813292 71
>>813267
Насколько я знаю, да. Это функция с побочным эффектом. Ты мануал-то по функции почитай.
Аноним 2016/08/04 21:14:48  №813297 72
http://ideone.com/uRsBkF
В чем косяк? Это из задачи про вклад 10к по 10 % годовых.
В подсказке опа говорится, что сумма накопится через 49 лет. У меня же через 25, и еще этот пидор не хочет тормозить на миллионе.
Аноним 2016/08/04 21:34:42  №813313 73
>>813297
> В подсказке опа говорится, что сумма накопится через 49 лет
Значит, ты неправильно считаешь. В твоих же интересах разобраться самому, почему так.

> и еще этот пидор не хочет тормозить на миллионе.
Потому что у тебя if ВНЕ цикла, ты неправильно расставил фигурные скобки. И цикл не "пидор", он делает лишь то, что ты ему сказал. Это как прийти в магазин и промямлить что-то невнятное продавщице, а потом материть её за то, что она не тот товар принесла.
Аноним 2016/08/05 00:21:59  №813450 74
>>813292
С ней разобрался, спасибо. Еще вопрос по схожей функции - неправильно определяет позицию вхождения подстроки, хотя /u в регулярке поставил. В чем может быть проблема?
http://ideone.com/GIKozK
Там, в самом низу вывода есть сравнение сдвига и mb_substr на этот сдвиг.
Аноним 2016/08/05 02:27:50  №813508 75
14703532710740.jpg (88, 1280x960)
960x1280
Анон, решил для себя, что в ближайший год в приоритете будет заработок денег, поэтому решил, что лучше акцентировать свое внимание на том, с чем игрался последений год
Имею небольшой опыт работы с HTML+PHP+CSS+JS+JQUERY+MYSQL
Писал в универе:
1) сайтик с тестами с регой, куками, бд
2) Парсел сайтов на навличие кое-чего курл, пхпквери, хотел потрогать фантом жс, но серва нет на линупсе нет
3) одностраничники с хуевой версткой с версткой большие проблемы из-за отсутсвия опыта
4) Сайтик с формами, в который можно динамически добавить поля, суть которого в том, чтобы сгенерить строку js кода
5) еще какое-то говно, которое никому не нужно

Так вот, главные цели:
1) освежить знания
2) заполнить пробелы
3) научиться грамотно верстать
4) писать красивый код, с точки зрения чистоты и читабельности
5) научиться работать с популярными CMS

Вопрос: В правильный ли тред я попал и поможет ли мне инфа из ОП-поста?

Win10, Sublime, xampp
Аноним 2016/08/05 05:03:24  №813541 76
>>813152
Пости прогресс сюда
Аноним 2016/08/05 07:22:55  №813559 77
14703709752180.png (174, 905x521)
521x905
Аноним 2016/08/05 07:24:07  №813560 78
14703710472390.png (20, 959x459)
459x959
>>813559
Пикча отклеилась
быстрофикс
Аноним 2016/08/05 07:55:21  №813564 79
Аноним 2016/08/05 08:00:37  №813566 80
Аноним 2016/08/05 08:41:52  №813580 81
Пацаны, а какой хостинг тестовый взять можно?
Бесплатно и что бы с пхп >= 5.5
Аноним 2016/08/05 10:06:15  №813620 82
Аноним 2016/08/05 10:27:34  №813626 83
14703820543250.png (6, 731x125)
125x731
САП, котаны. Нужно добраться до апи вк, нашел статейку просто для ознакомления на хабре https://habrahabr.ru/sandbox/57993/
Не могу понять что написано в библиотеке. Вообще подключить не могу ее. Я нюфаня, да. Говорит, что Method api not found in vkapi
Ничего не менял в исходниках гитхаба.
Моя пека PHP Version 5.5.9-1ubuntu4.17
Вывод вообще странный в браузере. Почему он вдруг функции PHP стал выводить, если не нашел метод? Почему ошибки нет? В php.ini после установки я ничего не трогал
Аноним 2016/08/05 10:28:36  №813627 84
Аноним 2016/08/05 10:32:38  №813629 85
>>813313
>>813541

Я в глаза долблюсь по ходу. Еще вчера лям был на 49 годах анона. А мне показалось 10 лямов, лол.

Сегодня доделал.
Аноним 2016/08/05 10:33:17  №813630 86
Аноним 2016/08/05 10:52:42  №813635 87
>>813620
Смешная шутка за 300? Спасибо
Аноним 2016/08/05 12:31:24  №813681 88
Помогите задачку на палиндром решить. Вторая часть вообще непонятная.
Аноним 2016/08/05 13:15:33  №813706 89
Задачка про поиск номеров телефонов записанных в разнобой решается очисткой этих самых номеров от всякого говна, или всё делается с помощью одного ёбарегулярного выражения? Или нужно писать сразу несколько регулярных выражений?
Аноним 2016/08/05 13:21:41  №813713 90
>>813706
А,в глаза ебусь же
>Подсказка: не надо строить сложных выражений и предусматривать все возможные комбинации символов. Достаточно написать: сначала идет +7 или 8, за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов

Значит нужно делать несколько выражений
Аноним 2016/08/05 13:22:20  №813714 91
>>813706
Для проверки на корректность телефона хватит одной регулярки, для замены на форматированный '89876543210' вид - двух.
Аноним 2016/08/05 14:08:54  №813744 92
>>813714
Сложнааа. Но я справлюсь завтра
Аноним 2016/08/05 14:48:55  №813772 93
>>813743
>ua
пошел нахуй блять
:3
А мирка у программистов=хакеров не в моде уже?
Аноним 2016/08/05 16:00:21  №813819 94
Не получается с кредитным калькулятором. Школьник всё равно уводит банк в долг. Как сделать, чтобы в последнем месяце снялся остаток, а не 5000 ровно?
Аноним 2016/08/05 16:17:00  №813830 95
Аноны, как активировать cURL в EasyPHP (винда)?
Call to undefined function curl_init()
раскомментировал строку в php.ini extension=php_curl.dll
Теперь просит libssh2.dll. Хули делать? Я даже когда на ведроиде кодил там все было заебись, больше версий php и все работало. Денвер вообще уже лет 10 не обновлялся походу, нахуй их со своим 5.3.
Иль какой другой wamp посоветуйте, некогда мне в хуйне всякой разбираться.
Пока попробую старый easyphp воткнуть. Эти суки со своей обновой просто все разъебали, 1000 лишних нажатий теперь делать чтоб сервер запустить.
Аноним 2016/08/05 16:21:12  №813836 96
>>813830
Так и знал, нахуй, что в 14 версии все заебись будет. Только на древнем пхп придется писать, но хули поделать
Аноним 2016/08/05 16:21:16  №813837 97
>>813830
>на ведроиде кодил там все было заебись, больше версий php
ты на ведроиде запускал сервер php ? нахуя ?
Аноним 2016/08/05 16:22:15  №813838 98
>>813830
Ставь Ubuntu в дуалбут и работай с нативным окружением. Нахуй эти канделябры с виртуальной машиной
Аноним 2016/08/05 16:25:55  №813839 99
>>813635
vscale.io, это VPS

Самый дешевый тариф - 200 рублей в месяц. Может потянуть Symfony 2, например, только если composer не сильно будешь нагружать. А для flat php, чтобы просто поиграть - самое оно. Вордпресс тот же. Я лично сижу на 400 рублей в месяц, для фриланса хватает.
Аноним 2016/08/05 16:26:31  №813841 100
>>813635
>>813839
Алсо если по партнерке зарегаешься - бонус 400 рублей.
Аноним 2016/08/05 16:46:25  №813863 101
>>813508

из ОП поста все нахуй выкинь, эти ребусы тебе не помогут ни на одном собеседовании


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

Не советую выбирать контору, которая работает с Битриксом, Wordpress, Joomla. Также не советую выбирать маркетинговые и SEO конторы. Как ознакомится с профессией эти места норм, но долга там нельзя засиживаться - ты будешь просто терять время, выполнять задачи уровня раба.

1) Выбирай платформу (CMS или framework, но лучше что-то сложнее сайта на Вордпрессе, Joomla тоже уже никто не юзает)
2) Выбирай дешевый VPS хостинг
3) Все устанавливай
4) Ставь целью - сделать контентный сайт со всей тривиальщиной (создание сущностей (таблиц через DBAL движок), добавление к ним полей разного типа - текст, ссылки на другие сущности, множественные поля, загрузка файлов).
5) любой вопрос, который у тебя возникает - гугли

Стремишься добиться того, что ты набьешь руку на создание всей тривиальщины, которую ты будешь юзать на работе 90%. Потом ищешь вакансию младшего разраба в компании, которая работает с этой платформой.

Собеседование:

Собеседование это не проверка твоих знаний, это

а) фейсконтроль. большинство начальников разраб-отделов просто ждут что ты скажешь им нужные слова, даже если они не совсем точные или не используемые в жизни

поэтому советую просто погуглить

"Вопросы на собеседовании для PHP разработчика"

гуглишь/вычитываешь эти вопросы, параллельно старайся делать так чтобы эта теория каким-то образом совпадала с тем, что ты учил на практике.

Обязательно пройди курс молодого бойца по MySQL - на младшего разраба верх вопросов будет это что такое транзакции и для чего нужны индексы

Также не лишни будем хотя бы знать определения популярных web технологий, чтобы не выглядить прохожим с улицы.

Также попробуй выполнить пару задач с использованием объектно ориентированного программирования. Добивайся того, чтобы логика твоих скриптов была структурирования. Прочитай что такое SOLID и старайся писать код по их рекомендациям

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

"Information Expert"
"Low coupling"
"High cohesive"

поможет понять, как структурировать объектный код

все это поможет тебе в разговоре с собеседующим

б) проверка твоей усидчивости и стабильности. разработка местами нудный процесс и собеседующий должен убедится что у тебя хватит выдержки и терпения выполнять задачи и инструкции по сдачи проектов

в) некоторые собеседующие любят видеть огонек в глазах разраба, чтобы видеть его заинтересованность в собственном труде.


И да - если ты устроишься непосредственно на работу - пойми, что собеседование и теория это одно, а работа с реальными проектами это другое. 90% времени разрабы кладут хуй на умные словечки и пишут быстрый код, который потом даже не рефакторя. Поэтому если у тебя будет коллеги по разработке - смотри как пишут код они, чтобы понять насколько качественный кокретно в этой конторе нужен код.
Аноним 2016/08/05 16:52:26  №813873 102
>>813863
Спасибки адеквату
Аноним 2016/08/05 16:55:50  №813876 103
>>813863
А и еще погугли всякие ребусы, то бишь задачки на сообразительность, которые спрашивают на собеседовании, это полный бред, но эти ребята задают такие вопросы.

Эти ответы нахуй не пригодятся на работе, но гнужны чтобы удачно пройти собеседование.
Аноним 2016/08/05 16:59:25  №813882 104
Аноним 2016/08/05 17:02:42  №813886 105
14704057628310.jpg (97, 843x843)
843x843
>>813863
Возможно, это уже нагло с моей стороны, но можешь написать какие CMS и framework'и ты считаешь "сложнее"?
Проще говоря, какие предпочтительнее использовать?
Прост подумал, что мою формулировку "кмс сложнее вп и джумлы" гугл не поймет
Аноним 2016/08/05 17:22:29  №813904 106
>>813886
Я бы на твоем месте установил бы фреймворк попроще, например Yii, прошел бы туторы.

В плане CMS полезнее и выгоднее для разработчика разобраться в Drupal. В последних его версиях. Возможно сначала будет сложновато, но в этой CMS хотя бы большинство современных наработок есть.

Но все равно нужно осознать что от разработки на CMS нужно отходить. Искать конторы, которые качественно работают на фреймворках.

Ты будешь хорошо знать технологии, только если ты используешь их на работе. Теория является тем, что структурируют твои практические навыки. Можно читать кучу книжек и сыпать терминами, но работать хорошо это не поможет.

И да, при всем при этом, не жди от PHP многого в плане качества разработки. Это все же язык, который разрабатывался для того, чтобы удобно выводить HTML текст.
Если ты хочешь угореть по серьезному ООП-программированию, лучше нацелится на другой язык. Разработывать web проекты можно и на Java и даже на C++ есть фреймворки.
Аноним 2016/08/05 18:34:19  №813939 107
Придумайте мне задачу, пожалуйста. Только что выполнил задачку про игру в кубики с компьютером. Хочу что-нибудь из этого рода, но со сложными условиями. Чтобы поебаться и закрепить эффект.
Аноним 2016/08/05 19:16:20  №813966 108
Пацаны, с чего начать изучение PHP?
Дело в том, что я охуенно знаю Java и тп, поэтому нужно как-то начать соответствуюше. Без лишней инфы.

Синтаксис, спецификация, тонкости, фреймворки.
Аноним 2016/08/05 19:27:08  №813975 109
>>813939
Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
Аноним 2016/08/05 19:28:19  №813976 110
>>813939
Забыл, что добавить, что для FizzBuzz нужно знать об операторе % (остаток от деления). Ну и решай след задачи из учебника.
Аноним 2016/08/05 19:51:40  №814003 111
>>813882
Я так пока не умею =/
Аноним 2016/08/05 20:16:37  №814016 112
>>813975
Сейчас вот в учебнике по JS как раз этот ФизБаз предлагается. Но я застрял еще на этапе построения треугольника из # (не срабатывает команда .lenght) ну да ладно, это тред не о JS
Аноним 2016/08/05 20:18:40  №814018 113
>>814016
> не срабатывает команда .lenght
Не lenght, а length! Я сам постоянно бугурчу из-за этой опечатки, а JS, сука, молчит как партизан.
Аноним 2016/08/05 20:22:06  №814021 114
Какие перспективы у джуна?
Аноним 2016/08/05 20:23:09  №814024 115
14704177890780.jpg (34, 725x441)
441x725
>>814018
Я по хуевому учебнику занимаюсь? (Он из шапки JS треда)
Аноним 2016/08/05 20:24:15  №814025 116
>>814024
Всё правильно lengTH. Ты написал в предыдущем посте lengHT.
Аноним 2016/08/05 20:25:01  №814026 117
Аноним 2016/08/05 20:26:24  №814027 118
Аноним 2016/08/05 20:34:45  №814032 119
Аноним 2016/08/05 20:36:44  №814035 120
Аноним 2016/08/05 21:01:10  №814065 121
>>813839
Спасибо, уважаемый!
Аноним 2016/08/05 21:02:40  №814069 122
>>814035
Но у меня нет вышки, и вообще я из пту. Лол.
Аноним 2016/08/05 21:55:31  №814123 123
>>814003
Там механизм последнего платежа есть: после цикла, в котором происходит погашение кредита, остается маленький непогашенный кусок (текущий баланс, то есть он меньше разового платежа в 5000, например), и вот после цикла прибавляешь к общему платежу школьника (посчитанному в цикле) значение этого самого баланса, ну и дополнительный месяц добавляешь к посчитанным, если надо. Все, готово.
Аноним 2016/08/06 01:41:14  №814263 124
>>813863
Почему фриланс не советуешь?
Аноним 2016/08/06 07:23:36  №814348 125
Смогу ли я выучить php за месяца три, устроиться в ИТ и во время работы учить java? Или лучше сразу учить яву и не тратить время на пхп?
Аноним 2016/08/06 07:46:47  №814349 126
>>813863
Всмысле не помогут? Я вот с нуля начал, очень даже толково все задачки поставлены вчера застрял на регулярных выражениях нимношк
Аноним 2016/08/06 07:50:33  №814352 127
>>814348
> Смогу ли я выучить php за месяца три, устроиться в ИТ
Нет.

> и во время работы учить java?
Ты работать будешь на работе, не? А после работы будешь приходить заёбанный, боясь к компу подойти, какие тут дополнительные занятия? Лучше сразу Java учи.

>>814349
Хуйню он какую-то несёт, сначала говорит, что ребусы из ОП-поста не помогут, а потом советует таки погуглить задачки на сообразительность, ведь их спрашивают на собеседованиях.

> "Information Expert"
> "Low coupling"
> "High cohesive"
> поможет понять, как структурировать объектный код

Без практики нихуя не поможет. А в ОП-посте как раз практика.
Аноним 2016/08/06 07:53:04  №814355 128
>>814352
А, еще про хостинги поясни, за платные и бесплатные. Как там обстоят дела с заливом своего саета с нуля. Вот на юкоз зашел и нихуя не понял, например.
Аноним 2016/08/06 08:17:26  №814359 129
>>814352
В защиту парня могу сказать, что уже имеется небольшой опыт, поэтому большинство задач скипнул, ибо реализуются совсем легко
А вот то, что у меня уже забылось сижу и читаю, включая интересные задачки, которые сходу в голове не решились.
И советовал он поискать типовые вопросы, задающиеся на собеседованиях типа "продай мне ручку" и тестовые задания типа "захуярь лендос на джумле"

>>813863
На счет фриланса тоже интересно, да
Аноним 2016/08/06 08:18:18  №814360 130
14704606980430.jpg (144, 720x960)
960x720
Аноним 2016/08/06 08:53:34  №814362 131
>>814359
> "захуярь лендос на джумле"
Вот это всё связанное с CMS это мартышкин труд. Можно устроится PHP-программистом на фреймворках и не пачкаться в Joomla-параше, если обладать достаточными навыками. На это и направлены задачи вроде TestHub'а из ОП-поста. Если нужно человеку нужно клепать лендинги/визитки/грабберы/блоги на CMS в 2 кнопки, то ему путь в /web, в /pr программирование.
Аноним 2016/08/06 09:03:25  №814363 132
Не работает \n у меня, это все денвер?
Аноним 2016/08/06 09:56:12  №814379 133
>>814363
Может ты его через одинарные кавычки выводишь. А денвер всё-равно сноси.
Аноним 2016/08/06 09:57:34  №814380 134
>>814379
Вообще без кавычек пишу
Аноним 2016/08/06 09:58:26  №814382 135
>>814380
Лол, ну а что ты хочешь тогда. Выводи через двойные кавычки.
Аноним 2016/08/06 10:00:27  №814384 136
>>814382
Но в задачках там нету их
Аноним 2016/08/06 10:01:29  №814387 137
>>814382
echo "$hui "\n""; так чтоли?
Аноним 2016/08/06 10:01:32  №814388 138
>>814384
Блять запости пример. И на ideone сразу скинь, заодно проверишь, к коде проблема или в денвере.
Аноним 2016/08/06 10:02:35  №814389 139
>>814388
Денвер не ругшается, просто не обращает на него внимания, пользуюсь </br>
Аноним 2016/08/06 10:05:22  №814391 140
>>814387
echo $hui, "\n"
или
echo "{$hui}\n"
или
echo $hui . PHP_EOL

>>814389
Ну так символ end of line игнорируется HTML, ты там либо код в <pre></pre> оборачивай, либо используй <br>
Символ конца строки используют для форматирования консольного вывода.
Аноним 2016/08/06 10:11:39  №814395 141
14704674997470.png (28, 1054x531)
531x1054
>>814391
Хуй, либо я дебил. Но за попытку спасибо, да
Аноним 2016/08/06 10:15:10  №814396 142
>>814395
Я же тебе написал \n - символ конца строки - используется ТОЛЬКО для консольного вывода. То есть ты вбил в консоли php.exe script_name.php, и в консоли твоя строка "\nhui \n hui" преобразуется в
"hui
hui"
Это из-за особенностей HTML, он игнорит этот символ. 2 выхода: либо использовать <br>, либо дописать вверху файла header('Content-Type: text/plain');
Попробуй дописать это к тому файлу, который на скрине. Но тогда и все html-теги тоже будут видны.
+ Есть ещё такая функция: http://php.net/manual/en/function.nl2br.php
Аноним 2016/08/06 10:18:26  №814398 143
>>814396
Ну яж неразбираюся, вон у опа все получается в задачках на идеоне, а у меня нет. Ну пояснил, спасибо, думаю в уроках про основы ксс и хтмл мне все расскажут
Аноним 2016/08/06 10:22:26  №814401 144
>>814398
На ideone эмулируется консольный ввод-вывод, то есть когда ты тыкаешь на зелёную кнопку run, где-то там происходит вызов команды в консоли php script_name.php, а консольный выхлоп попадает на сайт в output. Ты если не работал с этим, то ничего не поймёшь, вины твоей в этом нет. Но я бы тебе советовал погуглить, как запускать скрипты из командной строки (у ОПа, вроде бы написано об этом).
Аноним 2016/08/06 14:35:48  №814541 145
Господа, а есть тут не совсем упоротые ублюдки, которые уже умеют немного в пхп и хотели бы познать симфони, BDD, REST и прочую хуйню?

Планирую начать проводить тренинги по этой теме и для проработки программы + самотренировки я бы взял какого-нибудь анона на прокачку. Фо фри, разумеется.

О себе: 6 лет+ пхп, полтора симфони, йоба-опенсорс контрибутор, сейчас поднимаю 130к чистыми со свободным графиком.
Аноним 2016/08/06 15:18:07  №814572 146
>>814541
Ну давай, бери меня. Я готов заниматься 2 дня через 1.

Часов по 5 в день с перерывами. Ну или как тебе удобно.



smile_for_bright
Аноним 2016/08/06 15:20:35  №814575 147
>>814572
>smile_for_bright
это скайп если что












Аноним 2016/08/06 15:22:03  №814576 148
14704861231610.jpg (37, 452x760)
760x452
Ну кароче вы поняли
Аноним 2016/08/06 15:30:13  №814584 149
Аноним 2016/08/06 15:34:44  №814587 150
ну блядь, я в сообщении >>814572 написал типа

скайп:
смайл_фо_брайт

Потом смотрю там вместо этого пустая строка и просто сам скайп, думаю что за хуйня, а там тип ссылка пустая.
на правах теста:

test
huest
Аноним 2016/08/06 17:07:37  №814672 151
Аноним 2016/08/06 20:42:47  №814842 152
14705053676560.jpg (11, 567x180)
180x567
Задачка про накопление миллиона в банке. Не могу понять как сделать так, чтобы мне вывело лишь последнюю цифру - 49, а не все подряд?
Аноним 2016/08/06 20:45:00  №814845 153
Аноним 2016/08/06 20:50:24  №814854 154
Как правильно записать прибавку процентов к общей сумме? Вариант в лоб $summa = $summa + 0.1 * $summa
А как лаконичнее?
Аноним 2016/08/06 21:25:28  №814876 155
Зацените решение задачи про айфон. Что лишнее и как оптимизировать код с точки зрения нюфани?
http://ideone.com/R9wnfP
Аноним 2016/08/06 22:08:03  №814906 156
Аноним 2016/08/07 00:57:23  №814990 157
Начал писать вектор и сразу появился вопрос. Стоит ли делать класс абстрактным если в нем нет абстрактных методов?
http://ideone.com/nzTmLC
Аноним 2016/08/07 01:09:31  №814996 158
>>814990
В C++ класс является абстрактным только если имеет хотя бы один абстрактный метод, а если на PHP можно обойтись и без этого, то не значит, что нужно. Ну а вообще, если у класса не будет инстансов, а инстансы будут только у наследников, то класс-предок можно делать абстрактным.
Аноним 2016/08/07 03:29:14  №815016 159
>>813837
у меня пеки не было полтора года нахуй, бомжевал
Аноним 2016/08/07 05:14:43  №815022 160
>>813830
>Иль какой другой wamp посоветуйте, некогда мне в хуйне всякой разбираться.
http://open-server.ru/
Аноним 2016/08/07 09:48:43  №815078 161
>>808962

Не понял вопрос. Тут 2 разных массива. return это команда возврата из функции, а не название массива.

>>807577

ОП не разбирается в жс галереях.

>>808390

Можно, но.... особенность этого счетчика в том что он глобальный и невозможно сделать 2 независимых счетчика так. Так что стоит подумть прежде чем делать.

И кстати пишется это кроче:

private static $counter = 1;
...
self::$couner ++;

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

>>809564

Это же опен сурс - всегда можно поправить. Алсо думаю эта проблема давно решена, нужен патч какой-нибудь или конфиг подправить.

Зато распространение легально и санкционированно.

>>809011

Если бы были студенты, файлообменник и testhub + знание SQL-нормализации -транзакций + большинство задач на HTML и JS решено - думаю, с руками оторвут.

>>809603

Погугли тестовые задания на пхп например.

>>809605

Странно что игнорят. может им с опытом человек нужен? Может с товим резюме что-то не так?

>>809752

Когда видишь что можешь еще что-то сделать, кроме своей работы, можешь попробовать об этом сказать.

>>810853

пересидим в нелегитимном один тред.

>>810168

Что-то переусложнено и цвета совсем не такие.Откуда например серый взялся ?

Надо упростить. Без box-sizing, попроще.

И что еще за spacer? Ты из 2000 вылез? Маргин же есть.

Контейнеры тоже убери.

>>810539

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

>>810853

Да, у него вообще не Синглтон. Как можно синглтон 2 раза создать?

Аноним 2016/08/07 09:58:28  №815084 162
>>810988

В программировании нет натуральных чисел. В PHP например есть int и float и они определяются способом хранения в памяти компьюетра.

Компьютерные числа отличаются от математических тем, что они имеют пределы, и могут иметь ограниченную точность.

То есть математик на такие "числа" даже смотреть не станет.

Вот тебе интересная статья по теме https://habrahabr.ru/post/112953/

>>811042

В программировании характеристики числа определяются не математикой, а особенностями устройства процессора, памяти и тд. Какие было удобнее раелизовать в железе - те и реализовали.

>>811139

ОП пришел, давай задачи.

>>811690

Не знаю, расскажи потом.

>>811781

Копировать код с картинки не требуется. можно решать по-своему, лишь бы было верно и код был читабельный.

Убрать пробел проще через str_replace

Программа у тебя делает лишнее - получить первую половину слова можно без цикла.

>>812083

В денвере древний пхп, может дело в этом?

Вообще, пиши подробно какие именно ошибки выходят, вставь скриншотом или скопируй сюда. Как мы тебе поможем не видя проблемы?

Вообще лучше установить php и прописать в PATH. для начала прочти из ОП поста пасту про командную строку и про установку пхп. А денвер лучше вообще снести от греха подальше.

И конечно задавай вопросы если есть, по композеру. Важно его освоить.

Аноним 2016/08/07 10:02:10  №815086 163
>>812984

Нет, Оп показвает код чтобы можно было увидеть как примерно выглядит решение. Если у тебя например вышло 100 строк, а у ОПа - 10 то что-то тут не так. Копировать код не требуется.

Ну и часто аноны просят показать им пример кода (чесно-честно я все сам решу, только одним глазком гляну), вот ОП и решил показать - как раз на один глазок хватит.

>>812118

Композер ставт библиотеки за тебя, но вот пхп он сам не поставит и не настроит. И прочитай про командную строку.

>>812325

Я не шарю.

>>812595

Но не в Германию и не в госкомпанию и не в бюрократическую корпорацию.

>>812800

Молодец, правильно.
Аноним 2016/08/07 10:02:40  №815088 164
Не понимаю как работает синглтон. Каким образом метод getInstance может отдавать один и тот же объект? Как он его запоминает? Где хранит информацию о нем?
Ответы Аноним 2016/08/07 10:05:15  №815089 165
В старом треде - ответы на многие посты:

>>815064 - HTML/CSS
>>815058 - вопросы по студентам (много) и ООП, MVC
>>812991 - ответы за 23 июля
>>812990 ответы за июль и немного по https://github.com/TheSidSpears/Students/
>>812987 - ответы на старые посты
>>812095 - старые посты

Если кого-то пропустил, напомните о себе тут.

Не флудите.
Аноним 2016/08/07 10:09:59  №815091 166
>>813863

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

ЧТо за паттерн "information expert"? Первый раз слышу.
Аноним 2016/08/07 10:13:49  №815095 167
>>813939

Есть лифт с компьютерным управлением. В нем есть такие датчики:

- кнопки вызова на 1, 2, 3, 4 этажах
- датчик положения (на каком этаже сейчас лифт)
- датчик, показывающий открыты ли двери

Состояние датчиков дано тебе в переменных, ну например:

$button1 = 0; // не нажата
$button2 = 1; // нажата кнопка на 2 этаже

Программа должна вывести команду, которая будет подана на управляющие механизмы. например "закрыть двери" или "двигаться вниз".

При желании можешь добавить еще датчики кнопок внутри лифта, датчик веса и тд.
Аноним 2016/08/07 11:16:52  №815138 168
>>815088
Конструктор делается приватным, то есть недоступным из вне, наружу выставляется статический (принадлежащий классу) метод getInstance, который либо создаёт инстанс класса, помещает в статическое поле и возвращает этот инстанс, либо, если статическое поле не null, то возвращает содержимое этого статического поля. Об этом пишут абсолютно во всех туториалах по Singleton. Примерный код:
class Singleton
private static instance;
private function __construct() {}
public static function getInstance() {
if (null === self::instance) { // Это условие сработает только при первом вызове
self::instance = new Singleton();
}
return self::instance
}

>>813966
Читай phptherightway, лаконичнее вряд ли что-то найдёшь. Какой странный у тебя перекат (с Java на PHP).
Аноним 2016/08/07 11:25:38  №815149 169
>>815138
Я знаю как делается синглтон, вопрос был не в этом. Я не понимаю как статический метод может отдавать один и тот же объект. Это ведь просто функция, только внутри класса. Это похоже на какое-то жсовское замыкание.
Аноним 2016/08/07 11:31:00  №815152 170
>>815149
Я, наверное, неправильно сформулировал вопрос. Я не совсем понимаю почему запоминаются статические поля у класса.
http://ideone.com/mJ0Zmx
По моей логике в обоих случаях должно вывести 1, но выводится 1 и 2, как будто мы переопределяем сам класс, а не объект
Аноним 2016/08/07 11:33:36  №815155 171
>>815149

Ты понимаешь что такое статическое поле и чем оно отличается от обычного? Статическое поле принадлежит не объекту, а классу. Оно существует в одном экземпляре независимо от того, сколько объектов этого класса создано.

Аноним 2016/08/07 11:34:36  №815157 172
>>815152
Замыкания это другое, ты ищешь сложности там, где её нет.
Статический класс и статическое поле существуют на протяжении всей
жизни сценария.

> Я не совсем понимаю почему запоминаются статические поля у класса.
Удобно думать, что с классом проассоциирован ещё один объект, который хранит всё статические поля и методы (поэтому и говорят "принадлежит классу").

> По моей логике в обоих случаях должно вывести 1,
Так ты же не создал 2 разных объекта, а используешь "объект класса".

Аноним 2016/08/07 12:00:18  №815174 173
Ну зачем нужен знак доллара? Коряво же выглядит...


Аноним 2016/08/07 12:03:01  №815177 174
>>815174
Если привыкнешь к нему, то перестанешь замечать. Зато не нужно var'ы ставить. В Ruby бесконечные end'ы коряво выглядят. Дело привычки.
Аноним 2016/08/07 13:03:04  №815234 175
Аноним 2016/08/07 13:34:43  №815266 176
>>814572
>>814672
Cовсем забыл фейкопочту написать.
В общем рассказы о ваших пхп-превозмоганиях жду здесь: [email protected]

>>814541-кун
Аноним 2016/08/07 14:16:53  №815329 177
>>815138
>Какой странный у тебя перекат (с Java на PHP)
Хочу работать кодером, а Java нужна только в аутсорс галерах в моей белорашке. А с пхп можно пойти в любую компанию со своим сайтом и колупать CMS
Аноним 2016/08/07 17:46:47  №815468 178
Аноним 2016/08/07 17:53:51  №815475 179
14705816313770.png (17, 579x642)
642x579
>>807538 (OP)
Халп. У меня тут непонятное что-то с задачкой. Проверил, вроде все правильно. Хотя, может, потомужто я нуфак-даун-аутист? В общем, смотрите сами.
Аноним 2016/08/07 18:16:46  №815500 180
>>815475
Думаешь, смешно показывать скрин-обрубок? Побуду экстрасенсом, у тебя на 4-й строке, которую мы не видим, в конце нет символа ;
> смотрите сами.
Пушка.
Аноним 2016/08/07 18:19:51  №815504 181
>>815500
Соре, думал, дело не в ней, в итоге и правда - забыл ; после error_reporting. Спасибо. Эхх, какой же я даун-аутист.
Аноним 2016/08/07 18:24:30  №815510 182
>>815500
Лол, опять не мог понять, в чем дело, пока не заметил, что во второй раз пропустил точку с запятой. Это только я такой даун-аутист, или поначалу нормально это?
Аноним 2016/08/07 18:25:19  №815511 183
>>815510
Поначалу нормально.
Аноним 2016/08/07 18:35:51  №815520 184
14705841511580.jpg (26, 279x551)
551x279
>>806594

Переписал код для композер скрипта: http://ideone.com/j6DyCf . Оп посмотри позяз. Вроде работает правильно по пикрелейтеду. Алсо вопрос, как-то в composerjson можно будет передать в статический метод аргументы? Или придется без аргументов.
Аноним 2016/08/07 18:39:58  №815525 185
>>815520
>>806594

> mkdir($path, 0700, true);
Обычно веб-сервер имеет права "другой" а в твоем случае файл доступен только владельцу.

Немного не понятно. У меня без второго и третьего аргумента ошибки получаются.
Аноним 2016/08/07 19:13:20  №815555 186
Поясните плес. Задача где на вопрос даётся рандомный ответ.
Программа выдаёт не значение, а ключ.
Аноним 2016/08/07 20:08:11  №815603 187
Как установить Yii2 на хостинг?
Как вообще выполнять там команды, когда нужны изменения? В папке console что-то надо делать?
Ещё поясните, пожалуйста, как установить этот фреймворк с папками backend и frontend просто на локалку. Ткните мордой неразумного, я не нахожу этого в документации.
Да здравствует легитимный тред, очередной, твой
Аноним 2016/08/07 20:08:32  №815604 188
Аноним 2016/08/07 21:09:45  №815652 189
Твои появления просто благословение моей жизни.
Аноним 2016/08/07 21:37:42  №815675 190
Почему не всегда правильно определяется победитель?
Ткните меня пожалуйста где я обосрался.
http://ideone.com/M0JHZQ
Аноним 2016/08/07 21:49:52  №815677 191
>>815675
Не забывай читать вывод ошибок, там можно найти что не так в твоем коде.
В данном случае у тебя опечатка на 13 и 16 строке кода.
На 13 $anodDice2 вместо $anonDice2
На 16 $anodDice1 вместо $anonDice1
Аноним 2016/08/07 21:50:29  №815679 192
>>815675
PHP Notice: Undefined variable: anodDice2 in /home/KlDHJx/prog.php on line 13
PHP Notice: Undefined variable: anodDice1 in /home/KlDHJx/prog.php on line 16

anodDice2
Аноним 2016/08/07 21:55:36  №815686 193
Аноним 2016/08/07 22:14:47  №815701 194
Аноним 2016/08/07 22:15:29  №815703 195
Аноним 2016/08/07 22:18:57  №815710 196
>>813838
Поясните за дуалбут, я уже полгода ебусь с виртуалкой
Аноним 2016/08/07 22:38:50  №815731 197
>>807538 (OP)
Назовите причины использовать PHP в 2016 году для написания проектов с нуля использование готовой CMS - легитимный случай, но вопрос про написание проектов с нуля
Аноним 2016/08/07 22:41:02  №815732 198
Аноним 2016/08/07 23:31:14  №815772 199
>>815710
Что конкретно тебе пояснять? Выделяешь отдельный раздел под линукс и ставишь туда. Единственный подводный камень: если будешь ставить в порядке линукс->виндоус, то учти, что загрузчик винды затрёт загрузчик линукса и сам линукс он не видит, поэтому нужно будет переставлять загрузчик линукса - GRUB (он видит загрузчик винды). Зачем тебе линукс?

>>815520
Хорошая статья по правам доступа к файлам: http://younglinux.info/rwx
Думаю, ОПу стоит добавить на неё ссылку в гайде по командной строке.
И тут ещё был анон, который ставил Yii2 в корень файловой системы, тоже почитай.
Аноним 2016/08/07 23:40:38  №815778 200
>>815772
На серверной убунте привык уже, у меня там и пхп проектывисят и nodejs и mysql workbench настроен через ssh и дебаггер на phpstorm. Получается счас у меня проекты лежат в папках под виндой, запускаю виртуалку и маунт делаю папки с проектами в /var/www
Аноним 2016/08/07 23:43:38  №815780 201
>>815778
И чем такой подход не устраивает? Виртуалку можно запускать в безголовом режиме, если тебе лень мышкой постоянно запускать её. А .bat-ник на хоткей повесить.
Аноним 2016/08/07 23:47:58  №815782 202
>>815780
Мешают ограничения по правам. Буквально с сегодняшнего дня. Клонировал существующий проект на sailjs и npm i не может проинсталить, ошибки по поводу прав и названий файлов (в js треде постил). Попробовал чистый проект на sails поднять - те же ошибки. Потом ради интереса на винде попробовал то же самое и нормально запуталась
Аноним 2016/08/07 23:48:52  №815783 203
Аноним 2016/08/07 23:51:29  №815785 204
>>815782
Ну так выставь пользователю, с которого заходишь, больше полномочий. Такая проблема у тебя и на линуксе может возникнуть.
Аноним 2016/08/07 23:53:15  №815787 205
>>815785
Через sudo su это первое что я попробовал, какие то проблемы именно с виртуалкой
Аноним 2016/08/07 23:55:35  №815791 206
>>815787
Проблемы с полномочиями пользователя это не проблемы с виртуалкой. Запости здесь то, что ты в JS-треде запостил, может кто подскажет. Я с sails не работал.
Аноним 2016/08/08 00:00:28  №815796 207
14706036280450.png (103, 604x267)
267x604
Аноним 2016/08/08 05:01:01  №815913 208
>>815520

Это описано в документации: https://getcomposer.org/doc/articles/scripts.md

Аргументы передавать нельзя. Но из функции-обработчика можно получить объект Composer и из него конфиг. Таким образом, нужные параметры можно закодировать в самом composer.json в ключе extra. Так поступают плагины к композеру, расширяющие его возможности.

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

Также, под линуксом вместо копирования файлов может быть выгоднее ставить симлинки (под новой виндой тоже есть симлинки, но с ними все сложно). Изучи-ка эту тему.

Вообще, проблема, которую ты затронул (установка сторонних клиентских библиотек) довольно важная. Я пока не знаю какого-то единого решения, знаю только что каждый решает ее по своему.

Более того, в теории тут можно получить определенную выгоду. Например, бутстрап или jquery UI состоят из отдельных компонентов и можно собрать маленькую версию библиотеки, включающую только нужные тебе в проекте вещи. И задавать, какие компоненты нам нужны, в конфиге, так что легко было бы добавлять или убирать их.

Если бы мы могли как-то это описать в конфиге, чтобы оно само скачивалось и компилировалось, было бы неплохо. Но это конечно усложнит установку, так как потребует как минимум Node.JS ставить и пакеты к ней.

Тут еще конечно возникает вопрос, а должен ли композер этим заниматься? По идее для установки клиентских библиотек есть bower, есть системы сборки и минификации вроде gulp, также есть assetic из Симфони, предназначенный примерно для того же.

Вот ссылка на Assetic: https://github.com/kriswallsmith/assetic Он немного сложный, но умеет делать то, что нам требуется.

Более того, композер позволяет писать к нему плагины. Которые могут запускаться во время установки библиотек и что-то делать, например, копировать файлы в публичную папку. Можно попробовать поискать такой плагин или написать самому. Если это распространенная задача, и такой плагин подошел бы ко многим проектам, то выгоднее сделать именно плагин к композеру, который можно повторно использовать, а не одноразовый класс, который подходит только к одному твоему проекту и который надо будет вручную добавлять и подправлять под каждый новый проект.

Но если решать это через композер, то возникает вопрос, где мы должны остановиться? Вот мы скачали библиотеку композером. далее, надо ее перенести в публичную папку - должен композер это делать? хорошо, а если мы хотим далее склеить несколько css файлов в один - должен композер это делать? А переписывать в файлах URL к картинкам кто должен? А минифицировать?

Так мы можем прийти к тому, что перенесем в композер половину bower и gulp (или половину assetic). правильно ли это?

Я тут погуглил и для начала, нашел такую штуку: https://github.com/fxpio/composer-asset-plugin

Это по сути аналог bower, который умеет читать данные из репозиториев bower и устанавливать его пакеты (если ты не в курсе - то bower это пакетный менеджер для фронтенда, т есть аналог композера для js и css библиотек).

У него есть свои проблемы:

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

В общем, я бы предложил рассмотреть такие варианты:

- посмотреть, может ли нам тут помочь Assetic
- написать или поискать плагин к композеру для публикации библиотек, в том числе с поддержкой симлинков
- если эти варианты не годятся, то пользоваться своим скриптом, вроде того что ты написал
Аноним 2016/08/08 05:05:33  №815914 209
>>815796

Написано же: ты пытаешься что-то устанавливать на файловую систему, которая примонтироана в режиме "только для чтения"

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

И да, я не знаю что такое sails, но чтобы им пользоваться надо изучить хотя бы основы Линукса.
Аноним 2016/08/08 05:09:27  №815915 210
>>815796

Также, есть вариант что файловая система просто не поддерживает симлинки, и при попытке его создать возвращает такой код ошибки.

Я тебя хочу предупредить: может быть все эти руби, питоны, ноде жс, монго и разрекламировани и имеют хороший пиар - но учти что они предназначены для линуксоидов которые хорошо в своей системе разбираются, умеют компилировать рукми и править скрипты сборки. Не знаю как сейчас, но когда node js появилась, она была точно не для начинающих, а для опытных разработчиков.

Если ты хочешь работать с этими модными технологиями, начни с более глубоко изучения линукса, освой консоль как следует. Это ненормально что человек пытается использовать ноду не не способен прочесть сообщение об ошибке и хотя бы выполнить команду mount.

А вот в случае c php все проще и с ним можно работать даже под виндой. PHP - язык для начинающих.
Аноним 2016/08/08 05:12:04  №815916 211
>>815782

Проблема не в правах, а в непонимании как работает линукс и как настроено твое окружение и что происходит в процессе установки. Тебе надо научиться решать эти проблемы, а не пытаться убежать от них, поменяв окружение.
Аноним 2016/08/08 05:14:24  №815917 212
>>813830

Советую выкинуть сборки с устаревшим софтом и ставить и настраивать все руками. Насчет проблемы с dll - наверно надо какую-то библиотеку установить и наверняка в документации это описано.

Также, есть вариант что эта библиотека установлена, просто динамический линкер не может ее найти так как она не в PATH.
СТОП СКРОЛЛИНГ АНОН ВИЗ Э ПРОБЛЕМ ХИЭР Аноним 2016/08/08 09:09:28  №815935 213
14706365684580.jpg (10, 210x220)
220x210
посоветуйте годный бесплатный встраиваемый в обычную php-страницу веб-чат, в котором можно было бы свои комнаты создавать/настраивать
Аноним 2016/08/08 13:13:03  №816004 214
Стоит ли светить в резюме гитхаб который я светил на двачах? Он гуглится с постами тут.
Или я параноик и никто не будет его гулить?
Аноним 2016/08/08 13:16:50  №816006 215
>>816004

При желании можно сделать новый независимый гитхаб и в него запушить что надо.
Аноним 2016/08/08 13:34:53  №816014 216
>>816004
Обычно гуглят не гитхаб, а имя и никнейм который ты используешь. Тогда да, могут найти посты на дваче, но я бы не волновался по этому поводу.
Аноним 2016/08/08 13:47:28  №816023 217
>>816014
>но я бы не волновался по этому поводу

Как то не удобно, хотя мало кто поймет что тут происходит. Просто посты на тематическом форуме и немного трапов и аниме вокруг.
Аноним 2016/08/08 13:50:20  №816026 218
>>816023
В /pr/ же нет трапов, тут в основном по теме посты, так что нормально. HRы обычно дальше страницы которую им выдал гугл не ходят.
Аноним 2016/08/08 13:57:28  №816032 219
>>816006
А тогда начнутся вопросы по типу "А чего это у вас всё одним коммитом, хотим историю развития проекта посмотреть, как вы код рефакторили и так далее."

>>816004
Я тоже думал над этим. У меня такая идея: создать новый аккаунт на гитхабе, изменить во всех своих репозиториях автора коммитов со старого на новый, запушить от нового имени в новый репозиторий с новым именем. В результате даты коммитов и сами коммиты сохранены, но автор другой.
Как менять автора/email? Вот тут примеры:
- Вот здесь для отдельно коммита: http://stackoverflow.com/a/1320317
- Вроде бы готовая красная кнопка: https://help.github.com/articles/changing-author-info/

Я это не пробовал и опробую ещё не скоро, не хочу пока работать, но вроде бы это должно сработать.
Аноним 2016/08/08 14:08:31  №816036 220
14706545116840.png (191, 729x291)
291x729
>>816023
Та да, видит HR ссылки на твой гитхаб, заходит сюда и видит пикрил.
Аноним 2016/08/08 14:12:20  №816038 221
>>816036
У ОПа обычно нормальные картинки. Плюс мне ни разу ничего не сказали про это, был на шести собеседованиях.
Аноним 2016/08/08 14:22:32  №816043 222
>>816036
>>816023

Обратная сторона, сдеанонят на двачах, найдут резюме/сайт
Аноним 2016/08/08 15:03:03  №816060 223
14706577837950.jpg (76, 1618x278)
278x1618
14706577837961.jpg (123, 1335x603)
603x1335
14706577837992.jpg (91, 1226x478)
478x1226
14706577838013.jpg (65, 192x907)
907x192
ОП или кто-то. Помогите уже блядь, с выходных ебусь с этой yii багой(мб сервер мб я, пиздецццц). Сабж: Yii 1(достался с фриланса). В общем: начал изменять js код - смотрю блядь, после первого сохранения увидел неладное - в бразузере старый js используется(проекта). Нашел, что yii публикует статику, вставил в компоненты assetmanager с ( linkAssets' => true). Скинул все из assets в backup папку, думал оно перенегенерирует все, а тут хуй мне. Пути создались новые, папка есть но частично пустая(из 100 файлов - есть 1 скрипт). Я могу конечно все залить в эту папку, но блядь я хочу разобраться, что я делаю не так, как мне на дев. сервере не ебаться с этим паблишем, я хочу СОХРАНИТЬ файл и видеть сразу изменения. Прочитал на хабре https://habrahabr.ru/post/139166/ - думал норм, закинул все, но сразу проблема вылезла. Скрипты блядь подключаются из ВСЕХ ПЕЗД, я отвечаю(я пришел с modx(gavno)), но такой хуйни не видел никогда, скрипты блядь везде, я же не буду заменять каждый вывод на под другой метод. Анон помоги - как пофиксить стандартный вывод, я полагаю что проблема в правах доступа, ПАПКИ создаються - $this->getAssetsUrl() достает правильную папку, но там нету файлов. Если что спрашивай, я сегодня буду целый день тут, очень хочу помочь клиенту, но сайт делали долбоебы(4 скрин и это только половина).
Аноним 2016/08/08 15:07:29  №816061 224
>>816060
Ладно, попробую без матов: идет жесткий кеш(паблишинг) со стороны Yii. Стандартный компонент и его свойство не помогли, Yii::app()->assetManager->publish($assets_path, false, -1, YII_DEBUG); и $this->getAssetsUrl() возвращают пустые папки(1-2 файла есть). За 2 узнал, что проблема может быть в симлинках, правах доступах и моей криворукости
Аноним 2016/08/08 15:15:36  №816063 225
14706585364640.png (5, 272x154)
154x272
14706585364641.png (8, 263x212)
212x263
>>807538 (OP)
ребятки, помогите. Не могу понять почему один код(с переменной flag) выводит простые числа правильно, а второй нет? Почему так?
Аноним 2016/08/08 15:34:26  №816070 226
>>816063
ну потому-что 1 цикл у тебя на поиск непарных чисел, у тебя каждый раз будет идти break, только на непарных он будет выводить $i
Аноним 2016/08/08 15:42:39  №816075 227
14706601600410.jpg (58, 972x605)
605x972
>>816063
>>816070
Дополню: тебе нужно выводить только тогда когда ты уже в самом конце цикла, как вариант пикрилейтед. Но нужно еще для 2 придумать что-то, но мне лень
Аноним 2016/08/08 16:11:17  №816096 228
>>816060

Начнем с простого вопроса: ты изучил как работает система публикации статики в юи? Если нет, то начни с этого. Скорее всего там уже все сделано как нужно и надо просто переключить какую-нибудь опцию в конфиге.

Аноним 2016/08/08 16:13:00  №816099 229
>>816075
не не, не напрягайся, бро, я все понял, огромное спасибо
Аноним 2016/08/08 16:31:26  №816116 230
>>816096
если все сделано было как нужно, тогда после удаление содержимого из assets, оно б перегенерировало б все
Аноним 2016/08/08 16:50:34  №816126 231
Анон, скинули вот тестовое задание ниже. Уже несколько дней не могу начать его делать, с чего начать и как оформить думаю.

Напишите, пожалуйста, средствами PHP, MySQL, JavaScript форму входа/регистрации нового пользователя. Продумайте самостоятельно необходимые поля. В результате заполнения формы пользователь должен предоставить информацию о себе. Использование различных PHP фреймворков не допускается. Клиент также не должен быть перегружен, максимум Bootstrap & jQuery.
1. Форма должна быть выполнена способом, понятным пользователю, содержать необходимые инструкции, комментарии и т.п. (usability).
2. Должна быть возможность переключения языка интерфейса формы на другой язык.
3. Скрипт должен содержать средства верификации и валидации полей, а также защиту от некорректного ввода данных, спецсимволов, попыток взлома и т.п.
4. Валидация и верификация полей должна проводиться как на клиентской стороне (средствами JavaScript), так и на серверной стороне (средствами PHP).
5. Структура базы данных должна быть обоснованной.
6. Кроме введения текстовых данных пользователь при регистрации должен иметь возможность загрузить графический файл форматов gif, jpg, png.
7. Вспомогательные тексты в форме (названия полей, подсказки, ошибки и пр.) должны быть сформулированы грамотно и понятно пользователю, выдержан деловой и уважительный стиль обращения.
8. Код должен быть написан понятно и аккуратно, с соблюдением табуляции и прочих элементов написания, без лишних элементов и функций, не имеющих отношения к функционалу тестового задания, снабжен понятными комментариями.
9. Обращаем внимание на то, что имеет значение не только техническая часть выполненного задания (коды), но и дизайнерская (внешний вид, логика оформления, полнота инструкций).
10. Пожалуйста, выполняя тестовое задание, обратите особое внимание на качество и безопасность кодов.
После входа должен отображаться профайл зарегистрировавшегося пользователя.
Аноним 2016/08/08 16:56:58  №816137 232
>>816126
Ого, это где такие легкие тестовые дают? Я бы для начала сверстал простой дизайн, потом сделал бы регистрацию с серверной валидацией, потом логин к ней. Ну а дальше уже допиливать дизайн, смену языков и другие функции которые там просят реализовать.
Алсо
>Пожалуйста, выполняя тестовое задание, обратите особое внимание на качество и безопасность кодов.
Проиграл с безопасности и качества кодов.
Аноним 2016/08/08 16:59:23  №816142 233
>>816137
А как лучше для них сделать вёрстку - в хтмл файле или просто echo "<html>.."; ?

А то уже сколько дней сижу и думаю как бы всё получше сделать но никак не могу придумать и не приступаю, чёт боюсь.
Аноним 2016/08/08 17:02:25  №816147 234
>>816142
А ты студентов из ОП-поста хоть делал? Логику и отображение всегда лучше разделять.
Аноним 2016/08/08 17:03:42  №816149 235
>>816147
Нет, студентов не делал.

Хорошая идея, пожалуй надо сделать задачки ОПа.
Аноним 2016/08/08 17:05:19  №816150 236
>>816149
Задача про студентов - это по сути и есть твое тестовое, только в задаче ОПа еще редактирование информации есть.
Аноним 2016/08/08 17:10:07  №816154 237
>>816126
Задание тебе скинули или нам? Если у тебя с этим заданием проблемы, то на работе будет ещё сложнее, двач не поможет.

И хочешь верь, хочешь нет, но мой друг выполнял именно это задание где-то полтора года назад. Он сделал, как по мне, всё аккуратно и в полном соответствии заданию, а его просто проигнорили. Хотя, быть может, у тебя это уже другая фирма/студия, и они просто скопипастили задание.
Аноним 2016/08/08 17:10:44  №816155 238
Базы данных, таблицы и ячейки таблиц лучше тоже кэмел кейсом называть?
Аноним 2016/08/08 17:11:56  №816156 239
Аноним 2016/08/08 17:13:46  №816159 240
>>816156
змеиный_кейс или Змеиный_кейс?

И всё должно быть змеиным - как названия БД, так и таблицы и ячейки?
Аноним 2016/08/08 17:14:34  №816160 241
>>816159
В гугле забанили?
Аноним 2016/08/08 17:14:40  №816161 242
А учебник у вас есть по пхп какой-нибудь ?
Задачки хороши, но я бы и учебник какой-то параллельно почитал бы, как вообще вы учили пхп ?
Аноним 2016/08/08 17:15:54  №816162 243
Аноним 2016/08/08 17:16:48  №816165 244
Аноним 2016/08/08 17:39:17  №816176 245
>>816161
Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
Аноним 2016/08/08 17:41:59  №816177 246
Аноним 2016/08/08 18:19:47  №816188 247
Аноним 2016/08/08 18:41:35  №816199 248
>>816155

В большинстве случаев назвают с подчеркиванием, например:

TABLE students
COLUMN group_id (-> groups)
COLUMN birth_year

Хотя я видел и случаи с camelCase.
Аноним 2016/08/08 19:40:45  №816231 249
Напомню себе что надо проверить https://github.com/never3ver/students_list из старого треда >>812156

Также, ответил на оставшиеся посты в старом треде:

>>816227 - 2 задачи по HTML, за август
>>816228 - вопрос по JSON и файлообменнику

Если кого-то пропустил - напомните о себе тут (TheSidSpears, вижу)

SomeApprentice, там на твои посты тоже есть ответы в старом треде, если ты вдруг не видел. например >>815065 и >>815058

Аноним 2016/08/08 20:08:55  №816242 250
Куда делась папка data из mysql 5.7?
Аноним 2016/08/09 12:12:18  №816505 251
Во-первых хочу сказать спасибо добрым анонам в этих тредах за советы, вы делаете благое дело.

Допустим, у меня есть приложение на фронтенде - angularjs, php мне нужно только для выполнения CRUD операций с БД (ну и предварительной валидации, естественно). Мне лучше писать просто напрямую код, используя паттерн TableDataGateway? тот же Slim упростит или усложнит мне жизнь?
Аноним 2016/08/09 13:58:06  №816554 252
14707402862870.jpg (30, 600x335)
335x600
https://github.com/TheSidSpears/Students Аноним 2016/08/09 15:37:15  №816609 253
Аноним 2016/08/09 17:09:33  №816676 254
Вроде где-то видел список маст-хев плагинов веб-разработчикам для саблайма, есть у кого?
Аноним 2016/08/09 18:27:36  №816702 255
На связи сисодмин-cетевик-безопасник, который волею шила в заднице руководства подписался на создание нового сайта для компании. В итоге за пару дней в неспешном темпе сваял 2 сайта, на Джумле-Хуюмле и на Вордпрессе, залил на сервак, получил премию, сижу довольный.

По сути это ничего к тому, что вы тут изучаете отношение не имеет, и вообще уровень дилетанта, но блять, я так подумал, что раз руководство осталось довольно, то значит в нашем мире ещё полно глупых ИП-шников, которым нужен простенький сайт, и которые готовы за него заплатить.

Вот я так и подумал, взять пару списаных машин на 3-их Ксеонах, воткнуть туда виртуализацию и спрятать в серверной, потом раскидать по группам Вконтакте объявления, мол обеспечиваю разработку и сопровождение сайтов. Лепить сайты под копирку на ссаном Вордпрессе и хостить на сраных Ксеонах, пиздя электричество и трафик у государства, получая профит. Ясен пень, ориентироваться на сайты уровня "Скорой компьютерной помощи в Мухосранскнейм" с низкой посещаемостью.

Взлетит не взлетит? Есть тут такие же долбоебы как я? Можно в принципе даже не заморачиваться с машинами, и тупо лить на хостинг уровня Таймвеба.



Аноним 2016/08/09 18:34:16  №816706 256
>>816702
Взлетит, только будешь делать для такого же мелкого бизнеса. Денег на этом много не заработаешь. Компании посерьезнее уже заказывают у каких-то аутсорсеров то что им нужно (это обычно какие-то специальные вещи, которые ЦМС не предоставляют). С компаниями-аутсорсерами ты не сможешь конкурировать, совсем никак. Только если создашь свою компанию-аутсорсера, но это уже тема для другой доски.

Алсо, подумай о том что будешь делать когда твой заказчик скажет тебе реализовать определенную функцию, а в плагинах для вордпресса и джумлы ты такого не найдешь.
Аноним 2016/08/09 18:42:50  №816713 257
>>816706
>Алсо, подумай о том что будешь делать когда твой заказчик скажет тебе реализовать определенную функцию, а в плагинах для вордпресса и джумлы ты такого не найдешь.

А без базовых знаний это будет сложно реализовать? Ну например, насилуя гугл запросами "how to create хуйнянейм in php?"
Аноним 2016/08/09 18:47:35  №816717 258
>>816713
Зависит от сложности задачи и объема работы. Я думаю что реализовать будет совсем не сложно, а вот потом поддерживать то что ты написал - это уже задача не из легких. Почти во всех ЦМС используется ООП код и MVC паттерн, без понимания хотя бы этих вещей, ты будешь городить велосипеды, в которых через несколько месяцев ты сам разобраться не сможешь.
Аноним 2016/08/09 18:51:17  №816720 259
>>816717
Ясно, понятно. Добра тебе. Займусь тогда для начала простыми решениями на ЦМСках, а параллельно буду надрачивать опыт создания с нуля. Авось взлетит через пару лет на достойный уровень.
Аноним 2016/08/09 18:55:59  №816722 260
Завалил собеседование. Сижу и думаю, хуле я такой тупой и не смог решить задачку по простенькому SQL, вроде все понятно, но я корзинка
Аноним 2016/08/09 18:56:22  №816723 261
>>816722
Что за задача хоть была?
Аноним 2016/08/09 20:19:25  №816789 262
14707631652540.png (4, 621x156)
156x621
Братишки, ну почему эта хрень не работает-то, а?
Аноним 2016/08/09 20:34:19  №816805 263
14707640600670.png (2, 872x189)
189x872
Аноним 2016/08/09 21:14:10  №816836 264
4 месяца назад, в силу определённых причин, перестал заниматься программирование на ПХП. К тому времени уже нормально верстал, умел натягивать на вордпресс, знал ПХП на более менее нормальном уровне и даже немного yii2. Теперь хочу вернуться обратно, как это лучше сделать? Многое помню, но многое и забыл. У кого есть опыт подобного?
Аноним 2016/08/09 22:19:47  №816883 265
Аноним 2016/08/09 22:22:53  №816885 266
>>816836
Решай продвинутые задачи, а потом Студентов.
Аноним 2016/08/10 00:16:57  №816942 267
В куки в виде массива содержаться id записей которые мне необходимо вывести из базы данных. Вывести мне их надо в определённом месте на странице, как это лучше сделать? Вставить функцию вывода записи по id из базы данных в массив, и подставлять таким образом каждый id-шник из него? Или же как-то поизвращаться с запросом IN?
Аноним 2016/08/10 04:31:48  №817000 268
>>816883
А вот нихуя не выдает. В том-то и дело, что пустая страница. Ни ошибки, ни хоста. Отчего у меня складывается впечатление, что эта штука не работает совсем. Но почему - решительно не понимаю, ведь эту хрень я слизал с какой-то из статей, в которой все работало.
Аноним 2016/08/10 10:37:40  №817068 269
Подскажите пожалуйста годный фреймворк под PHP 5.3, чтобы в будущем обновление версии PHP до ~5.6 прошло максимально безболезненно.
Аноним 2016/08/10 10:46:04  №817072 270
>>817068
PHP 5.3 ~5.6

но ведь там 2016ый и PHP7, дружище, никто не любит ретроградов

>>816722
Не бойся, еще будут собеседования
Аноним 2016/08/10 10:47:19  №817073 271
>>817072
Работая не на себя выбора не остается
Аноним 2016/08/10 11:07:16  №817079 272
>>817068
Добавлю для понимания. Я репортил пару месяцев назад об устройстве на работку. На месте обнаружилось что внутри у них PHP 5.3, куча древних скриптов начала нулевых, использующихся по сей день. Вот и было принято решение как-то красиво это древнее дерьмо потихоньку перебирать, лучше на основе какого-нибудь фреймворка. Также до конца этого года есть планы по обновлению PHP до 5.6 максимум, а то и старше. Такие дела.
Аноним 2016/08/10 11:42:10  №817085 273
>>817073
>>817079
>от и было принято решение как-то красиво это древнее дерьмо потихоньку перебирать, лучше на основе какого-нибудь фреймворка

Плохое решение, лучше бы начать рефакторинг всего и просто рядом писать все с нуля используя старые наработки.
Ибо завернув говно в красивую обертку ты получаешь еще больше говна и так программист за программистом, пока вся систем не развалится окончательно. Ты случайно не порталами недвижимости занимаешься?

>есть планы по обновлению PHP до 5.6 максимум

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


Попробуй донести это до руководства, потому что они захотят больше улучшений, а улучшать то что ты описал, явно будет физически больно.
Аноним 2016/08/10 12:13:51  №817103 274
>>817085
Переписывание и имелось в виду, и чтобы не плодить опять сотни решений для базовых задач нужна база.

> Ты случайно не порталами недвижимости занимаешься?

Совсем мимо

> Странные планы, переход с 5.6 на 7 довольно прост

Админ звереет от упоминания любого апгрейда, поэтому на серваке крутится древний дистр, где даже официальных пакетов 5.6 нет

Также какого-то хуя вся система и файлы на сервере в кои8, как же разрывает от этого постоянно
Аноним 2016/08/10 13:39:34  №817137 275
Почему COUNT() возвращает строку а не число?

public function getCount()
{
$pdo = $this->getPdo();

$query = $pdo->prepare("SELECT COUNT(*) FROM table");
$query->execute();

$result = $query->fetchColumn();

return $result; //string(3) "110"
}

С этим можно работать? По идее, php само преобразует в нужный формат, но не следует ли нам самим возвращать нужный тип данных?

Аноним 2016/08/10 14:25:39  №817157 276
>>817137
Гугли PDO::PARAM_INT, как-то так. По поему диванному мнению, лучше уж явно преобразовывать (тем более, что PDO предоставляет возможность), чем позволять инструменту делать конверсию типов за тебя (привет JS).
Аноним 2016/08/10 14:40:37  №817163 277
Друзья. Задача про генератор имён. Как собрать слоги? Программа выплевывает только последний слог. http://ideone.com/kOgl60
Аноним 2016/08/10 14:45:11  №817170 278
>>817163
У тебя $name каждый раз перезаписывается, а нужно, чтобы предыдущее значение "соединялось" с новым. Погугли конкатенацию в PHP.
Аноним 2016/08/10 15:16:42  №817188 279
14708314030730.jpg (124, 1200x800)
800x1200
Аноним 2016/08/10 15:22:21  №817193 280
Аноним 2016/08/10 15:52:40  №817208 281
>>817103
О боже
Держись там

По делу, попробуй Yii1 он вроде дружит с древними пхп
Аноним 2016/08/10 17:16:47  №817269 282
>>817208
Спасибо, буду смотреть на Yii и держаться
Аноним 2016/08/10 18:30:29  №817321 283
>>817103
И ты ради этого учил программирование?
Аноним 2016/08/10 19:29:49  №817359 284
ребята, я знаю среди вас есть опытные аноны.
давайте сделаем вебинар где опытные пхп куны расскажут и покажут как делать например простой форум за 15 минут с регистрацией и коментами или как замутить свой онлайн магазин.
Аноним 2016/08/10 19:31:38  №817360 285
>>817359
Зачем это нужно? Лучше самому решать задачи из ОП-поста, они будут полезнее форума или онлайн магазина. Плюс так ты большему научишься.
Аноним 2016/08/10 20:03:24  №817372 286
>>817360
да толку с этих задач. основная их функция это научиться синтаксу и все. в прикладном плане они бесполезны...
Аноним 2016/08/10 20:18:56  №817381 287
>>817372
И каким же образом будут полезен форум или онлайн магазин в прикладном плане? Тебе так хочется делать говно на вордпрессе для индусов и пакистанцев?
Аноним 2016/08/10 20:27:05  №817385 288
Аноним 2016/08/10 20:43:50  №817400 289
Как на Twig'е написать: if(isset($_FILES['file_to_upload']))
Интересует именно идентификация переменной, про {% if var is defined %} я знаю что писать вместо var
Аноним 2016/08/10 20:46:28  №817402 290
>>817400
Для этого тебе нужно передавать твигу массив $_FILES. Но ООП подходом было бы вообще не трогать этот массив и использовать средства фреймворка, с которым работаешь.
Аноним 2016/08/10 21:37:00  №817434 291
Чет так устаю после работы, какой-то пиздец. Говорят спорт помогает, есть еще какие варианты?
Аноним 2016/08/10 22:07:28  №817452 292
Мне кажется, я немного отстал от программирования на ПХП и в плане создания современных сайтов. Есть несколько форм, я хочу обрабатывать их все на одной отдельной странице, поэтому прописываю им повсюду в action её адрес. Так правильно делать? Или это слишком палевно и небезопасно и надо делать например через аякс или яваскрпт? Дальше, у каждой из этих форм, есть определённое назначение, одна вносит в базу данных, другая редактирует, третья делает что-то ещё, чтобы понять, что конкретно делать на странице обработчике, я хочу сделать для каждой из этих форм скрытое поле, в котором будет говориться её роль, например так:

<input type="hidden" name="act" value="create">

А на странице обработчике
if($_POST["act"]=="create") {
//выполняем определённое действие
}

if($_POST["act"]=="edit") {
//выполняем ещё какое-то действие
}

У меня вопрос, сильно ли это паливно делать скрытые поля таким образом и для таких целей? Так уже давно никто не делает?
Аноним 2016/08/10 22:19:06  №817458 293
>>817452
Если страница занимается только обработкой этих форм, не проще ли передать интент через имя формы?
Аноним 2016/08/10 22:28:37  №817467 294
>>817458
Да, наверное легче, это будет правильнее? Так можно делать с точки зрения безопасности?
Аноним 2016/08/10 22:30:36  №817469 295
Как осуществить выбор определённого места и дальнейшую его запись в базу данных на гугл карте? То есть, есть допустим форма, пользователь в ней выбирает название города, после чего ему показывается гугл карта его города, в котором он может выбрать определённое место, если нажмёт на сабмит после этого, то выбранное им место запишется в базу данных.
Аноним 2016/08/10 22:34:16  №817472 296
Аноним 2016/08/10 22:45:31  №817480 297
>>817359

Я думаю уроков по скачиванию и установке движка форума предостаточно. Это не требует каких-то особых навыков кроме компьютерной грамотности и может умения настраивать Апач или закчивать файлы по sftp.

Например https://www.google.ru/search?q=%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0+%D1%84%D0%BE%D1%80%D1%83%D0%BC%D0%B0+php&newwindow=1&gbv=1&sei=_oOrV4fnCoL_sQHmzo-YDQ

У нас обучение программированию.
Аноним 2016/08/10 22:50:11  №817482 298
>>817400

Незачем в шаблоне лезть в _FILES. Ты явно делаешь что-то не так.

>>817434

Высыпаться и отдыхать, делать перерывы, не сидеть весь день за компьютером.

>>817452

> я хочу обрабатывать их все на одной отдельной странице, поэтому прописываю им повсюду в action её адрес. Так правильно делать?
скорее всего нет. Как ты при ошибке выведешь исходную форму? Плюс у разных форм логика обработки разная. Есть урок по обработке форм на моем гитхабе https://github.com/codedokode/pasta/blob/master/forms.md

>>817469

Можно через яваскриптовое АПИ наверно. Т е отслеживать установку точки пользователем на карте и запоминать координаты.
Аноним 2016/08/10 23:37:44  №817517 299
Памагити. Файлообменник. Как контроллер будет отличать комментарий комментария ([spoler]комментарий комментария комментария etc[/spoiler]) от просто комментария? У меня URL контроллера файла (страница с описанием информации о файле и ссылкой на скачивание) вида site.com/fileID. Пока что на ум пришло только делать роут вида site.com/{fileID}[/add][/{commentParentID}] В случае комментария-комменатрия идет айди родителя, если комментарий особняком - то пусто.
Аноним 2016/08/10 23:46:25  №817523 300
>>817517
Твоя идея подразумевает то что для добавления комментария-корня и комментария-ребенка у тебя будет разный код? Или я что-то не так понял?
Можно сделать по другому - чтобы не делать два пути для добавления комментариев, можно сделать один /site.com/[fileId]/[addComment]/
Затем в форму добавления древовидного комментария (комментария к комментарию) добавлять hidden инпут с значением parendId = n. Где n - айди родителя.
Потом в контроллере просто проверяешь, есть ли в POST запросе элемент parentId. Если есть - значит это комментарий-ребенок, если нет - значит комментарий корень дерева. Таким образом код для добавления всех комментариев будет общий.
Аноним 2016/08/10 23:51:38  №817526 301
>>817517
Нет, не разный код. Все ссылается на один метод контроллера run. Я хотел выстроить логику за счет отсутствия параметра (commentParentID). Hidden поле? Ого, сам бы не додумался, спасибо, попробую.
Аноним 2016/08/10 23:52:58  №817528 302
Аноним 2016/08/11 00:04:51  №817536 303
>>817523
Выплыл первый подводный камень. У меня есть ссылка <a>Ответить</a> которое открывает спрятанную форму ответа на комментарий. Как шаблон поймет где открывать эту форму? Не очень красиво будет если под каждый комментарием она заранее будет. Наверное такие вещи через js решаются, да? Я его еще не изучил.
Аноним 2016/08/11 00:15:28  №817539 304
>>817536
Есть несколько способов решения этой проблемы.
Первый способ будет выглядеть не очень красиво, но он будет работать в браузерах с выключенным javascript.
При выводе комментария делаешь ссылку под ним, которая будет выглядеть как-то так: site.com/fileId/?comment=n (где n - айди комментария).
Затем тебе этот n из ссылки нужно будет передавать в шаблон, и там уже выводить форму под нужным комментарием.
Проблемы этого способа очевидны: чтобы ответить на какой-то комментарий, пользователю придется каждый раз перезагружать страницу. Чтобы решить эту проблему, можно использовать JS.
Для этого тебе нужно будет изучить как работать с деревом DOM и как отправлять ajax запросы в JS. Тебе наверное с этим придется самому разобратся, потому что у ОПа нет уроков в которых это объясняется.
Аноним 2016/08/11 00:31:56  №817543 305
>>817480
как будто то о чем я писал это не программирование...
и лучше бы фреймворки объяснили, хотя бы простые. то что у вас это скорее введение в алгоритмы
Аноним 2016/08/11 01:36:47  №817566 306
Как сделать URL на локалхосте вида example.loc?
Как сделать поддомен вида backend.example.loc?

В httpd-vhosts.conf что надо прописать?

У меня там вот это для первого:

<VirtualHost звёздочка:80>
ServerAdmin [email protected]
DocumentRoot "c:/Apache24/htdocs/new/frontend/web/"
ServerName example.loc
ErrorLog "c:/Apache24/htdocs/new/error_frontend.log"
CustomLog "c:/Apache24/htdocs/new/error_frontend.log" common
</VirtualHost>

При этом в httpd.conf раскомментирована работа httpd-vhosts.conf и если поставить проcто ServerName localhost, то все работает.
Аноним 2016/08/11 01:44:15  №817569 307
>>817566
То всё работает по адресу localhost.
Любой другой не работает: local, host и т.п.

Забыл сказать, хотя уже понятно: нужно для разделения папок с фронтендом и бэкендом в приложении.
Аноним 2016/08/11 02:13:33  №817577 308
>>817566
в etc/hosts добавил все что нужно?
Аноним 2016/08/11 08:39:58  №817617 309
Аноним 2016/08/11 08:56:19  №817619 310
Офисный планктон на связи. Дали мне папку с файлами, в ней 50 html страниц и одна главная. Типа открываешь главную через браузер и через неё переходишь в любую из 50, а там описание (что-то вроде FAQ).
Мне нужно добавить в каждый из 50 файлов спойлер (или подкатегорию). Должно быть так: заходишь в одну из 50-и, а там еще три объекта с описанием.
Как мне это сделать, не зарываясь в книги?
Аноним 2016/08/11 08:59:56  №817620 311
>>817536

Для того, чтобы динамически менять что-то на странице (раскрывать форму ответа при клике по ссылке "ответить"), нужен либо продвинутый CSS, либо яваскрипт.

На CSS это делается так: под каждым комментарием закладывается скрытая форма ответа и раскрывается при клике на кнопку (а не ссылку) "ответить". Но это очень неэффективно так как надо заложить в страницу много копий одной и той же формы, это только утяжеляет страницу.

На JS делается так: в страницу встраивается программа на JS, которая отслеживает нажатие кнопки "ответить" и перемещает форму ответа под нужный комментарий. Также, вписывает в скрытое поле формы id комменатрия на который дается ответ.

Но и без JS мы можем извернуться. Во-первых, мы можем сделать ответ на комментарий на отдельной странице. То есть "ответить" будет ссылкой вида /file/:fileId/reply/:parentId на которой выводится родительский комментарий и форма ответа под ним. Такая схема позволяет позже сделать "прогрессивное улучшение" с помощью яваскрипта. Если у пользователя есть яваскрипт, то клик по ссылке перехватывается, и вместо перехода на отдельную страницу под комментарием показывается форма ответа. А при отправке формы будет отправляться аякс-запрос на адрес со страницей комментирования.

Также, есть еще другой вариант. Мы можем сделать форму ответа внизу, а рядом с каждым комментарием сделать радиокнопку. Пользователь выбирает, на какой комментарий он хочет ответить, и заполняет форму. Если завернуть комментарий в label, то клик по любому месту комментария будет нажимать связанную с ним радиокнопку. Средствами CSS можно подсвечивать выбранный комментарий.

Хотя, наверно вариант с отдельной страницей все же получается попроще в реализации.

Я тебе советую учиться делать страницу именно с возможностью "прогрессивного улучшения" и работы без яваскрипта. Это может помочь тебе более правильно организовывать свой код.
Аноним 2016/08/11 09:02:24  №817621 312
>>817321
>И ты ради этого учил программирование?
Надо и начинать с чего-нибудь, благо что нагрузка здесь минимальная
Аноним 2016/08/11 09:05:51  №817622 313
>>817539

Уроков нет, но есть полезные задачи по JS https://gist.github.com/codedokode/ce30e7a036f18f416ae0

>>817543

Чтобы браться за фреймворки, надо сначала изучить много чего другого и как минимум сделать студентов. Нужно уверенно знать язык, ООП, некоторые паттерны вроде DI.

>>817566

Добавить новый поддомен в hosts, добавить новый виртуальный хост в конфиг апача.

https://www.google.ru/search?q=%D0%B0%D0%BF%D0%B0%D1%87+%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C+%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9+%D1%85%D0%BE%D1%81%D1%82&newwindow=1&gbv=1&sei=iRWsV-abI4HOsAHt3rXoBg

Аноним 2016/08/11 09:21:04  №817628 314
14708964642490.png (35, 1330x491)
491x1330
Сделал ошибку в классе - Slim о ней сообщил. Исправил - Slim её всё-равно показывает. Удалил класс нахрен - вс1 равно показывает ошибку в классе. Что за кеширование и как его убрать?
Аноним 2016/08/11 09:25:47  №817630 315
>>817621
Я вот боюсь на такие работы идти, чтоб потом не облениться и не привыкнуть говнокодить и говночистить. Типа "и так не плохо кормят". Правда есть опасения, что большинство компаний всё-таки хотят быстрых результатов и болт кладут на то, чему ОП приучает. И соответственно, придётся попыхтеть, чтоб найти норм компанию, где будешь развиваться.
Есть и минус этого - мог бы уже идти на джуна в кусофт и т.п. шараги и получать хоть что-то, а так сижу дома и еще полгода минимум буду сидеть и учиться кодить забесплатно
Аноним 2016/08/11 09:36:02  №817632 316
>>817628

Ты скорее всего исправил или удалил не тот файл.
Аноним 2016/08/11 10:20:08  №817655 317
Господа.

Думаю застримть написание TestHub на
https://www.livecoding.tv ?

Как вам идея?
Аноним 2016/08/11 10:26:19  №817658 318
>>817655
А сколько это будет длится?
Аноним 2016/08/11 10:34:00  №817663 319
>>817658
>А сколько это будет длится?

Бесконечно долго, так как нужно работать и дела делать параллельно и возможно вообще дропнится, но попробовать хочу
Аноним 2016/08/11 10:36:23  №817666 320
>>817630
Зря не пошёл. Посмотреть на различные решения написанные со смекалочкой стоит + сидишь на зарплате.
А когда рабочий день кончается (можно и в его время), по-прежнему, пилю всякие проектики для развития
Аноним 2016/08/11 11:11:45  №817694 321
Вот это я деб. Задача про шифровку. Зашифровал. Флип заюзал. Не расшифровывает. http://ideone.com/a67ZLn
Аноним 2016/08/11 11:20:48  №817699 322
>>817694
Кое что поменял в коде, теперь расшифровывает не так как было.
Аноним 2016/08/11 14:01:26  №817809 323
Аноним 2016/08/11 14:24:55  №817828 324
14709146956010.png (21, 891x548)
548x891
>>817632
Да вроде нет.
Даже перезагрузка Апача не помогла.
Аноним 2016/08/11 14:27:51  №817833 325
>>817666
Возможно. Но у меня помимо программирования другие увлечения. И я хочу программировать на работе, а вечером развиваться в других направлениях. Программировать дополнительно разве что на выходных, для того чтобы на месте не стоять, повышать скилл и зп
Аноним 2016/08/11 14:31:32  №817835 326
>>817632 Ты оказался прав, копия в каталоге повыше и это видно даже на скрине
Аноним 2016/08/11 15:17:20  №817865 327
https://github.com/someApprentice/Students

>>815058
>Это верно. Потому что тут ты меняешь тип метода, и соответственно придется менять места его использования. А вот если тип остается прежним, но например, меняется алгоритм хеширования (или исправляется ошибка в нем) - остальной код трогать не придется.
Но если мы не меняем тип, то остальной код тоже не придётся трогать. Не могу понять как инкапсуляция тут помогает.


>>815058
>> public function setProperty($property, $value) {
>Это вообще не очень хорошая вещь. Во-первых, она не проверяет имя поля и позволяет создать поле с любым именем. Во-вторых, она по большому счету нарушает инкапсуляцию. Потому что, если ты добавишь в сеттер setName() какую-то проверку, то она не будет вызвана в setProperty().
У меня есть похожие методы на этот которые обращаются к полям не через сеттеры. Их тоже следует исправить?


>>815058
>Ну иногда такие классы называют Сервис, иногда Хелпер.
Тогда я бы предпочел иметь Сервисы (классы отвечающие за внутреннюю логику) и Хелперы (классы содержащие вспомогательные методы) в разных директориях. Это не критично если я буду пользоваться таким подходом?
По хорошему, мне, наверно, следует перенести логику из контролеров в сервисы.


https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L10
Я решил не раздувать код и сделать сортировку или получение определенного количество записей прям в функции getAllStudents(), потому что у неё одинаковый запрос. Следует ли её переименовать в связи тем что она теперь может получать не всех студентов?

>$limit = 2147483647
В мануале по mysql сказано о том что если нужно получить все записи, то нужно указать какое-то большое число

https://dev.mysql.com/doc/refman/5.7/en/select.html
>To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. This statement retrieves all rows from the 96th row to the last:
>SELECT * FROM tbl LIMIT 95,18446744073709551615;
Это действительно так? Бывают ли на практике такие ситуации что нужно получить количество записей большее чем позволяет максимальное значение int?


https://github.com/someApprentice/Students/blob/master/app/Controller/Controller.php#L22
Для борьбы с sql инъекциями, я решил что удобней будет делать проверку на разрешенные колонки в методе получения запроса, чем в методе выполнения этого запроса. Так ведь тоже можно?

https://github.com/codedokode/pasta/blob/master/security/sql-injection.md#Методы-борьбы
>if (!in_array($sort, $allowed)) {
> $sort = $allowed[0];
>}
А почему $allowed[0] возвращает найденное значение? Я в мануале не нашел чтобы описывался такой синтаксис, и у меня не получилось сделать так же в моем условии https://github.com/someApprentice/Students/blob/master/app/Controller/Controller.php#L35


https://github.com/someApprentice/Students/blob/master/app/Controller/IndexAction.php#L38-L53
https://github.com/someApprentice/Students/blob/master/app/Controller/SearchAction.php#L29-L44
Это ведь тоже копипаста, верно? Я только что подумал что это код можно вынести в отдельный методов родителя контроллеров. Скоро исправлю.

https://github.com/someApprentice/Students/blob/master/app/Model/Helper/LoginHelper.php#L55
Я помню как ты говорил, что методы можно делать статическими если всегда будут возвращать одно и то же значение и не имеют никаких зависимостей, но в этот метод передается и меняется класс Student. Не является ли это зависимостью?

Если мы инкапсулируем методы то не следует нам их сделать закрытыми?

https://github.com/someApprentice/Students/blob/master/app/Model/Helper/LoginHelper.php#L61
https://github.com/someApprentice/Students/blob/master/app/Model/Helper/LoginHelper.php#L68
Как закрыть эти методы? Если я пытаюсь обратиться к ним в статическом методе через $this, то я получаю ошибку о том что обращаюсь не в контексте объекта.
Аноним 2016/08/11 15:22:38  №817869 328
Сап, Антуаны.
Решил почитать Ваших уроков из ОП-поста. До регулярных выражений оно все было просто и понятно, но дошел я до задачи про номера и всё, уперся как баран в новые ворота.
Если автору уроков кажется, что фраза "сначала идет +7 или 8, за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов" интуитивно наталкивает на решение, то эта далеко не так.
Подскажите же шаблон, который находит точное количество одних элементов, при этом игнорирует наличие других.
А то я уже начинаю с катушек слетать
Аноним 2016/08/11 15:36:17  №817878 329
>>817869
http://regexone.com/lesson/introduction_abcs
Не знаю что там в оп-посте, но вот ресурс, который мне пояснил за регулярки раз и навсегда. Я даже в букмарки добавил его.
Аноним 2016/08/11 15:42:37  №817881 330
Аноним 2016/08/11 15:50:13  №817887 331
>>807538 (OP)
Только что понял, почему F# называется F#
А вы знаете?
Аноним 2016/08/11 15:52:41  №817888 332
Аноним 2016/08/11 16:01:49  №817900 333
>>817881
Вобще я нуб, на одну задачу дальше тебя ушёл. но вангую что это из-за Юникода.
В задачнике есть ссылка - "Почему функции вроде strlen() не работают с русским текстом и надо использовать mb_strlen()."
Байты, туда сюда. но сука - mb_strtr - вызывает ошибку.
Аноним 2016/08/11 16:13:17  №817907 334
Запутался, что такое mapper. Например, в задаче на студенты класс StudentMapper что должен содержать?
Аноним 2016/08/11 16:17:49  №817910 335
Аноним 2016/08/11 16:23:18  №817916 336
Господа. Я сейчас на задаче про Маяковского. И возник такой вопрос. Я могу юзать array_rand и array_shuffle. И так и так мой код засчитается правильным?
Аноним 2016/08/11 16:30:49  №817923 337
14709222493950.jpg (59, 500x286)
286x500
Аноним 2016/08/11 17:44:51  №817967 338
>>817869

А ты попробуй подойти к решению постепенно.

Напиши сначала выражение которое значит "ровно одна цифра и любое число минусов, скобок , пробелов"
Затем возьми его в скобки и поставь конструкцию, задающую повторение предыдущего выражения 10 раз.
Аноним 2016/08/11 17:50:48  №817970 339
>>817694

Посмотри внимательно на свой алгоритм шифрования. Ты заменяешь й на 11, но аа тоже будет заменено на 11. Как это расшифровать? Тут проблема не в коде, а в логике его автора.

>>817900

Попробуй найти описание функции mb_strtr в мануале php.net. Такая функция существует? Кстати в случае strtr обычная версия этой функции нормально работает с кирилицей.

>>817907

Это читал? https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

>>817916

Лучше не использовать shuffle так как он портит порядок с лов в исходном массиве

Аноним 2016/08/11 18:35:42  №817985 340
>>817620
По поводу способа с отдельной страницей. Это будет страница с обычной шапкой, но вместо предыдущего контента с информацией о файле будет эта форма? Это новый контроллер или новый метод предыдущего контроллера?
Аноним 2016/08/11 18:42:51  №817987 341
>>817985

> но вместо предыдущего контента с информацией о файле будет эта форма?
Комментарий, на который отвечают (при желании можно еще его родителя добавить) и форма, да.

> Это новый контроллер или новый метод предыдущего контроллера?
Без разницы
Аноним 2016/08/11 20:02:51  №818023 342
>>817967
Тоесть, ты предлагаешь что-то типа этого
http://ideone.com/1aN7OL ?
Хоспаде! Как же я был слеп!. Спасибо, Анон, я два дня буксовал на этом месте
Аноним 2016/08/11 20:33:24  №818050 343
Поясните для дебила. Как сделать, чтобы рандомные слова не повторялись? http://ideone.com/ERzeV6
Аноним 2016/08/11 20:54:57  №818065 344
Как сделать красиво так, чтобы все что после :fileID не включалось в запрос при значении null у commentParentID?
$query = "SELECT COUNT(*) + 1
FROM comments
WHERE fileID = :fileID AND
commentID = :commentParentID";
Аноним 2016/08/11 20:57:21  №818068 345
Аноним 2016/08/11 21:02:02  №818071 346
>>818065
Пока что на ум приходит только
$query = "первые 3 строки";
if (empty($cPID))
$query .= "последняя строка";
Аноним 2016/08/11 21:02:36  №818072 347
Аноним 2016/08/11 21:04:52  №818074 348
>>818071
Но это приведет к тому что для bindValue в pdo тоже придется вставлять логику.
Аноним 2016/08/11 21:50:50  №818106 349
>>807538 (OP)
Задача про кошек-мышек
Скиньте кто-нибудь решение, пожалуйста. Или ответьте на вопросы
Аноним 2016/08/11 21:56:37  №818113 350
>>818106
Спрашивай - оп ответит. Готовое решение - это же не спортивно.
Аноним 2016/08/11 21:59:24  №818119 351
>>818106
>>818113
Так как поле состоит из клеточек, у тебя может появиться желание сделать двухмерный массив для хранения животных. Не советую так делать, ведь этот массив надо будет поддерживать в актуальном состоянии. Проще хранить обычный одномерный массив животных, находящихся на карте.

Не понятно, как после этого выводить на экран, да и как "двигать" животных по полю, если массив одномерный а поле двумерное
Аноним 2016/08/11 22:05:07  №818121 352
>>818119
Вывести одномерный массив как двумерное поле не сложно. Но там речь идет о животных, а не о поле.
Аноним 2016/08/11 22:06:24  №818122 353
>>818119
Когда-то мне ответили следующее:
> А зачем нам нужен двухмерный массив букв если удобнее просто хранить список животных? У них ведь есть координаты так что массив с буквами избыточен.
Аноним 2016/08/11 22:07:17  №818123 354
>>818122
>У них ведь есть координаты так что массив с буквами избыточен.
Теперь дошло. Вот это мне и нужно было.
Добра
Аноним 2016/08/11 22:56:13  №818148 355
>>817833
>Но у меня помимо программирования другие увлечения
Программистом тебе не стать, максимум говнокодером
Аноним 2016/08/11 23:51:19  №818176 356
14709486794060.png (8, 809x235)
235x809
14709486794071.png (10, 940x294)
294x940
>>818148
Заскринил на память

Как подружить базу с кириллицей? Кодировка базы и таблицы: utf8_general_mysql500_ci
Ошибка только при кириллице, когда всё на латинице - отлично записывает
Аноним 2016/08/12 01:01:46  №818208 357
14709529067230.png (42, 711x1001)
1001x711
>>817577
>>817622
>в etc/hosts добавил все что нужно?
>Добавить новый поддомен в hosts, добавить новый виртуальный хост в конфиг апача.
Действительно, совсем не подумал об этом...
Спасибо, братишки, попробую чуть позже.
Аноним 2016/08/12 10:59:54  №818332 358
Автор, или кто понимает, ответьте, пожалуйста.
> А зачем нам нужен двухмерный массив букв если удобнее просто хранить список животных? У них ведь есть координаты так что массив с буквами избыточен.

А если мне нужно узнать, что находится в клетке с координатами, к примеру, (3, 5), то нужно использовать полный перебор одномерного массива. С двумерным массивом такой необходимости не возникнет.
Аноним 2016/08/12 11:01:40  №818335 359
Аноним 2016/08/12 11:15:35  №818350 360
Задача про ЛЬва Толстого.
http://ideone.com/ERzeV6

Это правильно? Или я уже вступил на путь говнокодера?
Аноним 2016/08/12 11:16:59  №818352 361
>>818350
Нужен цикл, так как много копипасты.
Аноним 2016/08/12 13:43:06  №818435 362
>>818352
http://ideone.com/cbTM6J Доделал.Так лучше?

У опа на картинке замыленной очень много текста в ширь в коде. Я хз кароч.
Аноним 2016/08/12 15:04:35  №818468 363
Первые попытки написать getNumber и getPath для древовидных комментариев в файлообменнике. Оп, посмотри, пожалуйста.

http://ideone.com/x4jpom
Аноним 2016/08/12 15:06:31  №818469 364
14710035914340.jpg (50, 533x517)
517x533
>>818468
Забыл скрин. Вроде добавляется все правильно.
Аноним 2016/08/12 16:36:01  №818520 365
Аноним 2016/08/12 17:17:42  №818551 366
>>818435
$rand1 = array_rand($word1);
$rand2 = array_rand($word2);
$rand3 = array_rand($word3);
$rand4 = array_rand($word4);
$rand5 = array_rand($word5);

$finalWord1 = $word1[$rand1];
$finalWord2 = $word2[$rand2];
$finalWord3 = $word3[$rand3];
$finalWord4 = $word4[$rand4];
$finalWord5 = $word5[$rand5];

Неужели ты копипасты не видишь? Вот это всё в цикл оборачивай. И погугли конкатенацию строк в PHP.
Аноним 2016/08/12 17:19:04  №818552 367
>>818551
А лучше прочитать следующий урок и оформить функцией.
Аноним 2016/08/12 18:12:25  №818584 368
А что с коди? Он сдох?
Аноним 2016/08/12 19:16:18  №818623 369
>>818551
Конкатенация склеит все время. А как сделать тогда рандом нескольких строк? Пробовал массивы в массив воткну
Аноним 2016/08/12 19:45:31  №818634 370
>>818623
Ну подумай, не разжевывать же всё тебе. Почему одним анонам хватает предложения погуглить конкатенацию, а тебе нет?
Аноним 2016/08/12 20:30:45  №818654 371
>>818634
Потому что я уже погуглил.
Аноним 2016/08/12 20:38:23  №818657 372
http://ideone.com/C0U5Lv

Разжуйте мне, если нетрудно, с каких хуёв $this->имяФункции отказывается работать? Перед этим делал в абстрактном классе - хуй там плавал, то же самое
Аноним 2016/08/12 20:43:29  №818662 373
>>818657
Аргумент $rank передать забыл.
Аноним 2016/08/12 20:45:29  №818663 374
Аноним 2016/08/12 20:51:24  №818664 375
>>818663
Почитай про ООП, про магический метод __construct() в частности. А то в глаза ебешься.
Аноним 2016/08/12 20:58:26  №818671 376
>>818664
Это разве не для добавления аргументов в класс? Ну да ладно, у меня вопрос состоит в другом, почему когда я пытаюсь передать значение метода переменной, при вызове метода происходит ошибка? Я неправильно его вызываю?
Аноним 2016/08/12 21:03:55  №818676 377
>>818671
Во-первых, ты сам ответил на свой вопрос, во-вторых, и вызываешь ты неправильно. Метод должен получать аргумент, ты его методу не предоставляешь.
Аноним 2016/08/12 21:10:30  №818683 378
>>818671
И разберись с наследованием, на кой ты переопределяешь метод в дочернем классе? У тебя щас каша в голове, ты не понимаешь что делаешь. Найди какую-нибудь книжку из разряда робина никсона для начинающих, там на пальцах разложено что куда и для чего.
Аноним 2016/08/12 23:24:20  №818754 379
>>818683
У Робина нашего Никсона очень хреново про ООП, не рекомендую.
Аноним 2016/08/12 23:27:18  №818756 380
>>818176
>Заскринил на память
Заскринь ещё кое что себе за щеку
Ты просто не представляешь насколько глубока кроличья нора. Когда я начинал, то мне казалось, что пары книг и стандартного набора PHP-HTML-CSS-JS-MYSQL хватит до пенсии. Но, как выяснилось, это даже не начало. Дай бог 10% от нужных знаний, чтобы быть профессиональным программистом.
Аноним 2016/08/12 23:47:57  №818765 381
>>818754
Ну уж не настолько хреново как у нашего товарища. Тут нужно понять смысл, я вот задачку про студентов так и делал, посмотрел примитив у никсона, понял в чем суть и начал наворачивать на этот скелет то что в своей задаче предлагает ОП.
Аноним 2016/08/12 23:55:11  №818768 382
>>818756
Если человек осознает, что он ничего не знает, значит он уже не дурак. Удачи, бро.
Аноним 2016/08/13 00:17:38  №818773 383
>>818768
Ура, я хотя бы не дурак!

Мимопроходил ваннаби-погромист
Аноним 2016/08/13 00:20:48  №818776 384
14710368486300.jpg (76, 604x604)
604x604
>>818773
Меня только это и утешает на пути к погромизму, кек.
Аноним 2016/08/13 00:23:35  №818778 385
Подскажите пожалуйста, а в пхп все порядке с рекурсивными функциями? Может есть какие-то подводные камни? У меня одна такая хуевина как-то ОЧЕНЬ странно отрабатывает: начинает преобразовывать строку, приводит ее к промежуточному ввиду и зависает, но если на вход подать этот самый промежуточный вид - то функция срабатывает правильно и до конца.
Аноним 2016/08/13 00:33:24  №818780 386
14710376043490.jpg (22, 296x219)
219x296
>>818778
Собственно, на пикче и есть проблема.
Аноним 2016/08/13 00:48:44  №818785 387
А все, разобрался, статик-хуятик надо ставить и проверять на каждом шаге чему там счетчик равен.
Аноним 2016/08/13 01:28:15  №818792 388
Блять, я не понимаю как это работает. Вообще без проблем в уроках опа дошел до регулярок, а регулярки вообще не понимаю и даже посмотрел решенную и понял, что хуй бы когда-то так додумался б сделать.
Аноним 2016/08/13 09:17:48  №818866 389
Slim.
В каждом представлении пишу {{ include('head.html') }}
Вызываю представление так: return $this->view->render($response, 'upload.html', $args);
});
Как правильно сделать так, чтобы файлы шапки и футера инклудились автоматически, без прописывания в каждом шаблоне?
Аноним 2016/08/13 10:58:49  №818881 390
>>818780
Всё в порядке в PHP с рекурсией. Причем здесь рекурсия, там приоритет операторов важен, что ты вообще пытаешься сделать, скинь пример на ideone. Только что засунул (3+(6*2-1)-4) в var_dump и он мне выдал 10.

>>818866
Использовать Twig.

>>818792
Вряд ли ты в сети найдёшь статью, которая так же доступно и просто объясняет регулярки. Мне та статья очень сильна помогла с ними разобраться.
Аноним 2016/08/13 11:14:19  №818886 391
Аноним 2016/08/13 13:05:03  №818923 392
Подскажите по задачи со студентами.

У нас есть два файла в /public: index.php и register.php. Когда пользователь обращается к нашему приложению localhost/path/studentslist/ запускается скрипт index.php, который запрашивает куки пользователя и сверяет хэш, если хэш не задан (или такого нет в базе), то он запускает скрипт register.php?
Register.php тоже, должен определить зарегистрирован пользователь или нет. Можно передать дополнительный параметр в url, или проверять хэш снова?
Каким образом запускается register.php, через require? Или редиректом?
В условиях задачи написано, что после регистрации пользователя, должен быть редирект, опять на "index.php"? А лист студентов (результат посика), просто подгружает шаблон, но адрес остается тот же "...index.php", то есть не перенаправляет пользователя на страницу "...list.php..."?
Аноним 2016/08/13 13:25:17  №818927 393
И еще один вопрос по студентам,
как передать контроллерам, где хранятся файлы классов из директории "../app", с помощью __autoload() или директивой include_path, в файле настроек *.ini? А как подключать файл настроек?
Аноним 2016/08/13 15:00:23  №818978 394
>>818881
Да я уже разобрался с рекурсией. Нужно было просто нормально описать условие окончания рекурсии, то есть для каждой веточки проверяемых условий и не забыть написать return в соответствующих местах.
Аноним 2016/08/13 15:08:50  №818984 395
14710901302090.png (9, 413x199)
199x413
Сап двач, есть задание, довольно легкое само по себе, которое нужно выполнить на Zend, я до этого с ним не был знаком, пошел искать инфу, прочел базовые доки на оф. сайте, в частности, там где про модуль Album и думал что в принципе разобрался, но как только попытался самостоятельно модуль свой написать, Зенд меня послал на хуй, потом я еще просидел в разделе MVC часа 2, мучал мой модуль и так, и эдак, но эта скотина просто отказывается отображать все, кроме домашнего роута(скелет /), я уже и базовый модуль Application попытался полностью скопировать, внеся лишь несколько изменений в названии и эта сука всеравно отказывается работать. Помогите кто чем сможет.
Аноним 2016/08/13 15:37:51  №819011 396
Вышел русский перевод офиц. док. по PostgreSQL: https://postgrespro.ru/docs/postgresql/9.5/index.html

Теперь есть куда посылать задающих элементарные вопросы.

>>818984

Почитай доки, полазай по коду и посмотри как обрабатывается твой запрос.

>>818927

Файл ini для настроек которые будет менять конечный пользователь (который разворачивает твой проект на своем сайте). зачем ему менять названиее папки с классами?

Ее можно просто прописать в коде. Контроллерам передавать это название не требуется, используй автозагрузку классов.

Тебе надо разобраться с автозагрузкой, есть урок на гитхабе https://github.com/codedokode/pasta/blob/master/php/autoload.md

>>818923

> Когда пользователь обращается к нашему приложению localhost/path/studentslist/ запускается скрипт index.php, который запрашивает куки пользователя и сверяет хэш, если хэш не задан (или такого нет в базе), то он запускает скрипт register.php?
Вообще, это не обязательно. Я бы на главной выводил список, а переход на страницу регистрации/редактирования сделал по ссылке.

Чтобы определить, кто просматривает страницу, пользователь ли аноним, надо проверять куки по базе. для этого надо сделать отдельный метод. Удобно все, что связано с авторизацией (логин, разлогин, проверка) сразу вынести в отдельный класс.

> Каким образом запускается register.php, через require? Или редиректом?
Переход на форму авторизациии (при доступе к закрытой странице) и возврат лучше делать редиректами.

> А лист студентов (результат посика), просто подгружает шаблон, но адрес остается тот же "...index.php", то есть не перенаправляет пользователя на страницу "...list.php..."?
В задаче имелось в виду что на index.php как раз и выводится список.

>>818881

А урок ОПа по регуляркам разве не объясняет?

Алсо есть мануал http://php.net/manual/ru/pcre.pattern.php

>>818792

Если не понимаешь, надо перечитать еще раз, поискать другие уроки по теме, попросить у ОПа дополнительные задачи повышенной сложности.

Алсо есть такая статья (очень сложная) https://habrahabr.ru/post/171667/

>>818756

Все сразу знать не требуется.

>>818671

У меня ощущение, что ты учил какой-то другой язык программирования и пытаешься знания из него применить к пхп. Так не пойдет. В разных языках разный синтаксис и разные правила использования конструкций, даже если они одинаковов называются.

Перечитай внимательно учебник. Почитай официальный мануал, раздел про классы и объекты.

$rank это не обычная переменная, а поле и обращаться к ней в методе надо как $this->rank.

> public $salary = getSalary;
Там вообще писать нельзя. Справа при объявлении поля указывается его значение по умолчанию. Что такое getSalary? В данном случае пхп воспринимает это как константу (так как знака доллара или кавычек вокруг нее нет), которая нигде не объявлена, что и вызывает ошибку.

Аноним 2016/08/13 15:51:17  №819025 397
>>818657

При объявлении поля справа можно писать только примитивное значение, например, число, строку или массив. Нельзя писать выражение или использовать $this.

>>818623

заводишь переменную для результата, кладешь в нее пустую строку. В цикле генерируешь случайный слог и приклеиваешь его к той переменной. Постепенно в ней соберется все имя целиком.

>>818520

> abstract class Creep
Нужно давать хороши названия класам и переменным, иначе код тяжело читать

> $salary += $salary * 0.25;
Можно использовать *=

> class Manager extends Creep
> {
> protected $salary = 500;
> protected $thirst = 20;
Тут есть проблема. Не очевидно что при наследовании надо переопределить именно эти поля и нет никакой проверки что они переопределены. Решить обе проблемы мжно использованием абстрактных методов.

> $numberOfCreeps = count($this->listOfCreeps);
> return $numberOfCreeps
лучше сразу return count(...)

> public function fillListOfCreeps($creep){
Здесь нужен тайп-хинт. Они улучшают твой код, делают его понятнее и защищают от ошибок.

> class Procurement extends Department
>{
> protected $name = 'Закупок';
если департаменты отличаются только названием, наверно незачем под каждый заводить новый класс. проще указывать название при создании.

> for($i = 0; $i < 9; $i++){
> $procurement->fillListOfCreeps($me1);
Тут есть небьольшая проблема. Ты читал уроке раздел про копирование объектов? Ты ведь добавляешь в массив 9 ссылок на один и тот же объект. Соответственно при решении второй части задачи, если ты например захочешь кому-то повысить зарплату. ты повысишь ее всем 9 работникам, так как это 9 ссылок на один объект.

заполнение также стоит чуть-чуть автоматизировать. Например сделать массив вида

['3me1', '2en1']

или

[
[3, Manager::class, 1],
[3, Engineer::class, 1],
...
]

и создавать работников в соответствии с закодированным там списком

Также, плохо перемешивать определение функций или классов и обычный код. Лучше сначала определить все классы а потом поставить код создания объектов.

Насчет неправильного расчета- а ты посчитай вручную и сравни. В учебнике цифры по моему взяты с потолка.

Аноним 2016/08/13 15:58:42  №819033 398
>>818468

> ($properties,
А почему тут массив? У тебя же есть класс Comment? Хотя тут хватило бы просто передать fileId отдельной переменной. Не понимаю, зачем тут массив? Это ведь усложняет использование функции так как непонятно что в нем должно быть.

Насчет определения нового номера для комментария: надо проверять только число непосредственных детей, а не всех потомков. Запрос будет намного проще.

Также, такой запрос:

> CHAR_LENGTH (path) = 3";

не будет использовать индексы и будет перебирать все комментарии. Вместо него надо использовать parent_id IS NULL который можно оптимизировать с помощью индекса.


> SELECT CONCAT(path, '.00', :number)
на мой взгляд, операции с путями выгоднее делать в php. Можно сделать функцию, которая получает на вход номер родителя и генерирует номер ребенка.

Плюс, почему ты решил что там будет ровно 2 нуля? А если number = 100?

Также, нужно еще кое-что. В таблицу надо добавить уникальные индексы, запрещающие вставку одинаковых значений (например одинаковых fileId + path).

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


Аноним 2016/08/13 16:11:29  №819039 399
>>818435

В цикле пишется то, что надо сделать несколько раз подряд. Но 4-е и 5-е слово надо сгенерировать только один раз, а не 2 раза, значит они должны быть не в цикле.

>>818335

Вместо 3 репозиториев наверно удобнее было сделать один с 3 папками.

> https://github.com/enotocode/anothercredit/blob/master/index.php#L20
Ты как шаман, который выполняет неведомые ему ритуалы чтобы изгнать злых духов. Надо применять все функции осознанно, понимая, что они делают а не лепить в надежде что они "очистят" строку.

Да и как вообще можно "очистить" строку? Термин какой-то религиозный, а не из области программирования.

Чтобы не было уязвимостей, надо экранировать данные правильным образом и в правильнмо месте, а не лепить все функции подряд.

В твоем случае данные это числа, потому достаточно сделать трим и преобразовать их в число.

Также, ты используешь массив $values, но тут всего 3 переменных и проще наверно хранить их в отдельных переменных.

> foreach($_GET as $key => $value) {
Ты проверяешь и валидируешь все элементы массива GET. Но надо проверять только нужные тебе 3 значения. Другие значения может быть нужны будут где-то в другом месте в будущем и не надо их трогать.

> return "Выплатить кредит невозможно так как ежемесячный прирост <strong>{$monthlyGrowth}</strong> р.
HTML теги должны быть в шаблоне. Функция должна возвращать не человеческий текст, а машинночитаемые значения. Например массив значений.

https://github.com/enotocode/anothercredit/blob/master/template.html#L12
Для ввода чисел есть тип type=number, он же позволяет указать минимальное и макс. значение. Не забудь в этом случае с помощью атрибута title указать подсказку, что можно вводить.

Процент кстати может быть дробный.

> <?php if (isset($result)): ?>
Не очень хорошо, когда переменная может быть, а может не быть. Лучше сделать чтобы она всегда была, просто иногда пустая.

> Экранирование https://github.com/enotocode/screening
Экранирование выводимых данных надо делать в шаблоне, чтобы сразу было видно что оно есть. А у тебя глядя только на шаблон это не понять. В реальных приложениях шаблоны огромные и код тоже объемный и проверить будет невозможно.

Вместо br в HTML принято заключать текстарею и кнопку в отдельные блоки.

https://github.com/enotocode/screening/blob/master/template.html#L19
Знак & надо кодировать особым образом в HTML коде.

Вообще, для этих 5 символов коды надо выучить наизусть: < > & ' "

> Я тебя помню https://github.com/enotocode/anothercredit
Ок, все верно.
Аноним 2016/08/13 16:18:52  №819044 400
>>818332

Да, надо. Тут всегда есть преимущества и недостатки. Например:

- на большом поле 2-мерный массив будет занимать много памяти (10 000 x 10 000 = 100 000 000 ячеек)
- нам надо писать код который будет отслеживать изменение координат животного и обновлять 2-мерный массив. Тут легко сделать ошибку.
- получение списка животных на поле требует полного обхода 2-мерного массива.

Если 2-мерные массивы и используют, то лишь как дополнение для ускоренной проверки на заполненность клетки. В играх также используют и другие оптимизации. Ну например, поле разбивают на "регионы" размером NxN клеток и делают массив таких регионов. Каждый элемент этого массива хранит находящихся рядом животных.

Пока у тебя 10-100 животных и игра состоит из пары десятков ходов, тебе оптимизации не нужны и можно использовать более простой способ хранения.

А без одномерного массива, чтобы предоставить ход всем животным, тебе придется обходить 2-мерный массив большего размера.

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

Аноним 2016/08/13 16:27:10  №819049 401
>>818176

При создании таблицы или базы данных ты указал DEFAULT CHARSET=utf8? Может у тебя база данных для латиницы сделана.

То что ты указал SET NAMES - этим ты задаешь кодировку в которой ведется обмен данными, передача запросов и ответов. Но еще есть кодировка для хранения данных и она указывается при создании таблицы или базы данных.

>>818119

Вывести очень просто: создаем временный 2-мерный массив и заполняем буквами в соответствие с координатами животных.

>>818106

Давай вопросы. У нас целый тред для этого сделан.

>>818074

Да, придется.

>>818065

Если по-простому, то можно делать так:

$whereComment = '';

if (...) {
$whereComment = '....';
}

$sql = "SELECT ... $whereComment ... ";

+ условие для bindValue.

Если проект большой и серьезный, то обычно используют паттерн Query Builder - построитель запросов (читай мой урок по паттернам работы с БД). Там это делается так:

if (...) {
$query->addWhere('commentId = ?', $commentId);
}

Есть готовые библиотеки с Query Builder.

Аноним 2016/08/13 16:31:51  №819051 402
>>818050

Можно сделать shuffle и брать первые 2 элемента перемешанного массива.

>>818023

Да, только вот \W у тебя на мой взгляд слишком "всеядная" и пропускает вообще любые символы. МОжет лучше все же указать конкретные символы.

>>817888

В общем-то это верное решение, но есть пара улучшений:

- тяжело читать сложное выражение в echo - лучше вынести отдельные слова в переменные
- первые 2 строчки генерируются одинаково и можно использовать цикл

>>817887

По аналогии с C#? Или что-то из музыки?

Аноним 2016/08/13 17:13:55  №819083 403
>>817865

> Но если мы не меняем тип, то остальной код тоже не придётся трогать. Не могу понять как инкапсуляция тут помогает.
Допустим у нас есть класс:

class A
{
public $x;
public function setX($x)
{
$this->x = $x;
}
}

Тут как видишь полной инкапсуляции нет. Поле $x не защищено от прямого доступа снаружи. Посторонний код может обращаться к полю $x напрямую, а не через метод setX.

Это приводит к таким проблемам:

- допустим, мы хотим ограничить запись значений в поле, разрешив записывать только числа от 1 до 5. Нам придется искать обращения к полю по всему коду и копипастить туда код проверки. И нет гарантий что завтра где-то не появится новое обращение к полю без проверки.

- допустим мы захотим поменять логику и не хранить значение в классе, а передавать куда-то еще, сохранять в файл или в базу или куда-то еще. Опять же, нам придется обойти весь код, найти там все обращения к полю $x и поменять их на вызов какого-то метода.

В случае же инкапсуляции мы закрываем поле $x и оставляем доступ только к методу. И добавить проверку или поменять логику можно, меняя только один класс и не переделывая весь код. Который может быть очень большим по объему.

Вот представь что ты автор класса, а пользоваться будут им другие люди. Как ты без инкапсуляции гарантируешь, что в поле $x будут числа от 1 до 5, если они видят что поле публичное и могут записать туда любое число?

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

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

Возвращаясь к твоему примеру. мы заключаем код, отвечающий за авторизацию, в класс для того, чтобы весь остальной код ничего не знал про то, как она реализована, а только вызывал нужный ему метод. И чем лучше сделано разделение, тем меньше придется переписывать при смене механизма авторизации.

>>Это верно. Потому что тут ты меняешь тип метода, и соответственно придется менять места его использования. А вот если тип остается прежним, но например, меняется алгоритм хеширования (или исправляется ошибка в нем) - остальной код трогать не придется.
> Но если мы не меняем тип, то остальной код тоже не придётся трогать. Не могу понять как инкапсуляция тут помогает.
Да, придется. А вот если мы смогли реализовать разделение обязанностей так, что при смене механизма авторизации не меняем тип передаваемых данных, то остальной код не придется трогать.

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

> У меня есть похожие методы на этот которые обращаются к полям не через сеттеры. Их тоже следует исправить?
Если они в том же классе, то не обязательно. Так как при каких-то изменениях в сеттерах мы их увидим. Но динамическим доступом к полям, когда имя поля определяется в ходе выполнения кода, лучше не злоупотреблять так как разбирать потом такой код сложнее.

> Тогда я бы предпочел иметь Сервисы (классы отвечающие за внутреннюю логику) и Хелперы (классы содержащие вспомогательные методы) в разных директориях.
Логично так и сделать.

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

> Следует ли её переименовать в связи тем что она теперь может получать не всех студентов?
Можно просто назвать getStudents или FindStudents.

>>$limit = 2147483647
> В мануале по mysql сказано о том что если нужно получить все записи, то нужно указать какое-то большое число
А ты его по памяти написать сможешь когда тебе будут нужны все студенты? лучше сделать условие что если $limit = 0 то конструкция LIMIT не вставляется. Правда, это не даст нам указывать OFFSET без LIMIT, но это почти никогда и не нужно.

> Это действительно так? Бывают ли на практике такие ситуации что нужно получить количество записей большее чем позволяет максимальное значение int?
Если тебе нужны все записи, проще не указывать LIMIT. Это число нужно только если тебе нужны все записи начиная с какой-то что на практике никогда не требуется.

> Для борьбы с sql инъекциями, я решил что удобней будет делать проверку на разрешенные колонки в методе получения запроса, чем в методе выполнения этого запроса. Так ведь тоже можно?
Это неправилньо. Вот я смотрю на код функции getAllStudents() https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L10 и хочу проверить, безопасна ли она.

Я вижу что она подставляет переменную $order прямо в запрос и следовательно она небезопасна. Здесь уязвимость.

Или ты предлаагешь мне изучить весь код приложения, найти все места где вызывается эта функция (таких мест могут быть сотни) и каждое внимательно изучить? И даже если я так сделаю, где гарантия что завтра новичок не вызовет эту функцию без проверки?

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

Сейчас ты все держишь в голове, но это плохой способ. В реальности, если над проектом работает несколько человек то они всего этого знать не будут. И даже если ты работаешь один, ты легко можешь забыть о таких вещах когда каждый день пишешь код по 8 часов в день.

> А почему $allowed[0] возвращает найденное значение?
Так это просто берется первый элемент из массива разрешенных полей. Твой вариант тоже годится.

> Это ведь тоже копипаста, верно? Я только что подумал что это код можно вынести в отдельный методов родителя контроллеров. > Скоро исправлю.
Не стоит наверно. Уже были попытки как-то обобщить код, отвечающий за пагинацию, в других фреймоврках, но они как правило его делают только более запутанным.

> extract($this->getSortQuery());
Вот это плохая идея, так как глядя на код непонятно какие переменные создаются. Где гарантия что эта строчка не перезапишет одну из переменных, которая определена выше? ну например я правлю твой код и хочу добавить переменную, как мне выбрать ее имя чтобы она не конфликтовала с теми, что создаются в этой строчке? А что если завтра кто-то добавит в возвращаемый getSortQuery() массив новое поле и оно по имени будет совпадать с одной из переменных? Получается мы можем сломать контроллер, добавив новое поле в массив совсем в другом месте.

extract это потенциальный источник багов так как непонятно какие переменные она создает.

Также, у тебя в контроллере стоит 4 вызова render. Ты выносишь знание о структуре страницы в контроллер, но удобнее просто подключить один шаблон, а он уже пусть подключает что ему нужно.

> Я помню как ты говорил, что методы можно делать статическими если всегда будут возвращать одно и то же значение и не имеют никаких зависимостей, но в этот метод передается и меняется класс Student. Не является ли это зависимостью?
Нет. Зависимость это объект который нужен всему классу для работы и которая как правило передается при создании объекта. Студент тут это аргумент над которым делаются операции.

> Если мы инкапсулируем методы то не следует нам их сделать закрытыми?
Надо делать все внутренние методы (которые не предназначены для вызова снаружи) закрытыми. Ну то есть в классе для работы с БД у нас есть метод получения данных, есть метод сохранения данных, а всякие внутренние вспомогательные методы надо закрыть.

> Как закрыть эти методы? Если я пытаюсь обратиться к ним в статическом методе через $this, то я получаю ошибку о том что обращаюсь не в контексте объекта.
В статических методах нельзя использовать $this так как они вызываются на классе, а не на конкретном объекте и $this не имеет смысла. Увы, PHP вместо того чтобы запрещать такое, просто берет значение $this из вышележащего вызова метода. Это недоработка в PHP.

Также, у меня есть урок по MVC, если надо: https://github.com/codedokode/pasta/blob/master/arch/mvc.md
Ответы: >>836646 >>836646 >>836646
Аноним 2016/08/13 17:17:59  №819087 404
>>817865

Кстати насчет этого:

$salt = substr(str_shuffle(

Это уменьшает число возможных вариантов и снижает надежность, так как у тебя буквы в хеше не могут повторяться. Лучше выбирать каждую букву случайно, допуская повторы.

Я затрудняюсь посчитать число вариантов, но для выборки N символов из M в комбинаторике есть формула, считающая число размещений: https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5 (сравни формулы для размещений с повторами и без).

Правда, если ты берешь 44 символа, там наверно все равно много вариантов получается. Но не так много как есть брать их с повторениями.

Аноним 2016/08/13 17:19:00  №819088 405
>>819033
> Вместо него надо использовать parent_id IS NULL

Это получается будут методы Adjacency List + Materialized Path? Я думал, раз я использую Materialized Path, то parent_id в базе быть не должно.
Аноним 2016/08/13 17:28:48  №819092 406
>>819051
>- тяжело читать сложное выражение в echo - лучше вынести отдельные слова в переменные
- первые 2 строчки генерируются одинаково и можно использовать цикл

Спасибо за ответ. Буду думать как.
Аноним 2016/08/13 17:29:17  №819094 407
>>817809

Сделано верно, тут к счастью расшифровывать обратно не нужно.

>>817630

На работе учиться будет труднее чем дома так там под это не отведено времени.

>>817619

Скриптом например, если ты умеешь их писать. А вообще, делать страницы методом копипасты плохая идея.

>>817467

Можно если полученное имя будет проверяться по списку разрешенных. Но лучше для каждой формы наверно свой обработчик.

Аноним 2016/08/13 17:31:41  №819097 408
>>819088

Вообще, это поле избыточно, но здорово помогает например если из-за какой-то ошибки пути поломались и надо их перегенерировать. Я бы добавил это поле, так как без него ты замучаешься восстанавливать иерархию. И еще оно помогает использовать индексы, считать детей и тд.

Аноним 2016/08/13 17:33:52  №819100 409
>>819088

Кстати, раз уже ты изучаешь деревья, тебе дополнительное задание: напиши класс для своего дерева, позволяющий

1) проверить валидность (ищет любые ошибки в структуре дерева)
2) исправить ошибки если возможно

Также, маленький скрипт для командной строки который будет вызвать этот класс. Если ты работаешь с деревьями, такая утилита тебе понадобится не раз. В готорвых библиотеках для работы с деревьями обычно есть и средства проверки для них.
Аноним 2016/08/13 18:31:06  №819138 410
Оп, треды сохраняются?
Аноним 2016/08/13 18:38:54  №819151 411
>>819138

Да, к сожалению только ОПом.
Аноним 2016/08/13 18:55:58  №819169 412
В регулярках флаг i действует на букву Ё? Или надо сразу писать Ёё.
Аноним 2016/08/13 19:00:55  №819172 413
>>819169

Действует. Проблема с буквой ё только в том что она идет отдельно от остальных и при указании диапазона надо писать [а-яё]
Аноним 2016/08/13 19:02:20  №819173 414
Аноним 2016/08/13 19:25:34  №819181 415
Аноним 2016/08/13 19:27:08  №819183 416
Как лучше переводить переменную в строку и число? Через (int)$var и (string)$var, или же intval($var) и strval($var)?
Аноним 2016/08/13 19:28:20  №819185 417
>>819151
Ты всегда можешь добавить тред в архивач, если до тебя его никто не добавил.
https://arhivach.org/thread/193343/ - текущий
https://arhivach.org/thread/191923/ - 79-й
Но я постараюсь добавлять теперь все треды.

>>819011
> А урок ОПа по регуляркам разве не объясняет?
Так я ему и говорю, что ничего доступнее, чем этот урок, он вряд ли найдёт. Я после них и написал свою первую регулярку, даже читером себя почувствовал из-за настолько хорошего объяснения: столько людей боятся одного упоминания регулярок, читают заумные мануалы и ничего понять не могут, а мне повезло встретить такую хорошую статью.

>>819044
Думаю, понял, это из-за особенностей игры, если поле большое, а у нас всего 2 кошки и мышки, то незачем держать всё поле, ведь остальные поля ничего не значат. Я делал игру попроще и там нужно было очень часто выполнять операцию получения объекта по координатам, + все элементы массива имели значение и были объектами. Так поле больше 50x50 дико тормозило из-за полного перебора одномерного массива. Помог мне двумерный массив, в нём ведь ведь операция получения по координатам за O(1) выполняется? В общем, точно быстрее, чем O(n).

>>819169
Но это ведь несложно проверить самому?
Аноним 2016/08/13 21:57:58  №819277 418
>>819185

Самому свой тред добавлять в архивач... как-то...
Аноним 2016/08/13 22:45:34  №819320 419
>>819092
ФУ нахуй, решил. И хочется сказать - блядь, и над этим я думал 3 дня нахуй....
http://ideone.com/2B2ZdL
Аноним 2016/08/14 01:03:44  №819395 420
Аноним 2016/08/14 02:27:31  №819414 421
>>819395
у тебя в каждой итерации цикла выводится либо ничего либо слово палидром.
Аноним 2016/08/14 11:09:33  №819500 422
>>819395
Херня, потому что проверка if ($symbol != $symbolBack) внутри проверки if ($symbol == $symbolBack). Второе условие никогда не выполнится, если выполняется первое.
Аноним 2016/08/14 11:53:57  №819510 423
14711648372380.png (14, 713x204)
204x713
>>819049
> При создании таблицы или базы данных ты указал DEFAULT CHARSET=utf8?
Ага, примерно в этом прблема была
Аноним 2016/08/14 12:33:20  №819531 424
>>818881
> В каждом представлении пишу {{ include('head.html') }}
> Использовать Twig

Это ты GENIUS.jpg или такой синтаксис может использоваться еще чем-то помимо Twig?

>>818886
> наследование шаблонов
А вот это решение. Помог, спс
Аноним 2016/08/14 12:56:42  №819548 425
Аноним 2016/08/14 13:10:10  №819558 426
14711694104260.jpg (38, 347x364)
364x347
Аноны, прошу вашего совета и помощи. Дошел вот до "Вектора", прочитал задание и чуток в шоке. Вообще не пойму с чего начать. Реально ли выполнить это задание только используя информацию про ООП из оп-учебника или стоит прочесть доп. литературу вроде того же Зандстры?
Аноним 2016/08/14 13:24:44  №819572 427
14711702843550.png (103, 1280x1024)
1024x1280
Я чувствую костыли. Как нормально сделать?
Аноним 2016/08/14 13:37:56  №819582 428
Аноним 2016/08/14 13:48:35  №819593 429
>>819531
Ну движков много разных, ты же не уточнял какой у тебя. Значит ты используешь Twig, но при этом не читал доку. Магия копипаста.

>>819572
Одной регуляркой. Ты почему-то не используешь квантификаторы {n} и ?
Вместо [0-9] можно писать \d
Вместо того, чтобы 10 раз писать \Wж([0-9]), можно использовать (\Wж([0-9])){10} (ж - это звёздочка, её макаба скушает, если напишу)
[+][8] эквивалентно +8
Аноним 2016/08/14 13:51:05  №819595 430
>>819593
Да блин, максимум не интересная тема же. Неделю прокрастинирую из-за этой хуйни. Завтра точно возьмусь, блять
Аноним 2016/08/14 14:01:03  №819600 431
>>819593
>Вместо того, чтобы 10 раз писать \Wж([0-9]), можно использовать (\Wж([0-9])){10}
Я пытался много раз, все равно не получалось что-то, потом блять заметил что в одном из номеров пробел перед восьмеркой, начал заново все осваивать, в итоге хуй забил и 10 раз написал
Аноним 2016/08/14 15:13:16  №819657 432
>>819593
Одну * макаба не кушает, кстати, только две, делая текст между ними курсивным.
Аноним 2016/08/14 15:14:55  №819658 433
>>819600
>в итоге хуй забил и 10 раз написал
Вон и профессии, будущий говнокодер, за которым разгребай потом сиди!
Аноним 2016/08/14 15:31:19  №819669 434
>>819658
Но я исправлюсь, чесна
Аноним 2016/08/14 17:12:08  №819739 435
Mysql выдает ошибку "column path used in key specification without length" при попытке добавить индекс (запрос create index mpp_index comments(path)) к Materialized Path полю path. Погуглил и так понял, что поля BLOB и TEXT не индексируются. А почему тогда оп пишет в уроке https://github.com/codedokode/pasta/blob/master/db/trees.md :
> При этом способе path хранится в поле вроде TEXT или BINARY, по нему делается индекс.
Аноним 2016/08/14 17:28:40  №819750 436
Поясните за задачку Полиндром.
У нас есть строка, мы сначала делаем все символы маленькими, потом убираем пробелы. Потом делим на два длину строки с приоритетом к меньшему.

Получается 13. То есть нам надо сравнивать символ с таким же, только с конца. То есть приписывать минус к каждому.

Но как делать с нулевым символом? Первый символ это 0, а последний это минус 1.
Аноним 2016/08/14 18:05:56  №819791 437
>>819750
Ты можешь записать последний символ в виде мат. выражения.
Аноним 2016/08/14 18:53:35  №819834 438
Палиндром: http://ideone.com/rjayPX

>>819657
Ну а в том посте как раз 2 звёздочки (ж) на одной строке. Это предложение содержит по звёздочке слева и справа.
Аноним 2016/08/14 19:02:14  №819840 439
Правильно ли я понимаю, что в коде...

if (условие) {
переменная = значение1;
} else {
переменная = значение2;
}

...лучше писать

переменная = значение 2;
if (условие) {
переменная = значение1;
}

чтобы избавить от короткого элса?
Аноним 2016/08/14 19:13:21  №819848 440
>>819840
В таких случаях удобно использовать тернарный оператор:
переменная = (условие) ? значение1 : значение;
Аноним 2016/08/14 19:26:51  №819855 441
>>819848
А если значения - длинные строки?
Аноним 2016/08/14 20:00:31  №819878 442
Анон, я уже часа 2 сижу над задачкой "Палиндром" и оно всё никак не заработает правильно.

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

Посмотрите, что здесь не так http://ideone.com/eG3n0o
Аноним 2016/08/14 20:06:18  №819883 443
Есть ли смысл называть поля в бд в стиле snake_case, когда в модели они представлены как поля класса в стиле camelCase? Это мешает выборке PDO::FETCH_CLASS, приходится доставать массив, а не готовый с объект, и потом уже в своей функции делать из него объект. Но зато правильные стили.
Аноним 2016/08/14 20:12:50  №819887 444
Аноним 2016/08/14 20:21:06  №819893 445
>>819887
1) Ты используешь функцию reverse, это слишком лёгкий путь.
2) Раз уж используешь reverse, то решение может быть гораздо проще: https://jsfiddle.net/ys6ht2ae/
Аноним 2016/08/14 20:34:39  №819903 446
Аноним 2016/08/14 20:41:11  №819909 447
>>819903
Вот это я дебил.
И вправду
Аноним 2016/08/14 20:42:17  №819910 448
Аноним 2016/08/14 20:46:45  №819912 449
Аноним 2016/08/14 21:28:50  №819948 450
>>819912
Решено верно. Можно лучше.
17 строка. Еще один if не нужен, ты же уже проверил равны ли символы.
Еще у тебя в цикле уже есть переменная $i, которая меняется при каждой итерации. Подумай как можно избавиться от строки 21 и переменной $a вообще.


Аноним 2016/08/14 21:39:26  №819956 451
>>819948
Так http://ideone.com/BjD8az ?
Просто я кучу всего менял, в частности эти два случая т.к. не работало. А оказалось, что просто $ пропущенный не заметил. Надо же, невнимательность.
Аноним 2016/08/14 21:48:19  №819964 452
>>818468
>>819033

Переписал методы по твоим советам, посмотри плиз. http://ideone.com/HWQzsC

Уникальные индексы и класс валидности дерева еще не начал писать.

> Также, а корректно ли работает твой код при параллельной вставке комментариев в несколько потоков? Вот один поток выбрал номер нового комментария, затем другой, затем первый вставляет новый комментарий, затем другой пытается вставить комментарий с тем же номером.

Ой, а это это сделать? Несколько потоков. Через несколько вкладок в браузере или еще какой-то стафф нужен. Правильно ли я понял, что поток - это как бы разные пользователи.
Аноним 2016/08/14 21:49:37  №819966 453
14712005780860.jpg (99, 552x946)
946x552
>>819964
Отклеенный скрин. Результат опять же правильный вроде.
Аноним 2016/08/14 21:59:04  №819976 454
А стоит ли упорядочивать в коде аргументы по мере их последующей очередности вызвания в функции?

function foo (bar1, bar2, bar3)
{
action(bar1);
var = bar2 * 3;
bar3 = var;
}

Тоже самое с порядком свойств класса-модели и списком болей в дб. Делать ли определенный порядок атрибутов в HTML (типа вначале type, потом class, потом name)? Или даже более глубокая упорядоченность в виде методов и полей по алфавиту? Или это все слишком перфекционизм и не стоит так загоняться? Наверное в коммерческом коде или официальных библиотеках все по порядку, да?
Аноним 2016/08/14 22:11:08  №819983 455
>>819956
Гут. Все станет лучше с опытом.
Аноним 2016/08/14 22:25:18  №819996 456
В задачке про новый айпад нужно также исходить из 20 месяцев или по другому подходить к циклу?
Аноним 2016/08/14 22:26:29  №819998 457
>>819996
Или время вообще не играет роли в задачке про новый айпад?
Аноним 2016/08/14 22:31:24  №819999 458
>>819558
Тоже прямо сейчас занимаюсь вектором. Думаю стоит перестать охуевать с объема того что на тебя свалилось, перестать думать как сделать все и сразу, и, просто след
уя советам из задачника, прикинуть сколько у тебя будет сущностей. Написать одну из них, посмотреть чем это может тебе помочь дальше
Аноним 2016/08/14 22:55:56  №820009 459
>>819996
Вообще лучше исходить из того, что сумма кредита во время работы цикла больше нуля, а при прекращении работы цикла должна быть равной нулю.
>>819998
Имеет всегда. Если нужно вывести и время, то можно вывести.
Нужно всё так устраивать, чтобы не было мучительно больно за бесцельно прожитые годы лишних переменных либо чтобы можно было каждый показатель вывести в итоге.
Аноним 2016/08/14 23:14:19  №820023 460
Аноны, проверьте, пожалуйста, задачку про новый айпад
http://ideone.com/CqTQJ9
область видимости Аноним 2016/08/15 00:08:46  №820054 461
привет анон, помоги разобраться.
есть класс Core, который подключает файл с тремя функциями, и подключает еще один файл в котором я и хочу использовать эти три функции, но так и не пойму как настроить обращение к ним.
Аноним 2016/08/15 00:16:23  №820058 462
>>819739

Должен быть varchar, а не text, ОП видимо ошибся. Для индекса нужна фиксированная длина записи.

>>819320

Решено верно.

>>819395

> $small = mb_strtolower($text);
> $noSpace = str_replace(" ", "", $small);
Тут не стоит заводить новую переменную, можно класть результат в тот же самый $text, а то у тебя получается 3 переменных для одного и того же.

> $symbolBack = mb_substr($noSpace, -$i, $halfLenght);
В случае если $i == 0 это выберет первый, а не последний символ (дял последнего надо -1)

> if ($symbol == $symbolBack) {
> echo $result;
Это тоже неправильно. Ты успел сравнить только 2 символа и уже делаешь вывод, палиндром это или нет

> if ($symbol != $symbolBack) {
Это вообще не сработает так как находится внутри противоположного по смыслу условия

Аноним 2016/08/15 00:25:50  №820062 463
>>819548

Неправильно же. смотри, там внизу ошибка:

> PHP Notice: Use of undefined constant halfLength - assumed 'halfLength' in /home/h2krbR/prog.php on line 14

Использование необъявленной константы. Ты наверно переменную там хотел поставить?

Также, программа считает любое слово с четным числом букв палиндромом: http://ideone.com/HOy6vl

> for ($i = 0; $i <= halfLength; $i++) {
> $beginningLine = mb_substr($text, $halfLength);
Какой смысл делать N раз одно и то же действие с одним и тем же результатом? Что на первом, что на последнем шаге цикла $beginningLine получается тот же самый.

> if ($beginningLine == $endingLine) {
Их нельзя сравнивать так как они не совпадут.

>>819558

реально, если перечитать внимательно, но Зандстру тоже почитать бы неплохо.

>>819572

Слишком много регулярок. Достаточно 1-2 (для проверки и для упрощения номера).

Для повторов заданное число раз в регулярке есть конструкция вроде {N}.

>>819582

Это надо исправить, обращение к несуществующей еще переменной:

> PHP Notice: Undefined variable: summaHalf1 in /home/QtDbWL/prog.php on line 13
> PHP Notice: Undefined variable: summaHalf2 in /home/QtDbWL/prog.php on line 15

> $summaHalf1 = $summaHalf1.$half1;
У тебя эта переменная хранит копию текста и ее можно получить и без цикла. Ну и достаточно по идее только половину текста проверить, а не весь.

> $explodeText = explode (' ', $mbStrtolower);
> $implodeText = implode ('', $explodeText);
Есть же str_replace и strtr.



Аноним 2016/08/15 00:56:18  №820070 464
>>819750

Да, чтобы получить первый символ, надо указать позицию 0, а для последнего -1. Это особеность функции mb_substr. Аналогично, для второго символа с начала и с конца надо указать 1 или -2.

>>819834

раз уж ты разбил строку на массив символов, ты бы мог перевернуть его с помощью array_reverse и склеить обратно в перевернутую строку. Было бы проще.

А так, решено верно.

>>819840

Это с точки зрения логики может читаться хуже. В первом варианте сразу видно что у нас есть 2 варианта значения, а во втором примере видно что у нас есть одно значение по умолчанию, и другое как альтернатива. Хотя в общем. оба варианта годятся.

Если условие и выражения простые, то проще писать

переменная = условие ? a : b;

>>819855

Тогда if

>>819883

Можно называть поля кемелКейсом

>>819893

"Легкий путь" тоже годится если он верно работает.

>>819887

Для y пропущено var и будет создана или переопределена глобальная переменная. используй строгий режим чтобы такого избежать.

>>819912

> else if (mb_substr($text,$i,1) != mb_substr($text,$a,1)) {
Здесь нужен просто else без условия так как буквы либо совпадают, либо нет, третьего не дано.

$a можно убрать и получать нужную позицию из $i.

>>819964

Да, обычно веб-сервер многопоточный и может параллельно обрабатывать несколько запросов. И это позвовляет задействовать много ядер процессора, не одно.

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

Протестировать можно так: сделать консольный скрипт, который постоянно вставляет новые комментарии в одну и ту же ветку, и запустить несколько копий скрипта в нескольких консолях. затем проверить последовательность номеров. Если поставить уникальный индекс на (fileId, path) то вставка существующего path выдаст исключение.

Решение проблемы - блокировки. Начни например с википедии и прочитай про оптимистичные и пессимистичные блокировки, затем почитай где-нибудь про блокировки в mysql.

Вот у меня был где-то пост, где упоминаются блокировки: https://gist.github.com/codedokode/45f2961e7d68f7a2c501f4f893a45e17

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

>>819966

Скриншот явно неправильный так как видны повторяющиеся значения path.

>>819976

Нет. Порядок аргументов надо определять из того, в каком порядке тебе хотелось бы их передавать при вызове. Необязательные аргументы идут в конце.

> Тоже самое с порядком свойств класса-модели и списком болей в дб.
Я не знаю правил на это счет, обычно id идет первый, а остальные поля как угодно.

> Делать ли определенный порядок атрибутов в HTML (типа вначале type, потом class, потом name)?
Не надо. Это никак не улучшает читабельность.

> Или это все слишком перфекционизм и не стоит так загоняться? Наверное в коммерческом коде или официальных библиотеках все по порядку, да?
Порядок там не имеет никакого значения.

Насчет порядка, есть порядок в котором принято писать элементы класса:

- константы
- публ. поля
- непубличные поля
- конструктор(ы)
- магич. методы
- публичнеы методы
- непубличные
Аноним 2016/08/15 01:03:47  №820074 465
>>819976

Еще насчет аргументов: если в аргументах есть массив или функуия-колбек их обычно ставят в конец при прочих равных, так как массив или функция обычно переносится на несколько строк и писать после них аргументы неудобно.

>>819996

Вообще лучше к другому циклу.

>>819999

ООП тем и хорош что позволяет решать задачу по частям, ты пишешь первый класс и тестируешь, затем второй, затем еще , затем собираешь их вместе и снова проверяешь.

>>820023

Посмотри что внизу страницы:

PHP Notice: Undefined variable: comission in /home/STZ1Ve/prog.php on line 9
PHP Notice: Undefined variable: comission in /home/STZ1Ve/prog.php on line 11
PHP Notice: Undefined variable: paymentTotal in /home/STZ1Ve/prog.php on line 12
PHP Notice: Undefined variable: comission in /home/STZ1Ve/prog.php on line 9


Это надо исправить.

Ответ во втором банке должен быть около 61270. Попробуй также поставить сумму кредита в 4 000 - должно получиться 6123.

> $homoCreditTotal = computeProfitableCredit($homoCreditPercent,$homoCreditComission,$homoCreditFirstPaymentPrice,$payout,$creditSum);
тут в скобках наверно лучше сразу числа писать, а не переменные.

>>820054

Странная логика. Почему бы не подключать файл через require там, где нужны эти функции? А вообще, переходи на ООП с автозагрузкой.

Аноним 2016/08/15 01:25:35  №820081 466
http://ideone.com/yLLvs7
Вектор антикризисный.

public и private расставил, но чувствую, что сделано это все скорее наугад, так и не понял куда protected нужно лепить.

Ну и есть подозрения за 3 антикризисный метод(Уже под полночь его мучил), возможно он хрень какую-то считает
Аноним 2016/08/15 02:54:52  №820103 467
Приснился актовый зал, полный анонов, и я с опом на сцене. Оп пожимает мне руку, хлопает по плечу и говорит, что мой список студентов без MVC на ООП самый лучший список студентов за все существование треда. Аноны аплодируют стоя, у меня сжимается сердце от переполняющихся эмоций. А потом я проснулся и заплакал. На мониторе была задача с айфоном.
Аноним 2016/08/15 02:59:00  №820104 468
>>820103
"А мне приснилось - миром правит любовь,
А мне приснилось - миром правит мечта,
И над этим прекрасно горит звезда,
Я проснулся и понял - беда..."
Аноним 2016/08/15 06:05:21  №820114 469
Аноним 2016/08/15 07:58:58  №820133 470
Где я обосрался?
for ($x=1000; $x < 1000000; $x+$x*10/100 )
{
$y=16;
$y++;
echo "В $y лет у него будет $x денег/n";
}
Аноним 2016/08/15 08:20:23  №820136 471
>>820070
> "Легкий путь" тоже годится если он верно работает.
Ну здесь пару тредов назад вбрасывали видео собеседования на позицию Junior RoR, так там парню сразу сказали reverse не использовать.

> ты бы мог перевернуть его с помощью array_reverse и склеить обратно в перевернутую строку. Было бы проще
Такой подход почти всегда будет выполнять лишнюю работу и выполняться дольше, если слово не палиндром. Допустим, у нас есть очень длинное слово, начинающееся на A, кончающееся на B. Подход с циклом позволит на ранней стадии обнаружить несоответствие, на первой же итерации цикла вернётся false. В то время как подход с array_reverse будет впустую переворачивать длинющий массив. И чем длиннее слово, тем больше бесполезной работы array_reverse будет выполнять.

>>820133
На каждой итерации цикла переменной $y присваивается значение 16. Попробуй присвоить до начала цикла.
Аноним 2016/08/15 08:28:42  №820138 472
>>820133
Ещё у тебя здесь $x+$x*10/100 нет никаких присвоений, то есть $x от итерации к итерации не меняется вообще никак, отсюда бесконечность.
Аноним 2016/08/15 08:30:27  №820140 473
>>820138
Т.е нужно $x= $x+$x*10/100?
Аноним 2016/08/15 08:33:11  №820142 474
>>820140
Попробуй. Я лишь указал на то, почему цикл выполняется не так, как ты хочешь.
Аноним 2016/08/15 09:13:27  №820149 475
Доброе утро, есть пользователь и он может сохранять к своему профилю фотки, как удалять фотки которые он перестал использовать? Есть какой-то общий алгоритм?
Пример: пользователь прикрепил 6 фото, потом поменял 3 на другие, как правильнее удалить старые и нужно ли это делать? Не совсем уверен, что необходимо хранить на сервере файлы о которых нет инфы в БД
Аноним 2016/08/15 09:26:18  №820155 476
>>820136

Насчет эффективности, да, увы, в пхп эффективно работать со строкой посимвольно вообще не получится.

Это отчасти связано с тем что в utf8 символы имеют разную длину в байтах и отчасти с отсутствием строкового итератора.

Вот код mb_substr: https://github.com/php/php-src/blob/master/ext/mbstring/mbstring.c#L2890

mb_substr() имеет сложность O(N), он приходит от начала строки, считая символы пока не дойдет до N-го.

В случае, когда мы берем символы с конца строки, ей приходится пройти почти всю строку.

Потому общая сложность получается O(N^2).

Разбиение на массив символов позволяет снизить сложность до O(N), но ценой выделения большого массива.

Для того, чтобы это работало быстро, нам надо либо:

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

О, кстати, аноны, никто не хочет написать итератор или генератор, двигающийся по строке и выдающий символы по одному? Затем написать микробенчмарк и сравнить на большой строке:

- использование mb_substr
- использование preg_split
- использование вашей реализации

Построить графики вида "зависимость времени от длины входной строки".

Разберетесь в кодировке utf-8, научитесь работать с генераторами или итераторами, оценивать сложность алгоритмов.

Аноним 2016/08/15 09:31:05  №820160 477
>>820149

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

- загружаем новый файл фото
- одной транзакцией или запросом в БД заменяем указатель на новое фото
- удаляем старый файл

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

>>820136

Если попросят, значит надо будет решать другим способом, хотя конечно мне не очень нравится такой подход. Если им не нравится мой алгоритм, пусть назовут свой и я его реализую.

Потому я не люблю такие требования. Лучше задачу так переделать, чтобы совсем просто ее было бы не решить.

Аноним 2016/08/15 09:36:48  №820163 478
Какими функциями сделать это?
На сервере:
1) перенести переменные сессии из файла сессий 1 в файл сессий 2
2) удалить файл сессий 1
3) передать браузеру id второй сессии
Пробовал:
$session = $_SESSION;
session_unset(); // чистим переменные чисто (обычно из файла тоже удаляются)
session_regenerate_id(); //изменяем id сессии (данные из первой сессии копируются в новую
$_SESSION = $session;
но, кажется, не работает....
Аноним 2016/08/15 09:40:07  №820164 479
>>820163

Я не уверен что такое вообще можно делать. Изучи внимательно механизм сессий по мануалу, посмотри какие там функции есть. да и не очень понятно зачем это вообще нужно.
Аноним 2016/08/15 09:40:12  №820165 480
>>820163
в общем, в данном контексте session_unset не выполняет свою функцию. если ее удалить, ничего не изменится. regenerate_id будет создавать новый файл сессии и будет получаться 2 одинаковых...
Аноним 2016/08/15 09:41:06  №820166 481
>>820160
У меня есть таблица "один ко многим" для хранения пользовательских картинок, сперва очищаются все записи связанные с этим юзером, потом записываются новые из переданного массива. Вижу только возможность получить перед удалением данные по фотографиям юзера, и потом удалить те которые вернет array_diff между новыми и старыми.
Аноним 2016/08/15 09:50:21  №820168 482
>>820164
Допустим, пользователь хочет войти на сайт. Для пущей безопасности надо ему новую сессию выдать в куках.
Но у меня же в старой сессии какие-то данные еще лежат! Их надо в новую сессию перекинуть, а из старой удалить, чтоб тот, кто спиздил старую куку сессии не смог их прочитать.

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

Как работают сессии на уровне PHP я не знаю, и знать не хочу.
Аноним 2016/08/15 09:53:00  №820169 483
>>820168
Принудительно очищай сессию каждых n-минут например.
Аноним 2016/08/15 09:55:06  №820170 484
>>820168
session_unset() в паре с regenerate_id() все таки бесполезен. Ладно, хрен с ним. И в правду наверно нельзя такое сделать со стандартным механизмом сессий. Всем спасибо
Аноним 2016/08/15 10:05:50  №820174 485
14712447508960.png (17, 650x417)
417x650
>>820170
Реализую вот так систему юзеров
Аноним 2016/08/15 10:12:58  №820177 486
>>820174
Хрен еще разберешь, как regenerate_id влияет на старые данные сессии. Если делать все в строгом порядке и тестить, то, надеюсь, ничего не случится.
Аноним 2016/08/15 10:47:11  №820190 487
>>820166

Неправильно так как при ошибке у тебя пользователь останется без картинок вообще. Лучше писать код так, чтобы при падении скрипта в любом месте, пользователь бы ничего не терял.

Для этого нужно писать код так, как я написал выше.

Для новых фотографий по той же причине лучше делать новые имена файлов.

>>820168

> Как работают сессии на уровне PHP я не знаю, и знать не хочу.
То есть ты не хочешь читать мануал. Я тоже.

>>820174

зачем вы вообще сессии используете для авторизации? Они же удаляются через 30 минут неактивности. в видеокурсах так советуют?
Аноним 2016/08/15 11:20:59  №820209 488
14712492595670.png (11, 407x271)
271x407
>>820190
А как по другому? Я наперед не знаю точно сколько фото загрузить пользователь, как я могу делать update фото если количество фото вероятно не совпадает с новым переданным количеством.
Пикрелейтед структура таблицы
Аноним 2016/08/15 11:32:35  №820218 489
>>819999
Да, пожалуй начну потихоньку писать. Только остается страх перед тем, что я настрочу какой то объем кода и скомпоновать не смогу толково либо вообще изначально неверно напишу.
Аноним 2016/08/15 11:51:34  №820232 490
>>820190
>зачем вы вообще сессии используете для авторизации?
А что ты предлагаешь? Фреймворки со своими сессиями для моих микропроектов слишком громоздко, php авторизация только в админке.
>Они же удаляются через 30 минут неактивности
Разве это не фиксится конфигами?
>в видеокурсах так советуют
За свою жизнь только 1 раз смотрел видеокурсы по CSS какой-то тупой пизды, которая только показала как нахуячить, а как работает не объяснила, сучка. А в комментах все нахваливают. Инфобизнесмены ебаные
Аноним 2016/08/15 11:57:15  №820239 491
14712514354930.png (94, 1366x768)
768x1366
>class 'html' not found
В Yii2, что это может быть?
Что-то не так с Composerом?

Не подключаются ещё и ассеты, какая же боль...
Вангователи, с чем это может быть связано?
Как же жжёт пониже спины...
Аноним 2016/08/15 12:05:20  №820244 492
В задаче про студентов, какой класс отвечает за сохранение объекта-модели-студента в базу данных - AbiturientDataGateway? В нем должен быть метод, который принимает класс Abiturient в качестве аргумента, и сохраняет его в базу данных? А как осуществляется сохранение, нужен специальный класс для работы с PDO, или в методе сохранения просто используется код вида:
$stmt = $pdo->prepare("insert into students_list ...
?
Спасибо )
Аноним 2016/08/15 12:27:40  №820253 493
Аноны, зацените мой говнокод для задачи про Айфон в кредит.

http://ideone.com/49yINl
Аноним 2016/08/15 13:47:44  №820293 494
>>820239

Регистр букв или неймспейс

>>820244
> В задаче про студентов, какой класс отвечает за сохранение объекта-модели-студента в базу данных - AbiturientDataGateway? В нем должен быть метод, который принимает класс Abiturient в качестве аргумента, и сохраняет его в базу данных?

Да

> А как осуществляется сохранение, нужен специальный класс для работы с PDO, или в методе сохранения просто используется код вида:
> $stmt = $pdo->prepare("insert into students_list ...
Просто используется, отдельный класс не нужен.
Аноним 2016/08/15 14:10:07  №820306 495
>>820155
> никто не хочет написать итератор или генератор, двигающийся по строке и выдающий символы по одному?
Попробовал написать исходя из того, как понял: http://ideone.com/f6jjuw

> использование вашей реализации
Не додумался. Мануал по строковым функциям просмотрел, нашёл разве что mb_split, но это тот же preg_split по сути.

> Разберетесь в кодировке utf-8
Видимо, я неправильно понял задание, так как не понял, где мне здесь знание utf-8 пригодится.

>если есть желание, и ты знаешь ООП или генераторы, можешь попробовать написать итератор или генератор
Ну допустим я понимаю как заимлементить SPL Iterator, но я не понимаю зачем здесь ООП, если функция-генератор уже является итерируемой.
Аноним 2016/08/15 14:29:01  №820322 496
>>820306

Да, ты написал генератор, но этот генератор внутри использует медленный mb_substr или охочий до памяти preg_split. Идея была в том, чтобы написать генератор который читает строку побайтово (за счет substr или за счет $string{$x}). По первому байту utf-8 символа можно определить, сколько в нем байт.

> так как не понял, где мне здесь знание utf-8 пригодится.
Когда будешь определять длину символа в байтах по первому байту.

> Ну допустим я понимаю как заимлементить SPL Iterator, но я не понимаю зачем здесь ООП, если функция-генератор уже является итерируемой.
генераторы не всегда были, плюс итераторы можно как-то комбинировать. Хотя да, генератор пишется проще и короче. Может он медленнее работает?

Аноним 2016/08/15 14:30:39  №820326 497
>>820306

Насчет разных длин строк - лучше брать длины не 1, 50, 100, а например 100, 500, 1000, 5000, 10000, 50 000, 100 000. И потом, построив график зависимости времени от размера строки ты можешь наглядно увидеть сложность алгоритма (для удобства построения графика можно выдавать данные в CSV формате который понимают программы электронных таблиц)

Аноним 2016/08/15 14:36:08  №820335 498
>>820306

Вот тебе пример разбора строки побайтово:

$s = "тест test";
for ($i = 0; $i < strlen($s); $i++) {
$code = ord($s{$i});
printf("%03d 0x%02x\n", $code, $code);
}

Этот цикл можно еще чуть оптимизировать:

- вынести strlen($s) в переменную

К сожалению $s{$i} выделяет память под новую 1-байтную строку каждый раз и хорошо бы получать сразу код этого байта не тратя время на выделение памяти.

Аноним 2016/08/15 14:38:02  №820339 499
>>820322
> написать генератор который читает строку побайтово
Понял.
Аноним 2016/08/15 15:40:30  №820384 500
>>820293
>Регистр букв или неймспейс
Нет, к сожалению...
Вот это у меня в шаблоне:

<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
\frontend\assets\MainAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="en">
<head>
<title><?=$this->title ?> </title>
<meta charset="<?= Yii::$app->charset ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<?= Html::csrfMetaTags() ?>
<?php $this->head() ?>

</head>

И ладно бы с этим, у меня почему-то не подключаются CSS и JS - страница отображается на голом HTML.
Аноним 2016/08/15 15:53:15  №820395 501
14712655952200.png (19, 691x434)
434x691
>>820384
Даже не понимаю, что там может быть не так.
Голова разболелась дико от такой-то несправедливости.
Вот так выглядит исходный код страницы - куда девается информация из MainAsset - непонятно.

Там вот это у меня стоит:

<?
namespace frontend\assets;
use yii\web\AssetBundle;
use yii\web\View;

class MainAsset extends AssetBundle{

public $basePath = '@webroot';
//public $baseUrl = '@web';

public $css = [
'source/style.css',
'source/owl-carousel/owl.carousel.css',
'source/owl-carousel/owl.theme.css',
'source/slitslider/css/style.css',
'source/slitslider/css/custom.css'
];

public $js = [
'source/script.js',
'source/owl-carousel/owl.carousel.js',
'source/slitslider/js/modernizr.custom.79639.js',
'source/slitslider/js/jquery.ba-cond.min.js',
'source/slitslider/js/jquery.slitslider.js',
'source/js/google_analytics_auto.js'
];

public $depends = [
'yii\web\YiiAsset', // yii.js, jquery.js
'yii\bootstrap\BootstrapAsset', // bootstrap.css
'yii\bootstrap\BootstrapPluginAsset' // bootstrap.js
];

public $jsOptions = [
'position' => View::POS_HEAD,
];

}
Аноним 2016/08/15 15:58:28  №820397 502
>>820395
Ну так у тебя короткие теги <? ?> не поддерживаются в PHP.
Аноним 2016/08/15 16:04:18  №820403 503
14712662585790.png (44, 1366x542)
542x1366
>>820397
Спасибо, бро, я ведь так ошибался уже и забыл совсем.
Вот что сейчас выдаёт:
<-----
При этом вроде бы всё прописано правильно (namespace, названия файлов, классов).
Непонятно всё теперь уже с этой стороны.
Аноним 2016/08/15 16:09:50  №820406 504
>>820403
Может всё-таки неправильно неймспейсы указал? Попробуй прописывать неймспейс по частям и смотри на то, что PHPStrom автодополнеяет/не автодополняет.
Аноним 2016/08/15 16:19:10  №820415 505
14712671509720.jpg (135, 1354x695)
695x1354
>>820406
Братишка, дай я тебя расцелую!
Я же просто тормоз...
В шаблоне не работали короткие теги, а в других местах же работают - я так подумал...
Точнее, не подумал совсем.
Спасибо тебе, проблема решена!
Namespace были в порядке, но теги теперь буду ставить только <?php ?>.
Странно, я думал, что в РНР7 всё это должно работать...
Аноним 2016/08/15 16:20:27  №820416 506
Аноним 2016/08/15 16:23:11  №820417 507
>>820416
Спасибо! Уже включаю сейчас.
Аноним 2016/08/15 17:02:50  №820453 508
ААААААААААААААААААААААААААААЙФОН
Как же снять этот остаток? Хоть подскажите в какую сторону гуглить.
Аноним 2016/08/15 17:06:31  №820456 509
>>820453
Может подойдёт % - оператор остатка от деления?
Аноним 2016/08/15 17:37:56  №820485 510
>>820456
Я тупой, не получается.
Аноним 2016/08/15 17:44:40  №820493 511
>>820453
>>820253

Заодно оцените читаемость и оптимальность кода.
Аноним 2016/08/15 18:15:30  №820513 512
>>820493
Не правильно у тебя считает.
Аноним 2016/08/15 18:56:12  №820547 513
Аноним 2016/08/15 19:00:05  №820551 514
Аноним 2016/08/15 20:57:38  №820643 515
Статья под названием "что такое программная инженерия", но больше конечно там всяких исторических подробностей. Довольно занятное чтение: https://m.habrahabr.ru/company/yandex/blog/307384/
Аноним 2016/08/15 22:15:47  №820694 516
>>807538 (OP)
Хочу поделиться историей успеха, анон.
Благодаря треду и урокам, выучил умных слов и стал понимать принципы программирования. Устроился на работу в ДС(образование у меня 9 классов и я из мухосрани) на хорошую должность(не связанную с программированием, больше упор в администрировние), но благодоря тому, что работают вокруг меня люди хоть и с высшем образованием, но ленивые пиздец. Я начал писать замену уже существующим системам которые использовались. Начальству понравилось, внедрили сэкономили миллионы(я не шучу), заменил своими поделками кучу корп систем, написанных крутыми конторами за 100500 тысяч евро. В итоге я стал жаловаться на нагрузку(лол) и мне выделили бюджет на 1го программиста, ну разумеется я стал начальником отдела разработки который сделали под меня. Пока все. Сроку у меня на это ушло год. Всем спасибо анончики, хочу от себя дать совет, по больше задавайте вопросов на спец сайтах которые индексируются и побольше на них отвечайте, так вы помогаете не только себе, но и будущим поколениям.
Аноним 2016/08/15 22:47:51  №820712 517
>>820453
Всё считает правильно, вполне нормальное решение.

>>820493
В цикле должно быть два условия: при одном цикл продолжается и выводит месячную выплату и остаток на тот момент (когда остаток кредита больше месячной выплаты), при другом выводит в последний раз весь остаток (когда остаток становится меньше месячной выплаты).
Непременное и важное условие для работы уже этих условий: перед проверкой, больше или меньше месячной платы этот остаток, он уже должен быть с прибавленными 3-мя процентами и 1000 рублей за обслуживание.
Аноним 2016/08/15 22:55:05  №820716 518
>>820694
Мои поздравления, братишка!
Я сам работаю в издательстве, так могу сказать, что история, аналогичная твоей, и у нас в компании происходила. Правда, не со мной, но так же был рад за умного парнишку (я тогда ещё и не изучал программирование, это было два года назад).
Потому что часто программисты, учившиеся в вузах, прекращают обучение во время работы, садятся на готовые кривые решения, предпочитают поддерживать кривые имеющиеся системы, а не делать качественную свою, учитывающую всю специфику. Вот он не был таким, сейчас вполне себе неплохо себя чувствует, сэкономив компании миллионы и став довольно большим человеком буквально через пару лет после вуза.
Трудолюбие и постоянное развитие в любом случае приносят свои плоды рано или поздно.
Верю в это и живу с этим.
Аноним 2016/08/16 09:31:25  №820849 519
14713290860080.png (13, 758x311)
311x758
>>820694
Малаца, рад за тебя. И спасибо за вдохновение.

Реализую загрузку файлов с сервера. Сейчас у меня так: показать download.html с Location -> location перенаправляет на файл и он открывается в браузере.
Хочу: ф-ия возвращает не проходной и ненужный download.html, а сразу файл, в http Header которого будет прописан 'Content-Disposition':'attachment' И который будет загружаться.

Как это можно реализовать?
Ответы: >>837055
Аноним 2016/08/16 12:18:11  №820937 520
>>817655
Мой ПК не может в стриминг :/
Ну до лучших времен значит.

>>820694
Мои поздравления. Сколько же прогеров вырастил ОП и этот тред ?
Аноним 2016/08/16 12:36:27  №820948 521
Анчоусы. Как вам мой палиндром? http://ideone.com/U6Iu8B

Мне кажется не правильно.
Аноним 2016/08/16 12:55:00  №820958 522
>>820937
>Мои поздравления. Сколько же прогеров вырастил ОП и этот тред ?
Можно провести перепись тех кто устроился программистом
Аноним 2016/08/16 13:45:02  №820984 523
Аноним 2016/08/16 14:09:12  №820994 524
Аноны, реально ли джуном устроиться с моим опытом? Описываю: в тредах с марта прошлого года, первая задачка с кубиками была решена в тоже время, последнюю, файлообменник, сейчас доделываю, но оп ни разу не проверял еще. Проверены опом были студенты и кошки мышки. HTML и CSS задачи решил прошлым летом, но в тред их не кидал и за год про тонкости CSS почти все забыл, ориентируюсь только непосредственно в HTML, так как в задачах повсеместно приходится писать шаблоны. В базах не очень далеко ушел от уровня подзапросов. JS не знаю. Совсем. Недавно доходил до 4 задачи из оп поста и отложил на некоторое время. Из фреймворков знаком со слимом благодаря задачи с файлообменником, из шаблонизаторов - с Twig. Еще более менее разобрался в bootstrap. Планировал сделать файлообменник и в течение месяца два исправлять ошибки подмеченные опом, повсеместно изучая YII2, JS и какую нибудь популярную CMS вроде Битрикс Magneto. Короче по своим оптимистическим прогнозам я хотел пробоваться на работу к концу осени. Но в виду определенных факторов (мамка гонит на работу, лул) приходится решать что-то сейчас. Могу затянуть учебу до октября, потом придется идти каким нибудь бумагомаракой в нашей мухосрани, не знаю, останется ли у меня мотивация изучать программирование после работы. Особой страсти к программированию никогда не испытывал и про его существование узнал на 2 курсе.
Аноним 2016/08/16 14:15:51  №820999 525
>>820994
Без Js будет сложно если на фулстак идти. А так походи по собеседованиям, поищи может за еду возьмут.
Аноним 2016/08/16 14:41:42  №821013 526
>>819083
>Вообще, это относится не только к полям. Всегда лучше ограничивать область где доступно поле, функция, переменная, так как в этом случае проще анализировать код который с ней работает, так как меньше его объем.
А что определяет какую функцию мы должны заинкапсулировать? Ведь можно прямо внутри функции ограничивать пришедшие аргументы.

>- допустим мы захотим поменять логику и не хранить значение в классе, а передавать куда-то еще, сохранять в файл или в базу или куда-то еще. Опять же, нам придется обойти весь код, найти там все обращения к полю $x и поменять их на вызов какого-то метода.
Но ведь и в случае инкапсуляции нам придётся пройтись по всему коду и поменять функцию setX().


>>819083
>> Тогда я бы предпочел иметь Сервисы (классы отвечающие за внутреннюю логику) и Хелперы (классы содержащие вспомогательные методы) в разных директориях.
>Логично так и сделать.
>
>> По хорошему, мне, наверно, следует перенести логику из контролеров в сервисы.
>Смотря какую логику, важно чтобы сервис не был на самом деле переименованным контроллером.
Я бы хотел перенести, например, вот этот код https://github.com/someApprentice/Students/blob/master/app/Controller/LoginAction.php#L48-L51 в $AuthService->login(). Иначе у меня просто не будет Сервисов.


>>819083
>>>$limit = 2147483647
>> В мануале по mysql сказано о том что если нужно получить все записи, то нужно указать какое-то большое число
>А ты его по памяти написать сможешь когда тебе будут нужны все студенты? лучше сделать условие что если $limit = 0 то конструкция LIMIT не вставляется. Правда, это не даст нам указывать OFFSET без LIMIT, но это почти никогда и не нужно.
Можно принимаемые аргументы перенести в конец, и при вызове функции их не указывать.


С П А С И Б О
Ответы: >>834359
Аноним 2016/08/16 15:33:19  №821045 527
>>820984
Нет, там всё верно: 61270 с копейками.
Аноним 2016/08/16 16:13:46  №821071 528
>>820948
Проверьте аэродром плес
Аноним 2016/08/16 16:25:04  №821082 529
Аноны! В задаче с генератором имён мне нужно каждый случайный слог записать в массив, а потом элементы этого массива объединить. Про объединение ещё более-менее понятно, а вот как записывать слог на каждой итерации цикла в массив?
Аноним 2016/08/16 16:36:30  №821097 530
>>821082
Делаешь цикл, рандомишь массив, склеиваешь слоги. Закрываешь массив, выводишь echo.
Аноним 2016/08/16 16:41:30  №821107 531
Аноним 2016/08/16 16:45:06  №821114 532
>>821107
Склеиваешь массив в цикле
Аноним 2016/08/16 16:50:34  №821122 533
>>821114
Вынес склеивание за цикл, все равно ошибка.
Аноним 2016/08/16 16:53:13  №821127 534
Аноним 2016/08/16 16:59:06  №821134 535
>>821082

А ты знаешь, вообще, как добавить в существующий массив еще один элемент? Если нет, перечитай примеры кода в уроке про массивы.
Аноним 2016/08/16 17:04:41  №821143 536
>>821134
Бляяяяяяяяя, ты про $name[]?
Аноним 2016/08/16 17:09:31  №821147 537
Как настроить PhpStorm чтобы работать с проектом к которому у меня доступ есть только через SSH ?
Аноним 2016/08/16 17:29:23  №821160 538
>>821122
implode клеит массив. А тебе нужно склеить текст. Конкатенацию в РНР погугли.
Аноним 2016/08/16 17:33:50  №821161 539
Аноним 2016/08/16 17:38:32  №821165 540
>>821147
File | New Project From Existing Files - My web server is on remote host, files are accessible via FTP/SFTP/FTPS
А вообще нужно сделать локальную копию проекта.
Аноним 2016/08/16 17:42:39  №821168 541
>>821160
Анон, ты охуенен. Лучи добра тебе.
Аноним 2016/08/16 18:02:19  №821180 542
>>820948
Я так старался.

Алсо. Сколько раз можно юзать команду return в функции?
Аноним 2016/08/16 20:01:33  №821213 543
>>821180
http://ideone.com/okP4KS
Попробовал ретурн с конкатенацией.
Почему то нули от прошлого числа залезли на следующее.
Аноним 2016/08/16 20:48:50  №821252 544
Давайте не устраивать тут чат. Вместо большого числа маленьких сообщений лучше написать одно большое.

>>821180

Сколько угодно, но return выходит из функции и код после нее очевидно не будет выполняться.
Аноним 2016/08/16 22:37:16  №821341 545
>>821252
>return
В задаче про айпад что я скинул выше, я склеил переменные в ретурне, нули полезли на другие числа. Массив пробовать юзать?
Аноним 2016/08/16 22:38:52  №821343 546
>>820253
Разжуй пожалуйста по пунктам, как так посчиталось? Я тупенький :С
Аноним 2016/08/16 23:04:06  №821381 547
>>821343
Я же там комментарии оставил.
Ну вот смотри, в цикле for мы находимся с первого месяца до того момента, пока кредитный баланс не достигнет нуля.
Условие в for я не указал. Долго ломал голову, какое условие бы поставить, а потом вспомнил, что оно не обязательно.
Начисление процентов с комиссией и вычет денег я разделил на две разные операции.
В if проверяю, сколько осталось платить. Если меньше, чем доступная нам сумма, то этот остаток суммирую с тем, сколько уже заплатил, а остатку присваиваю ноль. Если зашёл в тело if, то использую break и цикл заканчивает работу и программа тоже.
В else тоже сравниваю сколько осталось платить и сколько у меня есть денег. Из остатка вычитаю доступную сумму, а уже потраченным деньгам эту сумму прибавляю.
Ну и вывожу всю инфу красивенько.
Аноним 2016/08/17 05:58:56  №821485 548
14714027370390.png (42, 997x286)
286x997
>>807538 (OP)
Анон, помоги, пожалуйста.

Допустим, я меняю стиль сайта под себя, чтоб мне было удобнее (с помощью Stylish для Chrome). Я хочу, чтоб какой-то элемент, в данном случае строчку "реклама" не было видно.

По идее надо сделать так:
.left_menu_nav{
visibility: hidden;
}
Но тогда скрывается вся панелька полностью. А как мне тут обратиться именно к элементу Реклама "/ads"?

И Реклама, и Блог, и Разработчикам находятся в одном классе и к ним приписана лишь ссылка. Как обратиться к нужному элементу, чтоб сделать его hidden?
Аноним 2016/08/17 06:16:26  №821486 549
>>821485
>По идее надо сделать так
Таким образом ты всем элементам у которых указан класс .left_menu_nav ставишь visibility hidden. Из-за этого все скрывается.
В идеале конечно было бы задавать элементу свойство по айди, он (айди) в отличии от класса уникален, но так как в твоем случае айди у элемента не указан, придется применить другой способ.
В CSS есть такая вещь - attribute selectors, которая позволяет выбрать определенный элемент используя какую-то информацию о нем. В твоем случае мы знаем что нужно скрыть ссылку, которая ведет на /ads, поэтому сделать можно как-то так:
.left_menu_nav_wrap a[href^="/ads"] {
visibility: hidden;
}
Стиль выше скроет все элементы <a> во всех элементах с классом .left_menu_nav_wrap. Это не идеальное решение, но я думаю тебе подойдет.
Про селекторы почитать можно тут:
https://developer.mozilla.org/en/docs/Web/CSS/Attribute_selectors
http://www.w3schools.com/cssref/sel_attr_end.asp
Аноним 2016/08/17 06:34:24  №821487 550
>>821486
Спасибо огромное! Долго искал ответ, из-за херовых знаний в этой области не знал, как запрос в гугле формулировать.
Аноним 2016/08/17 09:55:03  №821523 551
>>807538 (OP)
привет милый, у меня уже нервные тики начинаются, следую я значит твоим гайдам, пишу код <?php

error_reporting (-1);

$dollards = 200; / количество долларов /
$exchangeRate = 64.90; / курс доллара /
$roubles = 12980; / обменный курс /

echo "$dollars долларов можно обменять на $roubles рублей";
а у меня итог с ошибкой выдается, ну как с ошибкой, ideone говорит что ошибок нет, а конечный результат : stdout copy
долларов можно обменять на 12980 рублей
то есть не пишется что именно 200 ДОЛЛАРОВ! уже дрожь в коленах, сухость на языке, не могу терпеть больше, желание убивать... подскажи, молю.
Аноним 2016/08/17 09:57:50  №821525 552
>>821523
блять, какой же я хуево развитый еблан. не актуально, 200 доллардсов всем итт
Аноним 2016/08/17 12:30:52  №821608 553
14714262531520.png (196, 531x472)
472x531
>>807538 (OP)
Ого, так это ты создал сайт про пхп?
Молодца
Аноним 2016/08/17 13:30:52  №821641 554
>>819083
>>821013
Забыл спросить

>>819083
>Также, у тебя в контроллере стоит 4 вызова render. Ты выносишь знание о структуре страницы в контроллер, но удобнее просто подключить один шаблон, а он уже пусть подключает что ему нужно.
А как это реализовать? Сделать отдельный шаблон в котором будет вызываться render нужных элементов? Для этого нужно будет передавать Viewer который находиться в свойствах контроллера. Я такого не разу не делал, по моему это усложнение.

Или сделать один шаблон который содержит в себе все элементы (т.е. они не вызываются с помощью render, а приписаны в ручную)? Если да, то не будет ли это лишней копипастой?
Ответы: >>834359
Аноним 2016/08/17 13:34:21  №821644 555
>>82138
Спасибо.
Аноним 2016/08/18 04:49:27  №822163 556
>>821608
Ты совсем у мамы даун?
Аноним 2016/08/18 11:03:49  №822249 557
Братюни. Совсем не понимать. Гет запросом отправляю тег, он ищется по базе, где нашелся - то возвращаю джейсоном. И вс вообще идеально, пока тег не русский. Но проблема не в соединении с базой. Я пишу:

$tag='%Колонка редактора%';
...
$stmt = mysqli_prepare($mysqli, "select id,title,author,date,abstruct,icon,tags from res where tags like ? order by -date;");

$stmt->bind_param("s", $tag);

И мне приходит адекватный ответ. НО пишу так
$tag='%'.$_GET['tag'].'%';
И мне приходит пустой массив. При этом, я конечно же пробовал делать echo $tag и внешне он выглядит как надо. Че за херота вообще? Проблема какая-то странная! Запрос выполняется, в переменной то что надо! Что я упустил?
Аноним 2016/08/18 11:56:10  №822285 558
>>822249
Разобрался в чем херня. Ебаная кодировка
Аноним 2016/08/18 16:13:47  №822489 559
Поясните за адаптивную верстку. Если мне сказали адаптивно сверстать, могу ли я использовать бутстрап всегда или бутстрап применяется только когда так сказал заказчик?
Аноним 2016/08/18 16:17:28  №822494 560
>>822489
ну почему нет-то? Это всего лишь набор правил цсс
Аноним 2016/08/18 16:53:59  №822544 561
Можно ли делать константы для контроллеров? К примеру у меня в модели есть свойство downloadLink где будет значение вида "localhost/downloads/fileID". Его надо как-то собрать из переменных. Можно ли использовать константу контроллера ControllerDownload::NAME со значением "downloads" для помощи в этой сборке? Ведь наверное если захочется поменять юрлы, то удобнее будет изменить константу, чем искать по коду значение.

Второй вопрос косвенно касается первого. Вот это свойство downloadLink, как его получить? У меня есть модель File, так вот я там некоторые свойства не храню в классе. но их можно получить. К примеру есть метод getThumnailPath() с кодом ниже:

public getThumnailPath() {
return $this->uploadPath "/" . "thumbnails";
}

Т.е. есть свойство uploadPath, но нет свойства thumbnailPath, т.к. я думаю оно излишне и его можно собрать из других свойств. Можно ли так делать? Или надо получать такие значения через какой нибудь FileHelper.
Аноним 2016/08/18 16:54:59  №822546 562
>>822544
return $this->uploadPath . "/" . "thumbnails"

фикс
Аноним 2016/08/18 17:05:53  №822559 563
>>822544

ControllerDownload::NAMEOFACTION понятнее будет, забыл что это называется action. Может как-то из слима возможно достать? Знаю пока только что аргументы можно получить.
Аноним 2016/08/18 17:08:32  №822564 564
>>822559
NAME_OF_ACTION
фикс. Извините за спам, пишу, потом думаю
Аноним 2016/08/18 17:24:15  №822573 565
Делаете ли в коде вертикальные отступы чтобы разделить логические блоки? Или по желанию.
Аноним 2016/08/18 17:45:22  №822588 566
>>822544

Ты праивльно начала мыслить, но свернул не в ту сторону. То, что нехорошо по коду дублировать код составления URL это верно. Но URL страницы ведь не из одной константы состоит. Вместо вынесения константы надо просто сделать где-то метод, который генерирует этот УРЛ.

> У меня есть модель File, так вот я там некоторые свойства не храню в классе. но их можно получить. К примеру есть метод getThumnailPath() с кодом ниже:
Модель не всегда может получить нужный путь. Ну например чтобы узнать где файл хранится на диске, надо знать путь к папке с файлами, но модель его может не знать. Потому генерацию таких путей возможно стоит вынести во внешний сервис который знает нужные пути.

>>822573

Можно делать. Но возможно твоя проблема просто в том что у тебя весь код написан стеной. а не разбит на функции?

>>822489

Если твой макет внешне похож на типичную бутстрап-страницу (шрифты, формы, кнопки, блоки, меню, оформление ссылок и тд) то его можно использовать. Если не похож - то не понимаю, какой смысл тащить огромную библиотеку из которой ты ничего не используешь и в которой тебе придется переопределять все стили.
Аноним 2016/08/18 17:53:09  №822593 567
>>822544
Что-то непонятно, что ты хочешь. Если у тебя урл вида localhost/downloads/fileID то downloads будет контроллером, у которого будет экшн, который будет обрабатывать скачку файла.
Аноним 2016/08/18 17:54:57  №822598 568
ребят, как в задаче "про клавишу Shift" проверить наличие символов пунктуации и поставить пробелы после них?
я смотрел способ через str_replace, но он не гарантирует, что перед знаками не будет пробелов, а с помощью регулярок не могу придумать, как это описать.
в общем, кто знает, подскажите.
Аноним 2016/08/18 19:56:33  №822706 569
>>822598
/ [,!\\?\\.] /u - шаблон поиска
заменяешь на ". " на "! " и т.д.
Аноним 2016/08/18 19:57:20  №822707 570
>>822706
после пробелов звездочки, ну ты понял сраная макаба
Аноним 2016/08/19 08:42:33  №822945 571
>>822707
нет не понял, скинь скрином.
Аноним 2016/08/19 15:12:14  №823141 572
Где можно бесплатно и без регистрации закинуть html\css разметку и чтобы нам вывелась только наша страница? То есть без логотипов владельца сервиса.
Аноним 2016/08/19 16:56:45  №823225 573
Оцените оптимальность и читаемость моего говнокода.

Ответ на любой вопрос
http://ideone.com/dGLHaC

Генератор имён готовый
http://ideone.com/j0wiZB

В тылу врага - шифровка
http://ideone.com/0ddCh5

1337 - шифровка
http://ideone.com/gMlhjC

На словах ты Лев Толстой
http://ideone.com/CL7D0o

Разбиение строки на символы
http://ideone.com/mtlMmY

Палиндром
http://ideone.com/fGPWl9

Айпад в кредит
http://ideone.com/zsbANa
Аноним 2016/08/19 16:58:53  №823227 574
>>823225
> разбиение строки на символы
Случайно добавил.
Ищу работу и все хуево Аноним 2016/08/19 18:12:34  №823311 575
Привет анончики! Уже третий месяц ищу работу джуном в своем городе, и не только. Все тщетно, иногда даже не отвечают на резюме, присылают ТЗ редко, если выполняю, то не отвечают опять же, собеседования вообще редкость. Понимаю что проблема во мне, но не как не могу ее найти. начал парится с портфолио (вдруг хоть так больше вариков будет) и вот не пойму даже что и нужно в это портфолио писать. есть несколько репозиториев на гитхабе с маленькими проектами и в общем-то все. Учу сейчас вордпресс, читаю книгу, уроки в инетике. Могу натянуть верстку, поставить модули, настроить интернет магаз, написать маленький модуль, но хз что мне выкладывать.
ссылку на сайт, или на тему, которую я натянул, или просто на отрезок моего кода.
Алсо могу поставить сайт на Codeigniter, но что там мне выставлять? собственно верстка же не мое, такчто там только пара классов и строк кода?
вот ссылка на гитхаб. актуальны, только три последних проекта.
https://github.com/DmitryNeposidjaka
Анончик, критикуй сколько хочешь, только ссаными тряпками не гони.
И вообще прошу пояснить как устроится джуном.
Аноним 2016/08/19 19:22:12  №823352 576
>>823311
Все плохо. Решай учебник ОПа.
Аноним 2016/08/19 19:56:10  №823369 577
>>823311
Проекты уж слишком маленькие. Решай учебник ОПа и попробуй устроиться на стажировку куда-нибудь.
Аноним 2016/08/19 21:01:51  №823411 578
>>807538 (OP)
Патцоны, если покупать домен на год, то по мере роста популярности сайта, будет и рости цена домена???????????????
Аноним 2016/08/19 21:03:28  №823414 579
Аноним 2016/08/19 21:05:08  №823415 580
>>823141
Гитхаб, хероку. Правда регистрация таки нужна.
Аноним 2016/08/19 21:55:18  №823448 581
>>823311
>DmitryNeposidjaka
Проблема в этом, инфа сотка.
Аноним 2016/08/19 22:02:59  №823452 582
>>823448
Ты че ебать прикалываешься?
Аноним 2016/08/19 22:30:08  №823462 583
14716350081460.jpg (70, 521x741)
741x521
>>823452
Даж не думал.
Так, чисто поржака.
Аноним 2016/08/20 06:46:23  №823666 584
Оцените БД тестхаба, подскажите слабые места, что лучше бы переделать.
http://sqlfiddle.com/#!15/75a3cd

Сначала не совсем понимал как сделать ответы к вопросом, в итоге решил сделать отдельной таблицой answers. Если тип вопроса - выбрать ответ из списка то все варианты из списка будут в этой таблице. Если тип - ввести текст или номер, в этой таблице будет лежать правильный ответ на вопрос.
Таблица attemts сделана для того чтобы зарегистрированные пользователи не могли бесконечно проходить тест, каждому тесту можно задать максимальное количество раз пересдачи. Тут я не уверен, нужен ли такой функционал вообще? И как быть с незарегистрированными пользователями? Отслеживать по IP не очень хорошая идея потому что IP может быть один, а устройств несколько.

Про индексы знаю, тут они нужны будут в основном для внешних ключей? Для поиска по тестам хочу Sphinx взять, он получше и быстрее обычного поиска через LIKE.
Аноним 2016/08/20 07:20:40  №823668 585
Привет, похапач. Что за хуйня? Где здесь Parse error: syntax error, unexpected 'DOCUMENT_ROOT' (T_STRING), expecting ',' or ')' on line 2:
$root = str_replace('\', '/', $_SERVER['DOCUMENT_ROOT']);

?? '\' - тут типа ошибка. Как фиксить и какого хуя вообще?
Аноним 2016/08/20 07:23:28  №823670 586
>>823668
Разобрался. Вспомнил про экранирование и поставил еще одну кавычку
Аноним 2016/08/20 07:26:44  №823671 587
>>823670
Блять, как я апазорился. Мало того что не то экранирую, так еще и в документ_руте слеши всегда обычные.
Аноним 2016/08/20 14:26:41  №823853 588
14716924015570.png (20, 1230x183)
183x1230
14716924015581.png (5, 398x114)
114x398
Сап, двощ.
Недавно начал осваивать похап, пытаюсь написать простой парсер, но что-то ошибка. Подскажите-ка.
Аноним 2016/08/20 16:55:17  №823943 589
Аноним 2016/08/20 17:23:47  №823962 590
>>823943
За мануал, конечно, спасибо, но функция, которую я использовал, должна уметь открывать ссылки и выводить мне джейсон.
Вот, глянь.
http://php.net/manual/ru/function.file-get-contents.php
Так что я все еще хочу найти ошибку.
Аноним 2016/08/20 22:04:44  №824184 591
Аноны, как изучать js? Читаю learn.javascript.ru и параллельно решаю первые 16 задач из урока опа https://gist.github.com/codedokode/ce30e7a036f18f416ae0. Но как-то тяжеловато ко мне понимание после пыхи такого языка приходит. Это нормально? Дальше проще будет? Может быть еще есть какие-то хорошие ресурсы или книги, желательно на русском.
Аноним 2016/08/20 22:35:50  №824214 592
>>824184
Кантора тебе с головой хватит, у него очень хороший учебник. Ещё плюсы:
- для сложных задач есть тесты, то есть твоё решение проверяется не тобой, а автотестами (ты же можешь что-то не учесть при решении и не заметить). А если твоё решение прошло все автотесты, то ты точно будешь уверен, что поставленная задача решена верно.
- комментаторы частенько предлагают интересные решения или объясняют сложные вещи. Периодически предлагают интересные задачки по теме. Из последних, на которые я натыкался: написать функцию sum, которая используется так:
sum(2)(3)(10); // Ответ 15
sum(1)(0)(22)(7)(30); // Ответ 60
Количество вызовов произвольное. Нужно понимать замыкания и рекурсию.

> решаю первые 16 задач из урока опа https://gist.github.com/codedokode/ce30e7a036f18f416ae0. Но как-то тяжеловато
Мне тоже тяжело даются "простые задачи на JS", 4-ю вообще перечитывал раз 15, настолько туго шло, но небольшими шагами добрался уже до 11-й задачи. Мой совет: решай все задачи Кантора, смотри как задачу решили другие люди, у них можно многому научится.

>>823943
> Я так понимаю, что оно для локальных файлов (4 строка),
Неправда, я же тебе скрин вбрасывал и показывал, что у меня file_get_contents работал для API контакта (если ты тот анон). Просто у тебя, скорее всего, опция allow_url_fopen отключена в PHP.

>>823853
Без urlencode работает.
Аноним 2016/08/20 22:43:56  №824225 593
>>824214
Решать все? Попробую, я наоборот половину пропускал и не очень много времени тратил на решение, если совсем никаких идей - сразу готовое решение открывал. Там некоторые очень сложные бывают.

> смотри как задачу решали другие люди

Комментарии читать т.е.? Это делать до спойлера готового решения или после.
Аноним 2016/08/20 22:54:00  №824235 594
>>824214

Алсо после какой части учебника ты пошел решать задачи опа? Я например быстро полез в задачи опа и на четвертой завис, потому что до apply еще не дошел в учебнике.
Аноним 2016/08/20 23:05:30  №824251 595
>>824225
> Решать все?
Я все решаю и пихаю в автотесты, если есть. Там бывает такое, что на одну статью 9-11 задач, геморно, но толк есть от их решения.

> Там некоторые очень сложные бывают.
У меня немного задротский подход к сложным для меня задачам.
Кантор очень сложные задачи обычно подробно комментирует. То есть если идей у тебя вообще нет, то открывай спойлер, скорее всего там сначала в нескольких словах описан общий алгоритм решения. Если после прочтения алгоритма всё равно не смог решить, то тогда уже смотри его код, что уж там. Но тогда дай себе обещание завтра решить эту задачу, не подглядывая в решение. Бывает только кажется что понял, это неосознанный самообман. Надёжнее перепроверить себя через пару дней.

> Это делать до спойлера готового решения или после.
После того, как сам решил. Ну и так можно оценить преимущества/недостатки твоего кода по сравнению с кодом комментаторов. Вариться только в своём соку тоже не ок.

>>824235
А, я тогда гуглил "calling function with dynamic params js", разбирался в apply позже. Для решения первых 10-и задач хватит этих тем (скопировал с learn.javascript.ru):
Структуры данных
Замыкания, область видимости
Методы объектов и контекст вызова
Аноним 2016/08/20 23:42:49  №824289 596
14717257697460.png (39, 1314x349)
349x1314
14717257697471.png (4, 355x99)
99x355
>>824214
> Без urlencode работает.
Не работает.
Аноним 2016/08/20 23:52:14  №824293 597
14717263345990.jpg (54, 460x604)
604x460
>>824289
Ну так ты читай ошибку: "Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?"
PHP говорит с тобой, объясняя проблему в максимально понятной для человека форме. Попробуй применить технику пикрилейтед - раз всё так плохо.
Аноним 2016/08/21 00:10:59  №824300 598
>>824293
Я к тому, что ошибка не в этом, потому-что ошибка с гет_контент так и осталась.
Убирание урленкода только новую ошибку породило.
Боюсь, что у тебя все не очень, т.к. вместо нормально подсказки ты рандомно тыкнул пальцем в небо и после этого спустился до оскорблений, даже не предположив, что я это уже гуглил и решения из гугла не работают в данном случае.
Аноним 2016/08/21 00:40:35  №824316 599
>>824300
Объясняю, у тебя PHP без поддержки OpenSSL. Тебе нужно просто подключить это расширение. Тебе сам PHP разжевал эту пустяковую проблему, но ты слишком ленив, чтобы самостоятельно разобраться с ней.
Аноним 2016/08/21 00:41:59  №824318 600
>>824300

Сообщение об ошибке абсолютно верное. Для начала открой раздел мануала про врапперы и изучи:

http://php.net/manual/ru/intro.stream.php
http://php.net/manual/ru/wrappers.php
http://php.net/manual/ru/function.file-get-contents.php

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

http://php.net/manual/ru/filesystem.configuration.php#ini.allow-url-fopen

Затем проверь через phpinfo() например, в каком состоянии у тебя разные настройки, какие врапперы доступны.

Ну и использовать file_get_contents для работы с АПИ не очень удобно. Если ты хочешь делать все серьезно, то лучше исплоьзовать библиотеку-http клиент вроде guzzle.
Аноним 2016/08/21 00:43:28  №824320 601
Аноним 2016/08/21 01:11:13  №824334 602
>>824318
Вот этот нормально объяснил, спасибо.
По поводу фреймворка, мне хотелось бы сначала основы освоить.
Какие бы функции "из коробки" ты бы посоветовал для работы с апи вообще и в данной ситуации?
>>824316
А ты иди нахуй, хуйло хамовитое.
Аноним 2016/08/21 01:30:36  №824347 603
>>824334

Guzzle это не фреймворк. Клиент АПИ удобно реализовывать в виде класса, так что тебе пригодилось бы хорошее понимание ООП.

Он кстати скорее всего правильную причину назвал.
Аноним 2016/08/21 10:46:39  №824462 604
Привет, по студентам, как быть с полом и пропиской?

В форме можно сделать выпадающий список или радио батан, value опций может быть как строкой "GENDER_MALE/GENDER_FEMALE", так и "0/1". А как хранить в студенте, и как преобразовать строку в константу?
Объявлять константу через define (GENDER_MALE, $gender), где $gender это значение "1/0" переданное формой, которое мы преобразовываем в число. То есть в классе только одна константа GENDER_MALE, значение которой = 1/0 (true/false)?
А как это хранить в базе? С помощью типа enum('1','0')?
Нужно ли валидировать значение полученное из формы с помощью выпадающего списка или радио батана?
Аноним 2016/08/21 15:16:49  №824555 605
>>824347
> Он кстати скорее всего правильную причину назвал.
Конечно же нет, я раскомментировал строку с опенссл еще во время установки, почему решил не тратить время на общение с ретардом.
> затем почитай про эту настройку
Только что проверил allow_url_fopen, она тоже включена. Еще идеи есть?
Аноним 2016/08/21 16:01:38  №824577 606
>>824462
Опять же, если хранить пол как $gender = GENDER_MALE, где значение константы 1|0, зачем вообще константа, если можно хранить $gender = 1?
Аноним 2016/08/21 17:04:18  №824606 607
14717882588370.png (30, 626x579)
579x626
Как сократить код для inserta на пикриле? Я пробовал передавать объект аргументом $STH->execute((array)$abiturient);, но такой код выдает ошибку sqlstate[hy093], возможно потому, что свойства класса приватные?
Нагуглил способ - использовать функцию-хелпер для сборки запроса. Так можно делать http://phpfaq.ru/pdo#insert ?
Почему в мануале нет упоминания о том, что в PDOStatement::execute() аргументом можно передать объект?
Аноним 2016/08/21 17:22:27  №824620 608
Slim. У меня в каждом $app->get пишется строка $args['project_folder']=$this->settings['project_folder'];
Можно как-то сократить код, написав "этот код исполнять в любом $app->get"?

Если что, код: http://ideone.com/4txkUQ
Аноним 2016/08/21 17:25:38  №824621 609
>>824620
Для такого обычно ООП используют. Сделай общий класс контроллера, потом все нужные контроллеры унаследуй от него.
Аноним 2016/08/21 18:22:14  №824651 610
>>824555

Смотреть настройки надо не в php.ini, а в выводе phpinfo(). Там же надо смотреть список доступных врапперов.

>>824462

В чем разница между селектом и радиокнопками? Селект занимает меньше места, но за это приходится платить большим временем доступа и тем, что опции не видны сразу. С другой стороны, селект позволяет искать элемент по первой букве.

В случае с полом, у нас всего 2 опции, так что экономить место не нужно и подойдет селект.

Хранить в БД лучше в виду енума с значениям вроде male/female, в PHP сделать константы для них.

> Объявлять константу через define (GENDER_MALE, $gender)

Это вообще неправильно. Константа она на то и константа что всегда имеет одинаковое значение.

> С помощью типа enum('1','0')?
В значениях энумов нельзя использовать числа. Точнее можно, но большая вероятность что mysql примет их за порядковый номер элемента. См. мануал.

>>824606

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

>Почему в мануале нет упоминания о том, что в PDOStatement::execute() аргументом можно передать объект

наверно потому что это плохая идея. Кто-то добавит в класс лишнее поле и твой execute сломается из-за того что передано лишнее значение.

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

>>824620

Там по моему можно в начале кода (не в обработчике роута) просто олин раз во view передать нужную переменную напрямую.

>>824621

Переусложнение.
Аноним 2016/08/21 21:24:13  №824716 611
Ребята, на сеньора помидора какие требы?
Аноним 2016/08/21 21:25:53  №824717 612
>>824716
Открой список вакансий в своем городе и почитай.
Аноним 2016/08/21 21:35:49  №824722 613
>>824716

Опыт, самостоятельность, умение руководить.
Аноним 2016/08/22 02:41:17  №824820 614
Сап. Как работать с json? Никак не могу найти годных гайдов. Надо всё это загрузить, посмотреть, изменить и сохранить. Но как сделать этап изменить - для меня непонятно. И гугл выдаёт какое-то говно 2006 года.
Аноним 2016/08/22 03:29:45  №824828 615
>>823311
>Мало контрибьюшнов
>1 каммит
>1 аплоад за год, и тот в июле
>4 проекта уровня лабораторная работа или "мне бяло нечего делать, я тут ковырялся в коде и случайно закамитил"
>Камиты которые не описывают сути камита
>код без коментариев
>функции из 1 строки (зачем писать функцию из 3 строк обьявления и 1 строки действия когда просто действие будет быстрее?)
>Именование подпапок и каталогов 1 2 3 - нет смысла
>footer.php "<?php" - подключаемый файл содержит это.
Няша, я не хочу тебя оскорбить, но теперь быстро и уверенно иди читать как работать с гитхабом и что зачем надо камитить, и что надо в камиты писать. Это для начала.
https://github.com/never3ver/studentslist Аноним 2016/08/22 05:12:06  №824851 616
>>816231
>>812156

> https://github.com/never3ver/students_list/blob/master/students_students.sql

По cookie стоит сделать уникальнй индекс чтобы показать что они не повторяются.

> https://github.com/never3ver/students_list/blob/master/app/StudentsDataGateway.php#L12

Такие длинные строки стоит переносить.

> https://github.com/never3ver/students_list/blob/master/app/StudentsDataGateway.php#L67

Если слово для поиска не задано, то лучше бы и не добавлять в запрос условие LIKE.

> https://github.com/never3ver/students_list/blob/master/public/index.php#L35

Тут лучше бы инклудить только один файл, а уже футер подключать из него.

> https://github.com/never3ver/students_list/blob/master/templates/index.html#L4
> <?php if (!isset($_COOKIE['name'])):

View не должен лезть в куки. И вообще, определять залогинен ли пользователь, должен класс отвечающий за авторизацию.

При пагинации сортировка теряется? Так не должно быть.

> https://github.com/never3ver/students_list/blob/master/templates/pagination.html#L15
тут условия в пагинации выглядят избыточными. Мне кажется, хватило бы только проверки, является ли $i текущей страницей или нет.

У тебя много шаблонов, стоило бы те их них, которые отвечают за мелкие кусочки (вроде пагинации) вынести в подпапку.

> require_once __DIR__ . '/../templates/header.html'
не очень понятно, зачем тут '../templates' если эту часть можно убрать.

> https://github.com/never3ver/students_list/blob/master/app/Helper.php#L6
> public static function highlightText($word, $text) {

Если слово не указано, то эта функция возвращает текст без экранирования, возможна XSS.

> preg_replace("/$word/ui",
Это тоже неправильно. ты подставляешь текст от пользовтеля как регулярку, но что если он содержит специсмволы? Например знак вопроса. Как минимум может быть ошибка из-за неверного синтаксиса в регулярке. Надо использовать preg_quote чтобы заэкранировать специсмволы, чтобы любые символы воспринимались регуляркой как обычные.

> https://github.com/never3ver/students_list/blob/master/templates/header.html

тут не помешал бы тег meta charset с кодировкой. В поле поиска хорошо бы выводить введенное ранее в него значение.

https://github.com/never3ver/students_list/blob/master/templates/registerButton.html
тут лучше использовать не форму, а ссылку, которая стилизована в виде кнопки. В бутстрапе это есть.

> https://github.com/never3ver/students_list/blob/master/public/styles.css#L17
> .cell {

Тут не надо было заводить класс, можно было просто написать .table > tr > td {} или .table td {}

> https://github.com/never3ver/students_list/blob/master/app/StudentValidator.php#L14
написано что имя может содержать апострофы и дефисы, но в регулярке их нет. В регулярке нет привязки к краям строки потому вместо имени можно вписывать что угодно, лишь бы там была одна буква.

Выражение для проверки email кривое. Оно например не пропустит многогуровневый домен вроде [email protected] или [email protected]университет.рф

Статьи по теме: https://www.google.ru/search?q=habr+%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8+email+%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BA%D0%BE%D0%B9&newwindow=1&gbv=1&sei=-Fm6V4LdD4KsswGhl6HQAg

> if ($this->gateway->isEmailUnique($email) || $email == $oldEmail) {

при редактировании надо искать уникальный email везде, кроме самого студента. Это удобно делать, отсеивая записи по id.

Число баллов по ЕГЭ по моему в сумме для 3 предметов может доходить до 300.

> $errors = FALSE;
> $errors['name'] = "Имя может...

Как-то странно смотрится добавление элемента не в массив, а в false.

https://github.com/never3ver/students_list/blob/master/app/Authorization.php
Странно, что этот класс может ставить куку name, но читает ее файл regedit.php. Логично работу с этой кукой инкапсулировать в этом классе, а не в нескольких разных местах кода.

https://github.com/never3ver/students_list/blob/master/public/regedit.php#L11
> if (isset($_COOKIE['name'])) {

Вот это мне кажется должно быть в классе авторизации.

> header("Refresh: 0; url = index.php");
Что за странные костыли? Прочитай про HTTP код ответа 3xx и заголовок Location.

После редиректа не надо выводить форму.

https://github.com/never3ver/students_list/blob/master/templates/editForm.html#L40
для поля с типом email не надо указывать регулярку - оно само умеет проверять.

https://github.com/never3ver/students_list/blob/master/templates/editForm.html#L49
Для поля с типом number указывается не регулярка, а min/max/step

https://github.com/never3ver/students_list/blob/master/templates/editForm.html#L68
> <?= ((!property_exists($student, "local")

Это странный код, как в классе может отсутстовать поле?

https://github.com/never3ver/students_list/blob/master/app/init.php#L3
Конфиг логично подключать без once.

Не помешало бы добавить в репозиторий краткий README с описанием, что это за проект и как его установить.

Центрирование данных в полях ввода по моему выглядит ужасно, поля слишком маленькие.

Не надо использовать для верстки формы таблицу, в бутстрапе есть стили для такой формы.

При клике по словам "мужской"/"женский" должна выбираться соответствующая опция. Гугли label.

После регистрации надо бы выводить над списком уведомление "Вы успешно зарегистрированы.", после обновления профиля "Данные успешно обновлены".

После регистрации и захода в редактирование у меня не отображается фамилия, год и номер группы. В базе запись есть, просто оно теряется при выборке из БД и записи данных в объект. Выясни, почему. Ну и конечно стоило более тщательно тестировать свое приложение, чтобы такие явные баги не допускать.

Вместо огромной кнопки "редактировать" лучше наверно поставить ссылку.

Из положительных моментов могу отметить лаконичность, довольно небольшой по объему код получился.
Аноним 2016/08/22 06:54:55  №824856 617
>>824651
>Также вместо ручного указания каждого геттера сделать массив и в цикле получать значения каждого поля.

Реализовав интерфейс ArrayAccess в классе Abiturient? Или массив названий свойств, превращая их в вызов метода getPropertyName()?
Аноним 2016/08/22 09:03:24  №824872 618
>>824828
> функции из 1 строки (зачем писать функцию из 3 строк обьявления и 1 строки действия когда просто действие будет быстрее?)
Затем, что название функции более читабельно. Это на практике часто используется, оцени читабельность:
$className = camelize($className);

function camelize($str) {
return preg_replace_callback('/-(.)/', function ($match) { return strtoupper($match[1]); }, $str)
}

против
$className = preg_replace_callback('/-(.)/', function ($match) { return strtoupper($match[1]); }, $str);

Первый код читается проще, так как не нужно разбираться во внутренностях camelize(), и так понятно, что слово преобразуется в camel case. Во втором случае не понятно, нужно разбираться в preg_replace_callback.
Да и банально, может у него там код повторяется в нескольких местах? Логично вынести такой код в функцию в таком случае.
Аноним 2016/08/22 17:19:08  №825133 619
>>824856

Можно сделать просто массив вида поле в БД -> сеттер, можно как-то еще.
Аноним 2016/08/22 18:17:28  №825171 620
Вечер, мамкины верстальщики.
Есть обыкновенная HTML форма, в нее заполняется некая информация и затем она отправляется POST'ом на эту же страницу (index.php), где ее обрабатывает скрипт PHP (пишет в файл и все такое). Проблема в том, что если вернуться назад кнопкой "назад", все поля остаются заполненными и ее можно отправить снова. Хоть бесконечно надрачивать Enter и Backspace отправляю по 300к форм в секунду. Пробовал делать перезагрузку страницы после обработки формы, пробовал рандомный id ей присваивать (бесполезно, ведь загружается из кэша старая страница со старым id), пробовал гуглить - нихуя. Какие есть мысли? Встречал на других сайтах, в основном, банках, ошибку "страница просрочена" при попытке вернутся назад после отправки формы, т. е. ошибку, не позволяющую вернуться на предыдущую страницу вообще. Гуглил, но ничего не нашел. Прошу помощи, господа.
перепостил сюда, а то в вашем сральнике на объективную критику не обижаются не разберешься
Аноним 2016/08/22 20:36:04  №825267 621
PDO адепт здесь? Интересно твое мнение по поводу статьи http://phpfaq.ru/pdo , где автор продвигает свою(?) библиотеку http://phpfaq.ru/safemysql по работе с MySQL. Сразу уточняю: я понимаю, что PDO можно использовать для различных БД, ограничимся конкретно ситуацией PDO MySQL vs SafeMySQL. Имхо у автора немного завышенное ЧСВ, хотя может он просто олдовый бородатый гуру.
Аноним 2016/08/22 20:42:33  №825276 622
>>825171
Тоже столкнулся с такой проблемой, для себя решил с помощью импровизированной невидимой "капчи" с использованием $_SESSION.
Ответы: >>825618
Аноним 2016/08/22 20:44:51  №825277 623
>>825276
Ты же понимаешь что это не до конца решает проблему? Твой способ можно легко обойти, если каждый раз получать новую сессию.
Аноним 2016/08/22 20:57:20  №825308 624
>>825277
Лол тогда можно сказать и "Ты же понимаешь, что любой способ можно легко обойти если заставить бота 300к раз в секунду заполнять одно и тоже в поля и сабмитить форму". То, что ты ищешь, скорее всего не имеет отношения к PHP.
Аноним 2016/08/22 21:33:33  №825356 625
>>824851
Спасибо.
>После регистрации и захода в редактирование у меня не отображается фамилия, год и номер группы.
Вот это очень странно, у меня все норм.
Аноним 2016/08/23 01:17:33  №825456 626
>>825356

Попробуй создать новую пустую базу данных, загрузить в нее дамп с гитхаба, и переключить конфиг на эту базу. Затем протестируй.

Если не увидишь бага на новой созданной базе - я напишу в чем причина.

У тебя просто скорее всего либо база создана не из дампа и отличается, либо код отличается от того что на гитхабе.
Аноним 2016/08/23 02:45:27  №825489 627
Сап. Решил обмазаться шаблонизаторами для реализации своего небольшого блогодвижка. Выбрал твиг. Запилил фронт, все было охуенно и удобно, но когда дело дошло до бэка — я охуел. Каким образом в шаблоны твига можно инклюдидь пхп код?

{% include "file.php" %} и банальное <?php?> отказываются работать. В интернетах пишут, что для реализации какой-нибудь даже самой банальной функции придется пилить свое расширение для твига. Но я ни за что не поверю, что все так сложно. Т
Аноним 2016/08/23 02:47:35  №825492 628
>>825489

А зачем тебе php код в шаблоне? Шаблоны как раз придуманы чтобы там никакой особой логики не было.
Аноним 2016/08/23 02:48:59  №825493 629
>>825492
эм... А как сайты пилить тогда?
Аноним 2016/08/23 02:52:43  №825494 630
>>825493
Почитай про архитектуру MVC. Основная суть которой заключается в разделении приложения на три части - M - Модель, V - Представление (View) и C - Контроллер. Так вот в твоем случае Twig у тебя представление, он отвечает только за вывод того что ему передали на экран.
Аноним 2016/08/23 02:54:54  №825496 631
>>825494
>он отвечает только за вывод того что ему передали на экран.
Теперь ты понял вопрос? Как передать ему то, что он будет выводить на экран?
Аноним 2016/08/23 02:55:26  №825497 632
>>825494
Ох, окей. Я-то думал шаблонизировать через твиг можно спокойно и без соблюдения модели мвц. Добра тебе, буду курить мануалы по MVC

Аноним 2016/08/23 02:58:49  №825499 633
>>825496
При вызове template->render() передавай массив который будет соответствовать переменным в шаблоне.
В документации это более подробно описано с примерами
http://twig.sensiolabs.org/doc/api.html#basics
Аноним 2016/08/23 03:00:15  №825500 634
>>825499
>template->render() передавай массив который будет соответствовать переменным в шаблоне.
Но ведь это убирает всё веселье из программирования.
Аноним 2016/08/23 03:00:54  №825502 635
Аноним 2016/08/23 03:02:14  №825503 636
>>824872
Чот ты вообще либо наркоман, либо ты не понял что я написал.
Аноним 2016/08/23 03:04:48  №825505 637
>>825500
>>825497
Логику приложения ты должен реализовать где-то в другом месте, цель у твига - рендерить то что ему передали. Можно это делать и без соблюдения MVC, просто реализовать логику в одном файле, и в конце вызывать рендер шаблона, но обычно такой код будет плохим и его сложно поддерживать, через 2 месяца ты и сам не поймешь как оно там работает.
Аноним 2016/08/23 03:07:14  №825506 638
>>825505
Если что - мы с ним разные аноны. Спасибо.
Аноним 2016/08/23 06:48:22  №825529 639
По студентам, сортировка выдачи списка студентов. Сортировка производится всей базы и выдается 20 записей соответствующих данной странице, или сортируется только 20 записей на текущей странице?
Аноним 2016/08/23 06:53:55  №825530 640
>>825529
Конечно нужно сортировать только текущий результат. Как ты себе представляешь полную сортировку всей базы, если там например миллион записей?
Аноним 2016/08/23 07:00:43  №825532 641
>>825530
>Как ты себе представляешь полную сортировку всей базы, если там например миллион записей?
Пузырьком ))
Аноним 2016/08/23 07:48:52  №825535 642
>>825456
Все, нашел причину. Я переименовывал имена полей в базе и забыл заново сдампить, моя невнимательность, залил актуальный дамп.
Аноним 2016/08/23 07:53:46  №825536 643
>>825530
Наверное существует способ и для сортировки миллиона записей. Я вообще мало, что представляю, как всегда гуглил бы пока не нашел способ. И в данной задаче записей не миллион.
Аноним 2016/08/23 10:26:07  №825581 644
>>825576 (OP)
>>825576 (OP)
>>825576 (OP)
ПЕРЕКАТ

Итак, 500 сообщений набрали, перекатились, нас уже на видно ньюфагам, и те, вместо поиска (который кстати не ищет 3 букву PHP) создают новые треды.
Перекатывайся в старый, уютненький, ламповый тред. Я там приготовил оп пост и оп пасты. Всё для твоего комфорта, няша.

>>825576 (OP)
>>825576 (OP)
>>825576 (OP)
Аноним 2016/08/23 11:38:20  №825616 645
>>825276
И как это работает? При возврате на предыдущую страницу ты видишь чистую форму? Или заполненную, но которую просто не примет сервер при попытке отправить? Если второе, то хуйня собачья, я тоже так могу, а хочется красивое решение.
Аноним 2016/08/23 12:59:49  №825645 646
14719463899930.png (71, 1214x647)
647x1214
Приветствую, не могу понять почему сортировка срабатывает только в верхнем варианте кода, когда вначале собираю строку, а потом подставляю ее в выражение prepare. Причем в нижнем варианте, при отправке запроса не появляется ошибка, просто не выполняется сортировка. Много ли еще таких подводных камней? Где можно прочитать сразу про все?
Аноним 2016/08/23 13:07:47  №825649 647
>>825529

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

При нажатии на сортировку текущий номер страниц сбрасывается и мы оказываемся на первой. Но если мы пользуемся пагинацией то сортировка и введенное поисковое слово сохраняются.

>>825532

Индексы либо какой-то алгоритм сортировки который испоьзует mysql

>>825581

Посидим еще пару (-другую) дней и перекатимся. Пока мало ответов на посты.

Так спасибо конечно. Правда ты нумерацию нечаянно сломал, 80-й тред был этот. Так как предыдущий 79. Придется этот называть 79.5.

Аноним 2016/08/23 16:37:05  №825797 648
>>819051
> По аналогии с C#? Или что-то из музыки?
По аналогии с C# + system F.
Аноним 2016/08/23 17:38:33  №825858 649
>>825649
>Правда ты нумерацию нечаянно сломал, 80-й тред был этот. Так как предыдущий 79. Придется этот называть 79.5.
На самом деле очень долго думал как нумеровать, 80 или 81, но у этого заголовок было вообще без нумерации, и перекатили его без копипаст, назвал 80 тредом. Дальше буду знать.

Кто подскажет по PDO?

Аноним 2016/08/23 17:39:06  №825859 650
Аноним 2016/08/23 17:42:13  №825860 651
14719633332640.jpg (20, 643x237)
237x643
Укажите дураку почему код не выполняется?
Аноним 2016/08/23 17:43:51  №825862 652
Аноним 2016/08/23 17:51:08  №825866 653
>>825862
Ты только что решил 10 часов моих страданий. Одно из полей БД НЕ ИМЕЛО ЗНАЧЕНИЯ ПО ДЕФОЛТУ! Из-за этого он отказывался работать.
Зачем? Зачем они это сделали? Я ведь даже не упоминал это поле в запросе. Ну что за бред...
Аноним 2016/08/23 17:58:38  №825868 654
>>825862
Спасибо тебе анон. Ты лучший!
Аноним 2016/08/23 17:59:44  №825869 655
>>825859
глупые американцы не могут в названия нот
Аноним 2016/08/23 20:53:42  №826009 656
>>825616
Сейчас поднял тот скрипт - в двух браузерах при нажатии на "Назад" форма чистая. Причем в коде только PHP и HTML.
Аноним 2016/08/24 00:46:37  №826117 657
>>825866

Если у поля стоит NOT NULL и нет значения по умолчанию то это значит что оно обязательно для заполнения. Это наоборот хорошо, позволяет защититься от ошибки, что ты забыл заполнить это поле.

>>825869

У европейцев ноты тоже вроде буквами обозначаются.

>>825171
>>825276

После обработки POST-формы надо делать редирект. Таким образом, если пользователь случайно нажмет "обновить страницу", форма не переотправится.

От намеренной переотправки надо защищаться на сервере, например введя счетчик частоты отправки формы, сравнивая значения в форме с предыдущими итд.

Сессия бесполезная вещь так как злонамеренный пользователь удалит сессионную куку.

Аноним 2016/08/24 02:24:50  №826136 658
14719946908030.jpg (46, 916x193)
193x916
>>826117
>Если у поля стоит NOT NULL и нет значения по умолчанию то это значит что оно обязательно для заполнения.
Чтоб 10 раз не спорить. Алсо Mysql, Mysqli - туда всё добавляют без проблем.
Аноним 2016/08/24 03:49:08  №826145 659
>>826136

По такому скриншоту трудно что-то однозначно понять. Что значит пустая ячейка в поле значение по умолчанию? Лучше сделать SHOW CREATE TABLE x .
Аноним 2016/08/24 04:05:42  №826149 660
>>826145
Это значит что параметр по умолчанию не задан. Ну просто он там не нужен, ест такие параметры, которые если есть - запиши, если нет - пусть будет пустое поле. 10 лет с БД работаю, никогда и нигде проблем небыло. А тут види-те ли укажи что по дефолту, а то не буду работать.

Ещё подводный камень кстати. Date формат. работал работал, а потом резко решил не принимать формат даты 0000.00.00 00.00, Собственно и пофигу, перенастроил бы и дальше бы работал. Вот только этот формат был заполнен как дефолтный! И работал в БД до того как я PDO подключил. Вот уж загадка загадок что там у PDO и Mysql произошло.
Аноним 2016/08/24 04:07:52  №826151 661
>>826149
Самофикс, формат даты другой немного, но если хотите подробностей - на скриншоте видно какой на самом деле. Уж простите, не помню всех этих нулей.
Аноним 2016/08/24 09:29:40  №826200 662
Аноним 2016/08/24 13:39:37  №826340 663
По студентам, как быть с алгоритмом отслеживания текущего адреса пользователя? У меня получается конструкция из внешнего if($IsUserAutorizated) и внутренних if($_GET['page']), if($_GET['search']) и тд. Это нормально?
Аноним 2016/08/24 14:29:59  №826385 664
14720381995490.png (22, 870x520)
520x870
>>826340
По студентам и авторизации, я подумал еще, и вложенность if увеличилась, когда подгружаем список студентов, нужно еще отслеживать сортировку. А еще получается, что нужно проверять авторизацию пользователя в обоих контроллерах index.php и register.php. И каждый раз, как обновляется страница, например при сортировке. Значить дублируется код, и + запрос в базу каждое обновление страницы.

Нужно ли действительно проверять авторизацию пользователя в каждом контроллере?
Как избавиться от запроса в базу при каждый раз при обновлении страницы?
Как обойти трехуровневую вложенность if?
Аноним 2016/08/24 14:40:19  №826399 665
Глупый вопрос.
После отправки заголовка браузеру, скрипт php перестаёт работать. Все переменные затираются. Правильно? То-есть отправка заголовка header ("location..") скрипт как-бы перезагружается? Сохранить(кэшировать) значения переменных можно только в куки пользователя?
Аноним 2016/08/25 02:24:16  №826834 666
Аноним 2016/08/25 02:33:47  №826835 667
Аноним 2016/08/25 11:26:50  №826978 668
14721136106430.gif (259, 500x300)
300x500
Аноним 2016/08/26 18:15:34  №827954 669
Как с помощью Xdebug посмотреть значение переменной во время выполнения скрипта в браузере?
Аноним 2016/08/26 18:35:11  №827971 670
>>827954
Поставить аддон к браузеру. Xdebug helper для хрома например. Ну и нужно понимать как работать с xdebug.
Аноним 2016/08/26 20:47:12  №828134 671
14722336332250.jpg (40, 600x431)
431x600
14722336332261.png (3, 424x98)
98x424
14722336332262.png (8, 1309x105)
105x1309
Ньюфаг в треде, если кто меня и мой говнопарсер помнит.
Пока временно забил на проблемы с опенссл(или не опен ссл).
Смог вывести жсон с апи в форме массива, только массив какой-то странный и я не ебу как с ним работать.
На команды для обычных массивов он реагирует.
Что я делаю не так? Может мне вообще не нужен массив тут и надо зайти с другой стороны?
Аноним 2016/08/26 23:41:47  №828363 672
>>828134

<?php
$url = "http://api.fixer.io/latest";
$urlContent = file_get_contents($url);
$jsonDecoded = json_decode($urlContent, true);
// header for showing content as text in browser
header("Content-Type: text/plain");

echo "Rates for {$jsonDecoded['base']} on {$jsonDecoded['date']}: \n";
foreach ($jsonDecoded['rates'] as $money => $rate) {
echo "$money - $rate\n";
}
html Аноним 2016/08/27 04:06:22  №828482 673
>>815064
>https://jsfiddle.net/9ygm244j/
>Перечитай про боксовую модель: https://developer.mozilla.org/ru/docs/Web/CSS/box_model или http://htmlbook.ru/samlayout/blochnaya-verstka/blochnaya-model
>
>Ты забыл что width задает не внешнюю ширину, а внутреннюю.
Исправил: https://jsfiddle.net/9ygm244j/1/

>>815064
>https://jsfiddle.net/211Le60v/5/
>
>> .container {
>> padding: 10px;
>> font-size: 0px;
>> display:table;
>не понял, зачем это? Зачм таблица без table-row или table-cell? Также не понял, зачем ты таблице ставишь паддинг, который есть только у ее ячеек. Это какой-то хак для решения проблемы пробелов? Стоило тогда добавить комментарий, а то совсем неочевидно. Ну и конечно изучи и другие методы борьбы.
>
>А так, верно.
Добавил комментарий в месте хака проблемы с пробелами: https://jsfiddle.net/211Le60v/6/

>Ну и конечно изучи и другие методы борьбы.
Да, я изучил их все. Например, здесь https://jsfiddle.net/5g31m30j/2/ для борьбы с проблемой пробелов, я убрал переносы на новую строку между элементами.


>>815064
>https://jsfiddle.net/L5orb28e/3/
>
>А вот тут многовато ошибок:
>
>- li { margin: 5px 0px; } меняет стиль всех элементов списков, а на странице могут быть и другие списки. Надо ставить стили точечно, чтобы это применялось только к меню. То же относится к ul, nav
>- ты жестко прописал размеры body. Это не годится. Верстка должна растягиваться под ширину страницы.
>- font-family: 'Trebuchet MS'; - надо указывать в конце списка один из встроенных шрифтов (вроде sans-serif)
>- h1 должен быть не жирным
>- article { width: 230px; } - статья должна занимать всю оставшуюся ширину, а не 230px
>- nav:after {} - он тут не нужен. Он применяется к не-float элементам, которые содержат внутри float элементы. А у тебя nav и так float и ему clearfix не нужен.
Все сломалось: https://jsfiddle.net/L5orb28e/6/ . Такое поведение перестает происходить если контенту задать ширину равной ширине страницы минус занимаемая ширина колонки меню: https://jsfiddle.net/L5orb28e/7/ . Однако, если продолжать сжимать окно, контент рано или поздно съедит вниз. Почему так происходит?


>.navigation-menu-li
>.navigation-menu-ul > li
Ведь можно использовать оба из этих варианта?

>>815064
>https://jsfiddle.net/5g31m30j/1/
>
>Высота кнопки и поля ввода не совпадают. Ты учел что кнопки и поля ввода по умолчанию имеют разный box-sizing, для одного задается внутреняя высота, для другого - внешняя. надо либо менять box-sizing либо пересчитывать высоту с учетом этого. Читай подсказки (хотя бы после того как решил).
>
>Ну и на практике стили вроде input {...} будут конфликтовать с другими инпутами на странице - лучше применять стили более точечно.
Исправил: https://jsfiddle.net/5g31m30j/2/

>>815064
>>https://jsfiddle.net/tsuh4gjw/4/
>> А можно подсказку как сделать чтобы примечание не растягивала контейнер в котором оно содержится? У меня пока получилось только так https://jsfiddle.net/tsuh4gjw/4/
>float не растягивает родительский контейнер (а также position: absolute) так как вырывается из потока.
Я не правильно выразился, я не могу понять как сделать чтобы примечание было всегда на уровне второго абзаца.


>>815064
>https://jsfiddle.net/kxdx27f1/2/
>
>- Текст не должен затекать под желтый блок слева.
>- div {} - будет применяться ко всем дивам на странице, плохо, сломает верстку. Верстать надо так, чтобы твою верстку можно было вставить на любую страницу и не было никаких конфликтов.
Исправил: https://jsfiddle.net/kxdx27f1/3/


https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-10
https://jsfiddle.net/a70nha0k/ (Если блок с картинкой не отображается, значит картинки нет на сервере)
А как сделать чтобы числа в квадратных скобках выравнивались слева от абзаца? Мне удалось выровнить их с помощь абсолютного позиционирования, но подозреваю что этот вариант не правильный, потому что размер контентной части элемента может быть любым.

>обрати внимание, размер картинки должен определяться так: если картинка большая — она ужимается до ширины окна (с учетом полей конечно), маленькая — выводится как есть.
Большая картинка должна ужиматься именно до ширины окна, а не до ширины блока в котором она содержиться? Учитывая что по условию задачи размер тела максимально может быть 500 пикселей. Даже если представить что за место тела может быть любой блочный элемент, это довольно странно задавать дочернему элементу ширину большую чем ширину родительскому. Или это такой подвох в задании?

>z-index: 1;
Не уверен что это свойство нужно, т.к. элемент которому мы задаем это свойство всегда будет находиться ниже по коду другого абсолютно позиционированного элемента em:before.


>>815064
>https://jsfiddle.net/fp8o0exq/4/
>
>- между кнопками должна быть линия в 1px а не 2 пикселя
>- кнопки высоковаты
>- body { font-size: 0px; display: table; } - это не позволяет вставить твой блок на произвольную страницу. мы ведь не будем там сбрасывать шрифт на body.
>- "inputbox left" - это неудобно, подписывать каждый блок. И что если у нас не 3, а больше кнопок? переписывать CSS? Нужно более универсальное решение. Есть же :first-child например. Погугли "css псевдоклассы"
>- для анимации наверно лучше бы подошло более простое правило transition - изучи его. Или нет?
Исправил: https://jsfiddle.net/fp8o0exq/5/
html someApprentice 2016/08/27 04:06:57  №828483 674
>>815065
>> Как на глаз определить тень и шрифт?
>Для начала, надо попробовать определить радиус тени (на котором она плавно переходит в прозрачность). Если присмотреться, то видно что на картинке тень несимметричная: она большая сверху, маленькая снизу и равная по сторонам. Значит, тень смещена вниз, а справа или слева ее ширина. По ней мы подбираем радиус (будет примерно пикселя 3 я думаю). подобрав радиус, подбираем прозрачность черного, чтобы с краев тень совпадала по прозрачности с картинкой.
>
>Ну и напоследок подбираем вертикальное смещение тени, просто на глаз двигая тень вниз.
>
>Если ты не понимаешь некоторые термины, то изучи какие есть параметры у теней. Заметь что для внутренних (inset) теней одним параметром меньше.
>
>Шрифт -какой-то из стандартных. Погугли какие распространенные шрифты есть, по моему тут Arial.
Я зря потратил ваше время спросив об этом - у меня слишком мало опыта чтобы определять такие вещи на взгляд. Извините.
В боевых задачах мне тоже может прийтись определять стили на глаз или всё можно будет посмотреть в .psd шаблоне?

>Также, как насчет клавиатурной навигации?
Теперь она работает.

>> Я пока не знаю javascript, можно я доделаю это позже? Можно пока подсказку как сделать чтобы в старых браузерах просто выводился набор чекбоксов?
>Гм... тут надо использовать в селекторе CSS правила которые не понимают старые браузеры (напрмер какие-то псевдоклассы из CSS3). То есть условно говоря, если старый браузер не понимает n-th-child() то мы можем записать так:
>
>.inputbox { правила для старых браузеров }
>.inputbox:n-th-child(...) { переопределяем правило для новых }
Поскольку я, зачастую, использую обращение через дочерние селекторы E > F, мне не приходиться переопределять правила. Единственное исключение это фикс пробелов в родительском контейнере, который я переопределил с помощью .buttons[class="buttons"]. Казалось бы, селектор не имеет смысла, а оказывается, что это с помощью этого хинта можно переопределять правила для новых браузеров.

Посмотреть как выводиться набор чекбоксов в IE6 остальные браузеры не нашел в сервисе можно здесь: https://www.browserstack.com/screenshots/9ed0ab72d90b74731e1e322918d35072313553d9

>> А можно еще подсказку как и это сделать?
>Скрыть чекбокс можно и не через display: none, а например: через visibility: hidden, через overflow:hidden c задвижением за край видимой области, через абс. поз. за край видимой области (left: -10000px) - но тут есть свои недостатки. Ты кстати должен знать эти варианты.
Через visibility: hidden и overflow: hidden почему-то не получилось.
https://jsfiddle.net/gpysbfar/
https://jsfiddle.net/gpysbfar/1/
Можно подсказку что я упустил?


>>815065
>Хорошо бы хотя бы от id в CSS избавиться
>Есть еще такая проблема: активная вкладка при наведении мыши становится серой - мне кажется это неправильно.
Исправил: https://jsfiddle.net/tb7k9dw9/4/
Посмотреть как выводиться в IE6: https://www.browserstack.com/screenshots/9f6a23a7d2634a0cc4b1be7a668f024aae54af68

>Кстати есть еще такая интересная статья по вкладкам: http://chikuyonok.ru/2009/04/dl-tabs/
Но там же делается решение через JS - если пользователь отключит его, то всё сломается.
В любом случае, я взял на вооружение этот метод, потому что наверняка в боевых задачах будет требоваться чтобы это через JS было сделанно, хоть мне и не нравиться такой подход.

>> #first-tab:checked + .tab-label[for="first-tab"] + #second-tab + .tab-label[for="second-tab"] + #third-tab + .tab-label[for="third-tab"] + #fourth-tab + .tab-label[for="fourth-tab"]
>В новых браузерах есть селектор ~. Нагугли и прочитай про все новые псевдоклассы и селекторы из CSS3. В старых браузерах он правда не работает, для них можно наверно просто вкладки вертикально вывести как блоки.
Я пробовал использовать такой селектор, но в нашем случае такой вариант не подходит по следующим причинам:
1. Если заключить инпутбокс в лейбел, то через него не получиться обращаться к следующим инпутбоксам https://jsfiddle.net/khxu17s0/
2. Если придерживаться метода где мы связываем инпутбокс и лейбел через for, то через этот селектор становиться трудно обратиться к контентному боксу, т.к. первый инпутбокс может оказаться родственным и для остальных контентных блоков https://jsfiddle.net/khxu17s0/1/

>>>сверстай блок так, чтобы блок с вкладками можно было вложить в страницу блока вкладок
>> Нужно чтобы можно было скопировать вкладки в контентную страницу? Может лучше чтобы в контентной странице был свой элемент со вкладками? Так для это следует задать ему собственные атрибуты и стили. Зачем делать по два раза одно и тоже? Я что-то недопонял?
>
>да, чтобы внутри мог быть свой блок с вкладками и он не конфликтовал с родительским.
Я не понял в чем подвох этой задачи - я просто добавил тот же самый табер только с новыми стилями.

><taber>
А можно создавать свои элементы?

Почему плохо использовать id?

Почему нужно поддерживать старые браузеры?
Аноним 2016/08/27 04:45:08  №828493 675
Аноним 2016/08/27 05:55:39  №828506 676
>>828482

Задача про vertical align
В задаче на vertical align ( https://jsfiddle.net/211Le60v/6/ ) у крайнего левого желтого блока слева отступ от края больше 10 px Мне сразу бросилось в глаза. Надо исправить.

Задача про сайт ООО
> Все сломалось
Тебе надо научиться делать многоколоночные лейауты на флоатах. Если ты что-то забыл, перечитай учебник на softwaremaniac, а также можешь поискать примеры готовых лейаутов на флоатах.

А также есть статья http://chikuyonok.ru/2010/01/liquid-site-markup/

Суть там довольно проста. Левую колонку с меню мы загоняем влево с помощью float left. Правую колонку - вправо с помощью float:right. Но как задать ей ширину "вся страница минус 230px"? Никак, потому задаем ей 100%, а внутрь ставим блок с отступом 230px слева, а уже в него кладем текст. Но при таком подходе она пересекается по шиине с левой колонкой и проваливается вниз под нее. Для решения этой проблемы делаем ее внешнюю ширину меньше за счет отрицательного левого маргина. Например, -100%, в результате чего она начинает занимать 0px места и никому не мешает.

> Однако, если продолжать сжимать окно, контент рано или поздно съедит вниз. Почему так происходит?
Потому что флоаты проваливаются вниз, если на текущей высоте для них мало места и оно занято другими флоатами. Для решения этой проблемы часто используется втягивание границы внутрь с помощью отрицательного маргина. Изучи, как положительные и отрицательные маргины ведут себя на флоатах с разных сторон.


> .main-content {
> min-width: 230px;
> float: right;

Ты не разобрался в том, как работают флоаты, а ставишь свойства наугад. Так не получится. Надо именно разобраться.

В твоем случае ширина флоата не задана и потому определяется из содержимого и ширины родителя. Так как текста много, то флоат растягивается по ширине на 100%, и так как перед ним идет блок с меню, который занял часть ширины, он проваливается под него.

min-width тут вообще непонятно зачем так как 230px это ширина левой колонки, а не правой.

Попробуй добавить флоатам фоновые цвета чтобы видеть их границы и размеры.

>>.navigation-menu-li
>>.navigation-menu-ul > li
> Ведь можно использовать оба из этих варианта?

Второй лучше тем что не требует ставить класс на каждый li, а только один раз на ul.

Задача про инпут и кнопку
> Исправил: https://jsfiddle.net/5g31m30j/2/

В моем хромиуме кнопка на 2px ниже по высоте. Потому что у инпута есть паддинг 1px и border 2px, а у кнопки только border 2px. Тебе надо явно задавать паддинг и величину бордера либо же использовать другой box-sizing который их включает в себя.

Задача про Короля Лир
> Я не правильно выразился, я не могу понять как сделать чтобы примечание было всегда на уровне второго абзаца.

Там надо использовать флоат для выноса примечания влево. Тогда он автоматически будет на нужной высоте (подогнать точнее можно еще играя с line-height и margin-top).

Задача про верстку форума

> .post > p {
> margin-left: 72px;
Что если кроме абзацев <p> в тексте справа будут еще заголовки, таблицы, списки, цитаты, изображения? Надо чтобы все работало.

Задача про текст и кота
> А как сделать чтобы числа в квадратных скобках выравнивались слева от абзаца?
Ну тут нам нужно вырвать текст из общего потока. Значит, всего 2 варианта: либо абс. поз, либо флоат. У каждого есть преимущества и недостатки. Ну например с абс. поз., если 2 выноски будут на одной высоте то они наложатся друг на друга.

> А как сделать чтобы числа в квадратных скобках выравнивались слева от абзаца?
> потому что размер контентной части элемента может быть любым.
А это не важно, так как ширина поля слева фиксированна и мы можем привязаться к ней. Мы можем просто создать блок фиксированной шириной с поле и внутри него уже делать выравнивание. Или же в случае абс. поз. мы можем исплоьзовать привязку не к левому (left) а к правому краю (right: 100%) + margin-right который загонит примечание в нужное место.

Вот этот трюк - использование right:100% + margin-right - стоит освоить.

Я советую тебе сделать оба варианта, и через абс. поз. и через флоат, и сравнить.

Также у тебя я там опять вижу p { position: relative} - ты забываешь что текст может содержать не только абзацы. И зуже того, ты этот стиль вообще ко всем p на странице применяешь и можешь что-то сломать если к твоей верстке добавить другие элементы.

> Большая картинка должна ужиматься именно до ширины окна, а не до ширины блока в котором она содержиться?
До ширины блока в котором содержится. На поля она залезать не должна.

> Учитывая что по условию задачи размер тела максимально может быть 500
Это там только для примера поставлено. При проверке я убираю фиксированную ширину и проверяю на разной ширине окна.

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

>>z-index: 1;
> Не уверен что это свойство нужно, т.к. элемент которому мы задаем это свойство всегда будет находиться ниже по коду другого абсолютно позиционированного элемента

ну если не нужно и все работает - можно не ставить.

Задача про радиокнопки

> Исправил: https://jsfiddle.net/fp8o0exq/5/
Теперь клавиатурная навигация работает, но есть проблема - непонятно есть ли фокус на кнопках или нет. Когда ты двигаешься по обычной не стилизованной форме с помощью tab (проверь), текущий элемент выделяется. Но твои кнопки никак не выделяются когда на них попадает фокус нажатием tab.

Аноним 2016/08/27 06:20:25  №828510 677
>>828483

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

> В боевых задачах мне тоже может прийтись определять стили на глаз или всё можно будет посмотреть в .psd шаблоне?
можно, но в фотошопе свои параметры теней и все равно немного придется подбирать на глаз. Потому стоит практиковаться.

>>Также, как насчет клавиатурной навигации?
> Теперь она работает.
А фокус не показывается.

> который я переопределил с помощью .buttons[class="buttons"]. Казалось бы, селектор не имеет смысла, а оказывается, что это с помощью этого хинта можно переопределять правила для новых браузеров.
Можно просто .buttons[class]

> остальные браузеры не нашел в сервисе
Странно. У меня на этой странице https://www.browserstack.com/screenshots выводится огромный список с разными названиями браузеров. При нажатии на название или номер версии он выделяется.

Правда эта зараза теперь регистрацию требует.

Сгенерировал для примера: https://www.browserstack.com/screenshots/a0522e08ed4dfb1d70c4e2664da8b367522debf9

> Через visibility: hidden и overflow: hidden почему-то не получилось.
Странно, по ссылке с visibility радиокнопки не видны.

> left: -10000;
10000 чего? Единица измерения не указана. Проверил бы код css валидатором - сразу бы увидел ошибку.

Задача про вкладки

> >Кстати есть еще такая интересная статья по вкладкам: http://chikuyonok.ru/2009/04/dl-tabs/
> Но там же делается решение через JS
Там JS только для переключения вкладок, так как в то время css3 плохо поддерживался. Можно наверно и без него. Обратить внимание надо не на то как вкладки показываются, а на оригинальный способ чередования вкладок и заголовков.

> 2. Если придерживаться метода где мы связываем инпутбокс и лейбел через for, то через этот селектор становиться трудно обратиться к контентному боксу, т.к. первый инпутбокс может оказаться родственным и для остальных контентных блоков https://jsfiddle.net/khxu17s0/1/
Ну так ты можешь связать заголовок и тело вкладки классом или data-атрибутом и учитывать его в CSS правиле. То есть:

<input data-tab="tab1">....<div data-tab="tab1">...

>Я не понял в чем подвох этой задачи - я просто добавил тот же самый табер только с новыми стилями.
Если у тебя неаккуратно написаны стили то может быть какой-то стиль с внешего блока повлияет на внутренний. Потому важно писать css правила так, чтобы они влияли только на нужные элементы.

> А можно создавать свои элементы?
Стандарт ничего не говорит, по факту создавать можно, но это плохая идея. Так как у обычных элементов есть определения, что они значат, есть документация, а твои элементы непонятно что значат, в каких ситуациях их можно использовать итд. Плохая идея.

> Почему плохо использовать id?
Потому что на странице не может быть 2 элемента с одинаковым id. Допустим ты в форме логина сделал у кнопки id и все - на страницу нельзя поместить 2 таких формы логина.

> Почему нужно поддерживать старые браузеры?
- потому что кто-то ими пользуется
- потому что есть устройства где нельзя обновить браузер (смарт ТВ, старые смартфоны) или где у пользователя нет прав (рабочий компьютер, компьютер в отеле и тд)
- потому что это учит тебя делать более "железобетонную" верстку
- потому что веб-стандарты задумывались так, чтоьбы страницы могли отображаться на максимальном числе устройств

На практике конечно на это часто забивают так как это стоит денег (рабочее время верстальщика) и так как многие верстальщики очень малограмотные и просто не умеют верстать хорошо (в верстальщики часто идут те кто не осилил программирование). Но твое время пока ничего не стоит, так что не беспокойся по этому поводу.

Если я на что-то не ответил - напомни. И желательно пиши номера или названия задач в ответе, а то трудно ориентироваться.
Аноним 2016/08/27 15:28:06  №828717 678
>>828363
Вкусно, но можешь объяснить что ты именно сделал или сказать, где про это можно прочитать?
Алсо, что за тип данных у нас получился в $money и $rate?
Аноним 2016/08/27 15:42:44  №828720 679
>>828717
Это базовая работа с массивами в PHP. Везде можно почитать. В учебнике ОПа например хорошо разжевано. Просто в ячейке 'rates' лежит еще один массив.
$rate будет float. $money и так очевидно.
Аноним 2016/08/27 15:45:59  №828722 680
14723019593860.png (4, 222x139)
139x222
>>807538 (OP)
доброго всем дня/утра/етс
помогите, всю голову сломал уже, объясните пожалуйста почему этот код выводит именно 123.. а не наоборот ..321? что происходит в этой вот строке return prnt($n-1).$n ?
Аноним 2016/08/27 16:18:45  №828739 681
>>828722
(5-1).5
(4-1).4.5
(3-1).3.4.5
(2-1).2.3.4.5
упс, 1! конец рекурсии! 1.2.3.4.5 = 12345
Аноним 2016/08/27 18:27:15  №828877 682
14723116353170.png (5, 222x139)
139x222
>>807538 (OP)
помогите! Голову сломал уже. Объясните пожалуйста тугодуму почему код выводит числа именно в правильной последовательности (123..), а не наоборот (..321)
Аноним 2016/08/27 18:27:59  №828880 683
>>828720
> В учебнике ОПа например хорошо разжевано
Джордж Шлосснейгл тобишь?
Аноним 2016/08/27 18:48:42  №828902 684
Аноним 2016/08/27 19:27:38  №828936 685
>>828739
чувак, я просто, у меня просто, прям слов нет, добра тебе
Аноним 2016/08/28 12:02:20  №829359 686
>>828506
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-4
>Задача про vertical align
>В задаче на vertical align ( https://jsfiddle.net/211Le60v/6/ ) у крайнего левого желтого блока слева отступ от края больше 10 px Мне сразу бросилось в глаза. Надо исправить.
Исправил: https://jsfiddle.net/211Le60v/7/


>>828506
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-6
>Задача про сайт ООО
>min-width тут вообще непонятно зачем так как 230px это ширина левой колонки, а не правой.
В шаблоне задания под контентной частью написано 100% - 230px. Если я неправильно понял что 230 пикселей, это максимальная ширина, а не минимальная, то всё легко решается: https://jsfiddle.net/0u3x5rsw/ . Если же это минимальная ширина, то я не знаю как решить эту задачу, кроме как заключить колонки в враппер и задать ему минимальную ширину равную размеру этих колонок https://jsfiddle.net/0u3x5rsw/1/ . Вот у меня есть вопросы которые сейчас ставят меня в ступор:

>> Однако, если продолжать сжимать окно, контент рано или поздно съедит вниз. Почему так происходит?
>Потому что флоаты проваливаются вниз, если на текущей высоте для них мало места и оно занято другими флоатами.
>В твоем случае ширина флоата не задана и потому определяется из содержимого и ширины родителя. Так как текста много, то флоат растягивается по ширине на 100%, и так как перед ним идет блок с меню, который занял часть ширины, он проваливается под него.
https://jsfiddle.net/g7qpu8wc/
Если сжимать тело по ширине до 171px то, даже не смотря на то что контентному блоку нужно как минимум 230px, контентный блок не будет провалиться. Но если ширина тела станет 170px или меньше, то элемент сразу проваливается. Это совершенно не с чем не связанное число, даже если не брать это во внимание на практике, мне всё равно не понятно подобное поведение.

https://jsfiddle.net/d5w519yd/
https://jsfiddle.net/d5w519yd/1/
Что отличает отступы в -29px и -30px?

https://jsfiddle.net/e026k5w4/
https://jsfiddle.net/cyeobyc3/
http://htmlbook.ru/css/calc
Почему в первом примере, при очень сильном сжатии, флоат проваливается вниз? Так быть не должно т.к. мы используем функцию calc, которая всегда должна высчитывать всю страницу минус 230px. Что отличает эту функцию в первом примере от второго?

>А также есть статья http://chikuyonok.ru/2010/01/liquid-site-markup/
>Изучи, как положительные и отрицательные маргины ведут себя на флоатах с разных сторон.
Loading...



>>828506
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-7
>Задача про инпут и кнопку
>В моем хромиуме кнопка на 2px ниже по высоте. Потому что у инпута есть паддинг 1px и border 2px, а у кнопки только border 2px. Тебе надо явно задавать паддинг и величину бордера либо же использовать другой box-sizing который их включает в себя.
Исправил: https://jsfiddle.net/5g31m30j/3/


https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-8
Задача про Короля Лир
А такое решение считается правильным https://jsfiddle.net/zxm89tLg/1/ ? Если нет, то я сделал как вы советовали: https://jsfiddle.net/tsuh4gjw/5/


>>828506
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-9
>Задача про верстку форума
>> .post > p {
>> margin-left: 72px;
>Что если кроме абзацев <p> в тексте справа будут еще заголовки, таблицы, списки, цитаты, изображения? Надо чтобы все работало.
Исправил: https://jsfiddle.net/kxdx27f1/4/
Критично то что теперь появился небольшой отступ перед p?

А можно было использовать универсальный селектор https://jsfiddle.net/gd3yn87t/ ?

>>828506
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-10
>Задача про текст и кота
Coming soon...


>>828506
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-11
>Задача про радиокнопки
>> Исправил: https://jsfiddle.net/fp8o0exq/5/
>Теперь клавиатурная навигация работает, но есть проблема - непонятно есть ли фокус на кнопках или нет. Когда ты двигаешься по обычной не стилизованной форме с помощью tab (проверь), текущий элемент выделяется. Но твои кнопки никак не выделяются когда на них попадает фокус нажатием tab.
Странно, у меня работает фокус. Прикладываю webm для наглядности...

Скажите свою версию браузера, чтобы я мог это починить?


>Странно. У меня на этой странице https://www.browserstack.com/screenshots выводится огромный список с разными названиями браузеров. При нажатии на название или номер версии он выделяется.
Некоторые селекторы и псевдоклассы который мы используем появляются как минимум с 6 версии IE и 3.5 версии Оперы, остальные же браузеры поддерживают их с первых версий. В том списке браузеры уже гораздо старше.

http://htmlbook.ru/css/active
http://htmlbook.ru/css/hover
http://htmlbook.ru/css/focus
http://htmlbook.ru/css/selector/child

>> Через visibility: hidden и overflow: hidden почему-то не получилось.
>Странно, по ссылке с visibility радиокнопки не видны.
Да, но их нельзя использовать с помощью клавиатурной навигации.

>> left: -10000;
>10000 чего? Единица измерения не указана. Проверил бы код css валидатором - сразу бы увидел ошибку.
Даже после исправления инпуты не исчезли: https://jsfiddle.net/gpysbfar/2/


>>828510
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-12
>Задача про вкладки
>> >Кстати есть еще такая интересная статья по вкладкам: http://chikuyonok.ru/2009/04/dl-tabs/
>> Но там же делается решение через JS
>Там JS только для переключения вкладок, так как в то время css3 плохо поддерживался. Можно наверно и без него. Обратить внимание надо не на то как вкладки показываются, а на оригинальный способ чередования вкладок и заголовков.
Да, причем, насколько я понял, в этом способе необязательно использовать именно <dl>, <dt> и <dd>, а можно заменить их например на <div class="taber">, <h2> и <article>. По-моему так наглядней выглядит.

>> 2. Если придерживаться метода где мы связываем инпутбокс и лейбел через for, то через этот селектор становиться трудно обратиться к контентному боксу, т.к. первый инпутбокс может оказаться родственным и для остальных контентных блоков https://jsfiddle.net/khxu17s0/1/
>Ну так ты можешь связать заголовок и тело вкладки классом или data-атрибутом и учитывать его в CSS правиле. То есть:
>
><input data-tab="tab1">....<div data-tab="tab1">...
Мы же не полностью одобряем уникальные идентификаторы.

В любом случае я сделал и это: https://jsfiddle.net/tb7k9dw9/5/


>> Почему нужно поддерживать старые браузеры?
>- потому что кто-то ими пользуется
>- потому что есть устройства где нельзя обновить браузер (смарт ТВ, старые смартфоны) или где у пользователя нет прав (рабочий компьютер, компьютер в отеле и тд)
Но почему мы должны поощрять использование устаревших технологий? Нужно наоборот мотивировать пользователей или поставщиков оборудования использовать современные технологии.
Аноним 2016/08/28 15:44:35  №829509 687
Доделываю студентов осталась пагинация и мне кажется, что все очень плохо. ОП, что я делаю не так? нужны твои советы.
https://github.com/anotherCodeMunkey/studentsList
в settings.php параметры для подключения к бд
https://github.com/TheSidSpears/Students Аноним 2016/08/29 01:49:50  №830037 688
>>816188
>>826978

Для начала, старые замечания по задаче из поста >>812990

-----------

ПО поводу этого скрипта: https://github.com/TheSidSpears/Students/blob/master/cmd.php

Всю работу с таблицей студентов (выборку студентов) удобнее бы собрать в одном классе, и использовать твой класс работы с БД, а не писать функцию.

> $validator=new StudentValidator($student,$container,$student->getId());

Тут мне не нравится то, что студент передается в конструтор, отдельно зачем-то его id. Контейнер передавать в валидатор неправильно, это же нарушение принципа DI. Студента логичнее передавать не в конструктор, а в функицю валидации. задача конструктора - инициализировать объект. Лучше сделать многоразовый валидатор.

>> перечитай урок про DI. Это service locator и это плохая вещь.
> Убрал где можно. Но как я понимаю в контроллеры всё равно контейнер придётся передавать целиком, так?

да, есть те, кто считает что контроллер тоже надо делать как сервис, но это получается сложнее, и не очень понятно, а нужно ли оно. Проще в контроллер передавать контейнер. Контроллер это все равно не повторно используемый код и его вызвать откуда-то нельзя.

> Я подразумеваю, что всё что нельзя редактировать пользователю, то protected. А get_object_vars возвращает только public свойства. Разве не элегантно?

Нет, это плохо так как не очевидно. Легко добавить публичное поле и внезапно оно становится доступно для редактирвоания пользователем. Это неправильно, надо чтобы все было безопасно по умолчанию, а не превращать код в минное поле.

> потому что этот класс используется только так и никак иначе. Создать, проверить на ошибки, вернуть ошибки. Верно так делать? Это сокращает работу с классом до одной строки: $validErrors=new StudentValidator($student,$this->c['table'],$id);

Нет, лучше чтобы валидация делалась в методе validate. Логично ведь что валидация это функция, которая принимает на вход модель и возвращает список ошибок. Это позволяет например проверить нескольких студентов одним валидатором. мне кажется так будет удобнее. Хотя конечно твой подход тоже имеет право на жизнь, но мне кажется что лучше для валидации иметь отдельный метод, а не нагружать этим конструктор.

----------

Также, я заметил, что у тебя мало комментариев. Хорошо бы завести привычку писать комментарий хотя бы перед классами, объясняя, зачем он нужен.

Насчет этого: https://github.com/TheSidSpears/Students/blob/master/composer.json#L10 - на мой взгляд, тут надо было перейти на неймспейсы из PSR-4, а не добавлять кучу папок в автозагрузку. Соответственно, при использовании PSR-4 папки должны назвыаться в соответсиве с неймспейсами, вплоть до регистра букв.

> https://github.com/TheSidSpears/Students/blob/master/students.sql#L31
Тут для hash праивльнее использовать varchar с указанием длины. К тому же по полю типа text не получится сделать индекс.

https://github.com/TheSidSpears/Students/blob/master/app/Router.php
Роутер сделан на мой взгляд неправильно. УРЛ который он анализирует, должен быть входным аргументом, а ты самостоятельно его берешь из SERVER. У хорошей функции есть входные аргументы и результат, а твоя функция сама лезет в какой-то суперглобальный массив и что-то оттуда берет, хотя необходимости в этом никакой нет.

Класс отформатирован неряшливо, не в соответствие с PSR (например скобка после имени класса должна стоять на новой строке).

В роутере содержится копипаста, например:

> $parsedUrl=parse_url($_SERVER['REQUEST_URI']);
> $explodePath=explode('/', $parsedUrl['path']);
> $module=$explodePath[count($explodePath)-1];

Далее, роутер берет на себя функции фронт-контроллера, выводя шаблон:

> include(Util::getAbsolutePath('/public/error_pages/403.php'));
> exit;

Тут сплошное нарушение принципов ООП:

- ответственность не разделена между роутером и фронт-контроллером и роутер занимается не своим делом (обработкой ошибок). По сути роутер у тебя содердит код которому место в фронт-контроллере.
- УРЛ не передается как входной параметр
- задача роутера - получить и разобрать УРЛ - но я у тебя в классе не вижу функции которая бы это делала

Плюс, из УРЛ берется только последний сегмент. Получается в адрес можно приписать что угодно и получить валидный УРЛ. Это, конечно, неправильно. Если тебе надо чтобы сайт работал в подпапке, надо либо автоматически выделять путь к ней либо прописать его в конфиг.

https://github.com/TheSidSpears/Students/blob/master/app/controllers/ViewController.php#L31
Не очень понятно, зачем явно указывать имена переменных. Разве не проще извлечь все ключи из массива? Для этого кстати есть функция extract.

https://github.com/TheSidSpears/Students/blob/master/app/controllers/ViewController.php#L26
Этот код, который отвечает за добавление путей к стилям, на мой взгляд, не должен быть в функции. Функция ведь называется showView а не showViewAndAddCssPaths. Алсо, добавлять префикс проще вызывая функцию-хелпер в шаблоне.

https://github.com/TheSidSpears/Students/blob/master/app/controllers/ViewController.php#L15
Здесь странный код. А что если условие не выоплняется? Выводится белая пустя страница? И вообще, так обычно не делают. Лучше из фронт контроллера сразу вызывать нужный метод, хотя бы потому что так проще получается.

https://github.com/TheSidSpears/Students/blob/master/app/controllers/MainController.php#L8
Этот конструктор ничего не меняет и потому его можно тут не указывать.

> public function parseRequest(){
> parent::parseRequest();
> }
То же самое. Перечитай про наследование классов. Эту функцию нет смысла переопределять.

> $this->mainCode();
Название функции должно начинаться с глагола. И обозначать что она делает.

> $this->viewName='pages/main';
> //Из локальных в глобальные, чтобы передать в packViewVars()
> foreach ($this->keysOfViewVars as $key) {
> $this->$key=$$key;
> }
Я думаю, лучше вместо неявных заданий имен шаблона явно вызывать метод showView(), передавая ему имя и переменные. У тебя все как-то запутанно: какие-то поля создаются, а можно просто вызвать функцию и передать ей нужные аругменты. Зачем усложнять - непонятно.

> $register_ok
В PSR переменные пишут кемелкейсом. Более того, у тебя есть и переменные с кемелкейсом, и с подчеркиванием. Смотрится ужасно.

Насчет переменных, которые нужны в каждом шаблоне (например, которые выводятся в шапке). Можно сделать в базовом контроллере метод для их получения.
Ответы: >>834510
https://github.com/TheSidSpears/Students Аноним 2016/08/29 01:50:35  №830038 689
>>816188
>>826978

https://github.com/TheSidSpears/Students/blob/master/app/controllers/ERController.php
тут используются табы вместо пробелов и из-за этого гигантские отступы.

https://github.com/TheSidSpears/Students/blob/master/app/controllers/ERController.php#L85
> or ($_COOKIE['token']!=$_POST['token']
Тут лучше использовать строгое сравнение.

https://github.com/TheSidSpears/Students/blob/master/app/controllers/ERController.php
Здесь в контроллере много усложнений. Ну например вместо того чтобы вернуть результат из функции setToken() и сохранить в переменной, ты его прописываешь в поле, а где-то в другой функции берешь из этого поля. Но это только усложняет код. Во-первых, явно не видно что откуда и куда передается. во-вторых, чтобы это работало, функции надо вызывать в определенном порядке, а как понять, в каком?

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

> protected $validModules=array('edit','edit_ok','register','register_ok');
Я бы упростил и просто проверял наличие метода с именем "модуля".

Не уверен, что праивльно помещать права доступа в роутер. Не лучше ли их прописывать в самом методе или в контроллере? У тебя ведь нет такого, что надо давать доступ к одному модулю с разными правами.

> if(!$this->checkToken()){
> //Попытка взлома
> header(' ', true, 400);
Во-первых, ты не показываешь страницу ошибки, а выводишь ту же форму (или так и задумано?), во-вторых, наверно надо сделать метод для вывода страницы ошибки.

https://github.com/TheSidSpears/Students/blob/master/app/controllers/ERController.php
В этом контроллере на мой взгляд неправильно сделано редактирование студента. Ты создаешь нового студента и заполняешь данными из POST, в то время как надо редактировать взятого из базы. В твоем случае проще что-то потерять, и непонятно почему для одного и того же студента создается 2 отдельных объекта. Опять же, все как-то переусложнено. Надо просто взять студента из БД, поменять нужные поля, проверить и сохранить обратно.

Также, надо удалять неиспользуемый код. Если у тебя больше не передается имя шаблона в контроллер - надо это убрать, надо убрать страницы register_ok если они не используются.

> https://github.com/TheSidSpears/Students/blob/master/app/db/StudentDataGateway.php#L34
> WHERE CONCAT(`name`,' ',`sname`,' ',`group_num`,' ',`points`,' ',`gender`,' ',`email`,' ',`b_year`,' ',`is_resident`) LIKE '%$search%'");

Надо подставлять данные через плейсхолдеры. Это SQL инъекция.

https://github.com/TheSidSpears/Students/blob/master/app/db/StudentDataGateway.php#L63
Надо бы запретить сортировать по hash. Это дает информацию о том в каком порядке они идут. Хотя это не получится использовать для взлома, но все равно, надо внимательнее относиться к безопасности.

https://github.com/TheSidSpears/Students/blob/master/app/db/StudentDataGateway.php#L96
> public function getStudentByHash($hashFromCookie){
Непонятно почему тут возвращается массив, а не объект.

https://github.com/TheSidSpears/Students/blob/master/app/db/StudentDataGateway.php#L117
> public function checkEmail($email,$id=NULL){
Для проверки наличия email не надо выбирать данные, а достаточно посчитать количество строк.

https://github.com/TheSidSpears/Students/blob/master/app/helpers/JSONLoader.php#L21
> throw new ConfigException("Ошибка в $filename");
Сюда надо бы добавить подробности ошибки разбора JSON

https://github.com/TheSidSpears/Students/blob/master/app/helpers/TableUrlMaker.php
Здесь неудачно выбраны аругменты конструктора. Ты передаешь сюда роутер. Зачем? Разбирать УРЛ? Нет, тебе нужно только имя модуля - значит надо передавать только его.

https://github.com/TheSidSpears/Students/blob/master/app/helpers/Util.php#L29
> $reg=preg_quote("/$find/ui");
Неправильно - preq_quote заэкранирует слеши и превратит их в \/. preg_quote экранирует все символы, которые могли бы иметь специальное значение, и ограничители (слеши) конечно тоже заэкраниурет. И неправильно передавать в эту функцию флаги.

> public function validate(Student $s,$id=NULL){
id наверно можно брать из самого студента

> <a href='<?=Router::url('edit')?>'>Редактировать</a>
Название метода должно начинаться с глагола. Плюс, не очень понятно почему метод статический - он разве не зависит от конфигурации роутера?

Вот это вот: https://github.com/TheSidSpears/Students/blob/master/app/views/pages/register.php выглядит как переусложнение. Проще сделать один шаблон для регистрации и редактирования и в нем через if выводить нужную часть.

В общем, надо упрощать код, и поработать над форматированием, именами функций и переменных.

HTML Аноним 2016/08/29 03:40:17  №830052 690
>>829359

Vertical align

> Исправил: https://jsfiddle.net/211Le60v/7/
Теперь верно.

Задача про ООО
> В шаблоне задания под контентной частью написано 100% - 230px. Если я неправильно понял что 230 пикселей, это максимальная ширина, а не минимальная, то всё легко решается:

"100% - 230px" значит "контент растягивается на всю ширину страницы, за исключением 230px которые отведены под меню и отступы". Ну то есть слева меню фиксированной ширины (200px по моему), а справа все оставшееся место занимает контент.

> max-width: 230px;
Там нет такого ограничения. Контент занимает все место справа что осталось от меню.

> width: calc(100% - 200px);
Это конечно хорошо, но работает пока не везде (в ИЕ8 например не работает или в старом андроиде: http://caniuse.com/#feat=calc ), надо бы что-то с этим сделать. Хотя бы сделать width 100% для не поддерживающий браузеров. Или обойтись без calc.

> margin-right: -100%;
Это нужно в методе без calc с враппером, про который я писал. В случае поддержки calc это скорее вредит и делает код менее надежным (ну например если мы по ошибке увеличим ширину левой колонки, забыв поменять ширину правой, левая заедет под контент, контент не перенесется на новую строку из-за этого маргина).

> <li class="navigation-menu-li">
Я думаю что удобнее не ставить тут класс, а просто писать .navigation-ul > li в CSS

> https://jsfiddle.net/g7qpu8wc/
> Если сжимать тело по ширине до 171px то, даже не смотря на то что контентному блоку нужно как минимум 230px, контентный блок не будет провалиться. Но если ширина тела станет 170px или меньше, то элемент сразу проваливается. Это совершенно не с чем не связанное число, даже если не брать это во внимание на практике, мне всё равно не понятно подобное поведение.

Скорее всего это ширина самой длинной строчки в меню. Так как у меню не задана ширина и у него стоит float: left то его ширина определяется алгоритмом shrink-to-fit (я написал урок по теме: https://github.com/codedokode/pasta/blob/master/html/shrink-to-fit.md ) из ширины содержимого и родителя. Так как самая широкая строчка имеет ширину 170px то и блок меню получает такую ширину. И соответственно при ужатии меньше 170px второй флоат переносится так как первый уже занимает все доступное место.

Флоаты по умолчанию выстраиваются в строку, но только пока есть свободное место. Если места нет то очередной флоат переносится на новую строку. Попробуйте сделать на отдельной странице штук 10 флоатов разных цветов и размеров (разной высоты и ширины) и посмотрите, как они выстраиваются когда меняется ширина родителя. Потом еще можно заменить float на display: inline-block и сравнить их поведение.

> https://jsfiddle.net/d5w519yd/
> https://jsfiddle.net/d5w519yd/1/
> Что отличает отступы в -29px и -30px?
Там стоит ширина блоков 50% и 55%. Видимо -30px достаточно, чтобы сдвинуть блок на 5% левее и уложиться в ширину родителя, а 29px недостаточно.

Вообще, я советую научиться пользоваться отладчиком в браузере (Ctrl + Shift + I или F12) - он показывает размеры и отступы у элементов, примененные CSS правила итд. Попробуйте им воспользоваться.

> https://jsfiddle.net/e026k5w4/
> https://jsfiddle.net/cyeobyc3/
> Почему в первом примере, при очень сильном сжатии, флоат проваливается вниз? Так быть не должно т.к. мы используем функцию calc, которая всегда должна высчитывать всю страницу минус 230px. Что отличает эту функцию в первом примере от второго?

calc работает как надо и при очень узкой шиине родителя должен выдавать 0, что можно увидеть в отладчике на вкладке Computed (отрицательной ширина быть не может). Но несмотря на это, флоат переносится на новую строку так как меню заняло всю ширину родителя.

Разница между первым и вторым примерами (ее нелегко было найти, но я нашел) в том, что во втором примере слова короткие и как бы ты не сжимал ширину на сайте jsfiddle, ее хватает чтобы эти слова поместились и осталось немного места справа (почитайте мой урок про shrink-to-fit). Если заменить хотя бы одно слово FIRST на более длинное слово, то второй блок начнет переноситься.

То есть проблема в том что на jsfiddle нельзя ужать окошко меньше определенного размера и слово FIRST влезает в этот размер.

Задача про инпут и кнопку

> Исправил: https://jsfiddle.net/5g31m30j/3/
По прежнему нехорошо. Там не указан паддинг для поля ввода и расчет на то, что он будет равен 1px + бордер = 2px. Но где гарантия что во всех браузерах такие значения стоят по умолчанию? Вообще, тут по моему проще задавать не внутреннюю высоту, а внешнюю, которая уже включает в себя паддинги и бордеры.

Задача про Короля Лир

> А такое решение считается правильным https://jsfiddle.net/zxm89tLg/1/ ?
Тут есть проблема, что невозможно догадаться что тут есть примечания и надо навести мышь чтобы их увидеть. И даже если догадаться, надо тратить усилия, наводя мышь на каждый абзац. Плюс, есть мобильные устройства где нет мыши. Не вижу выгоды от скрытия примечаний так как поля все равно не используются.

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

> Если нет, то я сделал как вы советовали: https://jsfiddle.net/tsuh4gjw/5/
Если в текст добавить другие теги то все разваливается: https://jsfiddle.net/tsuh4gjw/6/ Почитайте внимательно подсказки к задаче.

Задача про верстку форума

> Исправил: https://jsfiddle.net/kxdx27f1/4/
> Критично то что теперь появился небольшой отступ перед p?
Не критично. Но я считаю, что тег content не требуется. Можно сверстать без него.

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

Почитайте примечания к задаче.

Задача про радиокнопки
> Странно, у меня работает фокус. Прикладываю webm для наглядности...
А, теперь вижу. Я просто не догадался что тень обозначает фокус. А можно вместо нее сделать например синее свечение вокруг элемента, как это сделано в Хроме для инпутов под фокусом?

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

> Скажите свою версию браузера, чтобы я мог это починить?
Хромиум (Хром должен вести себя так же).

> .inputbox > input {
> position: absolute;
> left: -10000px;
Вот у этого метода конечно есть подвох - что если завтра кто-то поставит наш элемент на гигантскую страницу которая шире этих 10 000 px? Может лучше сделать родителя c overflow: hidden и тогда не придется так далеко загонять? Или все же не стоит? Я в принципе не настаиваю.

> Некоторые селекторы и псевдоклассы который мы используем появляются как минимум с 6 версии IE и 3.5 версии Оперы, остальные же браузеры поддерживают их с первых версий. В том списке браузеры уже гораздо старше.

да, это селекторы из CSS2.1. По идее все старые браузеры поддерживают HTML4 и CSS2.1, но по факту в IE6 и 7 была куча багов с ними. Но в IE8 все более-менее терпимо, и я думаю это минимальная версия ИЕ на которую стоит ориентироваться. То есть если использовать CSS2.1 то условно говоря это будет работать везде.

У меня есть урок по ИЕ: https://gist.github.com/codedokode/855e3970124687b26a1c
Ответы: >>834348
HTML Аноним 2016/08/29 03:40:50  №830053 691
>>829359

> Даже после исправления инпуты не исчезли: https://jsfiddle.net/gpysbfar/2/
Потому что left применяется только к позиционированным элементам.

> Да, причем, насколько я понял, в этом способе необязательно использовать именно <dl>, <dt> и <dd>, а можно заменить их например на <div class="taber">, <h2> и <article>. По-моему так наглядней выглядит.
Согласен, поисковый робот может например увидеть это как текст с подзаголовками.

>><input data-tab="tab1">....<div data-tab="tab1">...
> Мы же не полностью одобряем уникальные идентификаторы.
разница между data-tab и id в том что data-tab уникальны только в пределах виджета, а id должны быть уникальны на всей странице.

> В любом случае я сделал и это: https://jsfiddle.net/tb7k9dw9/5/
А где адаптивность? Если у нас очень узкий экран то табы надо либо выводить в столбик либо выводить в раскрытом виде. Сейчас, если сделать экран узким то подписи табов просто вываливаются из них. Надо это исправить, ширина вкладки должна определяться текстом и вомзожно ограничением на макс/мин ширину.

> id="first-tab" data-tab="first"
Вот 2 идентификатора это многовато .... нельзя ли оставить только один? желательно бы не-id если это не сложно (если сложно то ладно, что поделать, пусть будет id).

И еще один совет. Если мы встраиваем наш виджет в страницу, то есть ненулевая вероятность, что там уже есть класс с названием вроде content или wrapper. Чтобы избежать конфиликтов (а заодно станет понятно, откуда этот класс), надо добавить ко всем классам общий префикс, например .taber-content. Также, можете почитать про систему имен классов в БЭМ.

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

Плюс, в рамках обучения мы должны стремиться идти "сложным" путем, а не "простым". Если вы будете по работе заниматься версткой - другой вопрос.

Ну и вообще, лучше когда страница доступна везде (пусть и не в очень красивом виде), чем просто не отображается.

Очень высокопосещаемые сайты вроде Гугла или Яндекса доступны и в старых браузерах. Так как для них даже 2% это довольно много человек.

Аноним 2016/08/29 03:42:04  №830054 692
>>830038

Насчет 2 идентификаторов в задаче с табами - если убрать один из них сложно, то пусть остаются.
Аноним 2016/08/29 15:56:49  №830415 693
>>829509
названия классов с большой буквы тебя не учили писать?
Аноним 2016/08/29 17:06:25  №830480 694
14724795852600.jpg (77, 613x1024)
1024x613
>>830415
Ну не стукай. Исправил и сделал пагинацию.
Аноним 2016/08/29 19:25:01  №830590 695
Не могу подключить php_imagick.dll...
Вот отсюда взял его, из последней версииhttp://windows.php.net/downloads/pecl/releases/imagick/3.4.3rc1/.
Установил даже ImageMagick - без толку.
У меня не работает captcha в браузере: "Изображение по такому-то пути не может быть показано, так как содержит ошибки".
Что делать, как дальше жить?
Аноним 2016/08/29 19:29:08  №830600 696
>>830590
Вообще вот такая ошибка вылезает:
Invalid Configuration – yii\base\InvalidConfigException
Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required.
Сейчас буду разбираться ещё с GD PHP.
Ну такое дело - за что ни возьмёшься - нужно знать целую кучу всего. Как я уже начинаю это всё ненавидеть...
Аноним 2016/08/29 22:55:55  №830843 697
14725005560190.png (215, 906x615)
615x906
>>830590
>>830600
Ребята, я тормознул, как обычно...
Всего-то нужно было раскомментировать php_gd2.dll в php.ini...
Вот надо не с конца было начинать нотиса, а с начала.
Буду теперь знать.
Аноним 2016/08/30 20:48:18  №831472 698
>>830052
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-6
>Задача про ООО
>> width: calc(100% - 200px);
>Это конечно хорошо, но работает пока не везде (в ИЕ8 например не работает или в старом андроиде: http://caniuse.com/#feat=calc ), надо бы что-то с этим сделать. Хотя бы сделать width 100% для не поддерживающий браузеров. Или обойтись без calc.
А как переопределить это правило только для новых браузеров? Селекторы, которые я использую для фикса старых браузеров, да и вообще все селекторы, как раз начинают работать с 7-8 версии IE и с первых версий андройда.

Пусть пока будет так: https://jsfiddle.net/0u3x5rsw/3/

>>828506
>А также есть статья http://chikuyonok.ru/2010/01/liquid-site-markup/
>Суть там довольно проста. Левую колонку с меню мы загоняем влево с помощью float left. Правую колонку - вправо с помощью float:right. Но как задать ей ширину "вся страница минус 230px"? Никак, потому задаем ей 100%, а внутрь ставим блок с отступом 230px слева, а уже в него кладем текст. Но при таком подходе она пересекается по шиине с левой колонкой и проваливается вниз под нее. Для решения этой проблемы делаем ее внешнюю ширину меньше за счет отрицательного левого маргина. Например, -100%, в результате чего она начинает занимать 0px места и никому не мешает.
>...а внутрь ставим блок с отступом 230px слева, а уже в него кладем текст. Но при таком подходе она пересекается по шиине с левой колонкой и проваливается вниз под нее. Для решения этой проблемы делаем ее внешнюю ширину меньше за счет отрицательного левого маргина. Например, -100%, в результате чего она начинает занимать 0px места и никому не мешает.
А у меня получилось без внутреннего блока сделать, и, причем, у меня ничего не пересекается и не проваливается: https://jsfiddle.net/xx82knpf/ https://jsfiddle.net/xx82knpf/1/


https://jsfiddle.net/0u3x5rsw/
>> margin-right: -100%;
>Это нужно в методе без calc с враппером, про который я писал. В случае поддержки calc это скорее вредит и делает код менее надежным (ну например если мы по ошибке увеличим ширину левой колонки, забыв поменять ширину правой, левая заедет под контент, контент не перенесется на новую строку из-за этого маргина).
Без этого свойства при очень сильном сжатии бокс провалиться под левую колонку.

>например если мы по ошибке увеличим ширину левой колонки, забыв поменять ширину правой, левая заедет под контент, контент не перенесется на новую строку из-за этого маргина
Мы можем забыть что-то поменять и не используя функцию calc, например, так же, поменять ширину левой колонки и забыть поменять левый маргин у правой.


>>830052
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-7
>Задача про инпут и кнопку
>По прежнему нехорошо. Там не указан паддинг для поля ввода и расчет на то, что он будет равен 1px + бордер = 2px.
Исправил: https://jsfiddle.net/5g31m30j/4/

Почему у одинаковых элементов разные свойства? Где можно узнать о свойстве каждого?

>>830052
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-8
>Задача про Короля Лир
>Если в текст добавить другие теги то все разваливается: https://jsfiddle.net/tsuh4gjw/6/
Исправил: https://jsfiddle.net/tsuh4gjw/8/ Что-то я совсем...


>>830052
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-9
>Задача про верстку форума
>Не критично. Но я считаю, что тег content не требуется. Можно сверстать без него.
А можно подсказку как?

>>830052
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-11
>Задача про радиокнопки
>> Странно, у меня работает фокус. Прикладываю webm для наглядности...
>А, теперь вижу. Я просто не догадался что тень обозначает фокус. А можно вместо нее сделать например синее свечение вокруг элемента, как это сделано в Хроме для инпутов под фокусом?
Конечно: https://jsfiddle.net/fp8o0exq/6/

>>830053
>> Даже после исправления инпуты не исчезли: https://jsfiddle.net/gpysbfar/2/
>Потому что left применяется только к позиционированным элементам.
До сих пор не понял в чём смысл: https://jsfiddle.net/gpysbfar/4/

Контент находиться за пределами лейбла, но не скрывается.


>>815065
>> Как на глаз определить тень и шрифт?
>Для начала, надо попробовать определить радиус тени (на котором она плавно переходит в прозрачность). Если присмотреться, то видно что на картинке тень несимметричная: она большая сверху, маленькая снизу и равная по сторонам. Значит, тень смещена вниз, а справа или слева ее ширина. По ней мы подбираем радиус (будет примерно пикселя 3 я думаю). подобрав радиус, подбираем прозрачность черного, чтобы с краев тень совпадала по прозрачности с картинкой.
>Ну и напоследок подбираем вертикальное смещение тени, просто на глаз двигая тень вниз.
Вроде получилось: https://jsfiddle.net/fp8o0exq/7/


>>830053
https://github.com/codedokode/pasta/blob/master/html/html.md#Задание-12
>Задача про вкладки
>> В любом случае я сделал и это: https://jsfiddle.net/tb7k9dw9/5/
>А где адаптивность? Если у нас очень узкий экран то табы надо либо выводить в столбик либо выводить в раскрытом виде. Сейчас, если сделать экран узким то подписи табов просто вываливаются из них. Надо это исправить, ширина вкладки должна определяться текстом и вомзожно ограничением на макс/мин ширину.
Исправил: https://jsfiddle.net/tb7k9dw9/6/

> id="first-tab" data-tab="first"
Вот 2 идентификатора это многовато .... нельзя ли оставить только один? желательно бы не-id если это не сложно (если сложно то ладно, что поделать, пусть будет id).
Можно хотя бы подсказку как это сделать?

>Попробуйте
Вы можете обращаться ко мне на 'ты'. Вас называть на 'Вы' я начал в знак уважения вас как учителя.
someApprentice 2016/08/31 02:59:26  №831711 699
>>831472
>>А где адаптивность? Если у нас очень узкий экран то табы надо либо выводить в столбик либо выводить в раскрытом виде. Сейчас, если сделать экран узким то подписи табов просто вываливаются из них. Надо это исправить, ширина вкладки должна определяться текстом и вомзожно ограничением на макс/мин ширину.
>Исправил: https://jsfiddle.net/tb7k9dw9/6/
Исправил правило при котором при сильном сжатии контентная часть становиться меньше вкладок: https://jsfiddle.net/tb7k9dw9/7/
Аноним 2016/08/31 23:17:17  №832455 700
>>830037

>В роутере содержится копипаста, например:
> $parsedUrl=parse_url($_SERVER['REQUEST_URI']);
> $explodePath=explode('/', $parsedUrl['path']);
> $module=$explodePath[count($explodePath)-1];

Мне сделать для explode('/', $parsedUrl['path']) и $explodePath[count($explodePath)-1] отдельные ф-ии типа explodeUrl($url) и lastPart($url) ? Пока я непойму как избавиться от копипасты так, чтобы в итоге это не занимало больше строк и не было 2 однострочных ф-ий, которые вызываются по 2 раза

> protected $validModules=array('edit','edit_ok','register','register_ok');
> Я бы упростил и просто проверял наличие метода с именем "модуля".

А как проверить наличие модуля в дочернем класе? Что-то method_exists, function_exists и is_callable не работают
Аноним 2016/09/01 06:58:33  №832547 701
Всех с 1 сентября!
Аноним 2016/09/01 19:55:55  №833018 702
Студенты Аноним 2016/09/02 12:39:26  №833456 703
Аноны, давайте потихоньку переходить в новый тред >>825576 (OP) , а тут будут только ответы на старые посты.

>>832455

> копипаста

Ок, я невнимательно посмотрел, там строчки не совсем повтряются (а на вид выглядит как копипаста, что сбивает с толку). Но в любом случае, там в роутере есть 2 более серьезные проблемы:

- функционал роутера и фронтконтроллера не разделен и код размазан между 2 классами
- у роутера нет четко определенных входных параметров, ты по середине кода берешь и лезешь в глобальный массив $_SERVER вместо того чтобы использовать явно переданные аргументы. Никакой необходимости в этом нет.

> А как проверить наличие модуля в дочернем класе? Что-то method_exists, function_exists и is_callable не работают
Должны работать если использовать правильно.

И у тебя названия немного странные - ты метод называешь почему-то "модулем", модулем обычно называют несколько файлов вместе. А метод в контроллере обычно называют "действие" (action).
HTML/CSS Аноним 2016/09/02 12:40:04  №833458 704
>>831711

Я обнаружил интересный баг в Хромиуме. Если открыть страницу в широкой вкладке и сузить ее, то адаптивность работает нормально - табы выстраиваются вертикально. А вот если страницу открыть в узкой вкладке и растянуть ее, то табы так и остаются вертикальными и не выстраиваются горизонтально. Подозреваю, это баг в Хромиуме. В фаерфоксе бага нет. Исправлять не требуется.

Это вот мне не нравится:

> max-width: calc(100% + 2px); /2px - is size of border wrapper/
width это внутренняя ширина элемента, к которой потом еще прибавляются паддинги и бордеры. Если она будет больше 100% то возможно она будет шире окна браузера, что вызовет появление горизонтальной прокрутки. Это явно ошибка какая-то.

И я не понимаю, зачем вообще нужен max-width. Ведь блочный элемент, если у него не заданы width и max-width, по умолчанию растягивается (с учетом бордеров и паддингов) на всю ширину родителя (урок https://github.com/codedokode/pasta/blob/master/html/shrink-to-fit.md ). Значит, тут надо просто вместе с display block поставить для width/max-width значения auto и все. Точнее, только для max-width, так как width нигде не задан.

И еще одно замечание. Текст в блоках с содержимым вкладки примыкает к бордеру. Это некрасиво, создается ощущение что тексту там тесно. Ведь во всех книгах и журналах у текста есть поля справа и слева. Так же должно быть и тут - у тела вкладки должны быть поля, хотя бы 5-10px и у заголовка вкладки тоже должны быть небольшие поля, чтобы буквы не прилипали к краю вплотную. Если присмотреться, поля вокруг текста есть везде - и на кнопках, и в полях ввода.

В остальном, все верно.

Насчет удаления атрибутов с id, я придумал такой вариант:

Можно попробовать для связи табов и вкладок использовать их номера. CSS3 позволяет указать в стилях что-то вроде "N-й по счету элемент типа E" - и соответственно можно попробовать привязать первый инпут и первый label к первому телу вкладки, второй ко второму итд.:

- http://css.yoksel.ru/nth-child/
- https://developer.mozilla.org/ru/docs/Web/CSS/:nth-child
- (и еще одна статья, которая не имеет отношения к вкладкам, но которая показывает что можно сделать из одного дива: https://habrahabr.ru/company/paysto/blog/251933/ )

Важно, что эти селекторы умеют искать либо N-й элемент среди всех детей, либо N-й по счету одинаковый тег, но не могут например искать N-й элемент с определенным классом.

Тогда заголовки и вкладки должны идти строго по порядку (обычно так и есть).

Тогда data-tab нам не нужен и нужен только id. Как от него избавиться, я увы, не знаю. Если положить input внутрь label то не получится использовать селектор ~.

Я пытался придумать еще вариант с использованием псевдокласса :target, но он тоже требует уникальных id и еще хуже чем радиокнопки, так как не поддерживает несколько блоков с вкладками.
Ответы: >>834348
HTML/CSS Аноним 2016/09/02 12:40:32  №833459 705
>>831472

> А как переопределить это правило только для новых браузеров? Селекторы, которые я использую для фикса старых браузеров, да и вообще все селекторы, как раз начинают работать с 7-8 версии IE и с первых версий андройда.

Я имел в виду что можно написать например так:

.content {
width: 100%; / старые браузеры второе правило проигнорируют и возьмут первое /
width: calc(...); / новые прочитают оба правила, но возьмут второе /
}

> Пусть пока будет так:https://jsfiddle.net/0u3x5rsw/3/
> <div class="wrapper">

Враппер не нужен - минимальную ширину можно задать на элементе html или body.

Также, если присмотреться, левая граница меню не совпадает с левой границей заголовка - меню сдвинуто на 5-10px вправо, некрасиво.

В остальном, все верно.

> А у меня получилось без внутреннего блока сделать, и, причем, у меня ничего не пересекается и не проваливается: https://jsfiddle.net/xx82knpf/

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

>>> margin-right: -100%;
> Без этого свойства при очень сильном сжатии бокс провалиться под левую колонку.

Ну да, а если указать, то при очень сильном сжатии блоки наедут друг на друга и текст будет не прочитать. Лучше пусть проваливается. Вообще, проблема очень маленькой ширины решается указанием на html разумного min-width. И я не считаю это проблемой, так как для маленькой ширины обычно делают адаптивную версию, где все блоки идут вертикально. То есть margin можно указывать, можно не указывать, получается разницы нет, если у нас будет адаптивная версия.

> Задание 7
> Исправил: https://jsfiddle.net/5g31m30j/4/
Теперь верно.

> Почему у одинаковых элементов разные свойства? Где можно узнать о свойстве каждого?
В стандарте CSS написано что элементы форм не обязаны подчиняться стандарту CSS и браузеры могут их выводить как хотят. Я однажды просто сделал страницу с разными элементами форм, открыл ее в разных браузерах и померял. У всех браузеров эти паддинги, бордеры и особенности отображения примерно одинаковые. Например у инпута обычно везде паддинг 1px и бордер 2px. У кнопок и селектов width обозначает не внутреннюю, а наружную ширину. Если не задавать фон и бордер то элемент выводится как принято в операционной системе, а если указать - то как задано в CSS.

Я подозреваю, что это поведение скопировано с каких-то древних браузеров, чтобы не ломать старые сайты. То есть оно не задано в стандарте, но все равно браузеры используют примерно одинаковые стили по умолчанию.

В браузерах есть так называемый встроенный CSS, задающий вид элементов по умолчанию (в том числе элементов форм). Его можно найти в исходном коде браузера. Вот вопрос на эту тему: http://stackoverflow.com/questions/6867254/browsers-default-css-for-html-elements/6867287#6867287

И там же есть ссылки:

- для фаерфокса https://dxr.mozilla.org/mozilla-central/source/layout/style/res/html.css
- для хрома https://chromium.googlesource.com/chromium/blink/+/master/Source/core/css/html.css

Советую посмотреть по диагонали. Учить наизусть не надо, но стоит понимать, что в браузере есть какие-то дефолтные отступы, поля итд. Эти стили копируют то, как отображали теги древние браузеры, еще до появления CSS.

Вот к примеру стиль:

> table[align="left"] {
> float: left;
> }

До появления CSS таблицу можно было зафлоатить влево атрибутом <table align="left">, а сейчас этот атрибут поддерживается через встроенный CSS.

А в стилях Хрома можно увидеть:

> .... input[type="submit" i], ... button {
> box-sizing: border-box

Задача про Короля Лир

> Исправил: https://jsfiddle.net/tsuh4gjw/8/
Что-то ничего не исправилось. Заголовок по прежнему вырван влево. Тут надо просто поставить на body поля слева и все.

>>Задача про верстку форума
>>Не критично. Но я считаю, что тег content не требуется. Можно сверстать без него.
> А можно подсказку как?

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

>Задача про радиокнопки
> https://jsfiddle.net/fp8o0exq/6/
Теперь все верно.

> Неисчезающие инпуты
> До сих пор не понял в чём смысл: https://jsfiddle.net/gpysbfar/4/
> Контент находиться за пределами лейбла, но не скрывается.
О, еще одна хорошая головоломка, но я нашел ответ. label по умолчанию имеет display: inline, а как известно, у inline-элементов нет собственных размеров - их размер и форма совпадает с содержимым. Потому инлайн-элемент не имеет форму прямоугольника, а может например растягиваться на несколько строк в вслед за содержащимся в нем текстом. Возможно потому на нем не работает overflow.

Если дать label display: block или inlne-block, все сразу же начинает работать.

Кстати в выражении left: -50% проценты тоже считаются не от родителя-label (у которого нет собственных размеров), а от ширины ближайшего блочного элемента.

Если посмотреть стандарт: https://www.w3.org/TR/CSS22/visufx.html#overflow то там написано про overflow:

> Applies to: block containers and boxes that establish a formatting context
> Применяется к: блокам-контейнерам (?) и боксам, задающим контекст форматирования

Как я понимаю, это значит что к inline