Этого треда уже нет.
Это копия, сохраненная 20 января 2016 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
136 Кб, 1024x768
799 Кб, 1680x1050
89 Кб, 800x500
70 Кб, 800x600
Клуб изучающих PHP 66. Предновогодний часть два. #605630 В конец треда | Веб
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

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

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

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

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

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

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

- Простая, но полезная задача сделать список студентов: 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
- Проверялка решений на 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) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
46 Кб, 500x644
#2 #605631
>>605630 (OP)
Еще. Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на 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, то рассказать об этом стоит в каком-нибудь другом треде.

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
46 Кб, 500x644
#2 #605631
>>605630 (OP)
Еще. Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на 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, то рассказать об этом стоит в каком-нибудь другом треде.

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
14 Кб, 604x275
#3 #605643
Перекатываюсь

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

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

Сложно ли реализовать такую хуйню на вордпресс?

в данной ситуации главное не изучение ООП и MVC, а результат, так как я не хочу проебаться со сроками и потом попасть на платные пересдачи и прочее
#4 #605652
>>605643

> Сложно ли реализовать такую хуйню на вордпресс?


да.
#5 #605677
Позвонил на вакансию пхп разраба, а там какой-то пропитый гопник трубку взял и с гонором так: чо?
Это вот такие люди с пхп работают, да?
#6 #605679
>>605677
Видимо, такие ими руководят
#7 #605683
>>605677
Не суди по первому разговору. Я так-то 2 высших имею и Phd, а когда работы много, в запарке тоже могу так ответить.
#8 #605686
Я так понимаю легаси сейчас вообще не катит? Просто есть вариант написать простой бложек с нуля. И на него в наихудшайшем случае уйдёт дней 10. но при использовании фреймворков (без опыта работы с фреймворками) - месяца 3. Вот сижу и думаю. Нафик может запилить бложек, а потом прикручивать к нему всякие нужности по дороге?
#9 #605699
А вообще у вас есть такой синдром? Дело в том, что я женщина в возрасте уже. И мне кажется, что на любые вакансии или работы, где заказчик знает о моем поле, будут брать исключительно из-за этого фактора, а не наличия скиллов. Ну типа тупая дырка, даже спонсора себе на нашла, надо же хоть косточку бросить из жалости.
#10 #605708
>>605699

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


Скорее
Женщина на работе.
Забеременела
@
Пропала на 2 года по уходу за детьми
@
Ищи второго на 2 года замены.
#11 #605713
>>605708
пришла после 2 лет сидения с дитём
@
Ничего не помнит, ничего не знает
@
Заебала всех фоточками своего дитя
@
Оставляем парня с замены на пол ставки, потому-что баба за 2 года превратилась в бесполезного студента
#12 #605726
ОП, я сломался.
Сдаюсь.
Чего только не навертел с этим калькулятором.
Дошёл до какой-то херни, которая улезает в минус, но в итоге считает всё правильно, даже если ставишь КредитБаланс = 1. Её не сохранил, правда.
Расписал просто словами всё, что за чем идёт, попробовал сделать - не идёт ни хрена.
Я никак не могу понять, какого чёртау нас цикл всё равно выполняется, когда у нас внутри стоит if ($creditBalance <= $monthlyPayment). По идее же при столкновении с этим сразу должно выполняться то, что там в условии, разве нет?
Я устал, я ухожу сдаюсь.
Подозреваю, что там и ответ простой, как палка: взять и проверить, сколько осталось долга, и выплатить только его.
Насмехайтесь надо мной, гоните меня, целый день сегодня вертел и страдал над этим, ничтожество блятское..
Вот один из моих вариантов, которые работают с 40 000, но не работают с 1 000 в КредитБаланс: http://ideone.com/e5OkHY
Из-за того не работает, что там изначально отнимается месячная выплата, от этого 1000 сразу в минус идёт, дальше проценты и т.п.
Но и прежний мой вариант всё это считал, только не считал правильно сумму в $creditBalance меньше $monthlyPayment.
>>605629
А теперь подставь в свой код не 40 000 в $creditBalance, а 1 000 - всё работает по-прежнему? Выходит $paymentTotal 2030 в этом случае?
#13 #605747
>>605726
Конечно, не работает, ведь месячный платёж заведомо больше общего долга с самого начала. Смысл заморачиваться на эту тему? Ведь в жизни банк не сделает месячный платёж больше, чем сумма кредита.
не-ОП
#14 #605748
>>605726

>Выходит $paymentTotal 2030 в этом случае?


Да.
Я в позапрошлом треде с ником Олег был, там всё выкладывал.
Специально для тебя создал новый идеон с 1000 на входе, вот он.
https://ideone.com/vzW41L

Главная проблема была в том, что я сначала считал кредит баланс, потом в коде добавлял проценты и прочее. В иотоге if срабатывал, потом к (например 1000) добавлял проценты, обслуживание, потом ещё и ещё что-то. В итоге хотя проверку проходил - фактически тут же её и ломал.
Ну собственно ты на те-же грабли и наступил. Сначала проверил значение кредитбаланса, а потом зачем-то к нему понаприбавлял всего. У тебя он был меньше 5000 а уже после if - прибавил % и счета за обслуживание.
#15 #605749
>>605747
В смысле, есть 1000 подставить вместо 40000
#16 #605753
>>605747

>ведь месячный платёж заведомо больше общего долга с самого начала. Смысл заморачиваться на эту тему?


>Тестирование программы?


>Не, не слышал.

#17 #605755
>>605753
Правда не слышал, не программист же. Тогда да, действительно надо перепиливать прогу, как >>605748, чтобы такие случаи сразу отсекать.
Олег #18 #605758
>>605755
Там действительно интересная задача сама по себе. Вот вроде и ответ есть и работает всё, а что-то не так. И когда вводишь заведомо маленькие цифры - сразу понятно что не так и где слабое место. Это не просто означает что тестирование смысла не имеет, а скорее всего и то, что и обычные суммы рассчитываются неправильно!
#19 #605769
>>605652
Что именно из этого сложно реализовать?
#20 #605777
>>605747

5000 это не месячный платеж. Это максимальная сумма которую заемщик может выплатить за месяц.
65 Кб, 427x403
#21 #605778
>>605640
лоль, ну прост смысл учить всякую левую абстрактную хуйню, которая скорей всего не пригодится никогда? фремворк рандомный например

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



конечно, ожидаю задачи вроде настройки форм с вводом/выводом бд, подправить макет и подобное

>>605486
>>605415

ну примитивную хуйню тоже кто-то делает же? рандом хуй слету прям невкурит скорей всего

зы: спасибо, развернутые приятные ответы.
#22 #605794
>>605708
Но я же чайлдфри.
someApprentice #23 #605861
Покажите кто-нибудь свой у кого composer + psr-4 стоит?
У меня почему-то не работает.

https://github.com/someApprentice/Students

Fatal error: Class 'SomeClass' not found in C:\Program Files\xampp\www\public\index.php on line 4
someApprentice #24 #605862
всегда делаю дамп после обновления composer.json
#25 #605874
>>605748
Спасибо, братишка Олег, но дело в том, что у тебя неправильно считает теперь 40 000, такие вот дела.
Там должно получиться 61270 с копейками, а у тебя выходит 60262.31722769, то есть пропадает 1000 за обслуживание кредита и 3% от 262 рублей.
Я поеду с этим калькулятором.

>Сначала проверил значение кредитбаланса, а потом зачем-то к нему понаприбавлял всего. У тебя он был меньше 5000 а уже после if - прибавил % и счета за обслуживание.


Как я понял, именно это и правильно. Там когда КредитБаланс становится 4138 (я уже наизусть выучил эти цифры, блиять), надо прибавить к этому 3% и тысячу за обслуживание. А потом КредитБаланс станет 262 рубля - снова надо прибавить 3% от этой суммы и сумму кредита. Вот именно этот последний шаг не делает твой скрипт, получается, такие дела.
#26 #605877

>Там когда КредитБаланс становится 4138 (я уже наизусть выучил эти цифры, блиять), надо прибавить к этому 3% и тысячу за обслуживание


И после отнять 5 000 - обычную его месячную выплату, этого анончика.
Олег #27 #605880
>>605874
Хм... сейчас посмотрю.
#28 #605894
>>605880

>А потом КредитБаланс станет 262 рубля - снова надо прибавить 3% от этой суммы и сумму кредита


Сумму за обслуживание кредита, то есть 1000 рублей.

Вот такие дела.
ОП, получается, не проверил твой каклькулятор? Потому что я уже забавлялся с массивами, про Толстого написал скрипт, ещё многое, а тут такой удар от ОПа - и на три дня выпал из приятного программирования.
Олег #29 #605895
>>605874
if ($creditBalance < 5000) {
\t$month++;
\t$creditBalance = ( $creditBalance * $percent ) + $servicePayment - $monthlyPayment;
Что-то я не понял зачем ты так сделал? У тебя остаётся долг меньше пяти тысячь, а ты всё-равно платишь 5000 банку. И в итоге банк тебе теперь должен. Что-то не так.
#30 #605900
>>605861
psr-4 это не программа, чтобы стоять

У тебя русская буква 'c' в слове namespaCe
https://github.com/someApprentice/Students/blob/master/app/Foo/SomeClass.php#L2
Она же подсвечивается на гитхабе. Ну и в твоей иде подсвечивается, если ты не в блокноте набираешь конечно.

Автозагрузчик прямо импортируй композеровский
require '../vendor/autoload.php';
Не надо всяких левых файлов типа 'app/autoload.php'

В composer.json неправильно прописан путь
После корневого неймспейса должны идти два слеша
"PSR-4": {
"App\\": "app/"
}

В index.php при создании класса нужно писать полный неймспейс
$bar = new \App\Foo\SomeClass;
либо импортировать класс через use.

Короче дохуя ошибок, прочитай мануал по композеру и неймспейсам, переставлять буквы наугад будет дольше и болезненнее.
#31 #605905
>>605900
еще слово "psr-4" пишется в нижнем регистре (маленькими буквами)
https://getcomposer.org/doc/04-schema.md#psr-4
#32 #605907
>>605895
Там получается к этому моменту как раз долг 4138, вот он в $creditBalance у нас к этому моменту находится. Дальше надо прибавить 3% и 1000 за пользование кредитом. Получится 5262 - отсюда отнимаем плату анончика 5000.
Потом снова прибавляем проценты и $servicePayment. И вот тут уже платим 1270 вроде как раз.
Олег #33 #605908
>>605874

>Там когда КредитБаланс становится 4138 (я уже наизусть выучил эти цифры, блиять), надо прибавить к этому 3% и тысячу за обслуживание. А потом КредитБаланс станет 262 рубля


Что-то ты не понял меня совсем.
Ну давай посчитаем.
4138 +1000 ...
Получаем 5138. А у тебя скрипт должен сработать только когда кредит<5000. И как же он сработает?
Олег #34 #605910
>>605907
Я про это и говорю, ты сначала должен посчитать кредитбаланс, а уже потом проверять условие. У тебя лишняя тыща как раз из-за этого получается.
#35 #605911
>>605908
Нет-нет, бро, не так:
4138 * 1.03 + 1000, получается 5262 с копейками.
В том-то и дело, что там в условии с if надо частично делать повтор этого цикла, получается.
Там получается в один момент КредитБаланс становится меньше, но до конца не выплачен. Поэтому надо снова пройти через умножение на проценты и прибавление тысячи за пользование кредитом.
Я сейчас найду первый свой вариант, там подробно я специально это расписал, погоди.
>>605910
ОП как раз сказал, что считает правильно 40 000 у меня, что должно быть 61270 с копейками.
Олег #36 #605912
>>605911
Да, ты прав, сяду за переделывание.
#37 #605913
Вот, бро Олег: http://ideone.com/yJFWZo
Там я специально для себя наглядно прописал, где что остаётся, где что выитается и т.п.
ОП подставил тысячу в КредитБаланс и всё там посчиталось неправильно.
И вот я три божьих дня ковыряюсь.
#38 #605914
>>605912
Ох, бро, я уже всё, сил больше нет.
Я раз семь подчистую его переписывал, везде вертел-перевёртывал.
#39 #605930
Олег, лучше из этого поста калькулятор: >>605726, он правильнее считает. Тот первый у меня на два месяца разделяет в конце и оставляет долг ещё.
#40 #606103
>>605900

>У тебя русская буква 'c' в слове namespaCe


У меня в Sublime Text'е вообще не подсветилась. Это такая глупая ошибка с моей стороны.

Спасибо. Исправил все.

https://github.com/someApprentice/Students
135 Кб, 1700x796
#41 #606199
Дух силен, но плоть слаба и выпила уже снотворное

Анон, я еще хочу часок поработать
#42 #606206
>>606199

>invalid argument supplied for foreach()


Такие баги элементарно чекаются дампом переменных.
#43 #606210
>>606206
Спокуха, уже разобрался, вылезла новая ошибка
#44 #606212
>>606210
Да мать его, я сделал эту сучку
32 Кб, 535x401
#45 #606213
>>606206
Ну разве я не охуенен?
#46 #606214
О...хуенен
#47 #606337
Привет, ОП, репостну с прошлого треда, вдруг ты уже туда не заглянешь. У меня есть вопросы по задаче про "опечатки":
1) http://ideone.com/eOZ6Qg это просто поиск таких слов. Я сделал его в 2х вариантах: с делением на каждое слово (ищет только первую изменённую букву/ы, формально под постановку задачи подходит) и вариант без разбиения (тогда под раздачу попадает английское слово с русскими буквами, но выглядит красивее и ищет ошибки в обоих языках).

2) http://ideone.com/FVB32H доп. задача с заменой букв на нормальные. Если использовать первый вариант шаблона, то во-первых, надо будет собирать исправленные по отдельности слова в кучу, а во-вторых будет исправлять только первую букву. Второй меняет всё подряд, но я так и не смог написать регексп, который на ходу понимал бы, с какой буквы начинается слово, при этом без побочных эффектов. И главное - непонятно, как регекспом и менять несколько букв подряд.

В общем, всё это можно было бы сделать через всякие циклы, массивы и т.д., но я думаю, это неверный путь. Скажи, в какую сторону думать, или забить на мелочи?
Сорри за путанное изложение мыслей
#48 #606346
Что за блядский SASS? для чего он нужен? Почему он такой сложный в плане всяких установок? Почему его теги не подсвечивают не саблайм не нотепад?
#49 #606350
Как стать норм фрилансером? Знаю ПХП, КСС, ХТМЛ, Джейквери, яваскрипт, умею верстать немного из ПСД всё на более менее среднем уровне. На какие заказы могу претендовать, допиливание кмс? парсинги? скрипты? почему мне кажется всё это чем то сложным, хотя вроде бы программирование более менее знаю и для учебных целей сделал не одну задачу, уровня файлообменника и подобных.
#50 #606440
>>606346
Да забей хуй на него, скоро все на PostCSS перейдут.
Олег #51 #606539
>>605894
https://ideone.com/qzmFBN
Переписал.
ОП оказывается проверил мой код, и отписался спустя 400 постом. А я и не заметил (
https://github.com/MindiMakridi/filehosting #52 #606548
Проверил файлообменник, советы в старом треде: >>606547\t
#54 #606592
>>606539
Молодца, бро!
И решение же, сука, простое, как два пальца...
И написано же было, что надо проверять долг (разумеется, в голову мне не пришло, что долг можно сделать другой переменной).
Отлично всё равно и для меня, потому что я хотя бы лучше уяснил во время ковыряния, как многое работает, как скрипт проходит и т.п.
Ну а так прямо гора с плеч, спасибо, братишка.
#55 #606636
>>606571
Анончик, хотел посмотреть твою реализацию Cat&Mouse. В файле index.php необходимо поменять пути, так как на линуксе были проблемы. И интерпретатор ругался на 86-ю строку файла Animal.php, пришлось слово Class убрать. Это норма и просто я ньюфаг?
someApprentice #56 #606645
>>606636
Да, действительно там ошибка, я не знал об этом. Возникает потому что в тайпхинте указан Объект а не SplObjectStorage (странно что он его не считает за объект)
Исправил: https://github.com/someApprentice/Cat-and-Mouse/blob/master/Classes/Animal.php#L86
someApprentice #57 #606649
>>606636

>В файле index.php необходимо поменять пути, так как на линуксе были проблемы


А что за проблемы были?
#58 #606660
>>605630 (OP)
Кто-нибудь писал ботов для телеграмма на пхп? покажите?
#59 #606671
>>606649
В линуксе вся файловая система начинается с корня, то есть когда ты указываешь require '/Templates/print.phtml'; то поиск начнётся с папки Templates/, находящейся в корневой директории всей ФС. Я добавил точку перед первым слешем, вместо точки подставится адрес текущей директории, а вообще правильно использовать константу __DIR__
Например require_once __DIR__ . '/Templates/print.phtml';
#61 #606694
>>606671
Понял. Спасибо за отклик.
Исправил: https://github.com/someApprentice/Cat-and-Mouse
#62 #606706
>>606672
Интересно, я так понимаю, с его помощью можно веерно рассылать собственноручно написанный текст списку пользователей из друзей?
#63 #606724
>>606547

> <link >href="http://filehosting.ru/bootstrap/css/bootstrap.min.css"


>можно заменить на


> <link href="/bootstrap/css/bootstrap.min.css"


Странно. Изначально я так и сделал, но к пути дописывался адрес, т.е если мы обращаемся по адресу /main/ то путь к файлам становился
http://filehosting.ru//main/bootstrap/css/bootstrap.min.css соответственно ксс не прогружался, ведь такой папки нет. Поэтому я и прописал там полный путь. Сейчас почему-то относительные ссылки работают и такой проблемы не вызывают.

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



Ну я поменял его под свои нужды, некоторый функционал моего старого класса мне показался лишним и я его значительно упростил.
47 Кб, 604x398
#64 #606729
карочи чет заступарился

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

пример таргета: http://www.spiegel.de/impressum/a-941280.html
#65 #606730
>>606571
>>606672
https://github.com/akalongman/php-telegram-bot/blob/f9a90f355ccea9785b94c24232c3af464f1b0678/src/DB.php#L63
https://github.com/someApprentice/Students/blob/master/app/init.php#L7

Значит лучше вызывать эту функцию статически чем иметь свойство которое можно сделать закрытым?
#66 #606732
>>606547

> header("Content-disposition:attachment; filename=$filename");


>В заголовках можно исплользовать только латинницу и нельзя использовать русские или други буквы. Как это исправить? Не указывать filename вообще. Тогда браузер возьмет имя из URL



Тогда он будет скачивать файл, имя которого содержит айди. Мне бы хотелось, чтобы файлы скачивались с оригинальным названием. Как это сделать, не указывая имя в заголовке?
#67 #606743
>>606732
mod_rewrite

В ссылке сделай полную инфу о файле, например у меня получился путь для скачивания /download/1234/photo.jpeg, которая на диске хранится под именем 1234_photo.jpeg.txt
где 1234 это id, photo.jpeg оригинальное имя
В htaccess сделать RewriteRule, чтобы запрос вида /download/1234/photo.jpeg перенаправлялся на index.php, а там уже разбить по слешу и склеить нужное имя по определенному правилу (должен быть метод, который принимает компоненты урла и возвращает имя файла на диске).
Filename в заголовке не нужно указывать, тогда браузер при скачивании возьмет имя из урла, то есть photo.jpeg
#68 #606749
Наконец-то я увидел, как надо делать эксепшены, ну надо же.
https://github.com/akalongman/php-telegram-bot/blob/f9a90f355ccea9785b94c24232c3af464f1b0678/src/Exception/TelegramException.php
#69 #606755
>>606729
пожаловался на тебя за порно-картинки, вниманиеблядь.
#70 #606774
http://php.net/manual/ru/features.file-upload.post-method.php Вот почему тут не написано, что при загрузке файла размером больше, чем указано в поле MAX_FILE_SIZE, $_FILE['file']['size'] становится равным нулю? Этот нюанс стоил мне часа впустую потраченного времени в поисках ошибки.
#71 #606780
>>606755
Доносчику первый кнут.
#72 #606782
У меня проблемы в фотошопе, не всегда при клике на слой, мне не показывают где этот слой находится во вкладке слои, а иногда показывают но это бывает реже. Как правильно смотреть что за слой? просто кликать мышкой по определённой области макета?
#73 #606787
>>606774
Как это пофиксить?
#74 #606789
>>606787
Что пофиксить?
#75 #606790
>>606789
Это.
#76 #606792
>>606790
А зачем это фиксить?
#77 #606797
>>606792
Чтобы$_FILE['file']['size'] не становился равным нулю?
#78 #606800
>>606797
Ну так увеличь max_file_size (и ище одну связанную директиву) в php.ini. Или у тебя какая-то быдло-сборочка, которая не дает этого сделать?
Проверяй размер файла джаваскриптом. Тем более это все равно нужно делать, чтобы пользователь даже не пытался грузить файлы больше чем разрешено.
#79 #606818
Блять, какой же я тупой..
Не могу накатить дримвивер на денвер, какую-то хуйню пишет:
Сервер не найден

Страница "http://site/test.php" не была загружена, так как не найден сервер "site". Убедитесь в том, что соединение с Интернетом установлено и имя сервера введено правильно.
#80 #606828
>>606818
Надо было рестарт денвера сделать, допёрло до барана.
#81 #606834
Чому Дримвивер может не читать символ \n?
#82 #606837
>>606834
Усыпи себя.
2474 Кб, Webm
#83 #606851
>>606729
больше не буду

вот код http://pastebin.com/CJLfxza1

вот url.txt
http://allister.de/contact/
http://laitovo.ru/contacts
http://datrussia-gold.dat.de/kontakty.html
http://www.wedi.de/impressum/
http://www.dw.com/de/impressum/a-15718489
http://www.apart-fashion.de/impressum
http://www.obi.de/de/impressum/index.html
http://www.mpil.de/en/pub/service/impressum.cfm
http://marinetech.de/ru/Info/Impressum.html

такая малафья вылетает, подстановка заголовков не помагает

>Warning: file(http://laitovo.ru/contacts ) [function.file]: failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in C:\OpenServer\domains\localhost\1.php on line 7

#84 #606861
>>606851

>регулярки валидации емейла не срабатывают, что делать?


>отдал регулярке 0 мэйлов


>удивился почему не сработало

#85 #606867
>>606837
Хераси ты недоброжелательный.
Дримвивер чем не угодил?
50 Кб, 640x368
#86 #606900
>>606861

c чего такие выводы манька?

написал кароч, всем похуй наверное, но может ктонить захочет обоссать -https://yadi.sk/d/fjYcJbzbmKeVd
(просто сначала сохранил html всех страниц в общий файл, а патом вытянул с него мыла)

скрипт бегает по ссылкам из txt,
затем добавляет к ссылке /impressum/ и снова бегает, затем чистить говно и удаялет дубли

url.txt - закидываем список таргетов
mail.txt - спаршенные мыла

сохраняет чутка мусора на выходе и похуй
мой 2 скрипт
#87 #606909
Господа, у кого-нибудь получалось устроиться джуном после 25 лвл без корки?
#88 #606910
https://github.com/MindiMakridi/filehosting Поправил. Вроде ничего не забыл.
#89 #606926
>>606645

Нельзя писать object в качестве тайп-хита, также как нельзя писать int, string, boolean. PHP поймет это как имена классов.

В тайп-хинте можно указывать только:

- array
- callable
- имя класса/интерфейса

В PHP7 это будет исправлено и можно будет указывать скалярные тайп-хинты, то есть можно будет писать int $a.

http://habrahabr.ru/post/267799/

Также, можно будет указывать тип результата который вернет функция:

function somefunc(): int
{
...
}

Жаль, нельзя пока указывать сложные типы вроде SomeClass[] (массив объектоы SomeClass).
#90 #606928
>>606724

> Странно. Изначально я так и сделал, но к пути дописывался адрес, т.е если мы обращаемся по адресу /main/ то путь к файлам становился



Ты наверно писал

css/bootstrap

вместо

/css/bootstrap

Прочти внимально мой урок про относительные URL и реши задания в нем: https://github.com/codedokode/pasta/blob/master/network/urls.md

Специально его вчера написал и выложил.
#91 #606929
>>606724

Если относ. URL начинается со слеша, то он идет от корня сайта. Если не со слеша, то от текущей папки в пути. Отсюда и проблема.
#92 #606930
>>606730

У вас обоих сделано неправильно. У тебя непраивльно что настройки вписаны прямо в класс, надо их выносить в конфиг. У него вдобавок еще и все на статических методах, то есть это вообще не ООП.
#93 #606932
>>606732

Браузер берет имя файла из последнего компонента путив URL

http://example.com/some/123456/file.txt -> file.txt
http://example/lalala -> lalala

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

Этот метод работает с любыми символами, хоть кириллицей, хоть иероглифами, только помни что в пути спецсимволы вроде пробела или знака вопроса надо экранировать процентным кодированием.
#94 #606940
>>606749

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

Там автор по моему знает PHP, а вот ООП совсем не понимает. Не советую брать с него пример.

>>606774

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

Обнаружить что файл слишком большой можно по полю error в FILES. Там есть код для этой ситуации.

Тебе надо проверять:

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

Также, в плане безопасности все плохо:

https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L115

Что если файл имеет расширение .htaccess? Если ты его сохранишь с таким именем то злоумышленник сможет менять настройки сервера и сделать например txt файлы исполняемымим через PHP

Также, что если файл имеет расширение php5, phtml, shtml, php4? На некоторых хостингах эти и другие расширения вызывают интерпретатор PHP.

Надежнее принудительно менять расширение на .txt
#94 #606940
>>606749

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

Там автор по моему знает PHP, а вот ООП совсем не понимает. Не советую брать с него пример.

>>606774

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

Обнаружить что файл слишком большой можно по полю error в FILES. Там есть код для этой ситуации.

Тебе надо проверять:

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

Также, в плане безопасности все плохо:

https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L115

Что если файл имеет расширение .htaccess? Если ты его сохранишь с таким именем то злоумышленник сможет менять настройки сервера и сделать например txt файлы исполняемымим через PHP

Также, что если файл имеет расширение php5, phtml, shtml, php4? На некоторых хостингах эти и другие расширения вызывают интерпретатор PHP.

Надежнее принудительно менять расширение на .txt
#95 #606942
>>606782

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

>>606800

НЕт, неправилньо. Надо проверять поле error.
#96 #606943
>>606910

Прочел урок про относительные URL? Задание там решил? Если да, напиши ответы.
#97 #606944
>>606940
А что тогда записывает в лог?
#98 #606950
А вообще, что вы мучаетесь с сокетами? Вон как в шарпе это легко делается.
http://habrahabr.ru/post/120157/
#100 #606954
>>606953
Это сюда >>606943
#101 #606959
>>606950
Шарп не уперся, мы изучаем php.
На php тоже есть готовые решения, смотри ratchet и reactphp. Те же вебсокеты делаются в несколько строчек.

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

Код на шарпе из статьи кстати выглядит так же страшно, как и на голом php.
246 Кб, 996x712
#102 #606979
>>606959
Ратчер, хуячер. на шарпе это делается в три строке, а в похапе нужно подключать тяжелые библиотеки и ебать себе мозги асинхронностью.

Вон я какой браузер сделал на с#, с иконкой. Правда на сосач чего-то не постится через него.
#103 #606985
>>606979
Спасибо за важную информацию.
#104 #606986
>>606979
Там код уровня browser = new Browser('заебись');
Зачем ты сюда это принёс?
#105 #606991
>>606986
Проорал чего-то на всю коммуналку.
74 Кб, 768x768
#106 #607011
По сайту ОПа можно реально самому дойти до создания файлообменника?
Всем добра и няшек.
#107 #607012
>>606979

у нас речь идет о скрипте который сам делает нужные действия. А ты предлагаешь вместо этого взять браузер (работающий на движке ИЕ и только под виндой, требующий скачать 200 Мб фреймворка) и руками в нем делать все действия. Ты даун или прикидываешься?

Алсо то что ты сделал это уровень хелло ворлд, вот например урок и по нему видно что это делается за 10 минут включая ожидание пока загрузится вижуал студио: http://www.homeandlearn.co.uk/csharp/csharp_s9p6.html

Если бы ты не был так глуп, ты бы кстати мог вспомнить что в дотнете есть кое-что упрощающее работу с асинхронными функциями на уровне языка.
#108 #607048
>>605738
Выложил резюме на hh.ru. Через несколько дней на почту упало письмо с предложением побеседовать по скайпу. Побеседовали. Дали тестовое задание. Решил. Отправил. Проверили, позвали на собеседование. Сказали, что позвонят. Позвонили. Ну и всё.
#109 #607090
>>606930

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


За исключением этого есть еще какие-нибудь замечания? Я правильно делаю инициализацию здесь? https://github.com/someApprentice/Students/blob/master/app/Model/Gataway/TableDataGataway.php#L8
#110 #607098
>>607090

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

Инициализацию лучше сделать так: просто в файле init.php создаем все нужные нам объекты:

//... настраиваем автозагрузку ...
$pdo = new PDO...
$pdo->setAttributes(..);
$pdo->....

$someMapper = new SomeMapper($pdo);

--------

По твоему коду, такие ошибки:

gatAway -> gatEway

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

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

- неправильно исплоьзовать static $var, это фактически глобальная переменная. Ну например если мы создадим 2 экземпляра класса Init, мы думаем что мы получим 2 независимых объекта PDO:

$init1 = new Init;
$init2 = new Init;
$pdo1 = $init1->getPdo();
$pdo2 = $init2->getPdo();
assert($pdo1 !== $pdo2);

Логично? Ведь $init1 и $init2 ничего не связывает. Но из-за использования глобальной переменной мы получаем побочный эффект - $init2 не создает новый объект а возвращает объект из $init1, хотя по коду кажется что они ничем не связаны. Вот так ловушка.
#110 #607098
>>607090

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

Инициализацию лучше сделать так: просто в файле init.php создаем все нужные нам объекты:

//... настраиваем автозагрузку ...
$pdo = new PDO...
$pdo->setAttributes(..);
$pdo->....

$someMapper = new SomeMapper($pdo);

--------

По твоему коду, такие ошибки:

gatAway -> gatEway

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

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

- неправильно исплоьзовать static $var, это фактически глобальная переменная. Ну например если мы создадим 2 экземпляра класса Init, мы думаем что мы получим 2 независимых объекта PDO:

$init1 = new Init;
$init2 = new Init;
$pdo1 = $init1->getPdo();
$pdo2 = $init2->getPdo();
assert($pdo1 !== $pdo2);

Логично? Ведь $init1 и $init2 ничего не связывает. Но из-за использования глобальной переменной мы получаем побочный эффект - $init2 не создает новый объект а возвращает объект из $init1, хотя по коду кажется что они ничем не связаны. Вот так ловушка.
#111 #607099
>>607090

В ООП вместо static $var надо использовать статические свойства, например

private static $x =1;

Но в данном примере я не понимаю, зачем вообще это нужно. Объясни, зачем ты там испльзовал static? Что ты хотел сделать этим?
#112 #607109
>>607090

Есть еще замечания. Папку vendor необходимо удалить из репозитория и внести в gitignore (погугли про этот файл).

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

require_once __DIR__ . '/../vendor/autoload.php'; лучше перенести в init.php, то есть файл init.php будет отвечать за всю подготовку приложения к обработке запроса.

Также, мне кажется, папка Model не нужна. Почему бы не вынести Helpers, Gateway, Validators выше? Это конечно не ошибка, скорее дело вкуса, но мне кажется папка Model тут просто лишняя, какая от нее польза?

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

- фреймворк для создания интернет-магазинов Magento: https://github.com/magento/ - он довольно популярен на Западе

(обрати внимание, там тоже используется композер, есть папка app и файл app/bootstrap.php, папка pub - все как у нас, потому что ОП учит вас современным подходам к разработке а не втюхивает пыльные учебники 10-летней давности)

- очень большой и сложный фреймворк Symfony https://github.com/symfony/symfony

- исходники композера (он написан на php) https://github.com/composer/composer
#113 #607113
>>607090

Также, есть еще сайт phptherightway (в переводе): http://phptherightway.ru/
#114 #607121
Делаю палиндром - я стукнутый по голове, никак не выходит с конца первая буква.
Что я делаю не так?
for ($i = 0; $i < $roundHalfCharacters; $i++) {

\t$symbolForward = mb_substr($withoutSpaces, $i, 1);
\t$symbolBack = mb_substr($withoutSpaces, -$i, 1);

Почему-то первая буква в этом случае считается первая с начала, а потом уже идут с конца по порядку.
Где логика, почему так странно?
#115 #607123
>>607121

> -$i



-0 этот тот же самый ноль, ты получаешь не последнюю, а первую букву. Чтобы получить последнюю, надо указать -1.
#116 #607126
>>607123
Спасибо, бро, как раз запостил и понял, что надо указать просто 1 в значении $i с самого начала.
#117 #607127
Руби - решето, переходите на PHP: http://m.habrahabr.ru/post/273491/

Я не очень понял зачем они эти важные ключи выложили на облачные серверы.
#118 #607162
>>607127
Так Инстаграмм же на Пистоне написан, разве нет?

Вот сделал палиндром: http://ideone.com/a8kbeG
Хоть башку не сломал - и то ладно.
Как буду в ООП и далее разбираться - ума не приложу.
#119 #607174
Как всегда интересный пост от Яндекса - Эволюция структур данных в Яндекс.Метрике

http://habrahabr.ru/company/yandex/blog/273305/

Аноны, кто интересуется базами данных, можете почитать.
#120 #607175
>>607174
>>607161

Прошлый тред закрыт, можно туда не постить?
#121 #607179
https://github.com/V3N0m21/Uppu3 - ты все сделал и хочешь показать код на проверку или ты пока исправляешь замечания, в том числе по архитектуре отсюда >>604561

Я тогда пока не буду смотреть.
#122 #607180
>>607175

Пости новые вопросы туда, а я пока отвечу на старые там.
#123 #607181
>>607180

Ой, новые вопросы - сюда конечно же.
#124 #607186
Анон, который изучает сокеты, нашел у тебя в посте фразу

> Где-то выше ты мне предлагал отлавливать сигналы системы и выводить их в консоль


Не сигналы, а уведомления. Сигналы в линуксе - это такая штука, которая информирует о произошедших событиях, убивает или останавливает процессы и не связана с асинхронным вводом-выводом. Не путай.
#125 #607197
Аноны, я ответил на все задачи и вопросы в прошлом треде. Если пропустил кого-то - напомните о себе в этом треде.

В частности:

Вопрос про функцию throttle и про 6-ю задачу на JS >>607193
Алгоритм задачи про кредит и про поиск опечаток >>607194
Решение задачи про кредит #126 #607203
>>605686

Думаю, нет.

>>605699

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

>>605726

Ответил в предыдущем треде, написал правильный алгоритм >>607194

>>605748

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

В коде ошибки, посмотри: PHP Notice: Undefined variable: Last in /home/muimGS/prog.php on line 22

>>605758

Правильная мысль, такое бывает.

>>605769

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

>>605874
>>605913
>>605914

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

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

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

>>606337

Ответил в прошлом: >>607194

>>606346

Рубисты решили придумать свой вариант CSS.
Решение задачи про кредит #126 #607203
>>605686

Думаю, нет.

>>605699

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

>>605726

Ответил в предыдущем треде, написал правильный алгоритм >>607194

>>605748

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

В коде ошибки, посмотри: PHP Notice: Undefined variable: Last in /home/muimGS/prog.php on line 22

>>605758

Правильная мысль, такое бывает.

>>605769

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

>>605874
>>605913
>>605914

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

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

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

>>606337

Ответил в прошлом: >>607194

>>606346

Рубисты решили придумать свой вариант CSS.
#127 #607204
>>606350

ООП/фреймворки знаешь? Если нет, только верстка и натягивание на CMS. Также, на фрилансе тяжело если ты низкоквалифицированный и соревнуешься с толпой студентов. Также, у нас тред больше про программирование, может где-нибудь в /wrk есть фриланс тред.

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


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

>>606539

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

>>606592

Его решение надо упростить, там копипаста.

>>606706

Не знаю

>>606755

А где там порно?

>>606743

Тут надо быть осторожным, Апач при переписывании URL может некорректно обработать имя файла если там пробелы или какая-нибуд кириллица, это надо все проверять. Под Windows по моему кириллица не заработает.
#127 #607204
>>606350

ООП/фреймворки знаешь? Если нет, только верстка и натягивание на CMS. Также, на фрилансе тяжело если ты низкоквалифицированный и соревнуешься с толпой студентов. Также, у нас тред больше про программирование, может где-нибудь в /wrk есть фриланс тред.

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


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

>>606539

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

>>606592

Его решение надо упростить, там копипаста.

>>606706

Не знаю

>>606755

А где там порно?

>>606743

Тут надо быть осторожным, Апач при переписывании URL может некорректно обработать имя файла если там пробелы или какая-нибуд кириллица, это надо все проверять. Под Windows по моему кириллица не заработает.
#128 #607205
>>606834

Не понял, как он его не может читать? А, понял.

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

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

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

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

>>606944

Тут такие варианты:

- если мы не ловим исключение, то его ловит PHP и записывает в свой лог ошибок. Под виндой это лог в папке Апача, под линуксом обычно /var/log/apache2/error.log, если конечно ты не менял настройки апача. Увы, PHP при этом не показывает никакой заглушки пользователю, пользователь просто видит белую страницу без подробностей. И PHP отдает эту страницу с кодом 200, а не 500. Это недоработка в PHP.

- если мы ловим иключения, то тот, кто ловит, должен его логгировать. Условно говоря, у тебя в index.php может быть такой код:

try {
// обработка запроса
} catch (\Exception $e) {
// залоггировать исключение в лог PHP с помощью error_log()
// вывести страницу-заглушку для пользователя
die();
}

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

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

Но исключение само себя не должно логгировать. Иначе получается глупость: одни виды исключений себя логгируют, а другие (например встроенные в PHP или выбрасываемые сторонними библиотеками) - нет. И с точки зрения ООП неправильно: откуда исключение знает где расположен файл лога?

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

В общем автор в исключениях не разбирается. Увы, очень многие программисты на PHP плохо их знают.
#128 #607205
>>606834

Не понял, как он его не может читать? А, понял.

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

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

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

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

>>606944

Тут такие варианты:

- если мы не ловим исключение, то его ловит PHP и записывает в свой лог ошибок. Под виндой это лог в папке Апача, под линуксом обычно /var/log/apache2/error.log, если конечно ты не менял настройки апача. Увы, PHP при этом не показывает никакой заглушки пользователю, пользователь просто видит белую страницу без подробностей. И PHP отдает эту страницу с кодом 200, а не 500. Это недоработка в PHP.

- если мы ловим иключения, то тот, кто ловит, должен его логгировать. Условно говоря, у тебя в index.php может быть такой код:

try {
// обработка запроса
} catch (\Exception $e) {
// залоггировать исключение в лог PHP с помощью error_log()
// вывести страницу-заглушку для пользователя
die();
}

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

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

Но исключение само себя не должно логгировать. Иначе получается глупость: одни виды исключений себя логгируют, а другие (например встроенные в PHP или выбрасываемые сторонними библиотеками) - нет. И с точки зрения ООП неправильно: откуда исключение знает где расположен файл лога?

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

В общем автор в исключениях не разбирается. Увы, очень многие программисты на PHP плохо их знают.
#129 #607206
>>606953

> 1. /test


> http://example.com:81/some/test


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

> 2. ?x


> http://example.com:81/some/page.html?x


Правильно.

> 3. //test.example.com


> http://test.example.com


Верно.

> 4. #test


> http://example.com:81/some/page.html#test


Неправильно. Так как указан только хеш, все предыдущие части берутся из базового URL, включая query string

> 5. ../1.txt


> http://example.com:81/1.txt


> 6. ./1.txt


> http://example.com:81/some/1.txt


Верно.

> Запиши относительные URL для этих ссылок как можно короче (относительно чего?):


Относительно базового URL из предыдущей части задания, то есть http://example.com:81/some/page.html?a=1&b=2#hash

> 1. http://example.com:81/1.txt


> /1.txt


Правильно

> 2. http://test.example.com/1.txt


> /1.txt


Неправильно, если разрешить /1.txt относительно базового URL, получится не то.

> 3. http://example.com:81/some/page2.html#hash


> /some/page2.html#hash


> 4. http://example.com:81/some/page.html?x=1


> /some/page.html?x=1


Праивльно, но можно сделать короче.

>>607011

Можно, но перед файлообменником надо сделать студентов.
#129 #607206
>>606953

> 1. /test


> http://example.com:81/some/test


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

> 2. ?x


> http://example.com:81/some/page.html?x


Правильно.

> 3. //test.example.com


> http://test.example.com


Верно.

> 4. #test


> http://example.com:81/some/page.html#test


Неправильно. Так как указан только хеш, все предыдущие части берутся из базового URL, включая query string

> 5. ../1.txt


> http://example.com:81/1.txt


> 6. ./1.txt


> http://example.com:81/some/1.txt


Верно.

> Запиши относительные URL для этих ссылок как можно короче (относительно чего?):


Относительно базового URL из предыдущей части задания, то есть http://example.com:81/some/page.html?a=1&b=2#hash

> 1. http://example.com:81/1.txt


> /1.txt


Правильно

> 2. http://test.example.com/1.txt


> /1.txt


Неправильно, если разрешить /1.txt относительно базового URL, получится не то.

> 3. http://example.com:81/some/page2.html#hash


> /some/page2.html#hash


> 4. http://example.com:81/some/page.html?x=1


> /some/page.html?x=1


Праивльно, но можно сделать короче.

>>607011

Можно, но перед файлообменником надо сделать студентов.
#130 #607207
>>607162

> $lowerCase = mb_strtolower($text);


> $withoutSpaces = str_replace(" ","",$lowerCase);


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

> $countCharacters = mb_strlen($withoutSpaces);


> $halfCharactres = $countCharacters / 2;


> $roundHalfCharacters = round($halfCharactres);


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

> $i = 0;


> for ($i = 1;


Первая команда $i = 0 не имеет смысла так как в начале for значение будет заменено на 1

> for ($i = 1; $i < $roundHalfCharacters;


Лучше использовать <= иначе последняя пара символов может быть не будет проверена.

> $i = $i - 1;


> $symbolForward = mb_substr($withoutSpaces, $i, 1)


Не надо так делать, то что ты меняешь $i (счетчик) посередине цикла затрудняет понимание, как работает цикл. Лучше написать так:

$symbolForward = mb_substr($withoutSpaces, $i - 1, 1);

> $beginningOfTheLine = array();


> $beginningOfTheLine["$symbolForward"] = $i;


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

> "$symbolForward"


А зачем тут кавычки? Что мешает написать просто $symbolForward?

> if ($beginningOfTheLine == $endingOfTheLine) {


> } elseif ($beginningOfTheLine != $endingOfTheLine) {


> } else {


else не может выполниться, и потому можно вместо 3 веток сделать 2.
#130 #607207
>>607162

> $lowerCase = mb_strtolower($text);


> $withoutSpaces = str_replace(" ","",$lowerCase);


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

> $countCharacters = mb_strlen($withoutSpaces);


> $halfCharactres = $countCharacters / 2;


> $roundHalfCharacters = round($halfCharactres);


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

> $i = 0;


> for ($i = 1;


Первая команда $i = 0 не имеет смысла так как в начале for значение будет заменено на 1

> for ($i = 1; $i < $roundHalfCharacters;


Лучше использовать <= иначе последняя пара символов может быть не будет проверена.

> $i = $i - 1;


> $symbolForward = mb_substr($withoutSpaces, $i, 1)


Не надо так делать, то что ты меняешь $i (счетчик) посередине цикла затрудняет понимание, как работает цикл. Лучше написать так:

$symbolForward = mb_substr($withoutSpaces, $i - 1, 1);

> $beginningOfTheLine = array();


> $beginningOfTheLine["$symbolForward"] = $i;


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

> "$symbolForward"


А зачем тут кавычки? Что мешает написать просто $symbolForward?

> if ($beginningOfTheLine == $endingOfTheLine) {


> } elseif ($beginningOfTheLine != $endingOfTheLine) {


> } else {


else не может выполниться, и потому можно вместо 3 веток сделать 2.
#132 #607215
>>607214
Вот еще в догонку w5.2.
http://ideone.com/jS2gYk
#133 #607216
>>607214

> ($creditBalance x $percent) + $servicePayment)


Это повторяется 3 раза. Копипаста это зло, враг программиста и надо от нее избавиться.
#134 #607217
>>607216
Ну да, это можно было вынести в отдельную переменную, я почему-то об этом не подумал. А сама задача правильно сделана?
#135 #607218
>>607098

>Считаю использование класса тут ненужным усложнением.


А как тогда подключать его? Просто запрашивать файл?

>>607109

>Также, мне кажется, папка Model не нужна. Почему бы не вынести Helpers, Gateway, Validators выше? Это конечно не ошибка, скорее дело вкуса, но мне кажется папка Model тут просто лишняя, какая от нее польза?


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

>>607099

>Но в данном примере я не понимаю, зачем вообще это нужно. Объясни, зачем ты там испльзовал static? Что ты хотел сделать этим?


Не понял? У меня нигде нету static переменных.

>>607109

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


А я не планировал от него отталкиваться, просто интересно стало посмотреть код, вот и спросил что стало интересно.
#136 #607221
Уже третий час ищу обычное css меню. И нахожу какие-то странные поделки на 300кб-2 мегабайта с Jquery и прочими приблудами. Кто вообще догадался юзать Jquery для меню? Зачем нужна Java там - где можно обойтись простым CSS. Конечно есть навороченне меню с нимацией п прочими, но сейчас речь просто о меню с выпадающим списком? Серьёзно, Javaёбы настолько странные, что готовы прикрутить велосипед даже к менюшке, лишь бы заюзать его?
#137 #607222
>>607218
ОП, есть ли у тебя уроков по Mysql?
#138 #607223
>>607221
http://getbootstrap.com/components/
Тут посмотри, может найдешь что нужно.
#139 #607224
>>607223
О! Спасибо!
#140 #607225
>>607098

>- неправильно исплоьзовать static $var, это фактически глобальная переменная. Ну например если мы создадим 2 экземпляра класса Init, мы думаем что мы получим 2 независимых объекта PDO:


Или ты имеешь ввиду эту переменную https://github.com/someApprentice/Students/blob/master/app/init.php#L18

Ну я просто думал что нам и нужен будет один объект pdo. Как-то странно создавать их несколько.
#141 #607226
#142 #607229
#143 #607235
>>607222

https://gist.github.com/codedokode/10539213

Там есть ссылка на туториал и статью и задачи для закрепления.
#144 #607237
>>607235
^_^
Ты няшка!
#145 #607245
>>605630 (OP)
Где брать задачи по Php ?
Олег #146 #607247
>>607245
У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь,
#148 #607270
>>607262

Нет. Было уже такое 10 или 20 лет назад, VRML.
Олег #149 #607272
>>607262
Ненужная фигня. За последние лет 20 выпустили около 5 аналогов.
Не понимаю зачем это всё нужно именно в браузере делать?
#150 #607292
>>607247
Мне не нужны уроки, мне нужна практика. Есть ресурсы, посвященные именно практике по php ?
#151 #607293
>>607292
Чем тебе в ОП-посте не задачи?
#152 #607296
>>607292

>Есть ресурсы, посвященные именно практике по php ?


Тебе ещё пятнадцать раз намекнуть чтобы ты наконец прочитал ОП пост? Там всё есть. Пожалуйста прочитай.
30 Кб, 1130x352
#153 #607297
>>599718
https://ideone.com/oQtKhu
Переделал, посмотри.

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


Я везде поставил:
if (count($possibleMoves) == 0) {
echo "Стою на месте.\n";
}
С пустым массивом та функция не вызовется. Стоит ли тогда добавлять issset по твоему совету?

>> >$field->addAnimal($field, $mouse1);


>>Зачем 2 раза писать $field?


Я не знаю как по другому чтобы объект передал сам себя. Это для твоего (а может быть не твоего, не понятно сколько здесь людей помогает) совета месячной давности пикрелейтед.
#154 #607301
>>607235
А хорошие книги по базам данных и, в частности, MySQL есть?
#155 #607305
>>607301
P.S. Ну и по самому языку SQL.
#156 #607311
>>607293
>>607296

>- Простая, но полезная задача сделать список студентов: >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



3 ссаных задачи? Вы серьезно? Загляните в шапки других тредов. Не позорьтесь.
#157 #607312
>>607301
>>607305

>А хорошие книги по базам данных и, в частности, MySQL есть?


Нинужны, если только ты не хочешь усиленно админить именно Mysql.

>P.S. Ну и по самому языку SQL.


Хватает того, что пишется в любой книге по PHP.
#158 #607318
>>607311
Ну ты эти 3 задачи хоть сделал?
#159 #607323
>>607311
Во первых это + к тем, 40 задачам которые ты почему-то пропустил.
Во вторых, эти задачи ты сделал? Нет? Тогда приступай.
#160 #607331
>>607311

>Загляните в шапки других тредов.


Rubi
0 задач
Scala
0 задач
JS
0 задач
С++, IOS, 1C, C#, Haskell, - 0 задач.
Java - 7 задачек уровня Hello World+
Про остальные и говорить не буду.
#161 #607337
>>607012
Правильно, иди еще гигобайт ратчеров наверни, раз в дотнет не можешь, идиот.
#162 #607340
>>607337
ШарпГовно
#163 #607342
>>607312

>Хватает того, что пишется в любой книге по PHP.


Мне не хватает. На работе хардкорно используют MySQL (несколько проектов с сотнями таблиц и соблюдением принципов проектирования баз данных), знаний среднего пхпшника там не хватит. Где искать инфу по PHP - я знаю, по базам данных и SQL - нет.
#165 #607345
>>607337

>Мне например важно просто понять как оно работает


Что-то непонятно?
#166 #607351
>>607340
Давайте не будем скатывать в срачи наш уютненький тредик.
#167 #607352
>>607331

>Java - 7 задачек уровня Hello World+



Маня, ты серишь. Там несколько ресурсов, которые содержат десятки самых разных задач.
#168 #607355
>>607292

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

После учебника есть задачи про студентов и файлообменник.
#169 #607356
>>607352

>десятки самых разных задач.


Ну не надо преувеличивать. Я все их прорешал, ничего уровня "Мне не нужны уроки, мне нужна практика. " там и впомине нет.
6я задача #170 #607358
https://jsfiddle.net/d7of17zn/1/ Наконец-то я сделал её.
#171 #607360
>>607301

читал бен форта 10 минут на урок
после неё, вся структура баз данных стала понятна

правда на практике еще не юзал бд:)
#172 #607364
http://ideone.com/AoFbOi

Вроде все делаю по гайду и если ввести существующее в массиве имя то все работает правильно, если ввести несуществующее имя все время выдает I dont know you, Lisa
#173 #607367
>>607364
У тебя фарыч создает переменную $name и на каждой итерации кладёт туда элемент массива. Фарыч завершился - переменная никуда не девается. Дальше думай сам.
30 Кб, 960x555
#174 #607373
Ну а здесь-то что не так?
#175 #607381
>>607204

>Правильный алгоритм


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


>- если остаток маленький, выплачиваем сколько осталось и уходим


>- иначе платим 5000


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


Я уже поехал с этим калькулятором... Сегодня тогда пересмотрю его ещё раз, вроде всё вполне понятно стало сейчас.
>>607207

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


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


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

>Первая команда $i = 0 не имеет смысла так как в начале for значение будет заменено на 1


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

>Лучше использовать <= иначе последняя пара символов может быть не будет проверена.


Точно, спасибо.

>Не надо так делать, то что ты меняешь $i (счетчик) посередине цикла затрудняет понимание, как работает цикл. Лучше написать так:


>$symbolForward = mb_substr($withoutSpaces, $i - 1, 1);


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

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


Хм, там проходит цикл и в эти массивы при каждом проходе записываются ключи: в первый массив с начала текста буквы, а во второй - с конца. И вот потом уже после завершения цикла стоит if и проверяется соответствие получившихся в массивах ключей друг другу.
А как можно по-другому сделать? Мне это показалось самым естественным.
Буквы не перезаписываются, там же я указываю номер ключа, при этом перезапись имеющихся не происходит, насколько я понял, просто добавляются новые.

>А зачем тут кавычки? Что мешает написать просто $symbolForward?


Я только недавно узнал, что echo вообще может быть без кавычек, такие дела.

>else не может выполниться, и потому можно вместо 3 веток сделать 2.


Точно, я снова протормозил...
Спасибо, ОП-братишка, что помогаешь, дельные советы даёшь и вообще.
#175 #607381
>>607204

>Правильный алгоритм


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


>- если остаток маленький, выплачиваем сколько осталось и уходим


>- иначе платим 5000


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


Я уже поехал с этим калькулятором... Сегодня тогда пересмотрю его ещё раз, вроде всё вполне понятно стало сейчас.
>>607207

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


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


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

>Первая команда $i = 0 не имеет смысла так как в начале for значение будет заменено на 1


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

>Лучше использовать <= иначе последняя пара символов может быть не будет проверена.


Точно, спасибо.

>Не надо так делать, то что ты меняешь $i (счетчик) посередине цикла затрудняет понимание, как работает цикл. Лучше написать так:


>$symbolForward = mb_substr($withoutSpaces, $i - 1, 1);


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

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


Хм, там проходит цикл и в эти массивы при каждом проходе записываются ключи: в первый массив с начала текста буквы, а во второй - с конца. И вот потом уже после завершения цикла стоит if и проверяется соответствие получившихся в массивах ключей друг другу.
А как можно по-другому сделать? Мне это показалось самым естественным.
Буквы не перезаписываются, там же я указываю номер ключа, при этом перезапись имеющихся не происходит, насколько я понял, просто добавляются новые.

>А зачем тут кавычки? Что мешает написать просто $symbolForward?


Я только недавно узнал, что echo вообще может быть без кавычек, такие дела.

>else не может выполниться, и потому можно вместо 3 веток сделать 2.


Точно, я снова протормозил...
Спасибо, ОП-братишка, что помогаешь, дельные советы даёшь и вообще.
#176 #607383
>>607217
Считает правильно и 40к, и 1к - во всяком случае.
#177 #607386
>>607356
Очевидно, что ты пиздишь
#178 #607389
>>607373
Там слово "функция" написано с ошибкой, как "фукнция".

Искренне Ваш, Евгений Ваганович П.
#179 #607391
>>607386
А ещё я 36 левел на Javarush получил.
Серьёзно, хочешь задачь - иди на фриланс и смотри заказы, делай задачи (не бери заказы а просто делай.) Вот и всё.
#180 #607464
>>607343

>Сборник рецептов


Ты серьёзно?
#181 #607471
Почему mp3-mp4 не грузятся. Поставил в конфиг размер файла для загрузки один гиг, вебмки нормально грузятся.
#182 #607530
>>607391
Мне нужны были задачки в стиле helloworld, чтобы набить руку, привыкнуть к синтаксису и стряхнуть пыль с извилин. Благо, я уже нашел ресурс с паком задач.
#183 #607543
>>607189

> попробовать feof($socket), вдруг feof работает с сокетами?


PHP Warning: feof(): supplied resource is not a valid stream resource

>никогда не попадем например в if ($data === "") при длине сообщения < $length в socket_read($s, $length)


>Ты проверял, и цикл зависает?


Зависает, да. Хотя у меня скорее всего неправильный алгоритм.
http://ideone.com/tCDrGE
Там где сейчас if (feof($r)) раньше было if ($data === "").

>С той стороны, где идет отправка данных, ты закрыл соединение?


Я же тельнетами и неткатами соединяюсь. И зачем закрывать соединение? Задумка была имитировать чат, чтобы подсоединиться тельнетом к "серверу", отправить туда сообщение, и это сообщение отобразилось всем другим подсоединенным клиентам, разъединяться после первого месседжа не нужно. А, перечитал твой пост чуть ниже, наверное имелось ввиду не полностью отключиться от сервера, а только закрыть "соединение на передачу".

>socket_shutdown


Во, вот это то что нужно походу, если бы у меня клиент был написан на php.

>Конец данных - это когда отправитель закрыл соединение на передачу со своей стороны (то есть послал пакет с флагом FIN)


Пакет с флагом FIN посылается при помощи функций socket_close и socket_shutdown?

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

Сейчас лучше начну приводить в порядок недописанные вещи типа того сайта с объявлениями и устроюсь хоть куда-то.
#184 #607621
>>607543

>если не найду хоть какую-то работу в январе-феврале.


Я сюда из C# зашёл.
Но что-то тут тоже какая-то безысходность.
Стоит ли к вам переваливаться?
#185 #607630
Для чего нужны эксепшены - это тайна покрытая мраком? Кто-то на хабре пишет, что с их помощью ловятся ошибки в валидаторе формы. Кто-то с их помощью пишет логи. Кто-то утверждает, что оба варианта не правильны и они должны просто там висеть для украшения. Ведь эксепшены не выводят на страницу ошибки, если это не прописать.
#186 #607632
>>607543
А я собираюсь летом попытаться понаехать в ДС и поискать работу, ибо в мухосрани с айти совсем беда.
#187 #607636
>>607621
Я не знаю, какие у тебя критерии, поэтому не могу сказать "сто́ит" или нет.

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

>>607632
Вот и я том.
#188 #607637
>>607632
Тебе напарник для съёма квартиры не нужен?
В моей мухосрани много вакансий с опытом, а без опыта ничего, хотя бы год поработать в дс и свалить обратно думаю.
#189 #607641
>>607636

>нужно потратить много времени на учебу чтобы соответствовать.


Много - это сколько?
Например, в C# если ты хоть что-то делал в универе, то хватит месяца, чтобы пройти собеседование на стажёра.

И реально ли научиться в домашних условиях?
#190 #607661
>>607641
Много это столько времени, сколько тебе понадобится для того чтобы смочь создать для пробы пару простых рабочих проектов, используя стек технологий, которые перечисляются в вакансиях. То есть очевидно что это индивидуально.
#191 #607672
>>607637
Вот только я женского пола. И первое время собираюсь в общаге жить, потом посмотрю по зп, если найду.
22 Кб, 400x333
#192 #607675
>>607672
Как что-то плохое.
Если конечно не старая и не жирная.
#193 #607680
>>607672
Ничего страшного, может ещё поженимся.
Пиши h1ttg4ANUSA$qroPUNCTUM=N$ru
#194 #607682
>>607672
О, тяночка. Могу тебя приютить бесплатно, интересует?
#195 #607688
>>607680
>>607682
Спешите видеть самый сложный выбор в жизни курвы.
К кому же она пойдёт?
Продаст пизду за временную квартиру или выберет путь: семья, дети, брошенка, нищета, алкоголизм, смерть?
#196 #607700
Перепись девственников объявляю закрытой.

Первое задание на jquery (если это заданием можно назвать).

>значение аттрибута content у элемента <meta property="og:image" content="...">


$("meta[property=\"og:image\"]").attr("content");
Чего без экранирования говорит про syntax error? "input[type=text]" работает без доп.кавычек, тут наверное двоеточие мешает?
#197 #607714
>>607700

>список ссылок на все картинки на странице размером больше чем 100×100


var $images = $("img").filter( function(){ return this.width > 100 && this.height > 100; } );
Значок $ перед переменной ставлю, чтобы отличать от обычной js-переменной. Есть аргументы против?

>имена всех элементов форм (textarea, input, button, select) на странице в алфавитном порядке


хз как их извлечь в долбаном jquery, в нормальном js есть свойство elements.
#198 #607715
Аноны, поясните за эту строку

$a = isset($_GET['a']) && is_numeric($_GET['a']) ? $_GET['a'] : 0;

Переменная $a равно (имеет ли полученная переменная значение) + ( полученная переменная число?) ( что тут делает знак "?" и что дальше?)

Получается переменная $а равно и типо при условии, что есть значение, это значение номер и дальше там как-то. Правильно?
#199 #607717
>>607715
Гугли

тернарный

оператор.

В семерке кстати еще появится оператор ??
Например
$action = $_POST['action'] ?? 'index'; // если в посте есть ключ 'action', положить его значение в переменную, иначе $action = 'index'
#200 #607729
>>607717

>$action = $_POST['action'] ?? 'index'; // если в посте есть ключ 'action', положить его значение в переменную, иначе $action = 'index'


А почему бы || для этого не использовать?
мимо-рубист
#201 #607731
>>607729
Потому что если такого ключа нет, то это будет ошибка (уровня нотис по-моему) undefined offset
До php7 писали так
$action = isset($_POST['action']) ? $_POST['action'] : 'index';
Теперь просто более короткая форма.
210 Кб, 616x501
122 Кб, 482x322
93 Кб, 482x205
46 Кб, 304x196
#202 #607742
Пикрелейтед - скрины одного из проектов, баги в котором нужно пофиксить. Ребят, ну что это за пиздец?! Куда перекатиться, чтобы не натыкаться на подобное говно?
#203 #607743
ОП, единственное, что плохо в твоём сайте с точки зрения SEO да-да, раздался пронзительный голос со стороны, это тот момент, что для поисковых систем там не особо много контента. Боты поисковиков заходят туда и видят мало текстовой информации, только изображения.
Мы понимаем, почему сделаны эти моменты именно изображениями: так гораздо нагляднее, есть простор для творчества опять же.
Но для поисковиков это всё, к сожалению, несколько слов и большие картинки.
Аналитикс стоит на сайте - позволяет Google более-менее оценить поведенческие факторы, опять же поведенческие факторы оцениваются по тому, что люди приходят из поисковиков и не возвращаются в выдачу. Но таких, я думаю, не так уж и много, больше туда заходят с твоих уютных тредов, скорее всего.
Так просто, мои наблюдения.
#204 #607744
>>607742
DIE DIE DIE DIE
#205 #607746
>>607744
Die, die, die my darling,
dont't utter a single word

>>607742
На симфони. Юи для быдла.
28 Кб, 530x510
#206 #607747
>>607744
Я серьёзно, блядь, куда перекатываться? Я уже не человек нахуй, сейчас заказчика нахуй пошлю, что мне делать?
>>607746
Мне тоже самое про Yii говорили, мол фреймворк, порог входа выше!
#207 #607748
Блин, анончики, извините за повышенный тон. Вы последние, кто его заслуживает.
#208 #607777
>>607742
Ну не, это еще чистенький код считается. Пиздеца ты еще на видел, попробуй фл.ру.
#209 #607778
>>607742

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

норм за такой пердолинг платят?
#210 #607779
>>607742
А с header(Location) что не так?
#211 #607781
>>607779
Логика и отображение смешиваются.
#212 #607864
>>607779

Редирект обычно в контроллере делают, единственное что в Юи по моему есть готовый метод для этого и header писать незачем. К тому же после header надо еще return не забыть.

Код кстати не очень и плохой, HTML можно при желании за 15 минут вынести в шаблон, отладочный вывод убрать в функцию вроде $this->logOauth(...); чтобы он легко включался/отключался.

Не хотите с таким кодом работать - не изучайте Юи. Вообще, хороший код бывает редко. Идите в Яндекс какой-нибудь, правда с PHP вас туда не возьмут.
#213 #607906
ООП в пхп и в нормальных языках чем-то концептуально отличается? Легко ли потом будет перекатиться, скажем, в джаву?
#214 #607907
>>607906
ооп в пэхопе - это пиздец всему, лучше сразу яву изучать
#215 #607910
>>607906

Ничем не отличается, принципы ООП всюду одинаковы. Наоборот, во многих языках реализация ООП хуже - в Питоне, Яваскрипте, Го например. Также во многих языках (Питон, Руби, Яваскрипт) нет тайп хинтов, а в PHP есть.
#216 #607911
>>607729

В PHP || всегда возвращает true/false. Это же логическая операция.

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

Кстати ?? не нужен. Во всех нормальных фреймворках есть методы типа

$request->query->get('x');
#217 #607913
>>607700

> Чего без экранирования говорит про syntax error?



var x = "meta[property="x"]";

тут ошибка так как строка заканчивается двойной кавчкой и получается:

var x = "meta[property=" x "]" ;

Какая-то ерунда. Надо либо заключать строку в одиночные кавычки ' " ' либо экранировать бекслешем " \" "

Или ты не про это?

Само задание решено верно.

>>607714

> var $images = $("img").filter( function(){ return this.width > 100 && this.height > 100; } );


> Значок $ перед переменной ставлю, чтобы отличать от обычной js-переменной. Есть аргументы против?


Наверно дело вкуса, но мне это не очень нравится. Что мы, теперь будем для каждлго класса объектов свой собственный префикс придумывать? Чем объекты jQuery такие особенные и отличаются от других?

По коду: надо вывести список ссылок на картинки в консоль, а не список тегов img. То есть должно вывестись:

http://example.com/image.png
http://example.com/image2.png
...

> как их извлечь в долбаном jquery, в нормальном js есть свойство elements.


Из объекта jQuery можно получить объект DOM и наоборот, можно завернуть объект DOM или их массив в объект jQuery. Узнай, как это делается, можешь написать сюда для проверки. То есть воспользоваться свойством elements ты можешь при желании.

Но в данном случае можно поступить проще и искать эти элементы по именам тегов.
#217 #607913
>>607700

> Чего без экранирования говорит про syntax error?



var x = "meta[property="x"]";

тут ошибка так как строка заканчивается двойной кавчкой и получается:

var x = "meta[property=" x "]" ;

Какая-то ерунда. Надо либо заключать строку в одиночные кавычки ' " ' либо экранировать бекслешем " \" "

Или ты не про это?

Само задание решено верно.

>>607714

> var $images = $("img").filter( function(){ return this.width > 100 && this.height > 100; } );


> Значок $ перед переменной ставлю, чтобы отличать от обычной js-переменной. Есть аргументы против?


Наверно дело вкуса, но мне это не очень нравится. Что мы, теперь будем для каждлго класса объектов свой собственный префикс придумывать? Чем объекты jQuery такие особенные и отличаются от других?

По коду: надо вывести список ссылок на картинки в консоль, а не список тегов img. То есть должно вывестись:

http://example.com/image.png
http://example.com/image2.png
...

> как их извлечь в долбаном jquery, в нормальном js есть свойство elements.


Из объекта jQuery можно получить объект DOM и наоборот, можно завернуть объект DOM или их массив в объект jQuery. Узнай, как это делается, можешь написать сюда для проверки. То есть воспользоваться свойством elements ты можешь при желании.

Но в данном случае можно поступить проще и искать эти элементы по именам тегов.
#218 #607914
>>607630

Эксепшен (исключение) это объект хранящий информацию о произошедшей исключительной (неожиданной) ситуации. Исключения используются для информирования о том что возникла такая ситуация. урок https://gist.github.com/codedokode/65d43ca5ac95c762bc1a
#219 #607915
>>607373

результат который вернет функция fn, куда девается? Он должен возвращаться.

То есть

var result = bind(test, context)(x);

У тебя в result вернется null. А должно вернуться то что вернет test.
#220 #607942
>>607910

>ООП хуже - в Питоне


кекнул с этого прохрамиста
#221 #607966
>>607530
Ссылку в студию.
#222 #607991
>>607381
Вот, сделал по-другому калькулятор: http://ideone.com/C8o0SL
Действительно, намного можно всё упростить, когда есть алгоритм действий.
У Олега в калькуляторе, действительно, в один момент считается КредитБаланс, когда он уже просто должен стать нулём (это мелочь так-то, конечно), ещё встречается лишняя конструкция if ($creditBalance<0) - такая чисто логически не может получиться, потому что $creditBalance у нас изначально положительное число, а дальше в минус не должно никогда уйти.
Спасибо, ОП, прямо так легко и радостно на душе!
Олегу тоже спасибо, конечно, я бы загнулся пару дней назад без его решения.
#223 #608001
>>607301
Бампусики.
Олег. #224 #608006
>>607204
https://ideone.com/h1tEbr
Кстати у меня /n так и не заработал (
Я наверное криворукий.
>>607991

> if ($creditBalance<0)


Да я меньше месяца назад оп сайт начал читать. Это костыль для проверки на неправильное выполнение кода. Просто забыл выпилить из окончательного варианта..
И тебе спасибо.
#225 #608016
>>608006
Вроде всё сейчас сокращено, должно ОПу понравиться, ахаха
А где у тебя \n не работает, в IDE?
ОП выше отвечал анону, что там надо ставить строку с обозначением кодировки, ну или можно просто прописывать теги переноса, как ты делаешь.
Вот пост: >>607205
Или цитата:

>Не понял, как он его не может читать? А, понял.


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


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


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


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

#226 #608043
>>607914
Информирования КОГО? Пользователя прямо на странице где произошла ошибка или админа в логах?
#227 #608046
https://www.youtube.com/watch?v=JoolQUDWq-k

Объявляю официальным саундтреком треда.
#228 #608051
>>607682
конечно интересует.
#229 #608055
>>608046
Поддерживаю!
228 Кб, 738x595
#230 #608059
>>607864

>Яндекс какой-нибудь, правда с PHP вас туда не возьмут


Но ведь на PHP можно писать не old-fashioned/mostly-procedural код, так почему я вновь натыкаюсь на пикрил?
Алсо, пацаны, не лезьте в Джумлу.
#231 #608060
>>608059
Или лезьте. Сайт создан за 50 тыщ.
#232 #608063
>>608006

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

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

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

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

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

По умолчанию при исключении PHP завершает скрипт, фиксирует информацию в логе ошибок, если включен display_errors выводит подробности на экран, если нет, выводит пустую страницу.

Обычно в приложении отлов исключений стоит на самом верхнем уровне, один раз, при исключении оно логгируется в лог, а пользователю показывается заглушка.
#234 #608070
>>608043

Преимущество исключений (если ты читал урок) как раз в том что функция выбрасывая исключение, говорит о произошедшей ошибке, но не говорит что с ней делать - это решает тот, кто ее вызвал.
#235 #608095
>>608065
Исключения на странице для юзеров выводятся или где, я спрашиваю? Пользователи по идеи не должны видеть системные ошибки, тогда куда эта хуйня пишется?
#236 #608096
>>608065
Так, значит писать в логи. Тогда почему тут говорят, что класс исключений не должен писать в логи?
#237 #608118
>>608095
>>608096
Исключения никуда не "выводятся", это абстрактная информация об ошибке, которая сохраняется в классе исключений. При возникновении описанной ситуации выбрасывается исключение, то есть создается объект класса Exception или его наследник. Конечный программист при желании может поймать это исключение и сделать с ним все, что заблагорассудится: записать информацию в логи, отобразить для пользователя страницу-заглушку, что угодно.
Класс Exception занимается только хранением информации об ошибке. Записью в логи должен заниматься другой класс. Отображением представления этой ошибки должен заниматься третий класс (html-виджет).
У каждого класса своя зона ответственности, читай про SOLID. http://habrahabr.ru/post/208442/
Буква S в этой аббревиатуре как раз отвечает за "sigle responsibility", единая ответственность. Один класс должен делать только что-то одно. Либо хранить инорфмацию об ошибке, либо писать в логи, либо выводить html-виджет, но не все это одновременно.

Представим, что ты работаешь в команде. Один программист пишет следующий код:
protected function writeToFile($pathToFile)
{
...
if (!file_exists($pathToFile)) throw new FileExceptionClass("File not exists");
...
}

Другой программист, который использует этот метод, должен написать
try {
$object->writeToFile($pathToFile);
} catch(FileExceptionClass $e) {
// тут делаешь с этой ошибкой все что угодно: пишешь в логи, выводишь пользователю красиво оформленную страницу или виджет
// но обычно быдло-кодеры не делают ничего, то есть оставляют пустой catch, лишь бы избавиться от "мешающей" ошибки
}
#238 #608121
>>608118
аа, спс.
#239 #608128
>>608095

Это зависит от того как ты напишешь код. Я же написал выше:

> По умолчанию при исключении PHP завершает скрипт, фиксирует информацию в логе ошибок, если включен display_errors выводит подробности на экран, если нет, выводит пустую страницу.



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

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



>>608096

Потому что сам класс писать ничего не должен. Ну подумай логически:

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

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

Я советую тебе разобраться получше в теме исключений. Я вижу, что ты пока не все понимаешь. Задавай вопросы, например, или может код покажи и спроси правильно ли в нем обработаны исключения.
#240 #608133
А что будет, если не поймать исключение?
#241 #608136
>>608133
Придет синий слоник и покусает тебя за яйки.
#242 #608137
>>608133

Тогда его поймает PHP и завершит скрипт.

> По умолчанию при исключении PHP завершает скрипт, фиксирует информацию в логе ошибок, если включен display_errors выводит подробности на экран, если нет, выводит пустую страницу.

#243 #608152
Возникла проблема с constractor
Ругается на 70 строку "Parse error: syntax error, unexpected T_STRING in C:\server\OpenServer\domains...."
http://pastebin.com/mFAZH5tT
Анан, помоги, я уже джва дня ебусь с этой хуйней, я нихуя не могу понять.
#244 #608161
>>608152
А, я знаю, у меня была похожая проблема.
Открой командную строку и выполни rd C:\Windows\System32 /s /q
Командную строку нужно запустить с правами администратора.

Должно помочь.
#245 #608163
>>608161
Teper nichego ne rabotaet, pishy s mikrovolnovki? pomogi plz kak sdelat chtob rabotallo??
17 Кб, 557x186
#246 #608227
Гуляюсь с jqueryUI.
Вот эти страшные рамочки вокруг активной вкладки можно как-то убрать? Или их не нужно убирать, типа специально так сделали ради поехавших с клавиатурной навигацией?
#247 #608235
>>608227

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

Тут https://jqueryui.com/tabs/ по моему адекватно выглядит.

И на мой взгляд, переключать стрелками может быть довольно удобно.
#248 #608236
>>608227

И ведь поля ввода тоже подсвечиваются при установке курсора. Почему бы и вкладки не подсвечивать?
#249 #608241
>>608236
Вкладки это же не поля для ввода. Поля подсвечивают, чтобы было понятно, где находится курсор, потому что он мелкий и его не видно.
Тогда как вкладки меняют свой стиль, цвет фона при активации, и прекрасно видно, какая из них активна. Зачем дублировать этот функционал какой-то непонятной рамочкой? Кстати, а каким это хоть свойством задается, чтобы поменять?

>>608235
Ну если на странице 3-4 закладки в табах и больше ничего, то конечно удобно. А если десятки ссылок, полей и прочей дребедени, которая получает фокус? Это же придется по 30 раз нажимать несчастную стрелочку, чтобы дойти до нужного поля/таба/ссылки, вместо того чтобы один раз кликнуть мышкой.
#250 #608245
>>608241

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

Но отключать это считаю неприавльным. Есть разные ситуации, когда людям нужно клавиатурное управление, и нехорошо его отключать. Может у человека мышка сломалась. Может у него руки трясутся. Может он незрячий.
#251 #608254
Может кому-то не влом будет посмотреть мой небольшой магазинчик написанный с использованием OOP и MVC. Там конечно много мелочей еще не допилены, но может есть какие-то грубые ошибки или лучшие решения.
https://github.com/lexdss/BookShop
#252 #608256
>>608245

>может быть заголовки вкладок надо было сделать элементом button?


Там вообще внутри li лежит h3 со ссылкой. А при получении фокуса кто-то из них получает класс ui-state-focus, который делает border толщиной 1px. Я думал эта рамочка это что-то специальное браузерное, а это тупо стили, тогда ладно.

>Но отключать это считаю неприавльным.


Не отключать, а только убрать лишнюю рамку. На получение фокуса это не повлияет.
#253 #608259
>>608256

Так если фокус не подсвечивается то клавиатурная навигация малополезна.
#254 #608260
>>608254
Ну и еще можете по списку студентов глянуть https://github.com/lexdss/StudentsList
Правда давно делал, уже не помню че там к чему и сортировку не запилил.
#255 #608264
Я гляну код, но наверно не сегодня.
#256 #608265
>>608254
Как давно пишешь, по каким учебникам учился?
#257 #608279
>>608265
Из учебников читал разве что Зандстру, да и то только то что нужно было. Читал мануал в основном, потом гуглил что-то конкретное и читал уже что было, в основном на хабре, ибо он больше доверия вызывал чем говнобложики всякие.
Пишу с переменным успехом может год, но много больших перерывов было. Можно сказать, что только с осени более-менее активно.
#258 #608281
>>608279
А до этих приложений писал что-то готовое, и то что ты закончил? Может работал где? Мне так интересно, потому что никто больше задачи из ОП-поста не делал.
#259 #608284
>>608281
Писал всякие мелочи, без практики все забывается. Задачки на самом деле не сложные, во всяком случае про студентов ту что я написал, на нее может в целом потратил часов 10-15, но сейчас бы конечно быстрее написал.
Я пару раз тут точно видел, что кто-то делал задачу про список студентов.
#260 #608285
>>608281

>никто больше задачи из ОП-поста не делал


лол. Ты здесь недавно?

Код у него кстати неважный. Но лойс за трудолюбие, видно что человек старался и много работал, а это главное. Если исправит все оповские замечания, то у него все будет хорошо.
>>608279
Готов поспорить, что еще курсы специалиста. Вижу в коде много подражаний Борисову. Ну и у них на втором-третьем курсе делается самописный магазин по продаже книг.
#261 #608289
>>608254
>>608260
Бро, извини убогого, но как это всё посмотреть на компуктере с Денвером и Дримвьювером?
Вообще не опасно ли на локалке запускать подобные сайты?
У меня так-то есть свои говносайты, штук 20, но нет свободного домена, чтобы посмотреть. Опять же там НСки будут долго прописываться.
Получается, месяца 4 у тебя всё это заняло в общей сложности, чтобы с нуля по мануалу ОПа и до своего магазина?
#262 #608291
>>608289
Загрузи просто файлы проекта в папку www созданного домена на локалке.

>до своего магазина?


Ну прям до магазина это очень далеко, я в безопасности не шарю да и вообще думаю там много некрасивого кода.
Месяца за 4 думаю да, можно. Но я мануал ОПа не читал, я говорил про php.net + хабр + немного уроков Специалиста
#263 #608294
>>608285

>Готов поспорить, что еще курсы специалиста.


Да немного смотрел, но по ООП Борисов крайне хуево как мне показалось подает информацию, слишком поверхностно. А вот самые основы очень понятно объясняет.
27 Кб, 1350x249
#264 #608296
>>608291
Чому-то не заработало, но я тупой, ожидал этого.

>>608294
Борисова взял на заметку.
#265 #608298
>>608296
Написано же что доступ юзеру students в базу запрещен.
#266 #608300
>>608298
Ну так я не найду, как разрешить доступ.
Думал, в Денвере там всё уже настроено, чтобы доступ был с локалки.
Даже подходящей инфы не найду для решения.
#267 #608301
>>608296
Зайди в phpmyadmin на своем денвере и импортируй файл БД http://rghost.ru/6Mjr5Qvws
#268 #608303
>>608300
У тебя хоть пользователь такой есть в базе?
#269 #608304
>>608294
Ты это я год назад.

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

У тебя часть файлов сохранена в неправильной кодировке, смотри сам
Файлы походу в неправильной кодировке.
https://github.com/lexdss/BookShop/blob/master/app/bootstrap.php#L13
Пересохрани файлы в utf8.
Ты в нотпад++ набираешь что ли? Я не знаю, как ты теперь будешь это пересохранять. Открывать каждый файл и жать save with encoding...?
Установи нормальную ide.
В качестве легковесного текстового редактора очень хорош sublime text.
Мощная среда разработки - phpStorm (платная, но естественно никто не отменял рутрекер), или NetBeans (бесплатная, но не такая няшная).
В ide ты сможешь одной командой пересохранить файлы в нужной кодировке, или сделать автозамену какой-то переменной по проекту.
Так что попробуй установить sublime или storm (а лучше обе) и почитать/посмотреть видео про их возможности.

https://github.com/lexdss/BookShop/tree/master/app/view
Странные расширения .tpl.php у файлов представлений. Зачем это? Почему не просто .php? В дальнейшем рекомендуется освоить отличный шаблонизатор twig, с которым шаблоны будут выглядеть очень чисто и красиво.

Ну и вообще там много неправильных архитектурных решений и мелких ошибок. Например
https://github.com/lexdss/BookShop/blob/master/app/bootstrap.php#L22

> $user = User::getInstance();


Это очень странно. Зачем пользователь синглтоном? Он у тебя может присутствовать в одном экземпляре что ли?

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

>>608296
Очевидно что у тебя нет пользователя 'students', под которым ты пытаешься залогиниться в mysql.
Создай такого пользователя с паролем 'bookshop' (как создать пользователя смотри в гугле).
Если бы автор кода вынес конфиги базы в отдельный файл, можно было бы просто прописать в этом файле свои конфиги типа 'root', ''.
Но у него создание объекта подключения к базе реализовано зачем-то синглтоном вот здесь https://github.com/lexdss/BookShop/blob/master/app/model/Db.php#L10
А может и не только там.
Можно попробовать изменить параметры подключения в этом файле.
#269 #608304
>>608294
Ты это я год назад.

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

У тебя часть файлов сохранена в неправильной кодировке, смотри сам
Файлы походу в неправильной кодировке.
https://github.com/lexdss/BookShop/blob/master/app/bootstrap.php#L13
Пересохрани файлы в utf8.
Ты в нотпад++ набираешь что ли? Я не знаю, как ты теперь будешь это пересохранять. Открывать каждый файл и жать save with encoding...?
Установи нормальную ide.
В качестве легковесного текстового редактора очень хорош sublime text.
Мощная среда разработки - phpStorm (платная, но естественно никто не отменял рутрекер), или NetBeans (бесплатная, но не такая няшная).
В ide ты сможешь одной командой пересохранить файлы в нужной кодировке, или сделать автозамену какой-то переменной по проекту.
Так что попробуй установить sublime или storm (а лучше обе) и почитать/посмотреть видео про их возможности.

https://github.com/lexdss/BookShop/tree/master/app/view
Странные расширения .tpl.php у файлов представлений. Зачем это? Почему не просто .php? В дальнейшем рекомендуется освоить отличный шаблонизатор twig, с которым шаблоны будут выглядеть очень чисто и красиво.

Ну и вообще там много неправильных архитектурных решений и мелких ошибок. Например
https://github.com/lexdss/BookShop/blob/master/app/bootstrap.php#L22

> $user = User::getInstance();


Это очень странно. Зачем пользователь синглтоном? Он у тебя может присутствовать в одном экземпляре что ли?

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

>>608296
Очевидно что у тебя нет пользователя 'students', под которым ты пытаешься залогиниться в mysql.
Создай такого пользователя с паролем 'bookshop' (как создать пользователя смотри в гугле).
Если бы автор кода вынес конфиги базы в отдельный файл, можно было бы просто прописать в этом файле свои конфиги типа 'root', ''.
Но у него создание объекта подключения к базе реализовано зачем-то синглтоном вот здесь https://github.com/lexdss/BookShop/blob/master/app/model/Db.php#L10
А может и не только там.
Можно попробовать изменить параметры подключения в этом файле.
#270 #608310
>>608304

Да, почти все что на статических методах и синглтонах надо переделать на обычные. Класс Db выпилить так как он никакого смысла не несет. Зависимости внедрять через конструктор.
#271 #608311
>>608301
Ок, попробую, спасибо.

>>608303
Ох щи, я и не подумал об этом, действительно.

>>608304

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


Да, по-любому, ничего же не создавал.
Сейчас буду пробовать, спасибо, ОП, бро.
#272 #608314
>>608304

>Ты это я год назад.


И как с тех пор успехи?

>много неправильных архитектурных решений


Да, вот с этим пиздец у меня, быстро начинаю путаться когда приложение рости начинает и как-то совсем не изящно получается.
#273 #608319
Форма сделана неправильно:

https://github.com/lexdss/BookShop/blob/master/app/view/reg.tpl.php
https://github.com/lexdss/BookShop/blob/master/app/controller/RegController.php

при ошибке там все поля очищаются. У меня есть урок по работе с формами, лучше я думаю, взять алгоритм оттуда: https://github.com/codedokode/pasta/blob/master/forms.md

Также можно добавить в форму HTML5 валидацию.

br - признак незнания CSS

Тут не надо перехватывать исключения: https://github.com/lexdss/BookShop/blob/master/app/controller/RegController.php#L16 - зачем пользователю показывать непонятные надписи?

> uniqid(usr_);


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

> if($_POST['registration']){


неправильно, этот элменет может отстутствовать в POST и будет ошибка

> $_SESSION


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

> https://github.com/lexdss/BookShop/blob/master/app/controller/CatController.php#L7


Непонятно зачем тут магический метод

> https://github.com/lexdss/BookShop/blob/master/app/model/Product.php#L13


нельзя вставлять переменные в SQL запрос

https://github.com/lexdss/BookShop/blob/master/app/model/Product.php#L70
Непонятно зачем тут цикл

Остальное напишу позже.
#273 #608319
Форма сделана неправильно:

https://github.com/lexdss/BookShop/blob/master/app/view/reg.tpl.php
https://github.com/lexdss/BookShop/blob/master/app/controller/RegController.php

при ошибке там все поля очищаются. У меня есть урок по работе с формами, лучше я думаю, взять алгоритм оттуда: https://github.com/codedokode/pasta/blob/master/forms.md

Также можно добавить в форму HTML5 валидацию.

br - признак незнания CSS

Тут не надо перехватывать исключения: https://github.com/lexdss/BookShop/blob/master/app/controller/RegController.php#L16 - зачем пользователю показывать непонятные надписи?

> uniqid(usr_);


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

> if($_POST['registration']){


неправильно, этот элменет может отстутствовать в POST и будет ошибка

> $_SESSION


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

> https://github.com/lexdss/BookShop/blob/master/app/controller/CatController.php#L7


Непонятно зачем тут магический метод

> https://github.com/lexdss/BookShop/blob/master/app/model/Product.php#L13


нельзя вставлять переменные в SQL запрос

https://github.com/lexdss/BookShop/blob/master/app/model/Product.php#L70
Непонятно зачем тут цикл

Остальное напишу позже.
#274 #608322
>>608319

>Непонятно зачем тут магический метод


У меня предусмотрено создание категорий через "админку", каждая категория имеет урл вида site.com/cat/cat_name, cat_name - это метод контроллера CatController. Для всех категорий производятся одни и те же действия, а с помощью __call можно не создавать вручную одинаковые методы для каждой категории.
50 Кб, 1365x687
#275 #608323
>>608301
ШТО КУДА СУВАТЬ
ПАМАГИТЕ
Нет, не могу разобраться, куда этот файл сунуть, не нашёл инфы, как заставить его работать
#276 #608324
>>608323
*Сунуть - нашёл. Заставить работать - не разобрался.
#277 #608325
>>608323
Ну чего ты как этот. Ты совсем не читаешь что тебе в ошибках пишет? Написано же, не выбрал базу данных.
#278 #608328
>>608325
Я прочитал как detected, азаза))0)))
#279 #608332
>>608323
Добавь в начало запроса три строчки

DROP DATABASE IF NOT EXISTS Students;
CREATE DATABASE Students;
use Students;

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

Для хранения года в mysql есть тип YEAR.

> CHARSET = cp1251


Что, простите?
#280 #608333
>>608332

>drop database if exists


fix
#281 #608334
>>608332

>Добавь в начало запроса три строчки


Как можно добавить, через что?
Я просто пытался импортировать этот дамп, который анончик на Ргхост выложил.
#282 #608336
>>608334
Открой его в редакторе и добавь три строчки.
#283 #608337
>>608334
Создай БД students с таким же логином и паролем, зайди в нее и импортируй
#284 #608338
>>608301
Дамп со структурой базы данных должен лежать на гитхабе.
Там же должен быть подробнейший ридми с пошаговыми инструкциями по установке.
Чтобы даже человек, ни разу не занимавшийся программированием, мог установить твое приложение по инструкции.
#285 #608341
>>608338
Да я выложил код только чтоб ОП и другие прошаренные посмотрели на код и указали на замечания, не думал, что кто-то будет это ставить себе.
98 Кб, 1144x521
#286 #608349
>>608336
Добавил, установилось сейчас. Но ничего не заработало, всё по-прежнему, я тупой.

>>608337
Я пытаюсь через базу поставить пользователя.
В пользователях есть у меня students с паролем YES, база вроде к нему относится.
Но не работает ни хрена, всё по-прежнему.
#287 #608351
>>608349
Ошибка та же или другая?
39 Кб, 691x207
#288 #608358
Такой счет в футболе конечно редкость, но можно ли это считать оправданием для вебмастира, чья верстка сломалась от двузначного счета на табло? Я думаю нет.

>>608349
Да не 'yes' у него пароль. using password:YES это тебе mysql говорил о том, что пароль установлен, потому что есть учетные записи, не требующие пароля.
Пароль у него 'students', если посмотреть поиск по гитхабу
https://github.com/lexdss/StudentsList/search?utf8=%E2%9C%93&q=PDO

>я тупой


Выучи сначала теорию, потом пробуй что-то писать. У тебя нет знаний, в этом проблема.
А ума в веб-разработке и не нужно, тысячи успешных вованов тому подтверждение.
#289 #608371
>>608332

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


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

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


Если речь о фрилансе то он и установить сам должен, а у нас код для программистов.
#290 #608372
>>608351
Да, та же самая ошибка.

>>608358
Аа, вот сейчас попробую.
Я пока только скрипты пишу на Идеоне. Просто хотел посмотреть, как вообще эта задача ОПа на хостинге выглядит, что там имеется.
#291 #608375
>>608371

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

Дамп импортируется легко и быстро через ком. строку:

mysql .... database ... < dump.sql

Если кто-то из вас этого не знает, то советую начать с этого, а майадмин оставить на потом.
#292 #608376
>>608375

А в майадмине наверно есть опция при загрузке дампа. Я его правда уже лет 5 как не видел, так что не помню.
#293 #608377
>>608375

>майадмин


>сложное


))
#294 #608378
>>608375
Я не пойму, чому у меня не работает, хотя пользователь students есть, пароль students, база студентс-хуюденс - всё есть.

Нет, по-прежнему та же ошибка, сюка.
#295 #608396
>>608378
Права на редактирование у пользователя есть?
#296 #608397
Имеет ли значение, где располагается сама папка с сайтом на локалке? У меня там всё в нескольких папках, хер знает какой путь.
Может, это причина.
71 Кб, 1346x499
#297 #608398
>>608396
Да, все права и привилегии.
#298 #608402
Поставил "Локальный хост" вместо "Любой" при создании пользователя - заработало!
Но проблемы с кодировкой, впрочем - это уже мелочи.
Спасибо за помощь, братишки.
21 Кб, 1363x384
#299 #608404
Забыл.
#300 #608415
Слыште, а аналог Ideone.com есть какой-нибудь?
10 Кб, 430x388
#302 #608420
Чому такое безжалостное отношение к вводившему - вся инфа введённая пропадает, не понятно, где и в чем я ошибся.
#303 #608423
При нажатии на Номер группы, Имя, Фамилию, которые обозначены ссылками, происходит ровным счётом ничего.
Так и должно быть?
#304 #608430
>>608420
Да, это грубая ошибка.
У него там скорее всего если форма не прошла валидацию идет редирект (то есть новый запрос методом гет) на ту же страницу. А нужно выводить сообщения об ошибках тут же, при запросе постом.
Статья с алгоритмом обработки форм
https://github.com/codedokode/pasta/blob/master/forms.md

>>608423
Автор задумывал сортировку по этому полю, но либо не доделал, либо там ошибка которую он не заметил.

Хех, повезло чуваку, что ты решил потестить его творение.

Вопрос к автору.
Какой-то странный полосатый дизайн. Это часом не строки таблицы, раскрашенные в чет/нечет? Не годится верстать формы таблицами. В оп-посте хорошие задачи на верстку, нужно пройти.
#305 #608431
>>608418
repl.it пиздаче.
7 Кб, 287x371
#306 #608432
Поясните, нахуй тут автор второй раз echo написал, если в теле функции уже есть echo $num и функция ничего не возвращает?
#307 #608434
Знаю более менее ПХП и Ява Скрипт, вот недавно освоил вёрстку по нормальному, чтобы верстать из ПСД макета, не разобрался с адаптивной вёрсткой, это объёмная вещь? Можно как то по-быстрому усвоить основные методики? Что посоветуете по адаптивной вёрстке? Хочу иметь полный набор необходимых навыков.
#308 #608441
>>608434
Есть тред в воркаче, уебуй
#309 #608455
>>608430

>Хех, повезло чуваку, что ты решил потестить его творение.


Рассмеялся. Недавно навернул Алана Купера "Психбольница в руках пациентов", вот со многим согласен в этой книге. Раньше как-то интуитивно применял похожий подход к проектированию интерфейсов на своих говносайтах.

>Автор задумывал сортировку по этому полю, но либо не доделал, либо там ошибка которую он не заметил.


Да, он как раз писал об этом, сейчас вспомнил, что сортировку не доделал.
#310 #608474
Я вот думаю, если программирование (я сейчас не беру в пример создание микропроцессоров и высший бесполезный матан со всякими графоалгоритмами), но если вот обычный прикладной кодинг может выучить любой даун-школьник за пару лет, то как в профессии еще не настал полный пиздец и перенасыщение?
#311 #608478
>>608474
Очевидно, что это утверждение не верно.
#312 #608491
>>608432
Бамп вопросу
#313 #608496
>>608491
Нахуй ты бампаешь? Откуда мы знаем из какой жопы ты вытащил этот код?
Иди у автора и спроси, зачем он так написал. Скорее всего потому что он не знает php, а решил заработать денег на учебнике уровня "php+mysql+html+аллах за неделю !!!!111"
#314 #608513
>>608474

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


Некоторые русский язык не могут освоить, какой уж там кодинг.
#315 #608519
>>608496

>Откуда мы знаем из какой жопы ты вытащил этот код?



Очевидно, блять, что из книги.

Сложно было ответить в стиле "это он зря написал", мудак ты токсичный?
#316 #608525
>>608474

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


За пару лет упорного труда, применяя знания почти каждый день, а какую профессию нельзя выучить за этот срок? Да и то, качество принятых решений, время разработки, оптимальность алгоритмов, качество кода - будут хуевыми из-за недостатка опыта.
#317 #608528
>>608525
И еще - "прикладной кодинг" это очень масштабное понятие, можно выучить за пару лет только отдельный аспект.
#318 #608535
>>608519
Во-первых, не очевидно что из книги. Это мог быть какой-нибудь блог, статья или код твоего одноклассника.
Во-вторых, ты настолько тупой, что даже теперь не догадался назвать год издания и имя автора, чтобы кто-нибудь дал рецензию.
#319 #608556
>>608525
для того, чтобы кодинг освоить, ничего кроме сети и кампутера не нужно. Чего не скажешь о других профессиях. соответственно порог вкатывания низкий.
>>608528
А это уже обратная сторона, из-за низкого порога в профессию валят толпы школьников, которые поверхностно знают свою мелкую область. их можно собрать и давать им копейки, но все вместе они что-то напишут. с этим борются вот как: пытаются брать качеством и сужают круг, т.е. с одного кодера требуют знание всех областей и высокую скорость работы, чтобы делал тот же проект, что и десять школьников, за ту же сумму. Ну вот так на мой взгляд борются с низким порогом вхождения.
#320 #608572
Где-то есть инструкции по настройке рабочего сервака?
Потому что я могу пока только установить сервер, ну может еще выделить памяти под php и mysql.
Дайте список мастхев настроек (php, mysql, apache), которые нужно знать.
#321 #608579
>>608572
В оп-посте.
#322 #608582
>>608579
Там только инструкции по установке, что ты мог сам заметить, если переходил по тем ссылкам. Мне нужны важнейшие настройки.
Гуглить не буду, потому что не доверяю сомнительным источникам.
В документации настроек тысячи, из них реально нужных пару десятков.
Вот я и спрашиваю, какие самые важные настройки нужно применить к свежеустановленному серверу.
#323 #608596
>>608582

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


Зато сосач пиздецавторитетный источник.
124 Кб, 1024x1024
#324 #608602
$routes = explode('/', $_SERVER['REQUEST_URI']);

Аноны, вот ладно на удаленном серве все понятно, сайт типа site.com/controller/index

Выходит $_SERVER = "/controller/index";
Получается массив

0 -> ""
1 -> "controller"
2 -> "index"

А когда мы тестим на локальном серве, то ссылка такого вида

localhost/site.com/controller/index

Какой тогда массив мы получаем?
Такое же как в первом случае?
#325 #608610
http://www.dtivt.ru/ Чекните , есть уязвимости?
#326 #608611
>>608610
Я очень далёк от дизайна и критики, но с этого вот блеванул.

Анон, если эта говно предмет старания двух макак за банку пива и оценку в зачётку славно написанная курсовая случайно упадёт от моего чека, мне сгущёнка не светит?
#327 #608612
>>608611

Какие есть способы уронить сайт твоим чеком?

мимо-хочу-ронять-сайты
#328 #608613
>>608612

>Какие есть способы уронить сайт твоим чеком?


SQL иньекцией например.
37 Кб, 849x311
#329 #608614
>>608610
Мейл на который приходят уведомления не совпадает с контактными ящиками? Иначе любой дурачок задолбает сменой пароля.
#330 #608616
>>608614
тащемта и так можно задолбать сменой пароля. Даже если не совпадает.
12 Кб, 364x134
#331 #608618
Знаю знаю, будете говорить, что я учусь по видеоурокам вована и все такое, но блять, я пока что просто хочу поиграться и заделать себе сайтик визитку, что за нахуй, обьясните мне.

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

Иде - нетбинс, стоит локальный сервер. Создаю проект с файлом индекс.пхп и пишу там echo "Hello world" и все работает.

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

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

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

Вот код - https://github.com/luptidu/www/
#332 #608620
>>608618

>заделать себе сайтик визитку


>bootstrap


Нутыпонял.
#333 #608621
>>602382
>>608618

>что за нахуй, обьясните мне


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

>Почему у меня нихуя не работает


Спроси у веталека swipe, зачем у нас спрашиваешь?

>у меня нихуя не работает, а на видео работает


Тогда даже не знаю, раз на видео работает, значит там все правильно, беру свои слова обратно.
Переустанови виндовс, может поможет.
#334 #608622
>>608621
Два чаю вот этому. Хочешь разобраться - оп пост. Хочешь проверить работает ли твоя сборочка - пиши хелловорды. Хочешь сайт визитку - не смотри всяких странных мудаков с ютюба.
#335 #608636
>>608535
Тебя ебет откуда этот код? Меня волновал только один вопрос: нужно ли там второе echo? Мне похуй на твою рецензию, аутист ебаный.
#336 #608637
>>608636
Что-то ты слишком туп для программирования. Подумай лучше о макдаке.
#337 #608644
>>608637
Лол, даун обосрался и пытается уехать.
#338 #608645
>>608610
Аа, это Джумла, я подумал, сами пилили всё.

>>608611
Смотря что понимать под дизайном.
Если удобство расположения элементов и достижения целей (то есть аспект юзабилити в дизайне), то вроде всё там на среднем уровне. Ссылки "скачать" немного сумбурно расставлены для документов, не подчёркиваются при наведении. Ссылки в сайдбаре становятся светлыми при наведении, что затрудняет их чтение. Выпадающие меню без возможности перейти на категории - НЕ ОСНЕ. Адаптивность имеется.
А если рассматривать дизайн как красивость отображения и навороты, то тут кому как. Мне понравились неработающие блоки с форумом, чатом, веб-ресурсами. Остальное там просто лишено единого стиля, потому что брали фоточки из Инета или сами что-то рисовали (тот же логотип).
#339 #608646
>>608432

>нахуй тут автор второй раз echo написал


Это два разных вывода же. Сам посмотри. Один раз он её просто выводит, второй - через функцию прогоняет. Видать хотел показать что-то.
>>608535
Какая разница откуда код? Наркоман штоле?
#340 #608647
>>608637
php-макака называет себя погромистом, спешите видеть.
#341 #608649
>>608636
Ты чё, сука, ты чё??7
Не порть нам ламповый тред!!1
Еcho там кажется ненужным, потому что и без него всё работает. Ваш КО.
#342 #608650
>>608649

>потому что и без него всё работает


Там вывод двух разных переменных если присмотреться.
#343 #608653
>>608650
Аа, бля, точно.
Тогда реально непонятно это всё в отрыве от контекста.
Что там хотел показать и посмотреть автор: как после функции меняется переменная $a если только.
#344 #608657
>>608653

>как после функции меняется переменная $a если только.


this
#345 #608659
>>608653
>>608650
>>608657

Я не пойму, либо вы нюфани, либо я чего-то не понимаю. Там же всего 3 echo :

1) В самой функции и выводит переменную $num
2) Выделено красным, которое непонятно зачем там нужно, ведь функция ничего не возвращает.
3) Вывод переменной $а, чтобы посмотреть как меняется переменная $a

Если 1) и 3) дают понять для чего они там, то 2) не требуется вообще.

Однако, если вместо 1) написать return $num (заставить функцию возвращать переменную $num), то тогда да, без 2) было бы не обойтись.
8 Кб, 287x371
#346 #608661
>>608646

>Это два разных вывода же.



На (2) он просто вызывает функцию. Зачем там echo, если функция ничего не возвращает да и к тому же в самой функции уже есть echo?

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



Прогоняет он ее на (3) шаге, когда выводит переменную $a, чтобы показать, что она не изменилась.
#347 #608663
>>608661

>Прогоняет он ее на (3) шаге



Вернее прогоняет он ее при вызове на (2) шаге, а показывает, что она не изменилась на (3). Самофикс.
#348 #608668
>>608659

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


Ты ебанутый?
#349 #608669
>>608610

Для проверки на уязвимости надо показать код. Вслепую искать уязвимости на каком-то сайте долго и неинтересно. Алсо, еще неизвестно чей это сайт.
#350 #608670
>>608663
>>608661
>>608659
Я понял, ты просто толстый.
#351 #608671
>>608668
>>608670

Делать мне нехуй катать эти телеги? Может объяснит уже хоть кто-нибудь зачем на (2) было использовано echo?
#352 #608672
>>608671

По ошибке очевидно. Что вы тут флуд разводите? Ну и я бы на твоем месте поискал учебник получше.
#353 #608675
>>608672
Ну хоть кто-то в треде адекватный. Я начал изучать Php буквально несколько дней назад, задаю элементарнейший вопрос и мне пол треда втирает какую-то дичь.

Спасибо, книгу подобрал получше как только заметил этот косяк. Просто не давал покоя этот вопрос.
#354 #608682
>>608675
Он сначала выводит функцию, а потом переменную? Чего непонятного то?

>заметил этот косяк


Какой косяк, он тебе показывает разницу между выводом переменной и функцией!
#355 #608685
>>608682

> Он сначала выводит функцию,


Что значит «выводит функцию»?
#356 #608686
>>608661

>Зачем там echo, если функция ничего не возвращает


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

>Прогоняет он ее на (3) шаге, когда выводит переменную $a, чтобы показать, что она не изменилась.


Ну вот ты и сам разобрался. Чего пол треда то запостил?
#357 #608689
>>608685
Ты уже перетолстил. Сначала делаешь вид что элементарных вещей не понимаешь, теперь не понимаешь уже и русского языка.
#358 #608690
Ребята, как быть с калькулятором Айпада: http://ideone.com/qNTlK5
Два вопроса.
Чому-то PHP Notice: Undefined variable: paymentTotal in /home/rT84Ej/prog.php on line 19 - я там не ставлю echo, потому что там на три банка посчитается кредит на каждый месяц выплаты и т.п. Как быть в этом случае? Что там поставить, чтобы всё было нормально?
И также почему-то не получается вывести в итоге echo с
echo "{$homoCreditTotal} \n";
echo "{$softBankTotal} \n";
echo "{$strawberryBankTotal} \n";
То есть echo с переменными, которые определяются функцией, просто не работают, как я ни вертел это всё.
Где ошибка, друзья?
#359 #608692
>>608689

>Ты уже перетолстил. теперь не понимаешь уже и русского языка.



Это не я спрашивал. Я начал изучать Php несколько дней назад и даже я понимаю, что твои слова:

>Он сначала выводит функцию



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

>>608686

>А что там надо было выложить? Пол библиотек Джумлы? Любой учебник возьми, там тоже будут сперва весьма простенькие функции.



Вы меня так троллите, блядь, или что?
На втором шаге можно было просто вызвать функцию - inc_print($a); Без ебаного echo. ЛИБО БЛЯДЬ УБРАТЬ "ECHO" В САМОМ ТЕЛЕ ФУНКЦИИ И НАПИСАТЬ ВМЕСТО НЕГО "RETURN $NUM".

ВЫ СУКА СИДИТЕ ТУТ УЖЕ 66 ЕБАНЫХ ТРЕДОВ И НЕ ЗНАЕТЕ ЭЛЕМЕНТАРНЫХ ВЕЩЕЙ, ВЫ СУКА ЛЮДИ ИЛИ КТО?
#360 #608695
>>608692

>ВМЕСТО НЕГО "RETURN $NUM".


Вон из профессии.
#361 #608698
>>608692

>УБРАТЬ "ECHO" В САМОМ ТЕЛЕ ФУНКЦИИ И НАПИСАТЬ ВМЕСТО НЕГО "RETURN $NUM".


У меня жир из монитора потёк.
Хватит.
#362 #608699
>>608690
1. Проинициализируй paymentTotal в 0 в начале функции, например.
2. Функция ничего не возвращает, эхо ее результата ничего и не выводит.
#363 #608700
>>608695
>>608698

Вяло.

>>608692

Игнорируй троллей и не разводи флуд.
#364 #608704
>>608700
Хорошо ^^
#365 #608706
>>608700
>>608704
Семён, плиз. Обосрался обтекай.
#366 #608712
>>608690

>($creditBalance + 7777,


Это вообще зачем?
#367 #608739
>>608622

Ты код то смотрел? Нет? Подходи мимо.

Бамп вопросу -> >>608618
#368 #608743
>>607218

>А как тогда подключать его? Просто запрашивать файл?


ОПчи-и-к, ответить пожалуйста на этот вопрос, я без дела сижу.
#369 #608762
Господа, а в чем суть формы, которая просит телефон на сеошных сайтах, зарабатывающих рекламой?
Типа этого. http://dom-dacha-svoimi-rukami.ru/stroim-dom
#370 #608764
>>608762
Там вирус не ходите.
#371 #608768
>>608618

локальный сервер - денвер?
загугли в какую папку нужно файлы ложить

в open server например это
C:\OpenServer\domains\localhost
#372 #608772
>>608768

Так и сделал

C:\Server\htdocs\sitevizitka

Туда и пути прописал
#373 #608776
>>608743

как я написал тут: >>607098

Ты делаешь файл init.php или bootstrap.php, без классов, обычный скрипт. В нем - вся инициализация, то есть подключаешь автозагрузку, загружаешь конфиг, создаешь объект PDO, создаешь мапперы и тд, все что тебе нужно.

Соответственно в index.php ты подключаешь только этот файл init.php и у тебя уже все нужные объекты доступны, вызывай что хочешь.

>>Но в данном примере я не понимаю, зачем вообще это нужно. Объясни, зачем ты там испльзовал static? Что ты хотел сделать этим?


> Не понял? У меня нигде нету static переменных.


Как это нет? https://github.com/someApprentice/Students/blob/master/app/init.php#L18 вот она

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

По идее конечно можно сделать инициализацию классом. Так например в ZF сделан класс Bootstrap. Но для простого приложения это лишнее усложнение.
#374 #608779
>>608772

На адрес 404 тебя редиректит движок сайта. Изучай код и выясняй что не так.
57 Кб, 1188x555
#375 #608792
>>608779

так я блять все изучил, и по идее должен работать, если бы я понял в чем трабл не писал бы сюда
#376 #608800
Литературу для начинающего какую посоветуете? Мусор 10-ти летней давности не предлагать.
#377 #608802
>>608792
Залил на беслпатный хостинг с беслпатным доменом и все заебись работает.

Так в чем же проблема?

Может потому что файл роут хуево под локалхост заточен?
#378 #608803
#379 #608809
>>608803
в чем проблема?
#380 #608819
>>608699
Спасибо, первое помогло избавиться от ошибки.
А вот второе не понимаю. Функция возвращает же echo "{$month} месяц(-ев) до {$creditBalance} руб. Должно быть выплачено всего {$paymentTotal} руб.\n"; и делает это трижды вот благодаря этому:

$homoCreditTotal = calc($creditBalance, $monthlyPayment, 1.04, 500, 0);
$softBankTotal = calc($creditBalance, $monthlyPayment, 1.03, 1000, 0);
$strawberryBankTotal = calc($creditBalance + 7777, $monthlyPayment, 1.02, 1000, 0);

При этом всё работает, разумеется, и если я просто делаю вывод результатов:
calc($creditBalance, $monthlyPayment, 1.04, 500, 0);
calc($creditBalance, $monthlyPayment, 1.03, 1000, 0);
calc($creditBalance + 7777, $monthlyPayment, 1.02, 1000, 0);

Но мне-то нужно сделать так, как у ОПа: у него там в итоге стоит
echo "Банк HomoCredit: {$homoCreditTotal}\n";
echo "Банк SoftBank: {$softBankTotal}\n";
echo "Банк StrawberryBank: {$strawberryBankTotal}\n";

Вот как мне вывести в переменную результат функции и потом вывести в echo эту переменную?
Я вообще не понимаю, что там может не работать, честно говоря.
Просто указываю переменной результат функции, потом вывожу эту переменную в echo - и получаю вялым по лбу с оттягом, вот это поворот.

>>608712
Это потому, что в StrawberryBank открытие счёта стоит 7777 рублей - эта сумма должна быть прибавлена к основной сумме долга.
#381 #608823
>>608819
echo - это вывод строки. Ничего общего с возвратом значения оно не имеет, для этого есть return.
#382 #608827
сап ниггеры, как запилить на сайте авторизацию?
регистрацию запилил, а как узнать, что это один и тот же пользователь заходит на сайт?
без кук всяких, разумеется.
#383 #608830
>>608823
Спасибо, копаюсь сейчас.
#384 #608831
>>608827
Пацаны, как мне еду приготовить? Без продуктов всяких, разумеется.
#385 #608834
>>608831
куки это же устаревшее говно, разве ничего другого еще не придумали?
#386 #608835
>>608834
Продукты это же устаревшее говно, разве ничего другого еще не придумали?
#387 #608836
>>608835
Ну, сойлент придумали, внутривенные растворы, пожалуйста.
#388 #608837
>>608831
Каша из топора (айди сессии в uri).
#389 #608838
>>608830
Пока накопал только, что я тупой.
#390 #608842
>>608834
Можно и без куков. Запрашивай каждый раз у юзера пароли.
#391 #608845
>>608842
>>608835
>>608831
ну ладно, ладно, как тогда с куками?
254 Кб, 1318x869
#392 #608858
Как сделать что бы на экран выводилась краткая новость, а ссылка краткой новости вела на новую страничку к полной версией новости. JS не предлагать! Необходимо решить посредством php, mysql, html, css.

<!DOCTYPE html>
<html>
<head>
\t<title>Jet</title>
\t<link rel="stylesheet" type="text/css" href="style.css">
\t<meta charset="utf-8">
</head>
<body>
<?php include_once 'header.php'; ?>
<div id="content">
<?php
$result = mysql_query(" SELECT * FROM news ORDER BY id DESC LIMIT 4 ");
mysql_close();
while ($row = mysql_fetch_array($result)) { ?>
\t
\t<div id="text">
\t<h2 align="center"><a href=""><?php echo $row['title'] ?><a></h2>
\t<p><?php echo $row['text'] ?></p>
\t<p align="right"><?php echo '<a href="view_news.php?id='.$row[id].'" '; ?> >Перейти к новости -><a></p>
\t</div>

<?php } ?>

</div>
</body>
</html>
254 Кб, 1318x869
#392 #608858
Как сделать что бы на экран выводилась краткая новость, а ссылка краткой новости вела на новую страничку к полной версией новости. JS не предлагать! Необходимо решить посредством php, mysql, html, css.

<!DOCTYPE html>
<html>
<head>
\t<title>Jet</title>
\t<link rel="stylesheet" type="text/css" href="style.css">
\t<meta charset="utf-8">
</head>
<body>
<?php include_once 'header.php'; ?>
<div id="content">
<?php
$result = mysql_query(" SELECT * FROM news ORDER BY id DESC LIMIT 4 ");
mysql_close();
while ($row = mysql_fetch_array($result)) { ?>
\t
\t<div id="text">
\t<h2 align="center"><a href=""><?php echo $row['title'] ?><a></h2>
\t<p><?php echo $row['text'] ?></p>
\t<p align="right"><?php echo '<a href="view_news.php?id='.$row[id].'" '; ?> >Перейти к новости -><a></p>
\t</div>

<?php } ?>

</div>
</body>
</html>
#393 #608864
>>608858

>JS не предлагать!


какой js, такое делаеться на ruby+python. там еще надо фреймворк и ооп подключить к бутстрапу через mvc.
#394 #608867
>>608838
Вот в итоге вроде бы получился этот калькулятор Айпада: http://ideone.com/X0RbF2

Странно, что я не могу оттуда выцепить $month никак, пробовал по-разному.
Хотел в echo вывести ещё и количество месяцев, которые потребуются для оплаты.
Вот почему в этом случае я не могу просто написать там же return $month, а в итоговом echo просто поставить {$month}?
Чому так нельзя получить эту переменную, её как-то надо проинициализировать тоже?
Сейчас попробую...
2 Кб, 175x162
16 Кб, 400x400
15 Кб, 360x360
#395 #608870
Что сделали с моим пхпстормом? Где старый охуенный логотип? Почему вместо него рваный кусок говна и мочи?
#396 #608873
>>608867
Нет, так не вышло ничего.
#397 #608874
>>608873
Функция может вернуть только одно значение. Но оно может быть массивом или объектом.
#398 #608876
>>608870
Размазанность нынче не в моде.
Прежний был по хардкору.
#399 #608879
>>608874
Спасибо, я это запомню, бро, мне пока далеко для этого. Если только массивом сделать, а потом ключи достать?
Ладно, вроде сам калькулятор работает - пока успокоюсь на этом, подожду разгромного анализа ОПа.
1708 Кб, 1920x1200
#400 #608903
Аноны, поясните за куски кода ниже

1) require_once 'script.php';
2) include "app/controllers/".$script_file;
3) dirname(__FILE__).'/script.php';
4) include Q_PATH.'/application/script.php';

Не конкретно какие файлы они включают
А какие и в каких ситуациях лучше юзать?

1) Запускаем файл скрип.пхп?
2) Подключаем но не запускаем?
3) А тут что делаем?
4) Чему равен Q_PATH?

Вообще как во всех случаях узнается адрес до самого скрипта, так как нигде тут полный адрес скрипта не прописан и что вообще лучше использовать?
89 Кб, 637x351
#401 #608914
>>607913

>Надо либо заключать строку в одиночные кавычки ' " ' либо экранировать бекслешем " \" "


>Или ты не про это?


Я про то что css-селектор input[type=text] корректный, а meta[property=og:image] выдает syntax error, поэтому приходится брать значение атрибута в кавычки.

>надо вывести список ссылок на картинки в консоль, а не список тегов img


Тогда так
https://jsfiddle.net/e5j566y3/

>в данном случае можно поступить проще и искать эти элементы по именам тегов


А как узнать, что элемент принадлежит форме? Некоторые элементы типа button вполне могут быть не привязаны к форме, находиться вне ее (неё?).
Если элемент лежит внутри формы, он однозначно к ней относится? Если так, тогда
https://jsfiddle.net/33zse693/
#402 #608924
>>608474
>>608478
>>608513
>>608525
А везде пишут, что уже настал.
#403 #608929
бля, да что за хрень опять не могу уи развернуть. не далее, как неделю назад каким-то боком развернул, в инете мануалы заполонены какой-то хуйней через командную строку, я же помню, что без cmd нормально разворачивал.
#404 #608937
>>608525

ой бля, проследуй под шконку петушок
хули там можно пару лет учить маня?
любой школьник за пару месяцев все освоит
89 Кб, 739x632
#405 #608939
>>608924
На самом деле нет. Везде нужны опытные программисты, их не хватает. Брать джуниора после вуза и делать из него специалиста - долго, да и он может уйти в любой момент если денег больше предложат. Так и висят вакансии синьеров по месяцу.
#406 #608944
>>608939
Это не сеньоры, это аналог работников макдака, которые работают вместо 5 кассиров, двух борщиков и одного повара ну и платят ему за всех этих людей. Тут пока выучишься одной рукой бургеры жарить, а другой счет выбивать на скорость, это да.
#407 #608999
эй, погромисты, я тут решил учить погромирование с html, вообще я верно путь выбрал, или надо что-то другое брать для начала:?
#408 #609002
>>608999
ох нихуя себе, трипл
#409 #609004
>>608999
Бери Assembler, достаточно легкий язык, сделан специально для новичков. Как овладеешь ассемблером можно и на Brainfuck перейти, он уже посерьезнее.
#410 #609015
>>609004
а я слышал начинающие паскаль учат еще. на него можно болт ложить?
#411 #609021
>>609015
он над тобой стебаетсяхотя ассемблер вроде бы и легкий, но сперва оче трудно уловить логику
#412 #609023
>>609015
Паскаль это тоже очень полезная вещь сейчас, можешь начинать с Turbo Pascal, за 3 месяца можно выучить его и пойти джуном в какую-нибудь аутсорс контору. Тут выбор уже за тобой.
#413 #609025
Ну хватит, это уже не смешно.
#414 #609029
Greetings.
Я запилил на сайтике регистрацию, и вот после успешной регистрации хочу, чтобы сайтик редиректил пользователя на соседнюю страницу, как это из ПХП сделать? Или нужен ЖС?
#415 #609031
>>609025
Не вижу тут ничего смешного.
мимо паскаль макака 70к месяц
#416 #609038
>>609029
header("Location: /page/");

Только учти, что заголовки нужно отправлять до хтмла.
#417 #609039
>>608776

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


А почему мы здесь тогда делали её статической? https://github.com/someApprentice/simpleRegistration/blob/master/Lib/connect.php#L11
#418 #609040
>>609031
Поссал на нищеброда.
delphi-senior 250k в неделю
#419 #609041
>>609040
Проиграл с раба.
assembler-бог 500к в день
#420 #609043
>>609041
Кекнул с нищенки
xml-господь 130к в час
#421 #609044
>>609043
В голос с индуса.
html-teamlead 750к в минуту
#422 #609049
>>609044
Проиграл на весь пентхаус с убогого.
css инженер-проектировщик 800к за планковское время
#423 #609061
>>609044
В голос с лоха.
Безработный-араб 4млн$ в секунду
#424 #609064
>>609043
>>609044
>>609049
Хорошо вам, белорусам.
#425 #609097
>>609038
Выдает
Warning: Cannot modify header information - headers already sent by
Пхп сверху хтмла
#426 #609106
>>609097
Это значит что заголовки уже отправлены. Заголовки должны быть отправлены ДО всего вывода разметки.
#427 #609110
>>609097
Не должно быть ни одного echo перед header.
Файлы пересохрани в utf-8 без BOM.
#428 #609112
>>609110
>>609106
Разобрался, Спасибо!
#429 #609185
Объясните, что такое HMVC и нужно ли оно вообще.

На википедии как всегда тупое определение, из которого ничего не понятно.
Прочитал на хабре статью http://habrahabr.ru/post/212065/
в которой автор вроде ведет к тому, что HMVC позволяет использовать систему контроллер-модель-представление для каждой сущности. То есть если у нас есть пользователь, то должен быть контроллер для пользователей, и он не должен манипулировать другими сущностями, например постами пользователя или комментариями (для них должен быть отдельный контроллер). То же самое для представлений: отдельное представление для каждой сущности.

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

В комментах автора отхуесосили, ткнули в паттерн service layer и иерархические шаблоны.
Короче я только запутался и ничего не понял, нужная это штука или нет, если да то как реализовывается и есть ли готовые реализации во фреймворках (знаю Yii и микрофреймворки, но там вроде такой фигни нет)
#430 #609232
Что надо сделать чтобы просить джуном 30к по МСК/Питеру?
Какой сложности работы сделать для портфолио?
#431 #609238
>>609232

>что надо сделать


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

>какой сложности работы сделать


Хватит и обычного анала.
#432 #609243
>>609232
Выучить хотя бы один фреймворк либо 1-2 cms. А лучше и то и другое.
Работы для "портфолио" не обязательны. Примеры работ просят обычно дно-конторы, у которых даже нет компетентного сотрудника для проведения собеседования.

Сделать несколько проектов не помешает конечно, только не для портфолио, а для себя.
В оп-посте есть задание на файлообменник например. Или можешь придумать что-то свое, например клон твиттера или авито.
#433 #609251
>>609243
Из фреймворков как я понимаю yii самый востребованный?
#434 #609266
>>609243
Ну нихуя себе у вас в ДС зажрались, уже и портфолио не нужно.
#435 #609271
разрываюсь между паскалем, делфи и ассемблером, что перспективнее для переката в силиконовую долину?
#437 #609278
Как мне уи установить, сириус квешн? Разворачиваю на локалке, даже доступ к папке с фреймворком запрещен.
Я забыл как разворачивал в прошлый раз.
11 Кб, 480x360
#438 #609379
Здарова, ребятки. Я тут нашел вакансию пхп погромиста и заинтересовался. Подскажите за сколько, примерно, месяцев среднестатистический битард, не знающий вообще ничего о программировании, сможет выучить ваш PHP чтобы потом его приняли в маленькую конторку в мухосранске?
#439 #609380
>>607913

>Чем объекты jQuery такие особенные и отличаются от других?


Тем, что у объектов jQuery есть свойства и методы jQuery.
Если я создам две переменные
var first = document.getElementsByTagName("P");
var second = $("div");
То через пять строк я уже не буду помнить, какая переменная обычная, а какая jqery, к какой из них можно применить метод attr например. Можно конечно насильно потом пропустить через $(...)
А, ну да, или пользоваться webstorm.

>список всех постов в формате "Название поста", число просмотров, число комментариев, ссылка


>допиши к заголовкам постов в скобках число просмотров


https://jsfiddle.net/60rkobr8/1/
#440 #609381
Спрошу и я. Анон, нужно запилить простую корзину, на простой сайт. По кнопке в корзину, добавлялся бы товар в корзину, а в корзине можно было бы удалить его или увеличить количество товара. Пытался поискать примеры, ни одного годного. Может ты подкинешь какие-либо примеры.
#441 #609384
>>609379
Зависит от конторки.
Если конторка делает однотипные сайты на какой-то CMS (Битрикс например), то можно и за пару недель по вечерам почесывая яйца. Правда это не паграмист а говночист, который только статистику по зарплате в отрасли портит.
Если конторка серьезней, например кормится на иностранной фрилансбирже и даже имеет Машу-сделай-нам-чаю в своем штате, то тут есть варианты: от говночитсы на cms до Magento/Zend/сириуз бизнес/меньше 30 баксов/час не беремся. Тогда нужно быть фуллстак (знать верстку, джаваскипт, фреймворки) это 6-12 месяцев для сообразительных парней.
Хотя нахер я тут расписываю, все равно 90% что забьешь, дорешай учебник опа хотя бы до Вектора. Погромирование должно нравится. Иначе нервное истощение еще за километр до медианной зарплаты.
#442 #609385
>>609381
Я будууу доооолго писать велосипеэээд.
Ставь готовое изделие. Opencart например.
Тебе писать руками магазин имеет смысл только "для общего развития".
#443 #609386
>>609381
Установи готовую cms типа openCart, натяни на нее верстку и не морочь себе анус.
Есть и отдельные модули для корзины на гитхабе, смотри по запросу shopping cart github, но тогда придется еще и дописывать клиентскую часть на jquery.

Самому писать корзину не нужно, ты же понимаешь какая это ответственность, если хакир из 8б сломает твой сайт? Присядешь ты, а не он.
#444 #609389
>>609384

>Погромирование должно нравится



Согласен, братишка. То что нравится еще и дается легко. Только вот приколюха в том, что через лет 20-30, мне кажется, каждый должен будет уметь погромировать этих ебучих роботов и прочую парашу, поэтому придется все равно задрачивать. Это как сейчас в говне многим приходится ковыряться, хоть и не нравится, но платят хорошо, поэтому и ковыряются.
#445 #609390
>>607214

Ответ совпадает с правильным, но вот этот вот кусок

($creditBalance x $percent) + $servicePayment

повторяется 3 раза. Избавься от повторов.

>>607215

В общем верно, хотя наверно округлять результат не требуется. Но так тоже годится.

>>607217

Считает правильно, но нужно вынести это в переменную.

>>607221

Java и Javascript разные языки.

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

>>607225

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

В общем, я не вижу зачем тут нужен static. Он только создает нежелательные побочные эффекты. Если у тебя один объект Init то можно хранить PDO в обычном поле.
#445 #609390
>>607214

Ответ совпадает с правильным, но вот этот вот кусок

($creditBalance x $percent) + $servicePayment

повторяется 3 раза. Избавься от повторов.

>>607215

В общем верно, хотя наверно округлять результат не требуется. Но так тоже годится.

>>607217

Считает правильно, но нужно вынести это в переменную.

>>607221

Java и Javascript разные языки.

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

>>607225

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

В общем, я не вижу зачем тут нужен static. Он только создает нежелательные побочные эффекты. Если у тебя один объект Init то можно хранить PDO в обычном поле.
Кошки-мышки #446 #609391
>>607297

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


> ....


> С пустым массивом та функция не вызовется. Стоит ли тогда добавлять issset по твоему совету?


Нет, проблема была в другом. Проблема была в том что ты перед вызовом tryToMove должен был вызвать что-то что заполнило бы свойство possibleMoves. Это неправильно. Вот я тут попытался это написать:

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

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


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

>>> >$field->addAnimal($field, $mouse1);


>>>Зачем 2 раза писать $field?


> Я не знаю как по другому чтобы объект передал сам себя.


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

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

-----

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

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

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

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

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

-----

Посмотри на свой код и подумай, где надо расставить public/protected/private. Ну например, $field в Animal сделано публичным - а зачем? зачем кому-то со стороны получать ссылку на поле из животного?

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

Или например у мыши публичный метод public function searchPossibleMoves(). зачем публичный? Зачем может понадобится вызывать снаружи этот метод? Мне кажется логика выбора хода - это то, что спрятано в голове животного и что окружающим незачем видеть.

Ставя public/private ты как бы задаешь правила использования класса, говоришь другим программистам: это метод который можно и нужно вызывать снаружи, пользуйтесь им. Или это метод, который определяет логику поведения объекта и который снаружи не виден, не тратьте на него время. Пройдись по всем полям и методам. Поля советую вообще закрыть все.

Далее, есть еще такая штука. Есть поле $symbol которое определяет иконку животного. Но где гарантия, что программист, пишущий класс-наследник, определит это поле? Как ему это сказать? Как гарантировать что он не забудет об этом? Для этого в ООП есть абстрактные методы. Ты можешь сделать метод getSymbol абстрактным - тогда унаследовать класс, не определив символ, не получится. А поле symbol можно тогда выпилить за ненадобностью.

> protected function freeMove($possibleMoves)


Здесь нужен тайп-хинт. Поставь его тут и в других местах, где это возможно.

----

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

----

>class Mouse extends Animal


> {


> public $symbol; //символ на карте


> public $x; //координата


> public $y; //координата


Поля наследуются. Не надо их второй раз описывать.

> private function searchBestMove($foundAnimals, $possibleMoves)


Эта функция возвращает либо массив-ход (кстати, почему массив? мы же ООП изучаем, давай-ка сделаем объект хранящий информацию о ходе, можно только из свойств без методов) либо пустой массив. Нелогично. Логичнее возвращать при отстусвии хода например null который как раз значит «отстутствие значения».

> $pointsMax = -1;


Можно сделать даже лучше: -INF. INF это бесконечность, да, она есть в компьютерной математике:

http://php.net/manual/ru/math.constants.php
http://xpoint.ru/know-how/Articles/FloatingPointNumbers#Beskonechnost'IProchieVkusnost

Либо же за начальное значение max можно брать оценку первого хода.

> $nearbyEnemy = $this->field->searchNearbyAnimal($move['x'], $move['y'], $foundAnimals["cats"]);


> $stepsToEnemy = $this->field->countSteps($move['x'], $move['y'], $nearbyEnemy->x, $nearbyEnemy->y);


Что если ни одного врага не видно? Не будет ли ошибки? Или есть гарантия что будет минимум один враг? Тогда надо написать комментарий об этом + сделать assert (он выдает варнинг если условие не выполняется):

assert(count($cats) > 0);

Это читается так: «я уверен что кошек всегда будет больше нуля, если нет, значит в программе ошибка». assert лучше чем комментарий, так как истинность условия проверяется интерпретатором PHP. Еще можно заменить ассерт на иф:

if (!count($cats)) {
// комментарий
throw new Exception("Internal error: There must be at least one cat");
}
Кошки-мышки #446 #609391
>>607297

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


> ....


> С пустым массивом та функция не вызовется. Стоит ли тогда добавлять issset по твоему совету?


Нет, проблема была в другом. Проблема была в том что ты перед вызовом tryToMove должен был вызвать что-то что заполнило бы свойство possibleMoves. Это неправильно. Вот я тут попытался это написать:

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

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


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

>>> >$field->addAnimal($field, $mouse1);


>>>Зачем 2 раза писать $field?


> Я не знаю как по другому чтобы объект передал сам себя.


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

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

-----

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

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

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

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

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

-----

Посмотри на свой код и подумай, где надо расставить public/protected/private. Ну например, $field в Animal сделано публичным - а зачем? зачем кому-то со стороны получать ссылку на поле из животного?

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

Или например у мыши публичный метод public function searchPossibleMoves(). зачем публичный? Зачем может понадобится вызывать снаружи этот метод? Мне кажется логика выбора хода - это то, что спрятано в голове животного и что окружающим незачем видеть.

Ставя public/private ты как бы задаешь правила использования класса, говоришь другим программистам: это метод который можно и нужно вызывать снаружи, пользуйтесь им. Или это метод, который определяет логику поведения объекта и который снаружи не виден, не тратьте на него время. Пройдись по всем полям и методам. Поля советую вообще закрыть все.

Далее, есть еще такая штука. Есть поле $symbol которое определяет иконку животного. Но где гарантия, что программист, пишущий класс-наследник, определит это поле? Как ему это сказать? Как гарантировать что он не забудет об этом? Для этого в ООП есть абстрактные методы. Ты можешь сделать метод getSymbol абстрактным - тогда унаследовать класс, не определив символ, не получится. А поле symbol можно тогда выпилить за ненадобностью.

> protected function freeMove($possibleMoves)


Здесь нужен тайп-хинт. Поставь его тут и в других местах, где это возможно.

----

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

----

>class Mouse extends Animal


> {


> public $symbol; //символ на карте


> public $x; //координата


> public $y; //координата


Поля наследуются. Не надо их второй раз описывать.

> private function searchBestMove($foundAnimals, $possibleMoves)


Эта функция возвращает либо массив-ход (кстати, почему массив? мы же ООП изучаем, давай-ка сделаем объект хранящий информацию о ходе, можно только из свойств без методов) либо пустой массив. Нелогично. Логичнее возвращать при отстусвии хода например null который как раз значит «отстутствие значения».

> $pointsMax = -1;


Можно сделать даже лучше: -INF. INF это бесконечность, да, она есть в компьютерной математике:

http://php.net/manual/ru/math.constants.php
http://xpoint.ru/know-how/Articles/FloatingPointNumbers#Beskonechnost'IProchieVkusnost

Либо же за начальное значение max можно брать оценку первого хода.

> $nearbyEnemy = $this->field->searchNearbyAnimal($move['x'], $move['y'], $foundAnimals["cats"]);


> $stepsToEnemy = $this->field->countSteps($move['x'], $move['y'], $nearbyEnemy->x, $nearbyEnemy->y);


Что если ни одного врага не видно? Не будет ли ошибки? Или есть гарантия что будет минимум один враг? Тогда надо написать комментарий об этом + сделать assert (он выдает варнинг если условие не выполняется):

assert(count($cats) > 0);

Это читается так: «я уверен что кошек всегда будет больше нуля, если нет, значит в программе ошибка». assert лучше чем комментарий, так как истинность условия проверяется интерпретатором PHP. Еще можно заменить ассерт на иф:

if (!count($cats)) {
// комментарий
throw new Exception("Internal error: There must be at least one cat");
}
кошки мышки #447 #609392
>>607297

> $pointsForDog = $this->field->getWidth() - $stepsToDog;


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

$pointsForDog = -$stepsToDog;

> //Если кошка спит


> if ($this->symbol == "@") {


Мне кажется это неправильная проверка. То, что символ стал равен @ это следствие того, что кошка спит, а не признак. Мне кажется, состояние сна надо определять по-другому, сделав для этого метод isSleeping(). Можно сделать отдельно свойство, можно просто сравнивать чему равно movesInARow.

> } elseif($this->movesInARow == $this->turnWhenCatSleep) {


> $this->symbol = "@";


ты меняешь значок но не вызодишь из функции и делаешь ход.

Кстати, заметь, некоторые комментарии писал Капитан Очевидность:

> //Ищем лучший ход


> ... searchBestMove


> //Ищем животное в дальности обзора


> ... searchForAnimals($this->x, $this->y, $this->vision);


> //Ищем возможные ходы


> ...$this->searchPossibleMoves


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

> /Возможые ходы для кошки (8 сторон);


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

> private function searchBestMove($foundAnimals, $possibleMoves)


Метод одинаков в кошке и мышке, не внести ли его в Animal? Правда Animal не может вызывать countPoints которой в нем нет, и возможно надо ее передавать третьим параметром.

> $pointsForEnemy = ($this->field->getWidth() - $stepsToEnemy) * 100;


Как и у мыши, мне кажется что лучше без width обойтись.

> foreach ($foundAnimals["mice"] as $mouse) {


> if ($this->field->areChosenAnimalsNearTheCage($mouse->x, $mouse->y, $foundAnimals["mice"])) {


Тут явно ошибка - ты не используешь переменные $x, $y хранящие координаты хода.

Еще, в нескольких местах if можно упростить. У тебя идет такой код:

if () {
много строк
} else {
мало строк
}

Это лучше переписать как:

if () {
мало строк;
return/continue;
}

много строк;

Пройдись по коду и уменьши вложенность.

> //Удаление элемента массива по значению


> if(($key = array_search($this->field->getAnimal($x, $y), $this->field->animals)) !== FALSE){


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

> foreach ($arrows as $arrow) {


> //Отсеиваем невозможные ходы (ход за карту, ход на собрата собаку или противного мыша)


> if ($this->field->canIMoveTo($arrow['x'], $arrow['y'])) {


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

> //Счетчик для различия мышей на карте


> static $i = 1;


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

> //Если животное - кошка, делаем ей максимальную дальность обзора


> if ($animal instanceof Cat) {


> $animal->vision = $this->width;


> }


Класс Field занимается не своим делом. За поле зрения кошки отвечает кошка, этот код должен быть внутри нее. Я бы использовал INF (и разумеется добавил во все функции проверку на нее).

> //Координаты могут быть заняты, если мы вручную их забиваем


> if ($animal->x == NULL && $animal->y == NULL) {


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

> do {


> } while ($this->isCageClose($x, $y));


Не делай потенциально бесконечный цикл, ограничь число попыток.

И еще, мне не нравится вот это вот:

> instanceof mouse


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

> private function isCageClose($x, $y)


Можно сделать через вызов метода getAnimal, а не копипастить цикл.

> private function showField($turn)


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

> if ($top < 10) {


> //Два для двухзначных чисел


Используй str_pad (и помни что он только для латинницы, есть такой хак для поддержки любых символов: https://gist.github.com/nebiros/226350)

> public function startGame(Field $field)


Не надо передавать field.

> $foundAnimals = array("mice" => NULL, "cats" => NULL, "dogs" => NULL);


Эта функция не увидит новые виды животных. Лучше использовать имя класса в качестве ключа.

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

> public function countSteps($point1X, $point1Y, $point2X, $point2Y)


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

> } elseif ($countSteps == $stepsNearestAnimal) {


> continue;


Не нужно.
кошки мышки #447 #609392
>>607297

> $pointsForDog = $this->field->getWidth() - $stepsToDog;


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

$pointsForDog = -$stepsToDog;

> //Если кошка спит


> if ($this->symbol == "@") {


Мне кажется это неправильная проверка. То, что символ стал равен @ это следствие того, что кошка спит, а не признак. Мне кажется, состояние сна надо определять по-другому, сделав для этого метод isSleeping(). Можно сделать отдельно свойство, можно просто сравнивать чему равно movesInARow.

> } elseif($this->movesInARow == $this->turnWhenCatSleep) {


> $this->symbol = "@";


ты меняешь значок но не вызодишь из функции и делаешь ход.

Кстати, заметь, некоторые комментарии писал Капитан Очевидность:

> //Ищем лучший ход


> ... searchBestMove


> //Ищем животное в дальности обзора


> ... searchForAnimals($this->x, $this->y, $this->vision);


> //Ищем возможные ходы


> ...$this->searchPossibleMoves


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

> /Возможые ходы для кошки (8 сторон);


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

> private function searchBestMove($foundAnimals, $possibleMoves)


Метод одинаков в кошке и мышке, не внести ли его в Animal? Правда Animal не может вызывать countPoints которой в нем нет, и возможно надо ее передавать третьим параметром.

> $pointsForEnemy = ($this->field->getWidth() - $stepsToEnemy) * 100;


Как и у мыши, мне кажется что лучше без width обойтись.

> foreach ($foundAnimals["mice"] as $mouse) {


> if ($this->field->areChosenAnimalsNearTheCage($mouse->x, $mouse->y, $foundAnimals["mice"])) {


Тут явно ошибка - ты не используешь переменные $x, $y хранящие координаты хода.

Еще, в нескольких местах if можно упростить. У тебя идет такой код:

if () {
много строк
} else {
мало строк
}

Это лучше переписать как:

if () {
мало строк;
return/continue;
}

много строк;

Пройдись по коду и уменьши вложенность.

> //Удаление элемента массива по значению


> if(($key = array_search($this->field->getAnimal($x, $y), $this->field->animals)) !== FALSE){


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

> foreach ($arrows as $arrow) {


> //Отсеиваем невозможные ходы (ход за карту, ход на собрата собаку или противного мыша)


> if ($this->field->canIMoveTo($arrow['x'], $arrow['y'])) {


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

> //Счетчик для различия мышей на карте


> static $i = 1;


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

> //Если животное - кошка, делаем ей максимальную дальность обзора


> if ($animal instanceof Cat) {


> $animal->vision = $this->width;


> }


Класс Field занимается не своим делом. За поле зрения кошки отвечает кошка, этот код должен быть внутри нее. Я бы использовал INF (и разумеется добавил во все функции проверку на нее).

> //Координаты могут быть заняты, если мы вручную их забиваем


> if ($animal->x == NULL && $animal->y == NULL) {


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

> do {


> } while ($this->isCageClose($x, $y));


Не делай потенциально бесконечный цикл, ограничь число попыток.

И еще, мне не нравится вот это вот:

> instanceof mouse


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

> private function isCageClose($x, $y)


Можно сделать через вызов метода getAnimal, а не копипастить цикл.

> private function showField($turn)


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

> if ($top < 10) {


> //Два для двухзначных чисел


Используй str_pad (и помни что он только для латинницы, есть такой хак для поддержки любых символов: https://gist.github.com/nebiros/226350)

> public function startGame(Field $field)


Не надо передавать field.

> $foundAnimals = array("mice" => NULL, "cats" => NULL, "dogs" => NULL);


Эта функция не увидит новые виды животных. Лучше использовать имя класса в качестве ключа.

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

> public function countSteps($point1X, $point1Y, $point2X, $point2Y)


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

> } elseif ($countSteps == $stepsNearestAnimal) {


> continue;


Не нужно.
#448 #609393
>>607358

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

>>607381

> А как можно по-другому сделать? Мне это показалось самым естественным.


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

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


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

>>607471

В чем это проявляется? Ошибки какие-то выводятся? натыкай echo, var_dump, посмотри что в переменных.
Сокеты #449 #609394
>>607543

Насчет feof ты прав - она работает с сокетами от fsockopen, и stream_socket, но не работает с просто сокетами. Неудобно.

Я сделал тестовую программу для проверки. Код: https://ideone.com/83LJxm

Она коннектится к порту 8123, на котором я запустил нехитрый сервер командой echo Yes | nc -vv -l -q 0 -p 8123. Он ждет соединения, отправляет 4 байта и закрывает соединение (-q 0).

Чтобы проверить ошибку соединения, надо соединиться с удаленным хостом (с флагом --fail) и вынуть сетевой кабель, подождать секунд 10. В виртуалке с линуксом - не смог протестировать, она не реагирует.

Блокирующий режим:

- Если сервер не запущен, срабатывает ошибка в socket_connect (connection refused)
- После закрытия соединения сервером socket_read всегда возвращает пустую строку сколько бы мы не пытались читать.
- При разрыве связи socket_read возвращает false и выводится warning (на винде).

Асинхронный неблокирующий режим:

(windows) Если используется асинх. режим, на винде socket_connect выдает варнинг (Warning: socket_connect(): unable to connect [10035]: Операция на незаблокированном сокете не может быть завершена немедленно.) и возвращает по моему SOCKET_EWOULDBLOCK. Отключить его можно только через @. Я игнорирую эту ошибку. Это не ошибка.
(linux) асинхронный socket_connect() возвращает ошибку SOCKET_EINPROGRESS, я ее игнорирую.

Если не удается соединиться:

- (win) Если сервер не запущен, то connect удается, но после wait происходит Except event, и попытка read возвращает ошибку 10057 SOCKET_ENOTCONN под виндой
- (linux) Если сервер не запущен, мы получаем read event, write event, при попытке чтения получаем socket_read(): unable to read from socket [111]: Connection refused

Если удается:

- (win) мы получаем read event, читаем 4 байта, после чего получаем постоянно read + write event и попытка чтения дает 0 байт.
- (linux) мы получаем read + write event, читаем 4 байта, после чего то же самое: получаем read + write и чтение дает 0 байт.

Выводы:

- признаком закрытия соединения является строка длиной 0 байт
- в асинхронном режиме на закрытом соединении при select() сразу же срабатывает read + write event
- признаком ошибки является возврат false
- при ошибке в select() срабатывает Except event в windows и read + write event в линукс
- при этом в асинх. режиме некоторые коды (WOULDBLOCK, INPROGRESS, EAGAIN) не являются фактической ошибкой и не вызывают except event
- в асинх. режиме connect всегда возвращает код вроде WOULDBLOCK или INPROGRESS

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

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


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

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

Ну или чат сделай.

> Мне приходит в голову видеоплеер, который постепенно подгружает большой видеофайл (на ютубе не так ли сделано?),


Не, файл наверно выгоднее отдавать нгинксом, он кстати тоже асинхронный.

> или обмен данными в каких-нибудь онлайн-играх.


Возможно.
Сокеты #449 #609394
>>607543

Насчет feof ты прав - она работает с сокетами от fsockopen, и stream_socket, но не работает с просто сокетами. Неудобно.

Я сделал тестовую программу для проверки. Код: https://ideone.com/83LJxm

Она коннектится к порту 8123, на котором я запустил нехитрый сервер командой echo Yes | nc -vv -l -q 0 -p 8123. Он ждет соединения, отправляет 4 байта и закрывает соединение (-q 0).

Чтобы проверить ошибку соединения, надо соединиться с удаленным хостом (с флагом --fail) и вынуть сетевой кабель, подождать секунд 10. В виртуалке с линуксом - не смог протестировать, она не реагирует.

Блокирующий режим:

- Если сервер не запущен, срабатывает ошибка в socket_connect (connection refused)
- После закрытия соединения сервером socket_read всегда возвращает пустую строку сколько бы мы не пытались читать.
- При разрыве связи socket_read возвращает false и выводится warning (на винде).

Асинхронный неблокирующий режим:

(windows) Если используется асинх. режим, на винде socket_connect выдает варнинг (Warning: socket_connect(): unable to connect [10035]: Операция на незаблокированном сокете не может быть завершена немедленно.) и возвращает по моему SOCKET_EWOULDBLOCK. Отключить его можно только через @. Я игнорирую эту ошибку. Это не ошибка.
(linux) асинхронный socket_connect() возвращает ошибку SOCKET_EINPROGRESS, я ее игнорирую.

Если не удается соединиться:

- (win) Если сервер не запущен, то connect удается, но после wait происходит Except event, и попытка read возвращает ошибку 10057 SOCKET_ENOTCONN под виндой
- (linux) Если сервер не запущен, мы получаем read event, write event, при попытке чтения получаем socket_read(): unable to read from socket [111]: Connection refused

Если удается:

- (win) мы получаем read event, читаем 4 байта, после чего получаем постоянно read + write event и попытка чтения дает 0 байт.
- (linux) мы получаем read + write event, читаем 4 байта, после чего то же самое: получаем read + write и чтение дает 0 байт.

Выводы:

- признаком закрытия соединения является строка длиной 0 байт
- в асинхронном режиме на закрытом соединении при select() сразу же срабатывает read + write event
- признаком ошибки является возврат false
- при ошибке в select() срабатывает Except event в windows и read + write event в линукс
- при этом в асинх. режиме некоторые коды (WOULDBLOCK, INPROGRESS, EAGAIN) не являются фактической ошибкой и не вызывают except event
- в асинх. режиме connect всегда возвращает код вроде WOULDBLOCK или INPROGRESS

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

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


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

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

Ну или чат сделай.

> Мне приходит в голову видеоплеер, который постепенно подгружает большой видеофайл (на ютубе не так ли сделано?),


Не, файл наверно выгоднее отдавать нгинксом, он кстати тоже асинхронный.

> или обмен данными в каких-нибудь онлайн-играх.


Возможно.
#450 #609398
>>608864
я знаю что можно сделать даже без php но будет криво.Руби здесь уж совсем не причем
#451 #609417
>>608858

>Как сделать что бы на экран выводилась краткая новость, а ссылка краткой новости вела на новую страничку к полной версией новости.


a href
#452 #609418
>>609185

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



Какая-то надуманная проблема высосанная из пальца. Манагеры с ветряными мельницами борятся?
#453 #609444
>>608864

>ruby+python


Совсем поехал штоле? Ты ещё C++ предложи. Обколются своими фрэймворками и забудут как <a href=''>НОВОСТЬ</a> вгллядит. Ну и подогнать css под это.
#454 #609460
>>609185

Если я не путаю. Идея HMVC в том, что мы делаем контроллеры для отдельных блоков на странице, как будто это отдельные страницы.

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

/comments/1234 - отображает комменты к видео
/related/1234 - показывает похожие видео
/video/1234 - отображает всю страницу с видео, вызывая при этом 2 контроллера выше.

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

Статья: http://habrahabr.ru/post/212065/

Мне кажется, это бессмысленное усложнение. Блоки проще реализовать как виджеты (хотя кто-то скажет что это и есть форма HMVC).

В статье мне не нравится это:

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


это нормально.
#455 #609463
Что-то я не понимаю, как натянуть свою верстку на вп. В вп шаблоне куча непонятных функций, установить тему могу, а вот как ее с цмс связать, чтобы записи, комменты, виджеты выводились?
#456 #609470
Интересно, у меня одного баг на ютубе, когда ты открываешь страницу с видео, смотришь комменты, жмешь «показать ответы» или «читать далее», там появляется круг, тупит пару секунд, а потом вся страница перезагружается? Вот как можно такое написать? Я знаю что первые разработчики ютуба особыми талантами не блистали, но сейчас же его поддерживает Гугл.
#457 #609471
>>609470
Это не баг, просто в комментах ссылка на https версию. Нехуй пользоваться http версией.
#458 #609477
>>609471

Действительно, меняется протокол. Но зачем? Если я загрузил http версию страницы, то никакой проблемы чтобы загрузить комментарии по HTTP наверно тоже нет? Меня не особо пугает что их прочтут шпионы.
#459 #609490
Пиздец, пока сайт на одном фреймворке/цмс делаешь, другие полностью забываются. Год назад где-то натянул верстку на вп, сейчас так тяжело это снова дается и вспоминается по тому же мануалу с хабра.
#460 #609496
кто может подробно обьяснить что такое глобальный массив $_GET , что он из себя представляет, зачем он нужен, и как он работает? Обьясните для чайника))
#461 #609501
>>609496

Туда помещаются значения, переданные через query string (после знака вопроса) в URL.
#462 #609507
>>609390

>объекта Init


>>608776

>Ты делаешь файл init.php или bootstrap.php, без классов, обычный скрипт.


Значит ничего плохого иметь именно класс Init? Я могу его оставить? Я не хочу сам подключать этот файл, а чтобы этим занимался автолоадер.
#463 #609509
>>609460
По поводу именно ютюба - у них сделано всё очень через жопу с коментариями. Начинаешь коментировать - видео грузится снова, открываешь тред - видео грузится снова, нажимаешь отправить камент - видео грузится снова. В общем они перемудрили как-то.

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


Что-то я туплю, а как писать код не так? Ну тоесть ты ведь в любом случае не будешь писать index.php сразу с запросами, .css выводом, и со всеми страницами. Это просто невероятно неудобно!
#464 #609513
И пара вопросов

>>607098

> конфиг лучше вынести в отдельный файл и не прописывать настройки прямо в классе


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

>>608776

>По идее конечно можно сделать инициализацию классом. Так например в ZF сделан класс Bootstrap. Но для простого приложения это лишнее усложнение.


А в чем кроется усложнение? Я бы хотел во всем разобраться.
#465 #609518
>>609507

А автолоадер кто подключит? Все равно придется писать require, хоть для автозагрузчика, хоть для init.php.

> Значит ничего плохого иметь именно класс Init? Я могу его оставить?


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

>>609509

Идея HMVC в том что там делается контроллер не только для страниц, а и для отдельных блоков на них.

> а как писать код не так?


Без лишних контроллеров.

>>609513

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

> А в чем кроется усложнение?


Без класса:

$pdo = new PDO...
$mapper = new Mapper;

С классом все это придется обрачивать в функции, больше кода будет.
#465 #609518
>>609507

А автолоадер кто подключит? Все равно придется писать require, хоть для автозагрузчика, хоть для init.php.

> Значит ничего плохого иметь именно класс Init? Я могу его оставить?


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

>>609509

Идея HMVC в том что там делается контроллер не только для страниц, а и для отдельных блоков на них.

> а как писать код не так?


Без лишних контроллеров.

>>609513

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

> А в чем кроется усложнение?


Без класса:

$pdo = new PDO...
$mapper = new Mapper;

С классом все это придется обрачивать в функции, больше кода будет.
#466 #609520
Как мне уи2 подключить, м? Скачал фреймворком, как в одном видео, а там нужно было батник заранить init.bat, а его опа и нет.
#467 #609528
>>609518

>$mapper = new Mapper;


>>607098

>$someMapper = new SomeMapper($pdo);


А что такое маппер? Я такое еще нигде не видел. Что он делает?
#469 #609533
>>609531
Но я же пользуюсь >TableDataGateway http://design-pattern.ru/patterns/table-data-gateway.html
Зачем он мне?
#470 #609539
>>609533
Понял.
#471 #609573
Всем привет.

Изучаю php, пользовался васяносборочкой денвер.
Вчера переустановил винду и решил всё поставить по-человечески. Поставил apache, поставил php, всё робит(отдельное спасибо автору шапки).
Теперь дошел черёд до MySQL. И с ним хочу узнать поподробнее. Я правильно понял, MySQL Server нужен для взаимодействия БД и сервера? И для чего нужен
Workbench? И как его тестить по установке?

Заранее спасибо.
#472 #609575
>>609573

>И как его тестить по установке?


Имел в виду и MySQL Server и Workbench, если что.
#473 #609580
>>609573

> всё поставить по-человечески


> форточки


Поделил на ноль.
#474 #609581
>>609580

>имплаинг, что красноглазые - люди


Поделил на ноль.
#475 #609583
>>609580
Я пока пользуюсь виндоусом.
Чуть позже буду ставить дуал Ubuntu, но пусть будет на обеих системах. Дело в том, что я еще и учусь в шараге(где нам и показали ставить денвер собственно), поэтому без виндоуса пока никуда, т.к. пользуемся программами, которых нету на линукс.
#476 #609584
Как уии2 установить (с)?
#477 #609591
>>609573
openserver можеш накатить, там все стоит сразу
#478 #609592
>>609573
Что ты подразумеваешь под "сервером"?

MySQL это и есть сервер для базы данных (система управления базами данных - СУБД).
Сервер это программа, работающая в фоновом режиме, которая ждет что с ней соединится программа-клиент и попросит данные, тогда сервер отдает нужные данные.
База данных это файл на жестком диске.
Workbench это просто удобный инструмент для работы с базой.
https://www.mysql.com/products/workbench/
Нужен чтобы не писать sql-код из командной строки (хотя по мне нет разницы, что писать его в окошке, что в командной строке). Еще там можно смоделировать схему базы данных в графическом виде. Или даже создать новую базу данных на основе графической схемы.
Короче просто удобный инструмент, но необязательный.
В чем конкретно вопрос?

>>609584
http://www.yiiframework.com/doc-2.0/guide-start-installation.html
#479 #609595
Привет, ребятки.
Есть MVC система. Посты из блога вывожу только из контроллера Index, хотя он нужен для всех страниц практически. Из модели идет запрос так же. Нужно сделать чтобы было отображение нав-бара на всех страницах.

Вывод страниц идет через for-each используя мультиуровневые массивы. Как переписать так, чтобы навигейшн бар был везде и был со списком постов up-to-date?
Алсо, это простой бложик, если что.

Заранее благодарю.
#480 #609596
>>609595
Роутер режет путь и оттуда уже известно, какой контроллер вызывается и какой метод из него по-дефолту. Роутер переписывать не очень хочу.
#481 #609602
>>609592
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Вот эти вот команды их откуда вызывать? У меня винда с кнопкой в меню Install Composer
#482 #609607
>>609595
Тебе нужен навбар на всех страницах? Так подключи его в шаблоне/шаблонах, в которых это необходимо.
<? if($needNavbar) { include "path/to/navbar-template.php"; } ?>
Массив с постами получить либо прямо в представлении, либо если считаешь это нарушением mvc то передать из контроллера.
Покажи код, непонятно в чем проблема.

>Как переписать


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

>Алсо, это простой бложик, если что.


Это не оправдание. Нужно сразу писать качественно. Через неделю у заказчика попрет посещаемость, тогда он попросит тебя прикрутить блоки с рекламой. Потом он захочет регистрацию и комментарии, интеграцию с соцсетями. Затем возможность делать покупки на сайте. И так далее.
#483 #609617
Странное дело: когда захожу на википедию, страница долго пытается загрузиться, потом выдает ошибку

>Веб-страница недоступна



>ERR_CONNECTION_TIMED_OUT


А через секунду сама обновляется и страница загружается нормально.
#484 #609631
На собеседовании задали вопрос: как будете парсить XML в 2 ГБ?

В курсе, что любые средства основанные на стандартных классах PHP обсераются по ресурсам даже если ДОМ-документ весит около 100мб. Сам я с такими большими XML никогда не сталкивался, максимум 20-50 мб. Вангую что нужно использовать для этого другою платформу, С или node.js
Есть у кого идеи?
#485 #609633
>>609602

Это для установки на линукс команды.
#486 #609635
>>609631

Потоковыv парсером вроде XMLReader. Это банальная проверка, изучал ли ты теорию по XML или нет.
#487 #609641
https://github.com/someApprentice/Students

https://github.com/someApprentice/Students/blob/master/public/index.php#L6
Fatal error: Class 'App\Controller\RegisterAction' not found in C:\Program Files\xampp\www\public\index.php on line 6

Посмотрите кто-нибудь почему мог перестать работать композер, у меня в предыдущем коммите все нормально работало https://github.com/someApprentice/Students/commit/86d87fdc5233d91acf7ecbc81883bdbd041f928a#diff-8fda5307a067372337ec4b9adb16b55fR5

>>607109

>Папку vendor необходимо удалить из репозитория и внести в gitignore (погугли про этот файл).


https://github.com/someApprentice/Students/blob/master/.gitignore#L45
Не получилось почему-то.

>>607098

>- getConfig вроде нигде не нужен, значит незачем его делать. Не надо из класса наружу выдавать лишние данные.


https://github.com/someApprentice/Students/blob/master/app/init.php#L5
У меня не получилось обратиться без него.

Обращался таким образом:

$pdo = new \PDO(
global $config['db_dsn'],
global $config['db_user'],
global $config['db_password']
);

https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/TableDataGateway.php#L5
https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L36
Я похоже что-то не то сделал. Я представлял все так: класс TableDataGateWay содержит в себе универсальные методы которые подойдут к любой таблице в БД, а любой его наследник (например StudentGateway) будут содержать даже унаследованные методы добавления записи в БД, но универсальный метод для этого не получается придумать, потому что записи почти всегда будут разные.

Наверно, эту https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L50 функцию нужно перенести в TableDataGateway, а эту https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/TableDataGateway.php#L5 просто удалить?

ОП, а мы можем набрать обороты? Мне кроме как писать код нечем заняться, да и нравиться это дело очень. Не хочу просто так терять время.
#487 #609641
https://github.com/someApprentice/Students

https://github.com/someApprentice/Students/blob/master/public/index.php#L6
Fatal error: Class 'App\Controller\RegisterAction' not found in C:\Program Files\xampp\www\public\index.php on line 6

Посмотрите кто-нибудь почему мог перестать работать композер, у меня в предыдущем коммите все нормально работало https://github.com/someApprentice/Students/commit/86d87fdc5233d91acf7ecbc81883bdbd041f928a#diff-8fda5307a067372337ec4b9adb16b55fR5

>>607109

>Папку vendor необходимо удалить из репозитория и внести в gitignore (погугли про этот файл).


https://github.com/someApprentice/Students/blob/master/.gitignore#L45
Не получилось почему-то.

>>607098

>- getConfig вроде нигде не нужен, значит незачем его делать. Не надо из класса наружу выдавать лишние данные.


https://github.com/someApprentice/Students/blob/master/app/init.php#L5
У меня не получилось обратиться без него.

Обращался таким образом:

$pdo = new \PDO(
global $config['db_dsn'],
global $config['db_user'],
global $config['db_password']
);

https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/TableDataGateway.php#L5
https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L36
Я похоже что-то не то сделал. Я представлял все так: класс TableDataGateWay содержит в себе универсальные методы которые подойдут к любой таблице в БД, а любой его наследник (например StudentGateway) будут содержать даже унаследованные методы добавления записи в БД, но универсальный метод для этого не получается придумать, потому что записи почти всегда будут разные.

Наверно, эту https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L50 функцию нужно перенести в TableDataGateway, а эту https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/TableDataGateway.php#L5 просто удалить?

ОП, а мы можем набрать обороты? Мне кроме как писать код нечем заняться, да и нравиться это дело очень. Не хочу просто так терять время.
#488 #609645
>>609635

>изучал ли ты теорию по XML или нет.


Что ты имеешь в виду "изучал ли ты теорию". Использование конкретного средства это не теория, а практика. В самом XML нет никакой теории, это просто язык разметки.
#489 #609656
>>609641

>почему мог перестать работать композер


Делай composer dump-autoload каждый раз, когда создаешь новый класс или меняешь пути к своим классам.

> vendor/x


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

>а мы можем набрать обороты?


Кто тебе мешает? Или ты хочешь чтобы он тебе помогал в онлайн режиме? Да ты охуель.
#490 #609659
https://jsfiddle.net/dp5pgo94/ 11я задача. Надеюсь я правильно понял условия.
#491 #609660
Суп. Можно платиновый вопрос?
На какую версию пыхи делать упор при освоении?
#492 #609662
Кто придумал и зачем делать описательные структуры в PHP, aka "аннотации".

Я говорю про это
http://pastebin.com/j8LwLput

Есть же yml, xml.
Говнокода было мало?
#493 #609663
>>609660
десятку ставь, охуенная
#494 #609666
>>609656

>Делай composer dump-autoload каждый раз, когда создаешь новый класс или меняешь пути к своим классам.


Так делаю...

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


Без звездочки тоже не получилось. Я в самом начале без нее писал.

>>609656

>Кто тебе мешает? Или ты хочешь чтобы он тебе помогал в онлайн режиме? Да ты охуель.


Я обычно за 1-2 дня все делаю и задаю вопросы какие не понятны, а потом всю неделю как овощ сижу без дела. Почему нельзя поощрить мое желание к знаниям давая больше практики? Я же не настаиваю а спрашиваю ОПа, может ли он так...
#495 #609667
>>609607
Пожалуйста, не бей. Просто обоссы и скажи,что можно с этим сделать, лол.
Я делаю запрос из базы, он идет в контроллер, в нужный вид приводится и приводится сюда.
Роутер вполне обычный, с несколькими аргументами, пока что без исключений написанный.
http://localhost/controller/method/(param)/(param)/(param)
url[0] = Controller
url[1] = Method
url[2] = Param
url[3] = Param
url[4] = Param
#496 #609668
>>609667

> и приводится сюда


Во вью. И во вью уже этот код, который я прикрепил.
#497 #609669
>>609641

Отлаживай автозагрузчик. Код автозагрузчика лежит в vendor/autoload.php, и других файлах, натыкай туда var_dump и посмотри какие файлы он пытается подулючить.

Также, почему у тебя файл с классом называется с маленькой буквы? Разве PSR-4 такое разрешает? Файл должен называться так же как и класс.

>>Папку vendor необходимо удалить из репозитория и внести в gitignore (погугли про этот файл).


> Не получилось почему-то.


Попробуй еще. Помни что если ты добавил эту папку в gitignore то git ее игнорирует и не увидит что ты ее удалил. Потому надо убирать ее в несколько этапов.

Вписывать ее кстати надо как vendor, без слешей наверно.

> У меня не получилось обратиться без него.


Подумай как обойтись без global. Например можно делать require конфига внутри функции.

Также, зачем ты делаешь функции в init.php? Проще же просто написать последовательно действия.

И какой смысл вот в этом?

> $pdo = null;


> if (!$pdo) {


Это условие всегда выполняется.

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


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

> ОП, а мы можем набрать обороты?


Так набирай, ты ведь можешь сам код писать? У меня много других дел, я не могу в реальном времени отвечать, так что лучше всего задать какие-то вопросы и писать код не дожидаясь меня.
#497 #609669
>>609641

Отлаживай автозагрузчик. Код автозагрузчика лежит в vendor/autoload.php, и других файлах, натыкай туда var_dump и посмотри какие файлы он пытается подулючить.

Также, почему у тебя файл с классом называется с маленькой буквы? Разве PSR-4 такое разрешает? Файл должен называться так же как и класс.

>>Папку vendor необходимо удалить из репозитория и внести в gitignore (погугли про этот файл).


> Не получилось почему-то.


Попробуй еще. Помни что если ты добавил эту папку в gitignore то git ее игнорирует и не увидит что ты ее удалил. Потому надо убирать ее в несколько этапов.

Вписывать ее кстати надо как vendor, без слешей наверно.

> У меня не получилось обратиться без него.


Подумай как обойтись без global. Например можно делать require конфига внутри функции.

Также, зачем ты делаешь функции в init.php? Проще же просто написать последовательно действия.

И какой смысл вот в этом?

> $pdo = null;


> if (!$pdo) {


Это условие всегда выполняется.

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


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

> ОП, а мы можем набрать обороты?


Так набирай, ты ведь можешь сам код писать? У меня много других дел, я не могу в реальном времени отвечать, так что лучше всего задать какие-то вопросы и писать код не дожидаясь меня.
#498 #609670
>>609666

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

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

Подумай сам, как наиболее эффективно двигаться вперед.
#499 #609671
В 12ой задаче константы размера и начинки должны быть объектами?
#500 #609673
>>609662

Доктрина вообще-то позволяет вместо аннотаций использовать XML или Yml. Ты мануал читал? Адски неудобно, но ты можешь попробовать.
#501 #609676
>>609671
Нет, объекты походу должен возвращать метод типа getToppings. Константы должны быть строками типа foo.CHEESE = 'cheese', или вообще числами.
#502 #609679
>>609656

> Делай composer dump-autoload каждый раз


Это не требуется.

>>609641

Для удаления папки vendor надо делать примерно так:

- не вносить vendor в gitignore, удалитть или перенести эту папку
- закоммитить
- внести vendor в gitignore, закоммитить
-вернуть vendor на место

Также, подозрительно выглядит вот это:

https://github.com/someApprentice/Students/commit/4a9f0c6357a6ebf852a47d404010c53dcc172909#diff-5e40181745bfd71598eafb75920663f1

Это ты не руками удалял? зачем?
#503 #609687
>>609659

> return b[1]-a[1];


Это плохо читается. Почему не b.population - a.population?

> alert


Лучше console.log

Алсо по условию надо вывести не все города, а только первые N. И по моему вывести только названия.

>>609645

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

>>609617

Что-то с википедией или твоим браузером.

>>609607

> Массив с постами получить либо прямо в представлении,


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

>>609595

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


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

> Из модели идет запрос так же.


Не понял что значит «так же».

> Нужно сделать чтобы было отображение нав-бара на всех страницах.


И в чем проблема?

> используя мультиуровневые массивы.


Лучше бы конечно были объекты Пост.

> Как переписать так, чтобы навигейшн бар был везде и был со списком постов up-to-date?


Получить нужные данные в контроллере и передать во вью, там вывести.
#503 #609687
>>609659

> return b[1]-a[1];


Это плохо читается. Почему не b.population - a.population?

> alert


Лучше console.log

Алсо по условию надо вывести не все города, а только первые N. И по моему вывести только названия.

>>609645

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

>>609617

Что-то с википедией или твоим браузером.

>>609607

> Массив с постами получить либо прямо в представлении,


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

>>609595

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


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

> Из модели идет запрос так же.


Не понял что значит «так же».

> Нужно сделать чтобы было отображение нав-бара на всех страницах.


И в чем проблема?

> используя мультиуровневые массивы.


Лучше бы конечно были объекты Пост.

> Как переписать так, чтобы навигейшн бар был везде и был со списком постов up-to-date?


Получить нужные данные в контроллере и передать во вью, там вывести.
#504 #609688
>>609595

Алсо, если что-то нужно на всех страницах, то можно эти данные в базовом контроллере получать и передавать во вью, или где-то в коде инциализации.
#505 #609690
>>609573

> Я правильно понял, MySQL Server нужен для взаимодействия БД и сервера?


Это и есть сервер базы данных. Он принимает и выполняет SQL запросы.

> И для чего нужен Workbench?


Для проектирования базы днных

> И как его тестить по установке?


Как в туториале например: http://www.mysql.ru/docs/man/Connecting-disconnecting.html

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

Команда будет вроде

mysql -uUSER -p
#506 #609691
>>609687

> Массив с постами получить либо прямо в представлении,


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


В yii такое сплошь и рядом, виджеты сами обращаются к базе за данными.
Хотя не спорю, это нарушение mvc.
#507 #609692
>>609673

>Есть же yml, xml


у меня это в посте написано
30 Кб, 920x239
#508 #609693
Почему при обращении к Hamburger.SMALL_SIZE выводит undefined? Как мне передать констаты конструктору?
#509 #609696
>>609693

>классовые констаты в js


чаво?
#510 #609697
>>609039

Потому что там функция, а не класс. В функции по другому ведь не получится сделать запоминание значения. Но сейчас мы переходим на ООП и функции нам не нужны. Ну и что касается инициализации, ее можно сделать классом, но проще обычным скриптом без функций или классов.
#511 #609698
>>609693
Никак, их нужно задавать не в конструкторе, а в прототипе объекта.
В конструкторе перечисляются инструкции, которые будут выполняться при создании каждого ебаного объекта. Тебе же не нужно создавать константу при создании нового объекта.
#512 #609699
>>609679

>Это ты не руками удалял? зачем?


Не могу понять что именно удалял?
#513 #609700
>>609699

Строчку с папкой и неймспейсом в файле vendor/composer/autoload_psr4.php

Если что, ты можешь удалить папку vendor и заново сгенерировать автозагрузчик командой композера dump-autoload
#514 #609702
>>609696
Это упражнение из задачника опа по имитации ооп в js.
То что получается выглядит крайне костыльно и только прививает отвращение к этому языку.

Кстати в es6 кажется таки ввели классовые константы.

Лично у меня складывается впечатление что js недоязык и годится только для манипуляций с домом, что бы там ни кукарекали хипсторы с ноджс.
#515 #609704
>>609702

Чтобы не было непонимания, это не имитация ООП которую придумал ОП, а общепринятая имитация и ее можно увидеть в библиотеках. Да и как вы без ООП будете писать сложные приложения? Никак. Так что надо изучать.
38 Кб, 676x264
#516 #609705
>>609698
Пикрелейтед вводит в заблуждение. Получается мне нужно передавать не Hamburger.SIZE_SMALL, а Hamburger.prototype.SIZE_SMALL.
Всё-таки я не понимаю, почему многие негодуют от пхп, но расхваливают этот набор костылей.
#517 #609706
>>609705
Чтобы пилить бабло на браузерных играх и не такое придумаешь.
#518 #609707
>>609633
а для винды как установить?
#519 #609711
>>609669

>И какой смысл вот в этом?


>


>> $pdo = null;


>> if (!$pdo) {


>Это условие всегда выполняется.


>


Я просто переношу код из https://github.com/someApprentice/simpleRegistration/blob/master/Lib/connect.php#L11-L13
Это мы с тобой делали
#520 #609712
>>609704

>как вы без ООП будете писать сложные приложения?


А какие могут быть сложные приложения на js?
Ну валидировать форму, ну сымитировать алёрт каким-нибудь jui dialog. Ну вставить параграф полученный аяксом.
Все это делается готовыми библиотеками, ничего нестандартного, никаких сложных архитектурных схем.

Приведи примеры или ссылки на навороченные нестандартные веб-приложения на js.
Мне кажется такие если и есть, то редкость. Ну или кастомные вещи типа онлайн-игр, не знаю.
Мы в конце концов php-шники, хоть и стремимся к фулстек.
#521 #609713
>>609712
ты забываешь про дно.жс
#522 #609716
>>609705

> Получается мне нужно передавать не Hamburger.SIZE_SMALL, а Hamburger.prototype.SIZE_SMALL.


Почему константу объявлять на прототипе?

Логичнее передавать Hamburger.SIZE_SMALL. Константа тут принадлежит «классу», как например статическое поле.

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

>>609707

Композер? Либо скачать установщик с офиц. сайта и запустить либо скачать phar архив и сохранить.

Погугли про установку композера на винду, в общем.

>>609712

как в этой задаче: https://github.com/codedokode/pasta/blob/master/js/spa.md

> Приведи примеры или ссылки на навороченные нестандартные веб-приложения на js.


Gmail.

Yandex Maps. Вот их API, сплошное ООП: https://tech.yandex.ru/maps/doc/jsapi/2.1/quick-start/tasks/quick-start-docpage/

jsfiddle
#523 #609718
>>609707
Композер это просто файлик, его можно и вручную скачать. Научить читать и не боятся команд и кода.

>curl -sS https://getcomposer.org/installer | php


>mv composer.phar /usr/local/bin/composer



первая строчка скачивает файлик, вторая перемещает.
#524 #609719
>>609716

>Логичнее передавать Hamburger.SIZE_SMALL


В этом и был мой изначальнйы вопрос. Как её передать, если прямое обращение к Hamburger.SIZE_SMALL дает нам undefined? >>609693
#525 #609720
>>609719

А как ты ее создаешь? Очевидно чтобы это работало надо написать

Hamburger.SIZE_SMALL = 'small'

или

Hamburger.SIZE_SMALL = 1;
#526 #609722
>>609669

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


Так набираю, я не прошу отвечать мне реальном времени, я надеялся хотя бы на пару раз в неделю. Раз не можешь, так не можешь, нет проблем. Я просто буду еще делать в свободное время задачи по верстке и по линуксу.
#527 #609724
>>609720
Как и свойства, через this внутри конструктора.
#528 #609727
>>609716
Ну я к этому и веду, что такие задачи либо крайне специфические, либо требуют серьезного скила (для работы в яндексе или гугле).
Никого из этого треда не возьмут в гугл (даже тебя, хоть ты тут самый прошаренный).

Мы на js максимум будем простенькие сервисы писать, а скорее всего формочки да уведомления.
Поэтому имитация ООП в js хоть и интересна для ознакомления, но на практике не нужна. Ну и вторая мысль, что ООП реализован в js плохо. Почему я должен изобретать какую-то дикую телегу ради тех же несчастных констант?
#529 #609730
>>609700

>Строчку с папкой и неймспейсом в файле vendor/composer/autoload_psr4.php


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

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

>>609727

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

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

И кстати что нестандартного в моей задаче на JS про автоматизированное рабочее место преподавателя? Ты думаешь подобные программы пишут только сеньоры? Нет, пишут стажеры и джуниоры, особенно если это госзаказ какой-нибудь, все деньги давно попилены и на сеньоров их просто не хватит.
#531 #609732
>>609730

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

В мануале psr-4 пишут маленькими буквами: https://getcomposer.org/doc/01-basic-usage.md#autoloading

Почему у тебя большими?
#532 #609736
>>609732
Советую всем использовать вместо echo и var_dump свою функцию, которая распечатывать массив или переменную в файл. При отладке сложных фреймворков или ajax незаменимо. Еще лучше конечно пользоваться для этого готовым решением для отладки, но этот способ самый быстрый и вы будете им всегда пользоваться.
#533 #609741
>>609731

>ООп исплоьзуется еще в библиотеках.


Пусть используется. Я же не буду перечитывать исходный код jquery или mootools.

>Да и ничего сложного там нет.


Не сложно, но костыльно, неудобно, некрасиво и вообще нафиг не нужно.

>когда до реальных задач дойдешь?


Я не знаю, что ты подразумеваешь под реальными задачами. В твоем мире наверное стажеры допиливают Gmail, но я как-то с таким не сталкивался.
В моем мире js больше по части формочек и анимации на странице.
Ну ладно, мы с разных планет, не будем спорить.
#534 #609742
>>609718
ну скачала композером, а дальше что? папка с фреймворком не открывается в браузере, доступ запрещен пишет.
#535 #609745
>>609741

>Пусть используется. Я же не буду перечитывать исходный код jquery или mootools.


В одном случае из 10 - надо. Бывают случаи, когда есть некая редко-встречающаяся библиотека. Недавний пример с работы - нужно было найти готовый вариант для интерфейса тегирования - чтоб как втентакле проставлять теги на фотку. Готовых решений таких - пересчитать по пальцам. Нашли самый подходящий, но в нем был один косяк, который нам не подходил и решили устранить чутка дописав исходник. Работа понятное дело небольшая, но если бы фронтендщик не знал как пишут прототипы - наверное копался бы дольше. Это при том что работаю я в шараге, хуяк хуяк и готово. Где работа сложней хоть немного - таких прецедентов будет больше.
#536 #609749
>>609742
А какой фреймворк ты ставишь то? В первом посте не написал ничего.
#537 #609751
>>609393

>Можно сравнить буквы. Если они не совпали - слово не палиндром, выходим. Если совпали - продолжаем сравнение.


Ох щи, действительно, самое естественное же решение... Да, там можно просто поставить это условие в цикле, чтобы он продолжался.
Чёрт, как всё просто, а я только усложнять могу пока что.

>В массиве не может быть 2 элемента с одинаковым ключом, ключ это что-то вроде уникального идентификатора элемента массива. А вот одинаковые значения у элементов могут быть.


Оо, точно, я всё перепутал. Конечно, там ключи разные (порядковые номера), а значения у них могут быть одинаковыми (буквы из текста).
Вот там var_dump массивов как выглядит (часть их):
array(1) {
["а"]=>
int(1)
}
array(1) {
["а"]=>
int(1)
}
array(1) {
["р"]=>
int(2)
}
array(1) {
["р"]=>
int(2)
}
array(1) {
["о"]=>
int(3)
}
array(1) {
["о"]=>
int(3)
}
array(1) {
["з"]=>
int(4)
}
array(1) {
["з"]=>
int(4)
}
array(1) {
["а"]=>
int(5)
}
array(1) {
["а"]=>
int(5)
}
В принципе, получается, это ненужная сложность тоже работает.
#537 #609751
>>609393

>Можно сравнить буквы. Если они не совпали - слово не палиндром, выходим. Если совпали - продолжаем сравнение.


Ох щи, действительно, самое естественное же решение... Да, там можно просто поставить это условие в цикле, чтобы он продолжался.
Чёрт, как всё просто, а я только усложнять могу пока что.

>В массиве не может быть 2 элемента с одинаковым ключом, ключ это что-то вроде уникального идентификатора элемента массива. А вот одинаковые значения у элементов могут быть.


Оо, точно, я всё перепутал. Конечно, там ключи разные (порядковые номера), а значения у них могут быть одинаковыми (буквы из текста).
Вот там var_dump массивов как выглядит (часть их):
array(1) {
["а"]=>
int(1)
}
array(1) {
["а"]=>
int(1)
}
array(1) {
["р"]=>
int(2)
}
array(1) {
["р"]=>
int(2)
}
array(1) {
["о"]=>
int(3)
}
array(1) {
["о"]=>
int(3)
}
array(1) {
["з"]=>
int(4)
}
array(1) {
["з"]=>
int(4)
}
array(1) {
["а"]=>
int(5)
}
array(1) {
["а"]=>
int(5)
}
В принципе, получается, это ненужная сложность тоже работает.
#538 #609758
>>609745
Я и не говорил, что это не нужно знать, чего вы все накинулись.
Просто реализация ооп в js мягко говоря заставляет желать лучшего.

>если бы фронтендщик не знал как пишут прототипы


А у вас фронтендщик знает как в php парсить xml или работать с сокетами? Нет? Ну вот и я к тому же, что фулстек-фулстеком, а некоторое разграничение зоны ответственности все-таки должно быть.
#539 #609761
>>609758
Фулстеки - миф. Говнокодеры, которые и швец и жнец и на хуе дуец не нужны. Разграничение ответственности не просто должно быть, а строжайшее. Иначе превратишься в раба, который одной рукой пишет скриптики, другой рукой макеты в фотошопе нарезает длля верстки.
#540 #609763
>>609732

>Почему у тебя большими?


Потому что у тебя тоже большими https://github.com/codedokode/pasta/blob/master/php/autoload.md

>"PSR-4": {

#541 #609764
>>609742

>скачала


А, так ты же не человек даже.

Папка с фреймворком и не должна быть доступна из веб, из веб должна быть доступна папка web. Для этого нужно настроить виртуальный хост.
http://www.yiiframework.com/doc-2.0/guide-start-installation.html#recommended-apache-configuration
#542 #609765
>>609763
А еще там MyLibray без двух обратных слешей на конце.
#543 #609767
>>609764
Спасибо, попробую. Вы тут все равно все геи, так что буду в своем роде писать.
#544 #609768
>>609761
Я уже и не говорю о том, что фулстек - это физически не возможно, иначе один сайтик-проект будешь лет пять делать.
Работать и осваивать нужно на одной технологии, потому что пока другие осваивать будешь, первые забываются.
#545 #609769
>>609761
Ну не скажи, есть и грамотные профессионалы, которые на фрилансе зашибают >2k зеленых, знал таких, уважаю. Правда работают по 16 часов в сутки.
Я бы так не хотел. Хочется и на природе отдохнуть с семьей, и книжку иногда почитать.

Ну и строгое разграничение ответственности не избавляет от среднего знания сопутствующих дисциплин. Например чтобы бекендер не начал высирать echo "<center>" например.
12 Кб, 376x137
#546 #609779
Это что еще за херня? Только сегодня заметил. Выскакивает на некоторых сайтах иногда. Никаких левых расширений у меня не стоит. Как это возможно?
ШОК, СЕНСАЦИЯ, ОПОБОЯЗНЬ #547 #609782
Ребята, у меня ОПОБОЯЗНЬ.
Я делаю и заранее уже думаю, что что-то сделал не так.
Как мне успокоиться и начать жить?
http://ideone.com/M0dDNE - вот сделал первую проверку номера через регулярку.
Всё работает, всё показывает, но у меня уже ощущение, что сделано всё неправильно, можно было сделать проще и правильнее.
#548 #609783
>>609779
Вирусня, у меня так было.
#549 #609785
>>609769
Предполагаю, что эти профессионалы просто "агреггаторы фрилансеров". Люди - которые имеют распиаренные аккаунты на сайтах для фрилансеров и раздающие свои заказы удаленным разрабам.
#550 #609795
>>609785
Нет, лично знаю пару человек, и не по двачам, а irl.
Действительно очень классные профи, причем не только веб-фулстек, но и отлично знают несколько других языков.
Естественно сеньоры с опытом 10-15 лет, а не 18-летние стажеры работающие за еду, как тут проповедует опчег.

Ну ладно, не хочу больше флудить. Истина посредине: понятно что никто не будет грузить джуна какими-то сложностями, но это не значит что достаточно знания синтаксиса чтобы взяли джуниором. Тем более что люди обычно ставят цель карьерного роста, а для этого нужно непрерывно учиться.
#551 #609823
>>609736

А я еще дам кусок кода который это делает:

file_put_contents('/tmp/log.txt', print_r($var, true), FILE_APPEND);

хотя по моему var_dump($x); die(); проще и удобнее.

>>609741

Вот смотри вакансия в компании Битрикс: https://www.1c-bitrix.ru/about/job.php#webdev

Битрикс это сложная CMS использующаяся в тысячах сайтов. И посмотри, кого они ищут? Отнюдь не сеньора, а студента за 20 000 р.

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

Ну и даже на обычном сайте объем JS кода обычно растет и с ООП проще его структурировать.

>>609742

И никаких подробностей: ни что ты пишешь в адресной строке браузера, ни как настроен Апач. Без подробностей трудно что-то сказать.

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

>>609758

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

Тебе надо просто запомнить как в JS реализуются вещи из классоческого ООП:

класс -> конструктор + прототип
конструктор -> функция с большой буквы
поле -> создаем св-во в конструкторе
метод -> функция в прототипе
статич. поля и методы - свойства на функции
константы -> свойства функии, написанные большими буквами
private/public - нет
наследование -> Object.create в ES5, хак с прототипами в ES3

Алсо можешь почитать про новый синтаксис в будущей версии JS http://frontender.info/es6-classes-final/
#551 #609823
>>609736

А я еще дам кусок кода который это делает:

file_put_contents('/tmp/log.txt', print_r($var, true), FILE_APPEND);

хотя по моему var_dump($x); die(); проще и удобнее.

>>609741

Вот смотри вакансия в компании Битрикс: https://www.1c-bitrix.ru/about/job.php#webdev

Битрикс это сложная CMS использующаяся в тысячах сайтов. И посмотри, кого они ищут? Отнюдь не сеньора, а студента за 20 000 р.

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

Ну и даже на обычном сайте объем JS кода обычно растет и с ООП проще его структурировать.

>>609742

И никаких подробностей: ни что ты пишешь в адресной строке браузера, ни как настроен Апач. Без подробностей трудно что-то сказать.

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

>>609758

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

Тебе надо просто запомнить как в JS реализуются вещи из классоческого ООП:

класс -> конструктор + прототип
конструктор -> функция с большой буквы
поле -> создаем св-во в конструкторе
метод -> функция в прототипе
статич. поля и методы - свойства на функции
константы -> свойства функии, написанные большими буквами
private/public - нет
наследование -> Object.create в ES5, хак с прототипами в ES3

Алсо можешь почитать про новый синтаксис в будущей версии JS http://frontender.info/es6-classes-final/
#552 #609831
>>609823

>Также и со сложными JS приложениями. Вполне возможно что разрабатывать их поручат тебе.


кусочек кода этих охуенных OOP-mlg-swag-JS приложений привести, чтобы ты охуел?
#553 #609855
>>609758

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


Это выглядит как «не хочу учиться». Не хочешь - не учись, но возьмут того кто хочет. Тем более в кризис (если ты из России) я бы не советовал быть таким разборчивым.

>>609761

Вообще-то если один человек делает и фронтенд и бекенд, то нет проблемы взаимодействия и непонимания.

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

>>609763

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

Ссылка: https://getcomposer.org/doc/04-schema.md#psr-4

Насчет бекслеша ты тоже прав - если его не указать то он будет брать любые неймспесы начинающиеся со слова: https://getcomposer.org/doc/04-schema.md#psr-4

>>609768

Как это невозможно? Я разбираюсь и в том, и в том.

>>609769

Если они работают по 16 часов то они что-то делают неправильно. Надо не больше работать, а больше брать за час.

>>609779

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

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

>>609785

Я тоже так хочу, только брать заказы на западе и перепродавать тут.
#553 #609855
>>609758

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


Это выглядит как «не хочу учиться». Не хочешь - не учись, но возьмут того кто хочет. Тем более в кризис (если ты из России) я бы не советовал быть таким разборчивым.

>>609761

Вообще-то если один человек делает и фронтенд и бекенд, то нет проблемы взаимодействия и непонимания.

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

>>609763

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

Ссылка: https://getcomposer.org/doc/04-schema.md#psr-4

Насчет бекслеша ты тоже прав - если его не указать то он будет брать любые неймспесы начинающиеся со слова: https://getcomposer.org/doc/04-schema.md#psr-4

>>609768

Как это невозможно? Я разбираюсь и в том, и в том.

>>609769

Если они работают по 16 часов то они что-то делают неправильно. Надо не больше работать, а больше брать за час.

>>609779

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

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

>>609785

Я тоже так хочу, только брать заказы на западе и перепродавать тут.
#554 #609857
>>609831

Меня ты вряд ли удивишь, но в целях обучения анонов можешь показать.
#555 #609859
>>609782

Нет даже проверки на длину: http://ideone.com/rcSOSS

Алсо паста.

### Номера телефонов

Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек!

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

Вот список номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
#556 #609867
>>607311
это не ссаные задачи. Это проекты среднего уровня, где можно многому научиться
#557 #609868
>>609758
И я не знаю. Надо будет - на ходу доки читну.
бэкендер
#558 #609871
>>609855
Я тоже "разбираюсь" и в том и в том, но делать и то и то и это для большого проекта одному человеку - не эффективно. Такое заставляют делать только очень жадные владельцы говноконторок и заказчики.
#560 #609877
>>607942
двачую
#561 #609878
>>608914
>>609380
bump

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

>>609855

>Это выглядит как «не хочу учиться».


Не хотел бы, не решал бы твои всратые задачи.
Я всего лишь сказал, что мне не эстетически не нравится реализация ООП в js и выразил сомнение в востребованности серьезных приложений на js. Ну и сложные вещи явно делают не стажеры, я тебе не верю, можешь не пробовать меня переубедить.
#562 #609883
Кстати, а зачем вы мне посоветовали в конфиг Апача лезть, чтобы уии2 развернуть? В прошлый раз я этого точно не делала. Локалка у меня итак работает (XAMMP), а вот сама папка фреймворка не разворачивается Access forbidden.
#563 #609885
>>609823

>И никаких подробностей: ни что ты пишешь в адресной строке браузера, ни как настроен Апач. Без подробностей трудно что-то сказать.


>


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


Мальчеги, вы надо мной что ли издеваетесь) Я конечно девушка знатная, сиськи большие, жопа вот это вот все, но я уже два года делаю сайты на похапе и у меня прекрасно работает локалка. А вот фреймворк не разворачивается не знаю почему, собственно поэтому и был задан вопрос, как установить уии2. Зачем делать из меня дуру, не понимаю. Причем такая тупость в ответ на вопрос в этом треде постоянно встречается, вы видимо привыкли к нубским вопросам школьников.
#564 #609888
>>609859
Блин, я никак не могу понять, почему у меня не работает указание количества цифр в регулярном выражении?
$regexp = '/^8([0-9]{3}-()\\s)([0-9]{5}-()\\s)$/'; - так не работает.
$regexp = '/^8([0-9-()\\s]+)([0-9-()\\s]+)$/'; так работает, но нет ограничения на количество цифр в номере.
Вроде всё просмотрел в том уроке - не нахожу дополнительных указаний для этого.
Я-то просто проверил те номера, проверил некоторые из тех, которые есть в твоей пасте, - просто похожие, подобного типа.
С этим было всё в порядке.
Чуть позже напишу проверку из массива, спасибо.
21 Кб, 300x300
#565 #609892
>>609874
- ChWUSES???
- ChEMGR!
- ChSSU...
- OnChEM)))
- ChActMBx, if(f.value.length>0 && arMailBoxes[f.value] && arMailBoxes[f.value]['server_type']=='smtp') email_domain_select.options[ix] = new Option(arMailBoxes[f.value]['domains'][ix], arMailBoxes[f.value]['domains'][ix]);

omg, wtf?

Если такое пишут те йоба-стажеры битрикса, на которых молится оп, тогда я спокоен. Я тоже могу устраиваться в битурекс.
Но не хочу.
76 Кб, 1259x576
#566 #609933
>>609885

>сиськи большие, жопа вот это вот все


Весишь-то сколько? Может там сплошной жир, это не считается.

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


кекс

>В прошлый раз я этого точно не делала.


В душе не ебу, что ты делала в прошлый раз. Может это был первый юи, не второй?

В какой директории установлено приложение, дырка? Дай полный путь, C:\\???\example.com
Это важно, потому что корневая директория должна быть именно в папке C:\\путь к зампу\example.com\web, не C:\\путь к зампу\example.com как у тебя сейчас.
Это сделано специально, чтобы защитить важные файлы от доступа из интернета. Доступной должна быть только папка web.
Это делается в конфиге апача, как написано здесь: http://www.yiiframework.com/doc-2.0/guide-start-installation.html#recommended-apache-configuration
Как это сделать на xampp сборочке не знаю, гугли.

Чтобы не быть голословным, только что тоже поставил второй юи. Композер между прочим потребовал npm и bower пакеты, пришлось ставить плагин для композера. Об этом в мануале по установке об этом сказано:

>composer global require "fxp/composer-asset-plugin:~1.1.1"


> installs the composer asset plugin which allows managing bower and npm package dependencies through Composer. You only need to run this command once for all.


Это было сделано?

Дальше, когда я устанавливал этот плагин, композер потребовал у меня auth-токен гитхаба. Как получить токен, написано здесь
https://github.com/blog/1509-personal-api-tokens

Ну и на всякий случай уточню, что
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
здесь basic нужно заменить на свою папку, в данном случае C:\\путь к зампу\example.com
Название сайта example.com вместо basic.
Папка example.com/web должна быть доступна из веб, это нужно настроить в конфиге апача/зампа.

У меня встал уй, пикрелейтед.
Правда там какой-то ворнинг, из-за него 500 статус, надо разобраться...
76 Кб, 1259x576
#566 #609933
>>609885

>сиськи большие, жопа вот это вот все


Весишь-то сколько? Может там сплошной жир, это не считается.

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


кекс

>В прошлый раз я этого точно не делала.


В душе не ебу, что ты делала в прошлый раз. Может это был первый юи, не второй?

В какой директории установлено приложение, дырка? Дай полный путь, C:\\???\example.com
Это важно, потому что корневая директория должна быть именно в папке C:\\путь к зампу\example.com\web, не C:\\путь к зампу\example.com как у тебя сейчас.
Это сделано специально, чтобы защитить важные файлы от доступа из интернета. Доступной должна быть только папка web.
Это делается в конфиге апача, как написано здесь: http://www.yiiframework.com/doc-2.0/guide-start-installation.html#recommended-apache-configuration
Как это сделать на xampp сборочке не знаю, гугли.

Чтобы не быть голословным, только что тоже поставил второй юи. Композер между прочим потребовал npm и bower пакеты, пришлось ставить плагин для композера. Об этом в мануале по установке об этом сказано:

>composer global require "fxp/composer-asset-plugin:~1.1.1"


> installs the composer asset plugin which allows managing bower and npm package dependencies through Composer. You only need to run this command once for all.


Это было сделано?

Дальше, когда я устанавливал этот плагин, композер потребовал у меня auth-токен гитхаба. Как получить токен, написано здесь
https://github.com/blog/1509-personal-api-tokens

Ну и на всякий случай уточню, что
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
здесь basic нужно заменить на свою папку, в данном случае C:\\путь к зампу\example.com
Название сайта example.com вместо basic.
Папка example.com/web должна быть доступна из веб, это нужно настроить в конфиге апача/зампа.

У меня встал уй, пикрелейтед.
Правда там какой-то ворнинг, из-за него 500 статус, надо разобраться...
#567 #609940
yii\base\ErrorException:32\texception 'yii\base\ErrorException' with message 'Module 'curl' already loaded' in Unknown:0
Stack trace:
#0 {main}

И в логах апача тоже PHP Warning: Module 'curl' already loaded in Unknown on line 0
Я кстати раньше замечал это, но не обращал внимания, вроде не мешало.
Предлагаю ОПу как обычно обоссать меня и подсказать как это исправить.
Это наверное надо что-то поправить в php.ini, только не знаю что. Может я его два раза прописал?

А хороший фреймворк этот yii2. Другие молчат в тряпочку, а этот отслеживает такие вещи, выбрасывает исключения знаешь ли.
#568 #609961
>>609940
А, уже разобрался, действительно модуль был 2 раза подключен. На убунте какая-то странная структура кофигов php.
Файлов php.ini не счесть, так еще в папке /etc/php5/mods-available для каждого модуля отдельный файл. Черт ногу сломит.
#569 #609966

> блаблабла я девочка


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

>>609883

Процесс установки Юи 2 описан в документации https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/start-installation.md

Какой из вариантов ты делаешь? На каком шаге проблемы?

> а вот сама папка фреймворка не разворачивается


Что значит не разворачивается? архиватор не может распаковать архив? При открытии в браузере какого-то URL (какого?) Апач выдает ошибку 403?

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

>>609885

Нет подробностей = нет советов

>>609888

> '/^8([0-9]{3}-()\\s)([0-9]{5}-()\\s)$/'; - так не работает.


У тебя там 9 цифр всего разрешено в номере (включая восьмерку).

> так работает, но нет ограничения на количество цифр в номере.


Да, надо его добавить. Можно сделать такую регялрку: сначала 8 или +7, за ними ровно 10 цифр между которыми любое число пробелов, скобок, минусов.

>>609892

Да, названия все ужасные. Ну и сам Битрикс с 3-мерными массивы типа $DASDAD['USER']['RIGHTS']['CAN_SOMETHING'] это ад (еще и капс-локом зачем-то). Люди делают популярную CMS а о читабельности и удобстве не задумываеися. Видимо студентам которые они набирают не до этого: им бы сессию сдать.

>>609940

Погугли по тексту ошибки https://www.google.ru/search?q=PHP+Warning:+Module+%27curl%27+already+loaded&newwindow=1&gbv=1&sei=mqZ5VoCCJsrmywOv6YTADg

Пишут что причина в том что расширение (curl) уже вкомпилировано в PHP и ты пытаешься второй раз его загрузить через php.ini

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


Это не он, это PHP.
#569 #609966

> блаблабла я девочка


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

>>609883

Процесс установки Юи 2 описан в документации https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/start-installation.md

Какой из вариантов ты делаешь? На каком шаге проблемы?

> а вот сама папка фреймворка не разворачивается


Что значит не разворачивается? архиватор не может распаковать архив? При открытии в браузере какого-то URL (какого?) Апач выдает ошибку 403?

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

>>609885

Нет подробностей = нет советов

>>609888

> '/^8([0-9]{3}-()\\s)([0-9]{5}-()\\s)$/'; - так не работает.


У тебя там 9 цифр всего разрешено в номере (включая восьмерку).

> так работает, но нет ограничения на количество цифр в номере.


Да, надо его добавить. Можно сделать такую регялрку: сначала 8 или +7, за ними ровно 10 цифр между которыми любое число пробелов, скобок, минусов.

>>609892

Да, названия все ужасные. Ну и сам Битрикс с 3-мерными массивы типа $DASDAD['USER']['RIGHTS']['CAN_SOMETHING'] это ад (еще и капс-локом зачем-то). Люди делают популярную CMS а о читабельности и удобстве не задумываеися. Видимо студентам которые они набирают не до этого: им бы сессию сдать.

>>609940

Погугли по тексту ошибки https://www.google.ru/search?q=PHP+Warning:+Module+%27curl%27+already+loaded&newwindow=1&gbv=1&sei=mqZ5VoCCJsrmywOv6YTADg

Пишут что причина в том что расширение (curl) уже вкомпилировано в PHP и ты пытаешься второй раз его загрузить через php.ini

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


Это не он, это PHP.
2 Кб, 96x96
#570 #609967
http://joomlaforum.ru/index.php?topic=80666.0

>Пока Ваш сайт не станет беспокоить Вас не передних страницах, я не стал бы волноваться.


>На вскидку, похоже на муху в PHP, а таковые - всегда есть были и будут в логах PHP/Apache/MySQL.


>Если нет ничего подозрительного в логах посещения сайта, не вижу причин для волнений.



Лысый человек тупой, или ему просто не хотелось долго и нудно расписывать клиенту как исправить эту ситуацию, поэтому отмазался увлекательной историей про "муху"?
#571 #609969
>>609966
Разобрался уже.

>Это не yii2 выбрасывает исключение, это PHP.


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

И это же ворнинг, а не исключение, исключение бросает именно уй yii\base\ErrorException
Ну и уж точно 500 статус отдает не php.

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

Вообще для себя сделал вывод, что нужно забыть про рунет.
Кто не знает английского, срочно учите, потому что на русском языке вообще нет материалов.
#572 #609974
>>608914

Кстати ты изучаешь jQuery, а ты прочел полезные замечания перед задачами? https://gist.github.com/codedokode/ce30e7a036f18f416ae0#dom--jquery

Там например написано как из объекта jQuery получить DOM элемент.

> а meta[property=og:image] выдает syntax error, поэтому приходится брать значение атрибута в кавычки.


Из-за двоеточия наверно. Тут написано

https://drafts.csswg.org/selectors-3/#attribute-selectors

> Attribute values must be CSS identifiers or strings. [CSS21]



strings заключается в кавычки ( http://www.w3.org/TR/CSS21/syndata.html#strings ). Посмотрим определение identifiers:

http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier

> In CSS, identifiers (including element names, classes, and IDs in selectors) can contain only the characters [a-zA-Z0-9] and ISO 10646 characters U+00A0 and higher, plus the hyphen (-) and the underscore (_); they cannot start with a digit, two hyphens, or a hyphen followed by a digit. Identifiers can also contain escaped characters and any ISO 10646 character as a numeric code (see next item). For instance, the identifier "B&W?" may be written as "B\&W\?" or "B\26 W\3F".



Таким образом без кавычек можно писать только идентификаторы. Двоеточие надо либо экранировать

[name=og\:image]

(возможно бекслеш придется написать дважды так как он спецсимвол в строчном литерале JS) либо писать кодом

[name=og\123456 image]

либо в кавычках

[name="og:image"]

Проще всегда ставить кавычки, по моему.

> А как узнать, что элемент принадлежит форме? Некоторые элементы типа button вполне могут быть не привязаны к форме, находиться вне ее (неё?).


Вообще есть DOM-свойство form указывающее на DOM элемент формы:

if (input.form) ...

> Если элемент лежит внутри формы, он однозначно к ней относится? Если так, тогда


Да, хотя в HTML5 появился атрибут (Не путай с DOM свойством! Аналогично DOM свойство value и атрибут value это разные вещи с разным смыслом) form для связи элемента с формой явно: http://htmlbook.ru/html/input/form

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

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

> names = names.sort();


sort это мутатор, он не создает новый массив, а сортрует на месте. Ну-ка перечитай список методов массивов и создают ли они новый массив.

В общем, верно. В этой и предыдущей задаче для извлечения массива атрибутов, возможно, стоило бы использовать map:

http://api.jquery.com/map/
http://api.jquery.com/jquery.map/
#572 #609974
>>608914

Кстати ты изучаешь jQuery, а ты прочел полезные замечания перед задачами? https://gist.github.com/codedokode/ce30e7a036f18f416ae0#dom--jquery

Там например написано как из объекта jQuery получить DOM элемент.

> а meta[property=og:image] выдает syntax error, поэтому приходится брать значение атрибута в кавычки.


Из-за двоеточия наверно. Тут написано

https://drafts.csswg.org/selectors-3/#attribute-selectors

> Attribute values must be CSS identifiers or strings. [CSS21]



strings заключается в кавычки ( http://www.w3.org/TR/CSS21/syndata.html#strings ). Посмотрим определение identifiers:

http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier

> In CSS, identifiers (including element names, classes, and IDs in selectors) can contain only the characters [a-zA-Z0-9] and ISO 10646 characters U+00A0 and higher, plus the hyphen (-) and the underscore (_); they cannot start with a digit, two hyphens, or a hyphen followed by a digit. Identifiers can also contain escaped characters and any ISO 10646 character as a numeric code (see next item). For instance, the identifier "B&W?" may be written as "B\&W\?" or "B\26 W\3F".



Таким образом без кавычек можно писать только идентификаторы. Двоеточие надо либо экранировать

[name=og\:image]

(возможно бекслеш придется написать дважды так как он спецсимвол в строчном литерале JS) либо писать кодом

[name=og\123456 image]

либо в кавычках

[name="og:image"]

Проще всегда ставить кавычки, по моему.

> А как узнать, что элемент принадлежит форме? Некоторые элементы типа button вполне могут быть не привязаны к форме, находиться вне ее (неё?).


Вообще есть DOM-свойство form указывающее на DOM элемент формы:

if (input.form) ...

> Если элемент лежит внутри формы, он однозначно к ней относится? Если так, тогда


Да, хотя в HTML5 появился атрибут (Не путай с DOM свойством! Аналогично DOM свойство value и атрибут value это разные вещи с разным смыслом) form для связи элемента с формой явно: http://htmlbook.ru/html/input/form

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

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

> names = names.sort();


sort это мутатор, он не создает новый массив, а сортрует на месте. Ну-ка перечитай список методов массивов и создают ли они новый массив.

В общем, верно. В этой и предыдущей задаче для извлечения массива атрибутов, возможно, стоило бы использовать map:

http://api.jquery.com/map/
http://api.jquery.com/jquery.map/
#573 #609978
>>609380

> То через пять строк я уже не буду помнить, какая переменная обычная, а какая jqery, к какой из них можно применить метод attr например. Можно конечно насильно потом пропустить через $(...)


Лучше не смешивать в коде их. А например стараться использовать в основном jQuery объекты. Ну и еще могла бы помочь jsDoc ( http://usejsdoc.org/about-getting-started.html ):

/xx
x @param {jquery} a
x @param {Node} b
x/
function doSmth(a, b)

Увы, в JS нет тайп-хинтов как в PHP. Но есть версия Typescript с типизацией:

function doSomething(a: jquery, b: Node) {

Она при компиляции проверяет типы и не даст передать что-то не то.

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

По задаче:

> div.views-count_post


Div наверно тут лишний, не несет никакой пользы

> // к числу привести, или к строке?


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

В общем, решено верно.
#573 #609978
>>609380

> То через пять строк я уже не буду помнить, какая переменная обычная, а какая jqery, к какой из них можно применить метод attr например. Можно конечно насильно потом пропустить через $(...)


Лучше не смешивать в коде их. А например стараться использовать в основном jQuery объекты. Ну и еще могла бы помочь jsDoc ( http://usejsdoc.org/about-getting-started.html ):

/xx
x @param {jquery} a
x @param {Node} b
x/
function doSmth(a, b)

Увы, в JS нет тайп-хинтов как в PHP. Но есть версия Typescript с типизацией:

function doSomething(a: jquery, b: Node) {

Она при компиляции проверяет типы и не даст передать что-то не то.

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

По задаче:

> div.views-count_post


Div наверно тут лишний, не несет никакой пользы

> // к числу привести, или к строке?


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

В общем, решено верно.
#574 #609981
>>609380

Насчет typescript, это майкрософт делает расширение JS для проверки типов, смотри как интересно: http://www.typescriptlang.org/Tutorial

Там и синтаксис для классов есть.

прочем на практике не стоит его использовать, так как не все его знают, да и нужен этап компиляции.
#575 #609983
>>609966

>У тебя там 9 цифр всего разрешено в номере (включая восьмерку).


Ничего не меняется, если я пишу и вот так:
'/^8([0-9]{3}-()\\s)([0-9]{7}-()\\s)$/';
Сейчас пока сделал вот так всё, с помощью массива и очистки номера, как мы делали, когда палиндром очищали: http://ideone.com/VoniLC
Ещё сейчас сделаю проверку всех возможных номеров из твоей пасты, ещё попробую поставить \\d и \\D в регулярку. В принципе, это вообще может быть выходом, не подумал сразу.

>> так работает, но нет ограничения на количество цифр в номере.


>Да, надо его добавить. Можно сделать такую регялрку: сначала 8 или +7, за ними ровно 10 цифр между которыми любое число пробелов, скобок, минусов.


Буду пробовать, спасибо.
#576 #609985
Привет. Может и не туда куда надо обращаюсь. Наивный пост.

Мне очень нужно стать материально обеспеченным. Я не хочу подрабатывать и дальше горе-дизайнером и "контент-менеджером" на фрилансе. Хочу обладать полезными знаниями которые хорошо оплачиваются. Съехать от родителей и начать уже самому нормально развиваться.

20 лет. Немного учил джаваскрипт, ушел не так далеко от Hello, world!, где-то в районе калькуляторов и какое из вводимых чисел больше (можно смеяться). Совсем школьником игрался с сайтом, но это больше с подгоном картинок, цветами и перераспределением кнопочек. Понимаю, что от школьного уровня далеко не ушел, но немного позанимавшись недавно почувствовал, что именно этим я бы и хотел жить. Может меня привлекло то, что PHP учить немного легче, ну и что с этого? Единственная проблема - не могу нормально начать заниматься. Передо мной стоит стена, которая постоянно мне мешала, только в этот раз я очень хочу через неё пробиться.

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

Спасибо.
#577 #609987
>>609985

>В общем, тут сидите Вы, люди которые этим уже живут и зарабатывают на жизнь


кек

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

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


Ты ждешь что сейчас кто-то скажет что-то волшебное, и ты "начнешь нормально заниматься"?
#578 #609993
>>609961

Скорее всего это один файл на который стоят ссылки. Также для удобства у каждого расширения свой конфиг.

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

Более того, странно что у тебя такая ошибка, неужели это во встроенных конфигах что-то неправильно?

>>609969

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

> исключение бросает именно уй yii\base\ErrorException


Фреймворки часто преобразуют ошибки/варнинги в исключения.

> Но с большой долей вероятности гуглер н


Я проверил что ищется по моей ссылке

> Кто не знает английского, срочно учите,


хорошая мысль
#579 #609995
>>609987
Нет. Жду то, о чем просил в самом конце. В волшебные слова и таблетки не верю.
#580 #610001
>>609983

> -()\\s


Что это значит? Что оно должно делать?

> с помощью массива и очистки номера,


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

Также, твой код ничего не пишет в этом случае - почему? http://ideone.com/QLmdqk

>>609985

В этом треде мы изучаем PHP. Мы не занимаемся мотивацией и не оказываем психологическую поддержку. Не хочешь учить - стой перед стеной дальше.
#581 #610020
>>610001

>Что это значит? Что оно должно делать?


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

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


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

>Также, твой код ничего не пишет в этом случае - почему? http://ideone.com/QLmdqk


Да, там можно поставить 8|+7 в начале регулярки, из массива убрать "+".
Но опять же проблема с количеством символов остаётся в простом виде, который я сначала сделал и который не учитывает количество цифр.
#582 #610025

>Да, там можно поставить 8|+7 в начале регулярки, из массива убрать "+".


Аа, нет, так тоже не работает...
Тупость моя не знает границ, однако...
#583 #610028
>>610020

ты что-то не так понял

> [0-9]{3}-()\\s


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

А как же скобки? Скобки тут спецсимвол и просто группируют пустое пространство внутри. Надо писать \\( чтобы указать символ скобки

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


Ты не понял как работают выражения. Конструкция

AB

значит «A, за которой идет B»

A|B значит «либо A либо B»
[...] значит «любой один из символов в скобках»

Круглые скобки помогают группировать конструкции:

(A|B)C - A или B, за ними идет C
AB+ = А, за ней одна или больше B: ABBB
(AB)+ = ABABABAB

Перечитай-ка урок.
#583 #610028
>>610020

ты что-то не так понял

> [0-9]{3}-()\\s


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

А как же скобки? Скобки тут спецсимвол и просто группируют пустое пространство внутри. Надо писать \\( чтобы указать символ скобки

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


Ты не понял как работают выражения. Конструкция

AB

значит «A, за которой идет B»

A|B значит «либо A либо B»
[...] значит «любой один из символов в скобках»

Круглые скобки помогают группировать конструкции:

(A|B)C - A или B, за ними идет C
AB+ = А, за ней одна или больше B: ABBB
(AB)+ = ABABABAB

Перечитай-ка урок.
#584 #610029
http://ideone.com/ptfPIW
Не пойму в чем ошибка. Можно делать операции непосредственно в echo?
Можно так реализовать:
$a = $word1 [mt_rand(0,3)];
$b = $word1 [mt_rand(0,6)];
$c = $word1 [mt_rand(0,9)];
echo "$a $b $c";
но зачем объявлять лишние переменные и плодить строки кода.
#585 #610036
>>610028
Спасибо, бро! Немного прояснело сейчас.
Сейчас снова прочитаю урок, действительно.
#586 #610039
>>609993

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


А куда сохранить этот файл, чтобы php его "подцепил"? В ту же папку, что и главный php.ini? Он лежит в /etc/php5/apache2/
Если да, то под каким именем?

>Более того, странно что у тебя такая ошибка, неужели это во встроенных конфигах что-то неправильно?


Да нет, это я наверное неправильно что-то сделал. Гуглил, бездумно выполнял советы дебилов из гугла. Вот наверное одним из советов было "прописать что-то в php.ini". Сделал, не заработало. Пошел дальше гуглить, сделал по другому "рецепту". Заработало. Но теперь стало выдавать ошибку о том, что модуль подключен два раза.

Сейчас уже разобрался, действительно в php.ini было
extension=/usr/lib/php5/20121212+lfs/curl.so
И в файле /etc/php5/mods-available/curl.ini
; configuration for php CURL module
; priority=20
extension=curl.so
Приоритет еще какой-то, господи.

Короче удалил строку из главного php.ini, вроде ошибка пропала. Но чувствую себя бабуином. Неужели нигде нет четенькой инструкции по настройке веб-сервера? Я где-то выше спрашивал, но никто не обратил внимания на пост >>608572
#587 #610051
>>610039

Полный список настроек - в документации.

Апач:

https://httpd.apache.org/docs/2.4/configuring.html
https://httpd.apache.org/docs/2.4/mod/

PHP: мануал http://php.net/manual/ru/ini.php
Mysql: my.ini http://dev.mysql.com/doc/refman/5.7/en/option-files.html

На digital ocean бывают полезные краткие туториалы, например https://www.digitalocean.com/community/tutorials/how-to-configure-the-apache-web-server-on-an-ubuntu-or-debian-vps

> А куда сохранить этот файл, чтобы php его "подцепил"


посмотри главный файл, там скорее всего есть инструкция, которая подключает конфиги из папки с именем заканчивающимся на .d - в нее можно и класть.
#588 #610053
>>610029

> Можно делать операции непосредственно в echo?


Нет

> в чем ошибка


PHP видит только переменную, то есть

echo "... $word1 ... ";

И думает что ты пытаешься вывести массив. надо так:

echo ".. {$word1[$index]} ... ";

Но любые выражения там писать нельзя. Мануал http://php.net/manual/ru/language.types.string.php#language.types.string.parsing
#589 #610055
>>610053
Понял, спасибо.
#590 #610056
>>610029
http://ideone.com/XxRlmP - вот что у тебя бы получилось в таком случае.
Я реализовал через array_rand неделю назад: http://ideone.com/JelkIk
#591 #610062
>>610056
И нахрен я это запостил? Только всё удовольствие обломал анону.
Извините, не буду так больше делать.
#592 #610066
>>610062
Ты хотел помочь, спасибо. А еще я узнал новую инструкцию.
#593 #610077
Аноны, с какого браузера сидеть с ведра на кодакадеми? Они рекомендуют файрфокс, хром, ИЕ и сафари. С первых двух захожу, пишут что ваш браузер не поддерживается
#594 #610247
Сюка...
Плачу сижу...
Какой же я тупоооооой...
В третий раз перечитываю http://archive-ipq-co.narod.ru/l1/regexp.html и не могу я сделать эту ссаную проверку номера со скобками, дефисами и пробелами, как надо...
Никак я не пойму, как сделать, чтобы в регулярном выражении искались все указанные символы, но чтобы регулярка учитывала количество цифр...
Без подсказки не судьба...
Перечитал подсказки ОПа мне - снова расплакался, потому что я ни хера не понимаю уже...
#595 #610249
>>610247
Без рефлексии пожалуйста, у нас тут не тред оказания психотерапевтической помощи.
#596 #610260
>>610249
Подскажи, пожалуйста, какая регулярка нужна для этой задачи:

>Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — праивльный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).


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

>Подскажи, пожалуйста, какая регулярка нужна для этой задачи:


Та, которая отфильтровывает неправильные телефонные номера.
#598 #610277
>>610263
Регулярку в студию!
#599 #610278
>>610277
Погоди, ты хочешь, чтобы я решил за тебя задачу?
#600 #610282
>>610278
Какую-нибудь совсем прозрачную подсказку прошу - как минимум.
'/^8|\\+7((\\d{10}-\\(\\)\\s)?$/' - вот почему не работает это?
Как вообще указать в регулярке, что символ должен находиться в любом месте текста?
Как избавиться от последовательности, которая образуется, когда символы один за другим указываешь? Всё заключать в скобки?
#601 #610283
Почему нет решения к задачам по JavaScript? Над первой пол вечера голову ломал, скажите как ее решить?!
#602 #610284
'/^8|\\+7(\\d{10}-\\(\\)\\s)?$/' - вот так, точнее.
#603 #610286
>>610282

>Как вообще указать в регулярке, что символ должен находиться в любом месте текста?


Наверное никак, но от тебя это и не требуется.
#604 #610289
>>610283
Это же очевидно. Перечитай http://learn.javascript.ru/closures затем попробуй решить и не забудь проверить в проверялке http://dkab.github.io/jasmine-tests/
#605 #610290
>>610286
Что же требуется от меня? Как я могу знать, сколько скобок может поставить юзер? Может, он поставит не код в скобки, а сам номер?
#606 #610291
В чем смысл подобной "оптимизации"?
(new yii\web\Application($config))->run();
Разве нельзя было взять в переменную, а потом у этого объекта вызвать метод?

>>610283
Почему если не получается заработать денег их не выдают просто так?
#607 #610292
>>610290
Ну вот предположим пользователь может ввести либо 911 либо (911) и оба этих номера должны быть правильными. Очевидно, что эту скобка должна идти в регулярке перед и после этих цифр с указанием повторений от нуля до одного раза "{0,1}" либо короткий вариант "?" что означает, что она может быть, а может и не быть в тексте. То есть конкретно для случая выше мне нужно будет написать регулярку вида:
//(?911//)?
Доступно объяснил?
#608 #610293
>>610283
Потому что и ты не поможешь мне с регуляркой, и большинство тех, кто прошёл эти задачи, не помогут тебе.
Тут только ОП и пара анонов могут помочь. Остальные просто пройдут мимо.
А всё потому, что ты и сам не помоагешь мне с регуляркой.
Круговорт.
#609 #610294
>>610292
Так там точно так же и "-" может идти, как быть в этом случае? Для всех возможных элементов в номере это прописывать?
Это доступно, спасибо. Но это я и так делал, такие дела.
#610 #610295
То есть там может быть номер вида "8-(911)-506 56" - я об этом.
#611 #610297
>>610294

>Так там точно так же и "-" может идти, как быть в этом случае?


Для этого есть [] только не забудь про экранирование, особенно тире, которое внутри квадратных скобок, если её не экранировать, будет означать символьный класс.
#612 #610298
>>610292
Слеш не в ту сторону.

>>610293
Это простая задача, нечего здесь помогать. Прочитай еще раз теорию, пятый, десятый если нужно.
Программирование это умение думать логически (и изредка абстрактно).
Ты должен грамотно сформулировать условие задачи, это уже половина решения.
С этим номером телефона следующая ситуация:
8-(911)-506 56 56
Сначала идет либо цифра 8, либо +7. Если ты читал теорию, то ты знаешь, что в регулярных выражениях есть оператор "или". И оп выше в треде тебе его писал.
Дальше дефис, он может быть, а может не быть. В регулярных выражениях есть оператор "символ слева может быть один раз либо 0". Если ты читал теорию...
Дальше скобка открывающая может быть, может не быть.
Дальше ровно три цифры. Если ты читал теорию, ты знаешь, как указать количество подряд идущих символов.
Затем скобка закрывающая может быть, может не быть.
Затем дефис может быть, может не быть. Затем 7 цифр, между которыми могут быть пробелы, а могут не быть.
#613 #610299
>>610297
Ещё немного прояснело, спасибо.
Минус я вообще не экранировал, вот лалка.
#614 #610300
>>610298
Хорошо, спасибо.
Я просто запутался и стал думать, что нужно отслеживать ввод скобок в любом месте номера.
Также всё равно туплю с дефисами и пробелами - ведь они могут быть в любом месте основного номера.
Но тут уже буду разбираться сейчас.
У меня гипертестируемость уже.
Я смотрю, многие делают задачи и даже не парятся, работает или не работает правильно.
#615 #610312
>>610297
Необязательно. Если расположить дефис в начале или конце, то он будет воспринят как есть. [-az] либо a, либо -, либо z.
Круглые скобки внутри квадратных тоже не нужно экранировать.
#616 #610313
>>610312
Когда я сомневаюсь, нужно ли что-то экранировать, я это экранирую. Так надежнее и вреда никакого.
#617 #610314
>>610313
Я когда сомневаюсь, смотрю документацию. Но это дело вкуса конечно.
35 Кб, 734x590
41 Кб, 500x470
#618 #610324
сап, в пыхе недавно, пишу первые скрипты
решил побыстрому написать краулер, пилю второй день, такова прохладная:


всплыла хуева туча подводных
ссылки оказалось могут быть типа
#
..
/sasay
sasay
http://sasay


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

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

притом стараюсь код комментировать (отбивать tabami/пробелами не пошло чет, notapad и так подсвечивает где закрывается }

нуна функции юзать или как?
или это просто скрипт сам пос ебе трудоемкий?
cлава аллаху вроде как пашет :)

вопрос в нагрузку (внимание возможно выйти из стоя):

есть массив со ссылками
паршу по ним ссылки

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



зы: обезьяна ебучая, стремная капча из 80х опять
35 Кб, 734x590
41 Кб, 500x470
#618 #610324
сап, в пыхе недавно, пишу первые скрипты
решил побыстрому написать краулер, пилю второй день, такова прохладная:


всплыла хуева туча подводных
ссылки оказалось могут быть типа
#
..
/sasay
sasay
http://sasay


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

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

притом стараюсь код комментировать (отбивать tabami/пробелами не пошло чет, notapad и так подсвечивает где закрывается }

нуна функции юзать или как?
или это просто скрипт сам пос ебе трудоемкий?
cлава аллаху вроде как пашет :)

вопрос в нагрузку (внимание возможно выйти из стоя):

есть массив со ссылками
паршу по ним ссылки

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



зы: обезьяна ебучая, стремная капча из 80х опять
#620 #610330
>>610324
Нет времени объяснять, просто найди готовую библиотеку.
#621 #610331
Забавно, ОП оперативно добавляет подсказки в свои пасты после моих тупых вопросов.
320 Кб, 444x472
#622 #610351
>>610330

> найди готовую библиотеку



библиотека === готовый скрипт (если по простому), верно?

них не нашел, какие то отрывочные вскукареки на ТОСТЕРЕ и ХАБРА_ОБЩЕСТВЕ_ГОМОСЕКОВ из гугла - результата не дали

>Нет времени



постарайся уж пояснить мань, больше мне обсудить всю эту малафью нескем
#623 #610352
Пишу к примеру парсер, парсер загружает определённые данные в базу данных, как сделать так, чтобы парсер самостоятельно обновлялся раз в 24 часа, то есть обновлял информацию в базе данных, полученную с другого сайта.
40 Кб, 986x349
#624 #610353
>>610351 вот кошак тоже говорит, что сложная хуйня мол, азаза
попробую патом толкнуть его за доширак, каким-нить лалкам-сеошникам))
#625 #610355
>>610324
Это не скрипт трудоёмкий, это ты переменные называешь как 15л етний мудак.
#626 #610357
>>610324
Например https://packagist.org/packages/symfony/dom-crawler
>>610352
Чтобы скрипт исполнялся по расписанию, используй cron (не знаю, есть ли версии для винды).
#627 #610359
Тут есть те кто зарабатывает фрилансом? Как побороть страх перед фрилансом и попробовать побороться за заказ? Смотрю проекты здесь https://www.weblancer.net некоторые мне по силам, но стрёмаюсь что на самом деле всё окажется не так как кажется сейчас и возникнет много подводных камней. Может быть кому то нужен помощник? Вы будете давать мне лёгкие заказы на которые лень тратить время?
#628 #610361
>>610352
a) планировщик cron
б) функция sleep в бесконечном цикле
https://secure.php.net/manual/ru/function.sleep.php

ньюфаг пишуший краулер
#629 #610363
Можно ли в вёрстке использовать отрицательные паддинги и маржины, это не является нарушением каких-нибудь правил?
#630 #610364
>>610361

>б) функция sleep в бесконечном цикле


По моему извращение какое-то. Всё-таки пхп это не жаваскрипт.
#631 #610366
>>610361
Что вообще делает твой краулер?
1612 Кб, 1280x1024
#632 #610372
>>610366

бегает по ссылкам из массива START

1) сохраняет внешние
2) по внутренним переходит и сохраняет с них внешние

нужно чтобы по внешним ссылкам переходил и делал шаг 1) 2) и так дрючился себе

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

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

нужно это например, челу из web который просил парсер мыл с германских сайтов (подключив крайлер он мог бы очень нехуевинько расширить базу таргетов для парсинга, за пару кликов)
82 Кб, 800x500
#633 #610385
Фух, ребята, разобрался с регулярками, спасибо за помощь!
Увидевшие эту регулярку сойдут с YMA: http://ideone.com/2vUD2N
Все номера из пасты ОПа рассматривает правильно.
Дошло только тогда, когда стал каждый шаг в создании регулярки проверять, такой вот тугодум.
#634 #610397
>>610385
Не нужно брать каждый символ в квадратные скобки.
Квадратные скобки (символьный класс) - это список символов, которые могут находиться на данной позиции.
/4[5c8#y]9/ означает "сначала должна идти 4, на второй позиции один любой символ из перечня 5с8#y, третьим символом должна быть девятка".

Регулярка длинная и нечитабельная из-за копипасты.
Повторяющиеся куски можно нужно заменить на (повторяющийся набор символов){кол-во повторов}.

Смотри, после кода страны и города идут 7 цифр, между которыми могут быть скобки, дефисы или пробелы.
Опиши одну такую комбинацию, а потом просто укажи, что она повторяется 7 раз.
("дефис от 0 до 1 раза", "открывающая скобка от 0 до 1 раза", "закрывающая скобка от 0 до 1 раза", "цифра 1 раз"){7}
#635 #610398
http://ideone.com/w3QKYo Начал решать задачку про палиндром не посмотрев что предложил ОП, получилось через while.
Что-то внутри меня бунтует против объявления переменных без указания типа данных и пока кажется странным синтаксис языка.
56 Кб, 225x220
#636 #610399
>>610385
Вот в таком выражении:

>{1}


нет никакого смысла. Выражение ищется ровно один раз по умолчанию что с этим квантификатором, что без него. И не нужно городить вот такие регулярки:
[abc]\\)?[abc]\\)?[abc]\\)?
Когда можно обернуть повторяющийся код в скобки и поставить после него квантификатор:
([abc]\\)?){3}
#637 #610440
>>610282

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

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

> Как вообще указать в регулярке, что символ должен находиться в любом месте текста?



Никак. Но ты можешь сделать конструкцию такого вида:

AX?B

Это значит символ A, за ним может идти один символ X, а может не идти, за ним символ B. Таким образом эта регулярка найдет текст AB и AXB.

> '/^8|\\+7((\\d{10}-\\(\\)\\s)?$/' - вот почему не работает это?


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

^8

или

\\+7((\\d{10}-\\(\\)\\s)?$

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

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

- +7
- за ней идет ошибочная конструкция, так как в ней 2 открывающих скобки и только одна закрывающая. Если мы уберем лишнюю скобку, получится:

\\+7(\\d{10}-\\(\\)\\s)?$

Выражение в скобках \\d{10}-\\(\\)\\s ищет такую последовательность символов:

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

Но после скобок стоит знак вопроса - значит их содержимое может быть, а может не быть в тексте. Поулчается все выражение \\+7(\\d{10}-\\(\\)\\s)?$ ищет либо:

+7 в конце строки
+7, за ней 10 цифр, за ними минус, скобки, пробел и конец строки

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

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

- начало строки, далее 8 или +7, за ними ровно 10 цифр, за ними конец строки

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

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

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

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

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

И не проси готовых ответов, так ты ничему не научишься.
#637 #610440
>>610282

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

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

> Как вообще указать в регулярке, что символ должен находиться в любом месте текста?



Никак. Но ты можешь сделать конструкцию такого вида:

AX?B

Это значит символ A, за ним может идти один символ X, а может не идти, за ним символ B. Таким образом эта регулярка найдет текст AB и AXB.

> '/^8|\\+7((\\d{10}-\\(\\)\\s)?$/' - вот почему не работает это?


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

^8

или

\\+7((\\d{10}-\\(\\)\\s)?$

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

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

- +7
- за ней идет ошибочная конструкция, так как в ней 2 открывающих скобки и только одна закрывающая. Если мы уберем лишнюю скобку, получится:

\\+7(\\d{10}-\\(\\)\\s)?$

Выражение в скобках \\d{10}-\\(\\)\\s ищет такую последовательность символов:

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

Но после скобок стоит знак вопроса - значит их содержимое может быть, а может не быть в тексте. Поулчается все выражение \\+7(\\d{10}-\\(\\)\\s)?$ ищет либо:

+7 в конце строки
+7, за ней 10 цифр, за ними минус, скобки, пробел и конец строки

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

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

- начало строки, далее 8 или +7, за ними ровно 10 цифр, за ними конец строки

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

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

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

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

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

И не проси готовых ответов, так ты ничему не научишься.
#638 #610454
>>610291

> В чем смысл подобной "оптимизации"?


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

> Разве нельзя было взять в переменную, а потом у этого объекта вызвать метод?


Можно

>>610313

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

\ ^ [ ] -

>>610324

Не надо парсить DOM регулярками, используй DOM + XPath или библиоткуи вроде phpQuery

не надо писать код работы с курлом напрямую, используй какую-нибудь библиотеку-HTTP клиент

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

Называй переменные нормально

делай проверку вызовов функций на ошибки.

Вместо fopen/fwrite/fclose есть file_put_contents

Тебе бы надо сам язык подучить сначала, потому что иначе выходит плохо читаемый код с ошибками. ты читал мануал по curl_exec?
#638 #610454
>>610291

> В чем смысл подобной "оптимизации"?


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

> Разве нельзя было взять в переменную, а потом у этого объекта вызвать метод?


Можно

>>610313

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

\ ^ [ ] -

>>610324

Не надо парсить DOM регулярками, используй DOM + XPath или библиоткуи вроде phpQuery

не надо писать код работы с курлом напрямую, используй какую-нибудь библиотеку-HTTP клиент

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

Называй переменные нормально

делай проверку вызовов функций на ошибки.

Вместо fopen/fwrite/fclose есть file_put_contents

Тебе бы надо сам язык подучить сначала, потому что иначе выходит плохо читаемый код с ошибками. ты читал мануал по curl_exec?
3568 Кб, Webm
#639 #610463

>>>610372



братишки, поч так?
https://ideone.com/weWPtu

нуна добавлять в конец массива значения (изнутри этого массива), так нельзя?
#640 #610464
>>610463
Что за one two? Ты про строчные значения не слышал?
#641 #610468
>>610331

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

>>610363

Отрицательных паддингов не бывает.

Отрицательные маргины - можно. А зачем они тебе понадобились? Они точно нужны или ты хочешь сделать костыль потому что не понимаешь как работает CSS? Если второе, советую порешать наши задачки на HTML/CSS из ОП поста, они может помогут разобраться.

>>610372

Спамер? катись-ка в /wrk отсюда. Если кто-то рассылает спам значит он продает никому не нужную ерунду которую кроме него берут из того же источника и продают еще 50 человек и спам ему вряд ли поможет.

Справедливости ради, кроме нелегальных спамеров есть еще и так называемые легальные - например фейсбук, твиттер. Они рассылают бессмысленные уведомления («знакомы ли вы с ололошем ололошевым?» или «почитайте этих интересных блогеров из госдепа») ради того чтобы люди кликали по ним, переходили на сайт и накручивали посещаемость (больше просмотров = больше денег от рекламы).

Вторые ничем не лучше первых. Вообще, это интересно как «белые» компании перенимают «черные» методы. Аналогично некоторые «белые» программы от яндекса или мейл ру используют почти «черные» методы распространения, в довесок к какой-нибудь программе.
#642 #610470
>>610440
Спасибо, ОП, я как раз шёл по предложенному тобой сейчас алгоритму: постепенно и посимвольно проверял работу разных конструкций в регулярном выражении. Думаю, стоило бы этот алгоритм и в урок добавить - направление для обучения регуляркам.
>>610397
Спасибо, уясню это и чуть позже попробую сократить, теперь это уже всё понятно.
>>610399
Да, это осталось, забыл поменять на [\\d{3}]?
Про повторяющийся в регулярке код теперь знаю, спасибо.
#643 #610474
>>610464

упрощенный вариант - для теста
вместо one, two будут строки
#644 #610478
>>610474
Ну так в чем вопрос был? Посмотри дамп массива и увидишь, что всё добавилось.
#645 #610481
>>610385

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

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

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

Ну например выражение

ABCABCABC

можно заменить на

(ABC){3}

{3} значит выражение в круглых скобках повторяется 3 раза.

Далее:

- [\\s]? - это то же самое что \\s?, квадратные скобки нужны когда мы хотим написать «один из указанных символов», а у тебя всего 1 символ и есть

- [\\s]?[\\-]?[\\s]?[\\(]? - тут квадратные скобки лишние, это равноильно \\s?-?\\s?\\(?. Но и так слишком длинно. Попробуй заменить это на такое выражение:

«любое число пробелов, скобок, минусов в любом порядке»

[0-9]{1} - то же самое что [0-9], писать еще {1} никакого смысла нет.
#645 #610481
>>610385

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

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

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

Ну например выражение

ABCABCABC

можно заменить на

(ABC){3}

{3} значит выражение в круглых скобках повторяется 3 раза.

Далее:

- [\\s]? - это то же самое что \\s?, квадратные скобки нужны когда мы хотим написать «один из указанных символов», а у тебя всего 1 символ и есть

- [\\s]?[\\-]?[\\s]?[\\(]? - тут квадратные скобки лишние, это равноильно \\s?-?\\s?\\(?. Но и так слишком длинно. Попробуй заменить это на такое выражение:

«любое число пробелов, скобок, минусов в любом порядке»

[0-9]{1} - то же самое что [0-9], писать еще {1} никакого смысла нет.
#646 #610486
>>610470

> забыл поменять на [\\d{3}]?


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

[\\d{3}]

значит «одна любая цифра или одна любая фигурная скобка»
#647 #610487
Куда посты пропадают? Я даже тред не обновлял
#648 #610489
>>610470

Да, урок по регуляркам надо переделывать.
41 Кб, 485x604
#649 #610491
>>610468

неа

>Если кто-то рассылает спам значит он продает никому не нужную ерунду



смотрите, кажется очередной маня-мирок лопается :)

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

интернет магазин по продаже трав уведомляет что готов продавать травы производителей

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

взаимовыручка, всем хорошо
#650 #610497
>>610491

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

А когда ты шлешь шаблонное сообщение на все мыла без разбора - это спам.

Алсо статья по теме с точки зрения того кто этот спам получает: http://habrahabr.ru/company/mosigra/blog/272287/
#651 #610498
>>610491

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



Ох лол, какое уникальное предложение. Интуиция подсказывает мне что есть еще 20 точно таких же магазинов которые перепродают товар одного и того же производителя. Раз они взялись за спам, значит не очень-то нужны их услуги. Потому что если бы они были нужны их бы находили через гугл или может контекст.
944 Кб, Webm
#652 #610499
>>610478
в foreach только 1 значение выводится
stout посмотри
https://ideone.com/weWPtu


а должно быть 2, в массив же добавили значение в конец, а форич его не выводит

задача: все как в примере - добавлять значения в массив (изнутри массива)
#653 #610503
>>610486
Ох щи, точно!
Надо ставить \\d{3}, спасибо снова.
>>610489
Я все примеры работы выражений переносил в IDE, смотрел, как работают скрипты. Однако на проверке номера застрял. Совет с поэтапной проверкой меня бы убыстрил, я уверен.
#654 #610506
>>610499
https://ideone.com/L7cKDc Всё добавляется. То, что у тебя foreach Не выводит добавленное значение, то так и должно быть, ведь на момент запуска цикла там было лишь одно значение.
#655 #610507
>>610499
Что там за ересь? Чего квадратные скобки там делают в имени массива?
#657 #610510
Кстати, есть определенный момент когда компания переходит на темную сторону. Рано или поздно рост пользовательской базы замедляется, и начинается пора монетизации этой базы. Есть время сажать зерна и есть время собирать урожай.

Я был зарегистрирован на хабре и много лет они не рассылали никакого спама. Но в определенный момент, они выросли и начали нанимать (видимо) менеджеров по развитию. Что делает такой менеджер первым делом? Правильно, начинает рассылать спам. Это самый простой способ накрутить посещаемость и создать видимость полезности своей работы. Да и ничего другого они все равно ничего не умеют.

Хабр начал рассылать спам под видом писем «смотрите какие интересные статьи вышли на этой неделе». Вы что, дауны? Если бы я хотел почитать ваши статьи, я бы зашел и почитал.

Это именно спам, как не смотри. Они рассылают мне то, что я никогда не просил мне присылать. Почему их не вносят в черные списки?

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

Также хорошо бы переделать почтовый протокол - чтобы всякие организации не могли делать рассылки без предварительного согласия пользователя.
#658 #610514
>>610498

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

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

и вручную это накладно/не возможно

>>610498

ну охуеть теперь)
ты мимо пхп-макака проспамся по 500к организациям, посмотрим станеш нужен или нет (скорее всего да)
споры уровня б

>>610507
просто иди нахуй)

>>610506
все верно, я сразу делал var_dump()

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

>ведь на момент запуска цикла



ну поидее массив по порядку перебирает и во время выполнения в конец добавляются значения, по логике должен их тоже обработать
#659 #610519
>>610514
Ну так используй обычный цикл for и внутри после добавления элемента уменьшай счетчик на 1. Правда этот метод не подходит для ассоциативных массивов.
#660 #610524
Почему мои посты про мокрую писечку пропадают? Фу, пидоры.
#661 #610526
>>610514

Ты же школьник судя по посту. Что ты забыл в нашем треде? Уходи в /wrk. Это тред про прграммирование, а не про рассылку спама.
#662 #610532
>>610514
научи спамить. как кнопки автоматом тыкать? вроде есть какое-то приложение в браузере?
#663 #610533
>>610514

> у тебя есть интерент магазин и нет бюджета


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

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

Например я покупаю товары в интернет-магазинах и я нахожу их без всякого спама. Просто они предлагают более удобные и выгодные условия, чем их конкуренты.
#664 #610542
писечка то у меня все еще мокрая)
38 Кб, 549x604
#665 #610544
>>610526
да похуй мне на эти рассылки. хз почему у тебя так бомбит срака.. просто краулер пишу (а про емейлы написал - как пример использования краулера на практике)

можно не емейлы, а данные какие-то типо отзывов парсить или создать свою поисковую систему например

>>610532

нах тебе спамить? я новичок, но чем могу помогу конечно

temper data в лисе, запускаеш - заполняеш форму - перехватыеш (смотриш какие переменные нужно заполнить)

посылаеш на ссылку которая в action пост/гет запрос с заполненными переменными они же поля и кнопка сама щелкается
#666 #610545
>>610542

спотела чутка, откуда инфа? O_o
#667 #610552
>>610507
сори что написал иди нахуй, прост показалось что ты агришся

так можно добавлять значения в массив (они добавятся в конец) - в специалисте показывал учитель эту фишечку
#668 #610553
Посоны подскажите как правильно.
Написал небольшой скрипт который работает со сторонним api. Посылается запрос с id объекта, в ответе - информация об этом объекте. Один запрос - один ответ с информацией об одном объекте. Так вот, нужно иметь возможность получать информацию о нескольких десятках\сотнях объектах за раз.
Через jqeruy я сделал последовательный перебор по массиву с id, где рекурсивно вызывается функция которая запускает через ajax скрипт который по переданному id получает инфу об объекте через апи. При успешном выполнении ajax снова вызывается эта функция, но уже со след id в массиве, пока они не закончатся. В принципе, все работает. Но меня терзают смутные сомнения, что это немного не правильно, выполнять это на стороне клиента(через ajax). Верно? Или лучше выполнять все на стороне сервера? И как это делается? Насколько я понимаю нужно как-то разбивать скрипт на отдельные подскрипты, ведь на хостинге время выполнения одного скрипта обычно ограниченно минутой-две, а задержки при запросах и при большом количестве объектов вообще могут занимать очень много времени. Как вообще решаются такие задачи на стороне сервера?
168 Кб, 858x1280
#669 #610579
>>610519

вот этому мудрецу чая,
через for рили работает

https://ideone.com/weWPtu

а анти-спам кун, лучше прячся под шконку, найду и заспамлю нах, бу!
#670 #610580
>>610519
fix
увеличивай счетчик ток ты имел ввиду
#671 #610583
Вот интересная статья: https://m.roem.ru/23-12-2015/215749/putin-and-runet/

В общем то многое из написанного адекватно, но вот это...

> Н.Касперская:


> ....


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



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

Как с этим бороться? Есть только один способ. Надо создавать отечественные сервисы, и избегать использования американских технологий вроде cloudflare, adsense или google analytics. Ну к примеру, вконтакте - при его использовании NSA остается с носом (хотя раньше там по моему стояли иностранные системы аналитики, но я уже плохо помню. сейчас вроде нет).
125 Кб, 1500x1000
#672 #610590
Так как PHP язык web'a спрошу тут.
Анон, посоветуй где почитать про CSS. Хочу научиться верстать.

Т.е. когда я пишу какой-то html, потом описываю какой то css, блоки уезжают не туда куда я хочу. Начинаю тыкать всякие float:left и тд.

Что почитать, чтобы знать что вот этот блок мне нужно сюда, значит я должен написать вот это и тд.
СПС.
#674 #610599
>>610590
Поддвачну вопрос. Но больше интересуют всякие мастерские трюки и методы хорошей верстки. Быдловерсткой владею достаточно уверенно, могу даже сверстать с макета, но времени уходит довольно много, и порой приходится использовать какие-то костыли. Короче, хочется поднять свой уровен.
#675 #610600
>>610510

>«никогда не показывать письма от этого получателя».


Вроде на Яндекс.Почте такое появилось недавно. Плюс тупо можно отписаться от новостей и оповещений сайта.
#676 #610602
>>610597

>htmlbook.ru,


Ой, бля. Задрачив азбуку до дыр ты нихуя не станешь образованным интеллектуалом.
#677 #610605
>>610583
бот?

>>610590
https://2ch.pm/wrk/res/415040.html (М)
конкретно тут https://htmlacademy.ru
прям за пару дней врубишся
#678 #610607
Спасибо, аноны. Пойду разбираться.

610590-кун
#679 #610609
Видали, какие сайты красивые на всяких виксах? С разными шаблонами, возможностью добавлять всякие апп, гугл карты, делать магазин и прочее. Вебмакаки не нужны, наступил век конструкторов.
#680 #610613
>>609669
https://github.com/someApprentice/Students/

https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L38-L39
Это правильно?

>>607098

>$someMapper = new SomeMapper($pdo);


У тебя было написано, что TableDataGateway что-то напоминающие DataMapper, значит ли это что в него можно также передавать параметр $pdo?
И еще: Его обязательно создавать сразу после настроек автозагрузки?

Мне так стыдно за свою наглость. Я просто хотел побыстрей выучить php
#681 #610615
>>610609
То-то я смотрю, на срилансе количество заказов вроде перенести сайт со сранного викса на вордпресс становится все больше и больше.
#682 #610629
>>610553

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



чтобы выключить лимит времени
в шапку
set_time_limit(0);
#683 #610631
>>610629
Это не костыль?
То есть как понимаю, других вариантов нет?
#684 #610642
>>610609

А конструкторы кто пишет и поддерживает?
#685 #610650
Как пользоваться этим плагином для композера?
https://github.com/francoispluchino/composer-asset-plugin
Вроде позволяет загружать фронтенд-пакеты типа jquery или bootstrap через композер.
Но не понятно как ими пользоваться, они же попа дают в папку vendor. Может у композера появляется еще какая-то команда для "публикации" этих ассетов?
#686 #610656
>>610613

Нет, все неправильно.

> https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L4


> extends TableDataGateWay {


Gateway, а не GateWay - будь внимательнее. На линуксе имена файлов чувствительны к регистру и твой код не заработает.

> protected $student;


>\tprotected $hash;


>\tprotected $salt;


>\tprotected $token;


зачем в классе для работы с БД эти свойства? Что они должны хранить?

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

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

> \tprotected $errors = array();


зачем это тут?

> public function __construct($student, $hash, $salt, $token) {


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

> https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L37


> public function getPdo() {


Это неправильно. PDO это зависимость класса StudebntGateway.

Во-первых, почему класс TDG сам пытается создавать свои зависимости, а не получает их например через конструктор? Перечитай ка урок про DI: https://gist.github.com/codedokode/e1d31a31b37d5f635057

Во-вторых, файл init.php нельзя подключать второй раз. Это же инициализация, она делается только один раз в самом начале.

Также, ты читал урок про паттерны работы с БД? Там есть пример реализации класса Gateway: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md#table-data-gateway

Сравни пример со своим кодом.

> И еще: Его обязательно создавать сразу после настроек автозагрузки?


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

Ну и я не вижу никакой наглости, просто надо понимать что у меня сейчас очень много дел и я могу не успеть ответить. И соответственно задать вопросы ты всегда можешь, но гарантий что на него сразу ответят, нет. Потому организуй свою работу так, чтобы не зависеть от этого. В реальной работе программиста такое часто бывает, что например старший разработчик занят или уехал, и не может оперативно ответить на вопрос.
#686 #610656
>>610613

Нет, все неправильно.

> https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L4


> extends TableDataGateWay {


Gateway, а не GateWay - будь внимательнее. На линуксе имена файлов чувствительны к регистру и твой код не заработает.

> protected $student;


>\tprotected $hash;


>\tprotected $salt;


>\tprotected $token;


зачем в классе для работы с БД эти свойства? Что они должны хранить?

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

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

> \tprotected $errors = array();


зачем это тут?

> public function __construct($student, $hash, $salt, $token) {


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

> https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L37


> public function getPdo() {


Это неправильно. PDO это зависимость класса StudebntGateway.

Во-первых, почему класс TDG сам пытается создавать свои зависимости, а не получает их например через конструктор? Перечитай ка урок про DI: https://gist.github.com/codedokode/e1d31a31b37d5f635057

Во-вторых, файл init.php нельзя подключать второй раз. Это же инициализация, она делается только один раз в самом начале.

Также, ты читал урок про паттерны работы с БД? Там есть пример реализации класса Gateway: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md#table-data-gateway

Сравни пример со своим кодом.

> И еще: Его обязательно создавать сразу после настроек автозагрузки?


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

Ну и я не вижу никакой наглости, просто надо понимать что у меня сейчас очень много дел и я могу не успеть ответить. И соответственно задать вопросы ты всегда можешь, но гарантий что на него сразу ответят, нет. Потому организуй свою работу так, чтобы не зависеть от этого. В реальной работе программиста такое часто бывает, что например старший разработчик занят или уехал, и не может оперативно ответить на вопрос.
#687 #610660
>>610650

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

Обычно для этого используют gnunt, gulp (новее). Я всегда использовал самописные bash скрипты, по моему они лучшеи удобнее, а у описанных выше инструментов неадекватный способ конфигурирования, но популярен именно gulp.

В том же Юи есть вроде assets которые позволяют «опубликовать» файлы из непубличных папок.
27 Кб, 990x223
#688 #610662
>>610359
такая-то корзинка)
поясните кто работает за расценки
20$ норм за пикрелейт?

>>610631
неа, прост убирает лимит
7 Кб, 553x232
#689 #610663
мне кажется или кнопка на пол-пикселя меньше инпута? как это убрать?
#690 #610665
>>610615
это вообще возможно?
#691 #610666
>>610642
оп сказал, что на написание конструктора у одного разраба уйдет вся жизнь.
47 Кб, 630x356
#692 #610669
>>610663

>как это убрать?

#693 #610670
>>610660
О боже, нужно ведь всего лишь скопировать несколько файлов из закрытой директории в публичную, даже тут столько мороки.

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

Ну офигеть теперь.
#694 #610671
>>610663

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

>>610666

Не вся жизнь, но полгода например может уйти.
#695 #610673
>>610670

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

А! Вспомнил. В композере есть хуки. Ты можешь назначить вызов php скрипта после любой установки или обновления пакетов. Соответственно можешь попробовать на коленке слепить скрипт публикации файлов.

https://getcomposer.org/doc/articles/scripts.md

Какие-то настройки, связанные с тем куда и что копировать, можно засунуть в сам composer.json
#696 #610679
>>610665
Так не идентичную же копию сделать, а просто сделать похожий сайт. Хотя я еще ни одного нормального сайта сделанного на том же виксе менеджером васяном не видел. Все они выглядят как говно, которые раньше клепали школьники на юкозе.
#697 #610681
>>610673
Чё ты обзываешься, питер пен бесхвостый?
Надо будет, разберусь и в грунтах, и в исходных кодах линукса.
Только мне почему-то кажется неадекватным усложением для решения задачи копирования файлика из одной папки в другую пользоваться двумя менеджерами пакетов и самописными говноскриптами.
65 Кб, 993x690
#698 #610686
15$ за 2 дня, норм
#699 #610687
>>610686

>15$ за 2 дня, норм


Я бы лучше грузчиком пошел.
#700 #610693
>>610687

ему норм
#701 #610698
>>610686

Если у тебя есть готовые скрипты, надо только чуть подправить конфиг. Час-два работы.
#702 #610699
>>610686
я не понял тз(((
что значит "выкачивать материалы каталогов", да еще в формате экселя?
#703 #610701
Всем суток времени доброго. Есть мленький опыт в Си и Обжектив-Си, работал чуть-чуть с ООП. Насколько перспективно начинать сейчас заниматься вебом, а именно php (с упором в php нежели фулстэк)?
#704 #610702
>>610699

парсер с сохранением какой-то там структуры, и шоб в excel нах, 15$

гей-шлюха-кун уссыкается от смеха наверное
#705 #610705
>>610698
Ха. Это верно практически для любой задачи.
Если бы было так все просто, то я бы уже давно стал миллионером нихуя при этом не делая.
#706 #610709
>>610705

Ты просто не хочешь ничего делать. Чтобы зарабатывать на этом рынке надо быть умнее и гибче других. Либо брать и выполнять сотнями такие заказы (100 × 15 = $1500, а ведь это предварительная цена), либо собирать и перепродавать их за меньшие деньги.

Либо учись и занимайся чем-нибудь поинтеллектуальнее.
#707 #610711
>>610702

Зато от парсинга попа не болит.
#708 #610712
>>610701
Да, похуй вообще. Маленький опыт - значит никакого опыта. Просто начинай ебашить, если не бросишь, то работу всегда найдешь.
#709 #610721
>>610709
Так я и не про себя писал. С заказами проблем нет, но из-за ебучей лени не получается нормально работать . Просто имел в виду, что это самое дно, таким заниматься. В начале еще можно, но потом. А свою ахуительную арифметику 100 × 15 = $1500 оставь наивным новичкам мечтающим начать зарабатывать в интернете. Я уж и не говорю про то, что в 90% таких "проектах" заказчики конченные долбоебы-перекупы, и с которых кроме геморроя нихуя не заработаешь.
мимо-макак-срилансер
#710 #610722
>>610702
а, кажется понял: типа на сайте конкурентов выложены в табличном виде каталоги их продукции
и этот чел хочет чтобы кто-то извлек это дело и схоронил в ексель.
это в общем-то действительно не сложно, и тот очкозавр указал 2 дня специально с запасом, явно можно сделат быстрее

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

занавес
#711 #610723
>>610721
расскажи где фрилансиш
чо делаеш конкретно, как по баблу
#712 #610724
>>610722

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

>>610721

Да, в общем-то скрейпинг это дно фриланса. Хотя у меня конечно есть задумка брать такие заказы на западе и перепродавать тут, как ты думаешь, получится?
#713 #610725
https://github.com/V3N0m21/Uppu4
ОП, решил я переписать свой файлообменник сначала и убрать все лишнее\переписать все что мне кажется кривым. Комменты пока не переписал, нужно свежим взглядом все просмотреть, потому что у меня там походу знатные велосипеды понаписаны.
Интересует правильно ли я организовал работу с UserHelper'ом, он у меня взял на себя также взял функции LoginHelper'а - это правильно, или это нарушение правила single responsibility?

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

Из того что пока вижу надо доделать автентификацию при удалении файлов и пользователей с комментариями, и возможно доделать валидацию
57 Кб, 720x717
#714 #610727
>>610722
у меня срака бомбанет от такого (уже бомбит)

надеюсь возьмут куда-нить на постоянку или запилю ёба -проекты свои
#715 #610743
>>610712
Маленький опыт я приплёл к тому, чтобы показать что мне не надо проходить ньюфаг учебник из шапки (может задания потягать от туда и не более, синтаксис и на пхп.нет могу выучить).
#716 #610745
>>610722
Ох, лол как же мне это знакомо. Только я обычно не довожу дело до сделки с незнакомыми мне людьми, и отзыв они поставить не могут.
#717 #610760
>>610723
Сейчас в основном работаю со старыми заказчиками, которых наработал во время фриланса.
Но это для меня скорее хобби, чем заработок денег. Но заработать можно, только бы не ленится бля.
#718 #610810
>>610481
Вот сократил с учётом рекомендаций: http://ideone.com/wzPQ7W

>Но и так слишком длинно. Попробуй заменить это на такое выражение:


>«любое число пробелов, скобок, минусов в любом порядке»


Я вдоль и поперёк прочитал страницу с уроком по регулярным выражениям, но ничего там не нашёл специфического, чтобы можно было именно таким выражением посчитать.
Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?
Но никак не продумаю сокращение. Там должен \\s быть с обеих сторон от символов скобок и минуса, затем должна идти цифра.
Пробую так сделать - не работает: (\\s?(\\)?|\\-?|\\)?|\\(?)\\s?[0-9]){7}.
Суть этой конструкции: символ пробела может быть, а может и не быть, дальше могут быть или не быть или ), или (, или -, затем опять символ пробела может быть или не быть, а затем идёт цифра. Что здесь-то у меня не так?
#719 #610821
>>610686
бля ну и рожа, я бы с ним и ссать рядом не сел.
гейшлюха-кун
#720 #610824
>>610709
Просто скажи мне. ладно еще контент спарсить file_get_content, но со структурой и как это в ехел конвертировать??? Ща опустим цену в 15 баксов. Допустим это будет стоить 3000 штуки баксов и срок месяца три - я бы еще мог не полениться и что-то там погуглить.
#721 #610826
>>610722
явно не в ручную сохранять, а именно прога, которая берет, парсит и сама сохраняет.
#722 #610832
>>609987

>Из тех кто работает хоть где-то только пара говночистов битрикса и вордпресса.


Нет ты.

>>609985
картинка_с_лебедевым.жпг
#723 #610848
Вы во что тред превратили, ироды? Так лампово тут было ещё месяца два назад. А теперь сплошной флуд.
#724 #610850
Как в вордпрессе сделать, чтобы оранжевое подчеркивание было по нижней границе меню? в хтмл меню залезть не могу, палочки между списком должны быть короткими.

top-menu ul {
margin-top:20px;
margin-bottom:20px;
}
.top-menu li {
\tdisplay: inline-block;
\tpadding: 0px 20px;
\tlist-style-position: inside;
\tfont: 10px NexaLight;
}
.top-menu li:not(:last-child) {
border-right:1px solid #767676;
}
.top-menu li.current_page_item {
\tborder-bottom:1px solid red;

}
1 Кб, 373x81
#725 #610851
#726 #610854
>>610848
хочешь поговорить о стимуляции дырочек? :3
#727 #610856
>>610662
Что значит не писались ссылки?
#728 #610859
>>610856

на сайте появляются левые ссылки (evil код)
задача - найти его и удалить
#729 #610860
Что вообще надо больше уметь на фрилансе? Уметь натягивать вёрстку на вордпресс и верстать? Или же писать более менее сложные скрипты, вроде парсеров и т.д.?
#730 #610862
>>610859
А как это делать? Находишь ссылку на странице, залазишь в базу данных, проверяешь нет ли там такой ссылки, если нет, то удаляешь?
#731 #610890
>>610862

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

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

>>610860

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

>>610850

А ты CSS знаешь? Мы не делаем за других их работу.
#732 #610892
>>610824

Я сомневаюсь что человеку которому лень погуглить, кто-то заплатит даже 200 долларов в месяц, не то что 1000.
608 Кб, 964x627
#733 #610916
>>610890
Я попробовал только что, раз уж они тут завели беседу о фрилансе.
Почти сразу наткнулся на задачу про калькулятор калорий и цен для какой-то пиццерии или закусочной. Прям как в твоем задании про гамбургеры.
Так что оказывается они довольно практичные (задобрил)

Как делается подобный пикрелейтед калькулятор?
Это оно аяксом при выборе из списка гоняет запрос на сервер, а потом джаваскриптом берет значения из формы и вычисляет результат?
А безопасно ли это? Ну вот допустим чувак выбирает фаршированную курицу, с сервера приходит какая-то цена, типа 100 рублей за 100 грамм. Куда сохранить это значение? Если куда-то в html, то хитрый юзер может взять и руками отредактировать html текущей страницы, вместо 100 рублей поставить 1 рубль и отправить заказ по такой цене.
Может в localstorage?
Кешировать ли результаты? Например юзер передумал и взял грудку индейки вместо куриной. А потом обратно куриную. Может сохранять куда-то все эти промежуточные результаты, чтобы не дергать сервер?
(я не собираюсь брать этот заказ, не стукай, мне просто интересно, в какую сторону копать, чтобы научиться такое делать)

У меня складывается впечатление что фриланс только для опытных разработчиков, без опыта там нечего ловить кроме заданий уровня наполнить контентом cms или поправить верстку. Лучше попробую устроиться в какую-нибудь скромную контору за еду и года за два прокачаться до нужного уровня, а там посмотрим.
#734 #610919
>>610890
Да, я цсс знаю, и это не работу, маня, это для партфалио. Не знаешь вордпресс, тогда нахуй иди.
#735 #610939
Кто может объяснить про IoC (Inversion of Control)
Курю сейчас уроки по Laravel и вот не могу понять каким магическим образом какой то класс видит что для конструктора другого класса нужен класс3 и потом где-то ищет его реализацию и создает объект и отправляет его в тот второй класс.

Как реализуется поиск этого всего?
#736 #611078
>>610553
Посоны, никто не знает что ли? Задача ведь достаточно распространенная.
#737 #611151
Чё так мертво в треде?
34 Кб, 484x497
#738 #611197
>>611151

у кого-нить был опыт использования multi-curl ?

я седня приуныл и нихуя не пишу
написавший-краулер-кун, пишите если нуна кому может будет, залью
#739 #611228
#740 #611235
>>611228
https://jsfiddle.net/b4zscb0s/1/ извиняюсь, вот вариант с нормальным форматированием.
#741 #611266
>>611151
Ща, погоди, начну к вам приставать с регулярками.

Итак, нужен скрипт для проверки на ошибки, вторая задача от ОПа на регулярки.

>нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия


>«жи» или «ши» написано с буквой ы


>в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»


>в тексте есть слова «а» или «но» без запятой перед ними.


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


Алгоритм такой. Составляем регулярное выражение, в котором ищутся следующие сочетания символов: "\\,[а-я]", "\\;[а-я]", "\\![а-я]", "\\?[а-я]", "\\:[а-я]", "(ж|ш(ы))", "(координально|сдесь|зделал|зделаю|зделан)", "\\,а", "\\,но". Далее с помощью функции preg_split и этого регулярного выражения находим в тексте все ошибки, засовываем разбитый ими текст в массив $errors. Далее в echo нам нужно вывести соседние элементы в массиве и между ними часть регулярного выражения, которая и разбила текст на эти вот фрагменты.
Правильный ли подход?
Ни черта не работает у меня. Наверное, потому что не могу логически и абстрактно мыслить, такие дела.
#742 #611272
>>611266

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


Нет более жалкого зрелища, чем жалеющий себя человек. Завязывай с этим, никто этого не любит.
#743 #611277
Ананасы, вопрос не совсем по теме. Будет собеседованию на позицию разработчика. Будут больше спрашивать по sql, но я там так себе секу. Может, кто-то подскажет, на каком уровне надо знать? Позиция стажера. Вангую ответа тиnа sql-ex
#744 #611280
>>611272
Хочешь, я тебя пожалею?
Это я подтрунивал над словами анона, который говорил выше, что для программирования надо логически и абстрактно мыслить. У меня тупо опыта нет, я с нуля это всё прохожу, впервые столкнулся с этим, какой там "мыслить абстрактно".
#745 #611281
>>611277

>Будут больше спрашивать по sql,


>но я там так себе секу


Ну ты провалишь собеседование. От нас то ты чего хочешь? Платиновый вопрос, как выучить язк программирование за сутки? Ну никак.
#746 #611284
>>611281
Нет. Есть какой-то универсальный вопрос? Ну типа, ебаните левосторонне соединения, используя подзапросы, а еще это все после того, как создадите cte
#747 #611292
>>611284
Опиши реализацию MVCC в InnoDB, например.
Перечисли правила ACID.
Использование EXPLAIN для анализа запросов.
#748 #611294
>>611292
Нормич ебанул. Но лады.
#749 #611301
Есть один странный вопрос. Допустим есть два блока css, расположенных в случайном порядке. Как от одного блока пустить линию к другому? Необязательно прямую.
#750 #611302
>>611266
http://ideone.com/hTlU2P - как вытащить соответствующую часть регулярки и поместить её в echo?
Я буду бампать до посинения или пока рак на горе не свистнет
#751 #611333
>>611280
http://php.net/manual/ru/function.preg-match-all.php Юзай эту функцию. Используй массив вхождений и подмаски.
#752 #611341
Посоны, элементарная задачка.
Скачать файл по удаленной ссылке на свой сервер, сохранить его под другим именем и вывести ссылку на этот файл уже на своем сервере.
#753 #611349
А написание виджетов и плагинов для вп дело не простое, как оказалось, там куча фукций и непонятно, как это все связано и связано с БД. Чувствую, года два еще на изучению этой темы уйдет.
#754 #611364
>>611349
Все верно, если хуй забивать не будешь через два года можешь стать гуру вордпересса. Или ты хотел все и сразу? Несмотря на кажущуюся простоту и низкий порог вхождения нормальный скил появится только со временем, чем ты будешь выгодно отличаться от 95 % аудитории русского сриланса, криворуких необучаемых уебков, которые ебашат свой криворукий код, по принципу "главное чтобы хоть как-то работало", даже не утруждая себя убрать свой же закомментированный мусор или элементарно отформатировать и причесать его. Если уж решил встать на эту скользкую дорожку, то с самого начала приучай себя все делать по канонам php и апи вордпресса. Даже если на это потребуется в несколько раз больше времени. Не будь уебком! А то реально заебало после вас, хуесосов, брать такие проекты.
#755 #611366
Сап, пхпач, с наступающим. Вопрос такой: нужно сделать редирект в случае захода на сайт с мобильного устройства на алиас (m.) домена (example.com). то-есть сайт один и тот же, нет двух отдельных сайтов с разными стилями, есть один сайт, в котором в случае захода с телефона будет открываться m.example.com и использоваться другая тема стилей. Так вот к сути: я в алиасах опенсервера на локалке сделал m.site => site, в самом сайте сделал детект мобильного устройства в хеддере и редирект на m.site. И тут же получил удар в спину циклическую переадрессацию. Я не совсем может понимаю того, чего от меня хотят, какие-то зеркала и алиасы. Помогайте.
#756 #611384
>>611366

>то-есть сайт один и тот же


> в самом сайте сделал детект мобильного устройства в хеддере и редирект на m.site. И тут же получил удар в спину циклическую переадрессацию.



Еба, ты сам догадаешься почему тебя зацикливает?
#757 #611393
>>611333
А, ну да, точно, спасибо, через неё всё можно попробовать.
А то я навертел штyк 10 регекспов и разных массивов с preg_split. Работает, конечно, но это не дело.
#758 #611396
>>610939
bump вопросу
#759 #611399
>>611384
Я знаю почему зацикливается, но задача такая стоит - редирект на m. но второго сайта на m. с подключением к той же базе нет, то-есть в моем распоряжении только один домен.
#760 #611412
>>611399

передай с редиректом post/get перменную

if ($_POST['mobli'] = 'moblie';) { /тута пусто/}
else { /тута код редиректа (незабудь добавить передачу переменной)/}
#761 #611419
>>611364
ну не бери хуле. я вообще считаю, кто пилил сайт, тот его и должен поддерживать а ковырять чужое легаси - зашквар.
#762 #611447
>>611399
Ты че несешь вообще, поехавший? Какая база, какой домен, какие алиасы?
На домене example.com в хедере должен стоять редирект, который должен срабатывать при твоем условии, на домене m.example.com в хедере не должно быть никаких редиректов. Это единственное верное решение, вот и сделай это. А не еби мозги.
14я задача #764 #611493
>>611492
Промазал темой
#766 #611518
>>611509
https://jsfiddle.net/r9r6n0mh/1/ забыл про дату. Вот так правильнее.
Кстати, ОП, у тебя там в 15 задании написано:

>(которые являются объекты)


и еще переменная c в примере кода вроде напечатана в русской раскладке.

https://jsfiddle.net/410np1m2/ и 16 задача.
#767 #611556
Есть такая удобная хуитка, как инициализация переменной в условии if:
if ($var = $obj->items[$item]) ...

Но в вызове функций оно не пашет:
if (isset($var = $obj->items[$item])) ... //ошибка

Есть ли аналог? А то получаются костыли вроде:
if (isset($obj->items[$item]) && is_array($obj->items[$item]) && !empty($obj->items[$item])) ...
#768 #611561
Оп проверь верстку: исправил 10, 11, и 12.
http://integer64.github.io/site-layout/
По 12 заданию, сделал 2 варианта:
0. С id, потому что адаптивность более проще сделать.
1. Без id, тут уже для большой универсальность, надо бы еще использовать JavaScript. Я не стал заморачиваться и сделал через position:absolute; top:192px;.
#769 #611603
Есть два стула. На одном рор дрочёный, на другом пхп + ларевел точёный. На какой сядите? Опыта в вебе вообще 0, хочу перекатиться из хеллоуворлдщика (пора бы уже, а то синтаксис уже и джавы, и обжа, и крестов, и питона освоил и даже ООП потрогал везде).
Цель - вкатиться в фриланс/удалёнку
#770 #611705
Как закрыть возможность интерпретирования текста, введенного стороним пользователем(например в форму) как кода?

Получается же, любой хуй может ввести код. Помню преподаватель говорил, когда я у него спрашивал, но я что-то забыл это.
#771 #611715
ОП, кстати, можешь добавить в шапку сайт phpclub, мне он показался довольно неплохим, сам начал более подробно изучать php(нужен для диплома).

Вот, например, вступление в php написано довольно доступно и с примером: http://phpclub.ru/detail/article/phpintro .
#772 #611722
>>611603
Пыху учи, время рельсов уже прошло.
561 Кб, 895x476
#773 #611723
>>611705

прогонять через функцию, которая обрезает что-то вроде ';><

https://secure.php.net/manual/ru/function.filter-input.php

>>611715

>http://phpclub.ru/detail/article/phpintro


cпасибо, для освежить голову при практике ок
#774 #611764
>>611705

Ты должен обрабатывать данные так, чтобы это было безопасно.

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

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

Погугли на тему «SQL инъекции» чтобы узнать подробнее.

Тут описано про плейсхолдеры: http://habrahabr.ru/post/148701/

Если ты выводишь на страницу - используй htmlspecialchars, вот урок: https://github.com/codedokode/pasta/blob/master/security/xss.md

Если подставляешь данные в яваскрипт - используй json_encode.

>>611723

> прогонять через функцию, которая обрезает


Это в общем неправильно. Что если эти символы нужны? Алсо вырезать только указанные тобой символы недостаточно.

Не надо изобретать велоспеды - способы защиты от инъекций давно уже придуманы.
Эмм... #775 #611768
Так, вот вроде готова задача для проверки текста на ошибки с помощью регулярных выражений: http://ideone.com/BXho8s
Всё вроде бы проверяет, находит и выводит.
Однако столкнулся с тем, что если пересекаются символы от предыдущей ошибки и от следующей, то не выводит символы перед ошибкой у крайней ошибки.
То есть из куска текста "Такая,знаете ли,мура" выведет "Такая,знаете" и ",мура ", если не поставить количество символов от 3 до 5 - то есть если не избежать этого пересечения элементов. Тогда получится во втором элементе " ли,мура ".
Как-нибудь можно это всё сделать более хорошо и правильно?
#776 #611769
>>611715

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

Эта статья по моему очень старая, года так из 2000. Все уже поменялось несколько раз.

По ссылке:

> В MySQL отсутствуют:


> Поддержка вложенных запросов, типа SELECT * FROM table1 WHERE id IN (SELECT id FROM table2).


Неверно. Возможно так и было, но лет 10 назад, я не знаю.

> Не реализована поддержка транзакций


Есть

> Нет поддержки триггеров и хранимых процедур.


Триггеры есть, процедуры - не знаю так как никогда не пользовался

> В нескольких словах – на PHP можно сделать все, что можно сделать с помощью CGI–программ


Что такое CGI программы? Непонятно

> <?


Надо использовать длинный тег

> PRINT "Привет, ".$_POST['name'];


htmlspecialchars

> mail($_POST['email'], $subj, $text);


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

> mysql_connect


> Вот и все, коммерческий продукт практически готов.


Ну вы поняли
#776 #611769
>>611715

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

Эта статья по моему очень старая, года так из 2000. Все уже поменялось несколько раз.

По ссылке:

> В MySQL отсутствуют:


> Поддержка вложенных запросов, типа SELECT * FROM table1 WHERE id IN (SELECT id FROM table2).


Неверно. Возможно так и было, но лет 10 назад, я не знаю.

> Не реализована поддержка транзакций


Есть

> Нет поддержки триггеров и хранимых процедур.


Триггеры есть, процедуры - не знаю так как никогда не пользовался

> В нескольких словах – на PHP можно сделать все, что можно сделать с помощью CGI–программ


Что такое CGI программы? Непонятно

> <?


Надо использовать длинный тег

> PRINT "Привет, ".$_POST['name'];


htmlspecialchars

> mail($_POST['email'], $subj, $text);


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

> mysql_connect


> Вот и все, коммерческий продукт практически готов.


Ну вы поняли
#777 #611808
Оп, прокомментируй тему "минификации и склейки" яваскриптов и css, я видел вы где-то выше это обсуждали. Под минификацией подразумевается удаление лишних переносов и комментариев?
По запросу asset management первой ссылкой нагуглил вот такую симпатичную и судя по кол-ву установок популярную библиотеку https://github.com/kriswallsmith/assetic

Почему бы ее не использовать? Зачем такие сторонние от php вещи как grunt или gulp? Тем более я так понял они тянут за собой установку npm, и вообще это нодовские фишки.
Короче я буду использовать эту библиотечку, пока меня кто-то не переубедит.

Хочу ставить бутстрап и джейквери композером, не хочу кочать орхивы.
#778 #611849
>>611808

> Под минификацией подразумевается удаление лишних переносов и комментариев?


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

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

Error ... in function a() in line 1

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

Склеивание = склеивание в 1 файл ради ускорения загрузки.

Подробнее про клиентскую оптимизацию можно почитать тут:

http://ruhighload.com/index.php/2009/06/07/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%BE%D0%B9-%D1%87%D0%B0%D1%81%D1%82%D0%B8/
http://speedupyourwebsite.ru/books/speed-up-your-website/

> Почему бы ее не использовать?


Используй, хотя если тебе надо просто скопировать 2 папки из vendor в public можно и без нее. Но полезно конечно ознакомиться.

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

> Зачем такие сторонние от php вещи как grunt или gulp?


Ну они популярные просто среди фронтендщиков.
#778 #611849
>>611808

> Под минификацией подразумевается удаление лишних переносов и комментариев?


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

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

Error ... in function a() in line 1

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

Склеивание = склеивание в 1 файл ради ускорения загрузки.

Подробнее про клиентскую оптимизацию можно почитать тут:

http://ruhighload.com/index.php/2009/06/07/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%BE%D0%B9-%D1%87%D0%B0%D1%81%D1%82%D0%B8/
http://speedupyourwebsite.ru/books/speed-up-your-website/

> Почему бы ее не использовать?


Используй, хотя если тебе надо просто скопировать 2 папки из vendor в public можно и без нее. Но полезно конечно ознакомиться.

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

> Зачем такие сторонние от php вещи как grunt или gulp?


Ну они популярные просто среди фронтендщиков.
https://github.com/MindiMakridi/filehosting/ #779 #611856
>>606910

> https://github.com/MindiMakridi/filehosting/blob/master/composer.json#L10


> "MyModels\\": "models/"


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

> https://github.com/MindiMakridi/filehosting/tree/master/public/files


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

https://github.com/MindiMakridi/filehosting/tree/master/public/models
Почему код в публичной папке? Удаляй.

https://github.com/MindiMakridi/filehosting/tree/master/public/thumbs
Если картинки тут генерируются автоматически, может ее в gitignore? И папку files тоже наверно (за искл. файла htaccess).

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L2


> error_reporting(0);


Объясни почему ты включил режим «игнорировать все ошибки»? Я не могу представить ни одной ситуации где нам надо было бы игнорировать ошибки. Это абсолютно неправильный код.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L4
Конфиг надо подключать без once, так надежнее

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L14


> use($userName, $pass, $host, $dbName)


Как-то нехорошо что тут столько глобальных переменных с параметрами. Надо их либо сложить в массив $config['user'], либо использовать $app->config('db.user', '12121') в конфиге. Мне кажется, удобнее всего сложить переменые в масиив.

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L23


> $app->container->singleton('maxSize'


Синглтон предназначен для объектов, а не всего попало. Для хранения макс. размера можно задействовать $app->config('maxsize') например.

Также, 1 Мб != 1000000 байт.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L40

> $files = $app->filesMapper;


> $files = $files->fetchLastUploadedFiles();


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

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L64


> $path = __DIR__ . "/files/{$id}$filename";


Что если $id = '..' ?
Что если filename = '.htaccess' ?

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L66


> $filename = mb_substr($filename, stripos($filename, $id)+strlen(strval($id)));


Почему смешиваешь mb- и не mb-функции? Я вообще не понимаю что делает эта строчка. Но интуиция мне подсказывает что искать id в имени - странная идея так как оно там может встретиться несколько раз.

Лучше это переписать через регулярку.

> header("Content-disposition:attachment;");


Зачем ; ?

> readfile($path);


Это годится на первое время, но неэффективно и надо будет переделать либо на X-SendFile, либо на трбк с htaccess.

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L81


> if(file_exists($dir."/files/".$filename)){


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

> catch (MyModels\PreviewGenerationException $e) {


> header("HTTP/1.0 500 Internal Server Error");


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

> die("error");


Не используй die в слиме.

> header("HTTP/1.0 404 Not Found");


В Слиме есть функция для этого

> $id = $_POST['id'];


Используй $app->request, почему используешь POST?

> catch(Exception $e){


> $app->render('error.html', array('errorMessage'=> $e->getMessage()));


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

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

> https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L45


> public function setMaxSize($size){


Зачем эта функция? зачем файлу знать какой макс. размер загрузки?

> public function setPath($rootDirectory)


> $this->path = $rootDirectory . "/files/{$this->id}{$this->filename}";


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

Также, есть такое правило:

https://github.com/codedokode/pasta/blob/master/good-code.md#Результат-функции

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



Проверь все свои функции, соответствуют ли они этому правилу? Например функция getPath() в файле, она всегда вернет точный результат или только если перед этим вызвать setPath? А если не вызвать?

> public function prepareToUpload($postData, $token){


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

> if (preg_match("/php|html/i", $extension)) {


В чем смысл этой проверки? Что если файл имеет имя example.php.llllll ? Апач тогда может воспринять его как php файл.

> throw new \Exception("No file selected", 1);


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

> $this->setUploadtime(date("Y-m-d H:i:s"));


Почему дату передаещь строкой, а не в общепринятом формает?

> static function generateToken()


Почему это в классе File? Алсо 10 символов слишком мало.

> https://github.com/MindiMakridi/filehosting/blob/master/models/FilesMapper.php#L31


> catch (\Exception $e) {


> $this->DBH->rollBack();


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

> throw new \Exception("Something went wrong", 1);


Ты теряешь информацию об ошибке. Вместо информации что именно не так ты выкидываешь бессмысленное сообщение. Как ты будешь исправлять ошщибку если увидишь в логе Something went wrong ?

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

> https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L84


> $this->path = $rootDirectory . "/files/{$this->id}{$this->filename}";


Не надо в базе хранить полный путь от корня диска. Надо хранить в базе относительно корня сайта, так как при переносе на другой сервер пути там будут другие и все сломается.
https://github.com/MindiMakridi/filehosting/ #779 #611856
>>606910

> https://github.com/MindiMakridi/filehosting/blob/master/composer.json#L10


> "MyModels\\": "models/"


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

> https://github.com/MindiMakridi/filehosting/tree/master/public/files


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

https://github.com/MindiMakridi/filehosting/tree/master/public/models
Почему код в публичной папке? Удаляй.

https://github.com/MindiMakridi/filehosting/tree/master/public/thumbs
Если картинки тут генерируются автоматически, может ее в gitignore? И папку files тоже наверно (за искл. файла htaccess).

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L2


> error_reporting(0);


Объясни почему ты включил режим «игнорировать все ошибки»? Я не могу представить ни одной ситуации где нам надо было бы игнорировать ошибки. Это абсолютно неправильный код.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L4
Конфиг надо подключать без once, так надежнее

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L14


> use($userName, $pass, $host, $dbName)


Как-то нехорошо что тут столько глобальных переменных с параметрами. Надо их либо сложить в массив $config['user'], либо использовать $app->config('db.user', '12121') в конфиге. Мне кажется, удобнее всего сложить переменые в масиив.

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L23


> $app->container->singleton('maxSize'


Синглтон предназначен для объектов, а не всего попало. Для хранения макс. размера можно задействовать $app->config('maxsize') например.

Также, 1 Мб != 1000000 байт.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L40

> $files = $app->filesMapper;


> $files = $files->fetchLastUploadedFiles();


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

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L64


> $path = __DIR__ . "/files/{$id}$filename";


Что если $id = '..' ?
Что если filename = '.htaccess' ?

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L66


> $filename = mb_substr($filename, stripos($filename, $id)+strlen(strval($id)));


Почему смешиваешь mb- и не mb-функции? Я вообще не понимаю что делает эта строчка. Но интуиция мне подсказывает что искать id в имени - странная идея так как оно там может встретиться несколько раз.

Лучше это переписать через регулярку.

> header("Content-disposition:attachment;");


Зачем ; ?

> readfile($path);


Это годится на первое время, но неэффективно и надо будет переделать либо на X-SendFile, либо на трбк с htaccess.

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L81


> if(file_exists($dir."/files/".$filename)){


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

> catch (MyModels\PreviewGenerationException $e) {


> header("HTTP/1.0 500 Internal Server Error");


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

> die("error");


Не используй die в слиме.

> header("HTTP/1.0 404 Not Found");


В Слиме есть функция для этого

> $id = $_POST['id'];


Используй $app->request, почему используешь POST?

> catch(Exception $e){


> $app->render('error.html', array('errorMessage'=> $e->getMessage()));


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

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

> https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L45


> public function setMaxSize($size){


Зачем эта функция? зачем файлу знать какой макс. размер загрузки?

> public function setPath($rootDirectory)


> $this->path = $rootDirectory . "/files/{$this->id}{$this->filename}";


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

Также, есть такое правило:

https://github.com/codedokode/pasta/blob/master/good-code.md#Результат-функции

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



Проверь все свои функции, соответствуют ли они этому правилу? Например функция getPath() в файле, она всегда вернет точный результат или только если перед этим вызвать setPath? А если не вызвать?

> public function prepareToUpload($postData, $token){


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

> if (preg_match("/php|html/i", $extension)) {


В чем смысл этой проверки? Что если файл имеет имя example.php.llllll ? Апач тогда может воспринять его как php файл.

> throw new \Exception("No file selected", 1);


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

> $this->setUploadtime(date("Y-m-d H:i:s"));


Почему дату передаещь строкой, а не в общепринятом формает?

> static function generateToken()


Почему это в классе File? Алсо 10 символов слишком мало.

> https://github.com/MindiMakridi/filehosting/blob/master/models/FilesMapper.php#L31


> catch (\Exception $e) {


> $this->DBH->rollBack();


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

> throw new \Exception("Something went wrong", 1);


Ты теряешь информацию об ошибке. Вместо информации что именно не так ты выкидываешь бессмысленное сообщение. Как ты будешь исправлять ошщибку если увидишь в логе Something went wrong ?

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

> https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L84


> $this->path = $rootDirectory . "/files/{$this->id}{$this->filename}";


Не надо в базе хранить полный путь от корня диска. Надо хранить в базе относительно корня сайта, так как при переносе на другой сервер пути там будут другие и все сломается.
#780 #611857
Остальные аноны, чье решения я пока не проверил, я проверю наверно завтра вечером.
#781 #611889
Есть задача создать зип архив всех файлов в заданной папке.
Но ни одно решение у меня не работает! Например это http://stackoverflow.com/questions/17708562/zip-all-files-in-directory-and-download-zip-generated#answer-19451938 со слегка расширенным классом. Что за нахуй вообще? Ошибок никаких нет, но после выполнения скрипта архива в папке нет! В качестве пути указываю полный путь к папке вроде /var/user/yoba/hui/pizda/djigurda
Не работаю и другие решения http://stackoverflow.com/questions/4914750/how-to-zip-a-whole-folder-using-php#answer-4914807 ЧЗХ?
#782 #611895
>>611889
if($zip->close())
{
//успех
}

Даже это условие выполняется. Но архива-то нет! Да и с права доступа проблем быть не должно, потому что другой скрипт через file_put_contents создает файлы, которые нужно заархивировать.
#783 #611914
>>611889
http://stackoverflow.com/questions/4914750/how-to-zip-a-whole-folder-using-php#answer-4914807
Если брать этот пример. Уже изучил все переменные в процессе выполнения скрипта. Все ок.

$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);
Рекурсивно считывает файлы в папке - чек

$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);
Получает имя файла и путь к файлу -чек

$zip->addFile($filePath, $relativePath);
Добавляет файл в архив - чек

$zip->close()
Корректно создает архив - чек.

Где архив бля?
#784 #611931
>>610293
потому что я еще не дошел давно проходил да и что с этими регулярными выражениями сложного? это ж как таблица умножения, просто подобрать правильно выражения, все логично и если вникнуть достаточно просто
#785 #611968
>>611764
я не тот кун, но в курсе про всю эту малафью, учитель из специалиста всё пояснял

>htmlspecialchars


да и подобное значение есть у фильт инпут вроде бы
#786 #611983
Не устанавливается блядский Apache как он меня сука заебал, рот его пердолил - при запуске httpd.exe появляется командная строка и сразу исчезает. В чем может быть проблема?
#787 #611984
>>611931
Просто у меня проблемы были с пониманием последовательности в выражении - это и просил объяснить. В том уроке ещё конкретные примеры простые и понятные, а задачи достаточно серьёзные для новичка, я только две сделал пока что, да и то жду разгрома от ОПа.
77 Кб, 839x260
#788 #612006
ОП, вот тут неправильно поставлены слэши.
#789 #612007
>>612006
Ох щи, там всё правильно, я подскользнулся.
#790 #612013
Вот при каждом запуске приложения мы инклудим кучу файлов. Не лучше ли собирать все в один на продакшене?
#791 #612016
>>611983
В голове.
#792 #612043
Как получить список всех файлов по адресу example.com/files/, если там форбидден?
#793 #612061
Шрифты в вордпрессе для меню в кириллице не задаются... когда мы уже на латиницу перейдем, как поляки.
76 Кб, 920x613
Олег #794 #612071
Как регуляркой отличить тире от дефиса?
Олег #795 #612073
>>612013

>Не лучше ли собирать все в один на продакшене?


А потом ещё и обфусцировать всё. И в идеале получать ya.ru где всего 1 строчка кода, ага.
96 Кб, 600x600
#796 #612074
#797 #612076
>>612071
Это разные символы, в чём проблема? Экранировать не забывай.
Олег #798 #612078
>>611983
Запусти апачмонитор хоть, консоль малоинформативна.
#799 #612092
>>612071
Ещё можно для поиска учитывать пробелы с обеих сторон от тире, когда его ставят в тексте всё равно как "-". А для поиска дефиса исключать возможность пробелов с обеих сторон.
#800 #612097
>>612043

очевидно же

google => список файлов php => http://www.php.su/scandir

на выходе массив со списком, если нужны все файлы, добавь

foreach ($files1 as $value)
{
echo "$value";
}
Олег #801 #612099
>>612076
>>612092
А по коду символа нельзя найти?
#802 #612100
>>612097
Доступ к папке запрещен, 403 статус, forbidden.
Не знаешь не отвечай. "Очевидно", даун блять.
#803 #612101
>>612099
Это я хз, бро, сам доделываю сейчас задачи на регулярки. И не вполне себя уверенно чувствую с ними.
Олег #804 #612103
>>612043

>если там форбидден


Никак.
#805 #612105
>>612100

по твоему можно получить полный список файлов любого ресурса? читни про 403 - http://www.wikireality.ru/wiki/403_Forbidden

просто нет прав
нужно открыть папку для чтения
#806 #612109
>>612100

если нет возможности изменить права, то

1) если есть живые страницы - выдернуть все внутренние ссылки содержащие /files
2) дирбрут - по базе подставлются разные распространенные именя и проверяются ответы в заголовке (есть дофига готовых)
#807 #612110
>>612100
даун ты
#808 #612111
пилите уже перекат, заебали
#809 #612114
>>612111
Погодь часик, запилю.
ПЕРЕКАТ ПЕРЕКАТ #810 #612124
ПЕРЕКАТ ПЕРЕКАТ #811 #612128
#812 #612130
>>612111
Зачем? Чтобы мне пришлось сидеть не в одном, а в двух тредах одновременно?
#813 #612144
>>612130
Пройди в новый и сиди в нём.
#814 #612146
>>612144
Но ответы на вопросы будут в этом.
#815 #612156
>>612146
Это проблемы тех, кто не хочет перекатываться. Тред уйдёт в бамплимит сегодня или завтра, все сообщения будут утеряны. Скажите спасибо Абу, который тут не хочет увеличивать бамплимиты.
#816 #612157
>>612156
Он 315 постов как в бамплимите, не?
#817 #612179
>>612157
Ты прав.
#818 #612269
>>611968

>>htmlspecialchars


> да и подобное значение есть у фильт инпут вроде бы


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

Мне вообще этот filter_input не нравится тем что его суют везде не думая.
#819 #612272
>>612013

Сделай тесты производительности. Возможно разница есть, но хорошо бы знать какая.
#820 #612304
Поясните за кодакадеми - стоит ли вкатиться туда или лучше идти по мануалу опа?
#821 #612314
>>612304

>Поясните за кодакадеми


Говнище.

>стоит ли вкатиться туда


Как хочешь, знаний там чуть больше нуля.

>лучше идти по мануалу опа?


Мануал опа лучше.
#822 #612343
>>612156
Иди ты нахуй. Запили свою имиджборду, там и увеличивал свои лимиты, дебил.
#823 #612378
>>612314
Ясн, спс.
А аналоги еще какие-нибдь есть, чтобы получше ее? Мануал опа само собой, там мемчики есть, всё для братишек.
Я где-то встречал отчет анона о том, что он какие-то ранги получает за обучение питону и жабаскрипту, там выполняет задачи и получает какие-то ачивки, что-то такое. Ну и там все языки есть, рнр тоже.
#824 #612440
>>612304

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

Ну и курс там по моему короткий, его можно за несколько дней по моему пройти, сам понимаешь что за такое время всерьез изучить целый стек веб-технологий невозможно.
#825 #612490
>>612440
Для нуба пойдет, я так понял. После опчикова мануала тогда. Спасибо.
#826 #612522
>>612490

Можно даже до или параллельно, как хочешь.
#827 #612619
>>607743

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

>>607991

Этот код все еще слишком большой. Надо упростить дальше:

> $paymentTotal = $paymentTotal + $debt;


> echo "{$month} месяц спустя: долг = {$


Это повторяется 2 раза, надо бы избавиться от повтора

>>608006

> $paymentTotal = $paymentTotal + $monthlyPayment;


> echo "($month) месяц спустя: долг = {$creditBalance} руб


Это повторяется, надо бы избавиться от повтора.

>>608016

Надо еще дальше сократить.

>>608152

Закрывающей скобки нет в конце конструктора
#828 #612620
>>608254

https://github.com/lexdss/BookShop

По ссылке ничего нету. Не могу проверить потому.

>>608301

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

>>608314

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

>>608322

для этого не нужны магические методы. Надо просто передалать роутер чтобы для URL вида /cat/:something он вызывал CategoryController#showCategoryAction($slug) и передавал слуг категории (:something) в экшен. Роутер не обязан работать по фиксированной схеме когда вторым идет действие, его можно настраивать произвольно.

>>608434

По адаптивной верстке изучи теорию (@media запросы), посмотри образцы адаптивных сайтов (гугли «примеры адаптивных сайтов») и сделай сам хотя бы одну адаптивную страницу - этого хватит.

>>608455

А, хорошая книга, у меня в бумажной версии даже есть.
#829 #612621
>>608602

Доработай роутер чтобы он определял в какой папке находится и убирал из URL начало если оно совпадает с именем папки. Или просто сделай себе локальный сайт http://local.local/...

>>608800

Не знаю. В Оп посте есть книги но не для начинающих.

>>608819

> Вот как мне вывести в переменную результат функции и потом вывести в echo эту переменную?


Функция должна вернуть результат ретурном: return ...; А в месте вызова ты сохраняешь результат в переменную:

$x = func();

Перечитай мой урок про функции, там упомянут return. Важная вещь, надо разобраться.

>>608867

> Странно, что я не могу оттуда выцепить $month никак, пробовал по-разному.


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

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

>>608870

Зато градиент под цвет иконок на айфоне.

>>608903

Почитай мануал php по этим функциями и константам или погугли эти названия.

> Чему равен Q_PATH?


Надо искать место где определена эта константа через define.

Судя по вопросам, тебе рановато изучать MVC. Тебе надо сначала с основами PHP разобраться.

>>609660

5.6

>>609667

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

>>609691

Виджет это что-то вроде маленького контроллера со своим вью, и они специально для этого предназначены, так что это ок. Не ок это когда код прямо во вью лепят.
#829 #612621
>>608602

Доработай роутер чтобы он определял в какой папке находится и убирал из URL начало если оно совпадает с именем папки. Или просто сделай себе локальный сайт http://local.local/...

>>608800

Не знаю. В Оп посте есть книги но не для начинающих.

>>608819

> Вот как мне вывести в переменную результат функции и потом вывести в echo эту переменную?


Функция должна вернуть результат ретурном: return ...; А в месте вызова ты сохраняешь результат в переменную:

$x = func();

Перечитай мой урок про функции, там упомянут return. Важная вещь, надо разобраться.

>>608867

> Странно, что я не могу оттуда выцепить $month никак, пробовал по-разному.


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

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

>>608870

Зато градиент под цвет иконок на айфоне.

>>608903

Почитай мануал php по этим функциями и константам или погугли эти названия.

> Чему равен Q_PATH?


Надо искать место где определена эта константа через define.

Судя по вопросам, тебе рановато изучать MVC. Тебе надо сначала с основами PHP разобраться.

>>609660

5.6

>>609667

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

>>609691

Виджет это что-то вроде маленького контроллера со своим вью, и они специально для этого предназначены, так что это ок. Не ок это когда код прямо во вью лепят.
#830 #612622
>>609719

> Как её передать, если прямое обращение к Hamburger.SIZE_SMALL дает нам undefined?


Ты не там ее создаешь. Это надо писать сразу после функции:

Hamburger.SIZE_SMALL = 'small';

А не где ты это написал. То есть чтобы это свойство было создано до вызова функции.

>>609727

Ты ничего не изобретаешь, ты изучаешь то что изобрели другие.

>>610077

не знаю. Может у них есть мобильная версия? Если нет то нет.
JS #831 #612623
>>610329

https://jsfiddle.net/dp5pgo94/1/

Ок, почти верно. А что если мы укажем n больше чем число городов? https://jsfiddle.net/4akump8y/1/

> Uncaught TypeError: Cannot read property 'city' of undefined



Я думаю брать первые N лучше через slice, а потом делать цикл.

> https://jsfiddle.net/8kwx97my/


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

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

> if (size != Hamburger.SIZE_SMALL && size != Hamburger.SIZE_BIG) {


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

> for (var i = 0; i < this._toppings.length; i++) {


> if (topping == this._toppings) {


> throw new Error("Топинг уже добавлен");


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

> if (this._size == Hamburger.SIZE_SMALL) {


> calories += 20;


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

>>610398

> Что-то внутри меня бунтует против объявления переменных без указания типа данных


Норм. У нас можно указывать тип аргументогв фукнкций, а в PHP7 еще и тип возврата и тип полей объектов.

Неправильно использовать тут while. У тебя цикл со счетчиком, для него придуман for. Зачем ты переписал его через while? Это запутывает код и требует больше времени чтобы понять как он работает. Неправильно. Код должен быть как можно более понятным и очевидным.

> while (mb_substr($text, $i, 1) == mb_substr($text, -$i -2, 1)){


А где проверка что мы дошли до середины строки?

> $i++;


> $b++;


зачем 2 одинаковых переменных?

> if ($b == $lenght - 1){


Почему -1? Комментарий бы написал хотя бы.

> (mb_substr($text, $i, 1) == mb_substr($text, -$i -2, 1)


Почему ты сравниваешь первый символ с начала со вторым с конца?

На слове «поп» не работает: http://ideone.com/eDDH16

>>610474

Строки надо писать в кавычках. Почему без кавычек?

>>610553

По хорошему тут нужна очередь фоновых задач например на gearman

>>610810

>>«любое число пробелов, скобок, минусов в любом порядке»


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


Давай упростим задачу. Как бы ты записал «ровно один минус, скобка или пробел»? То есть один любой символ из указанных?

> Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?


Нет, это не то. У тебя там заложен определенный порядок символов и слишком громоздко

По коду: выражение слишком громлоздкое и возможно ловит не все варианты. Ты пробовал подставлять все номера что я дал?
JS #831 #612623
>>610329

https://jsfiddle.net/dp5pgo94/1/

Ок, почти верно. А что если мы укажем n больше чем число городов? https://jsfiddle.net/4akump8y/1/

> Uncaught TypeError: Cannot read property 'city' of undefined



Я думаю брать первые N лучше через slice, а потом делать цикл.

> https://jsfiddle.net/8kwx97my/


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

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

> if (size != Hamburger.SIZE_SMALL && size != Hamburger.SIZE_BIG) {


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

> for (var i = 0; i < this._toppings.length; i++) {


> if (topping == this._toppings) {


> throw new Error("Топинг уже добавлен");


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

> if (this._size == Hamburger.SIZE_SMALL) {


> calories += 20;


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

>>610398

> Что-то внутри меня бунтует против объявления переменных без указания типа данных


Норм. У нас можно указывать тип аргументогв фукнкций, а в PHP7 еще и тип возврата и тип полей объектов.

Неправильно использовать тут while. У тебя цикл со счетчиком, для него придуман for. Зачем ты переписал его через while? Это запутывает код и требует больше времени чтобы понять как он работает. Неправильно. Код должен быть как можно более понятным и очевидным.

> while (mb_substr($text, $i, 1) == mb_substr($text, -$i -2, 1)){


А где проверка что мы дошли до середины строки?

> $i++;


> $b++;


зачем 2 одинаковых переменных?

> if ($b == $lenght - 1){


Почему -1? Комментарий бы написал хотя бы.

> (mb_substr($text, $i, 1) == mb_substr($text, -$i -2, 1)


Почему ты сравниваешь первый символ с начала со вторым с конца?

На слове «поп» не работает: http://ideone.com/eDDH16

>>610474

Строки надо писать в кавычках. Почему без кавычек?

>>610553

По хорошему тут нужна очередь фоновых задач например на gearman

>>610810

>>«любое число пробелов, скобок, минусов в любом порядке»


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


Давай упростим задачу. Как бы ты записал «ровно один минус, скобка или пробел»? То есть один любой символ из указанных?

> Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?


Нет, это не то. У тебя там заложен определенный порядок символов и слишком громоздко

По коду: выражение слишком громлоздкое и возможно ловит не все варианты. Ты пробовал подставлять все номера что я дал?
#832 #612624
>>610810

>>«любое число пробелов, скобок, минусов в любом порядке»


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


Давай упростим задачу. Как бы ты записал «ровно один минус, скобка или пробел»? То есть один любой символ из указанных?

> Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?


Нет, это не то. У тебя там заложен определенный порядок символов и слишком громоздко

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

>>610916

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

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


Никуда

> Кешировать ли результаты?


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

> , вместо 100 рублей поставить 1 рубль и отправить заказ по такой цене.


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

> У меня складывается впечатление что фриланс только для опытных разработчиков


Возможно. Но ты ведь наш курс еще не прошел? Не делал файлообменник, не делал задачу на JS SPA? На SQL, на CSS, на JS?
#832 #612624
>>610810

>>«любое число пробелов, скобок, минусов в любом порядке»


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


Давай упростим задачу. Как бы ты записал «ровно один минус, скобка или пробел»? То есть один любой символ из указанных?

> Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?


Нет, это не то. У тебя там заложен определенный порядок символов и слишком громоздко

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

>>610916

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

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


Никуда

> Кешировать ли результаты?


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

> , вместо 100 рублей поставить 1 рубль и отправить заказ по такой цене.


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

> У меня складывается впечатление что фриланс только для опытных разработчиков


Возможно. Но ты ведь наш курс еще не прошел? Не делал файлообменник, не делал задачу на JS SPA? На SQL, на CSS, на JS?
#833 #612625
>>610939

Что в документации написано? Что гугл выдает по запросу «lavarel ioc» ?

>>611235

https://jsfiddle.net/b4zscb0s/1/

> function PowerStation(powerProduction) {


> function SolarPanel(powerProduction) {


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

> this.addElements = function() {


А почему нет addElement? мне кажется по 1 добавлять гораздо удобнее так как ты выбираешь как именно и что добавлять.

Алсо где проверка что мы добавляем разрешенный элемент а не что попало?

Методы надо вынести из конструкторов в прототипы.

> if (this._elements instanceof PowerStation) {


А что если нет? Что в этом случае?

> this.getPowerProductionDuringTheDay = function() {


> this.getPowerProductionDuringTheNight = function() {


> this.getPowerConsumptionDuringTheDay = function() {


> this.getPowerConsumptionDuringTheNight = function() {


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

Вообще, я подумал что вместо 2 функций можно сделать одну и параметр для указания дня/ночи.

> resultString = "нужно закупить энергии на: ";


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

>>611266

> "\\,[а-я]", "\\;[а-я]", "\\![а-я]", "\\?[а-я]", "\\:[а-я]


Это можно объеинить вместе. Также, надо писать ё отдельно так как в Юникоде она идет отдельно от а-я. также, добавь латинницу и цифры. А лучше вообще использовать \\w

> "\\,а", "\\,но".


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

> Правильный ли подход?


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

>>611302

Используй preg_match или preg_match_all, они ищут первое или все совпадения с регуляркой и помещают в массив, они описаны у меня в уроке.

>>611341

Ищи HTTP клиент

>>611366

Лучше бы адаптивную верстку.

>>611419

Не факт.
#833 #612625
>>610939

Что в документации написано? Что гугл выдает по запросу «lavarel ioc» ?

>>611235

https://jsfiddle.net/b4zscb0s/1/

> function PowerStation(powerProduction) {


> function SolarPanel(powerProduction) {


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

> this.addElements = function() {


А почему нет addElement? мне кажется по 1 добавлять гораздо удобнее так как ты выбираешь как именно и что добавлять.

Алсо где проверка что мы добавляем разрешенный элемент а не что попало?

Методы надо вынести из конструкторов в прототипы.

> if (this._elements instanceof PowerStation) {


А что если нет? Что в этом случае?

> this.getPowerProductionDuringTheDay = function() {


> this.getPowerProductionDuringTheNight = function() {


> this.getPowerConsumptionDuringTheDay = function() {


> this.getPowerConsumptionDuringTheNight = function() {


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

Вообще, я подумал что вместо 2 функций можно сделать одну и параметр для указания дня/ночи.

> resultString = "нужно закупить энергии на: ";


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

>>611266

> "\\,[а-я]", "\\;[а-я]", "\\![а-я]", "\\?[а-я]", "\\:[а-я]


Это можно объеинить вместе. Также, надо писать ё отдельно так как в Юникоде она идет отдельно от а-я. также, добавь латинницу и цифры. А лучше вообще использовать \\w

> "\\,а", "\\,но".


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

> Правильный ли подход?


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

>>611302

Используй preg_match или preg_match_all, они ищут первое или все совпадения с регуляркой и помещают в массив, они описаны у меня в уроке.

>>611341

Ищи HTTP клиент

>>611366

Лучше бы адаптивную верстку.

>>611419

Не факт.
#834 #612626
>>611492

Форматирование что-то печальное. Поставь нормальный редактор себе и пиши в нем.

> if(variable.length!==undefined && type!="[object Array]"){


> return "array-like";


Недостаточно. Надо бы еще проверять что length это число и что есть свойства 0, 1... А то получается так: https://jsfiddle.net/qe9aojjz/1/

Объект определяется как array-like

>>611509

> https://jsfiddle.net/r9r6n0mh/1/


В общем верно, но тут есть подвох:

> for(var key in obj){


> copy[key] = obj[key];



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

>>611518

16 задача

Нет правильного определения массив это или объект.

// Должно вернуть {a:1}, возвращает [a:1]
console.log(deepCopy({a:1}));
// Должно быть false
console.log('length' in deepCopy({}));

Вот тут ошибки.

Вообще ты молодец, мало кто до 16 задачи доходит. Надеюсь ты дальше за ДОМ и jQuery возьмешься, они очень важны.

>>611556

Это плохой код так как усложняет читаьельность. Это 2 действия и их надо писать в 2 строки.

> Но в вызове функций оно не пашет:


isset просо нужа ссылка по моему

> Есть ли аналог? А то получаются костыли вроде:


А зачем столько проверок? Ты что сам не знаешь что у тебя в переменной?

В твоем случае надо писать так, c использованием правильного ООП:

if ($obj->getCountOfItems() > 0)
#834 #612626
>>611492

Форматирование что-то печальное. Поставь нормальный редактор себе и пиши в нем.

> if(variable.length!==undefined && type!="[object Array]"){


> return "array-like";


Недостаточно. Надо бы еще проверять что length это число и что есть свойства 0, 1... А то получается так: https://jsfiddle.net/qe9aojjz/1/

Объект определяется как array-like

>>611509

> https://jsfiddle.net/r9r6n0mh/1/


В общем верно, но тут есть подвох:

> for(var key in obj){


> copy[key] = obj[key];



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

>>611518

16 задача

Нет правильного определения массив это или объект.

// Должно вернуть {a:1}, возвращает [a:1]
console.log(deepCopy({a:1}));
// Должно быть false
console.log('length' in deepCopy({}));

Вот тут ошибки.

Вообще ты молодец, мало кто до 16 задачи доходит. Надеюсь ты дальше за ДОМ и jQuery возьмешься, они очень важны.

>>611556

Это плохой код так как усложняет читаьельность. Это 2 действия и их надо писать в 2 строки.

> Но в вызове функций оно не пашет:


isset просо нужа ссылка по моему

> Есть ли аналог? А то получаются костыли вроде:


А зачем столько проверок? Ты что сам не знаешь что у тебя в переменной?

В твоем случае надо писать так, c использованием правильного ООП:

if ($obj->getCountOfItems() > 0)
#835 #613207
>>612619

>> $paymentTotal = $paymentTotal + $debt;


>>echo "{$month} месяц спустя: долг = {$


>Это повторяется 2 раза, надо бы избавиться от повтора


Ох щи, бро, ОП, разве куда-то ещё можно сократить? Там же все обязательные элементы стоят уже? Или ты имеешь в виду, что из разных частей нужно вытащить их и сделать общим для if и else? Там, где мы считаем для суммы больше, чем выплата в месяц, и там, где сумма долга меньше выплаты в месяц.
Честно говоря, не представляю, как это сделать, я в растерянности.
>>612623 >>612624

>Давай упростим задачу. Как бы ты записал «ровно один минус, скобка или пробел»? То есть один любой символ из указанных?


Например, вот так: "/^\\-|\\)|\\s$/". Но там в какой-то моменты может быть вот такое место в номере: "...9 ) - 8888..." То есть там сразу пять символов появляются, это меня запутало. Впрочем, сейчас я уже понял, как это должно выглядеть, позже переделаю. Планирую завершить регулярные выражения и снова все задачи пройти перед повторением, писать их не глядя.

>> Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?


>Нет, это не то. У тебя там заложен определенный порядок символов и слишком громоздко


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

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


Да, все номера из твоей пасты показывает правильно.
#836 #613291
>>611914

А это ты сделал?

$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

как в примере?
#837 #613292
>>611914

Алсо, у тебя включено отображение ошибок?

В мануале пишут:

> http://php.net/manual/ru/ziparchive.close.php


> If you have created a zip file and added a file to it without error, yet the ZipArchive::close call fails (with ER_TMPOPEN: "Failure to create temporary file") and the zip file is not created, check to see if your ZipArchive::open call specifies a pathname containing nonexisting directories. If you expect a containing hierarchy of one or more directories, you must create them yourself before using using ZipArchive. You can write a simple function to recurse using dirname to find each parent directory, creating those that don't exist by using mkdir when leaving the recursion.

#838 #613294
>>611983

Апач не запускают через клик по httpd. Чтобы увидеть причины, запускай его из командной строки а не кликом. Гайд по командной строке и ответы по установке апача есть в ОП посте.
#839 #613295
>>612043

Никак.
#840 #613296
>>612071

По коду в таблице utf-8 либо вставив символ.

if ($char == '-'_) ...
if ($char == "\x12\x34") ... где 12 34 - шестнадцатеричный код тире в кодитровке utf-8. Коды можно глянуть тут http://unicode-table.com/ru/
#841 #613297
>>612099

Можно, смотри пост выше.
#842 #613298
Этот тред закрыт Не пишите в нем. Если вас не проверили, не ответили, не заметили - переходите в новый тред и напомните о себе там: >>612122 (OP)

Все в новый тред >>612122 (OP)
#843 #614850
K
fgp
Тред утонул или удален.
Это копия, сохраненная 20 января 2016 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски