«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Чат изучающих PHP #70 Аноним 2016/02/10 19:59:42  №649329 1
14551235823870.png (33, 500x500)
500x500
14551235823881.jpg (157, 1024x683)
683x1024
14551235823912.jpg (34, 650x384)
384x650
14551235823923.jpg (118, 1024x768)
768x1024
Добро пожаловать в наш уютный чатик. Тут мы ~~флудим~~ изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

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

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

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

У нас есть уроки по основам 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/02/10 20:06:29  №649337 2
14551239894540.png (56, 500x644)
644x500
14551239894551.jpg (72, 1022x575)
575x1022
14551239894562.jpg (47, 636x400)
400x636
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на 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/02/10 20:13:36  №649354 3
Вот если я допустим занимать одно временно фронт и эндом, то что мне нужно учить?
Аноним 2016/02/10 20:14:04  №649356 4
Аноним 2016/02/10 20:17:51  №649361 5
В старом треде >>639138 (OP) даны ответы на все посты до 7 февраля. Кто постил 8, 9, 10 - погодите чуть-чуть.

Если вас пропустили - напомните о себе в этом треде.
Аноним 2016/02/10 20:20:36  №649369 6
>>649354

HTML/JS/CSS и PHP/SQL/ООП/MVC/фреймворки. Можно параллельно.
Аноним 2016/02/10 20:34:12  №649395 7
>>649350
Ничего не понял.
>COUNT(колонка) считает число строк в одной группе, где колонка не равна NULL. Потому там получается либо 0 либо одинаковые числа
Одинаковые с чем? При группировке ведь они не одинаковые. По отдельности джоины показывают нормальную инфу, почему два джоина одновременно из одной и той же таблицы дают противоречивый результат? По моему каждый джоин должен расценивать лайки как отдельную таблицу и мы выбираем число совпадений из первой заджоиненой таблицы лайков, группируем по айди, затем тоже самое по второй, хотя это та же самая таблица. А как мне поможет число уникальных значений, если у меня в поставленных и полученных лайках хранится айди пользователя, соответственно число уникальных значений для каждого всегда будет 1?
Аноним 2016/02/10 20:44:01  №649406 8
>>649317
>Кнопка "отметить все" не инветирует цвета, а заливает все черным.
Так чтобы инвентировать, надо циклом пройтись по всем ячейкам чего по условию делать нельзя.
>> var firstClicked = ""+x+y;
>Тут явно ошибка, что если числа двухзначные? Или одно двухзначное, а другое нет?
А в чем проблема с двухзначными числами?
Аноним 2016/02/10 20:50:02  №649417 9
>>649395

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

> По отдельности джоины показывают нормальную инфу, почему два джоина одновременно из одной и той же таблицы дают противоречивый результат?
Сделай селект (юзер), (лайки1), (лайки2) без COUNT и GROUP, но с джойнами и посмотри. Тебе надо разобраться как выполняется запрос.

> По моему каждый джоин должен расценивать лайки как отдельную таблицу и мы выбираем число совпадений из первой заджоиненой таблицы лайков, группируем по айди, затем тоже самое по второй, хотя это та же самая таблица.
Неверно. Сначала мы делаем джойны и получаем все возможные комбинации записей которые соответствуют условиям ON и WHERE (если они есть). Потом мы группируем строки. Потом считаем COUNT.

Почитай хотя бы тут https://ru.wikipedia.org/wiki/Join_(SQL)

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

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

Аноним 2016/02/10 20:51:44  №649420 10
>>649406

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

> А в чем проблема с двухзначными числами?
В том что "1" + "21" дает то же что и "12" + "1". Плюс у тебя там в коде заложено что ширина и высота поля меньше 10, таких ограничение не дложно быть.

И вообще это выглядит как запутывание и усложнение. Двумерное поле удобюно реализовать двумерным массивом, зачем усложнять код не очень понятно.
Аноним 2016/02/10 20:55:11  №649426 11
>>649420
Добавляем класс таблице - перекрашиваем её в черное. Убираем класс - обратно в белое. Видимо я плохо знаю ксс, но я не понимаю, как можно, назначив ксс-атрибут таблице, изменять цвета её ячеек в зависимости от их текущего цвета.
Аноним 2016/02/10 20:56:55  №649430 12
>>649426

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

>>649395

Вообще, в джойнах и декартовых произведениях очень важно разобраться. Многие задачи решаются именно джойном нескольких таблиц с дальнейшим отсевом записей по условиям.
Аноним 2016/02/10 21:32:52  №649523 13
Аноним 2016/02/10 22:00:52  №649577 14
Аноним 2016/02/10 22:09:47  №649590 15
Друзья, как закрепляете пройденный материал? И заучиваете ли вы наименования команд?
Аноним 2016/02/10 22:17:59  №649596 16
>>649590
Пишу короткие куски кода на пройденную тему без использования справочников и автозаполнения кода в IDE. Вроде помогает, но через пару месяцев все равно много забывается, повторять надо.
Аноним 2016/02/10 22:33:53  №649613 17
>>649590
Я не прохожу мимо решённых задач у анонов, почти каждую форкаю, исправляю, пытаюсь помочь решить и братишкам.
Довольно много нового узнал именно таким образом, а старое - крепко усвоил.
Аноним 2016/02/10 22:39:11  №649617 18
Кто-нибудь совмещает с основной работой? Если да, то как, удачно? Кто-то уже ушёл со своей специальности на кодера?
Аноним 2016/02/10 22:41:21  №649618 19
>>649617
Какие кодеры, тут дальше айфонов дело идет у единиц
Аноним 2016/02/10 22:44:22  №649622 20
>>649577
Замени myisam на innodb и расставь внешние ключи.
Поставь первичный ключ у `likes`(составной, на обе колонки)
Аноним 2016/02/10 22:50:38  №649632 21
>>649617
Я работаю пять дней в неделю, но уделяю два часа в день - обязательно.
Пришлось перестать читать художественную литературу и смотреть фильмы, пока об этом не жалею. Гуляю три часа в день.
С 10-го декабря вот только дошёл до бонусных задач в учебнике ОПа, ничего не пропускал.
Считаю, что пока всё вполне успешно.
>>649618
Да, задача действительно переломная. Или не справляются и бросают, или справляются - и пропадают. Ещё регулярные выражения, когда ОП или братишки начинают их разбирать, - почти так же действуют.
Аноним 2016/02/10 22:53:49  №649635 22
>>649617
пытался совмещать, зафейлил(забывал всё постоянно), с прошлой недели уволился. Счстлив. Теперь учу по 10 часов в день.
Аноним 2016/02/10 22:59:18  №649641 23
>>649617
Устроился кодером, полгода пашу уже. С тех пор уровень не подрос особо, на работе все задания однотипные.
Аноним 2016/02/10 23:00:32  №649643 24
>>649632
>Я работаю пять дней в неделю
>уделяю два часа в день - обязательно
>Гуляю три часа в день.
Аноним 2016/02/10 23:01:25  №649644 25
Аноним 2016/02/10 23:05:00  №649647 26
Аноним 2016/02/10 23:11:04  №649654 27
Что означает //u в задаче про строки, где ОП переводит текст в массив? Вроде внимательно пересмотрел записи, не нашёл ничего.
Аноним 2016/02/10 23:11:09  №649656 28
>>649647
так копил. Денег хватит по рассчётам до конца года и ещё останется
Аноним 2016/02/10 23:11:32  №649658 29
>>649656
но я надеюсь, конечно, найти работу до лета хотя бы
Аноним 2016/02/10 23:15:13  №649660 30
Не понял суть конструкции <<<EOF. Для чего это надо, когда в конце в эхо вписывается переменная? Почему бы переменной просто не назначить большой текст? Ведь разницы в записи нет. <<<EOF выглядит, как лишнее действие
Аноним 2016/02/10 23:16:03  №649662 31
Аноним 2016/02/10 23:16:19  №649664 32
>>649662
И всем стремящимся
Аноним 2016/02/10 23:22:19  №649668 33
По поводу программы про палиндром: в какой теме из учебника было про то, как вырезать что-то из строки? Помню только, что можно было выкинуть элемент из массива.
Думал, что для начала надо построить массив, потом выкинуть из него пробел, но ОП рекомендует такой алгоритм:

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

Я где-то просмотрел команду на вырез символа?
Аноним 2016/02/10 23:27:03  №649669 34
14551360232690.jpg (231, 1799x1199)
1199x1799
ОПушка, решаю задачи на ООП:

1. простая очень, не буду отвлекать ею
2. http://ideone.com/GmqSWk - табличка по сотрудникам.
3. http://ideone.com/hFXfAz - "Вектор" впервые пишу такого монстра, охуеть

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

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

*=======
Также: задача на лайки SQL (ты в прошлом треде дал комментарии по улучшению)
http://sqlfiddle.com/#!9/8264a7/2

Есть вопросы:
1. поменял TEXT на VARCHAR. Но зачем? Разве TEXT не универсальней?
2. Добавил референс (внешний ключ), и почитал по ссылке, но не очень понял, зачем он тут? И без этого работало же.
3. Ты советовал во вторую таблицу(likes) добавить PRIMARY KEY тоже, но для чего? Я пытался сделать одну из колонок праймери ки, но пишет ошибку.
Спасибо заранее.
Аноним 2016/02/10 23:30:08  №649673 35
>>649668
мб замена? str_replace
Аноним 2016/02/10 23:34:40  №649680 36
Аноним 2016/02/10 23:36:49  №649683 37
>>649660
<<<EOF нужно, чтобы текст не надо было разбивать готовый. Если кавычки используешь, надо весь текст проверять, их искать и экранировать, или разбивать на куски. Тут нет. Если большой текст, то удобнее с <<<EOF. С небольшими удобнее с кавычками.
Аноним 2016/02/10 23:38:37  №649684 38
Ничего если с дб прямо из виджета работать или обязательно только в контроллерах?
Аноним 2016/02/10 23:54:32  №649690 39
Что-то меня разнесло, извините.
Обстоятельность никому не нужная и разговоры о жизни, ничего важного.

>>649643
У меня работа связана с постоянным вниканием в текст, я три часа гуляю обязательно, причём с семьёй, иначе давно бы свихнулся. Хожу в тренажёрный зал, хожу на открытую площадку в парке, там тоже тренажёры. Катаюсь раз в неделю на коньках, бегаю на лыжах.
Я не считаю хорошим отдыхом сидение за компьютером и просмотр всякой ерунды.
Часа полтора перед сном, полчаса в общей сложности на работе - вот и всё моё обязательное время для изучения РНР.

>>649669
Оо, старый знакомый. Перешёл уже к ООП, неплохо.
А я доделал "Числа прописью", но там много несуразностей, ОП уже разобрал сегодня. Как-нибудь поправлю.

>>649668
Preg_replace.
Советую искать в учебнике ОПа каждый раз на этом этапе - так ты лишний раз всё просматриваешь, многое дополнительно усваиваешь.
Аноним 2016/02/10 23:57:58  №649692 40
>>649654
Это регулярка же с пустым символом и флагом u для корректной работы с кириллицей: '//u'.
Эта регулярка находит все пропуски между символами, с её помощью можно, например, разбить слово на отдельные буквы и наполнить ими массив.
Аноним 2016/02/10 23:58:44  №649693 41
>>649690
Учебник ОПа - это изображения "из пейнта", в которых теория описана?

Братцы, это совсем безнадёга? http://ideone.com/hTLms6
Аноним 2016/02/11 00:00:39  №649694 42
>>649692
Дополнение: поставь вот такую регулярку - '/ /u' - найдёт пробелы (аналогично и '/\\s/u').
Аноним 2016/02/11 00:01:33  №649695 43
>>649693
>Учебник ОПа - это изображения "из пейнта", в которых теория описана?
Да. Теория с задачами и кучей толковых советов.
Аноним 2016/02/11 00:05:09  №649698 44
>>649693
Нет, всё в порядке, просто разберись с функцией mb_substr:
1. Как получить первый символ в тексте с её помощью?
2. Как получить последний символ в тексте с её помощью?
Основная проблема с этим.
Далее символы у тебя получаются строковые, они не могут быть больше или меньше, они могут быть только равны друг другу или не равны. Поэтому ($symb1 <> $symb2) не будет работать в этой ситуации.
Аноним 2016/02/11 00:07:38  №649699 45
>>649693
А ещё на каждом шагу делай var_dump - чтобы убедиться, что функции дают то, что ты задумывал.
Аноним 2016/02/11 00:09:40  №649701 46
>>649698
Спасибо, завтра разберусь
Аноним 2016/02/11 00:11:11  №649704 47
>>649690
Да-да, помню тебя, анон. Молодец, я так и не доделал две последние задачи из php (тригонометрия и расчёт маршрута), всё лелею надежду вернуться к ним, но решил для начала добить ООП (интересная тема на самом деле).
Аноним 2016/02/11 00:39:33  №649724 48
Надо вывести определённый блок вёрстки на печать на принтере, с учётом всех стилей, делаю так в файле css

@media print {

....код CSS для этого блока

}

Всёравно выводит на печать документ без учёта стилей, как это можно исправить?
Аноним 2016/02/11 01:16:55  №649732 49
Как веб-программисты получают по 2К долларов в месяц? Я уже 3 день пишу один функционал на сайт, у заказчика меняется ТЗ каждый день, он просит добавить что-нибудь ещё, в итоге если завтра я доделаю всё это, то получу 1500 рублей. Я конечно куплю себе Биг Мак, а может и даже два, но с такой работой больше 15К рублей не заработать в месяц.
Аноним 2016/02/11 01:19:51  №649734 50
>>649732
Зачем ты на русскоговорящих работаешь? И вообще это не по теме треда.
Аноним 2016/02/11 01:32:58  №649739 51
>>649732
где и как ты такого заказчика взял?
Аноним 2016/02/11 01:43:37  №649745 52
>>648489
По поводу "keep-alive" (постоянное соединение, знаю). А сколько одновременных соединений может выдержать сервер?
Что если с тысяч компов будет установлено соединение, и каждую секунду высылаться по одному байту, лишь бы держать соединение вечно. Что-то похожее на дудос. Сервера как-то умеют от этого защищаться?

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

Остальное получилось средствами curl.

С этим ssl и https все-таки непонятно. Что это, зачем это, как оно мне пригодится на практике. Если на собеседовании спросят "что такое https и чем отличается о http?", я могу сказать только "ну типа че-то там шифруется". Наверное, это не очень полный ответ. Как бы ты на него ответил?
Аноним 2016/02/11 01:46:13  №649746 53
>>649734
Ты предлагаешь мне заставить его выучить английский язык, а что делать если он его уже знает?
Аноним 2016/02/11 05:34:58  №649782 54
>>649746
Если знает, пишешь цену в долларах.
Аноним 2016/02/11 07:53:19  №649792 55
>>649654

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

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

$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 символ кодируется несколькими байтами).

Аноним 2016/02/11 08:08:04  №649793 56
>>649660

Это heredoc, он позволяет писать строку содержащую и одинарные, и двойные кавычки. Почитай мануал, обрати внимание, что там есть еще nowdoc: http://php.net/manual/ru/language.types.string.php#language.types.string.syntax.heredoc

То есть это альтернативный способ записать строку.

>>649669

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

> поменял TEXT на VARCHAR. Но зачем? Разве TEXT не универсальней?
Варчар позволяет задать ограничение на длину. Этим ты защищаешься от вставки в базу слишком длинных (явно ошибочных) значений.

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

1) любой кто читает твой код видит как связаны таблицы. А без внешних ключей как это понять?
2) база данных гарантирует целостность ссылок. то есть не разрешает вставить например id несуществующего юзера. Это позволяет обнаруживать ошибки в программе до того как в базу будет вставлены неправильные значения, а чем раньше обнаружена ошибка тем проще ее исправить. Что лучше: если ошибка выпадает сразу, или если прошло полгода, половина базы забита неправильными данным и тут ты обнаруживаешь что что-то не так?
3) база данных позволяет определить что делать при попытке удаления связанных друг с другом данных. Опять же это защищает от нарушения целостности связей.

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

База данных без внешних ключей - это просто свалка.

> Ты советовал во вторую таблицу(likes) добавить PRIMARY KEY тоже, но для чего?
1) чтобы запретить вставку одинаковых пар значений
2) чтобы показать что ссылаться на записи в этой таблице нужно через эти колонки

> Я пытался сделать одну из колонок праймери ки, но пишет ошибку.
Значит ты сделал неправильно. Погугли и ответь-ка, что такое первичный ключ? Что такое естественный и искуственный первичный ключ? Может ли в таблице сотрудников компании Фамилия быть первичным ключом? А сочетание Имя + Фамилия + Отчество + дата рождения? Что должно быть первичным ключом в таблице лайков?

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

Аноним 2016/02/11 08:21:05  №649795 57
>>649669

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

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

>>649684

В моделях. Перечитай что такое MVC и зачем нужны контроллер и прочее.

>>649732

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

>>649745

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

Тысяча соединений для сервера - не так и много. На хорошем сервере много гигабайт памяти и ядре процессора.

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

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

Аноним 2016/02/11 08:29:18  №649796 58
>>649745

> >разбей заголовок на 2 строки
> Не понимаю. Перенос строки разве не разделитель между заголовками?
Надо передать фразу hello world 2 строками заголовка. Прочитай как можно передавать многострочные заголовки.

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

> С этим ssl и https все-таки непонятно. Что это, зачем это, как оно мне пригодится на практике. Если на собеседовании спросят "что такое https и чем отличается о http?", я могу сказать только "ну типа че-то там шифруется". Наверное, это не очень полный ответ. Как бы ты на него ответил?
Я бы почитал теорию, как минимум про сертификаты и как они проверяются. Про виды шифрования. Вот например если твой провайдер или спецслужбы вклиниваются в трафик - могут ли они вставить рекламу на https сайт? Могут ли узнать на какие сайты ты заходишь? Твой логи и пароль? Какие ты комментарии оставляешь?

А что знает о тебе https сайт? Знает ли он в каком городе ты находишься например? Откуда ты перешел на этот сайт?

Или допустим поставь себя на место этих самых спецслужб. Можно ли определить, заходит ли пользователь на сайт ИГИЛ? Смотрит ли видеоролики на этом сайте? Оставляет ли комментарии? Можно ли определить с кем он ведет переписку в gmail? Ну или хотя бы узнать его адрес e-mail? Какие способы получить эти данные ты можешь предложить?

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

Аноним 2016/02/11 08:34:18  №649797 59
>>649760

> ты по этой теме вышку получал или нет?
Получал

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

Ну вот создатели Гугла например делали в ВУЗе работу по разработке алгоритма индексирования и ранжирования документов в интернете. Ну конечно чтобы такие передовые вещи делать надо много знаний. Но с другой стороны, набыдлокодить обычный сайт на PHP - это уровень колледжа, а не ВУЗа.

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

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


Аноним 2016/02/11 08:38:37  №649799 60
>>649745

Или вот еще интересный вопрос: допустим ты спецслужба западной страны (A) и установил перехватывающее трафик оборудование в дата центре другой страны (B). При каких условиях ты сможешь перехватывать и подменять https трафик пользователей из страны B заходящих на сайт размещенный в стране B?

Или еще вопрос: допустим ты руководство одной восточной страны и хочешь запретить трансграничную передачу данных по протоколу HTTPS. Возможно ли заблокировать именно этот протокол, оставив возможность передачи данных без шифрования?
Аноним 2016/02/11 09:01:13  №649806 61
Ребятки, поясните за сокеты. Насиловал статьи по теме, но мало что понял. Можете сказать доступным языком, для каких целей они используются в php? Если не трудно, приведите пример.
Аноним 2016/02/11 09:03:44  №649808 62
>>649806
Понял, что есть сокет клиента и сокет сервера. Но зачем? Для чего они? Почему бы просто не передавать данные обычным POST?
Аноним 2016/02/11 09:12:04  №649809 63
>>649806

Сокеты unix или вебсокеты?
Аноним 2016/02/11 10:03:00  №649818 64
>>649797
>Разработка автоматизированной системы для чего нибудь связанного с обучением или наукой.
А чего именно автоматизировать-то? Всякие сдаватели тестов онлайн уже написаны.
И вот ишшо:
>Если бы сейчас сам начинал учить, пошел бы в PHP или в питон/ноду, скажем? Думаю, туда ли направил стопы.
Аноним 2016/02/11 10:33:59  №649829 65
Аноним 2016/02/11 11:56:05  №649846 66
>>649799
> Возможно ли заблокировать именно этот протокол, оставив возможность передачи данных без шифрования?
http
Аноним 2016/02/11 12:05:11  №649851 67
>>649846

Это не ответ на вопрос. Именно принуждение к переходу на HTTP и подразумевалось в вопросе.
Аноним 2016/02/11 12:08:04  №649856 68
>>649851
Ну порезать на магистралях всё остальное и всего делов.
Аноним 2016/02/11 12:18:24  №649860 69
>>649856

Вопрос включает в себя подвопрос, есть ли возможность отличить HTTPS трафик от других видов трафика. Как иначе его резать?
Аноним 2016/02/11 12:32:33  №649867 70
Анон, нид хелп. Третий день ебусь над регулярками. Задание на граммар:
https://ideone.com/EVFKtn
Сразу поясню, массив matches я оставил на потом, чтобы выводить где именно ошибка.
Аноним 2016/02/11 12:38:35  №649872 71
>>649793
>> Ты советовал во вторую таблицу(likes) добавить PRIMARY KEY тоже, но для чего?
>1) чтобы запретить вставку одинаковых пар значений
>2) чтобы показать что ссылаться на записи в этой таблице нужно через эти колонки
ОПушка, я понял наконец, почему мне выдавало ошибки, когда я пытался PRIMARY KEY в таблицу лайки поставить: у меня ведь 1 и тот же юзер ставил лайки разным пользователям и повторяется много раз. А PRIMARY KEY ругается и пишет ошибку, если значение более 1 раза повторяется. Ты уверен, что в данной задаче необходимо праймери ставить? У нас же лайков может быть сколько угодно
Аноним 2016/02/11 13:15:03  №649886 72
>>649872

Один пользователь не может лайкнуть второго дважды.
Аноним 2016/02/11 13:37:05  №649898 73
14551870256700.jpg (82, 709x600)
600x709
Няши, у меня вордпресс генерирует в одну определённую страницу неизвестный Javascript код. Мне нужно сделать правку в этом коде, но я не пойму, откуда он берётся. Когда захожу в окно редактирования страницы в самом ВП, то его там нет, файла с таким содержимым я тоже не нашел (смотрел с wp-content/themes... и wp-included.
Сам ньюфаг в вордпрессе, взял задание на JS, а заказчик не сказал, что у него сайт на ЦМС.
С меня няши :з
Аноним 2016/02/11 14:14:18  №649934 74
>>649898

Поиском по файлам попробуй найти.
Аноним 2016/02/11 14:15:41  №649935 75
>>649898

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

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

Если этот код часть вордпресса - тоже нельзя.

Ты должен умело изменять поведение страницы, а не лепить костыли, из-за которых потом нельзя обновить библиотеку или вордпресс.
Аноним 2016/02/11 14:24:48  №649944 76
>>649935
Я и не собирался, просто это сделали для меня. Я думал, он будет в enqueue script, но нет.
Там плагин jquery и его инициализация, причём не отдельными файлами, а скопипащенным минифицированным кодом плагина + парой строк для его инициализации.
Аноним 2016/02/11 14:26:06  №649947 77
>>649944

Исходники jquery править нельзя.
Аноним 2016/02/11 15:10:42  №649992 78
>>649947
Думаю, кто из нас наркоман и не понимает другого?
Аноним 2016/02/11 15:46:33  №650030 79
>>649867
Ну же, народ. Помогите пожалуйста
Аноним 2016/02/11 16:19:46  №650064 80
>>650030
>[\\,\\.\\!\\?\\:\\;]
>[^\\,\\.\\!\\?\\:\\;]
В квадратных скобках только специальные символы надо экранировать.
Также в последней регулярке не вижу логики: "отсутствует любой из указанных символов перед буквой "а"" - сработает и на "Лалка азаза".
Ты и сам бы увидел, что не срабатывает последняя регулярка - сделай var_dump($matches), там нет результатов от неё.
Аноним 2016/02/11 16:22:30  №650068 81
хелло антуаны, я еще в прошлом треде решал задачу на кредиты, и меня попросили допилить с бесконечным циклом. допилил, кек. проверяйте
https://ideone.com/BzsFRy
Аноним 2016/02/11 16:22:43  №650069 82
Аноним 2016/02/11 16:31:50  №650075 83
>>650068
>$percent - 1
Что это и для чего?
>$creditBalance < 0
Такого не должно быть, чтобы $creditBalance был меньше нуля. Попробуй вывести промежуточные платы - развернуть всё, как в задаче про Айфон. Наверняка там в минус всё уходит.
Аноним 2016/02/11 16:33:54  №650078 84
>>649867
А телефон-то не доделал по-человечески?
Куда скачешь как конёк-горбунок?
Аноним 2016/02/11 16:38:43  №650080 85
>>650075
потому что процент перемножается с суммой кредита, и чтобы не плюсовать потом, берется сразу с 1, но чтобы высчитать чистый процент, нужна либо отдельная переменная либо просто вычесть еденичку.
там он и не будет меньше нуля, как только он ниже нуля становится, то остаток складывается с прошлыми выплатами.
ну или я чет путаю. нужен третий
Аноним 2016/02/11 16:44:06  №650087 86
>>650069

Во второй задаче нет рамки и зеленого блока. Первый раз вижу решение с настолько минималистичным дизайном
Аноним 2016/02/11 16:50:47  №650097 87
>>650064
>в последней регулярке
Вот и вопрос - там я пробел поставил, он разве не считается? И чому у меня первая регулярка не не выводит 2 раза сообщение?
>>650078
Телефон доделал, просто забыл ссылку сохранить, она дома в браузере открыта, а я на работе сейчас.
Аноним 2016/02/11 17:14:48  №650128 88
>>650080
Ну как сработало бы такое условие, если бы $creditBalance был хотя бы даже равен нулю? А не сработало бы в таком виде. А значит, там в какой-то момент ныряет в минус, а потом плюсуется к $paymentTotal и становится правильной суммой.
>>650097
Так он и считается. Но у тебя же циркумфлекс в квадратных скобках - значит, "все указанные символы должны отсутствовать". Поэтому и не срабатывает на ",а", асработает на "лалка азаза" и подобном.
Аноним 2016/02/11 17:17:26  №650131 89
>>650128
>циркумфлекс в квадратных скобках
Ну да, идея такова что если идет что угодно кроме знаков препинания, потом пробел и "а" или "но" - то выводить ошибку.
Аноним 2016/02/11 17:17:32  №650132 90
>"Чат изучающих PHP"
Ай, малаца! Только сейчас заметил.
Аноним 2016/02/11 17:18:28  №650135 91
>>650131
А если слово начинается с "а"?
Попытка номер 3
Аноним 2016/02/11 17:20:04  №650136 92
>>650135
Во блин, спасибо. Тугой я, извини. Но тем не менее, я все равно не понимаю почему правило в целом не работает.
Аноним 2016/02/11 17:20:20  №650137 93
>>650131
Тебе нужно более точно обозначить "а" и "но" как союзы. Подумай.
Аноним 2016/02/11 17:25:10  №650143 94
>>650137
Сделал \\b , должно исправить ситуацию, но не работает.
Аноним 2016/02/11 17:44:26  №650156 95
Блядь, лол. Короче у меня в правиле (а|но) - буква "а" была в английской раскладке.
Аноним 2016/02/11 17:44:34  №650157 96
>>649886
покажи, как в моём примере добавить PRIMARY KEY, пожалуйста
Аноним 2016/02/11 18:03:41  №650180 97
>>650157

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

Для начала, погугли что вообще такое первичный ключ и какие они бывают. Найди ответы на вопросы: что такое первичный ключ? Что такое естественный и искуственный первичный ключ? Может ли в таблице сотрудников компании Фамилия быть первичным ключом? А сочетание Имя + Фамилия + Отчество + дата рождения? Что должно быть первичным ключом в таблице лайков?
Аноним 2016/02/11 19:01:14  №650226 98
Если я не новичок в кодинге, то можно сразу начинать с php5 в подллинике, миную 1 сайт в шапке?

Аноним 2016/02/11 19:36:58  №650249 99
Аноним 2016/02/11 19:40:01  №650254 100
Аноним 2016/02/11 20:05:10  №650277 101
Алгоритм задачи "Чай с тортиком".
1. Одномерный массив с учениками.
2. Переменная с количеством слогов - 5.
3. Цикл с for, в котором увеличивается переменная $i и условием поставлено, что оставшееся число учеников больше количества слогов.
4. Вложенный цикл с foreach, в котором массив с учениками раскладывается на ключи и значения.
5. Когда переменная $i становится равной переменной с количеством слогов - удаляем соответствующие ключ и значение из массива с учениками.
6. Когда переменная $i становится меньше переменной с количеством слогов - выводим результат.
Вот только сегодня подумал об unset, до этого хотел дополнительный массив набивать найденными ключами, а потом как-то вырезать их из исходного массива с учениками в дополнительном цикле.
Сейчас многое вижу и ощущаю последствия, неплохо.
Но, к сожалению, обдумывать задачу всегда приятнее, чем садиться за написание кода, но какой-то мандраж перед написанием быстро проходит, становится интересно, вхожу во вкус.

>>650254
https://ideone.com/BLdeie - регулярку для "а" ты не изменил, получается?
Если поставить слово с ошибкой в начало текста - не видит его регулярка.
Немного неверный подход у тебя, братишка.
"Сдесь", "координально" и т.п. - просто оставь в этой регулярке и обозначь, что с обеих сторон могут быть или не быть символы пробела, могут быть или не быть другие слова.
>(координально|сдесь|зделаю)
>зделаю
А также надо бы "зделано", "зделал", "зделала", "зделали".
Но это лучше потом, когда с основным разберёшься, чтобы лучше все принципы понять.
Аноним 2016/02/11 20:07:02  №650278 102
>>649704
Нет, братишка, это ты молодец - начинал в январе, а вон куда уже продвинулся, какие штуки уже делаешь.
Я отстаю намного.
Аноним 2016/02/11 20:10:10  №650283 103
Есть ли способ как-то создавать массив, просто указав первое значение и последнее?
$array = array(1 ... 30)
Вот такого типа.
Не могу найти, как. Но что-то такое встречалось не в учебнике ОПа, не могу вспомнить.
Аноним 2016/02/11 20:10:53  №650286 104
>>650277
По поводу "а" - я нахожу часть текста где идет - что угодно но не знаки препинания, потом пробел и потом "а" или "но". Добавил пробел после "а", теперь не должно находить слова начинающиеся на "а".
"координально", просто убрал .{3}? в начале и все заработало, ссылка - https://ideone.com/EVFKtn актуальна.
Аноним 2016/02/11 20:13:39  №650292 105
>>650277
Добавил слова на "а" в пример, их не находит как ошибки. Другие слова (зделано и т.д.) я так понимаю будут работать так-же как и координально. Ну разве что можно выделить начало "зд" и добавить окончания разные.
Аноним 2016/02/11 20:14:41  №650295 106
>>650286
Так лучше. Но там по условию задачи надо как-то обозначать и контекст ошибки.
Подумай, как.
Вспомни про спецсимволы +, *, ?, про буквы, складывающиеся в слова, это должно помочь.
Аноним 2016/02/11 20:15:46  №650298 107
>>650295
То есть надо захватывать и окружающий текст, если он есть (слово может быть и в начале, и в конце).
Аноним 2016/02/11 20:16:14  №650299 108
ОП, ты тут? Немного углубился в ООП для прохождения Кошек-Мышек, там всякие подклассы бывают, абстрактные классы и т.п. Решать всё с той инфой, что ты в уроке даёшь, или инфу из самостоятельного чтения можно использовать?
Аноним 2016/02/11 20:17:25  №650300 109
>>650295>>650298
Так я пытался. Исползую в других регулярках .{3}? - любой символ может встретиться, а может и нет. Но с ним не работало какого- то хуя.
Аноним 2016/02/11 20:17:41  №650302 110
Аноним 2016/02/11 20:20:15  №650305 111
http://ideone.com/daxPMz
Оцените задачу с кредитом на айфон.
Объясните как сделать так , что бы показывало сумму с которая больше миллиона ?
Аноним 2016/02/11 20:31:41  №650316 112
>>650305
Добавь в if с выводом поздравлений ещё один вывод текущего баланса.
Аноним 2016/02/11 20:32:23  №650317 113
бля не могу. А можно просто ебашить запросы к майсоклу прямо в виджетах без использования всяких моделей и дата провайдеров? Там просто связанные таблицы, на хабре какая-то крипота, типа третью таблицу создавать и инсертить в нее данные из двух таблиц и делать ее моделью, но это же херня какая-то.
https://habrahabr.ru/sandbox/89573/

Аноним 2016/02/11 20:47:17  №650342 114
>>650317
Для юи наверняка уже написаны готовые экстеншены на любой случай жизни, хоть closure table, хоть nested sets. Там даже думать не нужно, тебе понравится.
Аноним 2016/02/11 20:50:49  №650345 115
>>649818
Аноний, скажи же что-нибудь.
Аноним 2016/02/11 20:54:51  №650349 116
14552132913060.jpg (89, 1223x424)
424x1223
Почему так криво выводит? Пробовал вручную строку переписывать, ничего не вышло.
Аноним 2016/02/11 21:17:08  №650362 117
>>650342
Да, для уи написан виджет, выводящий пагинированную дату, вот только он написан для ОДНОЙ таблицы, на основе одной модели. А у меня две таблицы и выборка из двух. Вот сижу думаю, как это все побысрее сговнокодить и запихнуь в лисвью.
Аноним 2016/02/11 22:01:57  №650421 118
>>650305
С каким кредитом на Айфон? Там задача про вклад 10к в банке.
Решена неверно, там должно 49 лет быть и конечная сумма 1060 000 с чем-то.
Аноним 2016/02/11 22:10:51  №650440 119
>>650300
Не работает в начале текста такое. Как я понимаю, знак "?" в этом случае не относится к "точке" и не учитывается. Просто берётся три разных символа. То же самое будет и в конце текста.
Поэтому я и говорю о знаках +, , ?, кое-какие тут помогут.

>>650302
Огромное спасибо, это именно то, что нужно!

>>650305
>$balance=$balance
$annualPercentage
В данном случае неправильно выражение ставить в цикл, потому что условие $balance<=10000000 проверяется после каждой итерации, цикл тут же обрывается, когда $balance становится больше миллиона, не успевает вывести последний раз echo.
Попробуй это выражение поместить в тело цикла - сразу всё заработает, как надо.
Аноним 2016/02/11 23:41:37  №650616 120
Решил задачу на Айпад в кредит.
Подскажите, пожалуйста, все верно?
http://ideone.com/EOYZQx
Аноним 2016/02/12 00:06:34  №650676 121
Есть тут пхп аноны из Белоруссии ?
Аноним 2016/02/12 00:24:47  №650710 122
>>650616
Ответ не правильный, где- то в математике ошибка. Сейчас гляну.
Аноним 2016/02/12 00:26:17  №650712 123
>>650616
>$pay = $sumCredit;
>$sumCredit = 0;
А где проценты за последний месяц?
Аноним 2016/02/12 00:34:22  №650723 124
>>650712
Т.е нужно?
>$pay = $sumCredit * $percent;
>$sumCredit = 0;
?
Аноним 2016/02/12 00:47:02  №650741 125
>>650723
И комиссия за пользование кредитом - тоже.
Аноним 2016/02/12 00:50:56  №650748 126
Тут 1 анон выкладывал ссылки, где он использовал такие выражения, как '+=' и '-=' (без кавычек)
Пробовал гуглить и как то нет ничего.
Может кто наводку дать или обьяснить что это такое ?
Аноним 2016/02/12 00:56:25  №650763 127
Аноним 2016/02/12 01:04:57  №650775 128
14552282972850.jpg (123, 1024x1024)
1024x1024
Доброй ночи, вкатываюсь в тред успешных людей.
Хочу рассказать свою историю.
Программист, уже 23 года, заканчиваю профильный вуз.

Ранее пробовал искать работу на c#, но не прошел собес на джуна, к которому очень готовился, и перепутал паттерных. Меня не взяли. Потом было одно тестовое задание, но я не успел поднять asp.net mvc, и не смог его сделать.

Сейчас я работаю на php + html + js, пишу под один популярный шаблон магазинов, не важно. Делаю я это бесплатно, проект долгий, как закрою наверное заплатят.
Мне интересен веб, я прошел курсы по html + js, но из - за того что в моей работае эти почти не используется, я почти все уже забыл.

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

Вот так и сижу на тухлом стартапе с обещаниями золотых гор, и забываю то что знал ранее.
Сейчас хотя бы пишу дипломы на c# подзаказ, надеюсь смогу оплатить арендное жилье.
Аноним 2016/02/12 01:06:17  №650777 129
>>650775
Поныть можно в соседнем перезвоним-треде, тут люди решают задачи и идут к успеху.
Аноним 2016/02/12 01:18:06  №650784 130
Это какой-то кошмар - почти два часа провозился с задачей "Чай с тортиком": http://ideone.com/sugCcD
В голове всё было стройно и понятно, стал переводить в код - ни черта не работает верно.
Долго возился с тем, чтобы правильно по порядку обозначать учеников в массиве через range() - оказалось совсем и не обязательно это делать.
Цикл в цикле - и постоянно срабатывало условие if ($i == $rhyme), какого чёрта, еле с
этим разобрался. Помогло использование continue - переносит нас в начало основного цикла, всё обновляется и начинает правильно идти.
Похоже, тут вообще надо было делать через switch или через while - я только сейчас об этом, блин, подумал. Я их просто мало использовал, сразу думаю о for и foreach, тем более, что тут нужна была $i для подсчёта и сравнения.

>>650775
Поменяй местами циферки в числе своих лет - мне уже почти столько.
Так, к слову.
Не знаю, чем помочь. Кроме как ненужным советом брать деньги вперёд и всё-таки посещать собеседования, выполнять тестовые задания.
Аноним 2016/02/12 02:05:31  №650815 131
>>649796
>>649799
Ты всегда отвечаешь вопросом на вопрос?
Ладно, попробую сам из той каши, что насобирал по разным статьям, составить хоть какую-то картину алгоритма защищенных соединений.

После установки соединения сервер высылает клиенту публичный ключ. Публичный ключ это такая строка, которая выступает в качестве параметра некой функции, шифрующей данные. Наверное можно провести аналогию с соленым хешем: мы используем соль, конкатенируем с паролем, затем пропускаем через md5 или sha1.
Публичный ключ это что-то вроде соли, он участвует в зашифровке данных.
Клиент для начала как-то там проверяет сертификат сервера, если он самоподписанный, то пользователю выдается предупреждение.
Сертификат вообще нужен для борьбы с "man in the middle" атакой, то есть перехватом пакетов третьей стороной и их подменой.
Сообщение клиента шифруется при помощи этого открытого ключа. Для расшифровки нужен секретный ключ, он создается при помощи хитрого использования односторонней функции (алгоритм Хеллмана). Этот момент неплохо объясняется в статье https://intsystem.org/security/asymmetric-encryption-how-it-work/ К сожалению другие моменты типа проверки сертификата там не проясняются.
На сервере сообщение клиента расшифровывается при помощи секретного ключа. Высылается ответ, который клиент расшифровывает тем же закрытым ключом.

>Я бы почитал теорию
Где?

>провайдер или спецслужбы вклиниваются в трафик - могут ли они вставить рекламу на https сайт?
Догадываюсь что нет, но не могу объяснить почему, потому что нигде четко не описан алгоритм защищенного соединения. Возможно с каждым пакетом отправляются данные о сертификате. Сертификат ведь третья сторона подделать не может (наверное).

>Могут ли узнать на какие сайты ты заходишь?
Думаю да. Клиенту и серверу ведь сначала нужно обменяться открытым ключом. А может и нет. Без понятия короче.

>Смотрит ли видеоролики на этом сайте? Оставляет ли комментарии? Можно ли определить с кем он ведет переписку в gmail? Ну или хотя бы узнать его адрес e-mail?
Нет наверное.

>Какие способы получить эти данные ты можешь предложить?
Не знаю.


Аноним 2016/02/12 02:16:14  №650823 132
ОП, а можешь что-нибудь сказать про реализацию на PHP всяких WebDAV, CalDAV, SyncML... статьи, маны, инфа?
Аноним 2016/02/12 02:54:40  №650853 133
14552348806240.png (4, 719x171)
171x719
Господа, могу ли я начинать цепочку методов на следующей строке, вот так? А то у меня после JS крыша совсем едет, бзднуть боюсь, что интерпретатор задымит.
Аноним 2016/02/12 02:59:36  №650856 134
Аноним 2016/02/12 03:00:57  №650858 135
>>649329 (OP)
Попробую вкатится, помню годика 2 назад пробовал с++ учить, обосрался на циклах и массивах, что ж попытка номер два.
всем похуй
Аноним 2016/02/12 03:03:59  №650861 136
Впервые в этом разделе, прочитал ОП-пост, не понял одного: почему нет ни слова про самый лучший PHP-фреймворк на планете?
Имеется в виду Laravel.
Втираете неокрепшим умам начинающих разработчиков говнофреймворки, вроде Yii.
Аноним 2016/02/12 03:09:20  №650865 137
Аноним 2016/02/12 03:11:10  №650867 138
>>650853
У меня в пхп 5.2 такой синтаксис не работает.
Аноним 2016/02/12 03:11:11  №650868 139
>>650861

Потому, что ОП работает с другими фреймворками, очевидно, хотя поддержу это мнение, потому что Laravel сделал для PHP то же самое, что Rails сделал для Ruby. Никогда мне еще не было так радостно писать на PHP.
Аноним 2016/02/12 03:12:21  №650872 140
>>650867

PHP 7, полёт нормальный. На версии ниже использовать не планирую.
Аноним 2016/02/12 03:20:37  №650877 141
>>650858
Также, в переменной можно сохранить (присвоить переменной значение, говорят программисты) строку $name = "Ivan"; или результат вычисления какого-то выражения: $balance = 1000 + 1000;.
поехавшая хуитка.
Аноним 2016/02/12 03:30:43  №650883 142
Аноним 2016/02/12 03:33:03  №650886 143
>>650883
"Зачем" присваивать переменной строку если можно присвоить Ivan и пиздец, суть таже. 100+1000? Нахуя усложнять? Поясни как это можно использовать эти поехавшие штуки "с умом"?
Аноним 2016/02/12 03:38:58  №650888 144
>>650886
>"Зачем" присваивать переменной строку если можно присвоить Ivan и пиздец
Тут не понял тебя вообще: то ли это сарказм такой, то ли ты глупый.

>100+1000? Нахуя усложнять?
Пример иллюстрирует то, что в переменную можно записывать результат вычисления. Он не обязательно должен быть таким примитивным.
Аноним 2016/02/12 04:25:44  №650908 145
14552403443370.jpg (112, 1600x900)
900x1600
Аноним 2016/02/12 04:29:20  №650909 146
>>650908
Ах да вопрос, обязательно ли при выводе переменной эти скобочки? echo "вывести {текст}"

И маст хев ли exit()?
Аноним 2016/02/12 07:00:23  №650946 147
Аноним 2016/02/12 08:44:27  №650978 148
>>650861
Давно смотрю в его сторону.
Расскажи пожалуйста, что там крутого и интересного.
Я пробовал Симфони и Yii.
От первого лучше впечатления, но он действительно монструозен. Говорят что Ларавель похож на него, только проще.

Я так то теку от Рельсов и Руби магии, но не верю в такой комфорт на ПХП.
Аноним 2016/02/12 08:49:23  №650985 149
До сих пор не совсем понимаю нужду в интерфейсах и абстрактных классах.
Может кто, объяснить на примерах?

Это просто, как шаблон реализовав по которому класс, он точно будет верно работать ?
Аноним 2016/02/12 09:24:30  №650999 150
Вопрос: Куда выкладывать решение js задачек?
Аноним 2016/02/12 09:31:32  №651003 151
Аноним 2016/02/12 10:12:34  №651025 152
Аноним 2016/02/12 10:21:47  №651029 153
>>651025
Попробуй убрать повторяющиеся участки кода используя цикл
Аноним 2016/02/12 10:32:50  №651034 154
Есть ли возможность конструировать объявление namespace динамически? Из строки например?
Или можно ли как-то сделать, чтобы неймспейсы по дефолту задавались в соответствии с путем к файлу, а не в глобал пихались?
Аноним 2016/02/12 10:33:10  №651035 155
>>649806
Никто не может пояснить? Мда.
Аноним 2016/02/12 10:43:19  №651038 156
>>650909
Да, так оно выводит значение переменной.
Аноним 2016/02/12 10:53:10  №651046 157
14552635901670.jpg (57, 644x340)
340x644
>>650349
Заметил ещё, что он знает, что находится в строке. Видит же это Buffy, но вывести не может.
Аноним 2016/02/12 11:08:04  №651054 158
>>651025
Нет.
> слово1 слово2 слово3
> слово1 слово2 слово3
> Я слово4 слово5
В условии стоит так, а значит - надо добиваться такого, а не просто выводить разные повторяющиеся слово1, слово2 и т.п.
Аноним 2016/02/12 11:41:19  №651089 159
>>651054
да у него и есть так
Аноним 2016/02/12 11:45:45  №651092 160
Анон, как пользоваться sublime text? Я вот скачал, установил и все. Написать я в нем могу, а как запустить этот скрипт?
Аноним 2016/02/12 11:47:34  №651093 161
>>650775
>>650784
Я вот как почитаю подобные посты, что-то неуютно становиться.
мимо-студент-20 лвл
Аноним 2016/02/12 12:01:03  №651100 162
>>651034

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

Что значит "в глобал пихались"? Ты ничего не путаешь?

Если тебе тяжело руками писать неймспейсы и use, поставь плагин к редактору, который это делает.
Аноним 2016/02/12 12:02:40  №651101 163
>>651100
Тут дело в версионировании модулей.
Неймспейсы меняются абсолютно везде при создании новой версии, руками можно править, но это пиздец долго и шанс накосячить ебливый.
Аноним 2016/02/12 12:03:19  №651103 164
>>651046

Ты файл в блокноте создавал или в редакторе? Надо для конца строк выбрать вариант "unix", чтобы в конце строки ставился только символ \n, а не \r\n. А так у тебя в значения полей попал символ \r который значит "поставить курсор в начало строки" и при выводе все портится.

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

Это если конечно я не ошибаюсь. Проверить можно, выведя значения колонки remark в 16-чном виде.

Кстати обрати внимние, у тебя \N не превратился в NULL - это плохо.
Аноним 2016/02/12 12:04:30  №651104 165
>>651092

Редактор для редактироания кода, а не запуска скриптов. Запускать скрипт надо из консоли:

php d:\temp\1.php

Почитай пасту про консоль из ОП поста.

Также, можно настроить саблайм чтобы он по какой-то кнопке запускал PHP, гугли как именно.
Аноним 2016/02/12 12:05:04  №651106 166
И я вкачусь. Студент-механик ИТТ, 23 года. Заканчиваю магистратуру по направлению механика. Год проработал на заводике инженером-исследователем, думал пойти в науку, но что то совсем не идет у меня это дело. Все время хотел вкатиться в айти, но только начав изучать какой нибудь ЯП через день - два желание пропадало.
У вас тут уютненько в тредике, буду пытаться сделать студентиков!
Аноним 2016/02/12 12:05:55  №651108 167
>>651101

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

Заменить неймспейс в большом количестве файлов можно также функцией "поиск/замена" в твоем редакторе кода.

Но я ни разу с таким не сталкивался и интуиция подказывает мне что ты делаешь что-то неправильно. Какое еще версионирование, наркоман?
Аноним 2016/02/12 12:07:09  №651111 168
>>651108
Какое затребовали, с обратной совместимостью.
Аноним 2016/02/12 12:09:14  №651115 169
>>651111
Типа когда версия апнулась и изменилась какая-нибудь мелочь - хуяк и старые версии приложений начинают отваливаться, пока не обновятся. То есть старые версии затребовали оставлять на случай этого как-раз. Старые приложения работают со старым апи, обновятся - работают с новым. Как-то так.
Аноним 2016/02/12 12:25:00  №651133 170
Алгоритм задачи "Алфавит по кругу".
Не думал, что возьмусь за неё, но вот так вот.
Почитал подсказку, переспал с обдумыванием алгоритма - вроде бы всё в пределах досягаемости даже для такого застарелого филолога, как я.
Итак:
1. Подсчитываем количество букв в нужной строке и делим 360 градусов в круге на это число - устанавливаем угол (a), на котором должны располагаться буквы. Переводим градусы в радианы, с которыми работает PHP.
2. Устанавливаем радиус круга (LO) самостоятельно, как советует ОП. Наверное, как-то можно его и приблизительно определять, исходя из количества букв в нужной строке.
3. У нас sin(a) = LK / LO, а cos(a) = KO / LO. LO - это радиус круга.
Получается, координата x буквы (KO) будет равна радиус (LO) умножить на sin(a). А координата y буквы (LK) будет равна радиус (LO) умножить на cos(a). Попутно округляем получившиеся результаты до целого числа (sin даёт дробный результат), поскольку иначе мы не сможем наполнить результатами массивы в массиве. Также ОП предупреждает, что надо домножить координату x на опытным путём подобранное число, иначе круг будет неровным.
4. Создаём массив с массивами, наполненными ключами и пробелами в значениях:
$screen = array();
$screen[0] = array(0 => ' ', 1 => ' ', 2 => ' ', ...);
$screen[1] = array(0 => ' ', 1 => ' ', 2 => ' ', ...);
С количеством массивов пока не вполне ясно. Некоторые буквы у нас располагаются в линию, от этого зависит многое, как я понял.
5. $screen[0] - это первая строка, а $screen[0][0] - первая буква первой строки. У нас имеются $x и $y, мы можем обойти созданные массивы в массиве в двух циклах, вложенных один в другой, установить координаты соответствующих букв.
6. Далее остаётся вывести строки из массива одна за другой.
ОП также предупреждает, что может понадобиться отрицательное значение у некоторых координат; с этим пока совсем неясно, выяснится при написании кода.
Опять выглядит вроде бы совсем и не сложно, когда так вот всё распишешь.
Но у меня и задача "Чай с тортиком" в текстовом виде отлично смотрелась, а потом шла совсем даже не по маслу.

>>651089
Нет. У него:
> echo "{$jj} {$kk} {$ll}\n{$qq} {$ww} {$ee}\nЯ {$cc} {$vv}";
А должно быть как-то так:
>{$jj} {$kk} {$ll}\n
>{$jj} {$kk} {$ll}\n
>Я {$cc} {$vv}";
Нужен цикл, который выведет два раза строку {$jj} {$kk} {$ll}\n, а потом один раз строку Я {$cc} {$vv}"; - и оборвётся.

>>651093
Чому неуютно? У тебя же куча жизни впереди, да как и у меня. Тут люди и за полгода активного изучения находят работу (вполне верю в это). Кто ищет и не ленится - всегда найдёт.
Я изучать начал в конце прошлого года, мне только для собственного проекта это всё нужно.
Так что мой возраст никак ни с чем не связан в этой ситуации.
Аноним 2016/02/12 12:27:07  №651136 171
В Yii/Yii2 нет возможности сгенерить миграцию по модели?
Аноним 2016/02/12 12:43:32  №651143 172
>>651133
>5. $screen[0] - это первая строка, а $screen[0][0] - первая буква первой строки. У нас имеются $x и $y, мы можем обойти созданные массивы в массиве в двух циклах, вложенных один в другой, установить координаты соответствующих букв.
Хм, скорее всего, даже одного цикла будет достаточно. У нас ведь уже будут иметься готовые $x и $y - просто в одном цикле сразу сможем заполнить $screen[$x][$y], он у нас и так перед этим будет заполнен пробелами, не нужен дополнительный цикл для заполнения, это я с "Лиличкой" пересёкся мысленно.
Аноним 2016/02/12 14:06:23  №651208 173
Аноним 2016/02/12 14:17:14  №651212 174
2) Доделай расшифровку зашифрованного текста.

http://ideone.com/XlFEBr

помогите аноны не могу понять что я делаю не так .
Аноним 2016/02/12 14:19:21  №651213 175
>>651212
у тебя опечатка на 30 строке
$c = strtr($ciphe, $code);
$c = strtr($cipher, $code);
Аноним 2016/02/12 14:20:05  №651217 176
Мне тут говорили через цикл сделать, так нормально http://ideone.com/kmVS9u ?
Аноним 2016/02/12 14:21:29  №651218 177
>>651213
серьезно блин спасибо
мне надо быть внимательней
Аноним 2016/02/12 14:24:55  №651221 178
>>651217
попробуй еще оптимизировать цикл.
Посмотри внимательно какие куски кода делают одну и туже операцию. и не забывай у цикла есть счетчик используй его. Попробуй использовать многомерный массив
Аноним 2016/02/12 14:32:07  №651227 179
>>650985
Ну смотри, допустим у тебя в приложении есть форма логина, пишешь для нее класс.
Затем тебе понадобилась форма регистрации, пишешь для нее класс.
Тут замечаешь, что добрая половина методов и свойств первой и второй формы совпадает.
Если ты быдлокодер и тебе насрать на качество твой работы, ты так и оставишь, тем более что ты никогда не писал приложение с более чем 2-3 формами.
Но если ты ответственный программист, то догадываешься, что копипастить куски кода из одного класса в другой наверное неправильно. Тем более что в серьезных приложениях родственных классов будет не 2-3, а десятки-сотни.
Пишешь абстрактный класс, который содержит в себе все общее, что есть у классов форм, называешь AbstractForm.
Наследуешь LoginForm и RegisterForm от AbstractForm, в них прописываешь только уникальные для данного класса свойства и методы.

Что касается интерфейса, то это набор требований к классу, то есть буквально мы пишем: "у всех классов, которые имплементируют данный интерфейс, должен быть определенный функционал (метод), неважно как они будут реализованы, но они должны быть". Пример не знаю какой привести.
Вот чувак приводит пример со столами https://toster.ru/q/10682
>Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.
Обрати внимание, что Rollable (с колесиками) может быть не только стол, но и стул, кровать, то есть совершенно другие типы объектов. Метод roll() будет у них всех реализован по-разному, поэтому мы не используем тут абстрактный класс типа НечтоКатящееся. Тем более что один класс может реализовывать множество интерфейсов, а абстрактный класс можно унаследовать только один. Стол должен быть одновременно с колесиками и складывающимся. Мы не можем создать абстрактный класс НечтоКатящееся, затем НечтоСкладывающееся, и создать класс Стол наследующий оба абстрактных класса. Да и не для этого они придуманы, класс всегда описывает объект, а интерфейс функционал. Абстрактный класс это обобщенное описание категории объекта, допустим стол, или стул, или кровать. От него наследуем уже какую-то конкретную разновидность, например СтолПисьменный расширяет АбстрактныйСтол реализует Складывающийся интерфейс.
А можно и оба интерфейса, пусть стол будет Складывающийся и Катящийся.
Затем создаем класс КроватьДвуспальная расширяет АбстрактнуюКровать реализует Катящийся интерфейс.

Короче абстрактный класс это обобщение, чтобы не копипастить общие методы и свойства по всем классам-наследникам, мы их группируем в одном классе.
Интерфейс это описание функционала, один класс может реализовывать множество интерфейсов. И один и тот же интерфейс может быть использован множеством классов.
Интерфейс не имеет реализации, он только декларирует, что у класса обязан быть определенный метод, а реализация может быть какая угодно, нас это не интересует, она инкапсулирована внутри.
Аноним 2016/02/12 14:37:40  №651232 180
>>651227
Спасибо
С абстрактным классов всё ясно.

Ну а для чего и когда используют и стоит использовать интерфейс, я так и не понял особо?
В том случае когда мы не знаем какой объект ожидать и хотим что бы это был хотя бы наследник интерфейса?
Аноним 2016/02/12 14:42:40  №651236 181
Аноним 2016/02/12 15:09:07  №651257 182
Сап, решил вспомнить пэхэпэ, а вот идей что сделать нету, посоветуйте что нибудь
Аноним 2016/02/12 15:14:39  №651263 183
Аноним 2016/02/12 15:28:16  №651289 184
>>651263
у тебя там скобка одна лишняя. Но вообще норм, иди дальше, тут добивать нечего
Аноним 2016/02/12 15:52:15  №651332 185
Аноним 2016/02/12 15:54:56  №651336 186
>>651332
нет.
1. код некрасивый
2. ну и самое главное - проверяет ток 1 и посл букву
Аноним 2016/02/12 16:03:20  №651358 187
>>651332
>$ch1=mb_substr($text,0,1);
Даст один раз самый первый символ с начала текста. И всё.
>$ch2=mb_substr($text,-1);
Не даст самый последний символ в тексте. А если бы и дало - только один раз можно было бы сравнить первый и последний символы в тексте в таком виде.
У тебя есть изменяющаяся при прохождении цикла переменная $i - вот и используй её, подставляя туда, куда нужно. От переменной можно отнимать в функции, можно прибавлять, можно ставить знак "минус" перед ней - и она станет с отрицательным значением.
Там должно быть, как минимум, два условия, а лучше даже три:
1. Буквы спереди и сзади текста совпадают - продолжаем цикл, можем вывести эти буквы с начала и с конца.
2. Буквы с начала текста и с конца не совпадают - выводим результат "Это не палиндром" и обрываем цикл.
3. Переменная $i равняется переменной $halflength - выводим результат "Это палиндром".
Аноним 2016/02/12 16:07:03  №651368 188
>>651336
>код некрасивый
Yep. Я даже сразу не увидел в предыдущей задаче, где закрывается цикл, тут тоже всё в кучу.
Это не дело, от такого надо избавляться.
Аноним 2016/02/12 16:11:23  №651380 189
Аноним 2016/02/12 16:13:28  №651387 190
>>651332
Аа, да: не забывай, что числа -0 не бывает!
Аноним 2016/02/12 16:14:47  №651389 191
>>651387
Да вроде не ставил )
Аноним 2016/02/12 16:16:46  №651393 192
>>651389
Сейчас ставишь, судя по коду.
Аноним 2016/02/12 16:17:41  №651395 193
>>651387
Чому? Проверил только что, 0 == -0 == +0

также 4-0 == 4+0 == 4
Аноним 2016/02/12 16:25:45  №651408 194
>>651133
ну я кодингом давно занимаюсь, но теперь пересел на пыху. Так что за полгода-год реально пойти на джуна.
А неуютно читать подобное и думать что я стану 30-летним старпёром лол
Аноним 2016/02/12 16:27:38  №651411 195
>>651408
да у меня багор от вас, прекратите
гуманитарий 25-лвл, задрачиваю пыху для того, чтобы преуспеть
Аноним 2016/02/12 16:36:01  №651420 196
>>651395
Аа, точно, да. В программировании есть -0.
Ну, я имел в виду, что с -0 в этой функции ничего не будет работать, там такого не может и не должно быть.

>>651408
Стартапером, ты хотел сказать? Тридцатилетним стартапером, всё нормально.
Когда-нибудь каждый станет стартапером, если повезёт и если доживёт.

>>651411
Вполне реально так-то.
Аноним 2016/02/12 16:55:46  №651448 197
>>651103
Поменял окончание строк в нотпаде. Помогло. И \N всё-таки стал NULL. Спасибо
Аноним 2016/02/12 17:14:45  №651468 198
Сап, приглашаем в нашу конфу, посвященную пограммированию. Мы обсуждаем всё, так или иначе связанное с различными сферами разработки. У нас есть отдельные каналы про функциональные языки(Scala, Clojure, Haskell), про С++, про JavaScript, про Ruby, про Python, про PHP, про Java, есть development для обсуждения остальных языков и вопросов, связанных с разработкой, есть jobs для обсуждения вакансий, собеседований и рабочих вопросов, есть unix для обсуждения Linux- и BSD-based операционных систем и есть random для неформального лампового общения, плюс планируется ещё несколько каналов для других языков, которые вскоре будут созданы. У нас нет ограничений по уровню скила, мы рады как тотал нубам, так и синьорам ˜помидорам˜.

Мы пользуемся slack. У него есть неплохие десктопный (под все ОСи), веб и мобильный клиент. Для регистрации необходима только почта (фейковая тоже подойдет).

Пригласить себя можно здесь:https://invite-me-to-2chpr.herokuapp.com

Если инвайт не пришёл в течении 5 минут, попробуйте другую почту.
Аноним 2016/02/12 17:15:48  №651470 199
>>651468
идите нахуй, мрази
Аноним 2016/02/12 17:56:08  №651507 200
Я тут немного переделал задачу, но все равно не могу допереть до ответа http://ideone.com/zPkbDi
Аноним 2016/02/12 18:11:47  №651522 201
>>649329 (OP)
Короче на циклах обосрался, на задаче про айфон, двойка по математике в школе дает о себе знать.
Аноним 2016/02/12 18:18:46  №651531 202
>>651232

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

Ну или если попробовать придумать более серьезный пример, например в какой-нибудь соцсети можно ставить лайки фотографиям, постам и пользователям. Классы, которые описывают эти сущности (Photo, User, Post), можно пометить интерфейсом Likeable. Допустим в этом интерфейсе определены 2 метода: добавить лайк (addLikeFrom(User $user)) и убрать лайк (removeLikeFrom(User $user)). Каждый класс может реализовать эти методы по своему, лишь бы они были реализованы.

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

function setLikeTo(Likeable $object)
{
...
}

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

Более того, в будущем список таких объектов можно расширить, не трогая старый код. ну например если нам надо сделать чтобы комментариям можно было ставить лайк, мы делаем чтобы класс Comment реализовал интерфейс Likeable, добавляем ему нужные методы и его теперь тоже можно передавать в функцию setLikeTo, и она будет корректно с ним работать.

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

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

Интерфейсы позволяют объединять не связанные наследованием классы.

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

ООП в первую очередь делался для больших проектов, где очень много кода. Без соблюдения правил ООП код станет настолько запутанным, что любые правки будут вызывать ошибки и будет уходить много времени на их исправление. В коде на 100 или 1000 строчек конечно это не заметно. А например, код ОС андроид содержит тысячи классов (хоть они и не на PHP, а на Яве, но ООП там примерно такой же).

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

Если ты не уверен где надо применять интерфейсы, не применяй их пока.
Аноним 2016/02/12 18:23:59  №651534 203
>>651232

Вообще, в ООП много средств, которыми ты задаешь правила работы со своим классом:

- с помощью тайп хинтов ты указываешь что надо передать на вход функции
- с помощь конструктора ты определяешь обязательные аргументы, без которых не создать объект
- с помощью public/protected/private ты определяешь, какие методы откуда можно вызывать и инкапсулируешь данные внутри объекта
- с помощью abstract методов ты определяешь правила наследования от данного класса
- с помощью интерфейсов ты помечаешь классы

Важно пользоваться всеми этими возможностями правльно. Их мы изучаем в задачах про Вектор и кошки-мышки.
Аноним 2016/02/12 18:26:05  №651535 204
>>651534
Хм. Но дело в том, что у ОПа в главе про ООП нет этой информации и предлагается решать их не зная всего этого
Аноним 2016/02/12 18:28:53  №651537 205
>>651507
>$ch2=mb_substr($text,-1-$i);
Вот это, по-твоему, что означает?
Разберись с тем, как получить один символ с конца строки с помощью этой функции.
Сделай var_dump($ch2), тогда должен будешь понять, что нужно указывать и количество символов, которые ты вырезаешь.
Ведь с начала же когда берёшь символ - ты указываешь, сколько символов, а с конца почему не указываешь - непонятно.
Вот у тебя и получается, что "р не совпадает с ра".
Аноним 2016/02/12 19:00:30  №651574 206
>>650763
Какие еще операторы равенства, это операторы присвоения.
Аноним 2016/02/12 19:16:59  №651599 207
Аноним 2016/02/12 19:21:57  №651611 208
Аноним 2016/02/12 19:26:24  №651627 209
>>651522
ну и пошел нахуй тогда
Аноним 2016/02/12 19:38:53  №651643 210
>>651522
Старайся, у меня с математикой тоже все очень фигово, 5 дней мучился, но сделал.
Аноним 2016/02/12 20:03:47  №651685 211
>>651599
Всё хорошо.
Последнее условие if ($ch1==$ch2) можно и внутрь цикла поставить, но сравнивать не буквы, а $i с $halfLength - если они равны, то палиндром.
Чтобы избежать -1-$i, можно было просто $i = 1 поставить в цикл, а в $ch1=mb_substr($text,$i,1); просто поставить $i - 1.
Аноним 2016/02/12 20:34:03  №651730 212
В перл есть заебательский оператор "my", а что в php?
Аноним 2016/02/12 20:35:05  №651731 213
Аноним 2016/02/12 20:39:14  №651736 214
>>651731
Он идет в паре с "use strict;"

Позволяет объявлять переменные только явно "my $result", и избежать ошибки типа "return $reslt;". Сегодня решил попробовать пых, мне такого очень не хватает.
Аноним 2016/02/12 20:53:13  №651753 215
>>651736
>мне такого очень не хватает
Там надо добавить error handler - функцию для обработки ошибок. И по ошибке "встретилась необъявленная переменная" что-нибудь сделать, например, выбросить исключение.
Но не надейся там особо. Ни один из динамических языков лучше от этого не станет. Проверено уже.
Аноним 2016/02/12 20:54:13  №651754 216
Довольно интересное задание, оп может добавить себе в задачник, а то там всего 2 задачи на sql, про лайки и кинотеатр.
http://sqlfiddle.com/#!9/bc54e/14

Это из тестового, которое вован вбрасывал в прошлом треде >>646033
Наверное уже не актуально, так что можно спалить решение.
Аноним 2016/02/12 21:08:12  №651759 217
Аноним 2016/02/12 21:11:27  №651763 218
http://ideone.com/tJRcIL
Молю о помощи, как сделать что бы работало?
Уже пытался и через array_count_values , нихуя не помогает
Аноним 2016/02/12 21:11:28  №651764 219
>>651754
И сам ты вован, школосучка тупая.
Аноним 2016/02/12 21:14:29  №651767 220
Ребят, как это http://ideone.com/LKPRu6 заставить работать? Задумка такова - создание файла в пхп, с хтмл расширением и текст внутри файла - собственно код.

Аноним 2016/02/12 21:21:26  №651771 221
>>651767
Тебе же написало ошибку о том что он не может создать файл, нет прав. Пробуй у себя на сервере.
Аноним 2016/02/12 21:23:37  №651772 222
>>651771
У меня на апаче вот что получается - документ благополучно создаёт, как и нужно(что очень здорово, я кажется придумал как буду реализововать задание по вебке на создание блога с админкой), но вот именно от этого пхп файла, что я бросил код, там не открывается страница.

Не подскажешь что с этим делать?

Судя по всему, права тут не причём.
Аноним 2016/02/12 21:30:41  №651778 223
>>651759
Во втором задании не помешал бы джойн, чтобы вывести имя и прочую инфу по менеджеру.

В третьем
>объедините значения first_name и last_name в одно поле full_name
Функция concat.
ASC в order by можно не писать, это поведение по умолчанию.

В четвертом подзапрос, дальше можно не смотреть.

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

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

>>651763
>PHP Parse error: syntax error, unexpected ')' on line 19
Аноним 2016/02/12 21:32:29  №651779 224
14553019494690.png (21, 1526x693)
693x1526
>>651772
У меня все работает, пикрелейтед.
>но вот именно от этого пхп файла, что я бросил код, там не открывается страница
Вот это не совсем понял, ты хочешь создать html файл и сразу открыть его? Или по другому?
Аноним 2016/02/12 21:32:41  №651780 225
>>651778

>PHP Parse error: syntax error, unexpected ')' on line 19
Это я заметил , но когда я прошу вывести рост мне выводит 1 , что не так?
Аноним 2016/02/12 21:33:00  №651781 226
>>651685
Хм... не додумался как-то до этого. Спасибо за помощь.
Аноним 2016/02/12 21:35:29  №651782 227
>>651779
>ты хочешь создать html файл и сразу открыть его?
Да. Сам файл создан, отлично.

Можно ли его сразу открыть?
Аноним 2016/02/12 21:37:54  №651783 228
>>651782
Можно перенаправить браузер клиента на этот файл header("Location: file.html"); или прочитать файл и вывести его пользователю.

Но ты строишь велосипед, легче и удобнее будет выводить html разметку через php-скрипт, без создания дополнительных файлов. И еще я не совсем понимаю зачем ты это делаешь.
Аноним 2016/02/12 21:42:39  №651787 229
>>651783
Зачем я это делаю?:)

Понимаешь, нам в шараге задали сделать что-то вроде тематического блога с админкой.


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

Нам сказали что всякими cms пользоваться нельзя(к слову я и не пользовался ими никогда). Учат пхп нас плоховато(в основном дают задания а мы уже сами ищем информацию), и уровень у меня не большой. Но данный метод заполнения, чтоб через админку, мне показался вполне удобным.
Аноним 2016/02/12 21:43:56  №651789 230
>>651787
Еще можно будет шаблон для всех веб-страниц не писать вручную а считывать с другого файла или везде использовать одну переменную, тут еще не придумал.

Проект еще не скоро сдавать, я просто обдумываю функционал и как всё будет работать. Даже на листочке в клеточку начертил условную схему, лол
Аноним 2016/02/12 21:50:44  №651791 231
>>651787
Твой способ неэффективный потому что на сайте может быть 100 новостей, и уже в этом случае в корне диска будет приличный бардак, а если новостей будет не 100 а 1000? Ну и копировать\восстанавливать такое количество файлов будет проблематично и долго. Создавать новый файл на каждую запись это какая-то порнография. Ты с тем же успехом можешь сделать файл шаблона, а потом через один php скрипт подставлять туда информацию из базы.

Например есть файл record.php, при передаче ему GET параметра id (id новости), он будет искать новость в базе данных с таким id, если она присутствует этот файл будет выводить пользователю файл шаблона и заполнять его данными, если новости в базе с таким айди нет, он будет выводить ошибку 404. При пустом GET параметре id можно выводить последнюю новость, к примеру. И никаких операций с файлами, в данном случае вместо 1000 файлов у тебя все время их будет два.
Аноним 2016/02/12 21:52:03  №651792 232
Как то так.

if ($anonHeight<$classmates[$name]) $number=$number+1;

И если уже выложил ссылку на идеон, то больше её не изменяй. Создавай новую.
Аноним 2016/02/12 21:52:59  №651793 233
>>651778
А я думал подзапрос это все равно один запрос.
Аноним 2016/02/12 21:53:09  №651794 234
>>651792
>$number=$number+1;
Проще $number++;
Аноним 2016/02/12 21:54:23  №651796 235
Аноним 2016/02/12 21:54:56  №651797 236
>>651791
Т.е. ты хочешь сказать, что можно банально хранить всё в одном файле и по кусочкам показывать, перепроверяя айди? А что, неплохая идея, надо подумать.
Аноним 2016/02/12 21:56:01  №651799 237
>>651797
Хранить ты будешь в базе, файл будет только доставать оттуда записи и показывать их пользователю.
Аноним 2016/02/12 21:56:15  №651800 238
Как вованы и долбоебы себя тут только школьники, не могущие сохранить файл и сделать регулярки пятый год, ведут.
Аноним 2016/02/12 21:56:31  №651801 239
>>651797
Правильно ли я понял, что в таком случае банально будет с помощью админки текст забиваться изначально в один большой файл со всеми новостями и при нажатии на нужную новость оно будет ее подбирать?
Аноним 2016/02/12 21:57:38  №651802 240
14553034581680.jpg (31, 459x497)
497x459
>>651800
Иди почитай шапку треда, невежда.
Аноним 2016/02/12 21:58:20  №651803 241
Что ты за хуйню тут циклично наджойнил, ты хоть сам понял, что написал?
COUNT(DISTINCT c2.id) AS 'chief_claim_count'
FROM manager m1
JOIN claim c1 ON m1.id = c1.manager_id
JOIN manager m2 ON m1.chief_id = m2.id
JOIN claim c2 ON m2.id = c2.manager_id
GROUP BY m1.id
HAVING COUNT(c1.id) > COUNT(DISTINCT c2.id);
Аноним 2016/02/12 21:59:15  №651805 242
>>651801
Хранить информацию в файлах неудобно, для этого лучше использовать базу данных (MySQL, например). Ты вообще знаешь что это?
Аноним 2016/02/12 22:00:41  №651807 243
>>651805
Да, я сейчас активно изучаю запросы, кстати. Просто пока не использовал особо, в консольке разве что тестил, но не думал об этом.

Тоже хорошая идея. Я же сейчас только обдумываю как лучше сделать.
Аноним 2016/02/12 22:05:37  №651810 244
>>651792
Огромное спасибо!!!
Аноним 2016/02/12 22:34:37  №651842 245
>>651807
Почитай это https://gist.github.com/codedokode/10539213 и попробуй сделать задачки оттуда, если хочешь быть хорошим разработчиком очень важно уметь хорошо работать с базой данных.
Аноним 2016/02/12 23:07:57  №651867 246
Посмотрите модули. В админке создаются новости, в дисплей выводятся. Там вывод новостей (сортировка по годам и месяцам и категориям) через виджет реализована и запросы в бд прямо из веджеат, это наверное неправильно, но если не в виджете, то где их делать? Из контроллера ведь неудобно будет потом всю дату пихать в индекс, а из него опять в виджет а потом обратно.
Аноним 2016/02/12 23:08:26  №651870 247
Аноним 2016/02/12 23:23:23  №651883 248
Нужно вставить определённый функционал на вордпресс, функционал должен выводиться в виде отдельной страницы, функционал в своей работе использует только яваскрипт и jQuery, но требует стилей и некоторых библиотек яваскрипт. Как его можно и лучше вывести? Создать отдельный шаблон страницы и вставить туда, а потом просто создать страницу?Если делать так, то всё работает, кроме правого сайдбара, потому что я не понимаю как его подключить, если его подключать то ломается вся структура. Есть ли другие варианты?
Аноним 2016/02/13 00:15:58  №651943 249
14553117582780.jpg (38, 336x389)
389x336
Ребята, я решил задачу "Алфавит в круге", вы себе это представляете?!
http://ideone.com/rBa0Aj
Просто тысяча плюсов к мотивации сразу, хочется помолотить грушу на ночь глядя, ущипнуть спящую жену за ягодицу, так легко на душе.
Но мне показалось, ОП слегка дал маху в описаниях решения: там перемножать надо не координату x, которая у нас идёт от cos(), а координату y, которая идёт от sin().
По-другому не получается у меня, подставлял целую кучу возможных значений, сидел больше часа над одним этим моментом, когда уже круг более-менее получился.
И вот какой момент: я что-то напутал с синусоидами, у меня алфавит начинается не сверху, а сбоку, не с 12-ти часов, а с 3-х.
Вот это, возможно, и имел в виду ОП, когда говорил об отрицательных значениях у координат и как-то хитро перемноженной координате x?
Просто так внести отрицательно значение в $screen[$x][$y] мы не можем.
Наверное, надо как-то формулой переворачивать синусоиду, что-то такое, тут что-то слишком сложное для меня сейчас (помню, что-то такое делал в школе).
Послушаю ваших советов.
Как же я всё-таки рад, ребята, братишки, друзья.
До того момента, как смотрю на следующую, последнюю, бонусную задачу...
Но глаза боятся, а руки трясутся и потеют делают.
Завтра начну обдумывать и эту задачу.
Аноним 2016/02/13 00:43:43  №651974 250
test
Аноним 2016/02/13 00:44:04  №651976 251
Как вкатиться в верстку? Начал c html academy, когда закончу с основами html,css,js что делать дальше?
Аноним 2016/02/13 00:46:45  №651979 252
Аноним 2016/02/13 00:49:37  №651982 253
>>651979
шапку я читал, но я ведь не буду всерьёз писать страницу вручную тэгами, потому хочу понять всю картину целиком как всё раотает с фреймворками и без них
Аноним 2016/02/13 00:51:47  №651983 254
>>651982
>но я ведь не буду всерьёз писать страницу вручную тэгами
Будешь и не одну.
>потому хочу понять всю картину целиком как всё раотает с фреймворками и без них
Какими фреймворками? JS фреймворки типа react и другие модные вещи сделаны прежде всего для построения удобных адаптивных интерфейсов с няшными анимациями. Верстать в любом случае нужно уметь.
Аноним 2016/02/13 00:55:59  №651986 255
>>651979
>>651983
но когда я эти задания сделаю, это мне даст умение вручную писать сайты, но не эффективно, потому и спрашиваю что дальше учить. Как ставить на домен, как вставлять рекламу, как делать его видимым в гугле и всякие штуки типа WordPress и т.д. Это всё я знаю по наслышкам, но ведь кроме перечисленного есть же ешё куча всего, что мне нужно будет знать. А откуда?
Аноним 2016/02/13 01:03:44  №651997 256
>>651986
>когда я эти задания сделаю
Главные слова.
Дальше стоит свой сайт запустить какой-нибудь на HTML+CSS. А далее уже поймёшь, что нужно.
На фрилансах заказы по вёрстке посмотри - вот то и начни изучать после основ.
Аноним 2016/02/13 01:04:31  №651999 257
Аноним 2016/02/13 01:21:57  №652010 258
Хром ругаицо на HTML Geolocation api.
> getCurrentPosition() and watchPosition() are deprecated on insecure origins, and support will be removed in the future. You should consider switching your application to a secure origin, such as HTTPS.
Типа настойчиво рекомендует перейти на https.
FF не возникает, опера тоже (впрочем вежливо заставила принять какое-то соглашение).
Или эта фигня только на локалхосте?
Что с этим делать? Может есть другая альтернатива для определения местоположения?
Аноним 2016/02/13 02:25:41  №652040 259
>>651943
У тебя $angle изменяется в диапозоне от 0 до 360 градусов. А нужно от -90 до 270. Если начальный $angle = -1.5 (в твоем решении, методом тыка подобрано). То все развернется. http://ideone.com/BiZdLf

Еще можно не менять $angle, а повернуть матрицу на -90 градусов. Я считаю, это более лучше помужски, хоть и можно сказать что костыль. + популярная задачка в обучении алгоритмам.

А вообще можно считать координаты только для одной восьмой круга. Потом делать два "отражения" по осям и поворот на 90 градусов. Так делают в рисовании примитивных фигур для экономии процессорного времени.
Аноним 2016/02/13 09:52:33  №652120 260
Проверьте пожалуйста вроде бы правильно но почему-то выводит не все варианты

http://ideone.com/yE5mZ0
Аноним 2016/02/13 10:15:35  №652129 261
Блять. Начал учить хтмл/ксс.
Понимаю что дальше будет пхп.
Захожу на двач спросить советов мудрых.
И что я вижу? Синусы, косинусы, какой-то ебанутый синтаксис, вычесленея.
Так и хочется положить на эту затею.
Аноним 2016/02/13 10:24:13  №652130 262
>>652129
положи, братик, положи.
Аноним 2016/02/13 10:37:42  №652136 263
>>652130
Ну так жалко же своих уже приобретенных сакральных знаний.
Ладно, как закончу курсы на хтмлакадеми, буду вас здесь доебывать.
Аноним 2016/02/13 11:26:06  №652156 264
>>652120
тут есть кто живой??
Аноним 2016/02/13 11:29:58  №652158 265
Аноним 2016/02/13 11:51:10  №652167 266
>>652120
PHP Notice: Undefined variable: randomWor4 in /home/w40oSf/prog.php on line 30
Бложек Аноним 2016/02/13 11:56:59  №652168 267
Увидел на странице рекламу:

> Как установить игру?
> На компьютер или телефон. Смотрите прямо в поиске Яндекса! 0+
> yandex.ru/Игры_на_Яндексе
(ссылка кстати не работает)

Не удержался от того, чтобы кликнуть - происходит переход на hxxps://yandex.ru/set/games_minecraft/4?from=adwords_gdn_games&utm_source=google&utm_medium=gdn&utm_campaign=Games_Russia&utm_term=&utm_content=ideone.com&gclid=CI-w4dqt9MoCFSUMcwody9MKQw

На этой странице написано:

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

То есть реклама - полный обман:

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

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

Аноним 2016/02/13 11:57:09  №652169 268
Аноним 2016/02/13 12:00:09  №652172 269
>>652168
Держи нас в курсе.
Опрос Аноним 2016/02/13 12:05:38  №652176 270
Аноны, а просто любопытно, как вы читаете тред?

- заходите на главную, ищете тред, переходите в него?
- сохраняете в закладкти?
- просто держите открытым постоянно и обновляете (я так делаю)

И как находите ответ на свою задачу если ОП часто их проверяет только несколько дней спустя, и за этой время успевают запостить 300-400 постов?

Аноним 2016/02/13 12:08:16  №652178 271
>>652176
Тред открыт постоянно, куклоскрипт оповещает если на мой пост ответили.
Аноним 2016/02/13 12:12:12  №652182 272
>>652120
$randomWord1 = array_rand($word1,3);
PHP 5.2.10 - Возвращаемый массив ключей больше не возвращается в случайном порядке.

$word1[$randomWord1[1]] - Выводит второй случайный элемент. В этом примере сюда не попадут как минимум первый и последний элемент
Аноним 2016/02/13 12:27:02  №652194 273
Аноним 2016/02/13 13:20:22  №652215 274
14553588227030.png (117, 1444x1024)
1024x1444
Поясните неофиту почему невыводится сообщение о дабле. Нужно ли писать exit(); в каждом блоке?
Аноним 2016/02/13 13:23:02  №652217 275
>>652215
Прочитал внимательно - вопрос про дабл отпадает.
Аноним 2016/02/13 13:29:51  №652226 276
Напомню себе проверить https://github.com/V3N0m21/Uppu4

В старом треде даны ответы на все посты, проверены все решения:

Задачи про калькулятор, номера, кредит, банкомат, стихи за 7-8 февраля >>652214
Список номеров для задачи проверки номера >>652216
верстка integer64, лиличка >>652219
Почему не работает регулярка в граммар наци >>652221
номера телефонов, лиличка >>652222
лиличка, сброс буфера, опечатки >>652223

Если вас пропустили или не ответили в стром треде - напомните о себе тут. Старый тред закрыт.
Аноним 2016/02/13 13:32:40  №652231 277
>>652226
>https://github.com/V3N0m21/Uppu4
Я надеюсь он знает что закомиттил на гитхаб что-то подозрительно напоминающее его настоящий пароль от базы данных?
Аноним 2016/02/13 13:34:44  №652232 278
https://github.com/V3N0m21/Uppu4 - а зачем ты сделал 3 репозитория с 3 версиями? Почему бы не использовать один репозиторий, а версии помечать метками гит?
Аноним 2016/02/13 14:07:10  №652254 279
Аноним 2016/02/13 14:10:04  №652255 280
>>652254
exit — Выводит сообщение и прекращает выполнение текущего скрипта
Аноним 2016/02/13 15:04:56  №652345 281
>>652040
Ого, спасибо!
>У тебя $angle изменяется в диапозоне от 0 до 360 градусов. А нужно от -90 до 270.
Вот в чём тут было дело, действительно. Получается, от -180 до 180 - круг будет начинаться с 9 часов.
Я просто уцепился за подсказку ОПа, что надо координаты x и y менять, ставить минус где-то там, - и насиловал безуспешно эти моменты.
Получается, как раз пытался матрицу повернуть таким образом, но не вышло ничего.
Я потом чуть-чуть поправлю число, на которое надо домножить, поиграюсь с десятыми значениями угла - круг не совсем ровный получается из-за этого, нет золотых сечений в тех числах.
А вообще можно ли как-то это всё вычислять из количества букв, как мы делаем с углом? Может, тоже как-то надо к 360-ти градусам привязать?

>>652120
Количества выбираемых элементов в array_rand необязательно указывать. По умолчанию будет один из номеров, нам это и нужно.
>$word5[$randomWord5[1]]
Не имеет смысла. У нас массив $word5, в котором [$randomWord5] как раз будет нужным нам случайным числом. Значит, выводим массив с этим вот случайным числом.
Var_dump делай почаще, смотри на то, что выходит.

>>652129
Это единственная задача с синусами-косинусами, многие вообще её спокойно перескакивают, потому что подобное не ожидают встретить в будущем.
У меня просто челлендж, который эксептед.

>>652168
Ещё они тулбары в разный официальный софт пихают, договариваясь с разработчиками (например, KMPlayer). Но так многие поступают. Например, Adobe так распространяет антивирус McAfee. Яндекс потом своего советчика запускает, показывает более низкие цены в интернет-магазинах. Причём для конечного пользователя это достаточно удобно.
Я нейтрально отношусь к Яндексу в этом плане.
Это вот Мейл.ру и Вебальта скатываются до того, что значения не имеет, убираешь или нет ты "галочку", - всё равно тулбар установится.
Но там партнёрские программы в приоритете, оплата за количество установленных Спутников, надстроек в браузер и т.п.
Аноним 2016/02/13 15:13:00  №652355 282
>Но там партнёрские программы в приоритете, оплата за количество установленных Спутников, надстроек в браузер и т.п.
То есть переложив на чужие плечи поиск пользователей, Мейл.ру и Вебальта закрыли глаза на то, как именно это всё будет распространяться. А партнёрки с вебмастерами и рады.
Аноним 2016/02/13 17:20:27  №652541 283
Почему у нас, пхпшников, нет такого набора модных и гламурных книжечек, как у рубистов??
>>652513
Как можно выучиться красивому коду без современных и структуированных книжек на английском от профессионалов?
Аноним 2016/02/13 17:21:22  №652543 284
>>652176
Открываю раздел, прокручиваю до самого низа, чтобы найти тред.
Ответы на свои посты ищу по заголовкам с названием гитхаба.
Аноним 2016/02/13 17:21:35  №652544 285
>>652231
Теперь знает
>>652232
Gitbook я прочитал уже после того как все это насоздавал
Аноним 2016/02/13 17:23:57  №652549 286
бляя, я тоже в тестовом отправил ведь фреймворк вместе с паролем для дб. надеюсь им похуй...
Аноним 2016/02/13 17:52:55  №652572 287
>>652544
В истории-то все равно видно.
Аноним 2016/02/13 18:36:28  №652617 288
Правильно ли я понимаю что похапе устаревшая бекэнд штука для связи с БД формочек, обычный информационный(редкообновляемый) сайт можно написать без нее, верно?
Аноним 2016/02/13 18:37:37  №652620 289
Аноним 2016/02/13 18:43:32  №652632 290
>>652620
А как верно? Почему в оп-посте нету строк о позиционировании и применении
Аноним 2016/02/13 19:49:11  №652764 291
ОП, ты здесь? Можешь подкинуть идею, как справиться с кошками-мышками? Уже второй день ломаю голову, а ничего практически не написал. Я создаю класс животные, подкласс Мыши. Класс Поле. Как.... как... заставить это взаимодействовать? Не понимаю...
Аноним 2016/02/13 20:11:02  №652816 292
Хай аноны. Недавно заинтересовался программированием(в универе прохожу VB, вот получается не очень и не нужен мне бейсик). Хочу изучить PHP, для того, чтобы запилить другу сайт(в прочем, он админ паблика вк с 10к+ подписоты и срубает за рекламу не плохо). Вопрос. Что лучше сделать, сайт или борду?(по мне борда удобнее и пилить я хотел бы именно ее, Kusaba работает на PHP). Не кидайтесь сразу ссаными тряпками, я нубяра во всех этих делах, а тред именно для нубов. Так вот я хотел бы узнать, что нужно знать для использование Кусабы и дальнейшего проддвижения борды. Или это хуевая идея и нужно просто запилить сайт?
В общем, где можно доступно прочитать про запилы сайтов/борд и что для этого нужно(языки программирования, сервак) и как это все реализовать?
Сразу извиняюсь, если вопрос нубский/идиотский, но, псес объясните кто-нибудь.
Аноним 2016/02/13 20:13:21  №652826 293
>>652764
>Как.... как... заставить это взаимодействовать
Кошка движется к ближайшей мышке. Сравнивай координаты.
Если координаты мышки и кошки совпадают, то мышка уничтожается.
Аноним 2016/02/13 20:14:49  №652834 294
>>652826
Ты оп? Мне бы от тебя совет по реализации идеи, иными словами по... самой сущности ,что ли. Это-то я в условии прочёл, я не совсем понимаю как заставить всё это работать... Ладно, сейчас буду опять думать
Аноним 2016/02/13 20:15:35  №652837 295
>>652826
посмотришь пока мой код, скажешь, что уже неверного напридумывал?
Аноним 2016/02/13 20:16:29  №652841 296
>>652834
У тебя какие-то туманные вопросы, аля "сделайте всё за меня". Ты по существу задавай, в каком конкретно месте проблема?
Аноним 2016/02/13 20:20:40  №652854 297
Ребята, помогите плез. Почему эта хуйня не работает?

Код короткий, поэтому закину прямо сюда.

if(isset($_POST['val']))
{
$val = file_get_contents("red.txt");
print($val);
};

В index.html ajax запрос методом POST. Консоль разработчика показывает, что запрос совершается, но PHP ничего не возвращает, if конструкция даже не отрабатывает.
Аноним 2016/02/13 20:23:25  №652862 298
>>652841
да в самом начале.

Смотри. Делаю мышь. У неё координаты. Располагаю её в массиве - игровом поле. Как заставить игру "ходить" и мышь "ходить"? Нужен отельный класс, что-то вроде "гейм энджин"? Как задать вот эту последовательность ходов?
Аноним 2016/02/13 20:24:45  №652865 299
>>652862
У меня был класс поля и метод сделать ход.
Аноним 2016/02/13 20:25:20  №652866 300
>>652764

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

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

Каждый ход мы берем список животных и просим каждого из них сделать свой ход.

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

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

ВариантХода кстати вполне можно сделать объектом, мы же ООП изучаем.

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

Что скажешь?
Аноним 2016/02/13 20:29:47  №652874 301
>>652841
Логично. Сначала тоже сделал его как класс, но потом засомневался, нужен ли он там.
>>652866
Спасибо за объяснение. Попробую сейчас на основе этого порешать...

Я ещё почитал книгу из ОП-поста про классы и ООП (Мэтт Зандстра) там он рассказывает про abstract классы и наследование. Решать используя это?
Аноним 2016/02/13 20:31:11  №652879 302
>>652874

Если наследование применять уместно (есть классы которые расширяют друг друга, и обозначают однотипные сущности), его надо применять. Если неуместно - не применять.
Аноним 2016/02/13 20:31:30  №652881 303
>>652854
Сделай
var_dump($_POST);
перед условием.
Аноним 2016/02/13 20:32:11  №652886 304
Кстати, те кто пропускает задачи Вектор (с кризисом) и Кошки-Мышки, вы много теряете. Вы не разберетесь в тонкосятх ООП и вам трудно будет потом писать ООП-код или разбираться в ООП-фреймворках.
Аноним 2016/02/13 20:35:18  №652900 305
>>652886
что за кризис? Кстати, если ты ОП, когда посмотришь>>649669 ? оче жду оценки, сенсей
Аноним 2016/02/13 20:39:58  №652923 306
>>652881
Отвечает empty. Может я чего не понимаю в запросах?
Вот аякс код:

$.ajax({
type: 'post',
url: 'post.php',
data: 'val',
success: function( data ) {
var currentValue = data;
var slider = document.getElementById("red");
slider.value = currentValue;
}});

Суть кода:
Возвращаемая из php информация идёт на элемент <input type="range"/> и меняет в нём параметр value, это обычный слайдер.
Аноним 2016/02/13 20:49:24  №652943 307
14553857648710.png (16, 684x542)
542x684
Возникла проблема с jQuery, есть вот такая страница, представленная на пикче. Контент меняется при нажатии на табы, внизу этого, есть кнопка, при нажатии на которую, второй таб должен становиться активным и показываться второй слайд. Я написал код для jQuery, чтобы при нажатии на кнопку добавлялся класс табу и переключался слайд, но когда слайд переключается я оказываюсь внизу этого слайда, и внизу всей страницы, а мне надо оказаться в верху, как это организовать?
Аноним 2016/02/13 20:54:40  №652951 308
>>652923

Ребята, заработало, всем спасибо. D аякс сделал так: data: "val=1"
А в php:

if(isset($_POST['val']))
{
$red_v=$_POST['val'];
if($red_v = "1"); {
someCode;
}
Аноним 2016/02/13 20:59:50  №652959 309
>>652951

А почему ты не читаешь офииальную документацию по $.ajax? http://api.jquery.com/jquery.ajax/

Посмотри что там написано про data

Обычно там словарь (хеш) значений указвают.
Сумма Прописью Аноним 2016/02/13 21:15:34  №652979 310
Аноним 2016/02/13 21:35:24  №652982 311
>>652900
Дык ведь ОП уже ответил.

>>652979
Ох щи, неплохо как!
Сколько сидел над задачей? Интересно придумал с регулярками для замены "один тысяча" и т.п., но это костыль, мне кажется.
Но в условии задачи стоит сумма в сотнях миллионов, твоё решение не обрабатывает ещё одну цифру: http://ideone.com/BiZdLf
Также не обрабатывает 0.
Расскажи о себе, как долго изучаешь РНР, почему не сидел над задачей три недели, почему начал её решать вообще? Обычно торопятся пройти учебник ОПа и перепрыгнуть к ООП и так далее. Впервые вижу, что кто-то ещё её делает в треде...
Аноним 2016/02/13 21:38:49  №652985 312
>>652979
Ещё:
>На вашем счету[ ]один рубль
Два пробела внутри в этом случае.
Регуляркой можно вырезать, конечно, но я бы шёл другим путём.
Аноним 2016/02/13 21:53:42  №652999 313
>>652982
>Дык ведь ОП уже ответил.
То есть? Не ответил же
Аноним 2016/02/13 21:55:46  №653002 314
Аноним 2016/02/13 21:56:43  №653003 315
>>653002
Ну там ОП ответил только по на последнюю, БД, а задачи на ООП не посмотрел.
Аноним 2016/02/13 21:59:48  №653007 316
Кстати, раз уж я тут бушую, хочу уточнить у знатоков: я правильно понял, что в абстрактом классе лучше прописать абстрактно все методы, которые буду раскрывать в каждом подклассе?

Т.е. он выступает в роли своеобразного "шаблона" для подклассов?
Аноним 2016/02/13 22:03:35  №653010 317
Что делать с этими бесконечными калбеками в js? Подскажите как с ними бороться, по каким хоть словам гуглить.
https://jsfiddle.net/b0ypfuef/2/
Аноним 2016/02/13 22:11:27  №653016 318
>>652982
Ой, я перепутал ссылку, вот твои числа прописью с подставленной цифрой: http://ideone.com/FRfw1Y
Аноним 2016/02/13 22:22:39  №653030 319
>>652979
Нет, бро, там ошибок куча вылезает: http://ideone.com/gFfCFD - На вашем счету[__]сто двадцать три тысячи ноль один рубль + PHP Notice: Undefined variable: million in /home/Dq0nbr/prog.php on line 104

http://ideone.com/B1iQIu - На вашем счету[__]сто двадцать три тысячи двенадцать рубля + PHP Notice: Undefined variable: million in /home/Ntusl2/prog.php on line 104

http://ideone.com/VFeRgF - На вашем счету[__]сто ноль тысяч + PHP Notice: Undefined variable: million in /home/tDoq3U/prog.php on line 104

http://ideone.com/4s4cqK - На вашем счету.

Такое нельзя считать решением задачи, согласись.
Аноним 2016/02/13 22:41:01  №653044 320
>>653010
Я пока выкрутился костылями, но так не годится. Потом надеюсь кто-то ответит как правильно поступать в такой ситуации, хочу писать хороший код.
Суть такова.
Мне нужно получить координаты пользователя. Берем из navigator.geolocation

navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, options);

Внутри success-функции нужен аякс-запрос к php-скрипту, который обработает эти данные и вернет результат.
function geolocationSuccess(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
$.ajax('/handler.php', {
data: "lng=" + longitude + "&ltd=" + latitude,
...
success: ajaxSuccess
});
}

После успешного завершения запроса нужно выполнить еще одну функцию, которая будет принимать в качестве аргумента и текст аякс-респонса, и переменные полученные в другом колбеке.
function ajaxSuccess(data) {
foo(data, latitude, longitude);
}
Аноним 2016/02/13 22:48:53  №653059 321
>>653030
Да, согласен, поэтому и написал "убожество". А что значит "PHP Notice: Undefined variable: million in /home/Ntusl2/prog.php on line 104"?
Аноним 2016/02/13 22:49:37  №653064 322
>>652943
Покажи код, не понятно где ты мог запутаться.
Может забываешь у предыдущего таба класс убрать?
Аноним 2016/02/13 22:52:39  №653072 323
Аноним 2016/02/13 22:59:55  №653081 324
>>653059
Значит перемнная million не определена.
Аноним 2016/02/13 23:18:47  №653101 325
>>653007

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

Вот представь что ты пишешь абстрактный класс, а наследника пишет кто-то другой. И твоя задача сделать так, чтобы он при всем желании не мог написать его неправильно.
Аноним 2016/02/14 01:56:19  №653252 326
Господа, я так понял генерировать миграции по моделям умеет только Doctrine в Symfony, остальные фреймворки предлагают делать это рука, что разумеется после symfony2 или даже после PMA, делать не хочется.

Я прав? Есть ли решения для Yii, Laravel ?
В каких фреймворка еще, есть такая возможность?
Аноним 2016/02/14 04:10:46  №653303 327
>>649806
сокеты лучше изучать на жаве. у пхп плохо с хайлоадом.
Аноним 2016/02/14 08:15:11  №653336 328
Как сделать чтобы файл (например login.php) не мог открыться никак кроме из index.php через инклуд?
Аноним 2016/02/14 12:35:17  №653459 329
>>653252
Прикрути доктрину к Yii, Laravel.
Аноним 2016/02/14 13:50:23  №653547 330
Сумма Прописью Аноним 2016/02/14 13:51:42  №653550 331
Аноним 2016/02/14 14:22:37  №653570 332
Что за fork? Как им пользоваться?
Аноним 2016/02/14 14:26:26  №653576 333
>>653570
Вилка)
Втыкаешь в еду и ешь)))
Аноним 2016/02/14 14:27:42  №653578 334
>>653570
Ей также можно чистить говно.
Аноним 2016/02/14 14:27:54  №653579 335
Котаны, объясните дилетанту. Установил apache2 и php как модуль для апача, потестил web-приложение - все работает. Теперь мне необходимо дописать некоторую функциональность. И тут хуйня происходит. Пишу я код, например, в саблайме, а стек трейс смотрю в логах апача. Неудобняк. То же самое и с phpshtorm'ом. Как вы живете с этим, котаны?
Аноним 2016/02/14 14:34:50  №653590 336
Аноним 2016/02/14 14:39:42  №653595 337
>>653579

на небоевом (тестовом) сервере можно включить display_errors= On
Аноним 2016/02/14 14:42:27  №653599 338
>>653336
определай дефайном в index.php какую нибудь константу и в своем файле login.php, например, если она не определена или не тру - дай.

Аноним 2016/02/14 14:45:41  №653600 339
>>653550
Почему все пыхеры так любят злоебучие массивы? массивы массивов массивов и ассоциативные массивы ассоциативных массивов. Неужели не существует других структур данных?
Аноним 2016/02/14 14:46:52  №653601 340
>>653600
Он просто еще не дошел до ООП.
Аноним 2016/02/14 14:50:59  №653602 341
>>653600
у них классы то недавно появились, о чем ты
Аноним 2016/02/14 14:59:37  №653605 342
>>653601
>>653602
Да это проблема очень многих пхп- проектов.
Бомбануло просто. По работе имею дело с кучей легаси, и это просто убивающая хуйня.
Ладно, в пыхе действительно с этим сложновато. Те классы есть, но коллекций, контейнеров и прочей хуйни нет. Да даже нормального переопределения конструктора нет.
Аноним 2016/02/14 15:24:06  №653620 343
>>653550
1)
function smallNumberToText($number) {

if ($number == 0) {
echo "На вашем счету ноль рублей";
exit;
}
}
Ну ты серьезно?
функция из трех строк, которую ты используешь один раз?
зачем exit? Может надо было exit ('На вашем счету 0 рублей');
Аноним 2016/02/14 15:30:01  №653629 344
>>653600

Есть классы, тайп-хинты и ООП которых во многих хипстерских языках нет.

Что значит "все"? Откуда у тебя такие данные?

>>653602

Ложь.

>>653605

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

Коллекции какие-то есть в SPL, есть сторонние библиотеки.

> Да даже нормального переопределения конструктора нет.
Зачем?
Аноним 2016/02/14 15:59:26  №653657 345
Аноним 2016/02/14 16:09:13  №653663 346
>>653629
>Есть классы, тайп-хинты и ООП.

С каких пор Классы стали структурами для хранения данных?

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

То что вы даже например опишите в классе работы "Анальной структуры", то все равно это будет Массив, или Хеш-Массив, ну максимум FIFO Стек .(Кортежи из питона, нинужны, так как этот тот же массив)

Ну вообщем я что-то вам не понимаю. В чем еще хранить данные если не в массивах и не в хеш-таблицах?
Аноним 2016/02/14 16:23:29  №653672 347
>>653663

> С каких пор Классы стали структурами для хранения данных?
Чем объект не структура? Поля есть.

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



Аноним 2016/02/14 16:32:32  №653678 348
Есть функционал для сайта на вордпресс, в своей работе он использует javaScript, скажите как его установить на вордпресс? первое что приходит в голову создать шаблон страницы и разместить весь код в шаблоне (кода вместе с хтмл довольно много, больше 2000 строк), но там стандартный шаблон страницы довольно сложноватый и я не понимаю как сделать так, чтобы не сместился боковой слайдер. Есть ли другие варианты установки такого функционала на сайт вордпресс?
Аноним 2016/02/14 16:36:19  №653683 349
>>653550
Почти все те же ошибки, что и были.
1000000 не видит.
http://ideone.com/DVLZjf
Это вот вообще забавно выглядит:
>$regexp = array(
0 => '/ десять один/u',
1 => '/ десять два/u',
2 => '/ десять три/u',
3 => '/ десять четыре/u',
4 => '/ десять пять/u',
5 => '/ десять шесть/u',
6 => '/ десять семь/u',
7 => '/ десять восемь/u',
8 => '/ десять девять/u'
);
Опять же ты даже если бы и работало всё правильно - где сотни миллионов? Второй раз ведь напоминаю про них. Там должно быть девять девяток, в mt_rand, а не восемь. С девятью девятками не работает.
http://ideone.com/wXdCpC - На вашем счету сто две тысячи двенадцать рубля + PHP Notice: Undefined variable: million in /home/eiP3X6/prog.php on line 109
http://ideone.com/ceh6Jd - На вашем счету два миллиона двести тридцать одна тысяча[пропали рубли]- при $number = 1231000.
Куча такого вылезает.
Думаю, что не годится это решение и само по себе (работает неправильно, не заложено даже то, что есть в условии - 999 миллионов), и с костылями-регулярками.

>>653620
Я вообще не пойму, зачем ОП говорил, что ноль рублей надо дополнительно проверять, - у нас всё и так уже есть в массиве $spelling. Его вот надо дополнительно уничтожать, когда три цифры в середине состоят из нулей, это да. А то будут вылезать те же ошибки, что и у анона.
Аноним 2016/02/14 17:07:27  №653704 350
>>653579
На этот счёт в юниксах есть команда tee.
Она будет в отдельном окне печатать тебе логи апача.
Теперь в другом окне запускай хоть midc хоть vi и не нужен тебе никакой phpstorm.
Аноним 2016/02/14 17:10:50  №653710 351
>>653704
Перепутал, "tail -f" я имел в виду, "tee" для другого.
Аноним 2016/02/14 17:23:37  №653722 352
Говнокод инкоминг!
Grammar Nazi http://ideone.com/uGD7O1
Что можно сделать для улучшения, чужие решения пока не смотрел.
Аноним 2016/02/14 17:25:10  №653726 353
>>653722
а нахуя так текст вставлять?
Аноним 2016/02/14 17:29:11  №653729 354
14554601519310.png (2, 271x43)
43x271
>>653683
Спасибо, исправлю. Просто я ориентировался на эти строки, а там 8 девяток
Аноним 2016/02/14 17:33:17  №653738 355
>>653726
А что не так с текстом?
Аноним 2016/02/14 17:33:24  №653739 356
>>653672
>Чем объект не структура? Поля есть.

А эти самые "поля", это что?
Аноним 2016/02/14 17:38:29  №653745 357
>>653738
нахуя хир-ограничители? Они настолько колхозные что нахуй не нужны.
Аноним 2016/02/14 17:45:20  №653750 358
>>653745
Убрал, а что по поводу выражения?
Аноним 2016/02/14 17:47:30  №653754 359
>>653750
тут хз, лень разбираться, дедлайн. Одно могу сказать - собирай условия в массив, а не блять по циферкам в переменной.
Аноним 2016/02/14 17:49:13  №653757 360
Аноним 2016/02/14 17:52:16  №653761 361
>>653620
Так функция не кончается на проверке на 0
Аноним 2016/02/14 19:26:35  №653850 362
Чет не пойму, как проверять код на ошибки то? Например пишу скрипт с вызовом функцияКоторойНихуяНет();

php -l ... говорит что No syntax errors detected in ...

Это норма?
Аноним 2016/02/14 19:27:43  №653855 363
14554672638130.png (5, 294x107)
107x294
Cап. Не программист, но у меня возникла ошибка. Кто-нибудь может разобраться, в чём проблема?
Аноним 2016/02/14 19:28:09  №653858 364
>>653855
быстрофикс
foreach($sections AS $key=>$section) {
$results = $tc_db->GetAll("SELECT FROM `" . KU_DBPREFIX . "boards` WHERE `section` = '" . $section['id'] . "' ORDER BY `order` ASC, `name` ASC / MENU.CLASS.PHP */");
foreach($results AS $line) {
$sections[$key]['boards'][] = $line;


Забыл код
Аноним 2016/02/14 19:28:59  №653859 365
>>653858
дамп $sections перед форычем в студию
Аноним 2016/02/14 19:29:59  №653863 366
>>653858
Это что, кусок кусабы? Лол.
Аноним 2016/02/14 19:30:38  №653865 367
14554674384530.png (5, 294x107)
107x294
14554674384531.png (8, 590x193)
193x590
>>653855
>>653858
Ёпт, хз как такое говно получилось. Короче, на 1м пике ошибка, на 2м сам код.
Аноним 2016/02/14 19:32:09  №653869 368
>>653863
Извини, что? Я вообще не шарю
>>653863
Да кусабы, каким-то невиданным образом исправлял туеву хучу ошибок, пока пилил, а ща бошка на бекрень уже
Аноним 2016/02/14 19:32:13  №653870 369
>>653865
Скорее всего $sections не является массивом и там что-то вроде Null, сделай дамп переменной до этого цикла
Аноним 2016/02/14 19:32:54  №653873 370
Аноним 2016/02/14 19:33:01  №653874 371
>>653870
Тоже, можешь пояснее объяснить, что надо исправить?
Аноним 2016/02/14 19:34:00  №653879 372
>>653869
Последняя версия кусабы должна работать без исправлений. Это значит что ты что-то не так настроил\поставил.
Аноним 2016/02/14 19:34:09  №653880 373
>>653874
Перед 49 строчкой где у тебя цикл foreach напиши var_dump($sections) и покажи результат
Аноним 2016/02/14 19:45:08  №653914 374
14554683083990.jpg (128, 1149x756)
756x1149
PDO не хочет ничего в базу добавлять, выбирать, делать бочку. Что не так? Mysqli функции все делали.
Аноним 2016/02/14 19:47:36  №653918 375
>>653880
Parse error: syntax error, unexpected 'foreach' (T_FOREACH) in /home/u117865029/public_html/kusabax_0.9_full/inc/classes/menu.class.php on line 49
Аноним 2016/02/14 19:48:27  №653924 376
>>653918
точку с запятой после var_dump($sections) поставь
Аноним 2016/02/14 19:49:34  №653926 377
>>653924
var_dump($sections) и foreach на одной строке писать или var_dump($sections) на отдельной?
Аноним 2016/02/14 19:51:28  №653933 378
>>653914
У пдо отображение ошибок в запросах отключено, сам постоянно ломал голову, когда что-то не так с запросом было. Включи отображение и смотри что в ошибки записывается. Я правда не помню какая именно команда за это отвечает.
>>653926
На отдельной
Аноним 2016/02/14 19:51:40  №653936 379
>>653924
Записал так
var_dump($sections); foreach($sections AS $key=>$section) {
...
Ошибка всё таже
bool(false)
Warning: Invalid argument supplied for foreach() in /home/u112465029/public_html/kusabax_0.9_full/inc/classes/menu.class.php on line 49
Аноним 2016/02/14 19:53:15  №653942 380
>>653936
Как я и говорил, у тебя не массив в переменной sections, а булево значение false.
Аноним 2016/02/14 19:54:10  №653944 381
>>653942
Ну, это, так что мне делать?
Аноним 2016/02/14 19:56:19  №653947 382
>>653944
Я не знаю, я не экстрасенс. Где ты взял этот код, что ты в нём менял?
Аноним 2016/02/14 20:00:43  №653960 383
14554692439650.png (66, 1645x890)
890x1645
>>653947
Взял код из Кусабы Х, вообще не хуя не менял, кроме как в config
Аноним 2016/02/14 20:07:00  №653967 384
14554696209620.png (134, 1645x890)
890x1645
>>653960
Очевидно, что этот запрос возвращает ошибку. Больше ничем помочь не могу.
Аноним 2016/02/14 20:10:55  №653972 385
>>653967
Очевидно что он просто её настроил неправильно, и мануалы не читал. Скрипт работает без всяких редактирований исходников.
Аноним 2016/02/14 20:20:49  №653987 386
>>653972
Мануалы я читал (Точнее 1 на инглише, 2-й коряво переведённый). В основдом проблема была подключить её к Базе Данных. Дальше я уже обрадовалось, но тут появилась эта ошибка. Можете нормальный мануал скинуть?
Аноним 2016/02/14 20:23:02  №653990 387
>>653972
Я зарегал хостинг и поддомен, там же создал БД(как её заполнять я хз, могу просто таблицу составить), В настройках Кусабы вводил всякое говно, типо Имя БД, хост БД
Аноним 2016/02/14 20:24:07  №653992 388
Аноним 2016/02/14 20:30:35  №654006 389
>>653914

Объясни зачем ты написал ERRMODE_SILENT? Где такому учат?

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

Раз так, я тебе помогать не собираюсь. Решил поиграть в экстрасенса - играй сам.
Аноним 2016/02/14 20:31:20  №654009 390
>>653992
Да именно это я и читал. Установку запускал прямо на сайте, и следовал дальнейшим действиям. Опять же там были проблемы с БД, которые я исправил, затем появилось окно, где мне велели удалить загрузочные файлы, и кстати, уже в этом окне была эта ошибка.
Аноним 2016/02/14 20:38:53  №654025 391
>>654009
В админке доску создал?
Аноним 2016/02/14 20:44:07  №654033 392
>>654025
Кстати, в админский Акк тоже не удалось войти.admin/admin
Аноним 2016/02/14 21:18:05  №654076 393
>>654033
Значит база данных заполнилась неправильно или совсем не заполнлась.
Аноним 2016/02/14 21:24:33  №654086 394
>>654006
Заменил на ERRMODE_EXCEPTION. Ошибка такая: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected
Аноним 2016/02/14 21:31:27  №654095 395
Аноним 2016/02/14 21:33:02  №654097 396
14554747825590.jpg (13, 348x145)
145x348
Проблема такая. В корневой папке файл file инклюдит autoload.php пикрелейтед и файл file2 из папки src, где будет создаваться объект некого класс foo. Этот класс уже описан в папке src и если я объявлю его в file1 файле, то проблем не будет. Однако, при его объявлении в file2 появляется ошибка Class 'foo' not found. Почему? Ведь инклюд это по сути копипаст, т.е. код file2 копируется в file1, однако автолоада не происходит.
Аноним 2016/02/14 21:34:52  №654104 397
14554748928750.png (21, 1109x297)
297x1109
>>654076
Вот такую шнягу он мне выдает.
Аноним 2016/02/14 21:36:11  №654106 398
>>654095
Да, ты прав, спасибо, все работает теперь. У меня не dbname, а name было.
Аноним 2016/02/14 23:32:52  №654236 399
Как лучше сделать простенький контейнер сервисов?
Аноним 2016/02/14 23:33:06  №654237 400
14554819870510.jpg (126, 1280x692)
692x1280
>>649329 (OP)
Сап, котаны.
Нужен скрипт, который будет заливать файлы из локальной директории на google drive, при заливке файла имя остается, как у локального, описание берется из переменной. После заливки файл нужно расшарить, чтобы могли видеть все пользователи инета и сохранить ссылочку в файл.
Нужно именно на пхп. На гитхабе есть несколько скриптов - хз рабочие или нет, можете их использовать. На быдлокод пох.
Сколько будет стоить такой скрипт?
Аноним 2016/02/14 23:42:50  №654254 401
>>654237
2к. Если устраивает оставляй контакты.
Аноним 2016/02/14 23:58:00  №654274 402
>>654236

Например с методами has($name), get($name) и set(callable $factory).

Примеры: Pimple

Также, можно захардкодить код создания объектов в класс и тогда останутся только методы get: getStudentMapper(), getValiadtor() и тд.
Аноним 2016/02/15 00:01:10  №654278 403
>>654097

Не копипаст. Инклюд выполняет код в указанном файле. Если там описан класс или функция, они создаются.

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

Также, гугли require_once.
Аноним 2016/02/15 00:02:29  №654279 404
>>654097

Проверь также регистр букв в названии класса. Также, замени относительный путь к файлу на абсолютный.
Аноним 2016/02/15 00:14:46  №654298 405
>>654254
Устраивает, но сейчас без бабок. Зп получу - напишу тебе, скинь свое мыло плиз.
Аноним 2016/02/15 00:21:05  №654317 406
>>654298
anonfake26.anon@yandex.ru
Отпиши сейчас, завтра могу тебе рабочую демку сделать.
Аноним 2016/02/15 00:34:57  №654338 407
>>649523

Сразу же первый совет - вынеси отдельно папку с публичными файлами, как описано тут https://github.com/codedokode/pasta/blob/master/student-list.md#Выносим-код-за-корень-сервера

> $app['debug'] = true;
Надо в конфиг добавить опция отвечающую за включение отладки

> define('UPLOAD_DIR', ROOT_DIR . '/upload/'); //Директория для файлов загрузок
> define('UPLOAD_PATH', '/upload/'); //Путь к папке загрузок для урлов
Мне не нравятся константы так как они у тебя где-то висят сами по себе и не способствуют инкапсуляции. Предлагаю убрать, а для получения пути и УРЛ файла сделать методы в сервисе или помощнике для работы с файлами.

> $db_config
Для переменных в PSR рекомендуют испльзовать camelCase, а не подчеркивания

> $app['file_service'] = function(){return new App\Service\FileService();};
Не экономь строчки в ущерб читабельности

> $app['autoloader']->add("App",ROOT_DIR);
Давай лучше автозагрузку сделаем добавив описание в composer.json

https://github.com/codedokode/pasta/blob/master/php/autoload.md
https://getcomposer.org/doc/04-schema.md#autoload

> https://github.com/lexdss/file-sharing-on-Silex/blob/master/App/Controller/IndexController.php
А нужен ли нам этот файл? Я думаю, нет. У нас всего 6 обработчиков в индексе.пхп, и каждому из них допустим надо 6-8 строк. Не так и много, чтобы создавать отдельный контроллер. Это же микрофреймворк.

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

Ну вот пример:

> https://github.com/lexdss/file-sharing-on-Silex/blob/master/App/Controller/IndexController.php#L71
В этой функции очевидно код можно разделить на 2 части:

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

> $this->app['file_service']
Это у тебя повторяется раз 10, значит стоит сделать приватное поле и заполнить его в конструкторе.

Отдачу файла надо переделать, чтобы было 2 варианта:

- если доступен модуль X-SendFile, испльзуем его
- если нет - отдам неэффективно средствами PHP, но не как у тебя, странным велосипедом, а стандартной функцией вроде readfile()

Я тут погуглил, и нашел кое-что интересное: http://symfony.com/doc/current/components/http_foundation/introduction.html#serving-files

По моему нужный функционал уже написан.

> fread($fr, filesize($file_path))
Для этого есть file_get_contents. Это правда имеет тот недостаток что файл целиком читатся в память.


> $this->app['file_service']->getName($uploaded_file->getClientOriginalName());
Неудачное название getName не говорит что делает функция

> $file->width = $this->app['file_service']->getWidth($file_info);
Ошибка: ты сваливаешь в file_service все подряд. Для разбора массива от getId3 правильнее сделать отдельный класс, который будет инкапсулировать его внутри, а наружу предоставлять нужные методы. Далее, можно сохранять объект этого класса в поле объекта File, и сделать в доктрине поддержку сохранения этого класса в БД в закодированном в виде json формате.

> $file->upload_date = date('Y-m-d', time());
Почему upload_date хранитяс строкой, а не таймпстампом или объектом DateTime?

> $uploaded_file->move(UPLOAD_DIR, $file->id . '.txt')
Получение имени файла должно быть сделано отдельной функцией, а не размазано по коду

> https://github.com/lexdss/file-sharing-on-Silex/blob/master/App/Controller/IndexController.php#L60
Уменьши число веток в ифе с двух до одной

Не вижу проверки прав на изменение описания или удаление файла. Не очень понятно зачем ставить эту куку:
> $response->headers->setCookie(new Cookie($file_id, null, time() - 1));

https://github.com/lexdss/file-sharing-on-Silex/blob/master/App/Mapper/FileMapper.php
Раз уж ты взял Доктрину, может быть нормально натсроить маппинг и сохранять/загружать в базу объекты File?

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

https://github.com/lexdss/file-sharing-on-Silex/blob/master/view/audio_info.html
Тут у шаблонов расширение стоит поменять на .html.twig

> <a href="/download/{{ file.id }}">
Генерацию ссылки стоит вынести в какой-нибудь сервис или хелпер а не копипастить по всему коду
Аноним 2016/02/15 00:44:17  №654361 408
if ($stable_work) {
print "<meta http-equiv=Refresh content='$start_script_in_sec' url='index.pp?monster=$monidinv' />";

}



Почему игнорирует параметр url (src тоже пробовал)?
ТАКС ТАКС Аноним 2016/02/15 00:59:24  №654377 409
14554871646530.jpg (40, 604x422)
422x604
Такие дела, малята. Есть у меня одна идея. Выношенная и здоровая. Мне нужно реализовать, а я в меру чайник и знаний у мя маловато.
При входе на сайт пользователь должен ввести/выбрать данные на нескольких чекбоксах/спиках/формах. Все эти данные записываются в базу данных как один участник (т.е. ему пприсваевается айди). После заполнения полей жмакает далее и ему показывается изображение и форма (или поле хз как называется это у вас) куда он должен записать текст и нажать далее. И так далее будут продолжаться картинки. У каждой картинки в базе есть айди и к ней приписывается каждый ответ пользователя.
Я в пэхапэ нихуя не знаю, но вообще немношк умею в БД и знаю вообще простейшие возможности некоторых ЯП.
Нужно минимально затратно по времени. Хотелось бы вообще какой-то готовый скрипт, потому что самому писать это слишком дохуя придется учить.
Болгадорю
Аноним 2016/02/15 01:04:59  №654383 410
>>649644

Ок, база сделана хорошо, а где селекты выбирающие данные?

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

>>649669

> http://ideone.com/GmqSWk

> $normalHours += $weeks;
> } elseif($weeks > 40) {
> $normalHours = $normalHours + 40;
У тебя в одной ветке стоит += , а в другой просто =, это меня сбило с толку

Также, от этого ифа можно избавиться используя min/max.

Также, число 40 поввторятся много раз - вынеси в поле объекта или константу класса.

> $encoding = $encoding === NULL ? mb_internal_encoding() : $encoding;
Зачем это? Достаточно в начале программы поставить mb_internal_encoding с нужной кодировкой.

> Вектор

> class Managment
> class Marketing
> getStatsOfBuying
Сплошная копипаста. Копипаста - зло, делает код нечитаемым и неподдерживаемым. Странно что ты нашем треде не первый день, а делаешь такие ошибки. Не делай так больше.

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

> $ko2 = 1;
Переменные надо называть нормально. если тяжело писать в идеоне, поставь себе нормальный редактор.

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

Также, к этой задаче есть дополнительное задание:

### Антикризисные меры

Задание: напиши программу для учета расходов и результатов работы всего дружного коллектива компании «Вектор».

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

1. Сократить в каждом департаменте 40% (округляя в большую сторону) инженеров, преимущественно самого низкого ранга. Если инженер является боссом, вместо него надо уволить другого инженера, не босса.

2. Увеличить в целях стимуляции умственной деятельности базовую ставку аналитика с 800 до 1100 тугриков, а количество выпиваемого им кофе с 50 до 75 литров. В тех департаментах, где руководитель не является аналитиком, заменить его на аналитика самого высшего ранга из этого департамента (а бывшего руководителя вернуть к обычной работе)

3. В каждом департаменте повысить 50% (округляя в большую сторону) менеджеров 1-го и 2-го ранга на один ранг с целью расширить их полномочия.

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

------

Также, есть паста в помощь:

------

## Вектор

Когда ты решаешь задачу на ООП, ты должен ответить на вопросы:

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

Также, сразу скажу еще один совет: гораздо удобнее сделать не один класс Сотрудник, а 4 класса: Инженер, Менеджер, и т.д. Тогда мы можем легко менять например правила расчет зарплаты или кофе для каждой профессии. Естественно, копипастить одинаковый код в 4 класса не надо — создай базовый абстрактный класс Сотрудник и унаследуй от него 4 класса-профессии. Правда в этом случае мы не можем поменять профессию сотрудника.

Наследование позволяет создавать класс не с нуля. а расширяя сущетсвующий класс: http://php.net/manual/ru/language.oop5.inheritance.php

«Абстрактный» — это класс, объект которого нельзя создать. Он предназначен для наследования от него других классов: http://php.net/manual/ru/language.oop5.abstract.php

Также, ты должен для всех полей и методов расставить модификаторы доступа (pubic, private, protected - они определяют, откуда можно обращаться к полю или методу). Ты должен подумать логически и для каждого поля/метода определить: это часть кода, которая относится к внутренней логике класса и не должна быть доступна снаружи, или же это часть кода, которая должна быть доступна. Ну к примеру, в Департаменте метод посчитатьОбщиеЗатратыНаЗарплату() должен быть публичным - для этого мы и пишем класс, чтобы считать затраты.

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

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

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


> Также: задача на лайки SQL
Нет PRIMARY KEY в лайках, нет защиты от вставки лайка повтрно. Сам селект правильный. Советую решать больше задач на SQL и попросить задачу на проектирование базы посложнее.

>>649693

Ошибка тут
> $symb2 = mb_substr($text, -$i);

Ты берешь не один символ, а кусок до конца строки.
Ответы Аноним 2016/02/15 01:05:29  №654384 411
>>649808

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

>>649829

Чтобы изучать вебсокеты, надо изучить обычные сокеты и сетевое программирование. По твоим вопросам я вижу что ты не знаешь этих тем. Хочешь изучать? Надо будет много гуглить и писать код. Для начала, чтобы не тратить время, погугли про протокол TCP.

>>650345

C научным руководителем поговори.
Аноним 2016/02/15 01:07:40  №654386 412
>>654383
>Ок, база сделана хорошо, а где селекты выбирающие данные?
Ох лол, а я и не заметил, что они при форке куда-то потерялись.
http://sqlfiddle.com/#!9/7451e2/1
Аноним 2016/02/15 01:22:34  №654411 413
Аноним 2016/02/15 07:04:51  №654752 414
>>649329 (OP)
Всю ночь сидел над задачами на циклы (про айфон и миллион за годовые) так и не решил, нихуя не понятно мне.
Аноним 2016/02/15 09:06:03  №654781 415
>>654383
>Странно что ты нашем треде не первый день, а делаешь такие ошибки. Не делай так больше.
Да я тогда ещё не знал про наследование, делал только по имеющимся знаниям. Буду переделывать.

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

Аноним 2016/02/15 09:42:41  №654795 416
>>654752
На Идеоне покажи, что получилось, задай конкретный вопрос.
Скакать с задачи на задачу не надо.
Аноним 2016/02/15 12:18:46  №654856 417
>>653722
Реквестирую проверку вчерашнего говнокода.
Аноним 2016/02/15 12:47:08  №654869 418
14555296289310.jpg (66, 720x389)
389x720
Итак, алгоритм задачи "Навигатор", она же "Поиск пути", она же "Расчёт маршрута".
Вдруг осознал, что именно подобные задачи придётся решать и в том проекте, ради которого я всё это затеял изучать.
Немного волнуюсь от того, что многое кажется очевидным в ней, но некоторое вообще непонятно, мне остаётся только гадать и просить совета.
1. Имеем заготовленный ОПом код с массивами, в которых идентификаторы с названиями станций в ключах и описания в значениях, указание времени для достижения той или иной станции пешком, на автобусе или метро и тут же вызов функции для нахождения времени достижения близлежащих станций, а также способов достижения.
2. Создаём ту самую функцию, которая будет устанавливать время для достижения следующей станции, а также способ достижения.
У нас имеется массив с координатами «время» и «способ» пути из одной станции в другую.
Запускаем цикл foreach, который раскладывает массив на ключи и значения. Запускаем другой цикл foreach, который раскладывает на ключи и значения вложенный массив с названиями близлежащих станций в ключах, «временем» и «способом» пути в значениях. Если у нас ключ во вложенном массиве совпадает с названием пункта прибытия – выводим «время» и «способ». «Время» мы плюсуем к переменной $time, она у нас будет находиться в значении ключа ‘time’ массива $result. Далее мы сможем вывести $result[‘time’], $result[‘path’] или $result[‘by’], когда это будет нужно. Об этом говорит ОП, также я встречал такие интересные выкрутасы у братишки при решении какой-то задачи, взял на заметку.
Если до нужного нам пункта назначения всего один шаг – всё срабатывает. Если шагов несколько – дальше функция будет вызывать саму себя, переходя от пункта к пункту, складывая «время», «локацию» и «способ» в массив.
В итоге мы получаем несложную функцию, которая просто выводит время и способ пути из одного пункта в другой близлежащий.
3. Однако нам надо иметь чёткий проложенный путь, чтобы функция понимала, какие соответствия искать, не вела нас в сторону от точки назначения. При этом надо выбирать кратчайший путь (например, сравнивая «время»). Также желательно избежать советов, допустим, ехать 3 минуты на автобусе, затем ехать 5 минут на метро, а потом идти 5 минут пешком, если на автобусе ехать 15 минут из пункта в пункт. Если такое возможно.
Нужна функция для прокладывания пути. Каким-то образом надо точно узнавать, какие точки находятся между пунктом отправления и пунктом прибытия.
Например, пустой массив, который должен наполняться нужными для достижения конечной цели пунктами. Далее каждый пункт мы пропустим через предыдущую функцию, плюсующую «время» и выводящую «способ». Но необходимо добиться того, чтобы пункты выбирались строго подходящие. И я вхожу в ступор на этом месте…
Как избежать блуждания по карте? Если у нас между пунктом убытия и пунктом прибытия ещё хотя бы один пункт – я уже пугаюсь того, сколько работы нужно будет, чтобы проверить, где будет именно этот пункт.
Вот какая есть мысль: в массиве $paths у нас имеются вложенные массивы с названиями пунктов в ключах и с функцией, находящей «время» и «способ» достижения этого пункта из пункта, указанного в общем массиве. Например:
$paths = array(
'pet' => array(
'chk' => canGet(10, BUS),
'gor' => canGet(3, SUBWAY)
) ... );
Из 'pet' мы можем добраться до 'chk' за 10 минут на автобусе, до 'gor' за 3 минуты на метро.
У нас известен пункт прибытия, и мы можем его найти в этом массиве $paths.
Нужно как-то сравнивать ключи во вложенных массивах со всеми ключами основных массивов и с ключами в их вложенных массивах, находя точки соприкосновения, которые и будут пунктами нашего пути.
Допустим, у нас начальная точка пути – 'kre', а конечная точка – 'let' . Это ключ в массиве
'let' => array(
'dvo' => canGet(6, FOOT),
'gos' => canGet(7, FOOT)
);
Мы получаем две соседние точки: 'dvo' и 'gos'. Далее раскладываем массивы 'dvo' и 'gos' на их соседние пункты. И так до того, пока в каком-нибудь массиве не окажется у нас 'kre'.
Далее считаем, в каком пути у нас меньше всего получилась переменная «время» – $time.
Сохранённые в массив пункты самого меньшего по времени пути и будут нашей картой маршрута.
Не будет ли это всё бесконечным и нереализуемым? Звучит всё достаточно сложно: несколько циклов с поиском соответствия одних ключей другим, подсчёт наименьшего «времени» в проложенных путях (как-то эти поиски надо отличать один от другого, создавая разные массивы с данными; в принципе, просто создавать вложенные массивы при каждом цикле с поисками соответствий ключей ключам, а затем найти min() в этих получившихся вложенных массивах, вполне всё возможно, наверное).
Нужен ваш совет.
4. Допустим, путь у нас всё-таки проложен, функция, подыскивающая «время» и «способ» для пошагового достижения цели, запускается, переменные $time и $by набиваются нужными значениями, выводятся в массиве $result через echo в каждом цикле. Цикл ограничен количеством пунктов в проложенном маршруте.
Вроде бы это уже вполне понятно.
Требуется ваша помощь, ОП и братишки.
В принципе, и так для меня уже всё отлично, я вообще не ожидал, что дойду до этой задачи так быстро, думал вообще бонусные задачи перескочить, а сегодня уже начать повторять HTML и CSS.
Но сейчас хочется и в этой задаче разобраться, тут ещё и константы, с которыми я пока дел не имел.
Аноним 2016/02/15 12:49:53  №654870 419
Не передается нуль(0) в базу данных в столбец name tinyint(1). Я хочу использовать его как булевое значение. Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\... Не говорите что количество токенов не совпадает в запросе, ибо все остальное кроме нуля передается.
Аноним 2016/02/15 13:00:59  №654881 420
>>654856
Сумбур у тебя там какой-то.
1. Сделай var_dump($math) - у тебя там ничего не передаётся.
2. Попробуй, чтобы заработало хотя бы на одной ошибке. Например, у тебя там нет сочетаний "жы" или "шы" - в самом тексте. Поставь такую ошибку и попробуй только для одной первой регулярки сделать всё рабочим.
3. (жы|шы) - попробуй сократить, ведь буква "ы" у нас повторяется.
4. Ставь дополнительный флаг i - чтобы всё работало, когда буквы прописные.
5. Незачем называть ключи переменными: $reg1=>"Жи Ши пиши через И". Это только запутывает. Можно просто в массив подставить сами регулярки на место ключей.
Аноним 2016/02/15 13:45:01  №654916 421
https://jsfiddle.net/fbv25bmh/ переписал сапёра. Я только не понял, ОП, какой цикл ты хотел, чтобы я сделал в getNeighbours.
Аноним 2016/02/15 14:11:56  №654927 422
>>654881
Не передаётся потому-что в тексте не было ошибок, на намеренно допущенные срабатывает вроде как надо, остальное поправлю.
Аноним 2016/02/15 14:22:03  №654935 423
Есть какая-нибудь функция универсальная для сравнения двух элементов? Не МИН МАКС, и не тыща операторов больше, меньше, а даю две переменные и она даёт что-то типа "1 больше второго" и наоборот?
Аноним 2016/02/15 14:24:43  №654938 424
>>654935
>, < всего два оператора. Не благодари.
Аноним 2016/02/15 14:29:01  №654941 425
>>654935
Ну ты можешь сам написать функцию своей мечты.
Аноним 2016/02/15 14:32:15  №654944 426
Ребята, а как узнать что в Pimple делает метод share()? Поиск по гитхабу не дал результатов.

https://github.com/silexphp/Pimple/tree/1.1

https://habrahabr.ru/post/199296/
>По умолчанию при каждом вызове Pimple возвращает новый объект сервиса. Если же требуется один экземпляр на всё приложение, всё, что вам необходимо сделать – обернуть объявление в метод share():
>$container['session'] = $container->share(function ($c) {
> return new Session($c['session_storage']);
>});
Аноним 2016/02/15 14:32:37  №654945 427
function x(){
if($x == 1){
return "hui";
break;
} else {
return "ne hui";
}
}
нужно ли в данном случае добавлять break? или это избыточно?
Аноним 2016/02/15 14:33:29  №654946 428
>>654945
break тут вообще не причем. Почитай что он делает.
Аноним 2016/02/15 14:34:38  №654947 429
>>654946
Но почему тогда в switch надо каждый раз добавлять break?
Аноним 2016/02/15 14:35:36  №654949 430
>>654947
Потому-что если не добавить он продолжит сравнивать значение переменной после совпадения.
Аноним 2016/02/15 14:52:21  №654957 431
>>654927
Там полно ошибок было с пробелами перед знаками препинания.
Аноним 2016/02/15 15:06:34  №654961 432
>>654881
http://ideone.com/6PnlPq
Вот , поправил по рекомендациям, парочка ошибок в тексте допущена, все отлавливает.
Аноним 2016/02/15 15:06:59  №654963 433
Аноним 2016/02/15 15:29:46  №654985 434
>>654944

Написано же, share позволяет указать что объект надо создать (вызывая функцию-фабрику) только первый раз, а во второй раз надо просто вернуть ранее созданный объект.

В большинстве случаев тебе именно share и нужен.

>>654945

break можно использовать только внутри цикла или switch. Тут их нет, значит нельзя.

Также, нет смысла писать код после return так как он никогда не выполнится.

>>654947

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

Аноним 2016/02/15 15:50:12  №655000 435
>>654961
1. Слишком много захватывает текста. Если убрать символы перевода строки (сделать текст без абзацев), то будет подставлять его весь там, где нужно немного текста для обнаружения ошибки. Это надо обязательно исправить.
2. Код оформлен неряшливо. Лучше вот так: http://ideone.com/UwECQZ
3.
>echo "{$j}\n";
>echo "Вот в этой строке: \n" ;
>echo $math[0][1];
Не имеет смысла разносить echo по разным строкам, лучше сделать одной строкой.
4. Массивы, наоборот, лучше разносить по строкам для наглядности.
5. foreach($allreg as $i=>$j) - лучше давать осмысленные названия переменным, чтобы сразу видеть, что они обозначают и как изменяются в цикле, что это даёт.
Аноним 2016/02/15 16:14:00  №655015 436
Можно ли использовать что-то типа -99999, если нужно циклом перебирая найти наибольшее значение и необходимо сравнивать их. Иными словами, первое сравниваем с -99999 и пошло-поехало. Или есть лучше вариант?
Аноним 2016/02/15 16:14:45  №655016 437
>>655015

1) брать первое значение в кач-ве минимального/максимального
2) брать бесконечность, INF или -INF.
Аноним 2016/02/15 16:15:23  №655017 438
>>655016
>брать бесконечность, INF или -INF.
блин, логично, спасибо. Даже не подумал, что с константами можно играть
Аноним 2016/02/15 16:32:20  №655019 439
Аноним 2016/02/15 16:40:37  №655024 440
14555436380390.jpg (173, 1080x866)
866x1080
Сап. Спрошу еще раз.
Хочу запилить АИБ на Кусабе.
Все делал по инструкции.
Вылезает такая ошибка. Я хз что делать.
Поскажите плес.
Аноним 2016/02/15 16:42:54  №655025 441
>>655024

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

Из советов - могу посоветовать очистить базу данных, удалить файлы и заново с нуля все внимательно переустановить.
Аноним 2016/02/15 16:43:27  №655026 442
>>655024
Этих данных не достаточно, чтобы тебе помочь.
Аноним 2016/02/15 17:09:49  №655061 443
Тут есть кто-то кто ковырял Magento и писал к ней дополнения?
Аноним 2016/02/15 18:21:56  №655166 444
>>655025
Обращаюсь сюда, потому что кусаба работает на PHP.
Уже переустанавливал.
Не можете подсказать, как базу данных составить? Я просто создал таблицу. Где ее составить, что бы все пахало, не написано.
Аноним 2016/02/15 20:32:40  №655349 445
Аноним 2016/02/15 21:50:53  №655431 446
Аноны, вот собираюсь начать с ребятами дубасить, ничего в нем особенного - регистрация, пара плюшек с редактированием фото, ввод и вывод бабосов через вебмани. Вопрос - есть ли разница в разработке ПО под облачные сервисы и просто сервер? Или принципиальных отличий нет?
Аноним 2016/02/15 21:54:20  №655436 447
>>655431
Как-то хуево вышло. Хочу делать ПО на пхп, смогу ли я запустить без проблем в облаке эту хрень, а потом без доработок на своем сервере?
Аноним 2016/02/16 00:40:59  №655548 448
Забыл, и нигде не могу найти, как называется функция пхп, которая понижмает уровень массива, то есть например из многомерного делает одномерный массив?
Аноним 2016/02/16 00:47:07  №655550 449
>>655548
По моему ты придумал существование такой функции. Я даже не могу себе представить зачем она нужна.
http://php.net/manual/ru/ref.array.php prove me wrong
Аноним 2016/02/16 00:56:25  №655557 450
есть функция, ничего не возвращает. В конце делает преобразование над переменной у(например).

Мне нужно, чтоб она делала ДРУГОЕ, в, если переменная о, переданная в неё имеет значение, скажем, 0. Пойдёт ли такой вариант, чтоб не доходила она до конца?

function x($o){
...
...
if($o == 0){ y=floor(у+8); return; }

y=floor(у);
}

Аноним 2016/02/16 00:56:56  №655559 451
>>655557
блин, объяснил, конечно, как неандерталец
Аноним 2016/02/16 00:58:58  №655561 452
>>655557
Ничего не понял. Функция ничего не возвращает и не имеет никакого влияния на итоговый код, зачем тогда она вообще нужна?
Аноним 2016/02/16 01:00:53  №655562 453
>>655550
Например есть многомерный массив, с числовыми ключами, как превратить его в обыкновенный массив, со всеми значениями которые есть внутри него?
Аноним 2016/02/16 01:01:49  №655564 454
>>655561
да я как даун объяснил. Она ничего не возвращает, а делает преобразования над глобальной переменной у.

Мне нужно, чтоб при определённом условии она сделала другое преобразование над у и закрылась. Можно ли использовать для этого пустой return;?
Аноним 2016/02/16 01:03:37  №655567 455
>>655562
Все еще не ясно что ты хочешь получить в результате. Приведи пример изначального массива и результата твоей функции.
>>655564
return не нужен, если у тебя глобальная переменная.
Аноним 2016/02/16 01:05:37  №655570 456
>>655567
ты опять не понял. Мне нужно, чтоб она дальше не шла функция, и закончилась на ДОП действии.

function x($o){
...
...
if($o == 0){ y=ДОП ДЕЙСТВИЕ; return; }


у=ОСНОВНОЕ ДЕЙСТВИЕ
}
Аноним 2016/02/16 01:07:01  №655572 457
Аноним 2016/02/16 01:08:08  №655573 458
>>655570
Ну тогда можешь использовать пустой return, он прекратит выполнение функции. Хотя если ты используешь глобальные переменные - ты уже делаешь что-то не так.
Аноним 2016/02/16 01:08:43  №655574 459
>>655573
>Хотя если ты используешь глобальные переменные
Почему?
Аноним 2016/02/16 01:08:50  №655575 460
>>655572
Меня смущает, что (-$i) печатает задом наперёд, хотя так делать не должен вроде... Ошибка?
Аноним 2016/02/16 01:10:05  №655576 461
>>655574
Всегда можно обойтись без них. Глобальные переменные это дурной тон и с ними легко можно сломать код.
Аноним 2016/02/16 01:11:44  №655578 462
14555743045720.gif (2705, 176x144)
144x176
>>655572
Сука, опять какая-то ебала получилась.
Аноним 2016/02/16 01:14:36  №655579 463
>>655578
Анончик, сори, только что вдуплил в твои советы:

Нет, всё в порядке, просто разберись с функцией mb_substr:
1. Как получить первый символ в тексте с её помощью?
2. Как получить последний символ в тексте с её помощью?
Основная проблема с этим.
Далее символы у тебя получаются строковые, они не могут быть больше или меньше, они могут быть только равны друг другу или не равны. Поэтому ($symb1 <> $symb2) не будет работать в этой ситуации.
Аноним 2016/02/16 01:17:33  №655581 464
>>655564

Можно.

>>655574

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

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

Такое часто бывает когда люди не имеют достаточной квалификации для работы в большом проекте. Написать простую функцию они могут, а организовать сложный код - нет. Им надо заниматься самообразованием, а не спешить писать код.
Аноним 2016/02/16 01:23:04  №655583 465
>>655579
О, можно же отдельно отсчитывать от халфтекст и от текст!
Аноним 2016/02/16 01:26:11  №655585 466
Аноним 2016/02/16 01:27:57  №655586 467
>>655585
Но всё-таки я не понял, как надо было правильно решить эту задачу. Призываю гуру ПХП на помощь.
Аноним 2016/02/16 01:30:50  №655587 468
>>655586
Нет, нихуя я не решил. Попробовал заменить буквы в фразе на случайные - всё равно выдаёт, что это палиндром
Аноним 2016/02/16 01:47:49  №655591 469
Аноним 2016/02/16 02:03:13  №655594 470
>>655591
не могу понять, почему $letter1 всегда принимает значение $letter2
Аноним 2016/02/16 02:12:25  №655596 471
>>655594
По идее вот так должно работать, но почему-то $letter1 всегда равняется $letter2

http://ideone.com/ZhowMf
Аноним 2016/02/16 02:17:40  №655598 472
>>655596
Я имею в виду, если задать текст
>$text = "А роза упала на лапу АзорG";

... то результат будет G = G
Аноним 2016/02/16 02:17:55  №655599 473
14555782760660.jpg (293, 1246x1024)
1024x1246
14555782760721.jpg (100, 762x901)
901x762
14555782760742.jpg (1793, 2530x2796)
2796x2530
14555782761103.jpg (460, 1272x1133)
1133x1272
Примерно два года назад учёные доказали, что мозг шизофреника обмануть не удаётся . Это интересный случай, когда искажение реальности и самообман — признак здорового человека.


Причина, по которой мозг шизофреника отказывается принимать оптическую иллюзию, пока до конца не ясна. Учёные предполагают, что она связана с неправильным (или правильным, но уж точно «нездоровым») способом обработки визуальной информации и распознавания образов.


Интересно, что лишь небольшая часть людей способна видеть реальность без искажений, и это является стопроцентным признаком психического заболевания. Более того, как тогда классифицировать «галлюцинации», которые являются одним из клинических симптомов шизофрении?
Аноним 2016/02/16 02:19:25  №655601 474
>>655599
Уйди обратно в б.
Аноним 2016/02/16 02:24:08  №655604 475
>>655596

Ты = и == перепутал. = не сравнивает а записывает значение одной переменную в другую, потому они всегда равны.
Аноним 2016/02/16 02:34:42  №655608 476
14555792827300.webm (733, 908x780)
780x908
Аноним 2016/02/16 02:40:10  №655609 477
Аноним 2016/02/16 02:42:06  №655610 478
>>655604
http://ideone.com/4Cvfvm

Теперь у меня кукушка окончательно поехала. переменная $from (извините, лучше название не придумал) не изменяется, если указать $from = $from +/- 1
Аноним 2016/02/16 02:47:57  №655611 479
>>655610
бля, я же их назначаю каждый раз по-новой
Аноним 2016/02/16 02:48:07  №655612 480
>>650300
>>650440

.{3}? - что ты хотел этим написать? Что может быть 3 любых символа, а может ни одного? тогда надо писать

(.{3})?

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

В данном случае вопрос отключил жадность у предыдущего квантифиактора, то есть стремление захватить как можно больше символов, и это не то что ты хотел.
Аноним 2016/02/16 02:49:28  №655613 481
>>655599
Мы берем целевую последовательность (данную CASP) и делаем наилучший возможный прогноз, который мы можем сделать. Затем мы находим homologs-последовательность в базе данных и делаем наилучший возможный прогноз, который мы можем сделать также и для них .

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

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

Это и даст наш конечный прогноз.
Аноним 2016/02/16 02:50:02  №655614 482
>>655613
Извините что потревожили, простите нас.
Мы хотим донести полезную информацию
Аноним 2016/02/16 02:55:05  №655615 483
>>655611
Аноны, я решил наконец? http://ideone.com/4Cvfvm

Вроде да, но команда break не прерывает выполнение программы и в случае неравенства выходит результат "не палиндромпалиндром". В задаче про айфон команда break по-моему весь код останавливала, а не только цикл. Или я не прав?
Аноним 2016/02/16 02:59:12  №655616 484
>>655615
Исправил. Вместо break вписал exit
Аноним 2016/02/16 03:00:14  №655617 485
>>655615
>>655616
Скиньте ссылку, как вы решили эту задачу. Ведь
Какое решение предполагал ОП? Как вы решили эту задачу?
Аноним 2016/02/16 03:02:48  №655618 486
>>655599
Примечательно, что российское метро к 2068 году не изменилось. Скорее всего, реально не изменится.
Аноним 2016/02/16 03:27:12  №655625 487
>>654985
>Написано же, share позволяет указать что объект надо создать (вызывая функцию-фабрику) только первый раз, а во второй раз надо просто вернуть ранее созданный объект.
>
>В большинстве случаев тебе именно share и нужен.
Я просто не смог найти код метода чтобы посмотреть как он работает. Мне показалось это странно, вызывать метод которого нет в классе. Как это работает? Или лучше спросить, где он написан чтобы посмотреть самому?
Аноним 2016/02/16 05:46:19  №655652 488
Аноним 2016/02/16 09:46:41  №655712 489
>>655615
Да, теперь всё решено правильно.
Интересно, что ты придумал обозначить начальные символы в mb_substr не через $i и -$i, а через $from1 = 0; и $from2 = -1;
С $i можно было сделать вот так: http://ideone.com/y5545w
Это избавляет от дополнительных переменных, мы делаем всё с помощью $i, которая в любом случае у нас есть.
Обрати внимание, что изначально я поставил в цикле $i = 1. Так проще добиться -$i для отсчёта с конца строки.
Но ты молодец, у тебя хорошее решение.

Мимо братишка с теми подсказками: >>655579
Аноним 2016/02/16 09:51:46  №655719 490
>>655625
Разобрался. Оказалось что этот метод теперь называется factory();
Аноним 2016/02/16 10:12:03  №655728 491
>>655615
Аа, да: так выходит с break потому, что у тебя echo стоит за пределами цикла и в любом случае срабатывает.
Вот в чём опасность вынесения echo за пределы цикла, в больших скриптах надо быть осторожным с этим.
Аноним 2016/02/16 10:30:32  №655742 492
>>655712
Спасибо.
стати, тоже пытался решить через $i, но программа не считала. Сейчас я думаю, что где-то в другом месте допустил ошибку и программа не работала из-за какого-то другого косяка.
Например, здесь выборка букв зависит от $i и -$i, но есть другая ошибка.
Так я запутался с $i и пришёл к "механическому" $from.
Аноним 2016/02/16 10:38:51  №655756 493
>>655742
Скорее всего, изначально ставил $i = 0 в цикл, а потом не обратил внимания, что там получается -0.
Обычно тут возникает затруднение.
Также теперь ты можешь попробовать сделать точно по тем моим советам - с условием, когда $i == $halfLength. Так можно избежать размещения echo за пределами цикла.
Но это если есть желание дополнительно разобраться.
Задачу ты и так решил уже правильно.
Аноним 2016/02/16 11:47:03  №655822 494
Аноним 2016/02/16 11:50:39  №655825 495
>>651764
Вовка, ты че такой агрессивный?
Аноним 2016/02/16 11:56:52  №655832 496
>>655822
>$letter1 = mb_substr($text, $i, 1);
При $i = 1 в цикле что будет? А что должно быть?
Аноним 2016/02/16 12:33:04  №655860 497
>>655614

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

>>655618

А что не так с метро-то?

>>651754

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

Первый запрос:

> JOIN claim c ON m.id = c.manager_id
Думаю нужен другой вид джойна, иначе менеджеры без претензий не выведутся. Пройдись по другим запросам и перепроверь типы джойнов.

> `sum` float NOT NULL,
Для денег лучше точные типы вроде INT или DECIMAL/NUMERIC.

> `first_name` varchar(32) CHARACTER SET latin1
Почему latin1?

> SELECT m1.first_name,
> m1.last_name,
> m1.chief_id,
> COUNT(c1.id) AS 'claim_count',
> COUNT(DISTINCT c2.id) AS 'chief_claim_count'

COUNT(c1.id) скорее всего выберет больше чем надо так как посчитает дублирующиеся ид. Попробуй убрать HAVING и проверь правильные ли цифры в этой колонке.

> HAVING COUNT(c1.id) > COUNT(DISTINCT c2.id);
Лучше алиасы использовать для читабельности. Ну и по этому запросу, по моему он работает в MySQL но нарушает какую-то из особенностей языка SQL. Погуглим-ка:

> https://dev.mysql.com/doc/refman/5.0/en/group-by-handling.html
> In standard SQL, a query that includes a GROUP BY clause cannot refer to nonaggregated columns in the select list that are not named in the GROUP BY clause.

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


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

> ORDER BY ROUND(AVG(c.sum), 3)
ROUND тут не нужен

> DATE_FORMAT(c.created_at, '%m %Y') = '07 2013'
Я бы записал created_at BETWEEEN ... AND ... - так и читабельнее и индексы позволяет задействовать.


Аноним 2016/02/16 12:55:03  №655882 498
Не нахожу скл треда, спрошу здесь.
Надо подтянуть в таблицу (или создать новую таблицу на базе двух) фамилии из другой таблицы по ключу. Как это сделать? Merge, видимо, просто прилепляет новую колонку с её содержимым в том порядке, в каком оно было в исходной таблице.
Аноним 2016/02/16 13:01:32  №655886 499
>>655882
Забыл сказать, что Firebird. Констуркция UPDATE - SET - FROM не срабатывает.
Аноним 2016/02/16 16:05:42  №656043 500
Надо подключить определённое количество js библиотек и скриптов в вордпресс, надо использовать wp_enqueue_script(), но в теме стоит фреймворк и файл functions.php представляет собой следующее:

$us_theme_supports = array(
'plugins' => array(
'переменная' => 'значение',
'переменная' => 'значение',
...
),
);

require dirname( __FILE__ ) . '/framework/framework.php';

Функции в этом файле не работают, как подключить .js и .css файлы в этом случае?
Аноним 2016/02/16 16:07:42  №656045 501
Ребята, дайте ответьте пожалуйста

class Foo {
//code
}

$foo = new Foo();

//$foo['var'] = ?

print_r($foo['var']);

Что нужно написать чтобы в $foo['var'] можно было положить что-то? И что там вообще может быть?

Аноним 2016/02/16 16:20:03  №656052 502
>>656045

Тестовое задание?
Аноним 2016/02/16 16:31:54  №656063 503
Аноним 2016/02/16 16:40:08  №656074 504
>>656052
Нет, просто пытаюсь разобраться в синтаксисе, вот что я уже нашел

1. Использовать SplObjectStorage()
class Foo {
}

$s = new SplObjectStorage();

$foo = new Foo();

$s->attach($foo);

$s[$foo] = "Something";


но это не то что я хотел понять, в ключе $s[$foo] указывается сам объект, а не номер или название ключаю


2. Использовать ArrayAccess

https://secure.php.net/manual/ru/class.arrayaccess.php
>Пример #1 Основы использования

но тут мне не понятно что присходит при вызове $obj['two']... Вызывается метод offsetGet('Two')?

>>656063
Спасибо, я не ожидал что вы меня опередите. Продолжим разбираться вместе?
Аноним 2016/02/16 16:46:19  №656081 505
>>656074
Зачем мне разбираться в том что я и так знаю? Это твое задание, няш, тебе и делать.
Аноним 2016/02/16 16:48:59  №656086 506
>>656081
У меня нет задания, просто разбираюсь. Решил просто как-то поддержать разговор чтобы не оставлять твои старания без внимания. Добра в общем!
Аноним 2016/02/16 17:11:57  №656149 507
>>656074

Интерфейс ArrayAccess позводяет работать с объектом используя синтаксис доступа к массиву. Это то, что нужно тебе.

> но тут мне не понятно что присходит при вызове $obj['two']... Вызывается метод offsetGet('Two')?

Да, читай мануал по методаам, например https://secure.php.net/manual/ru/arrayaccess.offsetget.php

Надо понимать что полноценным массивом твой объект не станет - например в array_keys его передать нельзя.
Аноним 2016/02/16 17:12:55  №656154 508
>>656074

SplObjectStorage реализован поверх ArrayAccess и это не то (это хранилище где в качестве ключей можно использовать объекты).
Аноним 2016/02/16 17:36:35  №656234 509
>>656149
>>656154
Блин ОПчик, я уже разобрался самостоятельно...

Я уже заканчиваю разбираться с Pimple, и если я правильно понимаю, что по коду нет замечаний >>641843 >>649314, то сегодня-завтра и всю неделю я буду доделывать задачу со Студентами. Там осталось самое элементарное, мы уже такое делали. Главное что я сейчас заканчиваю с пониманием ООП!

Кстати, хотел бы услышать малюсенький комментарии по этому поводу

>>649314
>> Мне кажется что вот так писать pdo будет не правильно:
>Почему?
Я недавно видел как писали в одном файле что-то вроде

Init.php
class Init {
...
}

$init = new Init();

...

Мне это не понравилось, что под классом написано что-то еще.
С моим кодом тоже самое - как-то странно выглядит.


Спасибо ♥♥♥
Аноним 2016/02/16 18:07:15  №656287 510
проясните за гит/гитхаб. в гитхабе я создаю удаленный репозиторий на их сайте, тут все ок.
а в гите я типа создаю локальный на своей машине? и где его надо создавать в любой папке или в корне проекта который я потом буду загружать в удаленный репо?
Аноним 2016/02/16 18:17:53  №656304 511
пацаны, какого хуя она мне дурацкие ошибки выдаёт?
ideone.com/Qcm09n
Аноним 2016/02/16 18:19:21  №656308 512
>>656304
>ideone.com/Qcm09n
перечитай ещё раз, как делать конструкцию if else
Аноним 2016/02/16 18:21:15  №656314 513
>>656308
если скобочки к елсе добавляю, то она к скобочкам приебывается. ладно, буду пытаться.
Аноним 2016/02/16 18:22:52  №656317 514
>>656314
или говорит: ставь T-else or T-echo. зачем?
Аноним 2016/02/16 18:26:18  №656322 515
>>656317
простите за панику. оказывается у else не может быть условия, только elseif.
Аноним 2016/02/16 18:48:21  №656384 516
Оп, ты мои модули проверил?
Аноним 2016/02/16 19:06:39  №656418 517
Аноним 2016/02/16 19:49:32  №656496 518
>>656287
В корневой проекта.

Вообще в любой папке, и эта папка становится репозиторием.
Если тебе нужен весь проект в гите то в корневой, если только, какая то конкретная часть, то в этой части.
Аноним 2016/02/16 19:52:22  №656503 519
>>652219
http://integer64.github.io/site-layout/exercise/mainTask/index.html

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

Пофиксил.
Походу глаз уже замылился. =)

>В ИЕ10 синяя рамка вокруг логотип
>В адресе, я думаю, ты переборщил с неразрывными пробелами.
Пофиксил.

> Иконки в блоке Consectetur
добавил блокам <div class="service-block"> классы отображения иконок. И все прекрасно встало и отцентрировалось, без
> pos: rel, добавить ему псевдоэлемент и абсолютно отпозиционировать его по центру (left 50% + отриц. маргин)

>>656418
И это проверь пжлста, тоже мое.
Аноним 2016/02/16 20:09:08  №656560 520
>>656496
А можно репозиторий создавать не в той папке которая в htdocs на сервере, а где-то отдельно на диске, завести допустим d:/git_repos/ куда копировать проект и уже оттуда все коммиты посылать? Мне эти лишние файлы и папки скрытые чет глаза мозолят.
Аноним 2016/02/16 20:17:48  №656580 521
Аноним 2016/02/16 20:25:41  №656595 522
>>656560

Копировать не устанешь? Папка всего одна - .git в корне. Разумеется, на боевом сервере она не должна быть в публичной папке веб сервера.
Аноним 2016/02/16 20:32:36  №656608 523
http://ideone.com/hdVBmQ
Проверьте задачку на палиндром , мне кажется я чего-то лишнего наделал и можно было уложиться в меньшее кол-во символов
Аноним 2016/02/16 20:51:08  №656637 524
14556450684710.png (23, 1200x630)
630x1200
14556450684711.jpg (118, 1024x768)
768x1024
14556450684742.jpg (73, 270x426)
426x270
14556450684753.jpg (131, 550x567)
567x550
Разобрался с Pimple. Хотелось кое что прокомментировать.

https://github.com/silexphp/Pimple/blob/master/src/Pimple/Container.php#L109
Мне кажется это очень странным алгоритмом, получается Контейнер вызывает Зависимый Класс, который обращается к Вспомогательному, через анонимную функцию, которая передает в аргумент этот же Контейнер, который вызывает Вспомогательный Класс через анонимную функцию.
Даже сейчас мне кажется что я всё не совсем понял. Почему мне кажется это таким запутанным и не очевидным? Я же знаю что здесь всё логично! Что я упускаю?

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

Я не жду ответов на этот пост, но если у вас появиться какие-то мысли, мне будет интересно.
Аноним 2016/02/16 21:43:37  №656745 525
>>655756
>Также теперь ты можешь попробовать сделать точно по тем моим советам - с условием, когда $i == $halfLength. Так можно избежать размещения echo за пределами цикла. Но это если есть желание дополнительно разобраться.

Вынес таким образом: http://ideone.com/VoO0A6
Аноним 2016/02/16 21:56:44  №656768 526
Задачка про кредит.
Типа, в банк положили 10к, и раз в год начисляется 10%.
Вопрос - как выглядит пример? Т.е. ума не приложу как в действии записать начисление этих 10%, и при этом что бы начислялось каждый раз на предыдущую сумму, а не на начальные 10к
Аноним 2016/02/16 21:59:19  №656774 527
>>656768
Функция. Функция это называется.
Аноним 2016/02/16 22:00:06  №656777 528
>>656768
10 000 * 0.10 = 1000
10% от 10 000 будет 1000.
Аноним 2016/02/16 22:01:11  №656781 529
>>656777
От я тупорылый дегенерат. Вот что значит сделать перерыв в неделю, больше не буду так делать. Спасибо.
Аноним 2016/02/16 22:07:18  №656789 530
>>656608
Какое неожиданное решение, залюбовался прямо.
Нет, там меньше символов вряд ли возможно.

>>656745
Так гораздо лучше, хотя и с первым решением всё было в порядке.
Ну а я имел в виду что-то вроде этого: http://ideone.com/9YNYse
Аноним 2016/02/16 22:27:16  №656824 531
Что нужно уметь, чтобы устроиться на самую днищенскую пхп должность для набивания опыта? В моем городе есть вакансии где просят иметь "Начальное знание PHP, SQL, MySQL". Но я хз что они имеет в виду под эти Начальным Знанием.
Аноним 2016/02/16 23:25:05  №656952 532
>>656789
>Ну а я имел в виду что-то вроде этого: http://ideone.com/9YNYse
А, там иерархия срабатывает. Супер.
Аноним 2016/02/16 23:46:26  №656997 533
Аноним 2016/02/17 00:06:10  №657033 534
> читаешь тему про функции
> увидел $exchangeRate = 30
> расплакался
Аноним 2016/02/17 00:23:00  №657052 535
>>656637

Ты про метод offsetGet? Тут надо помнить, что в контейнере может храниться несколько видов значений:

- обычные значения вроде строк или чисел, которые просто надо вернуть как есть ($container['username'] = 'Ivan')
- значения, которые создаются функцией-фабрикой, при каждой попытке получить значение надо каждый раз вызывать функцию ($container->factory...)
- значения, которые создаются функцией-фабрикой, но которые надо создавать через функцию только в первый раз, а во второй раз возвращать ранее созданное и сохрненное значение ($container['x'] = function () {... }).

Зачем нужны функции? Они позволяют реализовать "ленивое" создание объектов, когда объект создается только если он кому-то нужен. Также, они облегчают получение зависимостей, когда для создания объекта A нам надо получить сначала объекты B и C. Без фабрик нам пришлось бы думать о порядке, в котором надо создавать объекты.

Это упомянуто в документации:

> http://pimple.sensiolabs.org/
> As objects are only created when you get them, the order of the definitions does not matter.

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

Логика там очень простая:

$this->values[$id] = $value;

Особняком стоит случай когда мы используем $con['x'] = $con->factory(function () {.. }) . Если мы посмотрим код метода factory, то увидим что этот метод делает единственную вещь: сохраняет функцию в коллекции $this->factories. Это используется чтобы определить: надо вызывать функцию только при первом обращении или каждый раз.

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

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

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

Теперь к твоему комментарию.

> получается Контейнер вызывает Зависимый Класс, который обращается к Вспомогательному, через анонимную функцию, которая передает в аргумент этот же Контейнер
Не очень понимаю, что ты считаешь зависимым и вспомогательным классом тут? SplObjectStorage? Это коллекция, почти что массив в ООП-стиле. Или вызов $con->factory()?

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

$con['a'] = function ($c) {
return new A($c['b']);
};

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



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

$a = new Pimple;
$b = new Pimple;

// В $a функция будет сохранена в коллекию factories, но $b об этом ничего не знает!
$someFactory = $a->factory(function () {
echo "called\n";
return 1;
});

// Несмотря на то что мы использовали factory(), наша функция будет вызвана только в первый раз
$b['something'] = $someFactory;

$b['something']; // -> called
$b['something']; // ничего не выведется

То есть способ, которым реализована тут factory, позволяет неправильно ее исплоьзовать. Это нехорошо, правильнее было бы сделать так:

$container->setFactory('x', function ...);

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

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

Если что-то непонятно - задавай вопросы.
Аноним 2016/02/17 02:31:30  №657215 536
У меня есть примерно 10 видов похожего функционала, который необходимо вставить в вордпресс, для каждого из них, есть свой файл css, как подключать для каждой страницы или записи только конкретный файл css, а остальные не подключать, потому что некоторые селекторы могут пересекаться.
Аноним 2016/02/17 03:02:51  №657225 537
>>657215
Функционалом ВП хз, а так просто создаешь несколько хидер.пхп или как его назовешь, в каждом подключаешь необходимые скрипты. И потом просто инклудишь его. А вообще лучше все же 1-2 файла цсс создать и нормально разобраться с селекторами.
Аноним 2016/02/17 06:48:45  №657245 538
>>657215
У тебя именно страницы? Без плагина никак.

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

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

Если что, посмотри на код здесь: он хуевый немного, но там по сути работа как раз с post_meta
Аноним 2016/02/17 08:10:20  №657268 539
>>657052
>Не очень понимаю, что ты считаешь зависимым и вспомогательным классом тут?
Dependent(Helper $helper); Helper();

>$container->setFactory('x', function ...);
Я могу это написать в своём коде. Я могу это сделать какое-нибудь своё ответвление на гитхабе чтобы мне не приходилось делать это каждый раз, а просто скачать через консоль, как я это делал при установке?

>Вообще, кстати, хорошо, что ты современные ООП-библиотеки изучаешь, компоненты Симфони и Силекса могут многому полезному научить, там обычно с точки зрения ООП и проектирования все очень правильно сделано.
Я бы еще про какие-нибудь плагины почитал. Подозреваю что есть библиотеки где можно легко найти нужный, такие есть?
Аноним 2016/02/17 08:57:47  №657286 540
Аноним 2016/02/17 10:35:38  №657321 541
https://github.com/someApprentice/Students/tree/d179c49639ff3023225729c7b7d351e81f63c254
-Реализовал контейнер Pimple

>>636495
>https://github.com/someApprentice/Students/blob/master/app/config.php
>В конфиге лучше не использовать DSN, а просто указать в массиве отдельно хост, базу, имя, пароль. Ведь редактировать конфиг может быть будет незнакомый с программированием человек. Еще лучше - вообще сделать конфиг в формате ini напрмиер, он очень простой и читабельный.
Я правильно понимаю что писать нужно так
config.ini
db_user = root
db_password = ""

[db_dsn]
mysql:host=localhost
dbname=studentsdb


init.php
$config = parse_ini_file('config.ini');
$pdo = new PDO($config['db_dsn'], $config['db_user'], $config['db_password']);
Аноним 2016/02/17 11:17:36  №657353 542
А где обычно хранятся шаблоны? В __DIR__/templates/ или __DIR__/public/templates/?
Аноним 2016/02/17 11:23:38  №657355 543
>>657321

> Я правильно понимаю что писать нужно так
По моему ты все усложняешь. Ну зачем например писать mysql:host? Твой проект все равно кроме mysql ничего не поддерживает.

Логичнее сделать так:

[db]
host=
name=
user=
password=

> https://github.com/someApprentice/Students/blob/d179c49639ff3023225729c7b7d351e81f63c254/app/init.php#L12
> $container['PDO'] = $container->factory
В контейнере есть 2 варианта описания сервиса: когда он создает только при первом обращении, и далее возвращается существующий объект, или когда каждый раз создается новый объект. Какой вариант ты тут выбрал и почему?

> $query = $container['PDO']->prepare("SET sql_mode = 'STRICT_ALL_TABLES'");
> $query->execute();
Если этот код поместить в функцию, то вызываться он будет только если кому-то нужен PDO. А так он вызвается всегда (и всегда создается соединение с БД), независимо от того, нужен этот объект или нет.


Аноним 2016/02/17 11:58:03  №657368 544
>>657353

Не в публичной папке

>>657268

> Dependent(Helper $helper); Helper();
По моему у нас путаница в терминах - зависимостью называют объект который нужен другому объекту.

Ну то есть если

$b = new B;
$a = new A($b);

То класс A зависит от B.

> Я могу это написать в своём коде. Я могу это сделать какое-нибудь своё ответвление на гитхабе чтобы мне не приходилось делать это каждый раз, а просто скачать через консоль, как я это делал при установке?
Если тебя что-то не устраивает в библиотеке, то ты можешь форкнуть pimple на свой аккаунт в гитхабе, внести нужные правки и поменять в composer.json название библиотеки, чтобы он брал твою версию. Но свой форк надо поддерживать - когда pimple будут обновлять, тебе надо мержить эти обновления к себе (гит конечно облегчает работу, но иногда приходится что-то править вручную). Потому выгоднее не поддерживать свой форк (так делают только большие компании, у которых много разработчиков), а предложить разработчикам pimple принять твои исправления. Но тут не факт что они их примут. потому мне вся эта затея кажется не очень перспективной. В любом случае в такой ситуации лучше завести баг в их багтрекере и обсудить с ними, насколько это хорошо или плохо и надо ли тут что-то исправлять.

Также, есть другой подход: ты можешь сделать свой класс, который наследуется от Pimple и в него добавить метод. Удалить или отключить старый метод factory через наследование нельзя из-за принципа Лисков (класс-потомок должен поддерживать те же методы что и предок).

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

> Я бы еще про какие-нибудь плагины почитал. Подозреваю что есть библиотеки где можно легко найти нужный, такие есть?
Плагины к чему? Не очень понял вопрос. Если тебя интересует, где можно искать php библиотеки, то есть несколько сайтов:

- https://packagist.org/ - репозиторий из которого берет пакеты композер. Там можно искать по названию библиотеки или ключевым словам, например database

- http://phptrends.com/ - поиск по библиотекам с гитхаба, выстроенным по популярности

- http://pronskiy.com/php-digest/ - поиск по библиоеткам, упомянутым в рубрике php дайджест на хабре.

Или тебе что-то другое нужно?

Аноним 2016/02/17 12:03:45  №657372 545
Аноним 2016/02/17 12:13:39  №657381 546
>>657355
>> https://github.com/someApprentice/Students/blob/d179c49639ff3023225729c7b7d351e81f63c254/app/init.php#L12
>> $container['PDO'] = $container->factory
>В контейнере есть 2 варианта описания сервиса: когда он создает только при первом обращении, и далее возвращается существующий объект, или когда каждый раз создается новый объект. Какой вариант ты тут выбрал и почему
У меня каждый раз создается новый объект. Если честно, я не думал об этом. Это же вопрос выбора более производительного варианта? Как лучше узнать какой вариант лучше? Замерять количество памяти\время выполнения скрипта? Вижу в этом подвох - в этом случае переписывать несколько раз код не очень продуктивно, поэтому должен быть какой-то алгоритм выбора лучшего варианта. Можно подсказку какой?
Аноним 2016/02/17 12:13:52  №657382 547
>>656824
>>656997

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

Начальные знания SQL тебе даст ссылка с задачами по SQL из ОП поста.

Также, думаю, надо знать HTML/CSS, опять же в ОП посте есть ссылка.

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

>>656774

Не, ты путаешь по моему.

>>656384

Напомни номер поста или ссылку. Если они в прошлом треде - то да, проверил, если в этом то я пока дошел только до 150 поста.

>>655436
>>655431

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

>>655166

В кусабе нет какого-нибудь SQL дампа который надо загрузить ли может скрипта который создает базу? Посмтри что в инструкции по установке написано.

Также, может быть ему нужна именно пустая база без данных.

Аноним 2016/02/17 12:14:08  №657383 548
>>657286
Задача на составление имени содержит ошибку.
По умолчанию, в массиве элементы подсчитываются, начиная с нуля. Соответственно, в массиве последний элемент оказывается под номером 15.
Функция count($letters) подсчитывает элементы в массиве, начиная с единицы. Соответственно, в массиве оказывается 16 элементов.
Функция mt_rand(0,$len) выбирает числа от нуля до 16 - один элемент оказывается лишним в этой ситуации.
Аноним 2016/02/17 12:16:03  №657385 549
>>654916

Цикл, перебирающий клетки вокруг заданной. Твой код с 8 ифами громоздкий, однообразный и в нем легко допустить ошибку. Замени его на 2 вложенных цикла, по X (от pointX - 1 до pointX + 1) и по Y.

Аноним 2016/02/17 12:21:50  №657389 550
>>657368
>По моему у нас путаница в терминах - зависимостью называют объект который нужен другому объекту.
Да, похоже я хорошо запутал тебя, но не смотря на это я понял что ты хотел сказать. Helper - зависимость, вспомогательный класс; Dependent - получает зависимость, зависимый класс.

>Или тебе что-то другое нужно?
Нет, я просто знаю что у php большое количество плагинов, которые смогут упростить работу. Просо хотелось бы знать как найти нужные.
Аноним 2016/02/17 12:23:11  №657390 551
>>657383
Спасибо, исправил
Аноним 2016/02/17 12:28:08  №657391 552
>>654870

Код покажи

>>654869

Одна строчка кода иногда лучше тысячи слов. Надо прикладывать код в таких случаях.

> У нас имеется массив с координатами «время» и «способ» пути из одной станции в другую.
> Запускаем цикл foreach, который раскладывает массив на ключи и значения
Чтобы взять элемент по индексу, не нужен foreach

> Как избежать блуждания по карте? Если у нас между пунктом убытия и пунктом прибытия ещё хотя бы один пункт – я уже пугаюсь того, сколько работы нужно будет, чтобы проверить, где будет именно этот пункт.
Задач выглядит сложной, но ее можно упростиь если думать только на 1 шаг вперед. Вот смотри, что у нас есть (что передается на вход функции):

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

Нам надо:

- определить путь к цели.

Мы делаем 2 ветки:

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

- Если нет, то ситуация более сложная: у нас есть N соседних точек, и каждая из них может вести к цели. Надо выбрать лучшую.

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

Если точек не осталось, значит путь к цели из текущей точки построить нельзя.

Далее, мы можем сделать цикл и в цикле по очереди пробовать пройти к цели через каждую точку. То есть:

цикл по соседним точкам {
добавить точку к пути;
попробовать вызвать саму себя с этим путем и сохранить результат;
}

После этого цикла мы будем иметь список такого вида:

- через точку A можно дойти до цели за 10 минут
- через точку B до цели не дойти
- через точку C можно дойти за 5 минут

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

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

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

Аноним 2016/02/17 12:38:25  №657400 553
>>654869

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

Идти от конца к началу то же самое что от начала к концу. Это ничего не меняет.

> Не будет ли это всё бесконечным и нереализуемым?
Число точек конечно. Если ты не заходишь в уже посещенные точки то рано или поздно они закончатся.

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

5 x 5 x 5 ... x 5 = 5 ^ 10 (5 в 10-й степени)

Более того, в 9-й точке у нас останется только один вариант - перейти в 10-ю.
В 8-й точке останется только 2 варианта перейти в 10-ю и в 9-ю.

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

5 x 5 x 5 x 5 x 5 x 5 x 4 x 3 x 2 x 1

Это конечно очень много, потому можешь почитать про более эфффективные алгоримты поиска пути:

https://www.google.ru/search?q=%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0+%D0%BF%D1%83%D1%82%D0%B8&newwindow=1&gbv=1&sei=cT_EVuviI6jU6ASQ7bi4Cg


> Звучит всё достаточно сложно: несколько циклов с поиском соответствия одних ключей другим, подсчёт наименьшего «времени» в проложенных путях (как-то эти поиски надо отличать один от другого, создавая разные массивы с данными; в принципе, просто создавать вложенные массивы при каждом цикле с поисками соответствий ключей ключам, а затем найти min() в этих получившихся вложенных массивах, вполне всё возможно, наверное).
Тут
Аноним 2016/02/17 12:41:39  №657401 554
>>657389

> Нет, я просто знаю что у php большое количество плагинов, которые смогут упростить работу
У PHP есть расширения: http://php.net/manual/ru/funcref.php

Они добавляют функции и классы в PHP

Также есть сторонние библиотеки (вроде Pimple). Библиотеки можно искать на сайтах, которые я упомняул, также на хабре есть PHP дайджест, где пишут про всякие новинки.


Аноним 2016/02/17 12:45:51  №657403 555
>>657381

> Это же вопрос выбора более производительного варианта?
Нет, вопрос логики и архитектуры: должен ли этот класс существовать в одном экземпляре или нам нужно несколько?

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

Более того, объект-маппер может кешировать внутри в поле какие-то данные. Напримр маппер городов может запоминать список городов и при втором обращении отдавать ранее загруженный список. Если же ты каждый раз будешь его пересоздавать, то это работать не будет.

В случае с PDO каждый новый созданный объект открывает новое соединение с БД. Это нехорошо, можно быстрее упереться в выставленное ограничение на число соединений.
Аноним 2016/02/17 12:49:11  №657407 556
>>657381

Ну и кстати, в случае с несколькими объектами PDO ломается логика. Вот допустим ты хочешь сохранить 2 студентов в рамках одной транзакции:

$con['PDO']->beginTransaction(); // Получаем объект PDO и начинаем транзакцию

// Упс! Тут создается новое соединение и студент сохраняется в базу не внутри транзакции, а сразу
$con['StudentMapper']->saveStudent($student1);

// упс, третье соединение и студент опять же вставляется в базу не в рамках транзакции
$con['StudentMapper']->saveStudent($student2);

// уже четвертое соединение
$con['PDO']->beginTransaction();

То есть код работает не так как мы хотели из-за того что все время создаются новые объекты, ничего не знающие о предыддущей копии.
Аноним 2016/02/17 13:20:18  №657432 557
>>657403
>Нет, вопрос логики и архитектуры: должен ли этот класс существовать в одном экземпляре или нам нужно несколько?
Тогда я должен сделать чтобы классы PDO, StudentGateway, RegistrationHelper и RegistrationHelper хранились в единственном экземпляре.
$container['...']= $container->protect(function () {...});
Аноним 2016/02/17 13:39:21  №657451 558
Как там в PHP 7?
Аноним 2016/02/17 14:04:50  №657470 559
>>657432
>$container['...']= $container->protect(function () {...});
Не правильно, я должен написать по другому $container['...'] = function () {...};
Аноним 2016/02/17 14:20:35  №657495 560
Пытаюсь подключить js в запись вордпресс, делаю это через шорткод и произвольные поля, создаю в файле functions.php такой код:

function jscode_shortcode($attr, $text) {
global $post;
return get_post_meta($post->ID, $text, true);
}

@add_shortcode('jscode',' jscode_shortcode');

Создаю произвольное поле, куда вставляю нужный мне код, вывожу его в записе таким образом [jscode]имя поля[/jscode] мне выводит следующую ошибку:

Notice: Функция do_shortcode_tag вызвана неправильно. Попытка вывести шорткод без функции обработки: cft Дополнительную информацию можно найти на странице «Отладка в WordPress». (Это сообщение было добавлено в версии 4.3.0.) in C:\OpenServer\domains\wp-site\wp-includes\functions.php on line 3792
Аноним 2016/02/17 14:23:00  №657501 561
>>657495
Убери собачку от функции, может, узнаешь еще инфу.
Аноним 2016/02/17 14:38:51  №657514 562
Аноним 2016/02/17 14:43:03  №657517 563
>>654361
Ты симулируешь отправку http-заголовка через meta-тег. У тебя должно быть два параметра: http-equiv="Имя-заголовка" и content="Содержимое заголовка".
Теперь думай, что ты делаешь не так.
Аноним 2016/02/17 16:15:03  №657591 564
Аноним 2016/02/17 16:21:56  №657604 565
>>657432

да

>>657470

Да

>>657495

Надо читать документацию. Алсо, добавлять поизвольнй JS плохая идея, замучаешься потом это поддерживать и например исправлять код. Лучше сделать файл с функциями, а шорткод только подключает нужную.

>>657517

Редирект вообще надо делать через код 3xx и location


ответы 12 фев Аноним 2016/02/17 16:22:30  №657605 566
>>650748

Это объясняется у меня в учебнике во втором уроке

$a += $b; равносильно $a = $a + $b, то есть увеличить $a на $b.
$a++; равносильно $a += 1; или $a = $a + 1;, то есть увелчить значение $a на 1

>>650775

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

В стартап ты полез зря. Стартап - это инвестиции (временем, которое ты бы мог потратить на что-то другое). Инвестициями должны занимться те, у кого много каких-то ресурсов и которые готовы их потерять. 90% стартапов разваливаются в первый же год.

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

>>650784

> for ($i = 1; count($presentPupils) >= $rhyme; ) {
Так как это не цикл со счетчиком, лучше использовать while.

> foreach ($presentPupils as $key => $value) {
value - не годится как название для переменной

Ответ получается правильный.
HTTPS Аноним 2016/02/17 16:23:00  №657608 567
>>650815

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

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

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

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

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

https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%BC_%D0%BA%D0%BB%D1%8E%D1%87%D0%BE%D0%BC

При установке HTTPS соединения у клиента есть 2 основных задачи:

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

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

Если быть точнее, то эти задачи выполняет протокол SSL/TLS, HTTPS просто устанавливает защищенное SSL-соединение и передает по нему данные протокола HTTP. То есть HTTPS это просто HTTP поверх SSL-соединения.

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

https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%94%D0%B8%D1%84%D1%84%D0%B8_%E2%80%94_%D0%A5%D0%B5%D0%BB%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0
https://ru.wikipedia.org/wiki/SSL

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

- браузер покажет предупреждение, но пользователь может продолжть соединение все равно
- если сервер использует Strict Trasport Security, клиент ранее заходил на него и знает об этом, то опции для продолжения соединения не будет

https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%84%D1%80%D0%B0%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D1%85_%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9

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

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

Вот например Symantec (по их словам в тестовых целях) выпускал сертификаты для сайта google: http://arstechnica.com/security/2015/09/symantec-employees-fired-for-issuing-rogue-https-certificate-for-google/

Вот китайский центр сертификации выпустил поддельные сертификаты для google, по их словам для внутреннего тестирования (ага, мы поверили): http://arstechnica.com/security/2015/03/google-warns-of-unauthorized-tls-certificates-trusted-by-almost-all-oses/

Это удалось обнаружить благодаря отчетам, которые Хром отсылал в Гугл, увидев сомнительный сертификат.

Для борьбы с этим есть такие методы:

- certificate pinning - в браузере Хром и ФФ вписаны отпечатки ключей некоторых популярных сервисов вроде Google Mail, так что эти браузеры примут только сертификат от Гугла. https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning

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

- certificate transparency - идея в том, что центры сертификации будут перед выпуском сертификата писать информацию об этом в специальный криптографически подписанный лог. Браузеры откажутся принимать сертификаты, не указанные в логе. Третьи стороны могут мониторить эти логи и видеть выпуск поддельных сертификатов. http://www.certificate-transparency.org/ - тут впрочем тоже могут быть уязвимости. Например, центр сертификации может показывать разным пользователям разные версии лога.

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

Теперь вернемся к вопросам:

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

В Windows это вкладка "путь сертификации"

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

Например, у меня этот сайт исплоьзует:

- для обмена ключами ECDHE_RSA - судя по названию, там используются эллиптические кривые, Диффи-Хеллман и асиметричный шифр RSA
- для симметричного шифрования Salsa20: https://ru.wikipedia.org/wiki/Salsa20
- для потвеждения целостности соединения хеш-функцию https://en.wikipedia.org/wiki/Poly1305

Вот тут написаны названия современных алгоритмов в TLS http://security.stackexchange.com/questions/76993/now-that-it-is-2015-what-ssl-tls-cipher-suites-should-be-used-in-a-high-securit

> Догадываюсь что нет, но не могу объяснить почему, потому что нигде четко не описан алгоритм защищенного соединения. Возможно с каждым пакетом отправляются данные о сертификате. Сертификат ведь третья сторона подделать не может (наверное).
Это интересный вопрос. Шифрование защищает от прочтения данных, но ведь оно не запрещает злоумышленнику подписать свои данные открытым ключом и вбросить в канал. Для защиты от этого используется хеш-функция: https://ru.wikipedia.org/wiki/HMAC

>>Могут ли узнать на какие сайты ты заходишь?
> Думаю да. Клиенту и серверу ведь сначала нужно обменяться открытым ключом. А может и нет. Без понятия короче.
Прочитай про SNI. Также, подумай: скрывает ли HTTPS IP адрес сервера?

>>Смотрит ли видеоролики на этом сайте? Оставляет ли комментарии? Можно ли определить с кем он ведет переписку в gmail? Ну или хотя бы узнать его адрес e-mail?
> Нет наверное.
Скрывает ли HTTPS объем передаваемых данных? Отличаются ли файлы разных типов по объему? Хранят ли сайты свои видеоролики на своем сервере, или выносят на отдельный поддомен, CDN, специальный сервис для хранения видео? Подумай какие данные есть у злоумышленника и что из них можно извлечь.

Насчет отправки комментариев: подумай, отличается ли объем GET и POST запросов, отличается ли поведение сервера в ответ на такие запросы.

https://tools.ietf.org/html/draft-pironti-tls-length-hiding-01#section-1

В общем, предлагаю тебе почитать чуть подробнее и попробовать ответить на вопросы заново. Будешь хоть понимать что и как происходит при использовании HTTPS.
Ответы 12 февр, кубики Аноним 2016/02/17 16:23:58  №657612 568
>>650823

Думаю, есть готовые библиотеки

>>650853

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

Мне кажется, тут этот синтаксис не нужен. И лучше иметь 2 класса: класс File и метод $news->saveToLibrary($file)

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

>>650861

Возможно для других он не самый лучший

> говнофреймворки, вроде Yii.
А чем laravel отличается?


>>650886

Увидишь в следующих задачах

>>650908

Лучше еще давать ссылук на код, а то копипастить нельзя.

У тебя ошибка в задаче:

if ($anonDice1 && $anonDice2 ...)

Это так не работает. С помощью И/ИЛИ можно объединять только сравнения, например:

if ($a > 0 && $b < 0)

Дело в том что операторы сравнения берут 2 числа, сравнивают и возвращают true или false (истина/ложь) если условие выполняется.

5 > 0 -> дает true (истина)
5 < 0 -> дает false (ложь)

Подробнее:

http://php.net/manual/ru/language.operators.comparison.php
http://php.net/manual/ru/language.types.boolean.php

Логические операторы && и || берут на вход значения true/false и дают такое же значение на выходе:

true && true -> true
false && true -> false

Подробнее: https://secure.php.net/manual/ru/language.operators.logical.php

Когда ты пишешь

$anonDice1 && $anonDice2 > $compDice1 && $compDice2 то действия выполняются так (с учетом того что приоритет > выше чем у &&):

$anonDice1 && ($anonDice2 > $compDice1) && $compDice2

Это можно прочесть:

- если $anonDice1 не равно нулю, И $anonDice2 > $compDice1, И $compDice2 не равно нулю, то ...

Как видишь, получилось совсем не то, что ты хотел.

Задачу надо переделать. И проверь ее для разных чисел.

>>650909

Про скобочки - они не обязательны: http://php.net/manual/ru/language.types.string.php#language.types.string.parsing

exit тоже не обязателен, лучше без него
Ответы 12 февр, яваскрипт Аноним 2016/02/17 16:24:27  №657614 569
>>650978

> Я так то теку от Рельсов и Руби магии
Что там хорошего? Убогий актив рекорд, модели на 2000 строк с сотнями методов, статические методы и глобальные переменные везде, костылища (когда один модуль патчит другой, например https://habrahabr.ru/company/Voximplant/blog/269467/ - адский быдлокодинг), неумение в ООП.

>>651106

Хорошая идея, если что - задавай вопросы.

>>651115

Версионирование API это другое дело. Обычно в API действительно используют версию в URL, например:

/api/v2/cities

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

Если же речь о классах, и ты пишешь например библиотеку, то надо тоже сделать несколько версий библиотеки - наример lib1 для старых приложений и lib2 для новых, не стоит пытаться объединить это в одной универсальной библиотеке.

>>651136

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

>>651208

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

> https://jsfiddle.net/v6jvkjpo/
> if (count == 1) {
Есть альтернативные подходы:

- уменьшить start в начале
- сохранить значение start, увеличить ее, вернуть старое значение

Так, решено верно

> https://jsfiddle.net/ct0ztq6j/
Все правильно

> https://jsfiddle.net/p0jv4maf/
Верно

> https://jsfiddle.net/dmejq61b/
> if (typeof(arguments[0]) != 'function') {
Не понимаю, зачем тут иф? Сделай универсальный код. То есть который передает аргументы всегда.

> https://jsfiddle.net/o0u0qc41/

> for (var i = 1; i < arguments.length; i++) {
> arr.push(arguments);
для преобразования псевдо-массива arguments в массив есть интересный хак с Array.prototype.slice, погугли.

> arr, ar
Что за названия? Давай нормальные, например inner, outer

> var fn = arguments[0];
Тогда лучше прописать fn в скобках в заголовке функции - чтобы было видно что она нужна

Объединить 2 массива можно с помощью concat.

> https://jsfiddle.net/j7dcvubc/

> for (; i < arr.length; i++) {
i = 0 логично вписать сюда

> for (; j < arguments.length;) {
В таких случаях надо писать while. Точнее, я виже там break и значит у тебя просто замаскированный иф.

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

> for (; j < arguments.length; j++) {
> ar.push(arguments[j]);
Это можно сделать через slice и concat
Ответы 12 февр Аноним 2016/02/17 16:24:50  №657616 570
>>651263

> $randomWord = mt_rand(0,count($word1)-1);
В разных массивах разное число слов, потому придется сделать 3 переменных, для каждого массива свою. Или использовать array_rand().

>>650299
>>651236

> или инфу из самостоятельного чтения можно использовать?
Да, разумеется можно

>>651535

Самообразовывайся

>>651611

> https://jsfiddle.net/mqdkab0q/3/
> var klass = " " + node.className + " ";
> node.className = klass.replace(regExp, "");
Образуются лишние пробелы: a_b_c -> _a__c_

Также, часть регулярок использует флаг i, часть - нет, плохо.

> https://jsfiddle.net/7bvx9hwa/2/
Ок, теперь работает


>>651753

Код для этого кстати есть в мануале: http://php.net/manual/ru/class.errorexception.php
https://github.com/toppestkek/YiiModule/tree/master/modules Аноним 2016/02/17 16:25:21  №657617 571
>>651867
>>651870
>>655019

https://github.com/toppestkek/YiiModule/blob/master/modules/display/models/News.php
Есть валидация theme_id? Или наджда на внешние ключи?

> https://github.com/toppestkek/YiiModule/blob/master/modules/display/models/NewsSearch.php#L86
В чем смысл поиска по каждому полю отдельно? Думаю, нужен общий поиск.

https://github.com/toppestkek/YiiModule/blob/master/modules/display/Display.php#L9
init можно убрать

> public function actionCategory2
Название плохое

> return $this->render('index', [
> 'year' => $year,
> 'month' => $month,
А где там фильтр по месяцам? Это вообще работает?

https://github.com/toppestkek/YiiModule/blob/master/modules/display/controllers/NewsController.php#L118
Почему SQL в контроллере ?

> $model
Название плохое, надо $news

> $theme_id = $model->theme_id;
Почему связь Новости-Темы не налажена? Должно быть примерно так:

$theme = $news->theme;

> $themes=Yii::$app->db->createCommand('SELECT FROM themes')->queryAll();
Почему SQL тут? Сделай метод в модели, более того, он там наверно уже есть.


> https://github.com/toppestkek/YiiModule/blob/master/modules/display/views/news/index.php#L20
> if(!isset($year)){
Что за ерунда? Как это переменная может быть, а может не быть?

https://github.com/toppestkek/YiiModule/blob/master/modules/display/views/news/view.php#L25
> 'value' => $theme_title[0],
Что еще за ноль? Это запутывает

https://github.com/toppestkek/YiiModule/blob/master/modules/display/components/NWidget.php
Почему SQL запросы в виджете? Лапша какая-то поулчается. Запросы должны быть только в модели, более того, в 90% случаев там хватает встроенных методов актив рекорд.

https://github.com/toppestkek/YiiModule/blob/master/modules/display/components/NWidget.php#L13
> public $query;
Почему паблик?

> WHERE DATE_FORMAT(date, '%Y') = :year
Это неэффективно и не позволяет использовать индексы. Надо искать через BETWEEN

> AND theme_title = :category
Неправильно, надо исплоьзовать id категории а не название

> public function getParams($month, $year, $category){
Почему паблик? Пройдись по всем методам и расставь осмысленно атрибуты доступа, соблюдая инкапсуляцию.

> GROUP BY theme_title";
Надо группировать по id

> group_concat(DISTINCT theme_title)
Зачем

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

https://github.com/toppestkek/YiiModule/blob/master/modules/admin/controllers/NewsController.php#L40
> $themes=Yii::$app->db->createCommand('SELECT FROM themes'
Не копипасть

https://github.com/toppestkek/YiiModule/blob/master/modules/admin/models/News.php
Зачем вторая копия модели? Не копипасть.

https://github.com/toppestkek/YiiModule/blob/master/modules/admin/views/news/_form.php
Такие формы нельзя создавать полностью атоматически, не описывая каждое поле? Наверняка можно.

https://github.com/toppestkek/YiiModule/blob/master/modules/admin/views/news/create.php
Можно объединить с update.php

https://github.com/toppestkek/YiiModule/blob/master/modules/admin/views/news/view.php
Не уверен что нужна вторая страница просмотра новости.

Ну и универсален ли твой модуль? Можно ли его подключить к любому сайту, можно ли расширять, например, добавить картинку для новости?
Аноним 2016/02/17 16:25:42  №657618 572
>>651883

Не знаю, это надо разбираться.
Аноним 2016/02/17 17:46:11  №657723 573
>>654781
ОП, дай задачу-то, пожалуйста
Аноним 2016/02/17 18:22:37  №657761 574
>чат изучающих
вы чего, где мой легетимный "клуб любителей изучать"?
не был уже около полугода, и смотрю у вас тут много поменялось, поясните пожалуйста
САПЁР Аноним 2016/02/17 18:32:38  №657766 575
Аноним 2016/02/17 18:44:56  №657773 576
>>657723

кинотеатр уже решил?
Аноним 2016/02/17 19:04:10  №657786 577
Ничего если на всех цмсках реализовать одно и то же приложение (например, вывод новостей под датам). А то у меня уже идей для этого веба нет.
Аноним 2016/02/17 19:19:14  №657792 578
>>657773
нет ещё. пока ООП доделываю ты, я смотрю, последнюю задачу оттуда "для джуниора". Почему?

Аноним 2016/02/17 19:32:35  №657800 579
('/^([\\.\\w-]{2,127})@([a-zA-Z0-9-.]{2,122})\\.([a-zA-Z]{2,5})$/' - это хорошее регулярное выражение для проверки имейла?
Аноним 2016/02/17 19:36:06  №657804 580
>>657800
>[\\.\\w-]
Точку в квадратных скобках можно не экранировать, потому что квадратные скобки - это "один любой из указанных символов в любой последовательности". Там только спецсимволы надо экранировать.
Аноним 2016/02/17 19:42:33  №657808 581
>>657792
>последнюю задачу удалил
fix
Аноним 2016/02/17 19:43:49  №657810 582
>>657808
И правда удалил. Зачем?
Аноним 2016/02/17 19:49:39  №657813 583
>>657792

Я просто пересортировал 2 последних урока и переставил местами - так логичнее. Соответственно задача перекочевала в последний урок "Учим сами". Да и вообще, она мне не очень нравится, еще никто с первого раза не понял что надо сделать.
Аноним 2016/02/17 19:50:45  №657814 584
>>657813
Понятно, я прост кошек-мышек доделалскоро вброшу, шлифую пока и удивился, т.к. помнил, что там ещё одна задача была
Аноним 2016/02/17 19:51:00  №657815 585
Еще я кстати переставил злополучную задачу про кредит, дописал немного пояснений в уроки про массивы и регулярки, дописал подсказки к некоторым задачам. Хороший повод вернуться и перечитать учебник!
Аноним 2016/02/17 20:25:51  №657840 586
>>657723
>>654781

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

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

1) спроектируй базу данных для анонимного форума. Форум состоит из тредов, треды из постов. Для каждого поста хранятся:

- идентификатор автора
- ид поста
- заголовок
- текст
- время размещения

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

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

Напиши запросы:

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

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

2) Спроектируй базу данных для доски объявлений. Доска разбита на категории, категории могут быть вложенными (например Автомобили -> Запчасти для авто). Доска работает в нескольких странах и городах. Добавлять объявления могут только зарегистрированные пользователи.

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

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

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

Напиши запросы для:

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

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

Аноним 2016/02/17 20:29:58  №657843 587
>>654781
>>657723

Про оптимизацию запросов можно начать читать здесь: http://ruhighload.com/post/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+%D1%81+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D0%BC%D0%B8+%D0%B2+MySQL

И еще задачка:

- некто сделал большой анонимный форум вроде reddit (пользователи постят интеесные ссылки и обсуждают их). На этом форуме миллионы тредов. Выборка N-й страницы форума с помощью LIMIT начинает занимать все больше времени. Предложи варианты оптимизации постраничной выборки.
Аноним 2016/02/17 21:00:58  №657868 588
Решил задачку на айпад в кредит
Посмотрите, пожалуйста, все верно?
http://ideone.com/NyfRoV
Аноним 2016/02/17 21:02:14  №657873 589
14557321346900.jpg (59, 604x453)
453x604
Моё первое сообщение на этой доске, а может и последнее.

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

скорей бы сдохнуть
Аноним 2016/02/17 21:12:17  №657877 590
>>657873
Можешь попробовать, ты ничего не теряешь. Но морально готовься к тому что учить нужно будет много, для того чтобы речь шла о каком-то заработке, ты должен будешь потратить на обучение как минимум пол года это в лучшем случае. Ну и если застрял на какой-то задаче, или просто что-то непонятно - пиши сюда, тут почти всегда помогают.
Аноним 2016/02/17 21:12:31  №657878 591
>>657873
Ну так мотивируй себя чем-нибудь. Если нет интереса к программированию, ищи интерес к чему-то другому. А так, попробовать стоит, конечно.
Аноним 2016/02/17 21:19:29  №657888 592
Аноним 2016/02/17 21:22:34  №657892 593
14557333543850.jpg (33, 420x560)
560x420
>>657877
>>657878
>>657888
Спасибо за поддержку, ребят, просто, вбив в гугл "обучение php" мне выдают какую-то неудобоваримую хрень, вот эти учебники составленные самоучками без чёткой структуры и дружелюбного вступления, где сразу же заваливают непонятными мне терминами, что напрочь отбивает желание вникать в эту сферу дальше. Может просто порекомендуете учебник, с которого начинали сами, знаю, в ОП-посте есть все ссылки для новичков, а я уж решу, браться за это дело самостоятельно или бросать к чертям и оставаться говном по жизни.
Аноним 2016/02/17 21:25:38  №657896 594
>>657892
>У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.
Аноним 2016/02/17 21:26:20  №657897 595
Аноним 2016/02/17 21:26:47  №657898 596
>>657892
Запасайся огромным количеством терпения. Без этого никак.
Аноним 2016/02/17 21:28:26  №657900 597
>>657873
Ну попробуй может понравится.
>низкая обучаемость
Во первых, нам на скорость плевать. Тут кружок аутистов, мы одну задачу по 400 постов можем объяснять.
Во вторых, это ты относительно кого высчитывал? Важен только личный прогресс.

З.ы. Рекомендую http://lifehacker.ru/2015/05/28/all-about-pomodoro/
Аноним 2016/02/17 22:23:38  №657935 598
Друзья, в задаче про айпад, которая про функции, ОП запретил 3 раза копипастить код. Скажите, должна быть на всю задачу только одна единственная функция?
Аноним 2016/02/17 22:30:03  №657938 599
>>657892
я это ты полтора месяца назад. Не имел представления о том, что такое переменная в погромировании и что такое пхп вообще. Короче, вообще никак. Сегодня доделал Кошек-Мышек, задачу в 600+ строк, скажи мне тогда, никогда бы не поверил
Аноним 2016/02/17 22:40:48  №657952 600
>>657935
Можете своими словами пояснить, для чего служит return $deposit?
Не могу понять, зачем возвращать $deposit, ведь эта переменная не используется в дальнейшем. ОП использует в дальнейшем наименование функции, а не переменную $deposit, которую возвратил:
>$balance = getBalanceInFuture (1, 2, 3);

http://archive-ipq-co.narod.ru/l1/functions.html
Аноним 2016/02/17 22:47:21  №657959 601
>>657952
Бля, второй день всё перечитываю, чёт вообще никаких мыслей, что в функцию записывать.
Аноним 2016/02/17 22:49:46  №657962 602
>>657959
А, наверно просто процент и комиссия
Аноним 2016/02/17 22:51:07  №657964 603
>>657952
Что значит "не используется в дальнейшем"? return это главная часть функции, без неё ты не вытащишь из функции никакое значение во внешний код.
Аноним 2016/02/17 22:52:07  №657966 604
>>657964
не используется переменная $deposit
Аноним 2016/02/17 22:52:52  №657971 605
>>657966
Где не используется?
Аноним 2016/02/17 22:55:01  №657977 606
14557389014280.png (111, 750x2360)
2360x750
>>657971
Здесь во втором примере
Аноним 2016/02/17 22:55:58  №657981 607
>>657977
Подчеркни, что на картинке, по твоему, второй пример.
Аноним 2016/02/18 01:00:39  №658113 608
>>657873

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

>>657877

Полгода слишком оптимистично

>>657935

Да

>>657952

return "возвращает" значение из функции в место ее вызова:

// Создаем (определяем) функцию sum с 2 аргументами
function sum($a, $b) {
return $a + $b; // функция считает сумму переданных ей чисел и возвращает ее
}

$a = sum(10, 20); // вызывается функция sum, ей передаются числа 10 и 20, она их складывает и возвращает результат, в итоге в переменную $a запишется 30

echo sum(50, 50); // выведет 100

Аноним 2016/02/18 01:04:23  №658118 609
>>657952

> Не могу понять, зачем возвращать $deposit
Ты неправильно понял. Возвращается не переменная, а ее значение. Не переменная deposit, а число которое в ней хранилось. И позже это число сохраняется в другую переменную:

$balance = getBalanceInFuture (1, 2, 3);

В этом примере будет вызвана функция, а число которое она вернет, будет сохранено в переменную $balance.

То есть через аргументы в скобках мы передаем значения в функцию, с помощью return возвращаем из функции.

Сами переменные никуда не передаются. Более того, пеоеменные изолированы: код внутри функции не видит внешние переменные, а код снаружи не видит переменые внутри функции. Это упрощает код и делает его более надежным.

Аноним 2016/02/18 01:10:07  №658123 610
>>657935

Тебе надо поместить расчет кредита в функцию. То есть ты передаешь ей параметры кредита, а она возвращает например общую выплату по нему. Имея такую функцию, ты можешь вызвать ее несколько раз с разными аргументами и получить выплату по каждому банку.
Аноним 2016/02/18 01:14:30  №658128 611
>>657786

Ты замучаешься делать это под каждую CMS. Их же сотни. Да и во многих уже есть новости.

Зачем тебе это? Если ты хочешь учиться лучше делать учебные задачи, если для себя что-то сделать - делай что тебе интересно.

>>657800

Не очень. почитай статьи

https://habrahabr.ru/post/175375/
https://habrahabr.ru/post/55820/
https://habrahabr.ru/post/224623/

Аноним 2016/02/18 11:59:05  №658248 612
>>657591
https://github.com/someApprentice/Students/tree/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f
Расширил функционал формы

Несколько вопросов:

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

https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Controller/RegisterAction.php#L54
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Controller/RegisterAction.php#L61-L71

В чем моя ошибка? Нужно Студента тоже добавлять в контейнер?

====

https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Controller/RegisterAction.php#L61-L70
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Controller/RegisterAction.php#L26-L34

https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Model/Essence/Student.php#L18-L29
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Model/Essence/Student.php#L32-L118

https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Model/Gateway/StudentGateway.php#L61-L72
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Model/Gateway/StudentGateway.php#L74-L85
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Model/Gateway/StudentGateway.php#L90-L100

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

Аноним 2016/02/18 12:38:23  №658275 613
>>658248

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

Переделай код, чтобы контроллер явно подключал шаблон и передавал ему нужные переменные.

Мне тоже не нравится стена текста - надо ее упрощать.

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

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

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

> protected $errors = array();
Зачем сохранять список ошибок в поле?

> if ($this->studentgtw->getStudentByEmail($email)) {
Это тоже часть функции валидации

> $salt = $this->reghelper->generateSalt(); //getRegHelper() будет лучше?
> $hash = $this->reghelper->hashPassword($password, $salt);
У нас же вроде в задаче не надо указывать пароль при регистрации.

> $student = new Student($name, $surname, $gender, $grupnumber, $email, $satscores, $yearofbirth, $location, $hash, $salt, $token);
Не надо делать у функции больше 4-5 аргументов. Огромный список невозможно прочесть и невозможно понять, есть в нем ошибки или нет. Для моделей традиционно делают пустой конструктор, а потом заполняют нужные поля, например:

$x = new News;
$x->title = 'Название новости';

или так

$x->setTitle('Название новости');

И кстати пример такой класс описан тут https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md#Сущности

> $name = isset($_POST['name']) && is_scalar($_POST['name']) ? $_POST['name'] : '';
> $surname = isset($_POST['surname']) && is_scalar($_POST['surname']) ? $_POST['surname'] : '';
> $gender = isset($_POST['gender']) && is_scalar($_POST['gender']) ? $_POST['gender'] : '';
Вместо копипасты надо использовать цикл.

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

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

Вот, можешь почитать как сделаны формы в Симфони:

http://symfony-gu.ru/documentation/ru/html/book/forms.html
http://symfony.com/doc/current/book/forms.html
https://habrahabr.ru/post/149444/

там конечно сложновато, но вдруг что найдешь.

Аноним 2016/02/18 12:55:06  №658296 614
Помогите определится, хочу соскочить с пхп, сначала хотел в руби так как с ним знаком, потом решил в более масштабную Ноду.
Но понял что проблематично и долго осваивать новый язык и совмещать с работой.
В пхп я далеко не ПРО и сомневаюсь в том стоит ли изучать новую технологию или лучше качать скил пхп до максимума.

Что думаете господа?
Аноним 2016/02/18 13:43:16  №658355 615
Приветствую.
Задача стандартная.
Есть ajax фильтр по параметрам(форма с чекбоксами, полями и прочее). После наложения фильтра, отображаются записи. При клике на любую запись, переход на эту запись. В этой записи должна быть кнопка НАЗАД, которая возвращает обратно на страницу фильтра с уже ранее выбранными параметрами. Как это реализовать? Голову сломал уже. Вроде есть history API, но как это применить к моему примеру не нашел. Есть библиотеки jquery, но тоже не понимаю, как их применить.
Устроит даже тупо при нажатии кнопки фильтровать (аjax вызова) формирование урла в строке браузера
вроде http://site.ru?hui=4,5,7&pizda=000, то есть в гет параметрах будут сохранятся данные из инпутов форме, и потом по этому урл http://site.ru?hui=4,5,7&pizda=000 можно воспроизвести страницу с наложенными фильтрами?
Есть какой-нибудь нормальный мануал от а до я по этой теме, можно на англ. В инете все кусками, с jquery не особу дружу.
Аноним 2016/02/18 13:48:41  №658358 616
Почему задачка не выполняется?
ideone.com/Tyalfv
Аноним 2016/02/18 13:48:43  №658359 617
>>658355

1) не использовать аякс при преходе на запись или вообще не использовать
2) history api
Аноним 2016/02/18 14:08:17  №658369 618
Аноним 2016/02/18 14:26:10  №658383 619
>>658275
>Например валидация - это явно отдельная функция, которую ты почему-то не вынес отдельно. Мы даем функции на вход объект-студента и получаем ответ, правильно ли заполнения информация в нем или нет.
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Controller/RegisterAction.php#L61-L71
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Controller/RegisterAction.php#L73-L80
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/app/Controller/RegisterAction.php#L73-L80
Это тоже относиться к валидации?


>>658275
>> \tprotected $errors = array();
>Зачем сохранять список ошибок в поле?
Чтобы можно было передать их в шаблон как я это сделал здесь:
https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/templates/registration.phtml#L13

Это неправильно?

>>658275
>> if ($this->studentgtw->getStudentByEmail($email)) {
>Это тоже часть функции валидации
А не функцией базы данных? Она же работает именно с ней.


>>658275
>У нас же вроде в задаче не надо указывать пароль при регистрации.
Ничего если я добавлю в свою? Так интересней будет.


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

>>658275
>там конечно сложновато
Много читать, много изучать надо - проще ознакомиться с этим сразу начав изучать всю симфони.
Аноним 2016/02/18 15:04:48  №658467 620
>>658275
>В общем, я предлагаю вместо десяти переменных передавать единственный объект Student. Правда, тут есть небольшой подвох: в форме для пароля сделано 2 поля, а в студенте - поля пароль быть не должно вообще (так как пароль в чистом виде не хранится в базе).
Кстати, почему заместо пароля плохо держать хэш в классе Student, и на прямую передавать его в базу данных?
Аноним 2016/02/18 15:06:20  №658470 621
Аноним 2016/02/18 15:13:18  №658483 622
>>658470
Неправильно. Всего ты должен заплатить 61к с копейками.
Аноним 2016/02/18 15:30:54  №658501 623
Аноним 2016/02/18 15:34:14  №658507 624
>>658501
Теперь считает правильно, но ты копипастишь один и тот же код два раза. Так делать нехорошо, попробуй эту копипасту как-нибудь убрать.
Аноним 2016/02/18 15:56:00  №658546 625
>>658507
копипаста из if в elseif?
Аноним 2016/02/18 15:56:49  №658549 626
http://ideone.com/e.js/ByAqm1" type="text/javascript
Мне надо было запихнуть в массив рандомные числа и достать их оттуда отсортированными наоборот, но вот незадача
Аноним 2016/02/18 15:57:43  №658552 627
14558002630180.jpg (55, 427x604)
604x427
>>658549
ааааааа даже ссылку не могу написать не бейте
Аноним 2016/02/18 15:59:37  №658556 628
>>658546
echo у тебя два раза, paymentTotal считает два раза. Подумай как сделать код компактнее.
Аноним 2016/02/18 16:04:27  №658564 629
>>658549
tak ya vse ponyal ne shlite nahuy pojaluysta
Аноним 2016/02/18 16:06:04  №658567 630
14558007643810.jpg (32, 427x604)
604x427
Аноним 2016/02/18 16:06:47  №658569 631
>>658567
Почитай что такое функции и как они работают.
Аноним 2016/02/18 16:07:44  №658572 632
>>657391
Огромное спасибо за советы и помощь, ОП!
>Одна строчка кода иногда лучше тысячи слов. Надо прикладывать код в таких случаях.
Пока ещё не разобрал твои советы, а начальный код у меня сейчас вот так выглядит: http://ideone.com/WGyvkd
Не получается даже на один шаг пройти по-человечески, не могу оборвать цикл после этого, не могу вытащить набитый пройденными пунктами массив...
Я тупо не могу добиться, чтобы уже имеющийся к этому моменту массив вставлялся в другой массив - мне постоянно выдаёт NULL.
Что я делаю тут не так? Такая вроде бы простая вещь, с которой я уже давно вроде бы разобрался, а сделать не могу.
Пробовал через array_push, через array_fill, array_fill_keys - толку нет.
Просто так массив набиваю, а при следующем вызове функции он уничтожается, наполняется заново.
Не могу добиться, чтобы целиком имеющийся массив входил как вложенный в состав другого. Просто под очередным ключом.
Какая-то каша выходит.
Я, честно говоря, отчаялся в понедельник и вторник с этой задачей и начал уже повторять HTML с CSS, решил несколько задач, которые потом скопом покажу.
Сейчас буду разбирать твои советы и подсказки, братишка. В голове пока туман.
Аноним 2016/02/18 17:03:06  №658649 633
Вобщем, тот хуй который вчера хныкался, репортинг ин. Дошол до задачек с переменными и кароче забил на всю эту чушь, там пошли какие-то изогнутые скобочки, знаки доллара, типа какието переменные, вобщем ебался с этим синтаксисом 4 часа наверное, и так не понял что к чему. Кароче за бил я на попытки стату тру кодером, не по моим силам это всё, и устроился на SEOsprint. Заработал там 5 рублей тыкая мышкой по картинкам за 4 часа и понял, что и это занятие мне не по зубам, лол. Задания дают какие-то вычурные, заёбистые, пытался выполнить и заваливал задания не понятно опчему. Кароче я настолько недееспособен, что мне даже стыдно стало, что пришёл сюда за советом и помощью. Буду дальше гнить у мамке на шее, пусть страдает из=за меня, эта сука, пусть жалеет о том дне когда выпердела меня на этот свет, блядина ебучая.
Аноним 2016/02/18 17:04:35  №658651 634
Аноним 2016/02/18 17:11:04  №658661 635
>>658649
Поныть можешь в соседнем треде, тут люди задачки решают.
Аноним 2016/02/18 17:42:58  №658709 636
>>658649
Как можно быть таким тупым?
Аноним 2016/02/18 17:52:34  №658729 637
>>658649
>Винить других в том что не можешь сам
Аноним 2016/02/18 17:57:46  №658732 638
Аноним 2016/02/18 18:03:17  №658740 639
>>658732
Вроде бы уже до продвинутых задач дошел, а не можешь самостоятельно мелкие баги справить. Там же написано, что в 45ой строчке ошибка. Ты зачем-то к массиву как к функции обращаешься.
Аноним 2016/02/18 18:13:13  №658751 640
>>658740
Спасибо, анон, какой же я дибил, пиздец, заработало!
Аноним 2016/02/18 18:16:05  №658755 641
>>658751
А толку-то, переводит многое неправильно.
Аноним 2016/02/18 18:17:02  №658756 642
>>658755
Я заметил, уже работаю над этим.
Аноним 2016/02/18 18:28:56  №658767 643
>>658755
Заработался, я и забыл, что к массивам скобки квадратные (и не смутило же, что в крестах квадратные, и здесь вроде как должны быть такие же...). Вроде всё исправил, спасибо.
Аноним 2016/02/18 18:29:59  №658769 644
>>658732
Ох щи, как люди делают.
Ну, утешаю себя тем, что моё трёхнедельное и двухсотстроковое решение хотя бы без ошибок абсолютно все числа переводит.
Братишка недавно пытался сделать с кучей регулярок, а потом пропал. Или ты он и есть?
Надо мне моё решение сократить.
Хотя бы строк до ста пятидесяти.
Аноним 2016/02/18 18:34:49  №658772 645
>>658769
Нет, я не тот братишка, я только сегодня сел делать.
Теперь вроде всё правильно переводит, аль нет?
Аноним 2016/02/18 18:35:55  №658773 646
>>658767
http://ideone.com/Kf3k05
Вообще чувствуется, что у тебя опыт.
Пока даже толком не могу разобрать, как ты там всё навертел.
Аноним 2016/02/18 18:37:18  №658775 647
Аноним 2016/02/18 18:46:56  №658783 648
>>658773
Вроде всё, но если ошибки, переделывать не буду, только завтра.
Аноним 2016/02/18 18:59:36  №658791 649
>>658783
>переделывать не буду
ну пожалста
Аноним 2016/02/18 19:00:07  №658793 650
Сделал первую задачу по циклам, рейтаните и укажите на ошибки:
http://ideone.com/83cTUk
Аноним 2016/02/18 19:02:49  №658795 651
>>658793
1. {$age} - фигурные не обязательны
2. (1*2) - скобки не обязательны(алё, матеша 2-го класса)
3. задачка СЛИШКОМ простая, смело иди вперёд и вкидывай в тред уже посложнее, айфон можешь стартовой точкой считать.
Аноним 2016/02/18 19:05:12  №658800 652
>>658795
>айфон можешь стартовой точкой считать
Ок, сейчас буду пробовать.
Аноним 2016/02/18 19:05:53  №658801 653
>>658795
>задачка СЛИШКОМ простая, смело иди вперёд и вкидывай в тред уже посложнее, айфон можешь стартовой точкой считать.
Двачую, сделал задачу про айфон, считай что сдал ЕГЭ и поступил в Инстик. По сложности тоже самое. Можно даже считать что это некий тест на IQ.
Аноним 2016/02/18 19:06:22  №658803 654
>>658800
ты только пропускать не вздумай. Решай всё, я имею в виду, что реальная оценка кода(если ты не даун как >>658649) тебе понадобится к задаче на айфон
Аноним 2016/02/18 19:07:13  №658805 655
>>658783
Да, теперь вроде всё без ошибок.
У меня полыхает, поскольку я очень долго решал в лоб эту задачу и дошёл до кошмара http://ideone.com/UfX9rN
ОП уже разобрал, пояснил, как можно дополнительно сократить, но всё равно это решение топорное.
Буду теперь твоё решение разбирать, пока не пойму, как всё работает, спасибо.

>>658795
На памяти полтреда, когда объясняли анону именно эту задачу.
Аноним 2016/02/18 19:07:20  №658806 656
>>658803
>если ты не даун как >>658649
Хватит о нем! Надо желать лучшего а не травить!
Аноним 2016/02/18 19:08:14  №658808 657
>>658806
>Надо желать лучшего
ему вчера и желали
Аноним 2016/02/18 19:09:02  №658811 658
>>658808
Это не его проблема, это тебе не хватает терпения
Аноним 2016/02/18 19:13:47  №658815 659
>>658805
Тебе спасибо. На рандомных числах не всегда видно ошибку.
Аноним 2016/02/18 19:48:05  №658864 660
Как можно вставить в массив другой массив?
Но только так, чтобы этот массив был вложенным?
Вот есть такой цикл, например:
for ($i = 0; $i <= 5; $i++) {
array_push($filled[$i], $fillingUp);
}
Почему не получается массив вида
array(
0 => array (1, 2, 3),
1 => array (1, 2, 3),
2 => array (1, 2, 3),
3 => array (1, 2, 3),
4 => array (1, 2, 3),
5 => array (1, 2, 3),
)
Как можно такого добиться?
Я заткнулся на этом месте и не могу сдвинуться, что ты будешь делать.
Аноним 2016/02/18 19:50:27  №658870 661
>>658864

$fillingUp - что там?

Для того что ты хочешь есть array_fill()
Аноним 2016/02/18 19:50:52  №658871 662
>>658805
>На памяти полтреда, когда объясняли анону именно эту задачу.
Да вы здесь самые терпеливые люди на всей борде.
Аноним 2016/02/18 19:52:43  №658879 663
Аноним 2016/02/18 20:02:33  №658900 664
>>658870
Там array (1, 2, 3).
Хм, почему с array_fill такое выходит: http://ideone.com/JA3lfg ?
Там же с самого начала $i = 0?

>>658879
Спасибо, забыл о таком совсем.
Стоит какое-то время застрять на других задачах - забывается пройденное.
Вот так работает с array_push: http://ideone.com/QlbE2t

У меня просто никак не получается наполнить массив вот тут: http://ideone.com/WGyvkd
Он, похоже, каждый раз обновляется, не понимаю.
Аноним 2016/02/18 20:05:58  №658908 665
Вот вроде бы сейчас массив $allTraversedPaths наполняется массива с пройденными пунктами, а делаю в самом конце - получаю NULL по лбу с оттягом.
Аноним 2016/02/18 20:06:22  №658909 666
*а делаю в самом конце var_dump($allTraversedPaths);
Аноним 2016/02/18 20:06:33  №658911 667
>>658900

Твой код неправильный.

array_push($filled[$i], $fillingUp); - это не значит "положить в массив filled под индексом i". Это значит "создать массив $filled[$i] и в него положить еще массив"

Это равносильно

$filled[$i][] = $fillingUp;

а не

$filled[$i] = $fillingUp;

Также ,второй твой код тоже плохо написан:

> for ($i = 0; $i <= 5; $i++) {
> $filled = array_fill($i, $i, $fillingUp)

Тут не нужен цикл - array-fill может заполнить сколько угодно элементов.

Аноним 2016/02/18 20:15:18  №658925 668
>>658911
Хм, спасибо, всё прояснело теперь.
А почему в итоге у меня весь массив пустым оказывается?
Боже, как я тормознул...
Я же не делаю return с этим массивом, а он у меня в функции...
Что ты будешь делать...
Поэтому у меня и
array(0) {
}
- функция не возвращает этот массив.
Как же быть в этой ситуации? Мне нужны два отдельных массива в итоге: $traversedPath и $allTraversedPaths (чтобы у него найти min() для самого краткого пути).
Сделать массив с разными переменными?
$result = array ('traversedPath' => $traversedPath, 'allTraversedPaths' => $allTraversedPaths);
Спасибо, друзья, немного всё прояснилось.
Стоит с кем-то переброситься парой слов, сам часто не вижу банальных вещей.
Аноним 2016/02/18 22:44:59  №659089 669
Какой движок лучше всего использовать для интернет магазина?
Аноним 2016/02/18 23:22:49  №659113 670
Аноним 2016/02/18 23:25:01  №659116 671
>>659113
Уроки ОПа дают базу, а потом на модных фреймворках ты и не такое сможешь делать, если желание будет.
Аноним 2016/02/18 23:27:00  №659119 672
>>659113

Что там делать-то? Верстка примитивная + JS для переключения картинок.

Алсо дизайн плох: ссылки next/prev сделаны очень бледными, маленькими и почти не видны у меня.
Аноним 2016/02/18 23:30:06  №659121 673
>>659119
>Алсо дизайн плох: ссылки next/prev сделаны очень бледными, маленькими и почти не видны у меня.
Я тоже обратил на это внимание, но в остальном примитивная верстка делает дизайн максимально минималистичным, что всегда радовало мне глаз.
Аноним 2016/02/18 23:53:59  №659139 674
>>658113
Спасибо огромное за объяснение функции!
Аноним 2016/02/19 00:14:27  №659157 675
Аноним 2016/02/19 00:14:50  №659159 676
Аноним 2016/02/19 03:44:24  №659230 677
>>658383

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

> Чтобы можно было передать их в шаблон как я это сделал здесь:
> https://github.com/someApprentice/Students/blob/4f18d610a16ee4aadb9d78eddca1ac48c1189e0f/templates/registration.phtml#L13
> Это неправильно?

Вот это вот:
> $container['RegisterAction']
в шаблоне быть не должно. Шаблон обычно вызывается из контроллера и тот явно ему передает нужные данные. Например так:

$this->render('some.phtml', [
'a' => 1,
'b' => 2
]);

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

>>Это тоже часть функции валидации
> А не функцией базы данных? Она же работает именно с ней.
Валидатор может использовать маппер для проверки данных через базу.

>>У нас же вроде в задаче не надо указывать пароль при регистрации.
> Ничего если я добавлю в свою? Так интересней будет.
Хорошо, пусть будет.

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






Аноним 2016/02/19 03:47:07  №659231 678
>>658925

> Мне нужны два отдельных массива в итоге: $traversedPath и $allTraversedPaths (чтобы у него найти min() для самого краткого пути).
Я думаю, что не нужно возвращать список всех путей. Во-первых, он будет огромный, во-вторых можно в самой же функции выбрать кратчайший и вернуть только его.
Аноним 2016/02/19 03:49:28  №659232 679
>>658467

> Кстати, почему заместо пароля плохо держать хэш в классе Student, и на прямую передавать его в базу данных?
Хеш можно, я писал про то что пароль не надо хранить в студенте так как его нет в базе данных. Хеш есть в БД потому можно.

Аноним 2016/02/19 03:50:38  №659234 680
>>658355

Есть еще вариант куда-то сохранять опции фильтра (куки/локалсторадж), но это не позволит открыть несколько разных фильтров в вкладках. Надо все же чтобы при запуске фильтра менялся УРЛ страницы - либо через отправку GET формы либо через history API.
Ответы 13 февраля Аноним 2016/02/19 04:12:21  №659241 681
>>651943

> Произвольно устанавливаем длину радиуса - вычисляем её опытным путём. Желательно иметь возможность каким-либо образом вычислить длину радиуса из длины фразы.
Это не так и сложно - длина ведь в буквах у тебя есть, радиус получается делением длины окружности на (2 x Пи). Там только получившееся значение надо еще домножить на коэффициент в районе 2-3 чтобы было свободное место для букв.

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

> for ($x = 0; $x < $phraseLength; $x++) {
> $screen[$x] = array_fill(0, 75, ' ');
Кстати цикл можно заменить второй функцией array_fill

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

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

Желательно сделать переменные для высоты/ширины поля и использовать их, а не писать магические непонятно как появившиеся числа.

> $screen[$x][$y]
По моему ты путаешь переменные - первой идет y, ведь у нас массив строк, а строки это массивы символов.

> Но мне показалось, ОП слегка дал маху в описаниях решения: там перемножать надо не координату x, которая у нас идёт от cos(), а координату y, которая идёт от sin().
По моему ты перепутал x и y

> И вот какой момент: я что-то напутал с синусоидами, у меня алфавит начинается не сверху, а сбоку, не с 12-ти часов, а с 3-х.
Это нормально, в компьютерной графике обычно угол 0 градусов как раз на 3 часах находится (и угол отсчитыается против часовой, так что 90 градусов получаются на 12 часах). Это исправляется знаком минус перед синусом или косинусом.

> Просто так внести отрицательно значение в $screen[$x][$y] мы не можем.
Мы меняем знак у косинуса/синуса и прибавляем половину ширины/высоты поля. За счет этого даже с отрицательным косинусом/синусом итоговое значение остается в пределах поля.

Синус/косинус дает число от -1 до 1. Допустим радиус у нас 15, получается после домножения от -15 до 15. Если у нас высота поля 40, то можно прибавить к этому например 20, и получается итоговое число от 5 до 35 - в пределах поля. Главное чтобы высота/ширина была не менее 2 радиусов круга.

>>651986

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

>>652010

Переходить на https
Ответы 13 февр Аноним 2016/02/19 04:12:45  №659242 682
>>652040

> Если начальный $angle = -1.5 (в твоем решении, методом тыка подобрано)
Угол там меряется в радианах, Пи радиан = 180 градусов (из чего можно догадаться что 1 радиан это такой угол для которого длина дуги круга равна радиусу). Соответственно надо писать не магическое число 1.5, а либо Пи пополам, либо deb2rad(90), в любом случае логика откуда в коде взялось число, должна быть понятна.

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

>>652169

> $randomWord1 = array_rand($word1,3);
Ты генерируешь 3 случайных ключа, а используешь ниже только один. зачем? Генерируй тогда 1 случайный ключ, тебе же удобнее будет так как он вернется не массивом, а сразу числом.
Аноним 2016/02/19 09:29:27  №659278 683
>>658383>>659230
>>Например валидация - это явно отдельная функция, которую ты почему-то не вынес отдельно. Мы даем функции на вход объект-студента и получаем ответ, правильно ли заполнения информация в нем или нет.
>> Это тоже относиться к валидации?
>Нет, создание и заполнение студента из POST данных это не валидация. Это чтение данных пришедших из формы.
Тогда я не могу понять что я не вынес отдельно. Или все дело в том что в контроллере не должно делаться это? Все должно сразу передаваться в класс Студента и проверяться уже там?
Аноним 2016/02/19 10:55:25  №659306 684
Ну-ка мои друзья пхп-макаки ответьте мне, я пишу вебморду для игрового сервера, у него есть свой апи, запросы принимает гетом и возвращает джсон, так вот, хочу делать запросы не чаще чем раз в минуту, это просто по времени отрегулирую, но как мне лучше получать инфу, в первом контроллере при costruct или каждый раз по-новому, учитывая что при загрузке главной страницы нужно сделать, как минимум, два запроса.
Аноним 2016/02/19 10:57:21  №659307 685
ОП, ты не забыл про мой файлообменник?
https://github.com/V3N0m21/Uppu4

Еще вопрос, что ты думаешь по поводу Magento 2? Годно, или нет? Мне тут дали тестовое задание в контору которая работает с магентой, достаточно сложное как мне кажется, учитывая что я сказал что с магентой никогда не работал. И вот очень многие вещи мне там совсем не очевидны. В роутинге я так до конца и не разобрался, в отображениях. Мне вот интересно, это я такой глупый, или она реально сложная такая?
Аноним 2016/02/19 11:06:45  №659310 686
>>659307
>Мне вот интересно, это я такой глупый, или она реально сложная такая?
А может просто в ней плохая архитектура?
Аноним 2016/02/19 11:25:38  №659322 687
>>659231
Но ведь всё равно надо будет набивать массив $allTraversedPaths всеми пройденными путями, получается, чтобы потом сделать min($allTraversedPaths)?
Не совсем представляю, как это сделать в самой функции.
Мне нужно возвращать каждый раз $traversedPath, чтобы функция саму себя вызывала, $allTraversedPaths я могу из функции в функцию передавать, каждый раз набивая новыми полностью пройденными путями.
А вот как остановить это всё? Поставить условие
if ($traversedPath == NULL) {
$traversedPath = min($allTraversedPaths);
return $traversedPath;
}
Нет, не срабатывает.
Вообще не понимаю, почему в итоге у меня обрывается скрипт, там же не все возможные пути проходит?
Недостаточно памяти на Ideone?
Наверное, пока отложу решение этой задачи, я слишком ни черта не понимаю, что делать дальше.

>>659241
>радиус получается делением длины окружности на (2 x Пи)
Ого, значит, действительно это возможно.
Но я боюсь влезать в такие математические дебри, мне проще было всё руками проставить, конечно.
Меня сейчас пугает то, что я увяз в задачах на два месяца, хотя братишки, которые начинали позже, перескочили пару задач, а теперь уже ООП разбирают, уже "Вектор" сделали и "Кошек-мышек", к "Студентам" подбираются.
>Кстати цикл можно заменить второй функцией array_fill
Хм, не соображу сейчас сходу, как.
>Также, по моему ты перепутал название переменной - тут должна быть $y, и непонятно почему высота поля определяется длиной фразы - логичнее брать 2 радиуса например (с запасом).
Я старался максимально органично вписать круг, чтобы не было пробелов по сторонам, снизу и сверху. И в то же время старался ориентиры найти уже имеющиеся, не подставлять что-то из воздуха. Вот поэтому цикл ограничил длиной самой фразы, показалось это естественным.
>Прибавлять надо половину высоты поля, так чтобы круг был точно по центру. Для x - прибавлять половину ширины.
>Желательно сделать переменные для высоты/ширины поля и использовать их, а не писать магические непонятно как появившиеся числа.
Хм, сложновато мне всё сообразить сейчас.
>По моему ты путаешь переменные - первой идет y, ведь у нас массив строк, а строки это массивы символов.
>По моему ты перепутал x и y
Почему? У меня x - это косинус, а y - это синус. Вроде так и должно быть, судя по твоим подсказкам? Я уже не помню алгебру, я даже не смотрел в Сети ничего дополнительно - просто подставил формулы из твоей подсказки, всё вроде бы сработало. Но потом долго возился с числом для того, чтобы домножить, и т.п.
>Мы меняем знак у косинуса/синуса и прибавляем половину ширины/высоты поля.
Вот никак не соображу, что там с половиной ширины/высоты, ну что ты будешь делать.
Я просто всё совсем по-другому себе представил, сейчас сложно вникнуть в другое, нужно засесть и разобраться.
Спасибо за такие подробные и толковые советы, брат!
Аноним 2016/02/19 11:30:28  №659325 688
Как кошерно отдавать данные в браузер используя связку slim+twig? В студентах я просто подключал шаблон через include('template.html'), здесь я так понимаю нужно что-то типа такого http://pastebin.com/uWZTuR4A ?
Аноним 2016/02/19 11:55:28  №659338 689
>>659325

Просто пиши

$app->render(....);
Аноним 2016/02/19 12:05:03  №659342 690
>>659338
Блин, надо доки читать внимательнее. Спасибо, анон.
Аноним 2016/02/19 14:19:40  №659425 691
Аноним 2016/02/19 14:48:57  №659447 692
>>659425
либо сам пиши функцию, либо гугли mb str replace. Вангую, что её уже двадцать раз написали.
https://github.com/V3N0m21/Uppu4/ Аноним 2016/02/19 15:34:35  №659478 693
>>652226

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

В случае попытки обхода CSRF надо поступать так:

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

https://github.com/V3N0m21/Uppu4/blob/master/Uppu4.sql#L37
> `parent` int(11) DEFAULT NULL
Где внешний ключ?

https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L32
> $app->redirect("/login?from=$route&notify=authorization_required");
Почему данные не экранируются при подстановке в параметры URL? Урок https://github.com/codedokode/pasta/blob/master/network/urls.md

https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L49
> if (file_exists($_FILES['load']['tmp_name']) && $_FILES['load']['error'] == 0) {
Там должен быть не 0, а константа http://php.net/manual/ru/features.file-upload.errors.php

https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L51
> $fileHelper = new FileHelper($app->em);
Это лучше сделать сервисом в слиме

> $fileHelper->fileValidate($_FILES['load']);
> if (empty($fileHelper->errors)) {
Все-таки мне не нравится это разделение, одной функцией делаем валидацию, а потом смотрим какое-то другое поле. Такое разделение функции и ее результата только усложняет понимание кода. Пусть validate сразу возвращает список ошибок.

https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L74
> $errors = $validation->validateUserData($app->request->post());
> $user = $app->userHelper->saveUser($user, $app->request->post());
Мне не нравится такой подход. Ты делаешь валидатор не для модели пользователя, а для массива который приходит из формы. Таким образом, знание о структуре формы расползается из вью и контроллера еще и в модель. Надо из POST данных сделать модель пользователя, а ее уже валидировать. Там правда могут быть поля, которых нет в модели - вот их можно передавать отдельно массивом или переменными.

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

https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L91
> $redirect = $app->request->get('from');
Нужно делать проверку что эта переменная ведет на твой сайт, а не посторонний. Разумеется проверку надо вынести в функцию.

> $notification = $app->request->get('notify');
Если это везде используется, можно это вынести вверх из обработчиков

> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L125
> $list[$count[1]] = $count[2]
В доктрине можно указать алиасы для полей и тогда они будут доступны под этими именами, а не под ключами-цифрами.

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#query-result-formats

Также, эти 2 запроса

> $users = $app->em->getRepository('Uppu4\Entity\User')->findBy([], ['created' => 'DESC']);
> $filesCount = $app->em->createQuery('SELECT IDENTITY(u.uploadedBy), count(u.uploadedBy) FROM Uppu4\Entity\File u GROUP BY u.uploadedBy');
Есть смысл объединить в один, выбирающий пользователя + число его файлов. И кстати, сделай-ка вывод еще и объема файлов. И чтобы таблицу можно было сортировать по объему/кол-ву/дате регистрации.

https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L132
> $user = $app->em->getRepository('Uppu4\Entity\User')->findOneById($id);
> $files = $app->em->getRepository('Uppu4\Entity\File')->findByUploadedBy($id);
В доктрине это делается так: $files = $user->getFiles(), надо только настроить связи между сущностями, у тебя они вроде есть.

> $app->em->getRepository('Uppu4\Entity\User')->findOneById($id);
$app->em->find('Uppu4\Entity\User', $id);

И кстати чтобы не писать везде эти Uppu4\Entity, можно настроить в доктрине алиасы, и будет например 'uppu:User': http://stackoverflow.com/questions/5208044/what-are-the-entities-namespaces-and-alias-in-doctrine2/5276687#5276687

> $app->delete('/view/:id/'
Вот попробуй это прочитать: DELETE /view/:id. Как минимум нелогично. Логичнее было бы DELETE /file/:id - нет? переименуй-ка. В REST путь обозначает не действие (view), а ресурс над которым можно делать операции (file).

https://habrahabr.ru/post/251193/
Также, раз ты изучаешь REST, почитай про HATEOAS - может пригодится на собеседовании или вдруг тебе поручат проектировать какое-нибудь АПИ.

Ну и на хабре про REST много статей: https://www.google.ru/search?q=habr+rest+api&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&newwindow=1&gbv=1

https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L172
> $user = $app->em->find('Uppu4\Entity\User', $app->request->params('userId'));
Это что? Можно от имени любого пользователя постить?

> $validation = new \Uppu4\Helper\DataValidator;
> $commentHelper = new CommentHelper($app->em);
Это надо сделать сервисом в Слиме. А то сейчас куча нью раскидана по коду.

https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L181
> $app->render('comments.html', array('comments' => $comments));
Почему в ответ на ПОСТ рендерится страница? Если это не-аякс то надо редиректить. Если аякс - то рендерить всю страницу незачем. Надо лишь отрендерить массив новых, отредактированных или удаленных комментов и отправить его на клиента. Клиент вставляет их в нужные места дерева ДОМ.

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

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

https://github.com/V3N0m21/Uppu4/tree/master/public/js
Не надо перемешивать свой код и код бутстрапа. Бутстрап надо поместить в отдельную папку, где кроме него ничего нет. Это облегчает как анализ кода так и обновление сторонней библиотеки.

https://github.com/V3N0m21/Uppu4/ Аноним 2016/02/19 15:35:03  №659479 694
>>652226

https://github.com/V3N0m21/Uppu4/blob/master/public/js/comments.js#L2
> $(document).ready(function(){
> $("#commentButton").click(function(){
У этого подхода есть недостаточек: обработчик будет повешен только когда загрузится весь HTML файл и появляется окно между появлением кнопки и назначением на нее обработчика. Я вижу тут такие решения:

- назначать обработчик через атрибут onclick=""
- скрывать/дизаблить кнопку до назначения на нее обработчика

> $("#commentButton").remove();
> $(".commentReply").remove();
Что за странные вещи? Зачем удалять кнопки? Их надо блокировать на время отправки запроса, а не удалять. В случае с кнопкой "ответить", которых может быть сотни, искать их всех через $(".commentReply") крайне неэффективно. Вместо этого надо вешать CSS класс на блок комментариев, например 'comment-reply-disabled'.

Вообще, с JS все плохо. Паста

---------

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

- индикатор прогресса операции
- вывод сообщений об ошибках
- возможность повторить операцию

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

- индикацией прогресса ( http://www.ajaxload.info/ http://preloaders.net/ ). Пользователь должен (не только при аякс запрсе, а всегда) иметь обратную связь и видеть состояние системы: идет обработка данных, успешно обработано, произошла ошибка. Ты можешь не показывать индикатор прогресса только в случаях когда обработка запроса происходит очень быстро (менее 100 мс) - тогда можно сразу показать сообщение с результатом операции.

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

- возможность при некоторых ошибках повторить запрос

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

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

---------

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

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


От робота:

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

В файле ./app/bootstrap.php:
В функции createDoctrineConfig аргумент $cache можно пометить тайп хинтом с именем класса.

В файле ./app/bootstrap.php:
В функции bootstrapAddTreeExtension аргумент $evm можно пометить тайп хинтом с именем класса.

В файле ./app/Entity/MediaInfo.php:
В методе MediaInfo#setMediaInfo аргумент $finfo можно пометить тайп хинтом с именем класса.

В файле ./app/Helper/DataValidator.php:
В методе DataValidator#validateUserData аргумент $data можно пометить тайп хинтом array.

В файле ./app/Helper/FileHelper.php:
В методе FileHelper#fileValidate аргумент $data можно пометить тайп хинтом array.

В файле ./app/Helper/FileHelper.php:
В методе FileHelper#fileSave аргумент $data можно пометить тайп хинтом array.

В файле ./app/Helper/UserHelper.php:
В методе UserHelper#saveUser аргумент $postParams можно пометить тайп хинтом array.

В файле ./app/templates/list.html:
Слеш в конце одиночного тега (<input type="hidden" name="_ME…TE"/>) используется только в XHTML и XML, в HTML он не ставится.

В файле ./app/templates/users.html:
Слеш в конце одиночного тега (<input type="hidden" name="_ME…TE"/>) используется только в XHTML и XML, в HTML он не ставится.

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

https://github.com/V3N0m21/Uppu4/blob/master/app/Entity/File.php#L86
пустой метод

https://github.com/V3N0m21/Uppu4/blob/master/app/Entity/User.php#L103
Вот такое преобразование к цифре не всегда хорошая вещь - например можно не так использовать объект, а он будет молча преобразован в строку вместо выдачи ошибки. Или костыль для doctrine extensions?

https://github.com/V3N0m21/Uppu4/blob/master/app/templates/comments.html#L15
> <p><span>ответить</span></p>
> <h4>Нажмите чтоб написать комментарий</h4>
Для кнопок есть тег button. И вообще, что-то у тебя верстка слабоватая, может тебе задачки на HTML стоит порешать?

> https://github.com/V3N0m21/Uppu4/blob/master/app/templates/comments.html#L25
> <p style="color:green">>
Знак > надо экранировать, стили должны быть в CSS. А, это закомментировнный код - тогда его надо удалить.

https://github.com/V3N0m21/Uppu4/blob/master/app/templates/list.html#L20
Смесь английского и русского в интерфейсе

https://github.com/V3N0m21/Uppu4/blob/master/app/templates/login_form.html#L10
> "/login?from={{redirect}}
Нет экранирования. Лучше наверно через скрытый инпут это передавать.

https://github.com/V3N0m21/Uppu4/blob/master/app/templates/register.html
В форме кроме required можно исопльзовать и другие атрибуты валидации: pattern, макс. длина. Используй title чтобы задать сообшение при ошибке.

В комментарии пользователя к файлу - везде ли сохраняются переводы строк?
Аноним 2016/02/19 15:35:22  №659480 695
Аноним 2016/02/19 15:40:39  №659487 696
Палиндром

ребят объясните пожалуйста что делает (/2)

$hanfLenght = floor($length/2);
Аноним 2016/02/19 15:41:26  №659489 697
ОП, а что случилось с http://archive-ipq-co.narod.ru/l1/reading-list.html, куда делись все задачки на знание HTML, все эти выровнять блоки так и сяк?

>>659425
preg_replace, флаг i и u в регулярках.
Также у тебя там не регулярки подставляются, а символы, поэтому не работает.
Аноним 2016/02/19 15:42:14  №659491 698
>>659487
или это знак дроби ? тип $length.2
Аноним 2016/02/19 15:42:39  №659492 699
>>659487
Што? Делит число на 2.
А floor() округляет его до целого.
Аноним 2016/02/19 15:43:13  №659493 700
Пытался поставить по отдельности apache, php, mysql, но в процессе меня отвлекли и получилось продолжить только через большой промежуток времени. Разбираться заново было лень и хотелось поскорее приступить непосредственно к самому программированию, а не заниматься настройками, поэтому я удалил всё и поставил xampp. Однако столкнулся вот с такой ошибкой.

Apache Service detected with wrong path
Change XAMPP Apache and Control Panel settings or
Uninstall/disable the other service manually first
Found Path: "C:\Apache24\bin\httpd.exe" -k runservice
Expected Path: "c:\xampp\apache\bin\httpd.exe" -k runservice

Папка удалена, в настройках переменных среды я такого пути не нашел, в процессах httpd.exe тоже не светится. Помогите решить.
Аноним 2016/02/19 15:44:01  №659494 701
>>659492
то есть он его делит а потом округляет как-то так?
Аноним 2016/02/19 15:44:36  №659496 702
Кстати, некоторые тут пишут что они хотят изучить CMS или написать свою. Пожалуйста, вот для вас задача:

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

Возможности:

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

Для реализации надо использовать минимум самописных велосипедов. Рекомендую набор:

- для БД - доктрина
- для авторизации - что-нибудь из симфони
- для админки - sonata

Как альтернатива можно попробовать сделать то же на Юи 2.
Аноним 2016/02/19 15:46:08  №659498 703
>>659489

> Чтобы научиться верстать, я сделал для тебя курс задач для изучения HTML и CSS: https://github.com/codedokode/pasta/blob/master/html/html.md. Начинается он с простых задач, а заканчивается версткой полноценного макета сайта.

> Также у тебя там не регулярки подставляются, а символы,
preg_quote + разделители

>>659487

деление, читай первый урок в учебнике.

Аноним 2016/02/19 15:47:14  №659501 704
>>659493

Ты апач не удалил из сервисов. Алсо советую удалить XAMPP и поставить все же настоящий апач.
Аноним 2016/02/19 15:49:03  №659504 705
>>659498
Спасибо. Очень удобно.
Аноним 2016/02/19 15:55:12  №659510 706
>>659501
Спасибо.
>Алсо советую удалить XAMPP и поставить все же настоящий апач
Почему?
Аноним 2016/02/19 16:01:31  №659518 707
14558868911200.jpg (778, 1199x1799)
1799x1199
ОП. Прошу проверить:
1. Задача "Вектор" + Антикризисные меры (полностью переделал вектор после твоих комментариев, теперь намного лучше всё скомпоновано). Читаю из ОП-поста Мэтт Зандстра(хорошая книга, спасибо), пытался использовать оттуда знания почерпнутые(в частности, static и new static), оцени, уместно ли это сделал.
Антикризисные меры заккоментированы, их надо по одному расскоментировать для использования.
http://ideone.com/qq6I8O

2. Кошки-мышки Уж не мог и помыслить, что когда-нибудь решу такую задачу. Оче понравилась, провёл много часов настраивая и играя с ней. Прямо душа радуется.
Сразу хочу сказать, что: a) не расставлял закрытость переменных(все public) и b) не заканчивал игру на смерти мышей, т.к. мне так понравилась программа, что я решил её усовершенствовать и добавить новые правила, персонажей и т.п. Проверь так пока, пожалуйста. Должна работать на любом поле с любыми условиями, очень много времени убил на устранение всех багов. как думаешь, такую задачу можно в своё будущее резюме вставлять? Или для нормальных погромистов это ерунда элементарная?
http://ideone.com/wIy9wF

Также вопрос: готов ли я после всего этого к Студентам? (задачу на Лайки в sql сделал, ты проверял).
Аноним 2016/02/19 16:13:33  №659529 708
>>659510

Потому что так тебе надо изучать только особенности апача, а в случае xampp еще и его особенности. Я не использую сборки и по ним ничего сказать не могу.
Аноним 2016/02/19 16:14:28  №659530 709
>>659518

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

Надо чтобы выводились все сценарии, а не один.
Аноним 2016/02/19 16:41:32  №659556 710
Аноним 2016/02/19 17:02:35  №659567 711
>>659556

> public function setSalary($x) { $this->salary = $x; }
Не надо так экономить место

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

> $arrayOfMen
лучше просто men или employees

> public function getStatistic()
Эту функцию логично разбить на 3 отдельных для каждого параметра. Никакой выгоды от того что мы их объединили в длинную простыню нету. И результат удобнее иметь числом, а не массивом.

> public static function makeHimBoss(array $arrayOfMen)
Очень странная функция: зачем передавать массив работников чтобы тлько первого сделать боссом? Ну и ей явно не место в этом классе.

> public function addNewStaffMember(array $men)
А где метод добавления одного работника? Неудобно же без него.

> public function __clone()
зачем пустая функция clone?

> в итоге использую "===" для проверки того, идентичные ли объекты. Правильно всё?
Да только искать можно через array_search с нужным параметром

> if($spaces>0) { $string=mb_str_pad($string, mb_strlen($string) + $spaces, " ", STR_PAD_RIGHT); }
Это надо писать в 3 строки

> $AdsDep = new Department();
> $men = Marketing::create(1, 15);
> $AdsDep->addNewStaffMember($men);
> $men = Marketing::create(2, 10);
Нужно бы убрать эту копипасту, описать работников массивом и создавать из него.

> function showTable($BuyingDep, $SellingDep, $AdsDep, $LogisticsDep)
Лушче передвать массив департаментов или объект Компания. Надо переделать функцию чтобы она работала с любым числом департаментов.

Антикризисные меры надо реализовать в ООП стиле. Например, мы можем сделать класс АнтикризисныйМенеджмент, у него методы применить1Вариант, он получает на вход Компанию или Департаменты и делает над ними манипуляции.

> $BuyingClone = clone $BuyingDep;
Этого недостаточно. Ты клонируешь объект департамента, но работники в нем остаются те же (копируются ссылки на них, а не делается новая копия), так как в php клонирование не глубокое. Надо использоать магический метод clone.

Также, непонятно почему клонированием занимается фукнция антикризисных мер?

> if ($man === $fired) {
> unset($department->staff[$id]);
Нарушение инкапсуляции. Список работников надо закрыть от внешнего доступа и им должен управлять департамент.

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

Получить часть массива удобно с помощью array_slice.


Аноним 2016/02/19 17:09:19  №659575 712
>>659567
>Надо использоать магический метод clone.
Да я уже сам понял, что неправильно сделал, т.к. сотрудники те же остаются... Как реализовывать clone? Не могу нагуглить.

можно ли так сделать:
__clone(){
foreach ($this->staff as & $man){
$manClone = clone $man;
}

будет работать?

Аноним 2016/02/19 17:10:08  №659577 713
>>659575
т.е.
__clone(){
foreach ($this->staff as & $man){
$man = clone $man;
}
Аноним 2016/02/19 17:22:05  №659593 714
>>659575

создать новый массив содержащий клоны всех сотрудников.
Аноним 2016/02/19 17:23:53  №659597 715
>>659567
cпасибо за разбор. И не думал, что так много ошибок наворочу.

Буду разбираться
Аноним 2016/02/19 18:27:20  №659662 716
палиндромом

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

После этого мы проходим от края до середины посимвольно, на каждом шаге берем по 1 символу с начала и конца строки и сравниваем.
Аноним 2016/02/19 20:05:07  №659826 717
Аноним 2016/02/19 20:10:06  №659837 718
>>659826

Там теперь каждый обработчик должен вернуть в итоге Response из PSR-7. Логично: на вход получаешь Request + заготовку Response, на выходе даешь Response.

http://www.slimframework.com/docs/objects/response.html

Для использования шаблониатора надо (один раз) сделать сервис View, и рендерить шаблон через него

return $this->view->render($response, ....)

http://www.slimframework.com/docs/features/templates.html

Аноним 2016/02/19 20:11:36  №659839 719
>>659662

Как делаются повторяющиеся действия? Циклом конечно.

на 1-м шаге цикла берешь и сравниваешь 1-й с начала и 1-й с конца символы
на 2-м шаге цикла берешь и сравниваешь 2-й с начала и 2-й с конца символы
...


Получить N-й символ с конца или начала можно через mb_substr, вроде она описана в уроке.

Аноним 2016/02/19 20:58:21  №659966 720
Аноним 2016/02/19 21:14:26  №660028 721
Надо вставить на сайт на вордпресс, примерно 50 страниц с дополнительным функционалом, который использует в своей работе jQuery, функционал будет добавляться по мере его написания, сам функционал довольно похожий. Как это лучше организовать? Создавать для каждой такой страницы отдельный шаблон страницы? Или как-то вставлять через через записи?
Аноним 2016/02/19 21:55:51  №660193 722
>>660028

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

Копипаста почти всегда дает на выходе неподдерживаемый код. Избегай ее.

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

> Создавать для каждой такой страницы отдельный шаблон страницы? Или как-то вставлять через через записи?
Не знаю, зависит от ситуации. Код вставлять в админку по моему глупая затея, код должен быть в файлах на диске. И без копипасты.
Ответы 13-14 февр Аноним 2016/02/19 21:56:25  №660197 723
>>652345

> А вообще можно ли как-то это всё вычислять из количества букв, как мы делаем с углом? Может, тоже как-то надо к 360-ти градусам привязать?
Коэффициент нужен из-за того что буквы не квадратные, а прямоугольные, вытянутые в высоту. Надо знать соотношение в шрифте - проще подобрать. По моему там в районе 1.5 - 1.8 число.

>>652541

Напиши

>>652617

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

>>652816

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

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

Чтобы написать свой сайт, надо как минимум знать HTML/CSS/JS + серверная часть: SQL + PHP, чтобы настраивать сервер, нужно изучать линукс, командную строку, bash, ssh.

>>652979
>>653550

> function inclineWord($discharge, $key) {
Лучше просто передавать в функцию 3 формы слова через аргументы, а у тебя зачем-то в нее уже заложено несколько вариантов и надо передавать непонятное число.

Также ты не учел что числа 11...19 склоняются особо, не так же как 1..9

> 11 => ' одиннадцать',
Мне не нравится этот пробел, непонятно почему в одних словах он есть, а в других нет.Добавляй его в другом месте.

> $hundred = mb_substr($number, -3);
Для работы с числами надо использовать математику, а именно $x % ... и floor($x/...).

> 0 => '/ десять один/',
Это костылища, надо с самого начала вставлять правильное слово. То же касается и замены числа ноль - надо изначально правильно обрабатывать такие ситуации. А твое решение с заменой сильно усложняет код и непонятно вообще, всегда ли он правильно работает или нет.

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

Функция smallNumberToText слишком большая, разбей ее хотя бы на 2 функции.

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

>>653010

А в чем проблема-то? Не вижу. Просто называй функции нормально, не success, а например didReceiveGeolocation или handleGeolocationSuccess

Так есть промизы, но в твоем случае они не нужны.
Ответы 13-14 февр Аноним 2016/02/19 21:56:46  №660200 724
>>653044

Надо нормально именовать функции. Вместо success: ajaxSuccess пиши success: function () { handleAjaxResponse(a, b, c, d ); }

> data: "lng=" + longitude + "&ltd=" + latitude,
Читай мануал по функции ajax. Непраивльно так делать.


>>653570

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

>>653620

Неправильные советы даешь. Функция там не должна что-то выводить или заверать программу - это не ее задача.

Там должен быть return, а не echo или exit.

>>653657

Отвечал выше

>>653739

В википедии написано, если не знаешь: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0

>>653678

JS код логично выносить в JS файл и подключать стандартной функцией вордпресса.

> но там стандартный шаблон страницы довольно сложноватый и я не понимаю как сделать так, чтобы не сместился боковой слайдер.
Я тут вряд ли могу чем-то помочь
Ответы 13-14 февр, граммар наци Аноним 2016/02/19 21:57:09  №660203 725
>>653722

> $allreg=array($reg1=>"Жи Ши пиши через И",$reg2=>"нет пробела после знака препинания",$reg3=>"нет запятой после а или но",$reg4=>"Присутствует слово «координально» или «сдесь», «зделал», «зделаю», «зделан»");
Вот тут надо разбить массив по строкам, а то читать тяжело.

> foreach($allreg as $i=>$j){
Нужны нормальные названия вместо i и j, например search/replace. Ну как читать код когда там однобуквенные переменные и непонятные сокращения?

Ошибку в слове "жызнь" твой код не видит: http://ideone.com/NPAlzF - ты забыл про регистр букв и флаг i.

[^\\s] это то же самое что и \\S

> [^,](\\s+(а|но))\\s+
Эта регулярка может срабоать например если перед "но" стоит 2 пробела: [^,] захватит первый пробел, а \\s+ - второй. Вдобавок, оно вообще не работает: http://ideone.com/oHizDK

Границу слова лучше определять не по пробелу, а по \\b - иначе выражение не сработает если после "но" идет запятая.

> .$math[0][1]
Все выражение попадает в элемент массива номер 0, то есть не надо ставить скобки в каждой регулярке.

Также, preg_match_all может найти несколько непраивльных слов, но ты выводишь только первое. Вот например: http://ideone.com/JhpgP8 (опять, почему-то не нашел ошибки)

> [^\\s][!,;:?.]
Это выражение тоже неправильно, оно ищет вообще любые знаки препинания перед которыми есть буква.

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

>>653745

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

>>653850

php -l проверяет только синтаксис, то есть правильно ли скобки и запятые расставлены. А есть такая функция или нет он знать не может - вдруг она где-то в другом файле определена?

Можешь погуглить статические анализаторы кода, но в твоем случае наверно проще запустить скрипт.
Ответы 14 февр, граммар наци Аноним 2016/02/19 21:57:36  №660204 726
>>653865
>>653870
>>653869
>>653870
>>653936

Скорее всего там ошибка в SQL запросе или нет таблицы, или доступа к БД, база ругается, но код игнорирует ошибку и просто возвращает $results = false, а уже из-за нее ошибка в foreach. Насколько я знаю, тот же mysqli по умолчанию скрывает ошибки от базы данных - может это тот случай?

>>654377

Я не знаю таких готовых скриптов.


>>654752

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

>>654916

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

>>654961

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

Отформатируй код роботом из второго поста.

> 45 %
> до 6. 5
Зачем тут пробел?

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

>>654963

Не знаю

>>655000

> Не имеет смысла разносить echo по разным строкам, лучше сделать одной строкой.
Можно и так, почему нет.

>>655061

я нет
Аноним 2016/02/19 23:06:29  №660339 727
>>659577
Ты разобрался с этим? А то я тоже делаю эту задачу, но таким способом не получается. IDE даже показывает, что первая переменная не используется
Аноним 2016/02/19 23:17:30  №660367 728
Анон, мучаюсь не могу скомпилить. Помоги пожалуйста.
http://ideone.com/yuixH0
Аноним 2016/02/19 23:23:46  №660374 729
>>660367
Фигурная скобка пропала снизу.
Аноним 2016/02/19 23:26:15  №660376 730
Аноним 2016/02/19 23:35:39  №660407 731
>>660339
Всё, нашёл. Перед значением в условии нужно амперсанд поставить
Аноним 2016/02/20 00:10:24  №660489 732
>>660407
Покажи, как ты сделал, я так и не смог заставить нормально работать
Аноним 2016/02/20 00:23:39  №660511 733
Аноним 2016/02/20 00:35:40  №660539 734
Fatal error: Call to a member function fetch() on a non-object in A:\home\localhost\www\project\models\News.php on line 26
http://ideone.com/C9iOyS
Анон выручай.
Аноним 2016/02/20 00:39:14  №660547 735
>>660539
Он же пишет что переменная $result не является объектом. Делай вар_дамп, смотри что у тебя там. От этого отталкивайся и исправляй.
Аноним 2016/02/20 00:40:13  №660548 736
>>660511
Да, у меня в принципе так же, на самом деле, работает моя версия clone(), не знаю, почему сначала показалось ,что не работает.

Аноним 2016/02/20 00:46:42  №660557 737
>>660547
bool(false)- вардамп вернул
Я так понимаю, нихуя там нет. А должен біть запрос с БД...
Аноним 2016/02/20 00:50:23  №660567 738
>>660557
А теперь идешь в мануал и читаешь http://php.net/manual/en/pdo.query.php
>PDO::query() returns a PDOStatement object, or FALSE on failure.
Значит, очевидно произошла ошибка.
Поставь PDO в режим выбрасывания исключений при ошибках вот так
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
И смотри в чем ошибка у тебя в запросе.
Аноним 2016/02/20 00:58:59  №660596 739
>>660567
Это прям в этом классе можно написать, или в заголовочном ?
Аноним 2016/02/20 01:00:27  №660600 740
>>660596
После того как объект PDO создаешь.
$db = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Аноним 2016/02/20 01:05:31  №660618 741
>>660600
Нифига не выводит
Аноним 2016/02/20 01:10:30  №660634 742
>>660600
Я уже думаю, а может все дело в ошибке подключения ?
Аноним 2016/02/20 01:13:17  №660637 743
>>660618
Что именно не получается? Должно исключение выбросить.
>>660634
Может быть и в этом, попробуй localhost на 127.0.0.1 поменять.
Аноним 2016/02/20 01:17:27  №660643 744
>>660637
Попробовал, тогда точно нет. Как проверить успешность соединения с БД ?
Аноним 2016/02/20 01:19:57  №660646 745
Аноним 2016/02/20 01:22:06  №660650 746
>>660596

Включи отображение ошибок

display_errors = On в php.ini
Аноним 2016/02/20 01:23:28  №660653 747
>>660643

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

У тебя просто отображение ошибок не включено.

Вообще по моему ты рановато за базы данных взялся, разберись сначала как ошибки отображать хотя бы или логи почитай.
Аноним 2016/02/20 01:26:00  №660658 748
>>660653
Да пытаюсь свою первую недоMCV сделать, опыта 0, но имеется опыт ООП на крестах.
Аноним 2016/02/20 01:54:04  №660677 749
>>660658

> $newsList['id'] = $row['id'];
Почему нормальную модель не сделаешь, зачем городишь много мерные массивы? Еще и скопипастил 4 строки подряд.

> while($row = $result->fetch()){
Есть fetchAll, в твоем случае вообще достаточно $result = ...fetchAll

Создание ПДО надо вынести из класса наружу.

> 'SELECT id, title, date, short_content'
> .'FROM news'
В php можно вставлять переводы строк

Вот зря ты основы языка пропускаешь, зря.

Аноним 2016/02/20 07:41:18  №660749 750
Товарищи помогите пожалуйста

Палиндром
Напиши программу, проверяющую, является ли строка палиндромом.

http://ideone.com/Z7XlvP

Вроде бы все правильно но почему-то не работает
Аноним 2016/02/20 08:28:39  №660754 751
>>660749
тут есть кто живой???
Аноним 2016/02/20 09:13:22  №660760 752
>>660754
Попробуй var_dump проверить что у тебя в $letter1 и $letter2
Аноним 2016/02/20 09:22:41  №660761 753
>>660760
$letter1 и $letter2 вытаскивает буквы из строки
Аноним 2016/02/20 09:23:58  №660762 754
>>660760
(42) "арозаупаланалапуазора"
string(2) "а"
Аноним 2016/02/20 09:26:42  №660763 755
>>660749
>$letter1 = mb_substr($a,0);
Какой символ это даёт?
>$letter2 = mb_substr($a,-1);
А это какой символ даёт?
Делай >>660760 и разберись с тем, какие параметры надо указывать в mb_substr(), чтобы получить символ с начала текста и символ с конца.
>>660761
Это переменные, в которые записывается результат работы функции, а у тебя там неправильно даны ориентиры для вырезания букв.
Также у тебя цикл for и переменная $i - её надо использовать в этой функции, чтобы последовательно в каждом цикле проходить по строке с начала и с конца, сравнивая символы.
Попробуй для начала хотя бы простого сравнения двух символов добиться.
>>660762
Это означает, что в $letter1 ты сразу записываешь всю строку - и дальше без изменений, а в $letter2 записываешь только конечную букву "а" - и тоже без изменений.
Ориентиры для работы функции не верны, разберись с ними.
Аноним 2016/02/20 09:39:14  №660766 756
>>660763
хорошо спасибо буду разбираться
Аноним 2016/02/20 09:45:23  №660767 757
Почему не игнорится блядский .htacces ?

*.log
composer.phar
public/.htaccess

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

Аноним 2016/02/20 09:58:48  №660769 758
Поворчу немного.
Тредом ранее >>639969 меня ругали за if ($debug) error_reporting(-1).

Сегодня открыл учебник ОПа. inb4: давно пора И что я вижу?
> Далее идет инструкция error_reporting(-1);. Эта команда включает отображение всех возможных предупреждений (без нее выводятся не все).

У меня всё.
Аноним 2016/02/20 11:40:24  №660801 759
>>660677
Тогда посоветуй что-то для быстрого старта.
Аноним 2016/02/20 14:05:11  №660930 760
проверьте задачку на палиндром

http://ideone.com/Z7XlvP

>>660763
я не много не понел где я должен был использовать $a кроме как в сомом цикле ну всм в ()

но сейчас все вроде работает
Аноним 2016/02/20 14:06:32  №660932 761
сомом уфффф
самом*
Аноним 2016/02/20 14:08:51  №660933 762
Аноним 2016/02/20 14:25:47  №660943 763
Аноним 2016/02/20 16:05:43  №661032 764
>>660930
>>660943
http://ideone.com/K5OpQl
Ты немного не уловил суть того, что нужно сделать.
Тебе нужно брать символ с начала текста ("а" в твоём примере), брать символ с конца текста (тоже "а"), сравнивать их - и в зависимости от результата либо продолжать цикл, либо обрывать и выводить "Не палиндром".
После того как ты проверил первые символы с начала и конца текста, тебе надо передвигаться на один символ к середине с обеих сторон текста.
Надо проверять "р" в слове "роза" и "р" в слове "Азора" - конкретно и грубо говоря. У тебя там образуется последовательность букв после пропускания через все эти mb_strtolower и preg_replace, там у тебя "арозаупаланалапуазора". Вот по этому тексту ты и должен идти с начала и с конца до середины, сравнивая буквы.
У тебя есть изменяющаяся при прохождении цикла переменная $i - вот и используй её, подставляя туда, куда нужно, в функцию mb_substr. От переменной можно отнимать в функции, можно прибавлять, можно ставить знак "минус" перед ней - и она станет с отрицательным значением.
В самом цикле должно быть, как минимум, два условия, а лучше даже три:
1. Буквы спереди и сзади текста совпадают - продолжаем цикл, можем вывести эти буквы с начала и с конца в echo для наглядности.
2. Буквы с начала текста и с конца не совпадают - выводим результат "Это не палиндром" и обрываем цикл.
3. Переменная $i равняется переменной $halflength - выводим результат "Это палиндром".
Аноним 2016/02/20 16:14:31  №661039 765
>>660943
У тебя же получилось в таком виде, что раз двадцать в цикле сравнилась "а" первая с "а" последней. В середине можно писать что угодно, получается, всё равно посчитает это палиндромом.
Аноним 2016/02/20 17:06:09  №661081 766
https://dash.generalassemb.ly - интересные и простые уроки.
Посоветуйте подобного побольше.
На codeacademy не такое всё, htmlacademy и т.п.
Может, что-то ещё есть подобное?
Аноним 2016/02/20 17:23:40  №661090 767
>>660769

Ты не так понял. Нелогичным мне показалось что error_reporting(-1) стоит внутри ифа. Получается, если режим отладки не включен, часть ошибок можно игнорировать? Почему? Разве не абсурдно? Ошибка - это всегда ошибка и нельзя ее игнорировать.

Если ты поставишь просто

error_reporting(-1);

это в общем ок, хотя лучше конечно еще в php.ini это продублировать.
Аноним 2016/02/20 17:31:32  №661098 768
Не работает placeholder для order by в mysql. Из-за этого все placeholder'ы после него ломаются. Что делать, товарищи?
$query = "SELECT * FROM abiturient ORDER BY $sort DESC LIMIT :recordsPerPage OFFSET :recordNumber";
$stmt = $this->pdo->prepare($query);
$stmt->bindValue(':recordsPerPage', $recordsPerPage);
$stmt->bindValue(':recordNumber', $recordNumber);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_CLASS, 'Abiturient');
$abiturients = $stmt->fetchAll();
return $abiturients;
Аноним 2016/02/20 17:33:19  №661100 769
>>661098
Быстрофикс. Это я уже заменил placeholder обычной переменной когда это все работает. Я хочу именно чтобы было
$query = "SELECT * FROM abiturient ORDER BY :sort DESC LIMIT :recordsPerPage OFFSET :recordNumber";
$stmt->bindValue(':sort', $sort);
Аноним 2016/02/20 18:19:10  №661131 770
>>661090
Теперь понял тебя.
Аноним 2016/02/20 18:28:12  №661137 771
>>661098

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

Тебе придется вставлять имя переменной, но не забудь в этой же функции сделать проверку значения этой переменной по списку разрешенных знаечний, чтобы не было уязвимости.
Аноним 2016/02/20 18:37:43  №661142 772
Вечер добрый, я только начинаю изучать пхп и запнулся на задачке с айфоном отсюда http://archive-ipq-co.narod.ru/l1/loops.html

Пытаюсь зделоть вот так http://ideone.com/wRdYSo но чёт ничего не выходит. Дайте совет штоле.
Аноним 2016/02/20 18:48:27  №661151 773
>>661142
Условие свое в начало цикла перенеси.
Аноним 2016/02/20 18:59:33  №661158 774
>>661151
Изменил немного, но ответ всё равно не сходится. Почему - то у меня выходит на 1000 меньше и на 1 месяц меньше.
Аноним 2016/02/20 20:25:53  №661256 775
>>659837
Сделал, спасибо. Ещё вопрос: какие объекты из контроллера мне доступны в шаблоне? Только тот массив, который передаётся третьим параметром в render()?
Аноним 2016/02/20 20:57:42  №661284 776
Скоро придется работать с Yii, подскажите чего почитать хорошего? Можно и на английском.
Аноним 2016/02/20 21:09:04  №661294 777
>>661032
ууухх что за сложности я думал все проще
Аноним 2016/02/20 21:32:34  №661316 778
>>661142
В тот момент, когда у тебя $creditBalance становится меньше 5000, а именно - становится 4138, он попадает в условие if ($creditBalance < 5000).
В нём $monthlyPayment меняется с 5000 на 5270 где-то (сделай var_dump в этом месте, всё увидишь). А далее именно его ты отнимаешь в $creditBalance = ( $creditBalance * $percent ) + $servicePayment - $monthlyPayment;, обнуляя $creditBalance, он становится равным нулю и идёт в последний вывод echo.
А в $paymentTotal = $paymentTotal + $monthlyPayment; ты просто плюсуешь эту сумму в 5270.
Получается, у тебя теряется комиссия и проценты от 262 рублей, который должны остаться для выплаты в 13-ый месяц. То есть 1000 + 262 + проценты от 262.
Я на этой задаче собаку съел без соли.
Далее задавай вопросы, если не понятно, куда копать для правильного решения.
Аноним 2016/02/20 21:43:15  №661322 779
>>661294
Там несколько простых условий if и подставленная в функцию mb_substr переменная $i.
Аноним 2016/02/20 22:51:42  №661375 780
Аноним 2016/02/21 01:43:15  №661516 781
>>657617
Связь тема-новости не налажена, потому что там две таблицы связанные. Писать на чистом сокле было условием.
Аноним 2016/02/21 01:43:56  №661519 782
>>657617
>isset year
Это переменна может не быть, если сортировка по году не произошла.
Аноним 2016/02/21 01:51:31  №661524 783