«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP 73 Аноним 2016/03/16 08:47:14  №689537 1
14581072347800.png (33, 500x500)
500x500
14581072347811.jpg (157, 1024x683)
683x1024
14581072347842.jpg (194, 1024x768)
768x1024
14581072347883.png (3449, 1920x1080)
1080x1920
Добро пожаловать в наш уютный тред. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

Предыдущий тред был тут: >>678185 (OP) (1000 постов!)

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

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

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

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

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

Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.

- Для начала установи Апач + PHP (советы ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: 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

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

https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/7054af4a03865c4cc863

Может тебе понадобится пользоваться командной строкой, вот гайд https://gist.github.com/codedokode/10539568

Вот небольшой туториал по тому как начать использовать PHP на сервере для отдачи странички в браузер: https://php.net/manual/ru/tutorial.php Увы, уроков плавно подводящих к тому, как сделать задачи выше, пока нет, так что если что, задавай вопросы.

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

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

- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
- 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? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175 и получи личную немного устаревшую копию сайта
Оформляй код аккуратно!!! — например пропусти через 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/03/16 08:48:59  №689538 2
14581073391000.png (56, 500x644)
644x500
14581073391011.png (187, 853x480)
480x853
Код надо писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492

Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:

- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)

Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:

PSR-1: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-2-coding-style-guide.md


------------------

Итак, ты зашел в тред и решил помочь какому-то анону, дав ему совет или подсказку. Спасибо! Но прочти сначала эти напоминания, чтобы твоя помощь действительно была полезной.

Будь доброжелателен

Не годится: «Ты мануал хоть раз в жизни открывал, обезьяна?»
Не годится: «В гугле забанили?»
Не годится: «Твой код плохой»
Хорошо: «Вот, как можно улучшить этот код: ...»
Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»

Не придирайся к знанию английского языка.

Объясняй

Не очень хорошо: «сделай как в этом коде»
Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)»
Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»

Не проповедуй

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

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Аноним 2016/03/16 08:49:41  №689539 3
В старом треде >>678185 (OP) я проверил все по 11 марта. Посты с 12 по 15 марта я проверю чуть позже и напишу ответы в старом треде.

Аноним 2016/03/16 11:37:10  №689598 4
Аноним 2016/03/16 12:22:51  №689627 5
>>689537 (OP)
Стоит начинать учить php с Yii1?

На работе дали задачу сделать модуль на yii. А я верстальщик и знаю только js и php на уровне учебника в шапке.
Не получится ли так же, как если начинать учить js через jquery?
Аноним 2016/03/16 12:28:53  №689629 6
>>689627
Попробуй сделать какую-нибудь задачку из бонусных у ОП на сайте в шапке. Если пойдёт легко и хорошо - берись за ООП, БД и фреймворки.
Аноним 2016/03/16 12:37:48  №689638 7
Уже около месяца берусь за студентов и не могу завершить. Есть тут такие же долбоёбы?
Аноним 2016/03/16 12:46:26  №689644 8
>>689638

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

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

Давайте стараться больше уделять внимания техническим вопросам, коду, а не общим обсуждениям.
Аноним 2016/03/16 13:37:15  №689672 9
14581246360530.png (116, 590x351)
351x590
14581246360551.png (102, 620x388)
388x620
ОП, суперсерьезный вопрос века по верстке.
В макете красиво нарисовано так что цифра 05 прижимается верхними пикселями к верхней же границе картинки
В реальности несмотря на все сбросы маржинов и паддингов у заголовка (желтый блок) все равно остаются пробелы сверху и снизу. Мне на тостере прояснили что это высота строки, такая характеристика шрифта и что никаким другим путем кроме подбирания вручную line-height не добиться требуемого результата.
пик 1: line-height: 1em, не круто
пик 2: line-height: .61em, вроде норм, но 1. кумарит подбирать вручную 2. при смене семейства шрифта надо опять подбирать 3. текст как бы выезжает за границы блока(желтого), вроде ничего страшного но мало ли 4. от этого блока в свою очередь зависит другой, там где месяц тоже надо поджимать и изменение одного влечет бардак с остальными 5. если заголовок будет содержать две строки с отличающимся line-height ничего не выйдет
Есть еще конечно вариант подвигать маржином но это вообще мрачно.
Собственно вопрос, почему верстка это такая боль и что тут делать, сидеть подбирать или делать первый вариант где поджимается блок, а не шрифт.
Аноним 2016/03/16 13:44:49  №689678 10
14581250891970.webm (2301, 1080x1920)
1920x1080
Ребят, как настроить xdebug в open server на phpstrom?
Что бы можно было по людски выделять строчку, и нажимать жучка и видеть в консоли что хрониться в переменной, делать пошаговую отладку?
Аноним 2016/03/16 14:06:05  №689696 11
>>689672
line height - это единственный выход, да верстка - боль и мрак, где все берется с потолка и лепится из говна и палок.
Аноним 2016/03/16 14:11:59  №689701 12
>>689696
Ну вот, дадут мне макет на собеседовании, скажут сверстай.
Поджимать блок и не париться за эти пробелы, если что валить на то что дизайнер сильно много хочет?
Лепить из говна и палок где у каждого второго блока будут логарифмы уровня font: 2.654em/.812em ?

Аноним 2016/03/16 14:18:16  №689704 13
Помогите товарищи как мне сделать так чтобы echo выводил 13й месяц не только в первом условии.Наверно не очень понятно объяснил

http://ideone.com/dNpjm1
Аноним 2016/03/16 14:21:21  №689708 14
>>689701
Можешь картинке паддинг сверху поставить. хз, я не работаю версталой.
Аноним 2016/03/16 14:35:06  №689721 15
>>689701
мне нужно что-то сделать чтобы не писать echo по 2 раза
p-sch 2016/03/16 15:17:34  №689751 16
ОП, восхитительная статья про исключения у тебя на гитхабе. Спасибо.
Аноним 2016/03/16 15:18:54  №689752 17
>>689672

1) поиграть с line-height - начни с изчения теории: http://css-live.ru/articles/vvedenie-v-inlajnovyj-kontekst-formatirovaniya-ikf-osnovnye-ponyatiya-1-ya-publikaciya-cikla-tajny-css2-1.html

2) если не получится, подбить вверх маргин-топом

Вообще, конечно, по идее такое выравнивание надо делать за счет vertical-align: top или text-top, но это требует чтобы блок с картинкой были инлайн-блокам и и шли рядом, это не всегда приемлемо.

(кстати ты знаешь что на jsfiddle работает emmet сокращалка css, можно писать div.class или fl:l или w200)

Мне кажется line-height помог бы: https://jsfiddle.net/3Lsrnp50/1/

Мне больше нравится первый вариант из двух.

> 2. при смене семейства шрифта надо опять подбирать
Что поделать

> сидеть подбирать или делать первый вариант где поджимается блок,
подбирать line-height

>>689678

Придется курить мануалы по xdebug и phpstorm

>>689701

Это не так и часто встречается.

Аноним 2016/03/16 15:19:25  №689753 18
Аноним 2016/03/16 16:13:19  №689792 19
14581339999130.png (47, 981x377)
377x981
>>689753
О, уже работает, но долго грузится.
Полчаса назад сервис лежал, пруф на скриншоте. Ну и индус в issues свидетель, что работать сервис стал нестабильно.

Подковырял код фейкера под другой сервис (как будто он не может полечь).
https://gist.github.com/anonymous/5c53e40ac7c519313a96
Фактически там только заменен адрес lorempixel.com на unsplash.it, еще удалены теги категорий из урла, потому что у unsplash категорий не наблюдаю.

Встает вопрос по наследованию. Можно как-то дропнуть метод или свойство, унаследованное от предка?
Вот у меня есть класс Faker\Provider\Image, у него статическое защищенное свойство $categories, в котором хранится массив категорий сервиса lorempixel. От него я наследую свой класс, в котором переопределяю методы imageUrl и image.
А с унаследованным свойством categories что делать? Мне эта байда в новом классе ни к чему. Что делать? Пусть валяется?
Как-то нехорошо, лишний мусор.

Думаю, fzaninotto неудачно спроектировал в этом месте. Нужно было учесть, что сервисов для генерации картинок больше одного, и сделать один абстрактный класс Image, а от него уже унаследовать LoremImage, тогда у меня была бы возможность унаследоваться не от LoremImage как сейчас, а от абстрактного класса.
Метод image можно оставить в абстрактном классе, а imageUrl и все связанные с ним свойства и может быть приватные методы уже раскидать по конкретным классам.
Аноним 2016/03/16 16:33:59  №689803 20
>>689753

http://placekitten.com/

> Встает вопрос по наследованию. Можно как-то дропнуть метод или свойство, унаследованное от предка?

Нет так как оно может быть нужно классам-предкам. Также, это нарушит принцип подстановки Лисков так как класс-наследник должен подставляться на место предка (то есть быть совместимым с ним).

> Думаю, fzaninotto неудачно спроектировал в этом месте.
Возможно. Но конфигурирование не позволило бы получать картинку одной строчкой.

> Нужно было учесть, что сервисов для генерации картинок больше одного, и сделать один абстрактный класс Image, а от него уже унаследовать LoremImage, тогда у меня была бы возможность унаследоваться не от LoremImage как сейчас, а от абстрактного класса.
Тут не нужно наследование, хватит строки с URL с плейсхолдерами мне кажется (хотя конечно может и нет).
Аноним 2016/03/16 16:41:26  №689811 21
Аноним 2016/03/16 16:55:32  №689822 22
14581365327800.png (68, 1671x364)
364x1671
>>689752
Ну с выравниванием по верхнему краю ручной подбор line-height помогает, да. Но озвученные проблемы никуда не пропадают.
С выравниванием по нижнему краю еще хуже, отрицательные значения в line-height не допускаются, выходит, там только маржином выталкивать
>(кстати ты знаешь что на jsfiddle работает emmet сокращалка css, можно писать div.class или fl:l или w200)
Я на jade пишу, сокращает здорово.
Аноним 2016/03/16 17:23:25  №689852 23
>>689704
Чтобы в итоге вывелось, сколько потрачено месяцев и т.п.?
Ну ты как будто не сам решал задачу - просто после цикла поставь echo с нужными параметрами.
Аноним 2016/03/16 17:58:29  №689885 24
Задача про номера телефонов (расширенная).

>Надо проверить номер на правильность
Сделано в предыдущей части задания в 2 вариантах.
Короткий
>>689422
Усложненный (строгий формат, хотя как видим это было не нужно, в след.части задачи чистим все лишние символы preg_replace)
>>689487

>и привести любой номер к единому формату 89114044411 (то есть, заменить +7 на 8 и выкинуть весь мусор вроде пробелов, скобок и минусов, кроме цифр)
Может быть можно было одним выражением, но прогнал дважды через preg_replace, вернее скормил ему массивы.
Первый раз заменяем пробелы, скобки и проч.символы на пустую строку; второй раз заменяем +\s?7 на 8.
http://ideone.com/yxipgN
Аноним 2016/03/16 18:11:56  №689895 25
>Автозамена. Напиши скрипт, заменяющий определенное слово на другое (например, слово «дурак» на «хороший человек» в фразе «ты дурак»).

http://ideone.com/28HkY8
Аноним 2016/03/16 18:31:06  №689908 26
> Напиши скрипт, выводящий все email, встречающиеся в тексте
Мы кажется в итоге пришли к выводу, что сейчас в имени почты может содержаться что угодно, где-то там была статья на хабре, которая убеждает вместо одной крайности (писать длиннющую регулярку с перечислением всех доменных имен, встречающихся в природе) броситься в другую (регулярка вида /[^@]+@[^@]+/ или что-то в этом роде).
Но я пока использую регулярное выражение из урока http://archive-ipq-co.narod.ru/l1/regexp.html

Кстати, вместо[что-то]+ может все-таки ограничить около {1,255}, чтобы нам не кидали текст по 500 кб
http://www.w3schools.com/jsref/prop_email_maxlength.asp
>The default value is 524288

http://ideone.com/K8g3QR
Аноним 2016/03/16 18:33:29  №689910 27
Вкатился к вам из верстка-треда в воркаче, поясните ньюфагу пару вещей.
Уже умею верстать говносайтики и могу пойти работать в говноконторке, но в вакансиях на фронтендера\версталу нужен пхп. Так вот что именно мне нужно?
Аноним 2016/03/16 18:39:57  №689915 28
14581427979140.jpg (185, 1280x853)
853x1280
Аноним 2016/03/16 18:41:53  №689917 29
>>689910
потратить два-три года на изучение пхп, жаваскрипт и еще какого-нибудь типизированного языка, не забудь прочитать и переписать паттерны, а также алгоритмы.
Аноним 2016/03/16 18:49:07  №689924 30
>>689917
Конкретизирую - что именно мне нужно знать из пхп чтоб работать в говноконторке в своей мухосрани за 25к?
Алсо, есть аналог htmlacademy?
Аноним 2016/03/16 18:52:26  №689928 31
>>689924
я тебе уже написал.
Аноним 2016/03/16 18:52:26  №689929 32
>>689915
>static function getStudentList(){
>$db = Database::connect();
>$sql = "SELECT id, name, surname, class, points FROM student"
Разве тебе ОП не говорил что так делать не стоит? Ты можешь класс StudentDataGateway сделать зависимым от PDO, это называется Dependency Injection, почитай урок https://gist.github.com/codedokode/e1d31a31b37d5f635057
Это поможет тебе избавится от вызова статистического метода connect() и каждый раз при вызове функции ты сможешь использовать уже готовый PDO.
>while($row = $result->fetch()){
Вот этот цикл я вообще не понял зачем тут, еще и переменная $i какая-то. Если ты используешь PDO, в нем есть метод fetchAll(), который сможет вывести все результаты в массив или объект. Почитать про него можешь тут
http://php.net/manual/en/pdostatement.fetchall.php
http://php.net/manual/ru/pdostatement.fetchall.php - на русском

По поводу твоей ошибки
>Fatal error: Call to a member function fetch() on boolean
Очевидно что твоя переменная $result равняется false, а это как известно из-за ошибки при работе с базой данных. Чтобы получить больше информации, включи выбрасывание исключений при ошибках в PDO, это лучше всего делать при подключении вот так:
>$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
Тогда PDO при любой ошибке работы с базой данных выбросит исключение и завершит выполнение скрипта, что позволит тебе узнать в чем именно проблема. И пытайся избавляться от статистических методов.
Аноним 2016/03/16 18:52:43  №689930 33
>>689924
Вордпресс. Опционально джумла, друпал или битрикс.
Из php синтаксис хотя бы.

Не знаю, w3schools например http://www.w3schools.com/php/default.asp
Или всякие видеокурсы посмотри на трекерах, этого будет достаточно чтобы натянуть верстку или пофиксить плагин.

>>689917
Ни тебе, ни ему это не нужно.
Аноним 2016/03/16 18:55:09  №689933 34
>>689930
Спасибо за адекватный ответ. Ответ про два-три года другого анона показался толстотой.
Аноним 2016/03/16 19:00:23  №689935 35
А как вообще в жизни выглядит написание сайта?
1)Берётся WordPress, вставляются туда свои данные, картиночки, ???????, PROFIT!
2)Берётся WordPress, делается основной каркас, затем открывается код, плюётся на индусопись, стирается, пишется руками на пхп.
3)Сразу берётся и пишется руками на пхп?
4)Берётся уже написанный ранее сайт, редактируются css-стили, вставляются новые картиночки, новый сайт готов?
Аноним 2016/03/16 19:01:47  №689938 36
Оп, пытался решить твою задачку по айфону в кредит.
Вроде почти всё получилось, но не могу сделать так, чтобы выводило последний месяц, посмотри пожалуйста :3
И еще, код очень криво написан, да ?

http://ideone.com/MYuqmO
Аноним 2016/03/16 19:04:10  №689946 37
>>689935
Берётся предоплата - и не делается.
Аноним 2016/03/16 19:05:52  №689949 38
>>689938
Неправильно решено, там должно быть 61270р с копейками.
Аноним 2016/03/16 19:12:02  №689959 39
>>689933
То на серьезном уровне нужно долго учиться, чтобы устроиться на большую зп в москве. Но тебе же нужно верстальщиком в мухосрани.

>>689935
В документации вордпресса все написано https://codex.wordpress.org/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
Вордпресс и другие cms это готовые шаблонные приложения. От тебя требуется натянуть верстку по предложенному макету, пофиксить ошибки в чужих плагинах, написать собственный плагин (надстройку, которая добавляет функционал).

В оп-посте учебник для начинающих по php http://archive-ipq-co.narod.ru/
Там хорошая теория, есть задачи (сложноватые наверное).
Аноним 2016/03/16 19:16:54  №689963 40
>>689959
Я же сразу написал про говносайты и говноконторы, разумеется для высокой зп придется дохуя учить.
Аноним 2016/03/16 19:24:16  №689968 41
>>689537 (OP)
>У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/
>- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: 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
>Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.

Когда я решу всё эти задачи, я смогу начинать фрилансить, в общем? Или начать работать удалённо? Или пойти в говноконторку?
Аноним 2016/03/16 19:35:31  №689978 42
Аноним 2016/03/16 20:13:27  №690012 43
>>689929


говорил, но я хочу доделать функционал, а потом уберу статик функции
Аноним 2016/03/16 20:33:12  №690027 44
>>689968
нет, не будет ослом, то замануха.
Аноним 2016/03/16 20:36:23  №690034 45
Я не знаю, что адекватного в этих советах. Я тоже из мухосрани, я знаю уже ТРИ языка, включая говноверстку, кучу сопутствующих фреймворков, два бд, у меня семь проектов в гитхабе на всех этих технологиях. И все, что мне могут предложить сейчас - это 40 штук, и то еще нужно еще один фреймворк учить и не знаю, справлюсь ли я с работой. Ах, да, когда я пришел в местные конторы три года назад с двумя сверстанными сайтами, на меня посмотрели, как на говно, сказали мне в лицо, что я сделал говно и послали нахуй.
Аноним 2016/03/16 20:39:03  №690036 46
>>690034
Ты точно в говноконторы ходил?Ибо в ниих берут без опыта, главное тестовое задание нормально сделать, на портфолио похуй.
Аноним 2016/03/16 20:42:29  №690043 47
>>690036
Двачую. Я пришел, и меня взяли без тестового. Просто сказал, что знаю html и css без пруфов.
Аноним 2016/03/16 20:44:03  №690044 48
>>690043
Ну это уже наверное совсем черве-пидорская контора была, лол.
Аноним 2016/03/16 20:45:34  №690046 49
>>690034
Если ты toppestkek (даже гитхаб назвал по-дегенератски), то мы в курсе уровня твоих знаний.
Еще у тебя психические проблемы.
Или соглашайся на низкоквалифицированную работу (ничего в этом позорного, вон миллионы людей работают на заводах или кассирами), или да, смирись и годами прилежно учись.

Аноним 2016/03/16 20:51:18  №690055 50
Аноны, кто знает, как получить ID человека в фейсбуке через его ссылку на фейсбук? Год назад убрали такую возможность, судя по всему, но все еще есть сайты, которые предоставляют информацию о ID.
Аноним 2016/03/16 20:52:31  №690060 51
>>690044
>>690043
>>690036

Прекращайте флуд. Идите в бездельник-тред, в /web или куда-нидудь еще.

Это тред для обсуждения программирования, а не устройства на работу.

>>690046

Если ты направо и налево обзываешь всех больными, может проблемы у тебя?
Аноним 2016/03/16 20:56:00  №690068 52
> «Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок

http://ideone.com/B8LyiA
Аноним 2016/03/16 20:58:41  №690072 53
>>690046
Дегенерат на сосаче детектирует у других псих проблемы, спешите видеть. Когда в последний раз на говно/поней/фурри/трапов дрочил?
Что касается гитхаба, я его вообще just for lulz завел, там вон одни парсеры борд. За красивыми гитами тебе к пидорасам типа айдихи, у которого на две строчки кода многотомный дискрипшн с картинками))
Аноним 2016/03/16 21:01:43  №690074 54
>>690044
>>690043
Кончай семенить, не сидел бы ты тут и не ковырял оповские задачки, если бы работал. Иди вон в крошку-картошку, шкальник.
Аноним 2016/03/16 21:03:57  №690077 55
>>690060
>Если ты направо и налево обзываешь всех больными, может проблемы у тебя?
А по моему он прав, зачем сидеть в треде, который ты ненавидишь и считаешь всех червями-школьниками, но при малейшей проблеме идти и плакаться в него-же?
Аноним 2016/03/16 21:04:21  №690080 56
14581514616720.png (2, 242x70)
70x242
Аноним 2016/03/16 21:16:42  №690092 57
Господа, пилю какую-то хуету для себя, вычитал что лучше обрабатывать ошибки своим классом. Расскажите как лучше реализовать. Сделать какой-нибудь класс отдельный, в который передавать сообщения ошибок? Может есть какой общепризнанный паттерн там, яхз. Помогите долбаебу.
Аноним 2016/03/16 21:19:41  №690093 58
>>689792
про наследование используй модификатор final
Аноним 2016/03/16 21:25:10  №690099 59
Аноним 2016/03/16 21:26:13  №690102 60
Аноним 2016/03/16 21:27:28  №690105 61
14581528488420.jpg (170, 944x1080)
1080x944
Аноним 2016/03/16 21:33:23  №690112 62
Знаю, что к Евгению Попову вы здесь относитесь хуёво, но у меня возник вопрос, я тут нашёл раздачу, где почти все его основные поделия, из годного там HTML+CSS практика и PhP и MySQL для начинающих. Но сам видеоурок 2007 года. Что посоветуете: изучать по книге из ОП-поста или сначала посмотреть видеоуроки эти, а потом уже за книгу браться?
И да, по JavaScript и JQuery тоже нашёл его курс, он хоть сгодится?
Аноним 2016/03/16 21:50:14  №690135 63
т.е. если меня не брали в мухосранскую контору версталой, то значит у меня псих. проблемы. вообще ахуеваю с этой логики. про псих проблемы мне еще и натурально ОП ПИДОРАС говорит. ты знаешь, что гомосексуализм - официально псих. болезнь во многих странах?
Аноним 2016/03/16 21:53:06  №690140 64
>>690046
Проорал с того, как ты угадал.
Аноним 2016/03/16 22:15:01  №690164 65
Аноним 2016/03/16 23:07:08  №690218 66
А вот вы тут так неохотно вёрстку затрагиваете, при выполнении всяческих фриланс-заказов, непосредственно к самой вёрстке приходится прибегать только при редактировании каких-то особенных элементов? А всё остальное Джумлой или Вордпрессом делаете?
Вообще, такое ощущение создаётся, что веб-разработчик и верстальщик это разные профессии.
Аноним 2016/03/16 23:27:41  №690251 67
>>690140
Несложно угадать, если ты мод, у которого трэк аайпи, дебилушка.
Аноним 2016/03/17 00:12:50  №690317 68
Шапка в пр вообще не обновляется что ли? Опять бля в мертвых тредах пишу


Пограммисты-пограммистушки, поясните за код

http://ideone.com/OWQsMA

Сначала нужно проверять имя, это чек
Затем номер - чек
Затем в номере только цифры - не чек.

Если ввести буквы - выводит что номер превысил 13 символов.

Как бы вы сделали и в чем упущения?
До этого вообще проверки с регулярками не юзал, только на ограничение символов.
Аноним 2016/03/17 00:14:48  №690319 69
>>690218
лол, конечно разные. На крупных проектах программист делает логику и основной функционал, верстальщик все это дело оборачивает в приятный глазу вид под уже нарисованный дизайнером шаблон.
Аноним 2016/03/17 00:28:15  №690327 70
>>690319
<pizdos/> одним словом. Но для начала и фриланса нужно все эти 3 функции совмещать (программиста, верстальщика и десигнера)?
Аноним 2016/03/17 00:56:28  №690343 71
ОП, я оказывается кое-что упустил. Я мало что знаю про сетевые протоколы и про OSI, про структуру интернета и как он вообще работает. Вот начал гуглить, там описывается 7 уровней сетевого взаимодействия. Но для меня это теория, абстракция. Их вообще можно потестить, поюзать? Проверить как это пошагово выполняется? Ты мне задачу про сокеты кидал и план изучения. Так вот строение интернета и сетевые протоколы я как раз и не понимаю. Надеюсь на подробный ответ.
Аноним 2016/03/17 00:56:52  №690344 72
Почему здесь https://jsfiddle.net/bhvdnb9j/ всё работает так как надо, картинка становится по центру, как по вертикале, так и по горизонтале, а в браузере при копировании этого кода, картинка не выравнивается по вертикале.
Аноним 2016/03/17 01:18:23  №690361 73
>>689532
>Надо варнинги перехватыват и очищать, там есть функция.
Но зачем мне знать об этих неминуемых варнингах? Проще собаку поставить.

> Ну и как я вижу, там много случае где твой парсер не вырезает яваскрипт-ссылки. А ведь есть еще data-ссылки. Плоховато у тебя с теорией. Надо использовать белый список, то есть разрешить толкьо определенные протоколы в ссылках.
Но ведь DOM тоже не имеет автомата для выреза такого шлака. Через DOM я могу только перебрать аттрибуты.

Аноним 2016/03/17 01:25:24  №690368 74
Аноним 2016/03/17 01:34:38  №690373 75
>>690343
>там описывается 7 уровней сетевого взаимодействия. Но для меня это теория, абстракция
А это и есть абстракция.
5 и 6 уровни существуют только в стандартах фактически - вот написали такие уебанские стандарты, deal with it.
1 уровень - витуха, воткнутая в твой комп. В ней бегают электрические сигналы.
2 уровень - твоя сетевая карта и свитч провайдера. Они знают друг друга по MAC-адресам.
3 уровень - маршрутизация, IP-адреса. IP-адреса в сети существуют поверх MAC-адресов. Устройство может иметь мак, но не иметь IP, но не может иметь IP и не иметь MAC.
4 уровень - тот самый TCP/IP, отвечает за установку соединения между двумя точками. Различие между 3 и 4 уровнем в том, что 3 уровень - это карта с маршрутами, а 4 уровень - налаженные грузоперевозки по этой карте с маршрутами.
Ну и 7 уровень это все, что ходит поверх TCP/IP. То есть весь Интернет. HTTP и так далее.
Аноним 2016/03/17 01:43:09  №690379 76
>>690317
>Имя слишком длинное (до 13 символов
Интересный ты.
А если кто-то введет ФИО? Вот ты и потерял заказ.
Не нужно делать жесткую валидацию вещей, которые потом все равно будет читать человек.

>htmlspecialchars
Эта функция нужна для вывода данных в html-код. Убери это.
Кроме того, e-mail сообщение по умолчанию plain/text.

>Если ввести буквы - выводит что номер превысил 13 символов.
strlen возвращает длину строку в байтах. 7 русских букв - 14 байтов.
Используй mb_strlen, а в начале кода пропиши mb_internal_encoding('utf-8');

Если ты будешь проверять номера телефонов сугубо на цифры - будешь терять заказы.
Твоя регулярка верна, только убери модификатор i. Заглавных цифр не существует.
Аноним 2016/03/17 01:52:22  №690388 77
>>690112
>2007 года
Не смотреть ни в коем случае.
>Евгению Попову вы здесь относитесь хуёво
Его код был ужасен даже в 2007. Если ты сейчас обучишься по его шедеврам, ты будешь писать хуже, чем писал бы самостоятельно.

>>690068
>Пропущена запятая перед предлогом "а" или "но".
А если предложение начинается с предлога?

>>689946
Жизненно.

Аноним 2016/03/17 01:57:05  №690391 78
>>690388
Если предложение начинается с предлога, то перед ним не будет пробела и... а, ну да. Будет точка и пробел. Добавил точку во фрагмент
[^.,]\s\b(но|а)
http://ideone.com/DBrEeG

Задание на поиск "опечаток" на коррумпированных сайтах.
http://ideone.com/wtKLsF

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

В условии предлагается
>Подсказки для глупеньких: слова с опечатками найти легко: это слово, которое начинается с одной или нескольких русских букв, за которыми идет латинская
Не согласен, зайчик. А вдруг слово начинается с большой латинской буквы, например [K]алининградская область, или [M]агнитогорск.
Так что пришлось исходить из того, что либо слева от латинской буквы кириллица (тогда справа ее нет), либо справа (тогда слева ее нет). Потому что две подряд латинские буквы это уже слишком. Хотя... можно подобрать и такие слова наверное. Или я усложняю?

Кстати, а эту дырочку на сайте госзаказов хоть прикрыли за эти годы? Если нет, может настучим на них (куда? задорнов.джопег. Нет, ну мелкую сошку то никто крышевать не будет).
Прикрепляю песню "ансамбля Христа Спасителя", призывающую граждан бороться с произволом бандитов во власти.
https://www.youtube.com/watch?v=VyxcHbdLhac
Аноним 2016/03/17 02:25:44  №690409 79
>>690391
Одна латинская буква тоже заматчится.

>(?(4):[а-яё])
Что это, пупсик? Кстати, это условие никогда не выполнится.
Аноним 2016/03/17 02:27:38  №690410 80
>>690391
>Будет точка и пробел.
А если там восклицательное предложение? А если вопросительное?
Аноним 2016/03/17 02:37:09  №690413 81
>>690409
Это условная подмаска, поросеночек http://php.net/manual/ru/regexp.reference.conditional.php
Лол, помнишь ту серию сауспарка?
"Как ты его назвал?
- Поросенком...
- Нет, ты должен был назвать его говнюком, как настоящий мужЫк!
- Пап, но я...
- А ну быстро назови своего друга говнюком!"

>>690410
Я устал, не добивай.
Точку с запятой, тире сам смог вспонмить. У тире там еще кажется много видов. Кстати, нельзя ли в регулярках писать код типа U+2014.
Ну в общем идея понятна, список знаков препинания можно дополнять если что.
http://ideone.com/DBrEeG
Аноним 2016/03/17 02:52:07  №690417 82
Да, там |, а не :, перепутал с тернарником php.

А в каком порядке все-таки нумеруются подмаски, особенно когда они вложены друг в друга?
((a(с))(b))((d)(e)) Тут какой порядок будет?
Аноним 2016/03/17 12:18:28  №690581 83
14582063090600.jpg (40, 449x356)
356x449
Аноним 2016/03/17 12:39:37  №690595 84
ОП, я пошел по твоему учебнику, задачка на переменные

http://ideone.com/64LcDn

Я тут подумал - функция же будет удобней, если скрипту скармливать данные из формы, так как сразу будет пересчитывать все?

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

Как лучше то?

Аноним 2016/03/17 13:13:08  №690615 85
>>690595
Так php-скрипты могут выполняться не только в веб-среде, данные не обязательно приходят из формы, из консоли его могут запустить например. Нужна именно универсальная функция.
Переменным давай внятные имена, не calkR, а exchangeDollarsToRoubles, чтобы можно было из названия понять, что делает эта функция.
Большое приложение полностью будет состоять из таких вызовов, и ни желания ни времени не будет лезть в их код и смотреть что они там внутри делают.
Английский желательно подтянуть, это понадобится не только для того чтобы давать имена переменным, вся литература к сожалению только на английском.
Набирать на клавиатуре нужно быстро и вслепую, а не как клуша двумя пальцами.

>обернуть возвращенные значения в переменные, чтоб помещать туда итог
Да, так лучше. Логика (всякие вычисления) должны быть отделены от представления (как ты результат собираешься выводить).
Полученный результат можно вывести в браузере при помощи html-разметки. А может быть это консольное приложение, тогда вывод будет другим, может программа вообще ничего не выводит, может она пишет в файл, тоже неизвестно в каком формате.

мимопроходил
Аноним 2016/03/17 13:22:08  №690622 86
>>690595

Этот анон >>690615 правильно написал в общем, а я еще дополню. Важно уметь разделять код на независимые части, а не смешивать все в кучу. Потому получение данных из формы и расчет должны быть в разных местах. Один код который работает с формой, и отдельно универсальная функция перевода валют.

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

Ну и почитай еще тогда про побочные эффекты: https://github.com/codedokode/pasta/blob/master/good-code.md#Избегай-побочных-эффектов
Аноним 2016/03/17 13:27:29  №690625 87
14582104496210.jpg (181, 1366x768)
768x1366
Подскажи, Двач, я уже охуел искать что не так! Нихуя не могу запустить! Помоги ебанату.
Аноним 2016/03/17 13:28:44  №690626 88
>>690615
спасибо за развернутый ответ, но так как скрипт небольшой я не стал писать длинные имена функциям
Аноним 2016/03/17 13:38:42  №690632 89
>>690625
Там короче файлы нужно помещать не в www, а в www/html.
Да, в apache2.conf написано <Directory /var/www/>.
Только вот зайди в sites-available, там файл 000-default.conf, а в нем
DocumentRoot /var/www/html

Но я в общем тоже краб, помню некоторые настройки, но не понимаю за что они отвечают.
Аноним 2016/03/17 14:11:19  №690658 90
>>690625

В таких случах надо смотреть лог сервера (в линуксе /car/log/httpd/...) и там будет полный путь где он пытался искать файл.

>>690626

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

>>690632

А ты читал в мануале за что отвечает блок <Dicrectory> ? Прочитай. И про DocumentRoot тоже.

Также, тебе надо научится настраивать виртуальные хосты так что читай

https://httpd.apache.org/docs/2.2/ru/vhosts/
https://www.google.ru/search?q=debian+apache&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&newwindow=1&gbv=1
Аноним 2016/03/17 15:11:19  №690725 91
14582166792170.jpg (47, 445x455)
455x445
14582166792181.jpg (26, 371x413)
413x371
14582166792192.jpg (159, 544x750)
750x544
14582166792223.jpg (68, 616x212)
212x616
>>690658
Почему у меня не выполняется этот код? И где искать логи httpd? Пути как ты указал у меня нет. Заранее извиняюсь за тупость.
Аноним 2016/03/17 15:16:11  №690733 92
>>690725
>$REQUEST_METHOD
Что за переменная request_method? Она вообще есть? Может ты хотел написать $_SERVER['REQUEST_METHOD']?
Логи попробуй поискать в /var/log/apache2/
httpd это и есть сервер.
Аноним 2016/03/17 15:25:43  №690742 93
14582175438520.jpg (59, 675x74)
74x675
14582175438531.jpg (41, 395x440)
440x395
>>690733
Спасибо. Всё так и есть. Но всё равно не выводятся данные.
Аноним 2016/03/17 15:29:53  №690749 94
>>690742
Твои данные в массиве $_POST. Имя html элемента соответствует индексу в массиве $_POST.
Например
<input type="text" name="username">
При отправке $_POST запроса значение этого поля ты сможешь получить через $_POST['username'].

У тебя какой-то странный код обработки формы, почитай урок ОПа https://github.com/codedokode/pasta/blob/master/forms.md
Аноним 2016/03/17 15:31:23  №690750 95
Расскажите, как организована командная работа в серьезных конторах?
Есть ли разделение труда, типа отдел верстальщиков-фронтендеров, бекенд-программисты, системные администраторы, или везде фулстаки (которые на словах умеют "все", но делают это все плохо)?
Проводят ли старшие программисты код-ревью, то есть проверку кода джунов?
Есть ли семинары или что-то подобное для повышения квалификации?
Как проходит именно рабочий процесс? Тимлид бегает и раздает всем мелкие задания, следит за выполнением и подсказывает (инбифо: размечтался), или все более бюрократично, типа вон список задач, бери шо хочешь, делай как хочешь, сдавай как хочешь. Только если будет жалоба, тебя выпизднут.

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

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

tldr: как организован рабочий процесс? Вот завтра я приду на работу, усажу свой зад на стул или что у них там из мебели, дальше что? Контроль работы, коллективная работа, оценка проделанной работы, список задач?
Аноним 2016/03/17 15:59:09  №690773 96
Расскажите про автозагрузку, у ОПа есть https://github.com/codedokode/pasta/blob/master/php/autoload.md, но мне не очень понятно, собственно, как осуществлять автозагрузку. Т.е. там не особо это разжёвывается
Аноним 2016/03/17 16:04:35  №690784 97
>>690773
То есть мне нужно ко всему проекту подключить классы, каждый класс - отдельный файл. Если не через require, то... как? Не понятно
Аноним 2016/03/17 16:12:24  №690794 98
>>690750
Работаю вот в такой всеядной конторке, менеджеры раскидывают задания, иногда местные страшие что-то скипают если сидишь без работы. Старшые при вопросах отправляют в гугл, только если уж совсем пизда, то помогут.
Аноним 2016/03/17 16:12:42  №690796 99
>>690750
не надейся, что в 2016 году еще осталась такая работа, как "натягивание верстки на цмс", ты либо программист либо нет.
Аноним 2016/03/17 16:14:24  №690799 100
Можно ли устроиться хоть куда-нибудь работать в ДС после учебника ОПа, но не сделав студентов? Доедаю последние хуйцы с гречкой, студенты кое-как идут, но больше не идут, чем идут
Аноним 2016/03/17 16:18:12  №690801 101
Аноним 2016/03/17 16:23:05  №690803 102
>>690773
Куда еще подробнее?

Если в коде упоминается класс, то должен быть и доступ к этому классу.
Поэтому сначала объявляли все классы прямо в том же файле:
<?php
class Example
{
100500 строк;
}
class AnotherExample
{
еще 100500 строк
}
// а теперь эти классы используются, в данном случае создаем экземпляры объектов
$example = new Example;
$anotherExample = new AnotherExample;

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

Теперь код выглядит
require '/classes/Example.php';
require '/classes/AnotherExample.php';
$example = new Example;
$anotherExample = new AnotherExample;

Уже лучше, но если нужны сотни классов, придется писать сотни строк require classname.
Тогда разработчики сделали возможность объявить функцию, которая будет вызываться при обращении к классу, которого не видит php.
spl_autoload_register(function ($className) {
$path = 'classes/' . $className . '.php';
if (file_exists($path)) {
require_once $path;
}
});
$example = new Example;
$anotherExample = new AnotherExample;

Что произойдет в такой программе?
Php зарегистрирует функцию автозагрузки, т.е. положит ее куда-то себе в память и забудет о ней, пока не нужна.
Дальше он видит строку $example = new Example; и спрашивает себя: а есть ли в коде выше объявление этого класса? Нету. Значит нужно запустить ту функцию, которую зарегистрировали через spl_autoload_register, передав ей в качестве аргумента название класса Example.
Выполняется функция, к имени класса добавляется путь к папке 'classes/', получается 'classes/Example.php'.
Вот теперь произойдет require_once 'classes/Example.php'; и программа создаст экземпляр этого класса. (Если такой файл существует по указанному пути)

Дальше скрипт наткнется на выражение $anotherExample = new AnotherExample, повторить вышеописанный порядок действий.

Короче, когда php не может найти класс, он перед тем как орать об ошибке выполнит функцию, которую ты зарегистрировал, передавая ей в качестве параметра название класса.
А внутри этой свой функции автозагрузки ты и делаешь require путь/к/классу/НазваниеКласса.php
Аноним 2016/03/17 16:27:39  №690806 103
>>690803
Т.е. одной функцией spl_autoload_register(function ($className) я автоматически буду подгружать все классы из указанного $path (папки) в свой проект при необходимости(при запросе)?

И ещё такой момент: в конце статьи ОП-чик говорит что-то про composer.json, чем полностью выбил меня из колеи (впервые слышу об этом), в студентах это пока не потрубется и можно использовать только spl_autoload_register,
Аноним 2016/03/17 16:31:51  №690810 104
>>690803

>require грубо говоря копирует содержимое файла и вставляет его в то место, где прописана эта инструкция.
Нет, не так. Это не Си. require просто выполняет код из указанного файла. Соответственно если в том файле описан класс, то при выполнении require этот класс будет создан в памяти PHP и станет доступен для использования.

Я думаю, все эти аналогии вроде "реквайр подключает файл" непарвильные. Он просто загружает файл и выполняет код из него.

>>690806

МОжно только spl_autoload_register, но надо хорошо ее изучить и прочитать весь мануал по ней и связанным темам.
Аноним 2016/03/17 16:35:34  №690814 105
14582217343560.jpg (17, 500x171)
171x500
>>690799
После студентов я делал хуевые фиксы на сайтах и пару плагинов под вордпрессс, а потом устроился.
Аноним 2016/03/17 16:35:35  №690815 106
>>690810
Я упростил для понимания. Давай, расскажи ему еще про байт-код.
Аноним 2016/03/17 16:53:48  №690827 107
14582228285070.png (20, 680x450)
450x680
>>690815
Помоги, пожалуйста, у меня этот код даёт ошибку, что я делаю не так?

первое - пхп-скрипт, который создаёт объект класса Student

второе - класс Student.php, к которому должен обращаться автозагруз
Аноним 2016/03/17 17:07:08  №690834 108
>>690827
Неймспейс не используешь потому что.
Нужно писать new \Classes\Student;
И "classes" это для примера, если бы в примере было написано ваш/путь/к/папке/c/классами, ты создал бы тоже создал такую структуру директорий? Пути должны быть более осмысленными, по стандарту psr0
Назови неймспейс по имени своего приложения. Например Students, или College, или как-нибудь осмысленно. Как бы ты назвал свой сайт? Какое бы хотел видеть доменное имя, вместо http://localhost? (только не example.com или site.ru, пожалуйста)

Дочитай до конца статью
https://github.com/codedokode/pasta/blob/master/php/autoload.md#Неймспейсы-пространства-имен
https://github.com/codedokode/pasta/blob/master/php/autoload.md#psr-4
Ты как-то бегло и невнимательно.
Привыкай что нужно будет постоянно часами сидеть и изучать очередной мануал/документацию, написанную непонятно кем (или вообще сгенерированную роботом, ага).
Аноним 2016/03/17 17:30:00  №690849 109
>>690834
спасибо. Пока лучше вообще отключу неймспес тогда. Пошёл читать
Аноним 2016/03/17 19:17:45  №690910 110
14582314655390.png (193, 1280x1024)
1024x1280
14582314655431.png (49, 961x844)
844x961
Проблема с симфони и задачей TestHub :
Как выводить эти формы или вывести одну форму для трех сущностей
Я в тупике
EntityType - не подходит, как я понял, но может я не правильно понял
ArrayCollection - тоже как то не то, хотя опять же
Поясните как использовать EntityType или ArrayCollection если они решат проблему, или посоветуйте что-нибудь друзья
Аноним 2016/03/17 19:37:45  №690923 111
>>690910

Хотя я знаком с Симфони, но несколько раз приходится перечитать пост чтобы понять в чем проблема. Ты бы написал какую часть приложения (модели, формы) ты делаешь. Видимо обе.

Первое что надо вспомнить - что в Симфони формы обычно работают с моделями. То есть они используют объекты моделей для хранения данных. При обработке запроса данные из POST переносятся в модель, при выводе формы данные из модели выводятся с помощью шаблона.

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

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

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

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

Я нагуглил такой урок: http://symfony.com/doc/current/cookbook/form/form_collections.html - но там мне реально не нравится как они засовывают шаблон формы в атрибут. Некрасиво как-то, лучше в тег скрипт с нестандартным типом.

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

Вот рекомендуемый порядок действий:

- определиться с схемой БД
- сделать соответствующие модели доктрины представляющие части теста
- сделать формы для редактирования этих моделей

Можешь показывать промежуточные результаты

> Поясните как использовать EntityType или ArrayCollection если они решат проблему
Ты по моему все смешал - ArrayCollection это класс представляющий коллекцию моделей доктрины, а EntityType это что-то из форм.


Аноним 2016/03/17 19:58:00  №690938 112
>>690373
Это ведь не ОП ответил? А то я сижу жду, а ответ может уже есть. ОП, почему ты не подписываешься, мне например иногда непросто различить.
Аноним 2016/03/17 20:47:23  №690977 113
14582368440410.jpg (164, 531x750)
750x531
Привет, ОП. Привет, аноны.

Дымящаяся куча вводных слов под спойлером. Давно не был в треде. Я тот анон, который захламлял тред яваскриптом и версткой пока делал макет. ОП, скорее всего вспомнишь меня по куче километровых паст, которыми мы обменялись месяцев 5 назад.
Так вот ближе к делу. Как-то недавно мне посоветовали не сидеть за учебниками а написать что-то свое. До этого недели 2 потратил на учебник с DOMом но после долгого перерыва как-то сложно было вкатиться, да и сам DOM каким-то сложным мне показался. Но вдруг я подумал о совете про свой проект и за неделю я написал целую игру с экономикой, кучей счетчиков, циклами, магазином, улучшениями и сложными скриптами. Даже чертовыми фреймворками воспользовался и сохранение игры через куки сделал. И все без какой-либо помощи в написании кода. Только одних скриптов больше тысячи(!1!) строк. На некоторые копипасты мне конечно указали, но в целом очень даже похвалили за такие успехи. Заодно еще и вспомнил штмл с ксс. Ссылку не дам :3 Так как помню, что у тебя пунктик на проверку всего что сюда скидывают, а там много кода и время у анонов я отнимать не хочу, ведь это не задача из твоего учебника. Так вот вот взглянув на всю эту продуктивность я подумал, а почему бы не продолжать в том же духе и взяться за что-то еще более серьезное. И вот я придумал еще одну игру, но там уже даже познаний моего знакомого, который не один год работает программистом уже не хватает, вот я и вернулся в тред за помощью.

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

Планирую написать игру. Саму идею рассказывать не буду. Скажу лишь, что мне нужно будет рандомно соединять двух желающих поиграть людей. Примерно как это сделано в хартстоуне. Нет, у меня не карточная игра, не клон этого хартстоуна, и вообще оригинальная, что я аж сам офигел от того что ее придумал. Серьезно :3
Как я понял мне нужно знать базы данных и приступить наконец к учебнику по PHP для написания серверной части. И вот как раз перед учебником по PHP я бы хотел получить знания по базам данных. Написать что-нибудь с помощью их. Я предполагаю в качестве тренировки я смогу запилить что-то типа чата чтобы написанные пользователями сообщения отправлялись в базу данных а оттуда в окно чата и могли бы быть видны всем. Ну это все теория в которой я даже не разбираюсь. А надо бы разобраться. Что мне нужно учить для создания баз данных? SQL? Это ведь отдельный язык баз данных? А потом уже искать учебник по определенной базе данных типа MySQL? Или может мне не MySQL понадобится а что-то другое, а он уже давно устарел и все тру пользуются чем-то другим?
Аноним 2016/03/17 20:54:52  №690983 114
>>690977
Что за игра, дай ссылку?
Мы-то ту не ОПы, просто хочется посмотреть, чего можно достичь при желании.
Аноним 2016/03/17 21:06:07  №690997 115
>>690983
Да я помню как ОП проверял даже сайт где анон падающие цифры как в матрице делал и пастой ему отвечал. Не хочу чтобы он сидел и гору левого кода смотрел. Не то что бы мне стыдно за него, я наоборот очень даже им горд. Потому как все полгода пока я изучал здесь программирование я ныл что не умею ничего активного делать. Даже не мог сделать чтобы по кнопке что-нибудь в стиле "скрыть\показать картинку" происходило. А тут сел и через неделю игра целая.
Аноним 2016/03/17 21:13:46  №691006 116
>>690997
Дай посмотреть-то, интересно же.
Советы ОПа всегда уместны, он тоже дополнительно прокачивает скилл, когда смотрит на говнокод, инфа соточка. Иначе не отвечал бы всем нам тут.
Какого уровня игра, вот как здесь, например: http://codecanyon.net/category/html5/games
Там игры на HTML5, простые браузерки, можно в страничку встроить, canvas, все дела.
Хотелось бы научиться такие делать тоже.
Аноним 2016/03/17 21:15:51  №691010 117
Аноним 2016/03/17 21:17:08  №691012 118
>>691010
Все права зарезервированы.
Аноним 2016/03/17 21:18:18  №691015 119
>>691012
кто в это играет?
Аноним 2016/03/17 21:22:28  №691029 120
изучил html css PHP что теперь почитать по практике в сайтостроении?
Аноним 2016/03/17 21:23:26  №691033 121
Аноним 2016/03/17 21:24:48  №691035 122
>>691033
Кто ставит условия после else? Для этого и придуман elseif
Аноним 2016/03/17 21:25:50  №691037 123
>>691015
Много кто. Посмотри в wordstat.yandex запрос "играть онлайн на сайте" или подобные. Там сотни тысяч в месяц запросов, а то и миллионы.
>flappy bird
>полмиллиарда установок
>кто в это играет
Аноним 2016/03/17 21:26:51  №691040 124
>>691035
Ахуеть я придурок. Спасибо, Анон.
Аноним 2016/03/17 21:31:31  №691049 125
>>691015
Никто не играет, там же написано кол-во продаж (1-2 в среднем).

>>690977
Прямо умиление берет от этого восторженного наивного ребенка)))
Но молодец, практика это главное. Не будешь писать код, не будет прогресса.
Ошибок там конечно наверняка море, но это не главное, главное усердие.
Непонятно правда, в чем вопрос был.
Аноним 2016/03/17 21:33:31  №691053 126
>>691037
под онлайном я понимаю что нибудь уровнем повыше
Аноним 2016/03/17 21:36:00  №691057 127
Аноним 2016/03/17 21:36:44  №691058 128
>>691049
Мне 39 лет, какой еще ребенок? Шучу, конечно :3 Ясное дело как со стороны выглядит, ну да и ладно, может так и есть, кто знает.
Вопрос в базах данных. Пока я даже понятия не имею как их делать, подключать, писать, использовать и все такое. Просил годной литературы и какого-нибудь краткого общего объяснения.
Аноним 2016/03/17 21:37:02  №691059 129
>>691049
http://codecanyon.net/category/html5/games?page=31
>Никто не играет, там же написано кол-во продаж (1-2 в среднем).
>до тысячи покупок всего за пару месяцев
Там просто каждый день новые появляются.
Аноним 2016/03/17 21:41:00  №691065 130
>>691006
Да я бы даже скинул, но там счетчик онлайна со встроенным диваноном по айпишникам. Пришлось бы всем прокси надевать. Да и чат в виде виджета вк запилен в котором можно меня легко задиванонить, так что лучше не буду.
Чтобы было хоть какое-то представление - смесь куки кликера и какой-нибудь стратегии со всякими улучшениями.
Аноним 2016/03/17 21:42:37  №691068 131
>>691059
те даже на простой,но интересной игрушке можно немножко срубить бабла?
Аноним 2016/03/17 21:44:28  №691070 132
Аноним 2016/03/17 21:49:43  №691078 133
>>691068
Вполне. Только лучше бесплатные приложения для Андроид и iOS, это я как диванный эксперт тебе говорю.
Вот не об игре, просто читал сегодня как раз: https://vc.ru/p/currency
>>691070
Не, флаппи бесплатная, там только реклама была от Гугла, пока создатель не удалил её.
Аноним 2016/03/17 21:55:54  №691089 134
>>691029
В оп-посте ссылки на задания по файлообменнику и сайту для студентов. К ним подробные комментарии как писать веб-приложения.
Это для учебы, в реальности конечно все пишут на фреймворках (или cms, кому что ближе).

>>691058
Все шапке, что ты не как олдфак треда.
Ссылки на оповские мануалы на гитхабе в шапке.
https://gist.github.com/codedokode/10539213
Но там в основном собрана туча ссылок на разные скучные справочники и документации.
Php вряд ли годится для онлайн-игры, хотя в учебных целях почему бы и нет.
Если ты знаешь javascript, есть смысл смотреть в сторону nodjs. Хотя там свои сложности.
И mysql для браузерной игры особо не нужен, есть же локальное хранилище. Ну или хранить на сервере в редисе.
Не знаю, подожди опа.
Аноним 2016/03/17 21:58:45  №691091 135
>>691078
и как ему удалось заработать 50к бачей на рекламе?большинство пользователей пропускает ее
Аноним 2016/03/17 22:01:07  №691096 136
>>691091
На Андроид установи какую-нибудь игру - там хер пропустишь.
Вот живой пример: чашка Петри, чел сделал аналог игры Агарио. Там счет заработанного идет уже на миллионы.
Аноним 2016/03/17 22:02:57  №691099 137
>>691096
так вроде должна быть функция пропустить или не?и как считается-тупо клик или еще определ время на просмотр?
Аноним 2016/03/17 22:05:21  №691103 138
>>691099
Платят и за показы, и за клики, только по-разному.
Ещё могут быть оплаты за игровую валюту: посмотри видео от партнеров - получи 30 плюшек на счёт. Но это для топовых игр, конечно.
Так-то тупо блок Адсенса обычно, во время игры меняется реклама врем от времени.
Аноним 2016/03/17 22:11:17  №691118 139
>>691096
Я даже знаю кто сделал аналог. Он тут с нами сидит. Именуют его гоблин.
Аноним 2016/03/17 22:13:12  №691120 140
>>691089
MySQL не нужен в том смысле что вообще базы данных не нужны? А как же регистрации, аккаунты, личная статистика и все такое. Да и играть будут два человека друг против друга. "Локальное хранилище" в моем понимании что-то в стиле кук и хранится в браузере, а мне то надо чтобы нельзя было читерить и цифры хранились в базе.

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

Аноним 2016/03/17 22:21:38  №691125 141
сложно ли создать онлайн игру(допустим крестики нолики)на 2 персоны.?(имею ввиду проблемы при кодинге на серверной части?
Аноним 2016/03/17 23:34:32  №691183 142
>>691125
Судя по твоему посту, ты совсем не понимаешь откуда начать, так что для тебя сложно. А так серверная часть для крестиков-ноликов даже на PHP реализуется за один вечер.
Аноним 2016/03/17 23:48:29  №691196 143
Привет, это опять я.
>>686858
>>686858
Вот мои посты выше. Пост с обьяснением проблемы и пост с моим гитхабом. В чем дело. Я таки полазил и понял, что не работает конкретно добавление в базу данных. Ставил условие чтобы делать header только если mysqli_query возвращает true и не перенаправляло. Скажите, что из моего кода может быть устаревшим для 7php, mysql 5.7, apache2.4? Проблема так и не пофикшена, не работает оно. Если у кого-то установлены именно 7php, mysql 5.7, apache2.4 убедительная просьба - запустите проект с гита(ссылка на пост с ним выше) и напишите в тред результат. Если я не найду решения то прийдется таки работать с денвером, чего я очень не хочу, а сроки поджимают.
Аноним 2016/03/18 00:02:09  №691207 144
>>691183
дай алгоритм действий
Аноним 2016/03/18 00:25:48  №691226 145
Вопрос по поводу Silex у меня есть layout, там есть возможность на контроллере срендерить блок и отдать к темплейтам, а как делать ебануню менюшку, вот в чем вопрос, неужели все глобальными переменными хуячить?
Аноним 2016/03/18 00:42:20  №691241 146
14582509405930.jpg (75, 400x600)
600x400
>>691226
И тут же еще один вопрос, мне нужно в функцию контроллера передавать маппер, что бы не нарушать DI, если я его правильно понимаю, как это реализовать?
public function index(Request $request, Application $app) вот же как выглядит контроллер
Аноним 2016/03/18 00:50:17  №691245 147
>>691196

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

Вот возьми свой код:

https://github.com/EvgheniiSytnyk/Clio-Caliope/blob/master/register.php#L38
> mysqli_query($link,"INSERT INTO users SET user_login='".$login."', user_password='".$password."'");
> header("Location: login.php"); exit();

И сравни с кодом из мануала:

http://php.net/manual/ru/mysqli.quickstart.statements.php
http://php.net/manual/ru/mysqli.query.php

там есть разница в том как ты используешь query и как ее надо использовать.

Я не могу гарантировать что это напрямую связано с ошибкой но вполне может быть причиной мешающей найти ее.
Аноним 2016/03/18 01:01:54  №691251 148
>>691241

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

То есть можешь просто передать DI контейнер в конструктор контроллера и далее его исопльзовать.

>>691226

Почему бы и нет? Для меню все равно 1-2 переменных достаточно.

>>691089

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

>>691120

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

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

>>691103

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

>>691068

Заработать можно на любой популярной вещи.

>>691029

Студентов сделай для начала из ОП поста.

>>691006

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

Аноним 2016/03/18 01:02:09  №691252 149
14582521299500.jpg (59, 599x571)
571x599
Аноним 2016/03/18 01:03:40  №691253 150
>>691251
Вопрос остается, как в Silex передать маппер в конструктор, лол.

Хотелось бы, как в magento, шоль, отдельный блок который ее генерит
Аноним 2016/03/18 01:13:10  №691256 151
>>690977

Не уверен насчет кода, но аватарка знакомая.

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

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

Потому вам все равно надо продолжать учиться.

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

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

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

SQL это язык для написания запросов к БД. MySQL это СУБД поддерживающая SQL. Язык MySQL на 90% соответствует стандарту SQL и на 10% состоит из своих особенностей и дополнений.
Аноним 2016/03/18 01:30:17  №691262 152
>>690827

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

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

>>690725

Тебе в логе PHP пишет: ты обращаешься к несуществующей переменной. Из-за этого видимо и не срабатывает иф. Не игнорируй сообщения которые пишет пхп.

Ты пробовал гуглить эту переменную? Погугли.

Также почитай мануал: http://php.net/manual/ru/tutorial.forms.php

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

Если хочешь учиться современной версии PHP - читай php the right way и решай нашу задачу про студентов. Мы старью не учим.

Аноним 2016/03/18 01:32:25  №691264 153
>>690417

Порядок отсчитывается по открывающим (левым) скобкам:

((a(с))(b))((d)(e))

1 ((a(с))(b))((d)(e))
2 (a(с))
3 (с)
4 (b)
5 ((d)(e))
6 (d)
7 (e)
Аноним 2016/03/18 01:55:56  №691278 154
>>690135

Если под ОПом ты имеешь в виду ОПа этого треда (меня) то я ничего подобного не говорил. Если тебя не брали куда-то на работу значит ты не соответствуешь их требованиям и надо учиться дальше. Давай на этом закроем эту тему и не будем возвращаться к ней.

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

>>690093

Он не для этого. Он запрещает переопределение метода или наследование класса.

Чтобы поле не было видно в потомках его надо делать private.

>>690092

Исключения используй.

>>690074

Покинь тред.

>>690055

С этим в другой раздел. Этот для программирования.

>>689908

> Но я пока использую регулярное выражение из урока http://archive-ipq-co.narod.ru/l1/regexp.html
> [\w+.-]+@[a-z.-]+/
Ни в коем случае это не используй - тут куча ошибок:

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

>>689822

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

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

>>689811

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

Так как это тестовое задание, мы не будем давать посказки - ведь тебе самому важно оценить свои способности, а подсказки этому помешают.

>>691253

Под контроллером ты имеешь в виду controller provider?

Судя по http://silex.sensiolabs.org/doc/providers.html#controller-providers ты сам создаешь его экземпляр и соответственно можешь передать у конструктор что хочешь. Уточни вопрос и дополни кратким примером кода если надо.

Аноним 2016/03/18 02:43:51  №691290 155
$year = 1;
for ($deposit = 10000; $deposit <= 1000000; $deposit = $deposit + ($deposit * 0.1)){
echo "Шел $year год... в этом году на счету " . $deposit ."<br>";
$year++;

}

задачка на миллион, верно?
Аноним 2016/03/18 03:32:17  №691311 156
Смотрите, какое анон придумал лаконичное решение (только поиск там верный, исправление - нет): http://ideone.com/5PkSz6

>>691290

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

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

p-sch 2016/03/18 03:48:23  №691314 157
>>691196
Короче завел твое добро на php-7.0+mysql-5.7.8+apache-2.4.
С дефолтной установкой вылезли две проблемы:
1. Можно войти в mysql только с рута в системе. Толи криво встал у меня, толи теперь такая политика безопасности я х.з. Ну создал пользователя, подключение пошло. Воткни хотя бы после подключения к бд для вывода ошибок:
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
2. При вставке в register.php вылетает ошибка, user_hash не передается и не задано дефолтное значение. Решение: добавить default '0' для этого столбца, как у тебя сделано для user_ip.
После этого все заработало.
А где ты этот ад взял вообще и зачем он тебе?

Аноним 2016/03/18 05:01:45  №691330 158
>>691314

Про то что в mysqli надо всегда проверять результат, я пишу везде где могу. Люди все равно продолжают его не проверять. Не знаю кто виноват. плохие учебники, невнимательные люди или разработчики, заложившие по умолчанию вариант "игнорирвоать все ошибки". Переходите на PDO лучше.
Ответы 13-16 марта в стром треде Аноним 2016/03/18 05:07:42  №691331 159
Проверил все задачи в старом треде. Если кого-то забыл - напомните о себе тут. Вот ответы:

>>691321 - mysqli, woocommerce, картинка с енотом, регистронезависимый поиск в postgresql https://github.com/foobar1643/student-list/
>>691322 - задача про стихи и еще что то
>>691323 https://github.com/foobar1643/student-list/
>>691324 много задач от енота, yoda speak, клавиша shift и другие
>>691325 граммар наци, вопрос про мемкеш
>>691326 сложная задача про банкомат, палиндром, айпад
>>691327 енот граммар наци, двоичный поиск
>>691328 лиличка,
>>691329 ООО вектор, автомобильные номера, номера телефонов


Аноним 2016/03/18 07:31:50  №691345 160
>>691326
>>691331
> array_push($topsOut, $amount);
> array_push($topsIncluded, $amount-$nomination);
> array_push($weights, $nomination);
> мне кажется не очень удачная идея вести 3 стека

Это способ хранение графа с помощью списка рёбер
$topsOut - массив вершин, из которых выходят рёбра.
$topsIncluded - массив вершин, в которые входят рёбра.
$weights - массив весов рёбер.

Я так до конца и не смог додуматься, как организовать перебор всех комбинаций и при этом учитывать количество заданных банкнот. Короче так я и не осили эту задачу в полном объеме.
Аноним 2016/03/18 08:06:20  №691359 161
>>689935
А как вообще в жизни выглядит приготовление жратвы?
1) Берется доширак, заливается кипятком, вставляются туда опциональные фигни типа лавровых листов, ????? PROFIT!
2) Берется лапша, варится соус, добавляются овощи, затем смешивается все.
3) Сразу берется мясо, разделывается, раскатывается тесто, варятся овощи, добавляются специи и делается блюдо?
4) Берется уже готовое блюдо, в него добавляются новые ингридиенты, новое блюдо готово?
Думай.
Аноним 2016/03/18 09:36:12  №691392 162
Как в NetBeans сделать так, чтобы при сохранении файла, он и на сервер выгружался?
Аноним 2016/03/18 10:03:04  №691411 163
>>691311
Вполне обычное решение вроде?
В заменах мало значений, но это не проблема, конечно: http://ideone.com/c9obR9
Аноним 2016/03/18 11:34:28  №691466 164
>>691345

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

Аналогично стоит подписать что делает функция, что у нее на входе и что на выходе.

Тем более, если у тебя граф, для них есть много стандартных алгоритмов.

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

>>691411

Замена сделана неправильно.
Аноним 2016/03/18 12:01:39  №691482 165
>>691466
>Замена сделана неправильно.
Почему? Все вроде заменяет? Не понимаю.
Аноним 2016/03/18 12:43:46  №691501 166
Чет хз че с этим остатком делать, у меня знаний пхп не хватает чтобы все эти условия прописать, а на одних иф/елсе деревянный код дико.

http://ideone.com/A6jXzi
Аноним 2016/03/18 12:49:36  №691507 167
>>691501
Дописал костыль, вроде все верно, но переплата идет 16т с копейками, а не 21.
Аноним 2016/03/18 12:53:04  №691514 168
14582947850540.png (24, 1016x764)
764x1016
Кто-нибудь знает как это побороть? Раньше такого не было. Сам атом запускается нормально но подкумаривают эти сообщения.
Аноним 2016/03/18 12:54:16  №691516 169
>>691507
Теперь все верно
Аноним 2016/03/18 13:01:24  №691525 170
>>691501
>$stavka
>$komissiya
>. " месяц кредита, " . "В этом месяце кредит составил " . round($credit) . ", " . "Всего было выплачено уже: " . $totalPayment . "<br>"
Ты так и не стал на путь исправления...
Считает неверно: там должно получиться 61270 рублей со многими копейками.
Конкретно у тебя не считается последняя выплата в 262 рубля, к которой прибавлена комиссия в 1000р и три процента на 8 с небольшим рублей.
Аноним 2016/03/18 13:03:04  №691527 171
>>691278
$app->get('/', 'Controllers\IndexController::index')->bind('homepage');
Вот мапится контроллер к роутеру.
Мне нужно передать в IndexControoller конструктор хотя бы $app['db'], как это сделать?
Аноним 2016/03/18 13:22:58  №691556 172
>>691527
С силексом я не работал, но в слиме можно поместить контроллер в контейнер и передать ему все что хочешь.
>$container['ExampleController'] = function ($container) {
>return new ExampleController($container);
>};
Потом в роутере ты просто пользуешься контроллером который у тебя в контейнере вот так
>$app->get('/path/to/controller', 'ExampleController');
Так же можно указать функцию которая будет вызвана, например
>$app->get('/path/to/controller', 'ExampleController:someFunction');
Если её не указывать, будет вызвана функция __invoke()

Попробуй погуглить, может в силексе тоже можно как-нибудь подобным образом сделать, разработчик у слима и силекса один, насколько я понимаю.
Аноним 2016/03/18 13:24:11  №691559 173
Чики-пуки, пехопач.
В требованиях на вакансиях верстальщика часто встречается "базовое знание php", "хотя бы понимать что такое PHP".
Что они хотят видеть и к чему я должен быть готов?
Аноним 2016/03/18 13:26:16  №691564 174
Есть какая-нибудь методичка для правильного именования классов и айдишников css? Кроме жуткого БЭМ естественно.
Аноним 2016/03/18 13:32:55  №691571 175
>>691564

Есть OOCSS и БЭМ. ЧТо жуткого в БЭМ? Попробуй понять концепцию, это очень хорошая штука.
Аноним 2016/03/18 13:40:09  №691579 176
14582976098020.jpg (130, 1106x968)
968x1106
>>691571
>ЧТо жуткого в БЭМ?
Ээээ.... Как бы общее впечатление от легаси моей конторы. Ладно там проекты масштаба яндекса. А для микродрисни мне такой слон не нужен.
Аноним 2016/03/18 13:41:23  №691581 177
Аноним 2016/03/18 13:45:43  №691591 178
14582979437250.png (304, 600x620)
620x600
Аноним 2016/03/18 13:48:33  №691594 179
>>691579

Я имею в виду не весь их стек инструментов а только систему именования классов. Ну и кстати идея разбивать CSS код на файлы тоже неплохая.
Аноним 2016/03/18 13:50:30  №691598 180
>>691591
Так считает же неправильно всё равно, ты о чём?
Поставь в сумму кредита 1000 - должно получиться 2030, а у тебя вот что: http://ideone.com/NNceu6
Уходит в минус всё, выплачивается два месяца.
Аноним 2016/03/18 13:52:40  №691602 181
>>691598
но с 40000 и 4000 все работает)
Аноним 2016/03/18 13:52:47  №691603 182
14582983673250.jpg (131, 844x970)
970x844
>>691556
Можно попробывать не указывать, но как мне тогда после передачи выбрасывать нужную функцию для обработки запросан на роутер?
Аноним 2016/03/18 13:54:16  №691604 183
>>691602
Частные случаи жи, надо что бы во всех работало, ах да и смени названия переменных, за кирилические название уебать хочется
Аноним 2016/03/18 13:55:13  №691606 184
>>691604
да погоди, пусть побудут кирилликой, куда проверку то вешать?
Аноним 2016/03/18 13:57:57  №691610 185
>>691602
Нет, с 40000 тоже работает неправильно: 6123.6 - это неправильный ответ.
Аноним 2016/03/18 13:58:46  №691612 186
>>691602

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

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

Незачем повторять код 2 раза для обычных платедей и последнего. Надо написать универсальный код. В примечаниях к задаче есть подсказки вроде бы.
Аноним 2016/03/18 13:59:27  №691613 187
14582987671260.png (10, 636x150)
150x636
Аноним 2016/03/18 14:00:09  №691614 188
>>691591

по поводу перевода строк - добавляй \n после br чтобы оно и на идеоне переносилось

Или сделай так

### переносы строк и br

Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить

header("Content-Type: text/plain; charset=utf-8");

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.


Аноним 2016/03/18 14:03:23  №691617 189
14582990038270.jpg (152, 550x827)
827x550
Привет,

http://ideone.com/N1elKn // Числа прописью

конструкция из IF в в функции переименования маленьких чисел похожа на фрактал. Но совершенно не редактируема, как литой кусок говна. Каждый раз, после ошибки, приходится переписывать ее занаво, т.к. не получается разобраться. Даже с комментами. Просто количество скобочек сбивает с толку. Мне кажется есть более лучшее решение.
Аноним 2016/03/18 14:08:03  №691624 190
>>691613
Аа, соррян, это ОП поменял описание недавно, наверное, а я не разобрался в твоём коде.
Да, сейчас всё правильно работает с 40000: http://ideone.com/9LfriQ
Но с 1000 работает неправильно, я выше ссылку давал. Надо это исправлять.
Аноним 2016/03/18 14:10:22  №691628 191
>>691624
Вот я хз че тут делать и куда вешать проверку если кредит изначально мелкий очень
Аноним 2016/03/18 14:11:09  №691630 192
>>691606
Так посмотри сам, никто тебе не будет тыкать ошибки в таких простых алгоритмах
Аноним 2016/03/18 14:19:19  №691636 193
>>691628
Не хочется ковыряться вилкой в твоём коде: всё эти кавычки, конкатенация на пустом месте.
Но алгоритм должен быть таким:
1. Прибавляем к $creditBalance проценты и $servicePayment.
2. Если получившаяся переменная меньше $monthlyPayment, то выплачиваем именно её и прибавляем её к $paymentTotal. После этого завершаем цикл.
3. Если получившаяся переменная больше или равна $monthlyPayment, то отнимаем от неё $monthlyPayment, продолжаем цикл.
Это работает на любых суммах правильно. Самый естественный алгоритм.
Аноним 2016/03/18 14:21:47  №691640 194
>>691630
Ты как моя математичка - написала ебовую дробь и "ОЙ НУ ТУТ ТАК ПРОСТА И ПАНЯТНА ЧТО НИПАЙМЕТ ТОЛЬКО КАМАР". В итоге из 25 человек математику сдали нормально лишь трое, которые репетиторов нанимали.
Я хер знает как на такой мелкий кредит сделать проверку. Он сразу соответствует двум критериям и действие выполнится дважды.
Аноним 2016/03/18 14:29:53  №691648 195
>>691640
>Я хер знает как на такой мелкий кредит сделать проверку. Он сразу соответствует двум критериям и действие выполнится дважды.
Это значит, что ты перемудрил с решением.
>if ($credit - $payment/2 < 0)
Что? Что это вообще за чушь? Для чего нужно узнавать, когда разница суммы кредита и разделённой надвое суммы выплат будет меньше нуля? Чё-то ты загнался куда-то, попробуй сделать по алгоритму выше.

Другой анон
Аноним 2016/03/18 14:40:55  №691662 196
14583012551130.jpg (58, 604x604)
604x604
>>691640
Потому что я работаю, и если ты собираешься работать, будь готов что тебя пошлют нахер, при тупых вопросах и попросят показать, что ты уже пробывал.

Подсказка:
На самом начале надо чекнуть, не больше ли сума месячного платежа, чем собственно говоря сам кредит.
Аноним 2016/03/18 15:06:52  №691680 197
>>691662
Тогда на 4000 тысячах он выплачивает 4200 не считая % и комиссию, и гасит на месяц раньше..
Аноним 2016/03/18 15:10:07  №691684 198
>>691680
Пробуй написать с нуля.
Это лучше, чем пытаться вставить костыли в плохой код.
Аноним 2016/03/18 15:19:23  №691690 199
>>691684
Я уже 5 раз с утра переписываю, чет я не осиливаю это
Тут все либо проще чем мне думается,
либо я думаю очень хуево
Аноним 2016/03/18 15:25:12  №691697 200
>>691690
Почему тебе так сложно просто кодом изобразить вот этот алгоритм: >>691636
?
Всё же по полочкам разложено.
Ты же вполне опытный мазафака (судя по привычкам конкатенировать строки в echo и другим моментам), должно легко получиться.
Аноним 2016/03/18 15:32:40  №691705 201
да я упираюсь в проверку.
На сумме 40000 кредита, предпоследний платеж 4200+-, мы платим 5000 + комиссия 1000.

Получается, что кредит не гасится, но условие
$кредит > $платежа срабатывает.

Для этого в старой версии у меня стоял костыль
>if ($credit - $payment/2 < 0)

Который не срабатывал на 1000 кредита, но зато на других суммах работал как надо (я полагаю что до 2500, пока платеж == 5000)

Аноним 2016/03/18 15:37:39  №691709 202
>>691705
Первое, что тебе надо сделать, это связать всё с "сумма кредита равняется к сумме кредита прибавить проценты и комиссию за пользование", без отнимания месячной выплаты. Это надо проверять: если больше месячной выплаты - всё продолжается, если меньше - выплачиваем и заканчиваем.
Аноним 2016/03/18 15:43:12  №691713 203
>>691709
Я пойду займусь пока математикой и наверстаю 6-7 классы, с 10 утра решаю этот алгоритм, я уже готов.
Аноним 2016/03/18 15:50:37  №691721 204
>>691713
Попробуй проще подходить к сути.
Попробуй для себя расписать шаги, которые должна выполнять программа, мне очень помогает такое.
Вот тут что надо сделать?
1. Прибавляем к сумме кредита 3 процента и 1000 рублей комиссии.
2. Если это больше месячной выплаты в 5000, то отнимаем от суммы кредита эти 5000, прибавляем к общим выплатам эти пять тысяч. Цикл продолжается.
3. Если это ("Прибавляем к сумме кредита 3 процента и 1000 рублей комиссии") меньше 5000, то выплачиваем только "это" - и всё прекращаем.
Что тут такого непонятного?
Мне слегка припекло от того, что я почему-то не могу объяснить тебе это, обычно получалось.
Как было бы в реальности: ты прибавляешь к сумме кредита три процента и тысячу комиссии, а потом отнимаешь пять тысяч - месячную плату. Когда у тебя сумма кредита стала рублей 200-300, то ты снова прибавляешь к ней 3 процента и 1000 комиссии, а потом выплачиваешь только получившееся.
Что тут непонятного-то?..
Аноним 2016/03/18 18:13:22  №691797 205
14583140023530.jpg (865, 2048x1365)
1365x2048
Оп-кун, когда я делаю insert c помощью, DoctrineServiceProvider, как мне вернуть id с которой вставился этот запрос?

http://ideone.com/F0XefS
Аноним 2016/03/18 18:26:10  №691806 206
Аноним 2016/03/18 18:36:55  №691817 207
14583154154640.jpg (148, 673x672)
672x673
>>691806
У меня в маппере собственно говоря две функции, зачем мне лишний раз грузить ORM, лол? И getLastId мне не нравится, ибо с двумя одновремнными загрузками могут возникнуть траблы.
Аноним 2016/03/18 18:37:39  №691819 208
14583154598160.jpg (213, 1280x800)
800x1280
>>691817
Или не возникнут?
Аноним 2016/03/18 19:08:40  №691828 209
>>691314
Нашел этот код в интернете.
Спасибо, тогда перепишу сам, нормально.
>>691245
Я менял подключение к базе по разному и через обычное INSERT INTO users VALUES, также использовал link->query(), не работало. Тогда лучшим вариантом будет переписать код самому.
Аноним 2016/03/18 19:17:54  №691836 210
В какую папку на убунту в апач нужно положить свой проект чтобы проверить его на виртуальном сервере? Убунту ставить буду позже, небольшой опыт работы с ней есть, хочу заранее знать как это реализуется.
Аноним 2016/03/18 19:36:39  №691856 211
>>691836
По дефолту добро лежит в /var/www/html.
Аноним 2016/03/18 19:46:29  №691866 212
14583195891050.jpg (334, 1400x2430)
2430x1400
ОП и другие крутые версталы, зацените верстку
http://w99953g4.bget.ru/
Кнопки и ссылки не работают, все статичное, только нескучные обои и анимацию добавил.
Там есть сомнительные моменты, но они и в макете такие. Под мобильные макета нет, на свое усмотрение там чуть столбцы подвигал при 320 и 640, шрифт и картинки уже лень подгонять.
В последнем хроме и лисе вроде ничего не ломается.
Джипег макета пикрил
Аноним 2016/03/18 19:47:43  №691867 213
Посоветуйте книгу по пхп, чтоб не сильно устаревшая и полезная к прочтению.
Аноним 2016/03/18 19:48:44  №691868 214
Аноним 2016/03/18 19:48:51  №691870 215
>>691866
Сам всё делал? Мне понравилось. Правда внизу добавь 2016, а то там 2015.
Аноним 2016/03/18 19:49:08  №691871 216
Аноним 2016/03/18 19:49:58  №691873 217
>>691866
адаптивность хуевая, по центру выравняй паддинги поставь, смотри чтобы все умещалось .
Аноним 2016/03/18 19:54:36  №691876 218
школомрази тупые с версткй надеяющиеся этим говном заработать), ссу на вас.
Аноним 2016/03/18 19:57:31  №691879 219
>>691876
Продаван, плиз. Когда там на собеседование очередное пойдешь?
Аноним 2016/03/18 20:02:30  №691883 220
>>691866
Почему в десктопном масштабе меню собрано в кнопку? Понятно, что там меню нет и это просто значок, но всё же.
Также при уменьшении масштаба страница не становится похожей на твой макет - картинки-превью по ширине экрана располагаются, а всё остальное просто уменьшается. Нет жёлтого фона по сторонам, общий темный фон так и остаётся.
Не могу загрузить картинку, тут скрин: https://gyazo.com/d0bc673a0579d1d20b0f3cccd441514c
Аноним 2016/03/18 20:14:10  №691902 221
>>691870
Плагины для жквери своровал, а так сам.
>>691876
Фулстекобоярам верстка не нужна?
>>691883
Меню в макете нет, а сам я не знаю как сделать красивые кнопочки.
>Нет жёлтого фона по сторонам
Это не часть макета, в psd его нет
>картинки-превью по ширине экрана располагаются, а всё остальное просто уменьшается
Честно говоря из макета я не понял как этот блок себя должен вести при масштабировании.
Поправил только что на альтернативную версию, так лучше?
Аноним 2016/03/18 20:17:39  №691905 222
>>691902
Ну, я подумал, что надо, чтобы так же в точности выглядело, как на твоей картинке.
А то ведь верхний слайдер растягивается по ширине: https://gyazo.com/dad91187317faa20d6d97240b959d20a
Аноним 2016/03/18 20:23:29  №691909 223
>>691905
Да, похоже что так лучше, поправил хедер тоже
Аноним 2016/03/18 20:26:51  №691912 224
>>691909
https://gyazo.com/8945dc3484878909ffb078e9deb7dc33 - тоже смотрится не вполне органично. И внизу тоже футер растягивается.
Так-то всё нормально, конечно, и с самого начала было, это всё уже мелочи.
Аноним 2016/03/18 20:31:44  №691917 225
Начал заниматься год назад. Только недавно нашел работу. При этом занимался довольно дохуя и выполнил все задания (правда не все доводил до идеального состояния) кроме последнего. Освоил ООП, MVC, Симфони немного, микрофреймворк Silex, верстку (не охуенный кросбраузерный адаптив конечно, но все же), JS правда пока некогда занятся, но не думаю, что там будут проблемы. ЗП 20к. Нахуя так жить? Заем вы этим занимаетесь? Ожидаете зарабатывать 200к в час?
Аноним 2016/03/18 20:33:09  №691920 226
>>691917
Тебе еще повезло.
Аноним 2016/03/18 20:35:57  №691922 227
анчоусы, нужен скрипт, превращающий строку текста в картинку png, располагая текст посередине, рассчитывающий размер шрифта так, чтобы текст вмещался в установленную ширину пикчи. Как это все сделать и рассчитывать?
Аноним 2016/03/18 20:37:45  №691924 228
Аноним 2016/03/18 20:38:53  №691927 229
>>691920
Почему повезло? За такую нищенскую ЗП работы полно. Но не легче ли грузчиком столько же зарабатывать и не ебать себе мозг говнокодингом?
Аноним 2016/03/18 20:39:52  №691931 230
>>691927
Грузчиком не посидишь на кресле. Я тоже работаю и получаю 40-50к. Но это тоже нищенство.
Аноним 2016/03/18 20:39:53  №691932 231
А как отлаживать PHP-код? Хочу просмотреть в процессе исполнения поэтапно в IDE Netbeans с точками останова и в красивом окошке. Выводить на страницу не подходит.
Аноним 2016/03/18 20:39:59  №691933 232
>>691927
Многие аноны были бы рады любой работе кодером, лишь бы опыта набраться.
Аноним 2016/03/18 20:58:35  №691955 233
>>691917
>>691920
>>691927
>>691931

Прекращайте флудить.

Вы ошиблись тредом. Это тред про программирование.
Аноним 2016/03/18 21:20:25  №691974 234
>>691932
Раз никто не пишут, то буду городить костыль:
[code]function console_log( $data ){[/code]
[code] echo '<script>';[/code]
[code] echo 'console.log('. json_encode( $data ) .')';[/code]
[code] echo '</script>';[/code]
[code]}[/code]
Аноним 2016/03/18 21:44:42  №691990 235
есть ли достойная замена пыха по скорости
Аноним 2016/03/18 21:45:54  №691994 236
>>691990
Чё-т в голосяку с тебя.
Аноним 2016/03/18 22:16:23  №692038 237
>>691705
Вы тут задачку из гайда Опа разбираете, с кредитом на айфон, я правильно понял? Я короче вот так решил:
http://ideone.com/M5gkaB
Добавил переменную последний_платеж которая юзается если остаток меньше или равен ежемесячному_платежу. Вышло в ноль, процент посчитан, комиссия за обслуживание тоже. Правильно сделал?
Мимо только два часа назад начал читать гайд Опа, до этого код в глаза не видел.
Аноним 2016/03/18 22:17:03  №692039 238
Аноним 2016/03/18 22:18:20  №692041 239
Аноним 2016/03/18 22:26:08  №692046 240
Аноним 2016/03/18 22:29:49  №692047 241
>>692046
Можно сократить всё, чтобы два раза echo "{$month} месяц спустя: долг = {$creditBalance} руб, выплачено всего {$paymentTotal} руб. \n"; не повторялось.
>( $creditBalance * $percent ) + $servicePayment
Вот это повторяется несколько раз, надо избавиться от повторов.
Аноним 2016/03/18 22:31:14  №692051 242
>>691924
это я знаю; просто не так сформулировал вопрос.
Как рассчитать размер шрифта так, чтоб слово вместилось по ширине в пикчу (без переносов)? Например, ширина пикчи 100рх.
Аноним 2016/03/18 23:00:22  №692065 243
>>692047
Ну для ( $creditBalance $percent ) + $servicePayment* вроде как можно отдельную переменную ввести, или надо как то все реорганизовать? Не в курсе просто стандартов написания кода видимо не дошел еще. Вывод информации после срабатывания условия тоже вообще не представляю как не повторяя строку сделать видимо опять же еще не дошел. В целом то решение хотя бы близко к верному?
Аноним 2016/03/18 23:04:16  №692068 244
14583314568040.png (14, 615x191)
191x615
Суп, котаны.
Подскажите, как организовать поиск в базе со связью "многие ко многим"?
Вот у меня есть три таблицы, как этой пикче. Я хочу сделать следующее: выбрать все записи из таблицы items, которым в таблице items_filters соответствуют значения фильтров, которые передаёт пользователь. Хуёво сформулировал, поэтому вот небольшое пояснение.
Например, если пользователь передал два фильтра с каким-либо filter_id (допустим, filter_id = 1 и filter_id = 2), то выбраться должны такие записи из таблицы items, которым соответствуют записи в таблице items_filters, у которых `items`.`item_id`=`items_filters`.`item_id` И `items_filters`.`filter_id`равняются '1' И '2'
Опять нихуя не понятно, ну да ладно.
В общем, я составляю запросы вот такого вида, но они, понятное дело, выводят объявления, где filter_id=1 ИЛИ filter_id=2
SELECT * FROM `items_filters` INNER JOIN `items` ON `items`.`item_id`=`items_filters`.`item_id` WHERE `items_filters`.`filter_id`=4 OR `items_filters`.`filter_id`=6
Если заменить OR на AND, то выводиться ничего не будет по вполне понятным причинам.
Аноним 2016/03/18 23:05:12  №692071 245
>>692065
Считает всё верно.
Но надо стремиться к оптимуму, чтобы не копипастить и не делать лишних телодвижений в программе.
>Вывод информации после срабатывания условия тоже вообще не представляю как не повторяя строку сделать
Просто echo должно быть за пределами всех условий.
Аноним 2016/03/18 23:05:29  №692072 246
14583315294500.png (13, 599x175)
175x599
Аноним 2016/03/18 23:35:54  №692099 247
>>691866
Добротно, про мобильность уже сказали, я бы просто забил на нее и сделал без нее, если уж полноценно ее не поддерживать. лучше никакой чем хуевая
Аноним 2016/03/19 00:12:06  №692131 248
14583355269100.jpg (130, 850x637)
637x850
>>691256
>аватарка знакомая
maketi.esy.es Может вспомнишь так :3 Ну да ладно, не важно.


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

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

Ну вот опять какое-то слово мудреное принес ахах, для меня "сокеты" это алмазики из WoW, которые в доспехи вставлять надо. Тред не зашкварен, лет 5 назад играл.

Сложновато чутка перестраиваться в PHP после JS и вот вопросы которые у меня возникли по твоему учебнику.
Вот задача на игру в кубики. https://ideone.com/uufpgm

1)В строке где показываем выпавшие номера переменные заключены в фигурные скобки. Для чего? Только для читаемости?

2)Так же в if при перечислении нескольких условий, они заключены в скобки. Это обязательно?

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

Айфон в кредит https://ideone.com/XBhKRi

Аноним 2016/03/19 00:23:31  №692139 249
>>692131
>В строке где показываем выпавшие номера переменные заключены в фигурные скобки. Для чего? Только для читаемости?
Фигурные скобки нужны чтобы разделять переменные и текст, когда идет подставление. Представь ситуацию когда нужно вывести переменную и рядом с ней поставить какой-нибудь символ не ставя при этом пробел. Тут есть несколько способов, но если нет желания использовать конкатенацию строк (во втором посте про неё написано, кстати) то можно сделать вот так
>echo("Example {$variable}string");

>2)Так же в if при перечислении нескольких условий, они заключены в скобки. Это обязательно?
Это не совсем понял. Если подразумеваешь вот такое
>if($foo == true && $bar == false)
То там не нужны скобки.
Аноним 2016/03/19 00:26:49  №692142 250
14583364094630.png (26, 669x246)
246x669
>>692139
>Это не совсем понял
Уточнил вот этот момент.
Аноним 2016/03/19 00:30:58  №692149 251
>>692142
Вообще насколько я знаю, там скобки не обязательны, может быть это для читабельности сделано. Тут лучше ОПа подождать, он лучше объяснит.
Аноним 2016/03/19 00:43:25  №692155 252
>>692131

Про фигурные скобки:

http://php.net/manual/ru/language.types.string.php#language.types.string.parsing
http://php.net/manual/ru/language.types.string.php#language.types.string.syntax.double

> 2)Так же в if при перечислении нескольких условий, они заключены в скобки. Это обязательно?
Чтобы не надо было гадать, какой порядок выполнения операций и лезть в мануал, мы ставим скобки и задаем его явно.

> Не легче ли там сделать два эха на выпавшие у анона и компа номера, а то общая строка меня смущает и длиной и этими переносами
как хочешь, так и делай.
Аноним 2016/03/19 01:08:56  №692166 253
>>692068
Бамп вопросу. Помогите, пожалуйста, я очень не хочу писать кучу быдлокода, если существует относительно простое решение.
Аноним 2016/03/19 01:29:58  №692171 254
>>692166
>>692068

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

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

Соответственно ответ направшивается сам собой:

- либо в WHERE поставить OR а потом через HAVING выбрать группы содержащие ровно 2 строки
- либо в HAVING написать условие что группа должна содержать И первый id, и второй

И есть еще третий вариант. Ты можешь приджойнить таблицу item_files 2 раза и записать 2 условия в WHERE. Это может быть выгоднее в плане производительности за счет использования индексов. А может и нет - надо тестировать


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

Ссылки: http://stackoverflow.com/questions/33647944/mysql-group-by-having-different-values-same-field
Аноним 2016/03/19 02:37:36  №692206 255
Аноним 2016/03/19 02:45:34  №692208 256
>>692171
Я не понял его вопрос.
Нужно выбрать все items, которым соответствуют filter_id 1 и 2?
Почему не написать тогда WHERE IN?
SELECT i.* FROM items i
JOIN items_filters fi ON i.item_id = it.item_id
WHERE filter_id IN (1, 2)
Аноним 2016/03/19 02:49:36  №692209 257
>>690343
Дальше стал изучать самостоятельно. Немного про сети почитал. От компа по кабелю бегут импульсы, коммутатор их считывает, читает мак адрес. Если такого хоста нет в коммутаторе, то он рассылает на все порты полученный фрейм и ищет нужный. Дальше 3 уровня я не вижу, где IP. По сути ведь коммутатор передаст на хост фреймы и все. Где 3й уровень? Знаю, что далее фрейм инкапсулируется в IP-пакеты, при этом стирается предыдущий заголовок с мак адресом и записывается новый с IP-адресом. Читаю теорию сетей, об устройстве интернета, и в голове каша. Немного про вланы почитал, интересно все это. Я хотя бы немного стал понимать как оно все работает на физическом уровне. Вообщем, ОП, такие дела, помоги мне разобраться.
Аноним 2016/03/19 08:43:21  №692245 258
>>692068

Кевин Янк "ПХП и МУСКЛ от новичка к профессионалу"

Страница 134. Связь многие к многим
...
Таблица jokecategory связывает идентификаторы шуток jokeid и категорий
categoryid.
Таблица joke содержит шутки.
Таблица category содержит категории.
...
Теперь, когда промежуточная таблица готова (jokecategory) и содержит назначенные категории,
вы можете использовать оператор JOIN, чтобы сформулировать несколько
интересных и практичных запросов, например вывести список всех шуток в категории
«О д'Артаньяне».
SELECT joketext
FROM joke INNER JOIN jokecategory
ON joke.id = jokeid
INNER JOIN category
ON categoryid = category.id
WHERE name = "о д'Артаньяне"
Как видите, в этом запросе используются два оператора JOIN. Первый объединяет
таблицы jоке и jokecategory , а второй берет готовые данные и объединяет
их с таблицей category .

Следующий запрос выводит список категорий, в которых содержатся шутки,
начинающиеся словами «сколько адвокатов».
SELECT name
FROM joke INNER JOIN jokecategory
ON joke.id = jokeid
INNER JOIN category
ON categoryid = category.id
WHERE joketext LIKE «Сколько адвокатов^»
Аноним 2016/03/19 12:55:05  №692310 259
Аноним 2016/03/19 12:59:38  №692315 260
14583815784570.jpg (155, 550x827)
827x550
Аноним 2016/03/19 13:26:43  №692330 261
Короче это за гранью моего понимания - как заставить его гасить кредит за 1 месяц. [spolier]нехуй брать такие кредиты[/spoiler]

http://ideone.com/NeVOHe


я перехожу к следующей теме
Аноним 2016/03/19 13:28:28  №692333 262
>>692330
Не сдавайся, анон, у тебя все получится.
Аноним 2016/03/19 13:34:21  №692336 263
>>692330
>if ($credit + $komissiya < $payment)
А где же проценты?
Почему ты не пытаешься сделать так, как я предлагал выше? Самый же простой и естественный алгоритм? Какого, спрашивается, хера?
Также без этой задачи ты не сможешь правильно решить следующую - кредит на Айпад.
Я сам сидел с ней целую неделю. Это стоит того.
Аноним 2016/03/19 13:36:39  №692339 264
>>692336
проценты уже в кредите висят,

$credit = $credit + ($credit * $stavka);
Аноним 2016/03/19 13:36:44  №692340 265
В общем нужно сделать следующее. При клике на элемент страницы должно меняться содержимое другого элемента, например нажимаю на чекбокс - меняется число в другом элементе на нужное мне и все это без перезагрузки естественно. Видимо это Ajax. Думаю там пару строчек кода, но я не шарю в JS абсолютно. черканите как это реализовать.
Аноним 2016/03/19 13:37:29  №692341 266
>>692336
я так и делаю, просто я уже реально не понимаю в какую сторону копать надо..
Аноним 2016/03/19 13:37:38  №692342 267
>>692330
>$credit = $credit + ($credit * $stavka);
>$credit = $credit - $payment + $komissiya;
Это вообще что за бред?
Вот твоя тенденция всё усложнять идёт от кучи кавычек и конкатенации через идиотские названия у переменных и усложнение вычислений.
Будь проще, и всё получится.
Аноним 2016/03/19 13:38:39  №692343 268
>>692339
Да, я увидел потом.
Это как-то всё странно, не нужны такие усложнения.
Просто попробуй в if и else расписать тот алгоритм, который я выше тебе расписал.
Аноним 2016/03/19 13:38:50  №692344 269
>>692340
если элемент не передается в форму никакую (да и если даже передается)
$('selector).click(function(){
$('anotherSelector').val()
или
$('anotherSelector').html()
});
Аноним 2016/03/19 13:39:32  №692345 270
>>692342
в одну переменную сразу идут проценты, затем из нее вычитается платеж и комиссия
Аноним 2016/03/19 13:40:42  №692347 271
>>692343
Это как в универе, когда учился, дали задачу школьную, где все решение было в 1 строчку, а мы давай матрицы строить, графики, системами уравнений решать
Аноним 2016/03/19 13:41:41  №692348 272
>>692344
В val() передавать то что мне надо? Например есть такое <div class="data">100</div>
При нажатии на чекбокс мн нужно чтобы к тому что в диве прибавилось 10. Что тогда в val() писать?
Аноним 2016/03/19 13:42:26  №692349 273
14583841466710.jpg (32, 600x396)
396x600
>>692345
Не нужно вычитать платёж сразу! Я же писал тебе два раза!

>>692347
То да. Но я сам через такое же прошёл с этой задачей в конце прошлого года, могу понять братишек. Я помню почти все значения $creditBalance наизусть, кроме копеек, конечно, я не настолько поехал.
Аноним 2016/03/19 13:56:56  №692357 274
>>692348
ты не написал что надо передавать. в val идет если у тебя инпут, если хтмл то и пиши хтмл. загугли просто эти две функции.
Аноним 2016/03/19 13:57:38  №692358 275
>>692349
так почему? цикл прошел, в кредите у нас сразу сумма за вычетом платежа.

Аноним 2016/03/19 14:16:15  №692374 276
>>692330

Вот попробуй прочитать свой код:

> $credit = $credit + ($credit * $stavka);
> $credit = $credit - $payment + $komissiya;
Прибавляем к кредиту проценты, вычитаем платеж (5000) и прибавляем комиссию.

Вот уже тут видна ошибка. Если ты взял кредит на 1000 то не должен платить 5000.

То есть не спеши платить по кредиту. Посмотри чему равен долг и посчитай сколько ты платишь в этом месяце.

Ну и дальше ты еще неправильно прогнозируешь сумму долга на следующий месяц:

> if ($credit + $komissiya < $payment){
Если кредит + комиссия (а где проценты?) меньше ежемесячного платежа....

Надо стереть код и написать заново.
Аноним 2016/03/19 14:17:37  №692375 277
>>692348

Тебе надо изучить яваскрипт, например learn.javascript.ru и не забивать тред вопросами "сделайте мою работу за меня".
Аноним 2016/03/19 14:19:10  №692379 278
>>692358
Надо это делать внутри условия.
Если это больше месячной платы - вычитаем месячную плату.
Если это меньше месячной платы - вычитаем только это.
Всё, больше ничего тут не нужно.
Аноним 2016/03/19 15:12:14  №692398 279
https://github.com/foobar1643/student-list

Исправления по студентам из прошлого треда.

>>691323
> $auth = $regHelper->getUpdatedFields($auth, $student);
>Это на мой взгляд можно было сделать лучше. Не создавать отдельный объект студента для передачи в update, а передавать туда $student. Алсо, название переменной auth плохое.
Там идея была в том, чтобы загрузить студента из БД, и заполнять его из POST, только если в форме присутствует поле, ты мне об этом писал пару тредов назад. Проблема была из-за того что объект студента все равно заполнялся из формы, независимо от того авторизирован он или нет. И для этого я сделал отдельный объект студента который никак не менялся (кроме как перед заполнением). Сейчас я сделал по другому - чтобы не менять весь алгоритм заполнения формы, я немного поменял функцию заполнения модели студента из POST. Наверное так нужно было сделать с самого начала, просто я об этом тогда не подумал.

>Давай поскорее добьем задачу и пойдем дальше.
У меня почти готов файлообменник на слиме, я делал его паралельно с студентами, там осталось только мелкие баги пофиксить и комментарии к файлам доделать. Пользуясь случаем, задам пару вопросов про оформление на гитхабе и поиск.
1. Я сделал поиск через сфинкс, нужно ли в репозиторий включать мой sphinx.conf с настроенными индексами, или лучше оставить все заполнение для людей которые будут устанавливать приложение?
2. Так же, переиндексацию я сделал через cron, для этого пришлось написать CLI скрипт на PHP который очищает реалтайм индекс при переиндексации (как очистить rt индексы из командной строки я не нашел). Нужно ли включать его в репозиторий (с bash скриптом для крона) или опять же, это оставить для тех кто устанавливает?
3. Если приложению не удалось подключится к поисковому демону (сфинкс просто не устанавливали, например), в этом случае достаточно будет вывести ошибку 503 и написать что подключения к демону нет, или лучше будет на странице с поиском вывести заглушку "Поиск временно недоступен" с кодом 200 и основной навигацией приложения?

Алсо, спасибо тебе за то что ты делаешь.
Аноним 2016/03/19 15:16:10  №692401 280
Аноним 2016/03/19 15:18:52  №692408 281
Аноним 2016/03/19 15:28:54  №692415 282
>>692408
Если смотреть по мануалу, должно быть:
$random = array_rand ($answers);
Разве нет?
Аноним 2016/03/19 15:32:40  №692420 283
>>692415
Нет. Тут же написано
http://php.net/manual/ru/function.array-rand.php#refsect1-function.array-rand-returnvalues
>При выборе только одного элемента, array_rand() возвращает ключ для случайного элемента.
В твоем случае переменная $random будет случайным ключом из массива $answers.
Потом ты конечно можешь написать так
>echo($answers[$random]);
Но это уже усложнение, там в мануале еще и примеры использования функции есть.
Аноним 2016/03/19 15:57:51  №692437 284
14583922717110.jpg (157, 550x827)
827x550
>>Это одномерный массив, двухмерный это когда массив в массив вложен.
>>Плохо что исправления - в отдельном массиве, легче ощибиться...
>>Выражения для зделал/зделаю можно собрать в одно.

http://ideone.com/mQRO16 // «Grammar Nazi»

Собрал поиск, описание и исправления в один многомерный массив )
Аноним 2016/03/19 16:26:12  №692462 285
Заебался искать работу.

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

Не могу уже, что делать-то?
Аноним 2016/03/19 16:27:36  №692465 286
>>692462
>>Это не чат! Пожалуйста не флудите, а старайтесь постить только вопросы, решения и ответы. Сколько лет вы не можете найти работу никому не интересно. Высказывайтесь одним большим постом а не цепочкой мелких
Аноним 2016/03/19 16:29:13  №692467 287
>>692465
ничего, переживешь, ничего с тобой не случится
Аноним 2016/03/19 17:28:15  №692534 288
>>692245
Если использовать твой пример, то должно получиться следующее: я хочу отобрать шутки, которые относятся сразу к нескольким категориям.
>>692171
Ну, я тоже подумал про подобный метод. Считать количество фильтров, передаваемых пользователем, затем выбирать группы, содержащие столько строк, сколько передано фильтров.
Джойнить два раза - зачем? А если будет передано десять фильтров?
>>692208
Получается то же самое, что и при использовании OR в условии в моём запросе.

Аноним 2016/03/19 17:38:28  №692541 289
А что тут не так? http://ideone.com/IgCOr6
И почему он выводит информацию не один раз, а каждый раз когда выполняет тело цикла?
Аноним 2016/03/19 17:39:51  №692543 290
>>692541
>И почему он выводит информацию не один раз, а каждый раз когда выполняет тело цикла?
Потому-что у echo внутри цикла, гений.
Аноним 2016/03/19 17:40:11  №692544 291
Аноним 2016/03/19 17:49:09  №692553 292
Аноним 2016/03/19 17:49:42  №692554 293
Аноним 2016/03/19 17:53:00  №692556 294
>>692554

for ($i=0; $i <= $halfLength; $i++) {
if (mb_substr($text, 1) == mb_substr($text, -1))}
echo "Ура, это {$result}\n";

Почему тогда он ругается?
Аноним 2016/03/19 17:53:43  №692557 295
14583992231900.jpg (63, 799x507)
507x799
>>692541
Скрыл твой пост из-за ожидания собственного бугурта.
Советов ты не слушаешь, делаешь всё так, что ни черта не понятно. Пусть аноны с более крепкими сраками тебе помогают.
Аноним 2016/03/19 17:53:54  №692559 296
>>692556
Я не знаю почему он ругается, я ведь не вижу сообщения об ошибке.
Аноним 2016/03/19 17:54:54  №692561 297
>>692556
>>692559
Очевидно он не поставил точку с запятой после скобки. И интерпретатор об этом написал, кстати. Очень плохо что ты не умеешь или не хочешь понимать сообщения об ошибках.
Аноним 2016/03/19 18:04:51  №692570 298
Аноним 2016/03/19 18:06:00  №692573 299
>>692570
Точку с запятой убери перед фигурной скобкой.
Аноним 2016/03/19 18:08:22  №692576 300
>>692573
Туплю. Но теперь хоть слово и удовлетворяет условию, оно почему-то не работает. И как убрать повторение того, что выводиться в echo?
Аноним 2016/03/19 18:10:16  №692578 301
>>692576
>И как убрать повторение того, что выводиться в echo?
Не пихать его в цикл.
Аноним 2016/03/19 18:10:40  №692581 302
>>692576
Пробелы-то надо убирать из того текста, который получился у нас после перевода в нижний регистр.
Где логика в твоём решении?
>>692576
break поставь. Только от этого не исправится неправильное решение.
Аноним 2016/03/19 18:11:51  №692584 303
>>692581
>break поставь.
Ерунду советуешь.
Аноним 2016/03/19 18:13:38  №692585 304
>>692584
Чому? Если буквы сразу не одинаковые, то всё, ломать цикл, выводить "Не палиндром". Разве нет?
Аноним 2016/03/19 18:16:00  №692587 305
>>692585
Там нужен Break, но совсем не для того, чтобы
>убрать повторение того, что выводиться в echo
Сейчас он поставит его бездумно и у него echo будет выводиться один раз, как он и хочет, но не потому что так правильно, а потому у цикла будет всего одна итерация.
Аноним 2016/03/19 18:16:45  №692589 306
>>692587
>Только от этого не исправится неправильное решение.
Аноним 2016/03/19 18:17:43  №692591 307
>>692589
Ну ты же посоветовал ему поставить break как решение именно этой проблемы, хотя break тут не причем.
Аноним 2016/03/19 18:20:11  №692595 308
А так почему не правильно?
http://ideone.com/IgCOr6
Может ли быть из-за того, что сравниваются только первый и последний символ? При сравнение не увеличевается число?
Аноним 2016/03/19 18:20:55  №692599 309
>>692591
Хм, что-то не пойму тебя.
Там именно нужен break и в правильном решении. Потому что как только символы не совпали - всё, выходим из цикла и выдаём "Не палиндром".
Именно в этом условии - когда символы не равны друг другу, а не в другом условии, когда они равны.
Аноним 2016/03/19 18:22:57  №692602 310
>>692595
Вот тебе задача попроще:
выведи с помощью цикла по одной букве из строки с начала и по одной с конца.
Аноним 2016/03/19 18:23:00  №692603 311
>>692595
>mb_substr($noSpace, 1)
Какой это символ с начала строки, по-твоему?
Ожидаю, что будет дальше.
Ведь там нигде нет $i, ох лол.
Аноним 2016/03/19 18:38:10  №692618 312
14584018907880.png (71, 1059x610)
610x1059
>>691466
> Если это граф - то что является узлами и связями.
Как то так.
Я понял, что это херовый вариант.
Аноним 2016/03/19 18:55:43  №692632 313
14584029432610.jpg (45, 730x584)
584x730
Аноним 2016/03/19 19:34:47  №692667 314
>>692618

Анончик, ты конечно красивую картинку добавил, но так и не написал что значат в твоем графе цифры на вершинах и связах. Вот вершина с цифрой 8 - это что? Сумма?
Аноним 2016/03/19 19:42:56  №692671 315
Ну ептить. Проблема кредита в айфоне была в том, что я последний платеж считал не верно. Тьфу.
Нужно было всего-то создать переменную с последним значением кредита с % и комиссией и вычесть ее из суммы остатка кредита.
Аноним 2016/03/19 19:56:30  №692679 316
>>692667
> Вот вершина с цифрой 8
Эта заданная сумма. Следующая вершина, это заданная сумма минус номинал банкноты (вес связи) и т.д. до нуля, причем подсчитывая сколько раз взяли банкноту. Вообще это херовый вариант.
Аноним 2016/03/19 20:00:07  №692681 317
Аноним 2016/03/19 20:36:52  №692715 318
>>692671
Ссылку на код в студию.
Мало добиться правильного значения, там ещё и оптимально всё должно быть, без копипаста и лишних телодвижений.
Аноним 2016/03/19 21:22:35  №692783 319
Какой командой ставится пхп в убунту?
Аноним 2016/03/19 21:31:59  №692792 320
Аноним 2016/03/19 21:44:42  №692813 321
>>692792
Cейчас установлено php5 на убунту, пишу:

sudo apt-get update && apt-get purge php5-fpm && apt-get --purge autoremove && apt-get install php7.0-fpm php7.0-mysql php7.0 libapache2-mod-php7.0
sudo service apache2 restart

и пишет невозможно заблокировать невозможно заблокировать var/lib/dpkg
Аноним 2016/03/19 21:56:44  №692820 322
А есть архив? Нужны 69 и 70 треды.
Аноним 2016/03/19 21:59:04  №692823 323
В пхп нету функции then после if?
Аноним 2016/03/19 22:17:59  №692834 324
>>692813
>невозможно заблокировать var/lib/dpkg
Очевидно что то пользуется dpkg. Нужно это закрыть. Можно попробовать полечить перезагрузкой.
Аноним 2016/03/19 22:21:04  №692839 325
>>692681
>Иди и изучи основы HTML. Это займет у тебя максимум пару дней.
ок
Аноним 2016/03/19 22:46:47  №692866 326
Закинул в папку var/www/html info.php, где запускается код <?php
phpinfo();
?>

Когда в браузере запускаю localhost/info.php то выводит чисто код пхп-документа. В чем дело?
Аноним 2016/03/19 22:49:51  №692871 327
Аноним 2016/03/19 22:50:29  №692872 328
>>692866
AddHandler прописал в httpd.conf для .php-файлов?
Аноним 2016/03/19 22:51:48  №692876 329
>>692871
Там виндоус же,а у меня убунту
Аноним 2016/03/19 22:52:32  №692878 330
>>692872
А как это сделать?
Аноним 2016/03/19 22:53:46  №692879 331
Аноним 2016/03/19 22:57:30  №692883 332
Фронтенд-макака, не занимавшаяся бекэндом, вкатывается. Как можно реализовать такую хуйню: сервер получает json с определенными данными и создает отдельный файл с содержимым json на стороне сервера?
Аноним 2016/03/19 23:04:23  №692887 333
>>692883
Google, название-языка-программирования json parse
Аноним 2016/03/19 23:43:49  №692909 334
Аноним 2016/03/20 00:04:07  №692927 335
Пасаны, как вам?
http://www.emoji.esy.es/
[кто не понял, выбираем смайлики и пишем текст — получаем код, который можно вставить в личные сообщения вк или в комментарии к записям, например]
Аноним 2016/03/20 00:11:34  №692941 336
>>692813
>>692834

Это значит нет права рута. sudo применяется только к первой команде.

>>692820

Держи, только форматирование побилось немного:

http://www.mediafire.com/download/s12ktalf8r8rl48/pr-threads-69-70.zip
http://rghost.ru/88vjBYS7y

>>692866

В Апаче должен быть модуль-посредник, который будет передавать запросы интерпретатору PHP на выполнение. И он должен быть включен и настроен в конфиге: http://php.net/manual/ru/install.php

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

Аноним 2016/03/20 00:12:24  №692942 337
>>692823

Она не нужна - then начинается сразу после условия.
Аноним 2016/03/20 00:12:53  №692943 338
Я тот, кто присылал класс Announcement на рецензию. Внимательно прочитал ваши ответы, вы меня разгромили.
Скачал с рутрекера книжку про ООП в PHP. Намереваюсь осилить.
http://rutracker.org/forum/viewtopic.php?t=5109503
Годнота?
Аноним 2016/03/20 00:15:00  №692945 339
>>692927
Стремно грузится - пропиши смайликам ширину/высоту.
Не очень ясный интерфейс.
Алсо, ничто не мешает тебе сделать предпросмотр. И показывать не код смайлика в полях, к тому же испорченный, а сам смайлик.
Ну и буквы жуткие получаются.
Аноним 2016/03/20 00:17:34  №692947 340
>>692943
Да. Она и в шапке указана.
Аноним 2016/03/20 00:20:09  №692951 341
>>692945
Буквы ага, потому что сам забивал. Нашел где-то нормальный пиксельный шрифт, сделаю лучше.
Насчет предпросмотра не очень понял — это как?
Аноним 2016/03/20 00:23:59  №692957 342
Помогите, аноны. Меня все еще интересует как получить значения (из value="значение(int)") всех отмеченных чекбоксов на странице через Джабаскрипт. Все что нагугливаю не работает(((
Аноним 2016/03/20 00:24:22  №692959 343
>>692947
Ой, спасибо, проглядел.

>>692951
>Насчет предпросмотра не очень понял — это как?
Ну что тебе мешает обновлять не значение value поля, а src картинки?
Чтобы вместо поля был смайлик. Код ничего не говорит человеку.
Аноним 2016/03/20 00:26:12  №692961 344
>>692957
document.querySelector('input[checked]').value крути в цикле
Аноним 2016/03/20 00:26:43  №692962 345
>>692961
document.querySelector('input[checked]')[ i ].value

убери пробелы
Аноним 2016/03/20 00:27:37  №692964 346
document.querySelectorAll

fastfix
Аноним 2016/03/20 00:33:24  №692970 347
>>692961
>>692962

Не очень правильный совет. В форме можно получить элемент или их коллекцию по имени через formNode.elements

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

Аноним 2016/03/20 00:43:09  №692982 348
Ну бля, почему эта хуета ничего не возвращает?

<script>
var checked = document.querySelectorAll("input[type='checkbox']:checked");
for (var i = 0; i < checked.length; i++) {
str+=checked.value;
}
alert(str);
</script>
Аноним 2016/03/20 02:11:54  №693075 349
Аноны, решаю учебник, дошёл до Толстого, начал решать - получилось вот это http://ideone.com/fBOwbB
Хоть всё и работает, я уверен, что это единичный случай, который развалится, если добавить к нему хотя бы одно слово.
Поясните чем можно сократить код так, чтобы не пришлось прописывать рандом для каждой переменной.
Аноним 2016/03/20 02:42:16  №693090 350
>>692982
Потому что твоя переменая str доступна только внутри цикла, и вывод аlert ничего не знает о ней.
Аноним 2016/03/20 02:46:26  №693093 351
14584311863010.jpg (91, 570x676)
676x570
Задача на стихи https://ideone.com/xtHOzm
Почему идеон ругается? Ставит предупреждение, но работает. В чем я неправ?
Аноним 2016/03/20 03:22:01  №693100 352
14584333214390.jpg (255, 550x733)
733x550
А вот и палиндром подъехал. Может что-то сократить можно, хотя вроде и так максимально коротко старался.
https://ideone.com/EZ8v2o
Ответы 16 марта Аноним 2016/03/20 05:25:38  №693118 353
>>689598

А ты проверял свое решение на списке номеров из учебника? Я как минимум вижу что наличие знака + в номерах вроде +71234567890 никак не проверяется.

Не надо там строить сложнейшие выражения. просто проверь что идет +7 или 8, а за ними ровно 10 цифр вперемешку с любым числом скобок/минусов/пробелов

И проверь на большом списке номеров из учебника.

>>689627

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

>>689704

Совет по коду: Эти строки повтряются:

> $paymentTotal = $paymentTotal + $creditBalance;
> $creditBalance = $creditBalance -$monthlyPayment;
> echo "{$month} месяц спустя: долг

Попробуй убрать повторы. Также, if можно заменить на вызов функций min или max.

>>689822

Я слышал в языках с отступами инлайновые теги вроде span неудобно писать.

Ну и мимопроходя, замечу что в верстке странно расставлены теги (h1-h2-h3-h4 - заголовков больше чем обычного текста), подозрительно много дивов и бессимтемно составлены названия классов

Алсо логичнее вкладывать a внутрь h1.
Ответы 16 марта Аноним 2016/03/20 05:26:04  №693119 354
>>689885

> Сделано в предыдущей части задания в 2 вариантах.
Старые версии задачи я проверил в старом же треде.

>Может быть можно было одним выражением, но прогнал дважды через preg_replace, вернее скормил ему массивы.
> Первый раз заменяем пробелы, скобки и проч.символы на пустую строку; второй раз заменяем +\s?7 на 8.
Можно и так, почему нет. Нормализация номеров сделана верно.

Почитай замечания к предыдущим решениям.

>>689895

Ок, верно, хотя для букв можно было вместо (|||) применить квадратные скобки

>>689908

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

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

Здесь мы ищем емайл в тексте - нужно определиться с правилами.

>>690012

Ты плохо знаешь PDO и это мешает тебе полноценно использовать его возможности. Полистай мануал по нему, может что интересное найдешь: http://php.net/manual/ru/book.pdo.php

Как минимум цикл с fetch бессмысленный - это можно сделать лучше.

Насчет статических методов и бессмысленных классов вроде Db::connect - избавляйся от них. Я знаю, такой код можно увидеть в других учебниках, но это лишь говорит о том что их авторы не осилившие ООП.
Ответы 16-17 марта Аноним 2016/03/20 05:26:26  №693120 355
>>689938

Вот я вижу у тебя эту строчку, написанную аж 2 раза:

> $creditBalance = ( $creditBalance $percent ) + $servicePayment - $monthlyPayment;

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

Лучше всего написать код самому.

Твой код потому неправильно работает и дает неправильный ответ, должно быть 61270.

Вот правильный алгоритм:

- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000

>>690068

> // не могу придумать внятное имя
В линуксовой программе grep это называется context - думаю, хорошее название, даже по русски говорят "в каком контексте (=окружении) встречается это слово"

Вообще, контекст конечно можно еще реализовать по другому. У функции preg_match_all есть опция, которая при нахождении совпадения возвращает отступ от начала строки в байтах. Можно преобразовать этот отступ в число символов и взять N символов справа и слева. Но это сложно.

> .{0,{$offset}}\b\w[жш]ы\w*\b.
Вот сложновато, я бы просто написал .{0,$offset}[жш]ы.{0,$offset}

Так, в общем, хорошо сделано.
Ответы 16 марта Аноним 2016/03/20 05:26:52  №693121 356
>>690343

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

Вот в википедии написано:

> https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_OSI
> Назначение модели OSI состоит в обобщенном представлении средств сетевого взаимодействия. Она разрабатывалась в качестве своего рода универсального языка сетевых специалистов, именно поэтому её называют справочной моделью

> Так вот строение интернета и сетевые протоколы я как раз и не понимаю. Надеюсь на подробный ответ.
Есть пасты (возможно ты уже видел их):

http://pastebin.ru/dnO7PZfq
http://pastebin.ru/KO4E1mB4

Есть такие задания:

1) изучи команду tracert/traceroute. Возьми какой-нибудь сервер, например reddit.com, и определи через какие города и страны идут пакеты от тебя к нему. С помощью traceroute ты определяешь путь, а далее с помощью whois (например whois7.ru) определяешь местоположение узлов.

Попробуй сделать traceroute для узла bad.horse

Понимаешь ли ты алгоритм работы программе traceroute? Как она определяет путь?

2) посмотри что выведет команда ipconfig, route print, arp -a (если ты под windows) или ifconfig, route -n, ip route list, arp -a под линукс. Понимаешь ли ты что такое маска сети? Зачем она нужна? Шлюз по умолчанию? Зачем нужен ARP? Как компьютер получает сетевые настройки когда подсоединяется например к вайфай сети?

Как работает DHCP? Есть ли риски безопасности при использовании DHCP в публичной сети? Может ли сетевая карта иметь несколько IP адресов? Может ли компьютер иметь несколько IP адресов? Видит ли гугл твой MAC адрес когда ты заходишь на его сайт? Видит ли гугл IP адрес твоей сетевой карты? Зачем нужен NAT? Что такое "серые" IP? Легально ли их использование?

Как NAT понимает, кому в локальной сети передавать приходящие из интернета пакеты если они все адресованы одному и тому же IP? Какой у него алгоритм работы?

Зачем нужен маршрутизатор/роутер? Можно ли подсоединить к интернету больше 4 млрд устройств (то есть больше числа возможных Ipv4 адресов)? Чем Ipv6 оличается от IPv4? Работает ли у твоего провайдера IPv6? Правда ли что UDP лучше чем TCP и скоро заменит его?

Что такое автономная сеть (AS)?

Можешь ли ты кратко (кратко!) написать что происходит когда ты пытаешься соединиться с удаленным хостом, например через telnet google.com 80? Какие пакеты отправляются и что с ними происходит? Какие протоколы используются? Кратко.

3) соединись с каким-нибудь сайтом через telnet/netcat и отправь вручную GET запрос, если конечно ты раньше этого не делал. Команда выглядит примерно как cat request.txt | nc -vv google.com 80 или telnet google.com 80 < request.txt

4) далее, освой утилиту netcat, в линуксе она есть, для windows можно попробовать версию отсюда https://github.com/diegocr/netcat или отсюда https://eternallybored.org/misc/netcat/ или отсюда https://nmap.org/ncat/

В одной консоли открой любой порт на прослушивание, в другой консоли подсоединись к нему и перешли какую-нибудь строку.

5) освой программу wireshark (c ГУИ, кроссплатформенный) либо tcpdump (линукс, консольный). Изучи, какие пакеты принимает и отправляет твой компьютер. Позапускай разные программы и посмотри, что они шлют в интернет. Попробуй через telnet/netcat куда-нибудь соединиться и что-нибудь отправить, попробуй сделать ping или traceroute. Также, возможно ты увидишь широковещательный мусор который шлют твои соседи по сети провайдера (если только ты не за роутером).

В Wireshark ты видишь заголовки разных уровней: и заголовки протокола TCP, и IP, и Ethernet заголовки, в которые пакет завернут как луковица.

Если есть какие-то вопросы, уточняй.
Ответы 17 марта Аноним 2016/03/20 05:27:11  №693122 357
>>690361

Собака уберет не только варнинги но и настоящие ошибки. Это не то что нам надо.

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

$node->removeAttribute('x');

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

Ну представь простое правило. Например, если после тега h1 идет div с классом .some-div, то надо добавить их общему родителю класс .has-h1-and-some-div. Или например запрет на размещение картинок внутри тега h1. В DOM это решается довольно простым и читаемым кодом, а что насчет твоего подхода? Рискнешь такое напсиать?

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

И код очистки тегов/атрибутов по списку, написанный на DOM, будет простым и лаконичным. Алгоритм там такой:

Загружаем HTML код в дерево

Обходим дерево, для каждого узла:
- если это запрещенный узел, удаляем его, оставляя содержимое
- если это разрешенный узел, обходим атрибуты, для каждого
-- есди это запрещенный атрибут, удаляем
-- если разрешенный, и содержит ссылку, проверяем ее формат

Выгружаем дерево в HTML

Вот посмотри на этот алгоритм. Это 2 цикла + 2 ифа. Там конечно будут вспомогательныей функции, но сам алгоритм элементарен. Я его написал не думая за полминуты. Твой алгоритм можно описать за полминуты? В этом сила ДОМа. Плюс, там есть XPath (а поверх него можно реализовать поиск по CSS селектору).

>>690373

На эту модель можно натягивать более высокоуровневые протоколы - например REST API, поверх HTTPS, который передает данные поверх SSL, работающем поверх TCP/IP. Для REST API транспорт это HTTPS.
Ответы 17 марта Аноним 2016/03/20 05:27:30  №693124 358
>>692209

> От компа по кабелю бегут импульсы, коммутатор их считывает, читает мак адрес. Если такого хоста нет в коммутаторе, то он рассылает на все порты полученный фрейм и ищет нужный.
Тут есть 2 уровня: Ethernet и IP.

Ethernet - это технология связи небольшого числа близко расположенных компьютеров в локальную сеть. Мы ставим коммутатор, и кабелями втыкаем в него компьютеры (в древние времена коммутаторов не было, был просто один общий кабель, к которому подключались компьютеры). Теперь они могут пересылать друг другу пакеты по MAC адресу (это серийный номер сетевой карты, гарантированно разный у разных устройств). Принцип работы примерно такой:

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

Теперь твоя очередь подумать и ответить на вопрос:

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

Давным-давно были чистые Ethernet-сети (например сеть внутри компании), без других протоколов вроде IP, но сейчас конечно их никто в чистом виде не использует.

> вланы
Влан это просто имитация рздельных ethernet сетей программно. То есть пакеты идут по одному кабелю, но коммутатор фильтрует их, и не позволяет узлам из одного влана общаться с узлами из другого, создавая видимость что у нас 2 несвязанных отдельных сети. Все это делается прозрачно для узлов, они не могут никак проверить реально ли они изолированы или просто в отдельном влане.

Идем далее, на уровень IP. Протокол IP позволяет нам связать несколько сегментов Enternet в одну общую IP-сеть. В отличие от технологии Ethernet, число компьютеров в этой сети и расстояние между ними может быть большим -
например на нашей планете есть глобальная IP-сеть с миллиардом подключенных к ней устройств. Каждое напрямую подсоединенное устройство имеет уникальный IP адрес и любые 2 устройства могут обмениваться пакетами, указав адрес назначения. Адреса распределяет IANA и это гарантирует их уникальность.

Поскольку ethernet пакет не содержит полей для указания IP адреса, придуман Ip пакет, который вкладывается внутрь ethernet пакета. Почитай в википедии подробнее.

Формально Интернет - это объединение автономных сетей. Автономная сеть - это сеть, которая принадлежит одной организации. Например, сеть провайдера или сеть крупной компании. Организации договариваются об обмене трафиком и таким образом автономные сети объединяются в интернет. Интернет - это не телефонная сеть у которой есть центр и один владелец. Это объединение независимых сетей.

Сети связываются таким образом: между 2 или более соседними ethernet сегментами ставится маршрутизатор (роутер), имеющий 2 или более сетевых карты. Он позволяет пересылать пакеты между сетями. Маршрутизатор знает о соседних маршрутизаторах и знает куда надо переслать пакет в зависимости от его IP адреса. Более того, схема связей может перестраиваться - например при аварии в одном ethernet сегменте роутер может посылать пакеты через другие сегменты. За это отвечают протоколы вроде BGP.

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

Вопросы:

- опиши кратко алгоритм работы роутера сязывающего 2 сети
- есть ли у коммутатора IP адрес? У роутера?
- каким образом компьютер в IP сети узнает свой IP адрес?
- опиши что делает ОС когда программа просит ее отправить IP пакет с такими-то данными на такой-то IP адрес
- если в сегменте ethernet упадет маршрутизатор, связывающий его с другими сегментами, смогут ли узлы в этом сегменте пересылать пакеты друг другу?
- что если компьютер получает пакет в котором указан его мак-адрес, но не его IP? Или наоборот, его IP, но не его мак?
- что такое маска сети?
- что такое широковещательный IP адрес? В чем отличие от широковещательного мак адреса?

Ну и вопросы которые я написал выше.

Аноним 2016/03/20 06:50:47  №693138 359
Еще один нубас вкатился

4.1 https://ideone.com/qUpQUI
5.1 http://ideone.com/sMgDgr
5.2 http://ideone.com/OEDO0b
5.3 http://ideone.com/LKM2eh
5.4 http://ideone.com/sw6DJA
5.5 http://ideone.com/SUvW2G
5.6 https://ideone.com/nYMiVc
http://ideone.com/O8hBUP - шифровка\дешифровка
http://ideone.com/kG9U2m - полиндром ( но он не правильно сделан, не могу понять где ошибка)

Довольно сложно с нуля вкатываться, но очень интересно :3
Аноним 2016/03/20 07:09:49  №693140 360
Аноним 2016/03/20 08:02:19  №693144 361
Аноним 2016/03/20 13:10:48  №693221 362
14584686486940.jpg (73, 790x494)
494x790
Айпад в кредит. https://ideone.com/e8QRaC
Все думал, почему же не работает. Только перечитав дошло, что в отличие от JS функции в PHP не видят внешних переменных.
Аноним 2016/03/20 14:09:10  №693257 363
Боже ну CSS и параша, люди, спасайтесь, бегите из фронтенда.
Аноним 2016/03/20 14:09:57  №693258 364
>>693257
Неосилятор в треде, я спокоен.
Аноним 2016/03/20 14:15:07  №693262 365
>>693258
Как раз только что осилятор казалось бы элементарной задачи нерешаемой без уродского костыля
Аноним 2016/03/20 14:28:26  №693267 366
Народ , поясните за связи в БД , пожалуйста..
Покажите лайтовый примерчик , что бы я понимал , что да как.
Есть у меня допустим таблица новостей , а в ней поле category,
и как мне сделать что бы category зависело допустим от другой таблички , и я сюда бы просто подставлял 1/2/3/4/ , а оно брало инфу из другой таблицы?
Аноним 2016/03/20 14:34:06  №693271 367
Пиздец блять, охуенно порешал задачку про айфон. Сидел, тупил, расплакался из-за своей тупости, умылся, забил. У меня даже мысли в голове выстроить не получается, одна каша в голове, а теперь она ещё и болит. Завтра ещё попробую, когда голова пройдет. Если это для тех, кто с нуля, то я, наверное, пиздец дебил.
Аноним 2016/03/20 14:37:42  №693273 368
>>693271
Ты все решишь, няш :3
Еще один ОЙ ПОГЛАДЬТЕ ПО ГОЛОВКЕ, СКАЖИТЕ ЧТО ВСЕ ХОРОШО И Я НИКАКОЙ НЕ ГЛУПЕНЬКИЙ(((
Аноним 2016/03/20 14:38:54  №693274 369
>>693271
Тебе мотивационных видосиков накидать или что?
Аноним 2016/03/20 14:42:18  №693278 370
>>693273
>>693274
Я написал сюда именно ради вас, хуесосы. Благодаря таким постам появляется мотивация.
Аноним 2016/03/20 14:48:44  №693281 371
Аноним 2016/03/20 14:55:27  №693288 372
>>693281
да я тупой блять. я не понимаю все равно. мне бы примерчик лайтовый , было бы найсово.
Сумма Прописью Аноним 2016/03/20 15:23:32  №693309 373
Аноним 2016/03/20 17:14:43  №693411 374
Почему все так хвалят PHPstorm?
Забагованная же прога. Даже в этом треде 100500 раз упоминалось что некоторые вещи только из-за него и не работают. При этом есть хайп, есть рекомендации от хороших лекторов...
Аноним 2016/03/20 17:23:00  №693417 375
>>693411
>Забагованная же прога.
Приведи пример.

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

Пхпшторм очень мощная ИДЕ в которой есть интеграция практически со всеми фреймворками разного назначения, начиная от PHPUnit, заканчивая устаревшими версиями какого-нибудь Codeigniter. Ну и так как это ИДЕ, там присутствуют многие другие функции которых ты не найдешь в обычном текстовом редакторе.

А вообще это дело вкуса, мне например удобнее писать в редакторе, деплоить, тестировать и дебажить отдельными средствами.
Аноним 2016/03/20 17:33:41  №693425 376
http://learn.javascript.ru/xhr-longpoll не понял как тут реализована серверная часть? Куда сохраняются сообщения? Допустим я хочу сделать серверную часть на пхп, мне ведь нужно вставлять записи в бд или хотябы в файл, чтобы другой юзер мог получить его гет запросом. Тут это выглядит так, будто один пользователь отправляет сообщение напрямую другому, без сохранения куда-либо.
Аноним 2016/03/20 18:00:50  №693452 377
14584860510680.jpg (293, 1716x778)
778x1716
>>689513
Привет, оп, посмотри студентов.
https://github.com/greenTea242/Student-list
То, что я переделал и какие у меня вопросы:

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

> Также функция подсветки должна правильно делать htmlspecialchars, чтобы символы вроде & или < в HTML коде выводились корректно.
Как сделать так чтобы htmlspecialchars не съел тег <mark>? Я пропускаю два значения через функцию paintFound заранее, а только потом его вставляю. Правильно?

Пикрелейтед 1.
Пришлось поставить public свойства вместо private, потому что в последнем случае (private свойства) при добавлении модели и превращении ее в массив в ключи влезает имя класса, что вызывает у pdo ошибки. Могут ли свойства быть public или таки неправильно?

https://github.com/greenTea242/Student-list/blob/master/public/register.php#L45
if($cookie) - оставляю, так как иниициализация произойдет, если будет удовлетворено еще одно условие $validator->isAbiturientIDExist($_COOKIE["abiturientID"]). Новый метод который проверяет наличие данного куки в бд.

Добавил удаление лишнего пробела для строки запроса из двух слов вида "Иван Иванов". Так же смог конкатировать несколько столбцов по совету анона из прошлого треда и теперь тот самый иван иванов у меня находится и обводится(появился explode в ViewHelper::paintFound. Обводится Иван Иван(конец обводки)ов.

> require_once "../autoload.php";
> require_once "../src/config.php";
> require_once "../src/ini.php";
> Мне кажется хватило бы одного реквайра.
Первые два рекваера делаются в последнем.

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

> Проще сделать наверно через min/max. Или сделать функцию исправления числа страниц, которая проверит что она принимает разрешенные знаечния.
Перенес условие как метод в pager.

Остальные советы тоже постарался сделать, просто не все расписал. Боюсь неправильно исключения сделал, хотя вроде работает.
Аноним 2016/03/20 18:06:35  №693463 378
>>693271
Ты ведь не в голове решал - показывай код, поможем разобраться. Эту задачу многие не могут решить с первого раза. Неделя над ней, когда идёшь с нуля, - это норма.
Аноним 2016/03/20 18:55:15  №693505 379
>>689537 (OP)
А как пересчитать количество всех совпадений не по строкам, а по буквам?

input
Петушок
Порошок

out
шок (2)
п (2)
о (1)
...
Аноним 2016/03/20 18:59:14  №693508 380
Почему стили в линуксе не удается в слиме подключить. стили лежат в одной папке со вью, пробую добавить __DIR__ все равно не видит.
<!DOCTYPE html>
<head>
<link href="style.css" rel='stylesheet' type='text/css'/>
<title>GuestBook</title>
<meta charset="UTF-8">

</head>

<body>
Аноним 2016/03/20 19:03:35  №693512 381
>>693508
Открой дебаггер в хроме и посмотри куда указывает ссылка. Если браузер что-то не может загрузить, ошибка вместе с ссылкой будет в консоли. От этого уже сможешь понять что у тебя не так, и указать абсолютный путь, если нужно.
Аноним 2016/03/20 19:05:37  №693513 382
Аноним 2016/03/20 19:11:26  №693515 383
>>693513
Использовать __DIR__ в HTML неправильно, наверное. В случае с слимом лучше указать абсолютный путь от корня сайта, например:

<link href="/GuestBook/views/style.css" rel='stylesheet' type='text/css'/>
Будет сформировано как
http://localhost/GuestBook/views/style.css

И еще, рекомендую почитать урок ОПа про структуру URL
https://github.com/codedokode/pasta/blob/master/network/urls.md
Аноним 2016/03/20 19:17:58  №693517 384
>>693513
А вообще я понял, дело в том, что там виджет (форма логина через фб) автоматом ставит хедер со стилями и его уже не перепишешь.
Аноним 2016/03/20 19:21:36  №693520 385
>>693515
Да там из-за фейсбука хедер другой просто.
Аноним 2016/03/20 19:49:59  №693538 386
>>693121
>>693124
> каждая подключеннная к сети сетевая карта имеет уникальный IP адрес
Уникальный ли? Я уже встречал такое, что файлообменник ругался на то, что с моего айпишника уже качали и надо подождать.

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

> Понимаешь ли ты алгоритм работы программе traceroute? Как она определяет путь?
traceroute посылает ICMP-пакеты на близжайший маршрутизатор со значением "время жизни" равному 1. Далее маршрутизатор отправляет обратно ответ, что "время жизни" пакета истекло, и он не в состоянии отправить его дальше. Таким образом traceroute увеличивает каждый раз "время жизни" пакет на 1, и соответственно пакет достигает более дальнего маршрутизатора. Пакет достигает конечного хоста, при этом в ICMP-пакете указан заведомо несуществующий порт, поэтому хост отдает ответ, что порт не доступен. По такому сообщению traceroute и узнает об окончании трассировки. Все верно я понял?

> посмотри что выведет команда ipconfig, route print, arp -a (если ты под windows) или ifconfig, route -n, ip route list, arp -a под линукс
ifconfig выводит мои сетевые интерфейсы, один из которых так называемый loopback. Я правда не совсем понимаю, доходит ли пакет до маршрузитора, когда я отправляю пакет по адресу 127.0.0.1. В теоретической части я читал, что если пакет адресата содержит тот же мак-адрес, то маршрутизатор его отбрасывает. Считается, что данная информация (в пакете) уже известна хосту.

route -n что-то не то выдает. У меня внутренний ip адрес своей сети, который у каждого офиса в здании свой. В gateway адрес маршрутизатора, куда отправляются пакеты. А route -n выводит Destination 0.0.0.0 почему-то, но Gateway кстати верный.

А вот ip route list как раз все верно выводит, gateway и мой внутренний ip.

arp -a указывает куда я как раз шлю пакеты.

> маска сети
Маска сети помогает найти границы подсети. Не помню как вычисляется. Вроде логическим умножением.

> Шлюз по умолчанию?
А шлюз это же gateway? Куда все офисное здание шлет пакеты. Свитч?

> Зачем нужен ARP?
Сейчас в википедии прочитал. Так это как раз то, о чем я и писал. Если адресат еще неизвестен в коммутаторе, то он отправляет широковещательный запрос на все порты, и ему откликается тот новый хост, передавая мак адрес. Теперь у коммутатора получается полная таблица соответствия мак адресов, айпишников и портов, ну и вланов вроде. Больше коммутатору не нужно будет отправлять широковещательный запрос.

> Как компьютер получает сетевые настройки когда подсоединяется например к вайфай сети?
Вот этого я не знаю. Компьютер наверное отправит пару пакетов, получит ответы и готово.

> Как работает DHCP?
DHCP-сервер это провайдер? При подключении кабеля, он мне автоматически отправляет ip, dns сервер, шлюз?

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

> Может ли сетевая карта иметь несколько IP адресов?
Наверное нет.

> Может ли компьютер иметь несколько IP адресов?
Компьютер да. Изначально уже есть 2 IP-адреса. Локальный и публичный.

> Видит ли гугл твой MAC адрес когда ты заходишь на его сайт?
Нет, потому что на канальном уровне заголовок с MAC-адресом перезаписывается на IP.

> Видит ли гугл IP адрес твоей сетевой карты?
Да, виден. А нет, может и нет. Прочитал следующий вопрос. Прочитал про NAT. Теперь да, смотря как компьютер подключен к сети, через NAT или нет.

> Зачем нужен NAT?
Наверное потому что публичных айпишников ограниченное количество. И теперь понятно почему на некоторых файлообменниках мне писали, что с такого айпишник уже качали и нужно подождать.

> Что такое "серые" IP? Легально ли их использование?
Ну вот как раз айпишники, которые за NAT. И да, более чем легально, я полагаю.

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

А влияет ли это на скорость, ОП?

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

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

> Чем Ipv6 оличается от IPv4?
Количеством цифр в адресе?

> Работает ли у твоего провайдера IPv6?
Да.

> Правда ли что UDP лучше чем TCP и скоро заменит его?
Лучше в плане скорости, но UDP не отвечает за надежность доставки пакетов.

ОП, я что-то тогда не понимаю. У нас все офисное здание за NAT. Так вот google как то умудряется забанить только один компьютер за спам. С помощью кук получается?

> Что такое автономная сеть (AS)?
Это какие то централизованные организации, которые предоставляют доступ к интернету провайдерам? Они же вроде и айпишники выдают.

> Можешь ли ты кратко (кратко!) написать что происходит когда ты пытаешься соединиться с удаленным хостом, например через telnet google.com 80?
Отправляю пакеты на шлюз, тот меняет мой айпишник на свой. Отправляет на следующий маршрутизатор, и так до пункта назначения и обратно.

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

> Также, возможно ты увидишь широковещательный мусор который шлют твои соседи по сети провайдера (если только ты не за роутером).
Да-да, постоянно какие то пакеты идут.

Завтра остальное.
Аноним 2016/03/20 20:14:27  №693554 387
Всем хай, нужна ваша помощь.
Создаю тест с вопросами/ответами/баллами/нужное вставить, делаю это все через формы. Нужна помощь анона в таком вопросе: вот хочу чтобы каждый вопрос выводился последовательно после предыдущего или в зависимости от данного ответа, знаю что нужно использовать js/jquery и хочу ознакомиться, но функций там очень много, потому прошу твоей помощи.
Аноним 2016/03/20 20:31:54  №693571 388
>>693538

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

Это ты не изучил NAT. Если бы у нас была единая глобальная сеть - НАТ был бы не нужен и проблемы с фалообменником не было. Но большинство провайдеров подключают пользователей не напрямую в интернет, а в свою локальную сеть, которая соединена с интернетом через NAT, но не является его частью. Если смотреть снаружи - то весь ваш провайдер виден как 1 или несколько узлов, а локальная сеть и все ее пользоватеои не видны. То есть тут мы имеем 2 независимых IP-сети, связанных шлюзом с NAT.

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

> Все верно я понял?
Да, но тут есть ошибка:

> Пакет достигает конечного хоста, при этом в ICMP-пакете указан заведомо несуществующий порт
В ICMP пакетах нет номера порта. Он посылает TCP пакет.

https://ru.wikipedia.org/wiki/ICMP

> Я правда не совсем понимаю, доходит ли пакет до маршрузитора, когда я отправляю пакет по адресу 127.0.0.1
Нет, пакет отправляенный на адрес интерфейса не идет через другие интерфейсы, а передается напрямую. Аналогично ты можешь отправить пакет на IP своей сетевой карты, и он тоже не покинет компьютер.

> arp -a указывает куда я как раз шлю пакеты.
Вообще-то это кеш ARP запросов. Почитай что это такое.

> Маска сети помогает найти границы подсети.
Зачем это нужно? Выглядит как ненужное усложнение.

> А шлюз это же gateway? Куда все офисное здание шлет пакеты. Свитч?
Это узел имеющий соединение более чем с одним сегментом ethernet и умеющий передавать пакет между сегментами.

Логика тут простая:

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

Эти правила описаны в таблице роутинга. которую выводит ip route list. Если у узла больше 1 сетевой карты, правила чуть усложняются. Также, в этом случае можно включить в ОС настройку, делающую твой компьютер роутером, или наоборот, отключающую эту возможность.

Как узел узнает мак-адрес другого узла - узнай самостоятельно.

Аноним 2016/03/20 20:46:42  №693579 389
>>693538

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

10.0.0.2 - всем: who-has IP 10.0.0.3 ?
10.0.0.3 - 10.0.0.2: это я

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

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

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

- ручная конфигурация адинистратором (самый надежный способ но не всегда удобен)
- получение настроек через DHCP (почитай)

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

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

> DHCP-сервер это провайдер? При подключении кабеля, он мне автоматически отправляет ip, dns сервер, шлюз?
нет, это программа. Запущенная возможно на оборуовании провайдера.


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

> > Может ли сетевая карта иметь несколько IP адресов?
> Наверное нет.
Вообще может. Почему нет?

http://blog.evgenmed.com/2010/05/ip-ip.html
https://moonback.ru/page/2ip-linux

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

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

http://serverfault.com/questions/223601/multiple-mac-addresses-on-one-physical-network-interface-linux

Еще есть такие вещи, как бриджи - когда 2 сетевых карты как бы объединяют 2 сегмента езернет в один, пересылая пакеты между ними - https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%BE%D0%B9_%D0%BC%D0%BE%D1%81%D1%82




Аноним 2016/03/20 21:01:55  №693587 390
>>693538

> > Может ли сетевая карта иметь несколько IP адресов?
> Наверное нет.
Как я написал, может, однако это могут быть не любые адреса. Подумай, какие там есть ограничения.

> > Видит ли гугл твой MAC адрес когда ты заходишь на его сайт?
> Нет, потому что на канальном уровне заголовок с MAC-адресом перезаписывается на IP.
Верно, гугл видит мак ближайшего к нему роутера. Мак адреса видны только внутри сегмента езернет.

>> Видит ли гугл IP адрес твоей сетевой карты?
> Да, виден. А нет, может и нет. Прочитал следующий вопрос. Прочитал про NAT. Теперь да, смотря как компьютер подключен к сети, через NAT или нет.
верно. Кстати при изучении этой темы, не забывай что НАт скорее костыль - по задумке, должна была быть единая сеть - но из соображений безопасности, а также нехватки ип адресов их начали применять. Ну к примеру корпорация может не хотеть чтобы извне можно было посылать всякие пакеты во внутреннюю сеть, трейсроутить, дудосить и сканировать ее - она делает отдельную сеть и ставит НАТ. Конечно это можно сделать и без ната, грамотно настроив файерволл на границе, но это сложно, плюс легко сделать ошибку и открыть ворота.

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

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

> > Что такое "серые" IP? Легально ли их использование?
> Ну вот как раз айпишники, которые за NAT. И да, более чем легально, я полагаю.
Неточно. Серые адреса = глобально не маршрутизируемые адреса, на которые нельзя сдать пакеты через интернет потому что там нет таких узлов. Также, серые адреса не требуют согласований с IANA, просто берешь и исплоьзуешь. Но слать или получать на них пакеты из интернета нельзя - только внутри твоей сети. Выучи их диапазоны наизусть.

Кстати. а что будет если ты будешь в своей домашней сети использовать не серые, а "белые" IP адреса? Ну например назначишь айпаду адрес google.com? Гугл упадет? Айпад сломается?

> Когда роутер принимает пакет, то он на лету меняется IP-адрес отправителя на свой, а также записывает номер порта, чтобы различать присланные пакеты от разных компьтеров
Всего доступно 65535 портов, верно? Теперь вопрос. Если в локальной сети каждый компьютер открывает 100 соединений наружу через НАТ, сколько компьютеров способен обслужить этот НАТ? Хехе, какой я хороший вопрос придумал.

> запись в которой стирается после закрытия соединения.
А как быть с UDP где нет соединений и ICMP где нет портов?

> А влияет ли это на скорость, ОП?
Да, но если в качестве шлюза ставить профессиональное оборудование а не домашний компьютер с пентиумом, то незначительно. Ты ведь и сам можешь измерить задержку через traceroute.

> > Зачем нужен маршрутизатор/роутер?
> Чтобы соединять сегменты сети друг с другом?
Да, чтобы соединять езернет сегменты.

> > Чем Ipv6 оличается от IPv4?
> Количеством цифр в адресе?
По моему там еще были доработки: что-то ненужное выкинули и что-то добавили. Ну и пользователь будет получать не 1 ип адрес а большую подсеть.

> > Работает ли у твоего провайдера IPv6?
> Да.
А у меня нет ((

> Похоже у вас есть доступ только в IPv4 интернет. У вас не получится зайти на сайты использующие только IPv6.
> Ваш DNS сервер (возможно, предоставляемый вашим провайдером) имеет доступ к IPv6 интернету.
Это просто потому я использую гугловский DNS.

> ОП, я что-то тогда не понимаю. У нас все офисное здание за NAT. Так вот google как то умудряется забанить только один компьютер за спам. С помощью кук получается?
Возможно, зависит от конфигурации ната. Я сам изредка вижу капчу, хотя никогда не спамлю и плохого ничего не делаю.


Аноним 2016/03/20 21:06:35  №693590 391
>>693538

Обычно AS это сеть, контролируемая одним юридическим/физическим лицом. Ну там официально более сложно определение: https://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BD%D0%BE%D0%BC%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_(%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82)

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

> > Можешь ли ты кратко (кратко!) написать что происходит когда ты пытаешься соединиться с удаленным хостом, например через telnet google.com 80?
> Отправляю пакеты на шлюз, тот меняет мой айпишник на свой. Отправляет на следующий маршрутизатор, и так до пункта назначения и обратно.
Меняет адреса НАТ (как следует из названия). Обычные роутеры без НАТ не меняют IP адреса.



Аноним 2016/03/20 21:17:23  №693598 392
>>693538

Алсо, тебе еще маленькая задачка. Если UPD ненадежный протокол, и IP тоже ненадежный то что мешает использовать IP пакеты напрямую? Разницы же нет?

Также, вторая задачка. Можно ли реализовать протокол вроде HTTP поверх IP (без TCP)? Какие подводные камни?
Аноним 2016/03/21 00:46:31  №693782 393
Почему слим такой кривой? Открываю директорию styles.css он мне показывает стили, хотя .htaccess и notFound - все это есть.
Аноним 2016/03/21 00:47:52  №693784 394
>>693782
Всмысле кривой? Ничего там не кривое, ты просто что-то неправильно делаешь.

Уточни свой вопрос.
Аноним 2016/03/21 01:14:53  №693799 395
>>693784
Может у меня апаче на убунту не пускает htaccess? Не могу найти http.conf в папке с апаче.
Аноним 2016/03/21 07:16:37  №693869 396
Аноним 2016/03/21 09:42:58  №693911 397
Аноним 2016/03/21 12:29:27  №693999 398
>>693911
Неправильно считает: http://ideone.com/fLZtzF
Должно получиться 61270 рублей с копейками при $monthlyPayment = 5000.
>$loan -= ($monthlyPayment - $taxRate);
Чё-т вообще не в ту степь.
Вот такой алгоритм самый простой и естественный:
1. Прибавляем к $creditBalance проценты и $servicePayment.
2. Если получившаяся переменная меньше или равна $monthlyPayment, то выплачиваем именно её и прибавляем её к $paymentTotal. После этого завершаем цикл.
3. Если получившаяся переменная больше $monthlyPayment, то отнимаем от неё $monthlyPayment и продолжаем цикл.
Аноним 2016/03/21 12:30:49  №694003 399
>>693869
Я чё-т не пойму, что тебе надо.
Ты можешь объяснить нормально?
Аноним 2016/03/21 12:49:10  №694023 400
>>694003
Теперь ясно?

input
Yoba
Boba

output
oba (1)
Аноним 2016/03/21 13:04:54  №694031 401
>>694023
Use regular expressions, Luke!
Аноним 2016/03/21 13:14:32  №694040 402
>>694031
А не напишешь за меня? :3
Аноним 2016/03/21 13:17:52  №694042 403
>>694040
А сам чего ж?
'/[a-z]oba/ui', например.
Аноним 2016/03/21 13:23:50  №694048 404
>>694042
Ему наверное нужно не для конкретного слова, а вообще.
Аноним 2016/03/21 13:28:40  №694050 405
>>694048
Тогда почему не
$data = "Yoba Boba";
foreach (count_chars($data, 1) as $key => $value) {
echo "chr($key) встречается в строке $value раз(а).\n";
}
?
Проблема в том, что я так и не пойму, что ему надо.
Аноним 2016/03/21 13:31:33  №694053 406
>>694048
То есть вот так:
$data = "Yoba Boba";
foreach (count_chars($data, 1) as $key => $value) {
$i = chr($key);
echo "$i встречается в строке $value раз(а).\n";
}
Аноним 2016/03/21 13:42:22  №694067 407
Аноним 2016/03/21 13:46:41  №694069 408
Как правильно будет организовать хранение такой информации. Есть товар, которому можно задавать цвета. То есть создать таблицу с цветами не пойдет, т.к. цвета могут быть каждый раз разные. Создать столбец в таблице с товаром тоже не покатит т.к. цветов может быть 1, а может и 10, все их в одном столбце хранить нельзя. Может вообще не в БД а как-то иначе такое надо реализовывать?
Аноним 2016/03/21 13:47:33  №694072 409
>>694067
Самая примитивная хуйня, которую и самому освоить можно.
Аноним 2016/03/21 13:58:29  №694079 410
>>694069
>То есть создать таблицу с цветами не пойдет, т.к. цвета могут быть каждый раз разные.
Почему не пойдет и что значит каждый раз разные?
Аноним 2016/03/21 14:19:48  №694088 411
>>694069

> Есть товар, которому можно задавать цвета. То есть создать таблицу с цветами не пойдет, т.к. цвета могут быть каждый раз разные.
Не рекомендую. Завтра ты захочешь сделать поиск по цвету и их нужно будет как-то унифицировать. Посмотри любой магазин вроде lamoda.ru например - там просто набор цветов.

Соответственно делается сущность "цвета", и связь многие-ко-многим/один-ко-многим в зависимости от логики на товары.

> цветов может быть 1, а может и 10, все их в одном столбце хранить нельзя.
Хорошо, что ты это понимаешь.
Аноним 2016/03/21 14:48:22  №694106 412
Не понимаю, скачал свой проект, который под виндой делал, установил конфиг дб, загрузил дб, прописал __DIR__ в директории роутеров и классов, а он 404 выдает. Это может быть из-за того, что под линуксом что-то иначе с путями и библиотекой работает?
Аноним 2016/03/21 15:00:34  №694117 413
анон, есть одна сессия и один проект на Yii. Вопрос такой:
почему этот кусок кода всё время возвращает одно и то же значение, даже при перезагрузке сраницы? если что, то я не залогинен

$buf = (isset($_SESSION['test'])) ? $_SESSION['test'] : 0;
$buf++;
var_dump($buf);
$_SESSION['test'] = $buf;
Аноним 2016/03/21 15:18:40  №694139 414
как в пыхе с сокетами?
Аноним 2016/03/21 15:41:36  №694176 415
Аноним 2016/03/21 15:41:58  №694177 416
>>694117
Кеш приложения?
Кеш кода (op-cache)?

Моветон обращаться напрямую к глобальным массивам, у фреймворка есть классы для работы с сессией.

>>694139
норм
Аноним 2016/03/21 15:47:20  №694182 417
что-то я застрял на студентах конкретно, уже 20-ый день мучаю, а прогресса почти нет. Есть у кого готовые студенты подглядеть и проникнуться решением? А то с ума сойду
Аноним 2016/03/21 15:47:43  №694184 418
Поясните за задачку с айфоном
>http://archive-ipq-co.narod.ru/l1/loops.html
>$percent = 1.03; / Банк начисляет 3% в месяц от суммы /
Почему 1.03 если Процент — это одна сотая часть от числа т.е. 0.03
или это просто я тупой ?
Аноним 2016/03/21 15:49:42  №694185 419
>>694182
Спрашивай что конкретно не понятно.

Готовых студентов тебе может ОП подкинуть, он знает какие нормально сделаны.
Аноним 2016/03/21 15:52:48  №694188 420
>>694184
Чтобы ты сумму тупо умножал на это число, а не ебался с кучей дополнительных действий.
Аноним 2016/03/21 15:52:49  №694189 421
>>694185
Ну, скажем, я запилил вот что: страница, которая показывает всех студентов и вторая страница - форма для вбивания нового студента.

Из условий задачи я понимаю, что вбив студента(себя) ты как бы "логинишься" на сайт и уже потом можешь смотреть всех, либо редактировать свои данные. Так вот, как делать это "логинивание"? Вообще нет идей
Аноним 2016/03/21 15:54:38  №694193 422
>>694188
аа окей тогда, спасибо
Аноним 2016/03/21 15:56:12  №694194 423
Аноним 2016/03/21 15:56:35  №694195 424
>>694067
Пройди, чо.
Такой формат максимум YOBA: "Бесплатный видеокурс по PHP и пошаговый алгоритм по созданию полнофункционального блога с БД и аутентификацией с нуля".
>>694072
Откуда новичку знать последовательность, что за чем, как то и как сё? Есть какие-то гайды, как самому создать пошагово?
Это ты можешь думать, что сейчас вот то, потом вот сё, а новичок не знает ничего абсолютно.
Учебнику ОПа не было бы цены, если бы были подобные гайды. Даже просто описание задачи на список студентов - это мрак и адище. Каждый пункт надо изучать дополнительно, ломается пошаговость.
Ты или ОП можете многое сказать по этому поводу, только факта это не отменяет: это всё равно очень сложно для новичка.
Аноним 2016/03/21 15:58:03  №694196 425
14585650831880.jpg (146, 1280x778)
778x1280
>>683886
Ну никак у меня не получается hello-world сделать в slim. Единственное, чего я добился с прошлого треда, это иметь возможность взаимодействовать с htaccess запуская код не с phpstorm, а напрямую через браузер из папки apache/htdocs. Вот тогда httacess команды работают. Но у меня до сих пор 404.
Аноним 2016/03/21 15:58:03  №694197 426
>>694048
Да, все верно.

>>694053
Надо найти все символы, которые встречаются и повторяются в строках. Ты же тупо ищешь все совпадения букв.
Аноним 2016/03/21 15:59:40  №694198 427
>>694196
То, что папка вверху file-sharing, а в url test - не обращайте внимания, phpstorm здесь уже просто как редактор используется. Файлы в htdocs точно такие же.
Аноним 2016/03/21 16:01:40  №694200 428
>>694194
> сам процесс работы с куками?
this
никогда не имел с ними дела, а нагуглить нормально не могу
Аноним 2016/03/21 16:02:32  №694202 429
>>694195
>Каждый пункт надо изучать дополнительно, ломается пошаговость.
>это всё равно очень сложно для новичка
Вот тут кстати соглашусь, как человек который сделал студентов не с нуля (я до этого кое-что знал). Между учебником ОПа и задачей про студентов есть очень большой пробел, но большинство подводных камней и новых понятий объясняется в самом условии (это не отменяет факта что новичку который читал только учебник ОПа придется все это гуглить). Может быть это так задумано ОПом, чтобы шло какое-то самообучение.
Аноним 2016/03/21 16:06:11  №694205 430
Аноним 2016/03/21 16:07:01  №694206 431
>>694196
index.php в url не нужен, у тебя в ->get('/hello/:name'), значит url должен быть localhost/test/hello/vasya.
Аноним 2016/03/21 16:08:32  №694208 432
Аноним 2016/03/21 16:10:07  №694210 433
Айпад в кредит

видимо скопипастив старый код, не чего не получится ?
http://ideone.com/mO6QfM
Аноним 2016/03/21 16:10:34  №694212 434
>>694205
Видимо не для меня, я что-то совсем там ничего не понимаю. Куки - это какая-то инфа, которую я буду посылать пользователю для того, чтоб он мог не авторизовываться? Так я и начинал с того, что даже не знаю, как делать сам процесс авторизации. Т.е.... что это вообще такое?

Да и как с ними работать, корочи, не ясно, не знаю, как объяснить нормально ,потому как просто тупо не понимаю
Аноним 2016/03/21 16:13:54  №694216 435
>>694202
Самообучение и так идёт.
Решать задачи ОПа в первой части учебника - это и есть самообучение.
Дело тут всё-таки в подаче материала.
Но ОП и без того огромную работу проделал, чтобы я ещё и этого требовал от него.
>>694210
Ты пока только функцию создал.
Прочитай внимательно про то, как функция возвращает значения. И про то, как уже после вывести это значение через echo.
Аноним 2016/03/21 16:14:32  №694218 436
Аноним 2016/03/21 16:16:07  №694225 437
>>694210
окей пойду читать
Аноним 2016/03/21 16:17:37  №694227 438
>>694218
Разберись с фигурными скобками.
Для чего они нужны?
Там две фигурных скобки стереть - и всё заработает.
Аноним 2016/03/21 16:18:55  №694230 439
Аноним 2016/03/21 16:22:46  №694238 440
Господа, ну так есть кто-нибудь тут, кто сможет объяснить, как делать авторизацию для студентов? Т.е, чтоб браузер тебя запомнил после ввода своих данных и ты мог редактировать их в последствии?
Аноним 2016/03/21 16:22:52  №694239 441
>>694212
Посмотри на эту авторизацию с самого начала.

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

Как работать с куками (ставить и получать значения) описано в мануале (там же есть и примеры).
http://php.net/manual/ru/function.setcookie.php
Аноним 2016/03/21 16:23:35  №694241 442
Аноним 2016/03/21 16:25:36  №694243 443
>>694241
Внизу скобка лишняя.
Надо следить за тем, чтобы их одинаковое количество было и логика была.
Аноним 2016/03/21 16:27:12  №694246 444
>>694243
Спасибо, работает :оо
буду внимательнее.
Аноним 2016/03/21 16:34:12  №694258 445
>>694239
>авторизация
Что есть авторизация? Через что её делать? через <form>? Т.е. пользователь заполняет <form>, я создаю new Student и сохраняю его, и, скажем, как его переменную класса ->coockie передаю туда сгенерированную рандомную фразу/cлово через setcoockie()?

А как, собственное, создать "авторизуемость", т.е. как проверять какой куки у пользователя и его так называемый "личный кабинет"? Через что это делается, какими тегами?
Аноним 2016/03/21 16:35:20  №694260 446
>>694258
я оче плохо объяснил, признаю... Не знаю, как задать вопрос лучше.
Аноним 2016/03/21 16:38:18  №694265 447
>>694239
Перечитал то, что ты написал. Т.е. делаю так:
1. пользователь заполняет <form>
2. я создаю new Student и сохраняю его инфу
3. как его переменную класса ->coockie передаю туда сгенерированную рандомную фразу/cлово через setcoockie()
4. Перед выдачей формы я проверяю, совпадает ли ->сoockie и кука, которую хранит его браузер
5. если да, то вывожу его данные и он их редактирует
6. если нет, выдаю <form> как обычно

всё верно?
Аноним 2016/03/21 16:42:28  №694273 448
Задачка про парня, который срывает миллионный джекпот в банке:
http://ideone.com/8W6bPw
Понятно, что второе действие можно сократить, просто посчитав прибавку от годовых собственноручно, но мне хотелось всё сосчитать внутри кода.
Ideone выдаёт превышение временных лимитов.
Моя ошибка?
Аноним 2016/03/21 16:45:15  №694277 449
>>694273
>($deposit /= 100)
Вот тут ошибка.
Там не нужно присваивать значение, надо просто разделить.
Аноним 2016/03/21 16:45:19  №694278 450
>>694258
>Что есть авторизация?
Пользователь вводит логин и пароль, твое приложение проверяет все ли введено верно. Если все верно - пользователю дается кука в подтверждение того что он авторизирован.
>Через что её делать?
В случае с списком студентов тебе не нужно нагружать пользователя логинами\паролями. Тебе достаточно сгенерировать пароль самому, и записать его в куки пользователя и в базу данных. Тогда эта кука которую ты создал будет как бы "флагом" того, что пользователь авторизирован.
>через <form>?
Через форму пользователь вводит свою информацию (имя, фамилию), а работа с паролями и куками происходит исключительно на стороне сервера.
>>694265
>как его переменную класса ->coockie передаю туда сгенерированную рандомную фразу/cлово через setcoockie()
Ты должен сохранить в $_COOKIE только пароль который ты сгенерировал. И этот же пароль сохраняешь в базу данных вместе с студентом. Потом, когда тебе нужно будет проверить, авторизирован ли пользователь, ты можешь проверять наличие куки с авторизацией у пользователя
>if(isset($_COOKIE['user_authorized']))
И если такая кука у пользователя есть, ты выбираешь из базы данных студента с паролем, который содержится в куке. Если такой студент в базе данных есть - значит пользователь авторизирован. Т.е. твой "пароль" это еще одна колонка в базе данных, а не переменная.
Аноним 2016/03/21 16:47:52  №694279 451
Аноним 2016/03/21 16:47:53  №694280 452
14585680731050.jpg (376, 1365x660)
660x1365
Объясните почему вылазит php код на страницу?
Аноним 2016/03/21 16:50:23  №694286 453
>>694200

Изучи эту страницу и спрашивай что осталось непонятным: https://ru.wikipedia.org/wiki/HTTP_cookie

Идея такая куки- это кусочки информации в формате key=value которые браузер сохраняет у себя и отправляет на сервер вместе с каждым запросом. Когда браузер запрашивает страницу по протоколоу HTTP, сервер может в дополнение к самой странице отправить заголовок Set-Cookie содержащий куки и информацию о них: домен, путь, срок хранения. Браузер получив этот заголовок, добавляет куки в свое хранилище и в дальшейшем отсылает их вместе с каждым запросом.

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

Мы используем куки для беспарольной авторизации. При регистрации генерируется случайный длинный сложноподбираемый код, сохраняется в БД и ставится в куки. При попытке редактирвоания код и кук сверяется с кодом в БД и таким образом подтверждается что это тот же пользователь который ранее зарегистрировался. Злоумышленник не может редактировать чужие профили так как не знает их секретный код.
Аноним 2016/03/21 16:53:46  №694288 454
Аноним 2016/03/21 16:56:07  №694292 455
Аноним 2016/03/21 16:56:11  №694293 456
>>694279
Return не в том месте.
С ним ты можешь получить только окончательный результат работы функции.
$creditSum там к чему возвращается? Там должна возвращаться окончательная сумма заплаченного, а не 0 ($creditSum станет нулём же в итоге).
Аноним 2016/03/21 16:57:27  №694295 457
>>694278
Хм... начинаю понимать, спасибо, что объясняешь такому долбоёбу, как я.

Т.е., скажем, пользователь ввёл свои данные. Нажал на submit, я создаю new Student и также создаю $password = рандомное вырадение и успешно записываю студента с его паролем-куки в таблицу sql.

Потом я делаю

setcoockie('student_password', $password); (теперь я правильно понимаю, что передаю куки равное тому сгенерированному выражению, браузеру чела, который только что зарегался?.)


И потом проверять, если у него в браузере есть такой куки под названием student_password, то смотрю по своей таблице sql и даю ему редактировать того, с чьим password совпало?боже, кажется, я понял

Аноним 2016/03/21 16:57:30  №694296 458
Аноним 2016/03/21 17:00:45  №694298 459
>>694296
Тебе же написало что точка с запятой вот тут
>$i*=1.1;
Лишняя, и что ожидается символ ")".
Аноним 2016/03/21 17:02:32  №694301 460
>>694298
Уже убрал.
Он не даёт результат. х)
Аноним 2016/03/21 17:06:49  №694309 461
>>694301
цикл будет идти до тех пор пока $i<=1000000, условие внутри цикла $i>=1000000 никогда не выполнится, потому что к тому моменту цикл уже завершится.
Аноним 2016/03/21 17:09:02  №694313 462
>>694309
А.
Я думал, что он именно запускается при условии.
Окей, теперь всё робит.)
Аноним 2016/03/21 17:11:58  №694318 463
>>694280
Ответьте кто-нибудь
Аноним 2016/03/21 17:13:53  №694323 464
>>694196

Почему в адресной строке localhost/test ?

Должно быть что-то вроде

http://localhost/hello/anon
http://example.dev/hello/anon (если ты сделал отдельный вирт. хост)

Куда в конфиге сервера Апач указывает DocumentRoot? Я вижу у тебя код где-то в c:\users, это ведь не корневая папка веб-сервера?

Алсо, может тебе что-то поможет из этих уроков:

https://github.com/codedokode/pasta/blob/master/soft/web-server.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md
Аноним 2016/03/21 17:14:49  №694327 465
>>694273
Так, другое недоразумение с этим кодом http://ideone.com/7neVzL
Сначала в цикле присваивается значение переменным, затем проверяется условие (оно верно), потом выполняется тело цикла. Тогда в результате кода должно выехать несколько строк, начиная с "The guy is 16 while he's got USD 10000 in the bank", разве не так?
Аноним 2016/03/21 17:19:18  №694332 466
>>694202

Секрет прост: ОП пока не написал промежуточных уроков. Единственное на что хватило времени - сделать задание + комментарии, а ведь раньше их не было и было еще хуже.

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

Алсо есть такой вариант промежуточного урока - что скажете? https://github.com/codedokode/pasta/blob/master/soft/web-server.md

>>694258

Тебе надо выучить и прочитать в мануале 2 метода работы с куками в PHP

- функция setcookie добавляет в ответ сервера заголовок Set-Cookie который добавит куку в хранилище браузера
- перед запуском скрипта PHP анализирует пришедшие от браузера заголовки, ищет там заголовок Cookie и заполняет пришедшими от браузера куками массив _COOKIE

Обрати внимание, если ты меняешь _COOKIE то ты меняешь только этот массив, никаких заголовков не отправляется. Если ты делаешь setcookie то кука не добавляется в COOKIE так как это просто массив.
Аноним 2016/03/21 17:23:24  №694339 467
>>694327
У тебя там нету тела цикла, потому что после него точка с запятой стоит.
Аноним 2016/03/21 17:24:09  №694341 468
>>694280

Веб сервер не обрабатывает PHP код. Проверь что файл имеет правильное расширение, а сервер правильно настроен.
Аноним 2016/03/21 17:26:21  №694345 469
>>694332
>Алсо есть такой вариант промежуточного урока - что скажете?
Вот я думаю это как раз то, чего не хватало, я помню в прошлых тредах некоторые люди закончили учебник в шапке, брались за студентов и совсем не могли понять с чего начать.

Там кстати и про куки задание есть, может этому >>694258 анону стоит попробовать его сделать?
https://github.com/codedokode/pasta/blob/master/soft/web-server.md#Я-тебя-помню
Аноним 2016/03/21 17:35:40  №694357 470
14585709408150.jpg (159, 1280x894)
894x1280
>>694198
>>694323
Вот вам новый скрин чтобы не вводить вас в заблуждение с папками.
> Куда в конфиге сервера Апач указывает DocumentRoot?
DocumentRoot "c:/Apache24/htdocs"
Аноним 2016/03/21 17:37:57  №694360 471
>>694357

Попробуй код поместить не в папку test а прямо в htdocs.
Аноним 2016/03/21 17:39:14  №694362 472
Аноним 2016/03/21 17:40:14  №694363 473
>>694360
Непробиваемая 404. Не знаю уже что делать.
Аноним 2016/03/21 17:40:28  №694364 474
Аноним 2016/03/21 17:48:15  №694375 475
>>694363
Мод реврайт то хоть включен? Я имею ввиду активацию самого модуля, в дебиане это sudo a2enmod rewrite.
Еще может быть нужно AllowOverride All в apache2.conf

Выложи сразу весь php.ini и apache2.conf, чтобы не засорять тред угадыванием причин.
Аноним 2016/03/21 17:49:24  №694377 476
>>694357
Ты слеш перед hello в контроллере не поставил
Аноним 2016/03/21 17:54:04  №694385 477
>>694377
О боже, оно работает. Тонны нефти анон, часами мучился.
Аноним 2016/03/21 17:54:44  №694388 478
Ребят вообще не могу понять как решить задачку
"Айпад в кредит"
Есть пример ?
Аноним 2016/03/21 17:55:29  №694389 479
>>694388
Нет примера. Есть только один выход: попробовать самому и сказать, что конкретно не получается
Аноним 2016/03/21 17:57:24  №694393 480
>>694389
я не могу понять как должно выглядеть условие
Аноним 2016/03/21 17:57:41  №694394 481
>>694388
"Айфон в кредит" решил?

Что конкретно не понятно?
Аноним 2016/03/21 17:58:08  №694396 482
Аноним 2016/03/21 18:00:06  №694402 483
>>694396
ойй ну всм цикл.
Я скопипастил старый код из задачки с айфоном но чт он не работает, а еще я не совсем понимаю как тут должен работать return
Аноним 2016/03/21 18:03:10  №694409 484
Аноним 2016/03/21 18:04:17  №694411 485
>>694402
Return дает понять функции, что именно она должна вернуть в качестве своего результата. Мы можем делать разные вычисления в функции с разными переменными, но результат, как правило, нам нужен только один.
http://ideone.com/jcefOw
Аноним 2016/03/21 18:08:01  №694415 486
>>694411
окей я понял что он делает,но я до сих пор не понимаю куда мне его сунуть,сейчас попробую разобраться, ну а код у меня хотя бы работать будет?
>http://ideone.com/SmLXsx
Аноним 2016/03/21 18:08:26  №694417 487
>>694409
За циклом поставь echo - это как раз то, что нужно будет, последний результат.
Аноним 2016/03/21 18:10:51  №694421 488
>>694417
ну тогда он выведет только 13й месяц
Аноним 2016/03/21 18:10:52  №694422 489
>>694415
Может поставить его в самый конец после цикла, так как return сразу заканчивает работу функции и возвращает значение, для функции он примерно как break для цикла.
Аноним 2016/03/21 18:12:46  №694427 490
>>694422
нууу а с кодом то мне что делать он до сих пор не работает, он хоть правильно написан?
Аноним 2016/03/21 18:13:14  №694429 491
>>694415
Ты так и не сделал там $paymentTotal.
Без него и возвращать нечего будет.
return там должен быть после основного цикла в функции - тебе же только последнее значение нужно.
Я поэтому и писал тебе, что ты будто не сам решал эту задачу - это же элементарно. И странно не понять этого, когда решил эту сложную задачу.
>>694421
Так тебе это и нужно.
Аноним 2016/03/21 18:14:02  №694430 492
>>694427
>Ты так и не сделал там $paymentTotal.
Поэтому нет, не правильно работает.
Аноним 2016/03/21 18:15:14  №694432 493
>>694429
бля значит я тупой, почему-то я подумал что и так сойдет без него
Аноним 2016/03/21 18:18:15  №694437 494
>>694432
Что значит "подумал так сойдет?". Ты случайные куски кода вставляешь наугад и ждешь, что оно само поймет, что тебе от него нужно? Ты ведь должен понимать что ты делаешь, когда решаешь задачу. Тебе нужно написать функцию, которая возвращает количество выплаченных денег, но где их взять, если ты даже никуда их не записываешь?
Аноним 2016/03/21 18:20:08  №694439 495
>>694432
Так ты не сам делал, что ли, я был прав?
Ты сам себе наврал, получается. Кого ты обманываешь на анонимной борде, кроме как себя.
>>694437
Тоже недоумение всё это вызывает, когда человек вроде бы сам решал.
Аноним 2016/03/21 18:20:46  №694442 496
>>694437
да знаю я просто подумал что можно сунуть все в $creditSum. Не знаю не спрашивай почему я так решил.
Аноним 2016/03/21 18:21:34  №694445 497
>>694345
Спасибо. Сейчас пробую сделать задачу. Столкнулся с проблемой. Вот, скажем, я записываю все пары куки -- кол-во раз в массив.

Но как быть с тем, что при каждом обновлении страницы мой массив перезаписывается? Иными словами, как создать переменную, которая бы не перезаписывалась каждый бы раз?
Аноним 2016/03/21 18:21:41  №694446 498
>>694442
ту задачку я делал недели 2 назад, наверное слишком большой перерыв.
Аноним 2016/03/21 18:29:45  №694451 499
>>694445
Короче, вот лучше сформулированный вопрос: каким образом лучше всего хранить массив объектов с парами куки-пароль?
Я создал класс Coockie с переменными ->password(тут сама кука) и ->times(счётчик разов).

Как хранить эти объекты? Записываю их в массив - при каждом обновлении страницы всё сбрасывается.

Получается, в базе данных только?
Аноним 2016/03/21 18:33:20  №694454 500
>>694451
Да, и не пароль, а его образ + "соль".
Аноним 2016/03/21 18:36:00  №694461 501
>>694454
то есть базы данных - это единственное решение? Через php и переменные нельзя извернуться, чтоб они не сбрасывались после окончания скрипта?
Аноним 2016/03/21 18:40:10  №694465 502
14585748103880.jpg (37, 660x240)
240x660
>>694461
Глобальные переменные в 2016?..
Аноним 2016/03/21 20:22:58  №694568 503
14585809787700.png (95, 1365x735)
735x1365
Первый раз (не дикобраз) вижу такую шнягу.
Аноним 2016/03/21 20:35:37  №694587 504
Как отправить аяксом данные на роутер в фреймврке?
У меня работает, только если на отдельынй файл отправлять, а нужно на роутер.
$.post("ajax.php",
Аноним 2016/03/21 20:37:28  №694588 505
>>694587
А в чем проблема заключается?
Евгеничка Сырнов 2016/03/21 20:49:10  №694597 506
Вот решил задачу в "Объекты в PHP, часть 2"
Правильно все ли я сделал?Есть замечания?
Код по ссылке.
http://pastebin.com/bFdzVPWW
Заранее спасибо
Аноним 2016/03/21 20:49:27  №694598 507
14585825676790.jpg (210, 729x782)
782x729
Аноним 2016/03/21 20:56:25  №694604 508
Пердолинг с сессиями нынче в тренде, присоединюсь пожалуй.

Все-таки плохая у yii документация, годится только на хелловорлды.
Чувак выше спрашивал про сессии в yii >>694117
я его код скопировал, у меня все работает, число инкрементируется при обновлении страницы, так что у него скорее всего дело в кешировании.

У меня возник другой вопрос, а где собственно фреймворк вызывает session_start?

В гайдах описывают 2 способа работы с сессией:
1. Через компонент session, будут вызовы вида
Yii::app()->session->add('key', 'value');
Yii::app()->session->get('key', 'notFoundValue');
Требует конфига в main.php (или это опционально?)
Правда непонятно что туда писать, если мне не нужны никакие параметры: autoStart по-дефолту true, cookieParams и cookieMode нужны только если включить режим сохранения данных сессии в куки.

2. Создать "независимый" объект класса CHttpSession и уже у него явно вызывать метод open.
$session = new CHttpSession;
$session->open(); // внутри этого метода session_start
$session->add('key', 'value');
echo $session->get('key');

Вопрос у меня возник в связи с тем, что у меня сессии "работают" (то есть вызывается session_start) во всех 3 случаях. И когда я обращался к сессии первым способом (но не прописывал конфиг для компонента session!); и когда обращался вторым способом, через создание нового экземпляра CHttpSession (но не вызывал $session->open()!); и даже через родной $_SESSION не нужно вызывать session_start, более того фреймворк сообщает об ошибке, мол 500 A session had already been started - ignoring session_start()

Где же он (фреймворк) ее (сессию) стартовал?
После хождения по коду фреймворка, оказалось, что существуют некие базовые компоненты, которые всегда подгружаются.
https://github.com/yiisoft/yii/blob/8c9b5114db3ee524d23e985c637b52f329ca5bda/framework/web/CWebApplication.php#L149
Подгружаются и все. Нужны они тебе или нет, они уже есть.
Вот компонент session в их числе.
CModule::setComponent вызывает CHttpSession::init (внутри которого open, внутри которого золотое яичко, внутри которого session_start)
https://github.com/yiisoft/yii/blob/083d36127de7298f03c0a701d88a5068dddb2a02/framework/base/CModule.php#L426
https://github.com/yiisoft/yii/blob/485c001e99ba1e60eabd496027e69eecdee5ed72/framework/web/CHttpSession.php#L88

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

Аноним 2016/03/21 21:03:59  №694611 509
Аноны ,помогите -объясните нюфане процесс передачи аргументов по ссылке и отличие ее от передачи по значению.прочитал кучу источников,но так и не дошло полностью
Аноним 2016/03/21 21:04:10  №694612 510
>>694604
Интересно, а как работает сессия? Этот механизм отвечает за то, что авторизация не сбрасывается при смене страницы?
Аноним 2016/03/21 21:07:59  №694613 511
14585836799550.png (17, 488x515)
515x488
>>694465
Всё же не верю, что нет способа, кроме баз данных. Как-то это слишком странно. Обращаюсь с просьбой помочь решить задачу Я тебя помню https://github.com/codedokode/pasta/blob/master/soft/web-server.md

Я написал такое решение:

0. Создаю class Coockie { public $pass; public $count = 1; }
1. Проверяю, есть ли у пользователя кука с названием "pass" --- isset($_COOKIE['pass']).
2. Если если нет, то создаю $coockie = new Cookie,генерирую пароль из 10 символов, передаю его в $coockie->pass и показываю "привет в 1-й раз".
Сохраняю полученный объект в массив.

3. Если есть такая кука, то перебираю массив с объектами и сравниваю его с кукой. Если совпадает, пишу "привет в такой-то раз" и всё.

Вроде, всё логично и должно работать. Однако на практике я вижу, что мой массив каждый раз перезаписывается благодаря этой строке $allc = [];

А без неё не могу, т.к. не задав переменную нельзя foreach по ней делать. Картинку прилагаю. Как быть?
Аноним 2016/03/21 21:08:00  №694614 512
>>694611
Передача по ссылке не нужна, только по значению.
Придерживайся функциональной чистоты: функция принимает значения, обрабатывает их, возвращает результат, не изменяя никакие другие данные. С результатом можно делать всё что нужно.
Для упрощения можно использовать глобальные переменные.
Аноним 2016/03/21 21:11:58  №694615 513
>>694614
еще,если я хочу присвоить результат работы функции в переменную,то return обязат нужен?
Аноним 2016/03/21 21:15:25  №694617 514
>>694615
Ну да, нужен. В этом вся суть.
Аноним 2016/03/21 21:18:24  №694620 515
14585843050960.jpg (103, 1422x1004)
1004x1422
>>694617
а как реализовать ввод ,допустим чисел на хтмл странице и передать результат в функцию с дальнейшим выводом.я так понимаю напрямую в пыхе такой функции нет?
Аноним 2016/03/21 21:21:42  №694622 516
14585845026180.jpg (1865, 2572x1540)
1540x2572
14585845026561.jpg (1807, 1887x2504)
2504x1887
14585845026922.jpg (2296, 2649x1724)
1724x2649
14585845027393.jpg (1547, 1673x2391)
2391x1673
Аноним 2016/03/21 21:22:58  №694627 517
>>694622
книга не понравилась
Аноним 2016/03/21 21:23:07  №694628 518
>>694604
Стоп, но если сессия стартует всегда, то зачем в мануале (не в мануале а в апи) дается пример с явным началом сессии?
http://www.yiiframework.com/doc/api/1.1/CHttpSession
$session=new CHttpSession;
$session->open();

Зачем там open если сессия всегда стартует?
Может это для тех чуваков, которые насильно в конфиге выставляют autoStart в false?
Непонятно. У меня этот способ работает без open.

>>694612
Почитай статьи из гугла, я могу только кратко пересказать в сотый раз.

Сессии в абстрактном виде это некая информация от пользователя, которую необходимо передавать между скриптами.
Допустим у тебя есть какой-то тест, типа психологический, или на уровень icq.
Каждый вопрос сделан отдельной страницей (ну или сгруппированы по 10-20). После того как юзер расставит чекбоксы, он сабмитит форму (кнопка "Дальше").
Ему выдается страница со следующей порцией ответов и т.д. В итоге он приходит на последнюю страницу, которая должна собрать результат работы всех предыдущих скриптов, обработать и выдать результат.
Как передать данные от одного скрипта другому?
Можно через куки. Кто-то выше уже писал, куки это пары 'имя'=>'значение', которые сохраняются в браузере.
Но пользователь может отключить куки, он может их почистить, плюс может быть некоторую конфиденциальную информацию просто нельзя сохранять в куках.
Тогда сохраняют на сервере в специальных файлах. Чтобы связать эти файлы с конкретным пользователем, посылающим запрос, создается сессионная кука с идентификатором (фактически с названием этого файла).
Что это дает? Пользователь прошел первую страницу теста и сабмитит эту форму. Данные сохраняются в файл с определенным именем, пользователю ставится кука с таким именем.
Редирект на вторую страницу. Пользователь заполняет форму и сабмитит. Поскольку у него есть кука с названием сессии, то сервер не создает новый файл, а дописывает в старый.
Наконец на последней странице, на которой должен быть показан результат, скрипт выгребает из сессии все ответы пользователя, обрабатывает и отдает html.
Сессионные данные кроме собственно сессионных файлов и кук можно еще хранить в бд, или в кастомных файлах на сервере (черт его знает, зачем это может понадобиться). Но вот например для юи зачем-то описывают и такое извращение http://styleroom-ya.livejournal.com/618998.html

Авторизация делается обычно куками, хотя опять-таки it depends.
Аноним 2016/03/21 21:24:12  №694631 519
>>694588
на роутер не отправляется, а на просто файл пхп отправляется, в глаза долбишься, мразь?
Аноним 2016/03/21 21:25:21  №694634 520
>>694631
Всем все отправляется.
Аноним 2016/03/21 21:26:29  №694636 521
>>694620
У странички два равных есть крыла -
Красивое и полезное,
Фронтенд и Бекенд
Аноним 2016/03/21 21:28:10  №694639 522
>>694613

Переменные хранятся в оперативной памяти. При завершении скрипта вся эти память очищается. Так что новый скрипт всегда начинает с "чистой страницы". Это хорошо.

Тебе надо изучить что такое куки. Ты прочел и понял всю статью про них в википедии?

Также отлаживать куки удобно developer tools в Хроме или ФФ (ctrl + shift + i). В Хроме куки, хранящиеся в браузере, выводятся на вкладке resources. Запросы можно увидеть на вкладке network.

Алгоритм надо упросить. Например что мешает тебе хранить число посещений в самой куке?

Ответь-ка также на вопросы для проверки:

- напиши какой-нибудь простой скрипт на php который выставляет куку, например x=1. Затем открой в браузере dev tools (Ctrl + Shift + I) на вкладке network и перезагрузи страницу пару раз. Посмотри какой запрос посылается и какой ответ приходит, и выпиши тут заголовки которые содержат эту куку, если таковые имеются
- как в PHP выставить куку не используя функцию setcookie ? (например можно ли это сделать функцией header?)
- допустим мы хотим на некоем сайте разрешить пользователям просматривать не более 3 статей бесплатно. Для этого мы при каждом просмотре берем куку view_count, увеличиваем ее значение на 1 и отдаем обратно пользователю с новым значением. Если кука в итоге больше или равна 3, мы вместо статьи показываем сообщение об ограничении доступа. Есть ли подвохи в нашей безупречной схеме? Попробуй написать скрипт который это реализует. Там должно быть несколько строк, ООП не нужен.
- в одной вкладке браузера мы открываем страницу page1.php, которая выставляет куку x =1. Во второй вкладке мы открываем страницу page2.php, которая выставляет куку x=2. затем мы обновляем страницу в первой вкладке. Какое значение куки отправит на сервер браузер? Проверь себя с помощью dev tools.

> Создаю class Coockie { public $pass; public $count = 1; }
Непонятно зачем он нужен и что хранит

> Проверяю, есть ли у пользователя кука с названием "pass" --- isset($_COOKIE['pass']).
Зачем она нужна, с таким странным именем? Пароль? Зачем нам пароль чтобы просто посчитать число посещений?

> Если есть такая кука, то перебираю массив с объектами
Он же пустой.
Аноним 2016/03/21 21:30:35  №694641 523
>>694620
Нету, да. Для ввода чисел можно реализовать форму (это фронтенд), которая будет по кнопке submit передавать данные в пхп-скрипт (бекэнд), где к ним можно особым образом доступаться, например:
$first=$_POST['firstNumber'];
$second=$_POST['secondNumber'];
$third=callSum($first,$second);
Аноним 2016/03/21 21:32:39  №694643 524
Аноним 2016/03/21 21:33:01  №694644 525
Оп, вопрос по 3 задачке в массивах.
Вот такая программа у меня получилась.
http://ideone.com/mIYZwn
> $youGotDis = array_rand($answers,7);
Вот эта строка значит, что я создал еще 1 массив в котором я рандомно перемешал всё элементы из массива $answers, я правильно понял ?
А можно просто переменной присвоить рандомный элемент массива ?
И еще, я не совсем понимаю, как работает следующая строчка
> echo $answers[$youGotDis[0]]. "\n";
Просто скопировал её с пхп.нет
Аноним 2016/03/21 21:33:58  №694646 526
>>694622

Мне нравится что у кота есть свой, отдельный, диван.

>>694628

Ты по моему переусложнил. Сессия это данные которые хранятся на сервере, индивидуальные для каждого пользвоателя. Пользователям каждому выдается кука с индивидуальным кодом (вроде hd6d5d4d8d9s9ds9ds0d0s0ds0d), а на сервере например создается файл с таким же именем (или запись в базе с таким идентификатором). Соответственно, когда пользователь в следующий раз заходит на сайт, по команде session_start() по этой куке ищется файл, и данные из него загружаются в массив SESSION. А по завершении скрипта - выгружаются из массива в файл. Сессии временные и файлы на сервере удаляются через 15-30 минут неактивности.

У сессий много особенностей и недостатков и они почти всегда не нужны. Авторизация делается и без них и может быть даже проще.
Аноним 2016/03/21 21:35:00  №694648 527
>>694628
>Чтобы связать эти файлы с конкретным пользователем, посылающим запрос, создается сессионная кука с идентификатором (фактически с названием этого файла).

Очень умно. Теперь я знаю, как можно реализовать сохранения для незарегистрированных пользователей моей ненаписанной игры на JavaScript
ОП-няша об этом где-то пишет?
Аноним 2016/03/21 21:36:47  №694649 528
>>694648

Сессии долго не живут. Для твоей игры наверно лучше хранить данные в базе данных. А чтобы не забивать базу зря, сохранять их туда если есть что сохранять. чтобы боты от гугла или зашедшие посмотреть не создавали тысячи пустых записей.
Аноним 2016/03/21 21:38:08  №694650 529
>>694646
Я же так и сказал. Сессии для частных случаев, когда нужно передать данные между php-скриптами, но нет возможности использовать базы данных или куки.

Зацени регулярку. Чуток не влезла в 80 символов
https://github.com/yiisoft/yii/blob/53d9f95ff236fcad1580ab75db83d60fc2fa4a6c/framework/vendors/TextHighlighter/Text/Highlighter/CSS.php#L280
Аноним 2016/03/21 21:39:05  №694651 530
>>694628

Твой подход с тестом имеет недостаток - если открыть 2 теста в 2 вкладках и заполнять параллельно, все перемешается. Это один из недостатков стандартных сессий. Для борьбы с ним придется сделать свою систему сессий, то есть генерировать идентификатор и передавать его не в куках, а через POST или GET параметры.
Аноним 2016/03/21 21:41:02  №694653 531
>>694650

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

> Зацени регулярку.
> Auto-generated class. CSS syntax highlighting
Скорее всего в исходнике генератора синтаксис описан в нормальном виде, а по нему генерируется код. Так что претензий нет.
Аноним 2016/03/21 21:50:53  №694667 532
Аноним 2016/03/21 21:59:00  №694674 533
>>694667

Практически ни в какой. Очень редкие случаи - это когда надо обрабатывать ошибки, например ошибку чтения файла функцией file_get_contents:

$x = file_get_contents($y);

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

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

В PHP можно заставить код превращать ошибки в исключения в помощью обработчика ошибок: https://github.com/codedokode/pasta/blob/master/php/exceptions.md#Поддержка-исключений-везде

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

В общем в 99% случаев собака не нужна и только вредит.

Там очень плохо сделано.

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

В Юи 1 много странностей, авторы часто пытаются проявлять оригинальность там где не следует.
Аноним 2016/03/21 22:00:53  №694677 534
>>694674

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

Быдлокодинг в общем.
Аноним 2016/03/21 22:02:53  №694679 535
14585869736810.png (6, 369x246)
246x369
>>694639
Да уж, перемудрил я. Спасибо тебе(ты ОП? похоже по стилю письма) Перечитал на вики и твоё сообщение пять раз и наконец понял. Решил задачу и довольно просто. Пикрилейтед (проверь, пожалуйста, верно?)

Теперь наконец применю знание по кукам на студентах.

Вопрос: правильно я понимаю, что там нужно генерировать каждому студенту куки-пароль и записывать его в БД. При каждом заходе проверяю куку - если совпадает с кукой-паролем от какого-либо студента, то позволяю править инфу, связанную с этим студентом? Т.е. подход будет отличаться от этой задачи довольно сильно?
Аноним 2016/03/21 22:25:15  №694703 536
>>694639

Да, ОП

совет по коду:

-нехорошо 2 раза писать setookie когда мы можем вынести ее из ифа
- для кук желательно ставить путь и время жизни. Почитай про параметр path у кук: http://citforum.ru/internet/html/cookie.shtml

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

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

В случае обычной регистрации используют 2 куки: первая, идентификационная, хранит id или email пользователя, вторая, аутентификационная, - токен или хеш от пароля.



Аноним 2016/03/21 22:32:59  №694710 537
есть форма которая может отправить чекбоксы с одинаковыми именами в количестве больше 1
как проверить кол-во этих чекбоксов7
Аноним 2016/03/21 22:39:02  №694721 538
>>694710
Присвоить этим элементам какой-то класс и посчитать, например:
класс .sevencheckboxes
и потом:
$(".sevencheckboxes").size()
Аноним 2016/03/21 22:49:55  №694725 539
>>694703
Cпасибо опять. Я тот кун, что чёрно-белые фото прикладывал ко всем задачам, когда твой учебник проходил где-то месяц назад, если помнишь ещё. Вот до студентов добрался и карабкаюсь вверх потихоньку.

Т.е. в студентах мыслить в сторону модели:
1. человек заполняет форму.
2. генерирую куку-пароль, заношу в БД вместе с именем отдельной колонкой.
3. передаю этому пользователю ДВЕ куки: 1. id 2. куку-пароль(из БД).

Ты пишешь
>чтобы и идентифицировать студента
но разве Разве не будет достаточно лишь уникального пароля(из БД)? Зачем нам кука-id?
Аноним 2016/03/21 23:16:23  №694744 540
Аноним 2016/03/21 23:20:10  №694747 541
>>694725

В случае с студентами хватит одной куки. Один токен служит и для идентификации (благодаря тому что он уникален) и для аутентификации (так как его сложно подобрать).

Две куки нжны в традиционных системах регистрации с паролем и логином, одна кука для идентификации, вторая для аутентификации.
Аноним 2016/03/21 23:36:17  №694760 542
Аноним 2016/03/21 23:39:52  №694762 543
Надо записать PHP код в файл, для этого необходимо как-то закинуть ПХП код в переменную, как это можно сделать?
Аноним 2016/03/22 02:37:38  №694866 544
Как относитесь к бирже freelansim.ru? Вроде заказы интересные, индусов не так много, как на апворке, цены приемлимые. Стоит регистрация свои 500 рублей?
Хочу иметь 2 профиля: на апворке и фрилансим, где я не прав?
Аноним 2016/03/22 02:39:18  №694868 545
>>694866
Это не тред поиска работы, но на правах оффтопа скажу что я бы не советовал работать на русскоязычных сайтах. Совсем.
Аноним 2016/03/22 05:51:42  №694878 546
>>693144
https://ideone.com/qiudsB Ура, я ебанат и не делал вычитание, но break есть последний шаг, поэтому пришлось поставить $month = 20.
Аноним 2016/03/22 05:52:03  №694879 547
Аноним 2016/03/22 10:17:51  №694925 548
Помогите пожалуйста есть скрипт перебирает прокси адреса,хочу его зациклить,чтобы когда адреса допустим с 1 по 50 перебрались-цикл for,цикл while запустил for по новой с 4.Но цикл while почему то не работает..

var start=1;
var end=4;
var i = 0;
while (true){
for (start;start<end;start++) {
alert(start);
}
}
Аноним 2016/03/22 10:34:37  №694934 549
Анон, насколько разумно читать csv, вместо mysql?
Аноним 2016/03/22 10:36:47  №694936 550
>>694934
расскажи поподробнее,в этой теме с позавчерашего дня

Аноним 2016/03/22 10:58:36  №694944 551
>>694936
Меня интересует насколько это ресурсозатратно.
Вытащить 100 строк (select *) из мускула или таких же 100 строк из csv файла.
Проверить сам — слишком ленивый.
Аноним 2016/03/22 11:22:08  №694949 552
Есть два способа сделать одну и ту же кнопочку play с треугольником
1. Картинка в фоне (из спрайта)
2. Иконка со спецсимволом ( ∆ ) и через transition: rotate поворачиваем набок
Какой лучше?
Аноним 2016/03/22 12:05:40  №694958 553
14586375409750.png (16, 647x194)
194x647
Аноним 2016/03/22 15:07:00  №695097 554
Где можно почитать про алгоритмы обхода деревьев? Статья в википедии содержит формулы, которые я не понимаю.
Аноним 2016/03/22 15:52:04  №695120 555
Погромисты, помогите нубу.

Есть текст вида:
>66006 33764 18799 4//// 3//// 1//// 8//// 9//// 00000=3D
>HUI=3D13.9CM
>PIZDA=3D335mm
>GO to HOME:
>error:69
>SPERM=3D0.0ml
>TIME=3D22-03-2016T09:00:09:+03:00
Нужно выдернуть значение хуя, пизды, спермы и времени, либо элементами массива, либо присвоив их неким переменным.
Причем желательно дропнуть "3D" злоебучее.
Аноним 2016/03/22 16:06:22  №695132 556
>>694878
Поставь в условие цикла, что всё должно продолжаться при $creditBalance большем нуля.
Базарю, ещё захочешь, поцене 38 рублей.
Аноним 2016/03/22 16:15:50  №695139 557
>>695120
parse_ini_file для получения массива настроек
array_map с вложенным preg_replace для удаления нежелательных подстрок
Аноним 2016/03/22 16:28:23  №695144 558
>>695139
>parse_ini_file
Он только файлы жрет? Пытался подсунуть ему переменную с нужным текстом, пиздит, ругается. Можно наебать как-то?
писать/читать 12к файлов желания нет.
Аноним 2016/03/22 16:51:44  №695168 559
>>695144
Напиши свою функцию.
Аноним 2016/03/22 16:54:09  №695171 560
>>695144
Тогда сначала разбить текст на строки через explode или preg_split. У меня почему-то explode по \n не сработал, помогло использование PHP_EOL в качестве разделителя.
Потом разбить по символу =.
Аноним 2016/03/22 17:04:00  №695175 561
А, все, там были одинарные кавычки, поэтому explode('\n', $text) возвращало целую строку.
Аноним 2016/03/22 18:00:40  №695207 562
>>695175
Будь няшей, покажи что у тебя получилось?
Аноним 2016/03/22 18:22:12  №695225 563
14586601330100.png (41, 675x429)
429x675
Аноним 2016/03/22 18:44:34  №695247 564
http://ideone.com/BTJ8uJ
Аноны, задача сделать из полученных слогов массива целое слово. Как я понял, надо из выпавших слогов создать ещё один массив и с помощью implode составить имя. Как реализовать?
Аноним 2016/03/22 18:46:26  №695250 565
>>695225
А код? Чисто по-братски.
Аноним 2016/03/22 18:51:56  №695255 566
PostForm.php:
class PostForm {
public $text;

...
}

form.php:
<form ...>
Text <input ... value="<?= isset($postForm->text) ? htmlspecialchars($postForm->getText(), ENT_QUOTES) : '' ?>">

...
</form>

Так можно писать?
Аноним 2016/03/22 18:54:46  №695259 567
>>695255
Можно, но разве в классе может отсутствовать поле? Или это такая странная проверка на null?
Аноним 2016/03/22 19:06:58  №695277 568
>>695259
Если форма не отправлена то свойство будет пустое и htmlspecialchars будет получать ошибку^
<br /><b>Notice</b>: Undefined variable: postForm in <b>form.php</b> on line <b>2</b><br /><br /><b>Notice</b>: Trying to get property of non-object in <b>form.php</b> on line <b>2</b><br />

Это доставляет мне много проблем из-за которых мне приходиться придумывать такие костыли.
Аноним 2016/03/22 19:07:14  №695278 569
Мне вообще не очень нравится что так приходиться писать.
Аноним 2016/03/22 19:11:18  №695285 570
>>695278
Освой шаблонизатор какой-нибудь, например Twig.
Аноним 2016/03/22 19:14:58  №695291 571
>>695285
Мне вот непонятно, вот сейчас, никто же не пишет на __чистом__ PHP? У каждой компании у каждого программиста свой набор инструментов, ведь так?
Аноним 2016/03/22 19:16:55  №695296 572
>>695255

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

Аноним 2016/03/22 19:20:54  №695300 573
>>695296
Он же поле класса проверяет на отсутствие, а не саму $postForm.

Я бы написал как if($postForm->text != null), хотя на практике isset так же проверяет не равняется ли переменная null.
Аноним 2016/03/22 19:21:28  №695304 574
>>695296
Я в замешательстве, проверять на отсутствие переменной и на её нулевое значение это разные вещи?
Аноним 2016/03/22 19:32:57  №695326 575
>>695304

Проверять на то что переменная пустая надо так:

if ($something)

или

$something ? ... : ...

Мой код читается так: "если переменная не пуста, ..."

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

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

Алсо в твоем коде я не вижу причин по которым переменная может быть пуста. Если у тебя класс представляет данные из формы, то он должен существовать всегда когда есть эта форма.
Аноним 2016/03/22 19:33:28  №695329 576
>>695300

Сделай чтобы там всегда что-нибудь было и не требовалось ничего проверять.
Аноним 2016/03/22 19:34:24  №695333 577
>>695326

Ок, я там мог ошибиться так как ты показал только кусок кода и не видно откуда берется эта переменная. Но все равно, isset это ненормально и ненормально что ты обращаешься то к полю, то к методу.
Аноним 2016/03/22 19:45:07  №695361 578
14586651075130.jpg (57, 600x450)
450x600
>>695225
Анон, пока трнед совсем не смыло, покажи писечку КОД, с меня, естественно, нихуя, кроме благодарности.
Аноним 2016/03/22 20:14:29  №695411 579
>>693138
У тебя палиндром не работает, лел.
Аноним 2016/03/22 20:28:56  №695460 580
>>689537 (OP)
такая проблема:
Allowed memory size of 134217728 bytes exhausted (tried to allocate 80732160 bytes)
на такой строчке echo file_get_contents('filename.7z');
Вопрос: есть ли способ из пхп выдать файл клиенту не загрузив его в память? Редирект не катит сразу. Щас склоняюсь к варианту настроить htaccess чтоб если правильный айпи то отправляло сразу на файл в обход пхп.
Аноним 2016/03/22 20:30:00  №695464 581
Аноны, что значит еденица в этой переменной - $explodedText[1]? А i в этой - $explodedText[$i]?
Аноним 2016/03/22 20:43:56  №695492 582
>>694944
>Меня интересует насколько это ресурсозатратно.
>Вытащить 100 строк (select *) из мускула или таких же 100 строк из csv файла.
>Проверить сам — слишком ленивый.
Ну просто вытащить - хз, а вот более сложные вещи явно затратнее.
Аноним 2016/03/22 20:51:50  №695503 583
>>694944

Я тоже ленивый. Давай подождем еще кого-нибудь.
Аноним 2016/03/22 21:12:11  №695529 584
>>693571
> В ICMP пакетах нет номера порта. Он посылает TCP пакет.

https://ru.wikipedia.org/wiki/Traceroute
> Достижение пункта назначения определяется следующим образом: отсылаемые traceroute датаграммы содержат UDP-пакет с заведомо неиспользуемым номером порта на адресуемом хосте. Номер порта будет равен 33434 + (максимальное количество транзитных участков до узла) — 1.
Значит там не TCP-пакеты, а UDP?

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

> Как узел узнает мак-адрес другого узла - узнай самостоятельно.
Ну узел же получает от DHCP-сервера все настройки и наверное mac-адрес устройства куда передавать пакеты. Ну или оно вручную забивается.
Аноним 2016/03/22 21:17:56  №695547 585
>>695247
Нужна конкатенация переменной $name в цикле.
При каждом проходе надо приклеивать новый слог к имени, а потом в итоге просто вывести $name в echo.
Аноним 2016/03/22 21:19:14  №695548 586
>>695529

> Значит там не TCP-пакеты, а UDP?
да

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

Когда-то маски вычислялись напрямую из адресов: https://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%B0%D1%8F_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%B0%D1%86%D0%B8%D1%8F

Но это давно не используется.

>> Как узел узнает мак-адрес другого узла - узнай самостоятельно.
> Ну узел же получает от DHCP-сервера все настройки и наверное mac-адрес устройства куда передавать пакеты. Ну или оно вручную забивается.
Нет, не получает, только IP шлюза. Аналогично при ручной настройке указывается только IP. Подумай еще.

> Ну или оно вручную забивается.
Тогда тебе надо забивать вручную мак адреса всех соседей в езернет-сегменте и как-то отслеживать их изменение.

Аноним 2016/03/22 21:44:09  №695594 587
>>695547
Спасибо анон. Всё получилось с помощью оператора .=
Аноним 2016/03/22 22:42:16  №695678 588
Не дождался доброанонов, в итоге напиздив кусочков из гугла, сотворил следующую хуйню:
http://ideone.com/i6DutH
Хакиры, посоветуйте оптимизацию, ибо чую, что в регулярках хуйня полная, да и вообще.
На красоту похуй, главное чтобы отрабатывалось как можно быстрее.
вот этот вот >>695120 хуй
Аноним 2016/03/22 22:44:10  №695683 589
В соседнем треде прочитал что, неправильно использовать в функциях класса суперглобальные массивы Пост, Гет или подобные, это не правильно и не ООП.
Это так? Как же тогда верно?
Аноним 2016/03/22 22:56:35  №695691 590
>>695683
Передавать их как аргументы.
Аноним 2016/03/22 22:57:17  №695692 591
>>695691
Откуда передавать?

Есть пример фреймворка в котором так все реализовано?
Аноним 2016/03/22 22:58:07  №695694 592
>>695692
Из контроллера, он для этого и предназначен вроде.
Аноним 2016/03/22 23:02:13  №695701 593
Аноним 2016/03/22 23:03:05  №695703 594
>>695683

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

Также, важно избегать побочных эффектов - я написал про это тут: https://github.com/codedokode/pasta/blob/master/good-code.md#Избегай-побочных-эффектов

Потому твои функции и классы скорее всего не должны лезть ни в какие суперглобальные массивы. Все, что им нужно, ты передаешь через аргументы.
Аноним 2016/03/22 23:15:37  №695715 595
>>695701
>>695703

Так нет, я про сам код фреймворка спрашивал.

В Yii например, класс реквеста при инициализации тащит все эти
массивы в себя.
Аноним 2016/03/22 23:19:05  №695718 596
Аноним 2016/03/22 23:43:42  №695752 597
>>695715

Ну он как бы инкапсулирует в себе эти данные, потому для сокращения кода там добавлен метод который позволяет загрузить данные из суперглобальных массивов. думаю, это вполне ок, в Симфони у класса Request есть аналогичный метод https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Request.php#L265

Также, обрати внимание, вышла рекомендация PSR c интерфейсами для описания ответов и запросов в HTTP:

http://www.php-fig.org/psr/psr-7/
(там много букв может тебе проще глянуть сам код): https://github.com/php-fig/http-message/tree/master/src

Аноним 2016/03/22 23:49:44  №695767 598
Аноним 2016/03/22 23:50:49  №695770 599
>>695767
Вопрос снят. mb_ забыл добавить.
Аноним 2016/03/23 01:03:34  №695861 600
>>695333
>ненормально что ты обращаешься то к полю, то к методу.
Если в isset обращаться к методу, то выдается ошибка что не может проверить результат метода. Что я могу поделать? Приходиться как-то выходить из этого положения. Я бы так обращался всегда через метод.

Вообще, я очень часто замечаю странные вещи в php. Это проблема языка или только у меня такое? Какие языки по-вашему мнению самые простые в написании?

Я, например, считаю что символ $ для объявления переменной лишний, точка с запятой ; - тоже. С радостью бы поставил плагин который фиксит это, если такое возможно.
Просыпается интерес к другим языкам и его синтаксису. Думаю, по логике везде тоже самое. Очень интересует Haskell. У кого-нибудь есть опыт в работе с ним? Интересен ваш фидбэк.
Аноним 2016/03/23 02:02:58  №695896 601
>>695861

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

Насчет isset, он все равно неправильный. isset нет смысла использовать для проверки есть ли поле в объекте так как оно всегда есть, если есть сам объект.

> Я, например, считаю что символ $ для объявления переменной лишний, точка с запятой ; - тоже
А как тогда обозначать конец команды? Как сделать чтобы команда занимала несколько строк?
Ответы 17 марта Аноним 2016/03/23 05:20:48  №695927 602
>>690391

> \b\w+[,;!?:]\S+\b
На мой взгляд регулярку можно упростить еще. Ну например, зачем \b перед \w? Без нее все будет точно так же прекрасно искаться. Или зачем \b после \S?

> v\b\w★[жш]ы\w★\b
То же самое - тут на мой взгляд много лишнего - надо бы упростить

> [^.!?;:—,]\s\b(но|а)\b
Здесь ты предполагаешь что пробел всегда стоит ровно один - но это может быть не так. Например пробелов может быть 2, и первый может оказаться захваченным квадратными скобками. Лучше всего сделать выражение вроде "слово", "пробелы", "а или но"

> Задание на поиск "опечаток" на коррумпированных сайтах.
Не видит русских букв в английских словах: http://ideone.com/DZlzuK

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

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

> (?(4)|[а-яё])
Как это должно работать? Если это вот это http://php.net/manual/ru/regexp.reference.conditional.php то по моему это что-то не то и вообще не работает.

> Не согласен, зайчик. А вдруг слово начинается с большой латинской буквы, например [K]алининградская область, или [M]агнитогорск.
Тогда можно по тому каких букв больше. Или по буквам у которых нет аналогов в другом алфавите. ну вообще меня устроило бы и по первой букве.

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


>>690413

> Кстати, нельзя ли в регулярках писать код типа U+2014.
Нет, пока единственный способ - закодировать символ 16-чными кодами в utf-8 вроде \xd1\xc8. В PHP7 (не в регулярках, а вообще в строках) появится возможность писать "..\u{2014}...": https://wiki.php.net/rfc/unicode_escape
Ответы 17 марта Аноним 2016/03/23 05:21:06  №695928 603
>>691058

В ОП посте есть задания на SQL/MySQL. Освоив их, ты будешь понимать базы данных и остается только освоить библиотеку вроде PDO чтобы делать запросы к базе данных не руками, а из php скрипта. Ну а дальше, если захочешь, можно уже за паттерны работы с БД браться (TableGateway, ACtiveRecord).

>>691392

тут нет ответа? https://netbeans.org/kb/docs/php/remote-hosting-and-ftp-account_ru.html

>>691482

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

>>691501

Анончик, переусложнил ты все. Ну посмотри сколько кода, причем с копипастой, сложно и запутанно. Там раза 3 одно и то же скопировано. Плохо.

Вот правильный алгоритм

- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000

«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.

>>691514

Скорее всего проблема в пробелах или кавычках в пути к текущему каталогу. Хотя я могу ошибаться.
Ответы 17 марта Аноним 2016/03/23 05:21:24  №695929 604
>>691527

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

http://silex.sensiolabs.org/doc/providers.html#controller-providers

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

А статические методы ты зря используешь.

>>691559

Спроси у них.

>>691603

Почитай про callable https://habrahabr.ru/post/259991/ http://php.net/manual/ru/language.types.callable.php

Надо либо передавать анонимную функцию в качестве обработчка, либо ссылку на метод объекта:

$ctrl = new Ctrl(....);
$app->get('/', [$ctrl, 'indexAction']);
Ответы 17 марта Аноним 2016/03/23 05:21:43  №695930 605
>>691617

> function inclineWord($number, $word) {
Функция искуственно переусложнена на мой взгляд. Во-первых ты исукственно ввел ограничение что она склоняет только 3 слова (рубли, тысячи, миллионы) хотя проще сделать универсальную функцию, склоняющую любое слово. Пусть функция принимает на вход 3 варианта слова и выбирает один из них.

Далее, тут ошибка в создании переменной:

if (...) {
$incline = 5;
} elseif (...) {
$incline = 2;
}

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

Далее, программа склоняет неправильно:

> На вашем счету 1571887 один миллионов пятьсот семьдесят одна тысяча восемьсот восемьдесят шесть рублей

> function smallNumberToText($number, $isFemale) {
тут аж 4 уровня вложенности ифов. Слишком сложно разбирать такой код, надо упрощать. Более того, там есть копипаста из-за чего функция стала огромной и нечитаемой. Избавься от копипасты. Ну например вместо того чтобы делать огромные ветки, попробуй обрабатывать части слова по очереди:

- если в числе есть сотни, добавляем слово для сотен
- ... слово для 11-19
- ... слово десятков
- ... слово единиц

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

> $number000 = strtr($number000, $spelling);
Странная конструкция. Для поиска в массиве по индексу есть оператор - квадратные скобки

> function bitNumber ($number) {
имя функции должно начинаться с глагола

> while ($number>=10) {
> $number = $number/10;
> $bitNumber++;
Тут можно использовать логарифм по основанию 10 вместо цикла. Логарифм показывает в какую степень надо возвести основание (10) чтобы получить данное число.

> if (((mb_strlen($number) - $position) % 3) == 0 ) {
> $pieceNumber = mb_substr($number, $position, $len);
Не используй строковые функции с числами

> if ($bitNumber >= 7) {
Гораздо проще просто проверить что число больше или равно миллиону

В общем, код пока не годится - надо исправлять.

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

> Каждый раз, после ошибки, приходится переписывать ее занаво, т.к. не получается разобраться. Даже с комментами. Просто количество скобочек сбивает с толку
Ну вот, ты сам видишь что такой код не годится. Код должен быть понятен.
Ответы 17 марта Аноним 2016/03/23 05:22:00  №695931 606
>>691690

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

- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
- если остаток маленький, выплачиваем сколько осталось и уходим
- иначе платим 5000

«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.

>>691817

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

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

>>691836

Обычно

/var/www/example.com
http://w99953g4.bget.ru/ Аноним 2016/03/23 05:23:48  №695932 607
>>691866

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

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

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

На макете поля вокруг страницы сделаны градиентом - а на странице нет градиента, просто черные поля.

> 10 Respirators
Тут у тебя цифра сливается с текстом в блоке тарифов

Фон на блоке outr skills у тебя черный, а на макете там что-то размытое.

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

Кнопка с меню не работает. Более того, прятать меню на большом экране - глупая на мой взгляд идея так как:

- пользователь не видит что в меню
- надо делать лишний клик чтобы куда-то перейти

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

Если уменьшить масштаб в браузере то почему-то верстка разваливается. блоки с тарифами становятся узкими и текст в них начинает переноситься. В Our skills съезжают графиики.

Если увеличить масштаб, то при наведении на картинку, плашка над надписью view more вываливается из блока. Блок our clients разваливается.

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

> <h2 class="page-header-hgroup__title">we&rsquo;re sarbat</h2>
> <h3 class="page-header-hgroup__slogan">a creative design agency</h3>
Где это видано чтобы текст состоял из 4 заголовков подряд?

> <div class="row m-b-100">
> <div class="col-md-4">
2 бесполезных дива. Зачем они тут нужны? Также, ты закладываешь что в гриде будет ровно 3 колонки и делаешь его неадаптивным.

> <hr/>
Где мой 2000 год. И что это за слеш в конце? Ты часом XML с HTML не путаешь?

> <section class="feedback">
> <div class="feedback-slider">
> <div class="page-wrapper">
> <div class="grid">
> <div class="row">
> <div class="col-sm-6">
> <div class="feedback-comment">
> <div class="feedback-comment__avatar f-l"><img src="img/content/feedback-avatar-2.jpg"/></div>
> <div class="feedback-comment-details">
> <h2 class="feedback-comment__headi
такое ощущение что верстальщику платят за дивы. Это же надо такую лестницу нагородить ради примитивного блока с картинкой и текстом.

> font-family: "Notosans italic";
> font-family: "Notosans bold italic";
> font-family: "Montserrat bold";
Непраивльно объявлены шрифты - это одно семейство.

> src: url(../fonts/montserrat-bold.otf)
Всего один формат - почему?

> html, body, p, button, h1, h2, h3, h4, h5, h6, div, input, ul, li {
> margin: 0;
Это кошмар

> html, body {
> overflow-x: hidden;
Это тоже кошмар

> ul {
> list-style-type: none; }
Теперь все списки на странице останутся без точек

В ксс коде куча копипасты. Нет вендорных префиксов.

В общем, я надеюсь что ты просто пока начинающий и первый блин комом. Это конечно надо переделывать все, от HTML до JS, в идеале вместе с дизайном. Пока качество ниже плинтуса.
Аноним 2016/03/23 10:43:20  №695993 608
Аноним 2016/03/23 11:31:58  №696022 609
>>695932
Vot eto da.
> такое ощущение что верстальщику платят за дивы. Это же надо такую лестницу нагородить ради примитивного блока с картинкой и текстом.
Объясни, пожалуйста, как сделать лучше.
> Непраивльно объявлены шрифты - это одно семейство.
Это критично?

другой-начинающий-верстальщик

Аноним 2016/03/23 12:31:14  №696040 610
Поясните, какие типы в Mysql лучше всего использовать для хранения телефонов? Координат? Булевых значений? Может, есть какие-то гайды, как рассчитать наиболее подходящее поле.
Аноним 2016/03/23 14:09:12  №696099 611
14587313530300.jpg (64, 960x1280)
1280x960
>>691331
>github.com/foobar1643/student-list/
Ну офигеть, я чет думал там все намного проще будет.
Оп, можешь выложить список решений этой задачки? Очень интересно посмотреть как аноны делали.
Аноним 2016/03/23 14:15:23  №696104 612
Аноним 2016/03/23 15:57:24  №696187 613
Мне интересно, хоть кто-то все задачи может сделать в начале обучения? Их даже не все "специалисты" решить могут, лол.
Аноним 2016/03/23 16:01:03  №696194 614
>>696187
Я решил все задачи, кроме "Навигатора" в бонусных.
Филолог, 32 года, изучаю с декабря.
Сейчас вожусь с ООП, сделал также все задачи на HTML+CSS.
Аноним 2016/03/23 16:08:08  №696208 615
>>696187

> Их даже не все "специалисты" решить могут, лол.
Если ты про учебник то задачи там элементарные. Профессиональный программист их в уме решит и ни одного сложного места для него нет.
Аноним 2016/03/23 16:08:39  №696209 616
14587385195110.jpg (28, 500x362)
362x500
Здрасьте. Наконец поверил в себя и решился открыть для себя мир пхп. И уже на первых задачках для нубов натолкнулся на преграду http://ideone.com/JgT3ws . Буду благодарен за объяснение моей ошибки.
Кстати спасибо ОПу за такой подробный гайд :3 Кота запостил.
Аноним 2016/03/23 16:14:40  №696216 617
>>696209
11 и 16 строка - нет кавычек.
Следи за каждой мелочью, пока не войдёт в привычку.
Аноним 2016/03/23 16:15:22  №696218 618
>>696209
27 строка - в else условие, как так-то.
Аноним 2016/03/23 16:16:49  №696220 619
>>696209
В твоем коде на самом деле несколько ошибок которые ты допустил по невнимательности.

Первая из них на 11 строке
>echo "У анона выпало {$anonDice1} и {$anonDice2}\nУ компьютера выпало {$compDice1} и {$compDice2}\n;
Тут ты не закрыл кавычки, из-за этого интепретатор PHP воспринимает весь код дальше как строку. Нужно всегда быть внимательным и закрывать кавычки.

Вторая ошибка на 16 строке
>$doubles = Даблы. Игра закончена.;
Тут ты объявить переменную $doubles как строку, но не используешь кавычки.

Третья ошибка на 27 строке
>} else ($anonSum == $compSum) {
В else не может быть условия, условие может быть в else if.
Аноним 2016/03/23 16:19:35  №696222 620
14587391756310.jpg (12, 320x233)
233x320
>>696216
>>696218
>>696220
Благодарю за быстрые ответы. Буду стараться следить за всеми мелочами.
someApprentice 2016/03/23 17:01:19  №696260 621
>>663578
https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L9
>> public function getStudentById($id) {
>Почему метод возвращает массив, а не модель студента? Чем массив удобнее?
Нужно по среди метода создавать модель студента?

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

public function getStudentById($id) {
...

$result = $student->fetch(\PDO::FETCH_ASSOC);

$student = new Student()
$student->setName($result['name']);
...

return $student;
}
Аноним 2016/03/23 17:01:36  №696261 622
14587416965370.jpg (47, 677x437)
437x677
14587416965381.jpg (122, 715x623)
623x715
14587416965412.jpg (81, 1015x621)
621x1015
Пришёл опять показать то, с каким говном вынужден на постоянной основе связываться PHP-программист. Анон, ещё не поздно передумать!
Аноним 2016/03/23 17:04:46  №696262 623
>>696261
А на второй что не так?
someApprentice 2016/03/23 17:06:08  №696263 624
Аноним 2016/03/23 17:07:35  №696266 625
>>696261
Ну что ты в самом деле, как будто в сурьезном энтырпрайзе на джаве или шарпе никогда не пишут велосипедов и костылей.
Аноним 2016/03/23 17:52:20  №696293 626
>>696260

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

Вот мы можем представить студента в таком виде:

$student = [
'name' => 'Ivan',
'birthYear' => 1990
];

или таком:

$student = new Student;
$student->name = 'Ivan'; // или setName()
$student->birthYear = 1990;

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

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

Насчет этого:

> меня смущает что нужно создавать класс студента посреди класса отвечающего за работу с ДБ:
Ну ведь метод должен вернуть что-то что хранит информацию о студенте. Либо массив либо объект. Что-то все равно придется создать. В этом и есть смысл метода getStudentById.

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

Аноним 2016/03/23 17:53:51  №696296 627
14587448318790.jpg (86, 907x566)
566x907
14587448318811.jpg (39, 780x550)
550x780
>>696266
Не путай одиночные костыли с проектом, который уродлив от начала и до конца.
Аноним 2016/03/23 17:55:27  №696301 628
Может, кто-нибудь сталкивался с функцией mail().
Получается, с этой функцией можно отправлять письма даже от "дикого" адреса например с abunyasha@2ch.hk
Она требует какой-то доп. настройки сервера или работает с plain Apache?
Аноним 2016/03/23 18:03:12  №696322 629
>>696263

Я хотел сказать что можно возвращать сам id или прописывать его в объект-студента. А тут нарушение инкапсуляции. Инкапсуляция подразумевает сокрытие внутри класса деталей его работы. То есть когда мы вызываем метод вставитСтудентаВТаблицу нас не интересует какой именно библиотекой (PDO/mysqli) это делается, какие параметры соединения с БД, какая это БД (mysql или mongodb). Это внутреннее дело класса TDGateway. Мы лишь знаем что можем дать ему объект и он его сохранит.

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

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

Ну к примеру если мы завтра решим перейти с PDO на mysqli нам придется править не только класс TDG, а еще искать где используется этот утекший объект PDO и менять код там.

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

Конечно на твоем простом приложении это не чувствуется. Но представь большое приложение над которым работает 100 человек. Сегодня ты выдал наружу объект PDO - завтра он уже используется в 50 местах и отрефакторить код становится намного сложнее.

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

>>696266

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

Аноним 2016/03/23 18:04:52  №696327 630
Аноним 2016/03/23 18:06:36  №696331 631
>>696296

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

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

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

Аноним 2016/03/23 18:07:42  №696332 632
>>696331
>вам тут никто не позволит писать.
Круто, но это заставляют поддерживать на работе.
Аноним 2016/03/23 18:08:06  №696334 633
>>696331

И хочу еще добавить, что я тут такое часто вижу, люди не хотят учиться всерьез, а хотят побыстрее освоить основы и куда-нибудь устроиться.
Аноним 2016/03/23 18:09:00  №696336 634
>>696332

Ну зато на работе тебе платят деньги в отличие от нашего треда. А что код будет красивый никто не обещал. Старайся сам такой не писать.
Аноним 2016/03/23 18:18:21  №696344 635
Поясните такой момент по SQL. У нас же есть там FOREIGN KEY и ими нужно пользоваться. Но смотрите:
Есть 2 таблицы, допустим таблиза `user` с айдишником юзера и его именем и допустим таблица `user_age` в которой есть id, user_id (внешний ключ) и age. Понятно, что возраст можно тоже в первую таблицу, но чисто для примера. Так вот. Добавляется пользователь на сайт, заполняя форму с именем и возрастом, в таблицу user он норм добавляется, там его id автоинкремент и все ок, но как тут же добавлять его во вторую таблицу если мы еще не знаем его id? Можно конечно написать какой-то костыль, но мне кажется логичным если бы это можно было делать средствами SQL
Аноним 2016/03/23 18:19:01  №696346 636
>>696331
>>код как на скриншотах вам тут никто не позволит писать

Вроде бы у вас тут все такие няшечки почти как доброчан но вот от таких утверждений "холодок" пробирает. Может, все-таки дать возможность выбора стиля? На работе приходится писать код вместе с другими людьми, а в этом треде люди просто наслаждаются кодом.
Аноним 2016/03/23 18:21:02  №696349 637
>>696344
Или пользоваться этой функцией mysql_insert_id?
Аноним 2016/03/23 18:22:32  №696350 638
Иногда писать красивый код просто некогда. Попробуй за пару дней нахуярить всего, что от тебя просит заказчик. Приходится говно всякое писать
Аноним 2016/03/23 18:29:18  №696358 639
Аноним 2016/03/23 18:40:56  №696377 640
>>696346
Ты сам бы хотел ковырять вилкой подобный код от того, кто особо не заморачивался?
Давай теперь по тротуарам ездить и переходить улицы где попало, шишка встанет, возбудимся.
Аноним 2016/03/23 18:53:12  №696395 641
>>696377
Ковырял код сайта на Битриксе, по чужому примеру написал нужный мне компонент. Мне норм. Можно разобраться, если есть комментарии и код хоть как-нибудь структурирован (хоть в виде цельных функций с небольшим количеством точек входа, а не просто слабосвязные фрагменты в разных файлах). Тот код ещё tolerable
Аноним 2016/03/23 19:21:38  №696419 642
http://ideone.com/qygsg4
Аноны, объясните, что делает function mb_ucfirst и так далее? Почему в уроке об этом ничего вообще?
Аноним 2016/03/23 19:28:53  №696423 643
>>696419
>что делает function mb_ucfirst
Возвращает строку с первой заглавной буквой.
Аноним 2016/03/23 20:00:19  №696457 644
>>696346

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

>>696350

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

>>696344

Через last insert id. Вставляешь первую запись, получаешь id, вставляешь вторую.

>>696419

В уроке описаны функции работы со строками mb_substr и mb_strtoupper - ты читал? mb_usfirst это функция которую написал автор кода, с вопросами надо к нему обращаться.

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

Аноним 2016/03/23 20:23:52  №696492 645
>>696423
>>696457
Это я знаю, что за енкодинг? Зачем он?

Аноним 2016/03/23 20:46:01  №696519 646
>>696492

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

Автоматически определить кодировку нельзя, текст в памяти это просто набор байтов (чисел).
Аноним 2016/03/23 20:47:08  №696521 647
>>696492

И ты не должен брать код по ссылке за основу. Он довлоьно плох. Лучше перечитай урок про строки, мануал, и напиши все сам.
Аноним 2016/03/23 21:00:05  №696531 648
Вот некоторые аноны жалуются что им долго все изучать и нельзя ли как-нибудь побыстрее все делать? Вот человек полгода по хардкору учился, берите пример: https://vc.ru/p/180-sites-in-180-days



Аноним 2016/03/23 21:22:22  №696554 649
Насчет ORM. Аноны, писать все эти мапперы или TDG руками - это каменный век. Вылезайте уже из прошлого и осваивайте доктрину. Или хотя бы сомнительный active record из Юи 2.
Аноним 2016/03/23 21:24:18  №696555 650
>>696519
>>696521
Спасибо, попробую по-своему сделать.
Аноним 2016/03/23 21:27:06  №696561 651
>>696554
А я вот где-то читал другое мнение, может быть даже в этом треде. Суть была в том что кто-то жаловался на то, что новички используют всякие ORM типа доктрины, а потом когда нужно написать TDG или EntityMapper руками, они ничего не могут и тупят.
Аноним 2016/03/23 21:49:59  №696582 652
14587589998210.png (113, 1948x858)
858x1948
Я смотрю аноны какой-то pimble-контейнер используют, поясните простым языком зачем оно надо?
У меня подозрение есть, что вот мол на странице будет десяток отдельных типа плагинов выводы товаров, комментариев и на каждый надо свой контроллер, который использует какие то общие штуковины, например соединение с бд и типа удобно все это в одном месте держать. Я правильно понял? Ну там ошибки например в нем собирать, да-да?

Вообще с вью и моделью вроде все очевидно и понятно, а как обращаться с этими контроллерами нет. Весь день эту штуку курю, хочется разобраться как следует перед тем как начать.
Аноним 2016/03/23 21:57:21  №696587 653
>>696582
>удобно все это в одном месте держать. Я правильно понял?
Да. Так же, в контейнере объект создается один раз, и каждый раз когда ты вызываешь метод get(), то получаешь уже созданный экземпляр объекта, а не создаешь его каждый раз заново.
Еще контейнеры удобно использовать при Dependency Injection в контроллерах. Если делать контроллеры зависимыми от контейнера, это позволит убрать завязку контроллера на определенный класс, и в будущем сделать код более удобным для масштабирования.
>Ну там ошибки например в нем собирать, да-да?
Нет, ошибки в нем собирать не нужно. Контейнер существует только для того чтобы хранить объекты, и отдавать эти объекты по необходимости. Для ошибок существуют исключения, у ОПа есть урок на эту тему
https://gist.github.com/codedokode/65d43ca5ac95c762bc1a
И если ты не читал, почитай про Dependency Injection вот тут
https://gist.github.com/codedokode/e1d31a31b37d5f635057
Аноним 2016/03/23 22:03:56  №696594 654
>>696587
>И если ты не читал, почитай про Dependency Injection вот тут
Это походу мне и надо. Спасибо большое.
Аноним 2016/03/23 22:35:24  №696643 655
Подскажите по гитхабу, подскажите такой момент - я создал репозиторий, разместил там файлы и папки своего проекта, тот с кем я работаю сделал изменения в этом репозитории,изменения высветились на самом гитхабе, как мне сделать так, чтобы и у меня на ПК они тоже произошли? Что надо ввести в командной строке?
Аноним 2016/03/23 22:38:33  №696648 656
>>696643
git pull в репозитории с пректом. Или git clone, но это через задницу.
Аноним 2016/03/24 00:48:07  №696743 657
>>696334
КАК СТРАННО-ТО, ДА?
Нет чтоб сидеть, учить, дрочить, изучать годами, живя под мостом или на дошираках, так эти пидоры НА РАБОТУ ХОТЯТ, да побыстрее.
Согласен, да, степень охуевания крайняя.
Пиздить их надо. Ногами.
Аноним 2016/03/24 00:49:19  №696745 658
>>696022

>> Непраивльно объявлены шрифты - это одно семейство.
> Это критично?
Да, из-за этого например не будет такая штука работать:

<div>hello <em>world</em></div>

Так как у него курсивная версия шрифта объявлена как другой шрифт с другим font-family, то текст в em не станет курсивным или может получит "искуственный" наклон, сгенерированный браузером вместо настощяего курсивного шрифта.

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

>> такое ощущение что верстальщику платят за дивы. Это же надо такую лестницу нагородить ради примитивного блока с картинкой и текстом.
> Объясни, пожалуйста, как сделать лучше.
Надо начинать с семантичной верстки в HTML. То есть в HTML мы размечаем текст тегами по смыслу, а все оформление выносим в CSS.

Условно говоря, если там есть отзыв с фото, заголовком и текстом, как его можно разметить? Ну наверно так:

<div class="testimonial">
<h2>заголовок</h2>
<div class="testimonial__text">текст</div>
<img src=... alt=... class="testimonial__avatar">
</div>

Посмотри на эту разметку: у нас есть отзыв (testimonial), внутри в него вложен заголовок, текст и картинка. Согласись, это логичный и минимальный вариант - дальше упрощать некуда.

Заметь что я использовал БЭМ-стиль для именования классов.

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

<div class="column">...</div>
<div class="column">...</div>
<div class="column">...</div>

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

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

1) смысловая разметка текста тегами
2) написание CSS

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

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

Аноним 2016/03/24 00:50:00  №696747 659
>>696743

Как же люди в вузе по 4-6 лет учатся?
Аноним 2016/03/24 00:55:10  №696753 660
>>696582

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

Сервис - это объект, который обычно существует в одном экземпляре и выполняет какие-то действия. Ну например, валидатор, класс TDG для работы с БД, объект PDO. Модель студента - это не сервис, это как раз противоположная вещь, модель, или говоря по-умному "модель предметной области" (Domain model). Она может быть в нескольких экземплярах, а может вообще не быть.


Аноним 2016/03/24 03:01:12  №696793 661
>>696296

О, я не заметил, а там в коде такой шедевр:

explode("<br />", ...)

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

Алсо как я вижу там идет SQL инъекция через куки.
Ответы 19 марта Аноним 2016/03/24 05:09:33  №696814 662
>>691867

В шапке есть пара книг, не очень новых, а других я не знаю.

>>691932

Установи и настрой xdebug. Либо старый добрый var_dump. Твой способ с консолью имеет недостатки, что если например вызвать функцию внутри HTML атрибута, то тег скрипт разломает атрибут и сломает верстку.

>>691990

Ява, C#.

>>692038

Если подставить сумму в 1000 р то считает неверно: http://ideone.com/6egR2l

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

>>692046

Не работает для 1000 р: http://ideone.com/C3KDmi

Много копипасты в коде.
Ответы 19 марта Аноним 2016/03/24 05:09:55  №696815 663
>>692051

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

>>692065

У тебя алгоритм выглядит так:

- увеличить долг и выплатить 5000
- если в следующем месяце будет меньше 5000, то увелчиить долг и выплатить сколько осталось

А надо так:

- увеличить долг и выплатить сколько нужно
- если долг <= 0 то завершить цикл

>>692131

> Вот задача на игру в кубики. https://ideone.com/uufpgm
Все правильно сделано

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

> Айфон в кредит https://ideone.com/XBhKRi
Считает верно, но код можно чуть улучшить.

> $creditBalance = $creditBalance - $monthlyPayment;
> $paymentTotal = $paymentTotal + $monthlyPayment;
Вот это скопировано 2 раза. Попробуй избавиться от копирования, вынеся это наружу из ифа и заменив иф на функцию min или max.

>>692142

Скобки ради читабельности и выделения 2 отдельных условий визуально.

>>692208

Твой запрос ищет записи у которых есть filter_id = 1 или 2. А надо найти записи у которых есть одновременно* оба этих значения. Ну например посты с тегами "юмор" и "политика" одновременно.
ответы 19 марта Аноним 2016/03/24 05:10:12  №696816 664
>>692310
>>692315

> $number = 0;
> $op = $char;
Эти 2 команды повторяются, можно вынести их из ифа чтобы не повторялись.

> (is_numeric($char) | $char=='.')
Логическое ИЛИ пишется как ||, а у тебя тут битовое ИЛИ, которое может давать совсем другие результаты.

Также, лучше избегать exit внутри функции, так как это получается какая-то нехорошая функция которая может завершить скрипт и не вернуть нам управление.

Так, в остальном, все верно.

https://github.com/foobar1643/student-list Аноним 2016/03/24 05:10:39  №696817 665
>>692398

проверяю только новый код.

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

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

Ты же при ошибке CSRF теряешь введенные данные.

Я бы сделал так:

$errors = $regHelper->validateStudent($student);
Если ошибка в токене, добавляем ее в errors.
....

> $student = $this->getFormData($student);
Тут нет смысла возвращать студента так как объект передается в функцию как бы по ссылке

https://github.com/foobar1643/student-list/blob/d9cc915228d101ae0ac26b65f1fad5eadfcc5501/app/Controller/ControllerIndex.php#L23
> $tableHelper = $this->container["tableHelper"];

Что-то я не уверен что TableHelper это сервис. Это ведь объект представляющий информацию о выбранных фильтрах в таблице - тогда он не может быть сервисом, а должен быть обычным объектом. Сервис это объект который обычно есть в одном числе и выполняет какие-то действия над другими объектами или чем-то еще, а тут обычный объект не-сервис. Его надо просто создавать через new.

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

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

Вообще, состояние в сервисах это проблема. Вот например в Симфони 2 объект Request, хранящий информацию о запросе (GET/POST/COOKIE) хранился в контейнере как сервис. Но с ним была проблема, что до определенного момента он мог быть еще не заполнен данными. А в режиме командной строки GET или POST вообще нет. Более того, там можно было создавать искуственный объект Request для вложенной обработки подзапроса и все становилось запутанным, так как в один момент времени это был один объект, а в другой момент - другой.

Они там начали усложнять все и в итоге ввели "scope", области когда сервис доступен (http://symfony.com/doc/2.7/cookbook/service_container/scopes.html ). Я считаю, это неудачное решение.

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

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

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

https://github.com/foobar1643/student-list/blob/d9cc915228d101ae0ac26b65f1fad5eadfcc5501/app/Controller/ControllerIndex.php#L17
Тут стена кода. Учись разбивать ее на методы. Например, вынести в отдельный метод можно:

- функцию анализа GET-параметров сортировки таблиц, поиска, и возвращающую экземпляр TableHelper

> https://github.com/foobar1643/student-list/blob/d9cc915228d101ae0ac26b65f1fad5eadfcc5501/app/Helper/AuthHelper.php#L26
> public function authorizeStudent(Student $student) {
Плохая идея сигнализировать об ошибке через return false так как никто это не будет проверять. Да ты сам не проверяешь. Лучше исплоьзовать исключения.

> public function isAuthorized() {
Копипаста функции getAuthorizedStudent

https://github.com/foobar1643/student-list/blob/d9cc915228d101ae0ac26b65f1fad5eadfcc5501/templates/form.html#L3
> <?php if(isset($errors)): ?>
Что это? Переменная может и не существовать? Если это проверка на null то делай ее явно.

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

Я вижу, ты там getopt освоил? Молодец что не стал велосипед изобретать.

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

При попытке запустить CLI скрипт я получаю:


> php filler/databaseFiller.php
> Warning: include(../app/init.php): failed to open stream: No such file or directory in /home/ubuntu/workspace/filler/databaseFiller.php on line 3
Надо писать абсолютные пути через __DIR__.

Также, совет. Если в первой строке скрипта написать

#!/usr/bin/php

или лучше

#!/usr/bin/env php

И сделать файл исполняемым (chmod a+x file) то в линуксе можно его запускать напрямую, командой

./filler/file.php

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

Ну и при вставке большого числа записей пагинация превращается в спортлото. стило бы конечно ограничить ее. Можно в пагинаторе сделать метод, возвращающий номера страниц которые надо вывести и выводить только певрую, последнюю и несколько страниц рядом с текущей (например +1, +2 и +10).

https://github.com/foobar1643/student-list/blob/d9cc915228d101ae0ac26b65f1fad5eadfcc5501/app/Helper/PaginationHelper.php#L35
> while(0 < $page) {
> $page -= $this->recordsPerPage;
Используй деление.

Вообще, проект произвел хорошее впечатление. Давай уже на фреймворки переходить.

> 1. Я сделал поиск через сфинкс, нужно ли в репозиторий включать мой sphinx.conf с настроенными индексами, или лучше оставить все заполнение для людей которые будут устанавливать приложение?
Да, а как иначе? не самому же этот конфиг писать. Не забудь в установке упомянуть что надо запустить индексатор.

> 2. Так же, переиндексацию я сделал через cron, для этого пришлось написать CLI скрипт на PHP который очищает реалтайм индекс при переиндексации (как очистить rt индексы из командной строки я не нашел). Нужно ли включать его в репозиторий (с bash скриптом для крона) или опять же, это оставить для тех кто устанавливает?
Да, нужно, конечно. И незабыть упомянуть все это в ридми. Переиндексацию желательно делать без остановки работы поиска.

> 3. Если приложению не удалось подключится к поисковому демону (сфинкс просто не устанавливали, например), в этом случае достаточно будет вывести ошибку 503 и написать что подключения к демону нет, или лучше будет на странице с поиском вывести заглушку "Поиск временно недоступен" с кодом 200 и основной навигацией приложения?
Выкинуть исключение которое поймает общий обработчик исключений. Навигацию можно поместить на заглушку страницы 503. Не надо делать частный случай для неработающего демона.

Выдавать страницу с кодом 200 точно неправильно так как роботы могут ее проиндексировать.
Ответы 19 марта Аноним 2016/03/24 05:11:05  №696818 666
>>692437

> $regexpArray[$key]['regexp']
У тебя же есть переменная $value которую только надо переименовать нормально.

> в тексте есть слово «кардинально» или «здесь», «сдела», «сдела», «сдела»
Окончание потерялось

> (\\S)([ ])(\\S)(ж|ш)ы(\\S)([ ])(\\S)
Слишком сложно - зачем тут 7 пар скобок?

> (координально)
А зачем скобки?

> '/(сдесь)/u'
А если оно с большой буквы написано? А, хотя тогда придется заморачиваться с правильной заменой... лучше наверно в это не лезть.

> ([^,])([ ])(но|а)
Ненадежно рассчитывать что будет ровно один пробел - а если два?

> (но|а)(\\s)
После может быть не только пробел, а например запятая. Тут лучше вообще \\b исплоьзовать.

>>692534

Надежнее все же через HAVING ... AND ... проверять наличие всех нужных строк. Также, добавить то же условие в WHERE через OR или IN в надежде что может как-то удастся задействовать индексы для отсева заведомо не подходящих строк.

>>692541

Все команды внутри цикла выполняются несколько раз. Он для этого и придуман.

>>692576

Заведи переменную, положи в нее 1 и пиши в нее 0 если буквы не совпали. В конце проверяй, что в ней и выводи ответ.
Ответы 19-20 марта Аноним 2016/03/24 05:11:21  №696819 667
>>692595

> (mb_substr($i, 0, 1)
первым параметром должна идти строка а не номер символа. Почитай мануал по этой функции.

>>692679

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

И кстати когда ты это сделаешь можно будет обсудить варианты оптимизации, как выбирать путь по графу. ну к примеру вместо того чтобы 2 раза взять по 500 мы можем попробовать сначала сделать это одним прыжком. А если не получится, вернуться и попробовать другие варианты.

>>693075

Плохо что имена переменных непонятные:

> random
> random11
> random2
> random22

Лучше просто random1, random2 и тд. И не стоит писать цифры числами вроде wordfive.

Также, тут можно немного оптимизировать код если первые 2 строки генерировать циклом. Там ведь один и тот же код фактически 2 раза скопипащен.

>>693093

Не знаю почему, решение верное, хотя стоит сделать цикл чтобы не копипастить код вывода первых 2 строк.
Ответы 20 марта Аноним 2016/03/24 05:11:42  №696820 668
>>693100

> $testText = preg_split("//u", $testText);
Там надо еще флаг PREG_SPLIT_NO_EMPTY добавлять а то он 2 лишних пустых элемента добавляет. Вот паста:

-----

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

$letters = preg_split("//u", $text, null, PREG_SPLIT_NO_EMPTY);

Это работает за счет того, что пустая регулярка соответствует "промежуткам" между буквами (пустая регулярка соответствует вообще любой строке) и разбивает по ним строку на буквы. Флаг PREG_SPLIT_NO_EMPTY в конце нужен чтобы удалить 2 пустых элемента в начале и конце массива.

Если вдаваться в детали, то работает это так:

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

Ну например вот дана такая строка:

$x = preg_split("/[0-9]+/u", "a123b456");

- проверяется совпадение строки начиная с первого символа, "a123b456", с регуляркой. Совпадения нет, так как регулярка требует наличия 1 или более цифр, потому preg_split переходит к следующему символу строки
- проверяется совпадение строки, начиная со второго символа ("123b456"), c регуляркой. Совпадение есть - регулярка соответствует символам 123 (квантификатор плюс жадный и всегда стремится захватить максимум символов). Так как совпадение есть, то preg_split проскакивает совпавшую часть ("123"), а то что шло перед ней, добавляет в массив результатов ("a").
- проверяется совпадение оставшейся части строки "b456" с регуляркой - совпадения нет, потому preg_split переходит к следующему символу
- проверяется совпадение строки "456" с регуляркой. Совпадение есть, потому preg_split добавляет в массив результатов "b", проскакивает цифры
- обнаружен конец строки. Preg_split добавляет в массив результатов, все что от нее осталось, это пустая строка, и получается результат ["a", "b", ""]

Теперь вернемся к хаку.

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

Обрати внимание на флаг u. Он говорит что текст в utf-8 и заставляет разбивать строку именно на буквы по границам utf-8 символов, а не на куски по 1 байту (в utf-8 1 символ кодируется несколькими байтами).


-----


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

> if ($testText[$i] == $testText[count($testText) - $i - 1]) {} else {
тут надо просто заменить равно на не-равно.
Аноним 2016/03/24 05:12:08  №696822 669
И спасибо доброанонам, которые помогают начинающим и отвечают на их ответы.
Аноним 2016/03/24 10:12:19  №696875 670
Юзверь на сервер загружает файл с двумя возможными кодировками. Первая "1251", вторая "ISO-чтототам" необходимо перекодить файл в utf8. Как узнать какой кодировки файл что бы заюзать iconv? Или можно два подряд iconv написать из 1251 в utf и потом сразу же из iso в utf.
$var=содержимое файла.
$var=iconv ("CP1251", "UTF-8", $var);
$var=iconv ("ISO-8", "UTF-8", $var);
Кракозябра на выходе не вылетит?
Аноним 2016/03/24 10:47:48  №696889 671
>>696875
Первая кодировка (CP1251), вторая (UCS-2 LE BOM);
mb_detect_encoding определяет обе как ASCII ибо это файлы из эхеля.
Если буду действовать как описал постом выше будет на выходе потеря данных.
$var= iconv('ASCII', 'UTF-8//IGNORE', $var); Тоже не работает
HELP
Аноним 2016/03/24 11:34:28  №696918 672
>>696889
$homepage = file_get_contents('csv/1502.csv');
echo mb_detect_encoding($homepage).'вариант1<br>';
$homepage1 = file_get_contents('csv/1502openandsave.csv');
echo mb_detect_encoding($homepage1).'вариант2';
на выходе:

вариант1
UTF-8вариант2
Аноним 2016/03/24 11:38:52  №696922 673
>>696745
> Так как у него курсивная версия шрифта объявлена как другой шрифт с другим font-family, то текст в em не станет курсивным или может получит "искуственный" наклон, сгенерированный браузером вместо настощяего курсивного шрифта.
Понял, спасибо.
> Ну и вообще код подключения шрифтов там плохой, человек явно пропустил изучение этой темы.
Взял на заметку.
> Порядок всегда должен быть такой:
Оно логично, но тут имхо нужен опыт, чтоб суметь наперед построить всю структуру страницы в HTML. Впрочем, оно приходит со временем наверное.
> Заметь что я использовал БЭМ-стиль для именования классов.
Заметил, но кмк мне пока рановато вскрывать эту тему.

Большое спасибо за ответы.
Аноним 2016/03/24 12:28:08  №696943 674
>>696889

mb_detect_encoding никогда не работал. Нельзя его использовать вообще: https://habrahabr.ru/post/107945/

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

Погугли в интернете на эту тему. Разберись в предлагаемых решениях. Учти что они могут быть неправильными.

> Или можно два подряд iconv написать из 1251 в utf и потом сразу же из iso в utf.
Тебе надо изучить что такое кодировки. Кодировка это таблица показывающая какими байтами кодируется символ. Бездумно применяя перекодировки ты только все сломаешь.

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

>>696922

> но тут имхо нужен опыт, чтоб суметь наперед построить всю структуру страницы в HTML
Ну так давайте набирать опыт в этом треде.

> кмк мне пока рановато вскрывать эту тему.
ну не знаю, это не так сложно, и лучше сразу приучаться к какой-то системе именования.
Аноним 2016/03/24 12:32:28  №696948 675
>>696753
>>696587
ServiceLocator - это создаем класс и в нем складываем все хелперы, а в классе, имеющем зависимости, обращаемся к сл и берем у него что нужно.
Dependency Injection - это то же самое, только попадает в зависимый класс через конструктор.
Я правильно разницу понял?

>Он же следит чтобы они были в одном экземпляре
Это типа создает объекты по мере необходимости? Круто придумали, чет не догадался бы до этого.
Аноним 2016/03/24 12:37:47  №696952 676
>>696943
> Ну так давайте набирать опыт в этом треде.
Давайте. Мне пока званий не совсем хватает, точнее СОВСЕМ не хватает, хотя я вроде стараюсь и 8 часов уделяю. С 1 апреля начну верстать макеты, там уже и начну вас заебывать надоедать
> ну не знаю, это не так сложно, и лучше сразу приучаться к какой-то системе именования.
Логично, лучше чем никак. Принято, надеюсь что аукнется в дальнейшем.
Аноним 2016/03/24 12:38:55  №696954 677
>>696948

> Это типа создает объекты по мере необходимости?
Да. Посмотри исходники pimple.

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

Я тут нагуглил сайтик про паттерны с примерами кода кстати: http://designpatternsphp.readthedocs.org/ru/latest/README.html

Там есть SL: http://designpatternsphp.readthedocs.org/ru/latest/More/ServiceLocator/README.html

Аноним 2016/03/24 12:39:36  №696955 678
>>696952

Вот и хорошо. Можешь потом запостить HTML код и спросить правильно ли он размечен.
Аноним 2016/03/24 12:57:31  №696965 679
>>696954
>и это обычно плохая штука когда в конструктор мы передаем сервис локатор вместо передачи конкретных сервисов
> new Class($container->bdConnect, $container->helpUser);
Да? За ссылки спасибо, буду курить.
Аноним 2016/03/24 13:02:51  №696969 680
Как быстро вкатиться в пхп? опыт других яп есть.(c, java)
Что почитать, посмотреть?
Аноним 2016/03/24 13:05:14  №696972 681
>>696969

Официальный мануал для изучения синтаксиса.

Далее фреймворк - Yii2 или Syfony 2.
Аноним 2016/03/24 13:10:45  №696978 682
>>696972
У меня стажировка со вторника, там как раз в продакшене yi2 + posgre.
По уи что посоветуешь?
inb4 оф сайт.
Аноним 2016/03/24 13:11:18  №696979 683
Аноним 2016/03/24 13:34:54  №696993 684
>>696978

не знаю ничего лучше оф документации.
Аноним 2016/03/24 16:16:34  №697093 685
Пару вопросов.
Читаю материал, а умнее себя не чувствую, это норма?
Каково должно быть соотношение теории/практики?
Часто ли оперившиеся кодеры лезут в гугл за советами?
Как иностранные клиенты/конторы относятся к русскоязычным погромистам? Нету выражения "русский код", случайно?
Аноним 2016/03/24 16:20:58  №697098 686
Какая сука посоветовала https://geekbrains.ru/records/927
Это говно какое-то, нахер я туда полез.
Создателя курса надо за яйца подвесить и линчевать после этого за то, что ни хера не объясняет толком.
Аноним 2016/03/24 17:03:34  №697111 687
Я видел тут где-то давали ссылку на архивы тредов?
Аноним 2016/03/24 18:06:39  №697160 688
Аноним 2016/03/24 18:10:24  №697163 689
>>697160
Вызываешь несуществующую функцию ads(), об этом написано в ошибке.
>PHP Fatal error: Call to undefined function ads() in /home/Kw5nGw/prog.php on line 10

Может ты хотел вызвать функцию abs()?
http://php.net/manual/en/function.abs.php

Учись понимать ошибки интерпретатора, тогда ты сам сможешь сказать что ты делаешь не так.
Аноним 2016/03/24 18:11:36  №697167 690
>>697163
Спасибо, дошло. х)
Аноним 2016/03/24 18:19:27  №697174 691
>>697167
А что ты там навертел, я не понял ничего.
Считает неправильно вроде, я не могу уловить логику вообще.
Аноним 2016/03/24 19:00:04  №697220 692
Ну вот, сделал сам. На сколько бы оценили код?
http://ideone.com/O61VOA
Аккуратно сделан?
Аноним 2016/03/24 19:16:00  №697237 693
>>696972
Давно хотел спросить, почему Symfony так пишется?
По-английски пишется через ph.
По-французски symphonie.
Не могу допустить, что могли допустить такую ошибку, может это связано с авторскими правами, типа кто-то застолбил право на название раньше.
Аноним 2016/03/24 19:39:35  №697258 694
Какой ужасный сайт geekbrains, это просто нечто.
Сообщения идут через жопу, курсы бесплатные - просто говно, юзабилити на нуле (зачем мне видеть постоянно, кто мне лайки поставил или оповещения об ответах). Прочитаешь сообщение - а оповещение о нём все висит на главной панели.
Говно, яростно нерикаминдую.
Если бесплатный курс настолько плох, то это не значит, что платный будет хорош. Сомневаюсь уже в этом.
Аноним 2016/03/24 20:01:14  №697277 695
>>696954
Сайт про паттерны шикарный. (Интересно, как ты находишь такую годноту? Я вбил "паттерны проектирования примеры", выдало неудобоваримые фекалии типа википедии или хабра).
Хотя если честно код примеров который они приводят был бы более полезным, если бы они выводили их как физическую формулу, а не давали готовый код. Тут ведь нужно понять принцип, почему именно такая структура кода, а не выучить наизусть свойства и методы приведенных классов.
Потом попробую сам написать такой пост с "выведением" паттерна из жизненного случая.

Пока такой технический вопрос: вот в описании простой фабрики они приводят пример, где у класса есть белый список объектов, которые фабрика может возвращать.
http://designpatternsphp.readthedocs.org/ru/latest/Creational/SimpleFactory/README.html
Это реализовано защищенным свойством protected $typeList, которому почему-то внутри конструктора присваивается значение массивом.
А почему было не написать сразу значение по-умолчанию?
protected $typeList = array('bicycle', 'scooter');
Я бы еще понял, если бы в конструктор можно было передать этот массив в виде аргумента и потом присвоить свойству.
Может в ранних версиях php такое не воспринимал (принимал только простые значения типа строк или чисел). В 5.5 только что проверил, такая запись валидна.

Еще я видел что иногда такие вещи хранят в методах. Например в yii это набор правил валидации формы http://www.yiiframework.com/doc/api/1.1/CModel#rules-detail
Но это пожалуй действительно неправильно, метод должен что-то делать, а не возвращать неизменяемое значение.
Аноним 2016/03/24 20:03:21  №697279 696
>>697277
>You can imagine to inject your own type list
Виноват, привык не обращать внимания на phpdocs, а там оказывается иногда тоже бывает полезная информация.
Аноним 2016/03/24 20:13:19  №697292 697
Дайте мне какой-нибудь пошаговый курс создания динамического сайта на PHP, JS, MySQL с нуля, вам жалко, что ли? Своекорыстные дьяволята.
Аноним 2016/03/24 20:29:42  №697309 698
>>694597
Прошу принять во внимание решение моей задачи
Аноним 2016/03/24 20:34:26  №697319 699
>>697277

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

> Хотя если честно код примеров который они приводят был бы более полезным, если бы они выводили их как физическую формулу, а не давали готовый код.
для этого попробуй поставить себе вопрос: как реализовать ту или иную вещь. Не знаю, что привести в пример, ну возьмем например паттерн NullObject: допустим у тебя класс зависит от класса логгирования, но ты не хочешь никуда выводить этот лог. Паттерн NullObject придет в голову сам собой.

> А почему было не написать сразу значение по-умолчанию?
> protected $typeList = array('bicycle', 'scooter');
Потому что там использован оператор точка и ты не можешь в значении поля по умолчанию использовать выражения:

> 'bicycle' => __NAMESPACE__.'\Bicycle',

> Еще я видел что иногда такие вещи хранят в методах. Например в yii это набор правил валидации формы
Там другая ситуация. В Юи правила валидации описываются в классе-наследнике, потому в базовом классе под них оставлены методы для возможности их определить.

> Но это пожалуй действительно неправильно, метод должен что-то делать, а не возвращать неизменяемое значение.
Метод может возвращать значение. Более того, методы можно сделать абстрактными и таким образом заставить пользователя их определять, чтобы он точно не забыл.
Аноним 2016/03/25 00:17:33  №697471 700
Клонирование объекта происходит быстрее чем создание нового? Если да, то почему и насколько?
Попробовал самостоятельно сделать сравнение, результат какой-то странный.
http://ideone.com/DtqlJe
На ideone клонирование занимает больше времени. На моем слабом ноутбуке почти одинаково (около секунды). Не знаю, о чем это говорит.

И про метод __clone на php.net непонятное описание.
>Копия объекта создается с использованием ключевого слова clone (который вызывает метод __clone() объекта, если это возможно).
Что значит "когда возможно"?
Метод __clone обязательно должен быть объявлен?
Проверил, объявлять необязательно.

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

Зачем в примере
http://designpatternsphp.readthedocs.org/ru/latest/Creational/Prototype/README.html
они объявляют пустой метод __clone? Или это намек, что если нам понадобится, там внутри можно добавить что-то свое? Ну так и написали бы в комментариях, не пришлось бы гадать.
Аноним 2016/03/25 01:52:15  №697514 701
>>697471

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

> Метод __clone обязательно должен быть объявлен?
только если ты хочешь делать что-то нестандартное при клонирование.

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

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

А почему он абстрактный? Ну наверно чтобы сказать что объект предназначен для клонирования и надо не забыть определить поведение при клонировании.

> На ideone клонирование занимает больше времени. На моем слабом ноутбуке почти одинаково (около секунды). Не знаю, о чем это говорит.
Чтобы была разница надо чтобы при создании что-то делалось относительно тяжелое. Ну например заполняется множество полей, или что-то считается.

Аноним 2016/03/25 04:26:55  №697540 702
14588692153820.jpg (44, 1920x223)
223x1920
>>697111
Вчера в полусонном состоянии почему-то не сохранился 71 тред. Есть у кого-нибудь сохранённый тред? Там очень важные посты!
Аноним 2016/03/25 04:34:30  №697541 703
14588696710780.jpg (346, 1827x565)
565x1827
Аноним 2016/03/25 04:51:49  №697543 704
>>697541
А ты каким файлообменником пользуешься?
Аноним 2016/03/25 05:07:20  №697544 705
>>697541
Как тебе будет проще.
Где ты его достал?
Аноним 2016/03/25 08:39:00  №697582 706
Аноним 2016/03/25 12:04:48  №697655 707
14588966890480.jpg (135, 568x895)
895x568
Как сделать, чтобы границы не менялись при изменении масштаба? Забыл прямо сейчас. Полчаса уже сижу и не могу вспомнить.
Чтобы я уменьшал масштаб, а всё не расползалось, а так же уменьшалось?
Задачи на HTML+CSS Аноним 2016/03/25 12:52:42  №697690 708
14588995621160.jpg (32, 600x396)
396x600
1 задача: https://jsfiddle.net/te5t987m/
2 задача: https://jsfiddle.net/13Lkpwtc/
3 задача: https://jsfiddle.net/8gcbwyc5/
4 задача: https://jsfiddle.net/5qotwgrr/
5 задача: https://jsfiddle.net/skemuf9g/
6 задача: https://jsfiddle.net/as3yrj0y/
7 задача: https://jsfiddle.net/t7d5x54r/
8 задача: https://jsfiddle.net/74398gsy/
9 задача: https://jsfiddle.net/bmsof3d1/
10 задача: https://jsfiddle.net/sfybve16/
11 задача: https://jsfiddle.net/3uhzjytk/
Главная задача - макет сайта - готова в общих чертах, но домен пока не доступен.
А вообще её же можно выложить просто на Гитхаб...
Сегодня попробую разобраться с этим.
Аноним 2016/03/25 13:12:38  №697717 709
14589007581940.jpg (65, 800x669)
669x800
Установлен XAMPP, сейчас думаю установить Atom.
Всё правильно делаю?
Совета мне бы Аноним 2016/03/25 13:27:48  №697738 710
14589016689770.png (1347, 866x2934)
2934x866
Как ОП и аноны относятся к видеокурсам?
Вот есть Специалист с овер 1к баксов за курс и со слитыми на nmm-club всеми курсами без возможности фидбека.
Есть myrusakov за курсы по паре тыщ рублей и 2500 видосами от прошедших курсы, его хвалят, наверняка всё это есть на торрентах.
Есть нетология и гикбрейнс.
А есть наш ОП с отличным учебником до ООП (только вкатываюсь в ООП, пока не смотрел, что там).
Наш ОП - по-любому, но, может, ещё что-нибудь в нагрузку посоветуете посмотреть?
Часто иной подход помогает закрепить и лучше понять пройденное, вот к этому стремлюсь.
Аноним 2016/03/25 15:13:57  №697871 711
>>697738
В курсах все галопом по верхам. Я посмотрел только специалиста и то, потому что под капельницами лежал и больше занять себя было нечем. Информация подается ну ооочееешь медленно. Но такова суть массовых курсов, они должны покрывать наибольшую массу людей, иначе не будет восторженного фидбека и продаж.
У меня знакомый преподает яву в Беларуси на подобных курсах. Так от статистики я немного прифигел. Почти треть бросает не доучившись и до половины. Это при том что оплачивается весь курс сразу. Финальный экзамен сдает где то половина от оставшихся и только единицы доделывают индивидуальный проект (что то вроде задачи про файлообменник от ОПа). Мое мнение: если времени навалом, то почему бы и нет. Главное понимать, что некоторые сложные моменты будут опускаться в угоду доступности для понимания более широким кругом лиц.
Аноним 2016/03/25 15:53:00  №697919 712
Объясните пожалуйста, как работают неймспейсы и автозагрузка.
Как пхп ищет что либо по нейспейсу и просто по имени класса?
Аноним 2016/03/25 15:55:17  №697921 713
Аноним 2016/03/25 16:00:19  №697928 714
>>697871
Спасибо за ответ, братишка.
Я думаю, что статистика подобная была бы и у нашего ОПа, если бы он как-то её отслеживал.
Я как-то обратил внимание на то, что количество форков у задач ОПа чем дальше, тем меньше.
Но братишки совершенно разумно объяснили это тем, что дальше люди стараются установить IDE, Apache, MySQL, вот это всё, уже нет нужды писать код на Ideone.
Хотя я сам только сейчас всё устанавливаю, начиная осваивать ООП.
>некоторые сложные моменты будут опускаться в угоду доступности для понимания более широким кругом лиц.
Я чувствую себя достаточно неуверенно и после большинства решённый бонусных задач, мне чем проще, тем лучше.
А как у Специалиста всё идёт: каждое занятие объясняет какой-то этап по созданию сайта?
Пошаговости мне не хватает крайне.
Аноним 2016/03/25 17:11:07  №698019 715
Аноним 2016/03/25 18:05:43  №698068 716
>>698019
http://ideone.com/munQVK - тире может быть и в домене.
Ещё:
>Номер + 7 999 123 4567 - верный
>79991234567
Исправление неправильное. Или 8, или +7.
Аноним 2016/03/25 19:25:14  №698150 717
>>697690
Чёрт, вижу, некоторые задачи не в окончательном варианте сохранены, а в промежуточных. Особенность jsfiddle - прибавляет цифру к УРЛу, сохраняет отдельно важные изменения. Я там и делал, а потом всё равно сохранил без цифр.
1 задача: https://jsfiddle.net/te5t987m/3/ - например.
Ну да чёрт с ними совсем, целый месяц на разбор этого всего ушёл, хотя всё равно лёгкости и понимания нет.
Аноним 2016/03/25 21:26:51  №698231 718
>>697928

> мне чем проще, тем лучше.
Тяжело в учении - легко в бою. Слишком "простые" объяснения могут привести к тому, что ты какую-то тему не освоишь и потом не сможешь понять что не работает.

Вот там где-то в треде люди не понимали как куки или сессии работают например.

А так, конечно, может быть полезно посмотреть еще какие-то другие курсы. Может ты что-то подзабыл, а тут вспомнишь. Только код не забывай писать, слишком много теории тоже плохо.
Аноним 2016/03/25 22:03:57  №698243 719
Выполнял первый более менее серьезный проект. Интересно все заказчики такие ебанутые или мне просто не повезло первый раз. Сделал все, что изначально планировалось. Потом началось а можете добавить вот тут хуетушечку, а вот здесь небольшой блок по выводу кала, а вон там можете чекбоксики с мочей поставить, а справа 3 блока с просмотренными товарами добавите. Пиздец. И все это в пиздец какие короткие сроки, как будто это как посрать сходить - изменить структуру бд, изменить формат вывода, перелопатить валидатор. Естественно я там наговнокодил. Жаль человека, которому придется туда заглядывать и что-то допиливать.
Аноним 2016/03/25 22:13:58  №698248 720
Сап, анончики. Задали курсач - написать простенькое веб приложение с использованием паттерна MVC что-то вроде простенького блога. Реализовывал подобное на php, но как начал искать информацию и понял что толкового очень мало. Может кто посоветует литературу, а в идеале простенький пример.
Аноним 2016/03/25 22:17:55  №698255 721
>>698243
На фрилансе?
Всегда должно быть чёткое ТЗ с пунктиками, иначе будет свистопляска. И для заказчика, и для фрилансера.
Аноним 2016/03/25 22:30:54  №698270 722
>>698255
>На фрилансе?
Да
Ну заказчик по-моему был не совсем в теме и сам точно не знал чего хочет.
Аноним 2016/03/25 22:32:37  №698273 723
>>698270
Таких сразу мимо. Имхо.
Себе дороже.
Ну или не по БС, а с предоплатой.
Аноним 2016/03/25 22:38:15  №698276 724
Ребята, смотрите как мой php нарушает мою логику вещей

//Форма регистрации которая не содержит $id поля и которое будет получатся в классе User'а
class RegisterForm
{
public $login;
public $password;
}

class User
{
//Присваиваем значение null чтобы удобней было передавать данные при передачи их в БД
public $id = null;

public $login;
public $password;

//Внедряем значения из Формы или получаем их из ДБ
public function __construct($properties)
{
$this->setProperties($properties);
}

//Создаем универсальную функция для получения всех значений
public function setProperties($properties)
{
//Преобразовываем в объект на случай если данные берутся из архива возвращающегося из БД
$properties = (object) $properties;

foreach ($properties as $property => $value) {
//Проверяем на то что существует ли свойство с таким же названием как и свойства полученных данных
if (isset($this->$property) {
$this->$property = $value;
}
}

}

}

class DataMapper
{

public function getUserById($id)
{
$query = ...
$result = $query->fetch(\PDO::FETCH_ASSOC);

$user = new User($result);

return $user;
}


public function addUser(User $user)
{
$insert = $pdo->prepare("INSERT INTO students (id, login, surname) VALUES (NULL, :name, :password)");
$insert->execute(array(':login' => $user->login, ':password' => $user->password));
}

}

____

isset не проверяет что существует переменная, она проверяет не изменена ли переменная на значение отличное от NULL. Собственно, вытекает такой вопрос, как проверять на то что существует ли переменная?
Аноним 2016/03/25 23:05:57  №698291 725
>>697717
Не думаю, а тебе зачем?
Аноним 2016/03/25 23:14:12  №698298 726
>>698243

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

>>698248

А что ты знаешь? С нуля тут много тем надо изучить: PHP, html , css, js, sql , базы данных, архитектуру, mvc, ооп, какой-нибудь фреймворк. Большинству из этого можно научиться, кое-какие ссылки есть в шапке, но это не быстро. Ты сам-то понимаешь, во что ввязался?

>>698276

> $properties = (object) $properties;
Ерунда какая-то. Как можно преобразовать что-то в объект когда не указан даже класс этого объекта?

И вообще ненормально когда ты не знаешь данные какого типа даются функции.

> isset не проверяет что существует переменная, она проверяет не изменена ли переменная на значение отличное от NULL.
Это в мануале описано ведь.

> Собственно, вытекает такой вопрос, как проверять на то что существует ли переменная?
Это не требуется. В объекте всегда известно какие поля есть, а каких нет. Если ты не уверен то есть property_exists или что-то такое.

Также, я бы убрал prperties из конструктора - setProperties можно и так вызвать.

Аноним 2016/03/25 23:14:37  №698299 727
>>697717

XAMPP лучше удалить и поставить нормальный Апач с PHP.
Аноним 2016/03/25 23:42:11  №698314 728
>>698298
>А что ты знаешь? С нуля тут много тем надо изучить: PHP, html , css, js, sql , базы данных, архитектуру, mvc, ооп, какой-нибудь фреймворк. Большинству из этого можно научиться, кое-какие ссылки есть в шапке, но это не быстро. Ты сам-то понимаешь, во что ввязался?
Я знаком с пхп и делал, что-то вроде задачи про студентов на нем. Но начав копать в стороун серевлетов, понял что инфы очень мало. Намного меньше, чем по пхп. При этом разработка на джаве сложнее(с ее синтаксисом тоже знаком был курс в пол семестра в шаражке). И пока что я в тупике.
Аноним 2016/03/25 23:47:26  №698315 729
Аноним 2016/03/25 23:58:56  №698330 730
>>698315

Потому что нгинкс сложнее в итоге настраивать - надо еще php-fpm поднимать, настраивать запуск всего этого. Для разработки Апач проще поставить.
Аноним 2016/03/26 00:00:37  №698333 731
http://pastebin.com/cDy6xGQD
Очень хочется понять, что именно в коде не так. Я только-только начал учиться и уже на 2-й задачке у меня траблы. Объясните плз, ПХПшники!
Аноним 2016/03/26 00:03:39  №698337 732
>>698298
>Ерунда какая-то. Как можно преобразовать что-то в объект когда не указан даже класс этого объекта?
Он будет преобразован в stdClass
https://secure.php.net/manual/ru/language.types.object.php#language.types.object.casting

Что плохого в использовании этого? Не вижу ничего плохого в том, чтобы пользоваться этой возможностью.

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

>>698298
>> isset не проверяет что существует переменная, она проверяет не изменена ли переменная на значение отличное от NULL.
>Это в мануале описано ведь.
По первой ссылке в гугле пишут что это именно метод проверки на то что переменная существует

>>698298
>> Собственно, вытекает такой вопрос, как проверять на то что существует ли переменная?
>Это не требуется. В объекте всегда известно какие поля есть, а каких нет. Если ты не уверен то есть property_exists или что-то такое.
Без этого программа может не работать, потому что на вход могут придти данные не соответствующие полям объекта. Например, из класса формы регистрации могут прийти свойства пароля и повторного пароля, и они не должны содержаться в объекте пользователя, за место них будут свойства хэша, токена и соли.
Аноним 2016/03/26 00:06:24  №698341 733
>>698333
Херась, ты навертел!
Проще всё надо.
Цикл for, прибавляем к $i = 16 единицу, а сумму вклада каждую итерацию умножаем на 1.1.
Останавливается цикл, когда у анона образовалось больше или равно одному миллиону.
Аноним 2016/03/26 00:14:23  №698347 734
>>698337

> Он будет преобразован в stdClass
А что такое stdClass? Зачем вообще нужен такой класс когда есть массив который может все то же самое только к нему прилагается куча функций для работы с ним?

stdClass это ошибка проектирования PHP и незачем его вообще использовать.

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

> По первой ссылке в гугле пишут
Мало ли что в гугле пишут, ты мануал читай всегда в первую очередь.

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

Проверь что модель не знает ничего ни про базы данных ни про формы. Она должна быть отвязана от этого, маппингом в базу данных или обновлением модели из формы должны заниматься другие классы.
Аноним 2016/03/26 00:16:13  №698349 735
>>698337

У меня это по моему написано в комментариях к задаче: гитхаб однажды взломали как раз из-за того что они данные из формы записвали прямо в модель без ограничений - и взломщик себе выставил как-то повышенные привилегии, хотя поля для них в форме конечно не было.
Аноним 2016/03/26 00:27:20  №698359 736
14589412407160.png (108, 1000x1000)
1000x1000
>>698333
>($a = 10000)&&($age = 16); ($a = 1000000); ($a = $a * 0.10 + $a)&&($age++)
Где ты такое взял? Я не разу не видел чтобы в наших уроках такое было написано.
Тебе нужно писать как написано на пикрелейтед >for ($i = 0; $i <= 10; $i++), только заменить на for ($age = 16; ... ) {

Затем высчитать проценты и проверить есть ли уже миллион
$money = ... ;

if (...) {
echo "Миллион будет через {$age} лет";

И затем остановить цикл break;
Аноним 2016/03/26 00:33:41  №698364 737
Аноним 2016/03/26 00:39:54  №698369 738
>>698359

Он там напутал. Вот смотрите, в уроке про циклы написано:

> for (действие1; условие; действие2) { ... тело цикла ... }

и ниже:

> Условия и действие в шапке цикла не обязаны быть связаны друг с другом и работать с одной и той же переменной. Например, можно написать for ($a = 1; $b < 10; $c++) { ... }

Видно что анон перепутал места где пишутся условия и где действия перед циклом и после каждого шага.

Далее, условия можно объединять через && или ||, это написано в уроке про кубики. только вот объединять надо именно условия. То есть можно так писать:

....($a > 10000)&&($age > 16)....

То,что у анона - это конечно неправильно. Ну например в условии надо писать ==, а не =. Он написал

$a = 1000000

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

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

for ($a =1 , $b =2; .....

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

Он связал действия через &&. С таким же услпехом их можно связать любой другой операцией например

($a = 10000) + ($age = 16)
($a = 10000) - ($age = 16)

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

Также плохо что есть 2 переменныхз с похожими именами age и age1 - это путает

Плохо что число 16 и 10000 написано 2 раза и его неудобно менять.

В общем, код надо улучшать.
Аноним 2016/03/26 00:40:47  №698371 739
>>698364

Удобнее. Но если кто-то хочет поставить и настроить нгинкс + php-fpm, готов их изучить и разобраться, я не против, хотя не вижу выгоды настраивать среду для разработки как продакшен.
Аноним 2016/03/26 00:47:24  №698376 740
>>698359

Также, поясню еще кое-что. В PHP (как и в Си) оператор = это именно оператор, который возвращает результат (присвоенное число). Потому можно писать всякие адск