«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP 66. Предновогодний часть два. Аноним 2015/12/17 03:04:08  №605630 1
14503106484290.jpg (430, 1024x768)
768x1024
14503106484311.jpg (1238, 1680x1050)
1050x1680
14503106484442.png (518, 800x500)
500x800
14503106484463.png (388, 800x600)
600x800
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык 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) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Аноним 2015/12/17 03:04:55  №605631 2
14503106960170.png (46, 500x644)
644x500
>>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, то рассказать об этом стоит в каком-нибудь другом треде.

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Аноним 2015/12/17 03:54:14  №605643 3
14503136544070.jpg (14, 604x275)
275x604
Перекатываюсь

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

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


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

в данной ситуации главное не изучение ООП и MVC, а результат, так как я не хочу проебаться со сроками и потом попасть на платные пересдачи и прочее
Аноним 2015/12/17 05:20:58  №605652 4
>>605643
> Сложно ли реализовать такую хуйню на вордпресс?
да.
Аноним 2015/12/17 08:52:05  №605677 5
Позвонил на вакансию пхп разраба, а там какой-то пропитый гопник трубку взял и с гонором так: чо?
Это вот такие люди с пхп работают, да?
Аноним 2015/12/17 09:00:17  №605679 6
>>605677
Видимо, такие ими руководят
Аноним 2015/12/17 09:10:57  №605683 7
>>605677
Не суди по первому разговору. Я так-то 2 высших имею и Phd, а когда работы много, в запарке тоже могу так ответить.
Аноним 2015/12/17 09:12:52  №605686 8
Я так понимаю легаси сейчас вообще не катит? Просто есть вариант написать простой бложек с нуля. И на него в наихудшайшем случае уйдёт дней 10. но при использовании фреймворков (без опыта работы с фреймворками) - месяца 3. Вот сижу и думаю. Нафик может запилить бложек, а потом прикручивать к нему всякие нужности по дороге?
Аноним 2015/12/17 09:46:20  №605699 9
А вообще у вас есть такой синдром? Дело в том, что я женщина в возрасте уже. И мне кажется, что на любые вакансии или работы, где заказчик знает о моем поле, будут брать исключительно из-за этого фактора, а не наличия скиллов. Ну типа тупая дырка, даже спонсора себе на нашла, надо же хоть косточку бросить из жалости.

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


Главная проблема была в том, что я сначала считал кредит баланс, потом в коде добавлял проценты и прочее. В иотоге if срабатывал, потом к (например 1000) добавлял проценты, обслуживание, потом ещё и ещё что-то. В итоге хотя проверку проходил - фактически тут же её и ломал.
Ну собственно ты на те-же грабли и наступил. Сначала проверил значение кредитбаланса, а потом зачем-то к нему понаприбавлял всего. У тебя он был меньше 5000 а уже после if - прибавил % и счета за обслуживание.
Аноним 2015/12/17 11:31:41  №605749 15
>>605747
В смысле, есть 1000 подставить вместо 40000
Аноним 2015/12/17 11:33:27  №605753 16
>>605747
>ведь месячный платёж заведомо больше общего долга с самого начала. Смысл заморачиваться на эту тему?
>Тестирование программы?
>Не, не слышал.
Аноним 2015/12/17 11:35:51  №605755 17
>>605753
Правда не слышал, не программист же. Тогда да, действительно надо перепиливать прогу, как >>605748, чтобы такие случаи сразу отсекать.
Олег 2015/12/17 11:39:09  №605758 18
>>605755
Там действительно интересная задача сама по себе. Вот вроде и ответ есть и работает всё, а что-то не так. И когда вводишь заведомо маленькие цифры - сразу понятно что не так и где слабое место. Это не просто означает что тестирование смысла не имеет, а скорее всего и то, что и обычные суммы рассчитываются неправильно!
Аноним 2015/12/17 12:13:02  №605769 19
>>605652
Что именно из этого сложно реализовать?
Аноним 2015/12/17 12:24:42  №605777 20
>>605747

5000 это не месячный платеж. Это максимальная сумма которую заемщик может выплатить за месяц.
Аноним 2015/12/17 12:24:51  №605778 21
14503442912490.jpg (65, 427x403)
403x427
>>605640
лоль, ну прост смысл учить всякую левую абстрактную хуйню, которая скорей всего не пригодится никогда? фремворк рандомный например

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

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

>>605486
>>605415

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

зы: спасибо, развернутые приятные ответы.
Аноним 2015/12/17 12:45:53  №605794 22
>>605708
Но я же чайлдфри.
someApprentice 2015/12/17 14:31:34  №605861 23
Покажите кто-нибудь свой у кого 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 2015/12/17 14:32:16  №605862 24
всегда делаю дамп после обновления composer.json
Аноним 2015/12/17 15:15:05  №605874 25
>>605748
Спасибо, братишка Олег, но дело в том, что у тебя неправильно считает теперь 40 000, такие вот дела.
Там должно получиться 61270 с копейками, а у тебя выходит 60262.31722769, то есть пропадает 1000 за обслуживание кредита и 3% от 262 рублей.
Я поеду с этим калькулятором.
>Сначала проверил значение кредитбаланса, а потом зачем-то к нему понаприбавлял всего. У тебя он был меньше 5000 а уже после if - прибавил % и счета за обслуживание.
Как я понял, именно это и правильно. Там когда КредитБаланс становится 4138 (я уже наизусть выучил эти цифры, блиять), надо прибавить к этому 3% и тысячу за обслуживание. А потом КредитБаланс станет 262 рубля - снова надо прибавить 3% от этой суммы и сумму кредита. Вот именно этот последний шаг не делает твой скрипт, получается, такие дела.
Аноним 2015/12/17 15:16:52  №605877 26
>Там когда КредитБаланс становится 4138 (я уже наизусть выучил эти цифры, блиять), надо прибавить к этому 3% и тысячу за обслуживание
И после отнять 5 000 - обычную его месячную выплату, этого анончика.
Олег 2015/12/17 15:21:04  №605880 27
>>605874
Хм... сейчас посмотрю.
Аноним 2015/12/17 15:36:18  №605894 28
>>605880
>А потом КредитБаланс станет 262 рубля - снова надо прибавить 3% от этой суммы и сумму кредита
Сумму за обслуживание кредита, то есть 1000 рублей.

Вот такие дела.
ОП, получается, не проверил твой каклькулятор? Потому что я уже забавлялся с массивами, про Толстого написал скрипт, ещё многое, а тут такой удар от ОПа - и на три дня выпал из приятного программирования.
Олег 2015/12/17 15:36:37  №605895 29
>>605874
if ($creditBalance < 5000) {
$month++;
$creditBalance = ( $creditBalance * $percent ) + $servicePayment - $monthlyPayment;
Что-то я не понял зачем ты так сделал? У тебя остаётся долг меньше пяти тысячь, а ты всё-равно платишь 5000 банку. И в итоге банк тебе теперь должен. Что-то не так.
Аноним 2015/12/17 15:42:03  №605900 30
>>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.

Короче дохуя ошибок, прочитай мануал по композеру и неймспейсам, переставлять буквы наугад будет дольше и болезненнее.
Аноним 2015/12/17 15:52:21  №605905 31
Аноним 2015/12/17 15:52:34  №605907 32
>>605895
Там получается к этому моменту как раз долг 4138, вот он в $creditBalance у нас к этому моменту находится. Дальше надо прибавить 3% и 1000 за пользование кредитом. Получится 5262 - отсюда отнимаем плату анончика 5000.
Потом снова прибавляем проценты и $servicePayment. И вот тут уже платим 1270 вроде как раз.
Олег 2015/12/17 15:53:25  №605908 33
>>605874
>Там когда КредитБаланс становится 4138 (я уже наизусть выучил эти цифры, блиять), надо прибавить к этому 3% и тысячу за обслуживание. А потом КредитБаланс станет 262 рубля
Что-то ты не понял меня совсем.
Ну давай посчитаем.
4138 +1000 ...
Получаем 5138. А у тебя скрипт должен сработать только когда кредит<5000. И как же он сработает?
Олег 2015/12/17 15:54:42  №605910 34
>>605907
Я про это и говорю, ты сначала должен посчитать кредитбаланс, а уже потом проверять условие. У тебя лишняя тыща как раз из-за этого получается.
Аноним 2015/12/17 16:01:40  №605911 35
>>605908
Нет-нет, бро, не так:
4138 * 1.03 + 1000, получается 5262 с копейками.
В том-то и дело, что там в условии с if надо частично делать повтор этого цикла, получается.
Там получается в один момент КредитБаланс становится меньше, но до конца не выплачен. Поэтому надо снова пройти через умножение на проценты и прибавление тысячи за пользование кредитом.
Я сейчас найду первый свой вариант, там подробно я специально это расписал, погоди.
>>605910
ОП как раз сказал, что считает правильно 40 000 у меня, что должно быть 61270 с копейками.
Олег 2015/12/17 16:03:51  №605912 36
>>605911
Да, ты прав, сяду за переделывание.
Аноним 2015/12/17 16:03:58  №605913 37
Вот, бро Олег: http://ideone.com/yJFWZo
Там я специально для себя наглядно прописал, где что остаётся, где что выитается и т.п.
ОП подставил тысячу в КредитБаланс и всё там посчиталось неправильно.
И вот я три божьих дня ковыряюсь.
Аноним 2015/12/17 16:04:58  №605914 38
>>605912
Ох, бро, я уже всё, сил больше нет.
Я раз семь подчистую его переписывал, везде вертел-перевёртывал.
Аноним 2015/12/17 16:27:23  №605930 39
Олег, лучше из этого поста калькулятор: >>605726, он правильнее считает. Тот первый у меня на два месяца разделяет в конце и оставляет долг ещё.

Аноним 2015/12/17 18:35:21  №606103 40
>>605900
>У тебя русская буква 'c' в слове namespaCe
У меня в Sublime Text'е вообще не подсветилась. Это такая глупая ошибка с моей стороны.

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

https://github.com/someApprentice/Students
Аноним 2015/12/17 19:31:39  №606199 41
14503698993700.png (135, 1700x796)
796x1700
Дух силен, но плоть слаба и выпила уже снотворное

Анон, я еще хочу часок поработать
Аноним 2015/12/17 19:38:57  №606206 42
>>606199
>invalid argument supplied for foreach()
Такие баги элементарно чекаются дампом переменных.
Аноним 2015/12/17 19:40:08  №606210 43
>>606206
Спокуха, уже разобрался, вылезла новая ошибка
Аноним 2015/12/17 19:42:57  №606212 44
>>606210
Да мать его, я сделал эту сучку
Аноним 2015/12/17 19:44:08  №606213 45
14503706482500.jpg (32, 535x401)
401x535
>>606206
Ну разве я не охуенен?
Аноним 2015/12/17 19:44:27  №606214 46
О...хуенен
Аноним 2015/12/17 22:13:41  №606337 47
Привет, ОП, репостну с прошлого треда, вдруг ты уже туда не заглянешь. У меня есть вопросы по задаче про "опечатки":
1) http://ideone.com/eOZ6Qg это просто поиск таких слов. Я сделал его в 2х вариантах: с делением на каждое слово (ищет только первую изменённую букву/ы, формально под постановку задачи подходит) и вариант без разбиения (тогда под раздачу попадает английское слово с русскими буквами, но выглядит красивее и ищет ошибки в обоих языках).

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

В общем, всё это можно было бы сделать через всякие циклы, массивы и т.д., но я думаю, это неверный путь. Скажи, в какую сторону думать, или забить на мелочи?
Сорри за путанное изложение мыслей
Аноним 2015/12/17 22:31:00  №606346 48
Что за блядский SASS? для чего он нужен? Почему он такой сложный в плане всяких установок? Почему его теги не подсвечивают не саблайм не нотепад?
Аноним 2015/12/17 22:33:56  №606350 49
Как стать норм фрилансером? Знаю ПХП, КСС, ХТМЛ, Джейквери, яваскрипт, умею верстать немного из ПСД всё на более менее среднем уровне. На какие заказы могу претендовать, допиливание кмс? парсинги? скрипты? почему мне кажется всё это чем то сложным, хотя вроде бы программирование более менее знаю и для учебных целей сделал не одну задачу, уровня файлообменника и подобных.
Аноним 2015/12/18 00:07:56  №606440 50
>>606346
Да забей хуй на него, скоро все на PostCSS перейдут.
Олег 2015/12/18 03:51:17  №606539 51
>>605894
https://ideone.com/qzmFBN
Переписал.
ОП оказывается проверил мой код, и отписался спустя 400 постом. А я и не заметил (
https://github.com/MindiMakridi/filehosting Аноним 2015/12/18 04:31:06  №606548 52
Проверил файлообменник, советы в старом треде: >>606547
someApprentice 2015/12/18 08:41:55  №606571 53
Аноним 2015/12/18 09:56:35  №606592 54
>>606539
Молодца, бро!
И решение же, сука, простое, как два пальца...
И написано же было, что надо проверять долг (разумеется, в голову мне не пришло, что долг можно сделать другой переменной).
Отлично всё равно и для меня, потому что я хотя бы лучше уяснил во время ковыряния, как многое работает, как скрипт проходит и т.п.
Ну а так прямо гора с плеч, спасибо, братишка.
Аноним 2015/12/18 11:09:59  №606636 55
>>606571
Анончик, хотел посмотреть твою реализацию Cat&Mouse. В файле index.php необходимо поменять пути, так как на линуксе были проблемы. И интерпретатор ругался на 86-ю строку файла Animal.php, пришлось слово Class убрать. Это норма и просто я ньюфаг?
someApprentice 2015/12/18 11:35:12  №606645 56
someApprentice 2015/12/18 11:37:17  №606649 57
>>606636
>В файле index.php необходимо поменять пути, так как на линуксе были проблемы
А что за проблемы были?
Аноним 2015/12/18 12:00:44  №606660 58
>>605630 (OP)
Кто-нибудь писал ботов для телеграмма на пхп? покажите?
Аноним 2015/12/18 12:30:35  №606671 59
>>606649
В линуксе вся файловая система начинается с корня, то есть когда ты указываешь require '/Templates/print.phtml'; то поиск начнётся с папки Templates/, находящейся в корневой директории всей ФС. Я добавил точку перед первым слешем, вместо точки подставится адрес текущей директории, а вообще правильно использовать константу __DIR__
Например require_once __DIR__ . '/Templates/print.phtml';
Аноним 2015/12/18 12:31:36  №606672 60
Аноним 2015/12/18 12:55:43  №606694 61
Аноним 2015/12/18 13:22:29  №606706 62
>>606672
Интересно, я так понимаю, с его помощью можно веерно рассылать собственноручно написанный текст списку пользователей из друзей?
Аноним 2015/12/18 13:56:44  №606724 63
>>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 соответственно ксс не прогружался, ведь такой папки нет. Поэтому я и прописал там полный путь. Сейчас почему-то относительные ссылки работают и такой проблемы не вызывают.

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

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

Аноним 2015/12/18 14:12:31  №606729 64
14504371516940.jpg (47, 604x398)
398x604
карочи чет заступарился


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

пример таргета: http://www.spiegel.de/impressum/a-941280.html

Аноним 2015/12/18 14:14:44  №606730 65
Аноним 2015/12/18 14:17:39  №606732 66
>>606547
> header("Content-disposition:attachment; filename=$filename");
>В заголовках можно исплользовать только латинницу и нельзя использовать русские или други буквы. Как это исправить? Не указывать filename вообще. Тогда браузер возьмет имя из URL

Тогда он будет скачивать файл, имя которого содержит айди. Мне бы хотелось, чтобы файлы скачивались с оригинальным названием. Как это сделать, не указывая имя в заголовке?
Аноним 2015/12/18 14:29:29  №606743 67
>>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
Аноним 2015/12/18 14:46:09  №606749 68
Аноним 2015/12/18 14:53:01  №606755 69
>>606729
пожаловался на тебя за порно-картинки, вниманиеблядь.
Аноним 2015/12/18 15:29:10  №606774 70
http://php.net/manual/ru/features.file-upload.post-method.php Вот почему тут не написано, что при загрузке файла размером больше, чем указано в поле MAX_FILE_SIZE, $_FILE['file']['size'] становится равным нулю? Этот нюанс стоил мне часа впустую потраченного времени в поисках ошибки.
Аноним 2015/12/18 15:36:38  №606780 71
>>606755
Доносчику первый кнут.
Аноним 2015/12/18 15:36:42  №606782 72
У меня проблемы в фотошопе, не всегда при клике на слой, мне не показывают где этот слой находится во вкладке слои, а иногда показывают но это бывает реже. Как правильно смотреть что за слой? просто кликать мышкой по определённой области макета?
Аноним 2015/12/18 15:44:46  №606787 73
>>606774
Как это пофиксить?
Аноним 2015/12/18 15:46:11  №606789 74
Аноним 2015/12/18 15:46:28  №606790 75
Аноним 2015/12/18 15:47:38  №606792 76
>>606790
А зачем это фиксить?
Аноним 2015/12/18 15:52:19  №606797 77
>>606792
Чтобы$_FILE['file']['size'] не становился равным нулю?
Аноним 2015/12/18 15:57:13  №606800 78
>>606797
Ну так увеличь max_file_size (и ище одну связанную директиву) в php.ini. Или у тебя какая-то быдло-сборочка, которая не дает этого сделать?
Проверяй размер файла джаваскриптом. Тем более это все равно нужно делать, чтобы пользователь даже не пытался грузить файлы больше чем разрешено.
Аноним 2015/12/18 16:44:27  №606818 79
Блять, какой же я тупой..
Не могу накатить дримвивер на денвер, какую-то хуйню пишет:
Сервер не найден

Страница "http://site/test.php" не была загружена, так как не найден сервер "site". Убедитесь в том, что соединение с Интернетом установлено и имя сервера введено правильно.
Аноним 2015/12/18 17:06:04  №606828 80
>>606818
Надо было рестарт денвера сделать, допёрло до барана.
Аноним 2015/12/18 17:19:50  №606834 81
Чому Дримвивер может не читать символ \n?
Аноним 2015/12/18 17:20:39  №606837 82
Аноним 2015/12/18 17:34:27  №606851 83
14504492672410.webm (2474, 480x360)
360x480
>>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
Аноним 2015/12/18 17:46:20  №606861 84
>>606851
>регулярки валидации емейла не срабатывают, что делать?
>отдал регулярке 0 мэйлов
>удивился почему не сработало
Аноним 2015/12/18 17:54:48  №606867 85
>>606837
Хераси ты недоброжелательный.
Дримвивер чем не угодил?
Аноним 2015/12/18 18:33:03  №606900 86
14504527835910.png (284, 640x368)
368x640
>>606861

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


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

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

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

сохраняет чутка мусора на выходе и похуй
мой 2 скрипт
Аноним 2015/12/18 18:46:55  №606909 87
Господа, у кого-нибудь получалось устроиться джуном после 25 лвл без корки?
Аноним 2015/12/18 18:49:55  №606910 88
Аноним 2015/12/18 19:42:15  №606926 89
>>606645

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

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

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

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

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

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

function somefunc(): int
{
...
}

Жаль, нельзя пока указывать сложные типы вроде SomeClass[] (массив объектоы SomeClass).
Аноним 2015/12/18 19:44:50  №606928 90
>>606724

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

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

css/bootstrap

вместо

/css/bootstrap

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

Специально его вчера написал и выложил.
Аноним 2015/12/18 19:45:48  №606929 91
>>606724

Если относ. URL начинается со слеша, то он идет от корня сайта. Если не со слеша, то от текущей папки в пути. Отсюда и проблема.
Аноним 2015/12/18 19:47:49  №606930 92
>>606730

У вас обоих сделано неправильно. У тебя непраивльно что настройки вписаны прямо в класс, надо их выносить в конфиг. У него вдобавок еще и все на статических методах, то есть это вообще не ООП.
Аноним 2015/12/18 19:50:21  №606932 93
>>606732

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

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

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

Этот метод работает с любыми символами, хоть кириллицей, хоть иероглифами, только помни что в пути спецсимволы вроде пробела или знака вопроса надо экранировать процентным кодированием.
Аноним 2015/12/18 19:57:28  №606940 94
>>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
Аноним 2015/12/18 20:00:58  №606942 95
>>606782

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

>>606800

НЕт, неправилньо. Надо проверять поле error.

Аноним 2015/12/18 20:01:26  №606943 96
>>606910

Прочел урок про относительные URL? Задание там решил? Если да, напиши ответы.
Аноним 2015/12/18 20:02:38  №606944 97
>>606940
А что тогда записывает в лог?
Аноним 2015/12/18 20:12:40  №606950 98
А вообще, что вы мучаетесь с сокетами? Вон как в шарпе это легко делается.
http://habrahabr.ru/post/120157/
Аноним 2015/12/18 20:16:24  №606953 99
Аноним 2015/12/18 20:16:41  №606954 100
Аноним 2015/12/18 20:27:03  №606959 101
>>606950
Шарп не уперся, мы изучаем php.
На php тоже есть готовые решения, смотри ratchet и reactphp. Те же вебсокеты делаются в несколько строчек.

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

Код на шарпе из статьи кстати выглядит так же страшно, как и на голом php.
Аноним 2015/12/18 21:07:44  №606979 102
14504620648780.png (246, 996x712)
712x996
>>606959
Ратчер, хуячер. на шарпе это делается в три строке, а в похапе нужно подключать тяжелые библиотеки и ебать себе мозги асинхронностью.

Вон я какой браузер сделал на с#, с иконкой. Правда на сосач чего-то не постится через него.
Аноним 2015/12/18 21:38:34  №606985 103
>>606979
Спасибо за важную информацию.
Аноним 2015/12/18 21:41:46  №606986 104
>>606979
Там код уровня browser = new Browser('заебись');
Зачем ты сюда это принёс?
Аноним 2015/12/18 21:58:07  №606991 105
>>606986
Проорал чего-то на всю коммуналку.
Аноним 2015/12/18 22:14:19  №607011 106
14504660593450.jpg (74, 768x768)
768x768
По сайту ОПа можно реально самому дойти до создания файлообменника?
Всем добра и няшек.
Аноним 2015/12/18 22:15:14  №607012 107
>>606979

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

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

Если бы ты не был так глуп, ты бы кстати мог вспомнить что в дотнете есть кое-что упрощающее работу с асинхронными функциями на уровне языка.
Аноним 2015/12/18 23:10:22  №607048 108
>>605738
Выложил резюме на hh.ru. Через несколько дней на почту упало письмо с предложением побеседовать по скайпу. Побеседовали. Дали тестовое задание. Решил. Отправил. Проверили, позвали на собеседование. Сказали, что позвонят. Позвонили. Ну и всё.
Аноним 2015/12/19 00:24:30  №607090 109
Аноним 2015/12/19 00:35:20  №607098 110
>>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, хотя по коду кажется что они ничем не связаны. Вот так ловушка.

Аноним 2015/12/19 00:36:32  №607099 111
>>607090

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

private static $x =1;

Но в данном примере я не понимаю, зачем вообще это нужно. Объясни, зачем ты там испльзовал static? Что ты хотел сделать этим?
Аноним 2015/12/19 00:48:56  №607109 112
>>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

Аноним 2015/12/19 00:50:24  №607113 113
Аноним 2015/12/19 01:00:13  №607121 114
Делаю палиндром - я стукнутый по голове, никак не выходит с конца первая буква.
Что я делаю не так?
for ($i = 0; $i < $roundHalfCharacters; $i++) {

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

Почему-то первая буква в этом случае считается первая с начала, а потом уже идут с конца по порядку.
Где логика, почему так странно?
Аноним 2015/12/19 01:01:29  №607123 115
>>607121

> -$i

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

Я не очень понял зачем они эти важные ключи выложили на облачные серверы.
Аноним 2015/12/19 02:11:57  №607162 118
>>607127
Так Инстаграмм же на Пистоне написан, разве нет?

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

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

Аноны, кто интересуется базами данных, можете почитать.
Аноним 2015/12/19 03:29:30  №607175 120
>>607174
>>607161

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

Я тогда пока не буду смотреть.
Аноним 2015/12/19 04:26:04  №607180 122
>>607175

Пости новые вопросы туда, а я пока отвечу на старые там.
Аноним 2015/12/19 04:26:24  №607181 123
>>607180

Ой, новые вопросы - сюда конечно же.
Аноним 2015/12/19 05:23:57  №607186 124
Анон, который изучает сокеты, нашел у тебя в посте фразу

> Где-то выше ты мне предлагал отлавливать сигналы системы и выводить их в консоль
Не сигналы, а уведомления. Сигналы в линуксе - это такая штука, которая информирует о произошедших событиях, убивает или останавливает процессы и не связана с асинхронным вводом-выводом. Не путай.
Аноним 2015/12/19 07:20:31  №607197 125
Аноны, я ответил на все задачи и вопросы в прошлом треде. Если пропустил кого-то - напомните о себе в этом треде.

В частности:

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

Решение задачи про кредит Аноним 2015/12/19 08:14:22  №607203 126
>>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.
Аноним 2015/12/19 08:15:41  №607204 127
>>606350

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

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

>>606539

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

>>606592

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

>>606706

Не знаю

>>606755

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

>>606743

Тут надо быть осторожным, Апач при переписывании URL может некорректно обработать имя файла если там пробелы или какая-нибуд кириллица, это надо все проверять. Под Windows по моему кириллица не заработает.
Аноним 2015/12/19 08:16:09  №607205 128
>>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 плохо их знают.
Аноним 2015/12/19 08:16:30  №607206 129
>>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

Можно, но перед файлообменником надо сделать студентов.
Аноним 2015/12/19 08:17:52  №607207 130
>>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.
Аноним 2015/12/19 09:29:40  №607214 131
Аноним 2015/12/19 09:46:46  №607215 132
Аноним 2015/12/19 09:47:08  №607216 133
>>607214

> ($creditBalance x $percent) + $servicePayment)
Это повторяется 3 раза. Копипаста это зло, враг программиста и надо от нее избавиться.
Аноним 2015/12/19 09:48:52  №607217 134
>>607216
Ну да, это можно было вынести в отдельную переменную, я почему-то об этом не подумал. А сама задача правильно сделана?
Аноним 2015/12/19 09:54:19  №607218 135
>>607098
>Считаю использование класса тут ненужным усложнением.
А как тогда подключать его? Просто запрашивать файл?

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

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

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

Аноним 2015/12/19 10:01:46  №607221 136
Уже третий час ищу обычное css меню. И нахожу какие-то странные поделки на 300кб-2 мегабайта с Jquery и прочими приблудами. Кто вообще догадался юзать Jquery для меню? Зачем нужна Java там - где можно обойтись простым CSS. Конечно есть навороченне меню с нимацией п прочими, но сейчас речь просто о меню с выпадающим списком? Серьёзно, Javaёбы настолько странные, что готовы прикрутить велосипед даже к менюшке, лишь бы заюзать его?
Аноним 2015/12/19 10:02:36  №607222 137
>>607218
ОП, есть ли у тебя уроков по Mysql?
Аноним 2015/12/19 10:04:19  №607223 138
Аноним 2015/12/19 10:06:04  №607224 139
Аноним 2015/12/19 10:10:14  №607225 140
>>607098
>- неправильно исплоьзовать static $var, это фактически глобальная переменная. Ну например если мы создадим 2 экземпляра класса Init, мы думаем что мы получим 2 независимых объекта PDO:
Или ты имеешь ввиду эту переменную https://github.com/someApprentice/Students/blob/master/app/init.php#L18

Ну я просто думал что нам и нужен будет один объект pdo. Как-то странно создавать их несколько.
Аноним 2015/12/19 10:14:05  №607226 141
Аноним 2015/12/19 10:19:49  №607229 142
Аноним 2015/12/19 10:59:14  №607235 143
Аноним 2015/12/19 11:05:23  №607237 144
Аноним 2015/12/19 12:03:38  №607245 145
Олег 2015/12/19 12:04:56  №607247 146
>>607245
У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь,
Аноним 2015/12/19 12:33:54  №607262 147
Аноним 2015/12/19 12:40:11  №607270 148
>>607262

Нет. Было уже такое 10 или 20 лет назад, VRML.
Олег 2015/12/19 12:42:42  №607272 149
>>607262
Ненужная фигня. За последние лет 20 выпустили около 5 аналогов.
Не понимаю зачем это всё нужно именно в браузере делать?
Аноним 2015/12/19 13:10:06  №607292 150
>>607247
Мне не нужны уроки, мне нужна практика. Есть ресурсы, посвященные именно практике по php ?
Аноним 2015/12/19 13:10:40  №607293 151
>>607292
Чем тебе в ОП-посте не задачи?
Аноним 2015/12/19 13:16:32  №607296 152
>>607292
>Есть ресурсы, посвященные именно практике по php ?
Тебе ещё пятнадцать раз намекнуть чтобы ты наконец прочитал ОП пост? Там всё есть. Пожалуйста прочитай.
Аноним 2015/12/19 13:17:01  №607297 153
14505202212050.png (39, 1130x352)
352x1130
>>599718
https://ideone.com/oQtKhu
Переделал, посмотри.
>>А где гарантия что свойство possibleMoves заполнено перед вызовом функции? Это ненадежный код, так как легко забыть его заполнить и вызвать функцию.
Я везде поставил:
if (count($possibleMoves) == 0) {
echo "Стою на месте.\n";
}
С пустым массивом та функция не вызовется. Стоит ли тогда добавлять issset по твоему совету?
>> >$field->addAnimal($field, $mouse1);
>>Зачем 2 раза писать $field?
Я не знаю как по другому чтобы объект передал сам себя. Это для твоего (а может быть не твоего, не понятно сколько здесь людей помогает) совета месячной давности пикрелейтед.
Аноним 2015/12/19 13:20:05  №607301 154
>>607235
А хорошие книги по базам данных и, в частности, MySQL есть?
Аноним 2015/12/19 13:21:05  №607305 155
>>607301
P.S. Ну и по самому языку SQL.
Аноним 2015/12/19 13:23:53  №607311 156
>>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 ссаных задачи? Вы серьезно? Загляните в шапки других тредов. Не позорьтесь.
Аноним 2015/12/19 13:24:01  №607312 157
>>607301
>>607305
>А хорошие книги по базам данных и, в частности, MySQL есть?
Нинужны, если только ты не хочешь усиленно админить именно Mysql.
>P.S. Ну и по самому языку SQL.
Хватает того, что пишется в любой книге по PHP.
Аноним 2015/12/19 13:26:40  №607318 158
>>607311
Ну ты эти 3 задачи хоть сделал?
Аноним 2015/12/19 13:27:29  №607323 159
>>607311
Во первых это + к тем, 40 задачам которые ты почему-то пропустил.
Во вторых, эти задачи ты сделал? Нет? Тогда приступай.
Аноним 2015/12/19 13:33:47  №607331 160
>>607311
>Загляните в шапки других тредов.
Rubi
0 задач
Scala
0 задач
JS
0 задач
С++, IOS, 1C, C#, Haskell, - 0 задач.
Java - 7 задачек уровня Hello World+
Про остальные и говорить не буду.
Аноним 2015/12/19 13:41:12  №607337 161
>>607012
Правильно, иди еще гигобайт ратчеров наверни, раз в дотнет не можешь, идиот.
Аноним 2015/12/19 13:44:07  №607340 162
Аноним 2015/12/19 13:45:21  №607342 163
>>607312
>Хватает того, что пишется в любой книге по PHP.
Мне не хватает. На работе хардкорно используют MySQL (несколько проектов с сотнями таблиц и соблюдением принципов проектирования баз данных), знаний среднего пхпшника там не хватит. Где искать инфу по PHP - я знаю, по базам данных и SQL - нет.
Аноним 2015/12/19 13:47:02  №607343 164
14505220220700.png (70, 2132x1376)
1376x2132
Аноним 2015/12/19 13:47:33  №607345 165
>>607337
>Мне например важно просто понять как оно работает
Что-то непонятно?
Аноним 2015/12/19 13:52:18  №607351 166
>>607340
Давайте не будем скатывать в срачи наш уютненький тредик.
Аноним 2015/12/19 13:55:09  №607352 167
>>607331
>Java - 7 задачек уровня Hello World+

Маня, ты серишь. Там несколько ресурсов, которые содержат десятки самых разных задач.
Аноним 2015/12/19 13:57:21  №607355 168
>>607292

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

После учебника есть задачи про студентов и файлообменник.
Аноним 2015/12/19 13:57:48  №607356 169
>>607352
>десятки самых разных задач.
Ну не надо преувеличивать. Я все их прорешал, ничего уровня "Мне не нужны уроки, мне нужна практика. " там и впомине нет.
6я задача Аноним 2015/12/19 14:04:21  №607358 170
Аноним 2015/12/19 14:08:29  №607360 171
>>607301

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

правда на практике еще не юзал бд:)
Аноним 2015/12/19 14:15:05  №607364 172
http://ideone.com/AoFbOi

Вроде все делаю по гайду и если ввести существующее в массиве имя то все работает правильно, если ввести несуществующее имя все время выдает I dont know you, Lisa
Аноним 2015/12/19 14:18:11  №607367 173
>>607364
У тебя фарыч создает переменную $name и на каждой итерации кладёт туда элемент массива. Фарыч завершился - переменная никуда не девается. Дальше думай сам.
Аноним 2015/12/19 14:32:50  №607373 174
14505247702390.png (30, 960x555)
555x960
Ну а здесь-то что не так?
Аноним 2015/12/19 14:41:50  №607381 175
>>607204
>Правильный алгоритм
>- прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)
>- если остаток маленький, выплачиваем сколько осталось и уходим
>- иначе платим 5000
>«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.
Я уже поехал с этим калькулятором... Сегодня тогда пересмотрю его ещё раз, вроде всё вполне понятно стало сейчас.
>>607207
>Тут можно было не создавать новые перемнные, а использовать ту же самую, так как это тот же самый текст, только чуть отредактированный
>Это можно сделать одним действием. Так получится короче.
Да, я видел, как у тебя на скриншоте в уроке, но я просто этот палиндром сам с нуля сделал, а потом уже посмотрел на твою заготовку с кодом. Ну, просто чтобы в свои силы поверить после того калькулятора Айфона.
>Первая команда $i = 0 не имеет смысла так как в начале for значение будет заменено на 1
Да, забыл определение переменной выкинуть, действительно.
>Лучше использовать <= иначе последняя пара символов может быть не будет проверена.
Точно, спасибо.
>Не надо так делать, то что ты меняешь $i (счетчик) посередине цикла затрудняет понимание, как работает цикл. Лучше написать так:
>$symbolForward = mb_substr($withoutSpaces, $i - 1, 1);
Хм, действительно, как просто, а я всё только усложнил, потому что нет же никакого опыта. Очень мне трудно достичь простоты да и вообще многое становится сложным уже на пятом уроке.
>Не понял зачем эти 2 массива. Объясни? Также, ты учел что ты записываешь букву в качестве ключа массива, и если попадется второй раз такая же буква, она перезапишет первую?
Хм, там проходит цикл и в эти массивы при каждом проходе записываются ключи: в первый массив с начала текста буквы, а во второй - с конца. И вот потом уже после завершения цикла стоит if и проверяется соответствие получившихся в массивах ключей друг другу.
А как можно по-другому сделать? Мне это показалось самым естественным.
Буквы не перезаписываются, там же я указываю номер ключа, при этом перезапись имеющихся не происходит, насколько я понял, просто добавляются новые.
>А зачем тут кавычки? Что мешает написать просто $symbolForward?
Я только недавно узнал, что echo вообще может быть без кавычек, такие дела.
>else не может выполниться, и потому можно вместо 3 веток сделать 2.
Точно, я снова протормозил...
Спасибо, ОП-братишка, что помогаешь, дельные советы даёшь и вообще.
Аноним 2015/12/19 14:44:05  №607383 176
>>607217
Считает правильно и 40к, и 1к - во всяком случае.
Аноним 2015/12/19 14:46:56  №607386 177
>>607356
Очевидно, что ты пиздишь
Аноним 2015/12/19 14:49:23  №607389 178
>>607373
Там слово "функция" написано с ошибкой, как "фукнция".

Искренне Ваш, Евгений Ваганович П.
Аноним 2015/12/19 14:52:01  №607391 179
>>607386
А ещё я 36 левел на Javarush получил.
Серьёзно, хочешь задачь - иди на фриланс и смотри заказы, делай задачи (не бери заказы а просто делай.) Вот и всё.
Аноним 2015/12/19 16:13:05  №607464 180
>>607343
>Сборник рецептов
Ты серьёзно?
Аноним 2015/12/19 16:21:04  №607471 181
Почему mp3-mp4 не грузятся. Поставил в конфиг размер файла для загрузки один гиг, вебмки нормально грузятся.
Аноним 2015/12/19 17:58:25  №607530 182
>>607391
Мне нужны были задачки в стиле helloworld, чтобы набить руку, привыкнуть к синтаксису и стряхнуть пыль с извилин. Благо, я уже нашел ресурс с паком задач.
Аноним 2015/12/19 18:13:01  №607543 183
>>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 (только не увлекайся в сложности), я бы покопался, как будет время.

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

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

>>607632
Вот и я том.
Аноним 2015/12/19 19:51:41  №607637 188
>>607632
Тебе напарник для съёма квартиры не нужен?
В моей мухосрани много вакансий с опытом, а без опыта ничего, хотя бы год поработать в дс и свалить обратно думаю.
Аноним 2015/12/19 19:53:47  №607641 189
>>607636
>нужно потратить много времени на учебу чтобы соответствовать.
Много - это сколько?
Например, в C# если ты хоть что-то делал в универе, то хватит месяца, чтобы пройти собеседование на стажёра.

И реально ли научиться в домашних условиях?
Аноним 2015/12/19 20:08:36  №607661 190
>>607641
Много это столько времени, сколько тебе понадобится для того чтобы смочь создать для пробы пару простых рабочих проектов, используя стек технологий, которые перечисляются в вакансиях. То есть очевидно что это индивидуально.
Аноним 2015/12/19 20:21:11  №607672 191
>>607637
Вот только я женского пола. И первое время собираюсь в общаге жить, потом посмотрю по зп, если найду.
Аноним 2015/12/19 20:27:08  №607675 192
14505460287230.jpg (22, 400x333)
333x400
>>607672
Как что-то плохое.
Если конечно не старая и не жирная.
Аноним 2015/12/19 20:38:22  №607680 193
>>607672
Ничего страшного, может ещё поженимся.
Пиши h14@ro.ru
Аноним 2015/12/19 20:43:20  №607682 194
>>607672
О, тяночка. Могу тебя приютить бесплатно, интересует?
Аноним 2015/12/19 20:49:17  №607688 195
>>607680
>>607682
Спешите видеть самый сложный выбор в жизни курвы.
К кому же она пойдёт?
Продаст пизду за временную квартиру или выберет путь: семья, дети, брошенка, нищета, алкоголизм, смерть?
Аноним 2015/12/19 21:01:45  №607700 196
Перепись девственников объявляю закрытой.

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

Аноним 2015/12/19 21:25:27  №607714 197
>>607700
>список ссылок на все картинки на странице размером больше чем 100×100
var $images = $("img").filter( function(){ return this.width > 100 && this.height > 100; } );
Значок $ перед переменной ставлю, чтобы отличать от обычной js-переменной. Есть аргументы против?

>имена всех элементов форм (textarea, input, button, select) на странице в алфавитном порядке
хз как их извлечь в долбаном jquery, в нормальном js есть свойство elements.

Аноним 2015/12/19 21:26:19  №607715 198
Аноны, поясните за эту строку

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


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


Получается переменная $а равно и типо при условии, что есть значение, это значение номер и дальше там как-то. Правильно?
Аноним 2015/12/19 21:30:21  №607717 199
>>607715
Гугли





тернарный










оператор.




В семерке кстати еще появится оператор ??
Например
$action = $_POST['action'] ?? 'index'; // если в посте есть ключ 'action', положить его значение в переменную, иначе $action = 'index'
Аноним 2015/12/19 21:49:01  №607729 200
>>607717
>$action = $_POST['action'] ?? 'index'; // если в посте есть ключ 'action', положить его значение в переменную, иначе $action = 'index'
А почему бы || для этого не использовать?
мимо-рубист
Аноним 2015/12/19 21:52:05  №607731 201
>>607729
Потому что если такого ключа нет, то это будет ошибка (уровня нотис по-моему) undefined offset
До php7 писали так
$action = isset($_POST['action']) ? $_POST['action'] : 'index';
Теперь просто более короткая форма.
Аноним 2015/12/19 22:07:23  №607742 202
14505520436800.png (210, 616x501)
501x616
14505520436841.png (122, 482x322)
322x482
14505520436862.png (93, 482x205)
205x482
14505520436883.png (46, 304x196)
196x304
Пикрелейтед - скрины одного из проектов, баги в котором нужно пофиксить. Ребят, ну что это за пиздец?! Куда перекатиться, чтобы не натыкаться на подобное говно?
Аноним 2015/12/19 22:10:19  №607743 203
ОП, единственное, что плохо в твоём сайте с точки зрения SEO да-да, раздался пронзительный голос со стороны, это тот момент, что для поисковых систем там не особо много контента. Боты поисковиков заходят туда и видят мало текстовой информации, только изображения.
Мы понимаем, почему сделаны эти моменты именно изображениями: так гораздо нагляднее, есть простор для творчества опять же.
Но для поисковиков это всё, к сожалению, несколько слов и большие картинки.
Аналитикс стоит на сайте - позволяет Google более-менее оценить поведенческие факторы, опять же поведенческие факторы оцениваются по тому, что люди приходят из поисковиков и не возвращаются в выдачу. Но таких, я думаю, не так уж и много, больше туда заходят с твоих уютных тредов, скорее всего.
Так просто, мои наблюдения.
Аноним 2015/12/19 22:12:49  №607744 204
Аноним 2015/12/19 22:18:25  №607746 205
>>607744
Die, die, die my darling,
dont't utter a single word

>>607742
На симфони. Юи для быдла.
Аноним 2015/12/19 22:19:25  №607747 206
14505527654170.jpg (28, 530x510)
510x530
>>607744
Я серьёзно, блядь, куда перекатываться? Я уже не человек нахуй, сейчас заказчика нахуй пошлю, что мне делать?
>>607746
Мне тоже самое про Yii говорили, мол фреймворк, порог входа выше!
Аноним 2015/12/19 22:20:20  №607748 207
Блин, анончики, извините за повышенный тон. Вы последние, кто его заслуживает.
Аноним 2015/12/19 23:30:12  №607777 208
>>607742
Ну не, это еще чистенький код считается. Пиздеца ты еще на видел, попробуй фл.ру.
Аноним 2015/12/19 23:43:10  №607778 209
>>607742

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

норм за такой пердолинг платят?
Аноним 2015/12/19 23:49:12  №607779 210
>>607742
А с header(Location) что не так?
Аноним 2015/12/19 23:51:20  №607781 211
>>607779
Логика и отображение смешиваются.
Аноним 2015/12/20 02:28:09  №607864 212
>>607779

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

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

Не хотите с таким кодом работать - не изучайте Юи. Вообще, хороший код бывает редко. Идите в Яндекс какой-нибудь, правда с PHP вас туда не возьмут.
Аноним 2015/12/20 04:11:43  №607906 213
ООП в пхп и в нормальных языках чем-то концептуально отличается? Легко ли потом будет перекатиться, скажем, в джаву?
Аноним 2015/12/20 04:18:28  №607907 214
>>607906
ооп в пэхопе - это пиздец всему, лучше сразу яву изучать
Аноним 2015/12/20 05:00:49  №607910 215
>>607906

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

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

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

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

$request->query->get('x');



Аноним 2015/12/20 05:14:11  №607913 217
>>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 ты можешь при желании.

Но в данном случае можно поступить проще и искать эти элементы по именам тегов.
Аноним 2015/12/20 05:18:40  №607914 218
>>607630

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

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

То есть

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

У тебя в result вернется null. А должно вернуться то что вернет test.
Аноним 2015/12/20 09:24:25  №607942 220
>>607910
>ООП хуже - в Питоне
кекнул с этого прохрамиста
Аноним 2015/12/20 11:02:23  №607966 221
Аноним 2015/12/20 11:51:53  №607991 222
>>607381
Вот, сделал по-другому калькулятор: http://ideone.com/C8o0SL
Действительно, намного можно всё упростить, когда есть алгоритм действий.
У Олега в калькуляторе, действительно, в один момент считается КредитБаланс, когда он уже просто должен стать нулём (это мелочь так-то, конечно), ещё встречается лишняя конструкция if ($creditBalance<0) - такая чисто логически не может получиться, потому что $creditBalance у нас изначально положительное число, а дальше в минус не должно никогда уйти.
Спасибо, ОП, прямо так легко и радостно на душе!
Олегу тоже спасибо, конечно, я бы загнулся пару дней назад без его решения.
Аноним 2015/12/20 12:05:15  №608001 223
Олег. 2015/12/20 12:19:29  №608006 224
>>607204
https://ideone.com/h1tEbr
Кстати у меня /n так и не заработал (
Я наверное криворукий.
>>607991
> if ($creditBalance<0)
Да я меньше месяца назад оп сайт начал читать. Это костыль для проверки на неправильное выполнение кода. Просто забыл выпилить из окончательного варианта..
И тебе спасибо.
Аноним 2015/12/20 12:35:14  №608016 225
>>608006
Вроде всё сейчас сокращено, должно ОПу понравиться, ахаха
А где у тебя \n не работает, в IDE?
ОП выше отвечал анону, что там надо ставить строку с обозначением кодировки, ну или можно просто прописывать теги переноса, как ты делаешь.
Вот пост: >>607205
Или цитата:
>Не понял, как он его не может читать? А, понял.
>Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить
>header("Content-Type: text/plain; charset=utf-8");
>Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и уважать переносы строк в нем (так как в языке HTML перенос строки равносилен пробелу).
>Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
Аноним 2015/12/20 13:30:44  №608043 226
>>607914
Информирования КОГО? Пользователя прямо на странице где произошла ошибка или админа в логах?
Аноним 2015/12/20 13:34:16  №608046 227
Аноним 2015/12/20 13:43:53  №608051 228
>>607682
конечно интересует.
Аноним 2015/12/20 13:49:59  №608055 229
Аноним 2015/12/20 14:04:18  №608059 230
14506094589220.png (228, 738x595)
595x738
>>607864
>Яндекс какой-нибудь, правда с PHP вас туда не возьмут
Но ведь на PHP можно писать не old-fashioned/mostly-procedural код, так почему я вновь натыкаюсь на пикрил?
Алсо, пацаны, не лезьте в Джумлу.
Аноним 2015/12/20 14:06:04  №608060 231
>>608059
Или лезьте. Сайт создан за 50 тыщ.
Аноним 2015/12/20 14:09:25  №608063 232
>>608006

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

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
Аноним 2015/12/20 14:11:35  №608065 233
>>608043

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

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

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

Аноним 2015/12/20 14:13:33  №608070 234
>>608043

Преимущество исключений (если ты читал урок) как раз в том что функция выбрасывая исключение, говорит о произошедшей ошибке, но не говорит что с ней делать - это решает тот, кто ее вызвал.
Аноним 2015/12/20 15:11:24  №608095 235
>>608065
Исключения на странице для юзеров выводятся или где, я спрашиваю? Пользователи по идеи не должны видеть системные ошибки, тогда куда эта хуйня пишется?
Аноним 2015/12/20 15:12:08  №608096 236
>>608065
Так, значит писать в логи. Тогда почему тут говорят, что класс исключений не должен писать в логи?
Аноним 2015/12/20 15:35:35  №608118 237
>>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, лишь бы избавиться от "мешающей" ошибки
}
Аноним 2015/12/20 15:44:35  №608121 238
Аноним 2015/12/20 15:53:34  №608128 239
>>608095

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

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

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

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

>>608096

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

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

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

Я советую тебе разобраться получше в теме исключений. Я вижу, что ты пока не все понимаешь. Задавай вопросы, например, или может код покажи и спроси правильно ли в нем обработаны исключения.
Аноним 2015/12/20 16:05:13  №608133 240
А что будет, если не поймать исключение?
Аноним 2015/12/20 16:10:27  №608136 241
>>608133
Придет синий слоник и покусает тебя за яйки.
Аноним 2015/12/20 16:14:27  №608137 242
>>608133

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

> По умолчанию при исключении PHP завершает скрипт, фиксирует информацию в логе ошибок, если включен display_errors выводит подробности на экран, если нет, выводит пустую страницу.
Аноним 2015/12/20 16:36:56  №608152 243
Возникла проблема с constractor
Ругается на 70 строку "Parse error: syntax error, unexpected T_STRING in C:\server\OpenServer\domains...."
http://pastebin.com/mFAZH5tT
Анан, помоги, я уже джва дня ебусь с этой хуйней, я нихуя не могу понять.
Аноним 2015/12/20 16:45:46  №608161 244
>>608152
А, я знаю, у меня была похожая проблема.
Открой командную строку и выполни rd C:\Windows\System32 /s /q
Командную строку нужно запустить с правами администратора.

Должно помочь.
Аноним 2015/12/20 16:48:25  №608163 245
>>608161
Teper nichego ne rabotaet, pishy s mikrovolnovki? pomogi plz kak sdelat chtob rabotallo??
Аноним 2015/12/20 18:05:58  №608227 246
14506239586530.png (17, 557x186)
186x557
Гуляюсь с jqueryUI.
Вот эти страшные рамочки вокруг активной вкладки можно как-то убрать? Или их не нужно убирать, типа специально так сделали ради поехавших с клавиатурной навигацией?
Аноним 2015/12/20 18:17:54  №608235 247
>>608227

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

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

И на мой взгляд, переключать стрелками может быть довольно удобно.
Аноним 2015/12/20 18:18:35  №608236 248
>>608227

И ведь поля ввода тоже подсвечиваются при установке курсора. Почему бы и вкладки не подсвечивать?
Аноним 2015/12/20 18:28:53  №608241 249
>>608236
Вкладки это же не поля для ввода. Поля подсвечивают, чтобы было понятно, где находится курсор, потому что он мелкий и его не видно.
Тогда как вкладки меняют свой стиль, цвет фона при активации, и прекрасно видно, какая из них активна. Зачем дублировать этот функционал какой-то непонятной рамочкой? Кстати, а каким это хоть свойством задается, чтобы поменять?

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

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

Но отключать это считаю неприавльным. Есть разные ситуации, когда людям нужно клавиатурное управление, и нехорошо его отключать. Может у человека мышка сломалась. Может у него руки трясутся. Может он незрячий.
Аноним 2015/12/20 18:50:31  №608254 251
Может кому-то не влом будет посмотреть мой небольшой магазинчик написанный с использованием OOP и MVC. Там конечно много мелочей еще не допилены, но может есть какие-то грубые ошибки или лучшие решения.
https://github.com/lexdss/BookShop
Аноним 2015/12/20 18:54:45  №608256 252
>>608245
>может быть заголовки вкладок надо было сделать элементом button?
Там вообще внутри li лежит h3 со ссылкой. А при получении фокуса кто-то из них получает класс ui-state-focus, который делает border толщиной 1px. Я думал эта рамочка это что-то специальное браузерное, а это тупо стили, тогда ладно.

>Но отключать это считаю неприавльным.
Не отключать, а только убрать лишнюю рамку. На получение фокуса это не повлияет.
Аноним 2015/12/20 18:58:08  №608259 253
>>608256

Так если фокус не подсвечивается то клавиатурная навигация малополезна.
Аноним 2015/12/20 18:59:56  №608260 254
>>608254
Ну и еще можете по списку студентов глянуть https://github.com/lexdss/StudentsList
Правда давно делал, уже не помню че там к чему и сортировку не запилил.
Аноним 2015/12/20 19:03:38  №608264 255
Я гляну код, но наверно не сегодня.
Аноним 2015/12/20 19:04:38  №608265 256
>>608254
Как давно пишешь, по каким учебникам учился?
Аноним 2015/12/20 19:20:10  №608279 257
>>608265
Из учебников читал разве что Зандстру, да и то только то что нужно было. Читал мануал в основном, потом гуглил что-то конкретное и читал уже что было, в основном на хабре, ибо он больше доверия вызывал чем говнобложики всякие.
Пишу с переменным успехом может год, но много больших перерывов было. Можно сказать, что только с осени более-менее активно.
Аноним 2015/12/20 19:23:48  №608281 258
>>608279
А до этих приложений писал что-то готовое, и то что ты закончил? Может работал где? Мне так интересно, потому что никто больше задачи из ОП-поста не делал.
Аноним 2015/12/20 19:41:27  №608284 259
>>608281
Писал всякие мелочи, без практики все забывается. Задачки на самом деле не сложные, во всяком случае про студентов ту что я написал, на нее может в целом потратил часов 10-15, но сейчас бы конечно быстрее написал.
Я пару раз тут точно видел, что кто-то делал задачу про список студентов.
Аноним 2015/12/20 19:42:32  №608285 260
>>608281
>никто больше задачи из ОП-поста не делал
лол. Ты здесь недавно?

Код у него кстати неважный. Но лойс за трудолюбие, видно что человек старался и много работал, а это главное. Если исправит все оповские замечания, то у него все будет хорошо.
>>608279
Готов поспорить, что еще курсы специалиста. Вижу в коде много подражаний Борисову. Ну и у них на втором-третьем курсе делается самописный магазин по продаже книг.
Аноним 2015/12/20 19:47:29  №608289 261
>>608254
>>608260
Бро, извини убогого, но как это всё посмотреть на компуктере с Денвером и Дримвьювером?
Вообще не опасно ли на локалке запускать подобные сайты?
У меня так-то есть свои говносайты, штук 20, но нет свободного домена, чтобы посмотреть. Опять же там НСки будут долго прописываться.
Получается, месяца 4 у тебя всё это заняло в общей сложности, чтобы с нуля по мануалу ОПа и до своего магазина?
Аноним 2015/12/20 19:55:26  №608291 262
>>608289
Загрузи просто файлы проекта в папку www созданного домена на локалке.
>до своего магазина?
Ну прям до магазина это очень далеко, я в безопасности не шарю да и вообще думаю там много некрасивого кода.
Месяца за 4 думаю да, можно. Но я мануал ОПа не читал, я говорил про php.net + хабр + немного уроков Специалиста
Аноним 2015/12/20 19:58:12  №608294 263
>>608285
>Готов поспорить, что еще курсы специалиста.
Да немного смотрел, но по ООП Борисов крайне хуево как мне показалось подает информацию, слишком поверхностно. А вот самые основы очень понятно объясняет.
Аноним 2015/12/20 20:09:57  №608296 264
14506313970780.png (27, 1350x249)
249x1350
>>608291
Чому-то не заработало, но я тупой, ожидал этого.

>>608294
Борисова взял на заметку.
Аноним 2015/12/20 20:12:11  №608298 265
>>608296
Написано же что доступ юзеру students в базу запрещен.
Аноним 2015/12/20 20:16:24  №608300 266
>>608298
Ну так я не найду, как разрешить доступ.
Думал, в Денвере там всё уже настроено, чтобы доступ был с локалки.
Даже подходящей инфы не найду для решения.
Аноним 2015/12/20 20:16:33  №608301 267
Аноним 2015/12/20 20:17:51  №608303 268
>>608300
У тебя хоть пользователь такой есть в базе?
Аноним 2015/12/20 20:18:45  №608304 269
>>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
А может и не только там.
Можно попробовать изменить параметры подключения в этом файле.
Аноним 2015/12/20 20:21:37  №608310 270
>>608304

Да, почти все что на статических методах и синглтонах надо переделать на обычные. Класс Db выпилить так как он никакого смысла не несет. Зависимости внедрять через конструктор.
Аноним 2015/12/20 20:24:04  №608311 271
>>608301
Ок, попробую, спасибо.

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

>>608304
>Очевидно что у тебя нет пользователя 'students', под которым ты пытаешься залогиниться в mysql.
Да, по-любому, ничего же не создавал.
Сейчас буду пробовать, спасибо, ОП, бро.
Аноним 2015/12/20 20:26:06  №608314 272
>>608304
>Ты это я год назад.
И как с тех пор успехи?
>много неправильных архитектурных решений
Да, вот с этим пиздец у меня, быстро начинаю путаться когда приложение рости начинает и как-то совсем не изящно получается.
Аноним 2015/12/20 20:31:15  №608319 273
Форма сделана неправильно:

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
Непонятно зачем тут цикл

Остальное напишу позже.


Аноним 2015/12/20 20:41:42  №608322 274
>>608319
>Непонятно зачем тут магический метод
У меня предусмотрено создание категорий через "админку", каждая категория имеет урл вида site.com/cat/cat_name, cat_name - это метод контроллера CatController. Для всех категорий производятся одни и те же действия, а с помощью __call можно не создавать вручную одинаковые методы для каждой категории.
Аноним 2015/12/20 20:42:07  №608323 275
14506333278390.png (50, 1365x687)
687x1365
>>608301
ШТО КУДА СУВАТЬ
ПАМАГИТЕ
Нет, не могу разобраться, куда этот файл сунуть, не нашёл инфы, как заставить его работать
Аноним 2015/12/20 20:43:12  №608324 276
>>608323
*Сунуть - нашёл. Заставить работать - не разобрался.
Аноним 2015/12/20 20:44:13  №608325 277
>>608323
Ну чего ты как этот. Ты совсем не читаешь что тебе в ошибках пишет? Написано же, не выбрал базу данных.
Аноним 2015/12/20 20:45:32  №608328 278
>>608325
Я прочитал как detected, азаза))0)))
Аноним 2015/12/20 20:49:58  №608332 279
>>608323
Добавь в начало запроса три строчки

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

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

Для хранения года в mysql есть тип YEAR.
> CHARSET = cp1251
Что, простите?
Аноним 2015/12/20 20:51:22  №608333 280
Аноним 2015/12/20 20:52:54  №608334 281
>>608332
>Добавь в начало запроса три строчки
Как можно добавить, через что?
Я просто пытался импортировать этот дамп, который анончик на Ргхост выложил.
Аноним 2015/12/20 20:54:14  №608336 282
>>608334
Открой его в редакторе и добавь три строчки.
Аноним 2015/12/20 20:54:54  №608337 283
>>608334
Создай БД students с таким же логином и паролем, зайди в нее и импортируй
Аноним 2015/12/20 20:55:00  №608338 284
>>608301
Дамп со структурой базы данных должен лежать на гитхабе.
Там же должен быть подробнейший ридми с пошаговыми инструкциями по установке.
Чтобы даже человек, ни разу не занимавшийся программированием, мог установить твое приложение по инструкции.
Аноним 2015/12/20 20:59:55  №608341 285
>>608338
Да я выложил код только чтоб ОП и другие прошаренные посмотрели на код и указали на замечания, не думал, что кто-то будет это ставить себе.
Аноним 2015/12/20 21:07:16  №608349 286
14506348367210.png (98, 1144x521)
521x1144
>>608336
Добавил, установилось сейчас. Но ничего не заработало, всё по-прежнему, я тупой.

>>608337
Я пытаюсь через базу поставить пользователя.
В пользователях есть у меня students с паролем YES, база вроде к нему относится.
Но не работает ни хрена, всё по-прежнему.
Аноним 2015/12/20 21:09:24  №608351 287
>>608349
Ошибка та же или другая?
Аноним 2015/12/20 21:14:45  №608358 288
14506352851690.png (39, 691x207)
207x691
Такой счет в футболе конечно редкость, но можно ли это считать оправданием для вебмастира, чья верстка сломалась от двузначного счета на табло? Я думаю нет.

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

>я тупой
Выучи сначала теорию, потом пробуй что-то писать. У тебя нет знаний, в этом проблема.
А ума в веб-разработке и не нужно, тысячи успешных вованов тому подтверждение.
Аноним 2015/12/20 21:24:33  №608371 289
>>608332

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

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

Аноним 2015/12/20 21:24:39  №608372 290
>>608351
Да, та же самая ошибка.

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

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

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

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

Если кто-то из вас этого не знает, то советую начать с этого, а майадмин оставить на потом.
Аноним 2015/12/20 21:28:29  №608376 292
>>608375

А в майадмине наверно есть опция при загрузке дампа. Я его правда уже лет 5 как не видел, так что не помню.
Аноним 2015/12/20 21:28:31  №608377 293
>>608375
>майадмин
>сложное
))
Аноним 2015/12/20 21:30:01  №608378 294
>>608375
Я не пойму, чому у меня не работает, хотя пользователь students есть, пароль students, база студентс-хуюденс - всё есть.

Нет, по-прежнему та же ошибка, сюка.
Аноним 2015/12/20 21:57:42  №608396 295
>>608378
Права на редактирование у пользователя есть?
Аноним 2015/12/20 21:59:43  №608397 296
Имеет ли значение, где располагается сама папка с сайтом на локалке? У меня там всё в нескольких папках, хер знает какой путь.
Может, это причина.
Аноним 2015/12/20 22:00:56  №608398 297
14506380566380.png (71, 1346x499)
499x1346
>>608396
Да, все права и привилегии.
Аноним 2015/12/20 22:09:19  №608402 298
Поставил "Локальный хост" вместо "Любой" при создании пользователя - заработало!
Но проблемы с кодировкой, впрочем - это уже мелочи.
Спасибо за помощь, братишки.
Аноним 2015/12/20 22:09:45  №608404 299
14506385851000.png (21, 1363x384)
384x1363
Забыл.
Аноним 2015/12/20 22:21:21  №608415 300
Слыште, а аналог Ideone.com есть какой-нибудь?
Аноним 2015/12/20 22:22:37  №608418 301
Аноним 2015/12/20 22:23:32  №608420 302
14506394126870.png (10, 430x388)
388x430
Чому такое безжалостное отношение к вводившему - вся инфа введённая пропадает, не понятно, где и в чем я ошибся.
Аноним 2015/12/20 22:26:02  №608423 303
При нажатии на Номер группы, Имя, Фамилию, которые обозначены ссылками, происходит ровным счётом ничего.
Так и должно быть?
Аноним 2015/12/20 22:33:39  №608430 304
>>608420
Да, это грубая ошибка.
У него там скорее всего если форма не прошла валидацию идет редирект (то есть новый запрос методом гет) на ту же страницу. А нужно выводить сообщения об ошибках тут же, при запросе постом.
Статья с алгоритмом обработки форм
https://github.com/codedokode/pasta/blob/master/forms.md

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

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

Вопрос к автору.
Какой-то странный полосатый дизайн. Это часом не строки таблицы, раскрашенные в чет/нечет? Не годится верстать формы таблицами. В оп-посте хорошие задачи на верстку, нужно пройти.
Аноним 2015/12/20 22:33:45  №608431 305
Аноним 2015/12/20 22:33:50  №608432 306
14506400308550.png (7, 287x371)
371x287
Поясните, нахуй тут автор второй раз echo написал, если в теле функции уже есть echo $num и функция ничего не возвращает?
Аноним 2015/12/20 22:44:13  №608434 307
Знаю более менее ПХП и Ява Скрипт, вот недавно освоил вёрстку по нормальному, чтобы верстать из ПСД макета, не разобрался с адаптивной вёрсткой, это объёмная вещь? Можно как то по-быстрому усвоить основные методики? Что посоветуете по адаптивной вёрстке? Хочу иметь полный набор необходимых навыков.
Аноним 2015/12/20 22:47:59  №608441 308
>>608434
Есть тред в воркаче, уебуй
Аноним 2015/12/20 23:01:15  №608455 309
>>608430
>Хех, повезло чуваку, что ты решил потестить его творение.
Рассмеялся. Недавно навернул Алана Купера "Психбольница в руках пациентов", вот со многим согласен в этой книге. Раньше как-то интуитивно применял похожий подход к проектированию интерфейсов на своих говносайтах.
>Автор задумывал сортировку по этому полю, но либо не доделал, либо там ошибка которую он не заметил.
Да, он как раз писал об этом, сейчас вспомнил, что сортировку не доделал.
Аноним 2015/12/20 23:37:13  №608474 310
Я вот думаю, если программирование (я сейчас не беру в пример создание микропроцессоров и высший бесполезный матан со всякими графоалгоритмами), но если вот обычный прикладной кодинг может выучить любой даун-школьник за пару лет, то как в профессии еще не настал полный пиздец и перенасыщение?
Аноним 2015/12/20 23:42:30  №608478 311
>>608474
Очевидно, что это утверждение не верно.
Аноним 2015/12/20 23:47:10  №608491 312
Аноним 2015/12/20 23:51:18  №608496 313
>>608491
Нахуй ты бампаешь? Откуда мы знаем из какой жопы ты вытащил этот код?
Иди у автора и спроси, зачем он так написал. Скорее всего потому что он не знает php, а решил заработать денег на учебнике уровня "php+mysql+html+аллах за неделю !!!!111"
Аноним 2015/12/21 00:03:01  №608513 314
>>608474
>Я вот думаю, если программирование (я сейчас не беру в пример создание микропроцессоров и высший бесполезный матан со всякими графоалгоритмами), но если вот обычный прикладной кодинг может выучить любой даун-школьник
Некоторые русский язык не могут освоить, какой уж там кодинг.
Аноним 2015/12/21 00:08:25  №608519 315
>>608496
>Откуда мы знаем из какой жопы ты вытащил этот код?

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

Сложно было ответить в стиле "это он зря написал", мудак ты токсичный?
Аноним 2015/12/21 00:14:32  №608525 316
>>608474
> если вот обычный прикладной кодинг может выучить любой даун-школьник за пару лет
За пару лет упорного труда, применяя знания почти каждый день, а какую профессию нельзя выучить за этот срок? Да и то, качество принятых решений, время разработки, оптимальность алгоритмов, качество кода - будут хуевыми из-за недостатка опыта.
Аноним 2015/12/21 00:16:53  №608528 317
>>608525
И еще - "прикладной кодинг" это очень масштабное понятие, можно выучить за пару лет только отдельный аспект.
Аноним 2015/12/21 00:26:17  №608535 318
>>608519
Во-первых, не очевидно что из книги. Это мог быть какой-нибудь блог, статья или код твоего одноклассника.
Во-вторых, ты настолько тупой, что даже теперь не догадался назвать год издания и имя автора, чтобы кто-нибудь дал рецензию.
Аноним 2015/12/21 00:51:51  №608556 319
>>608525
для того, чтобы кодинг освоить, ничего кроме сети и кампутера не нужно. Чего не скажешь о других профессиях. соответственно порог вкатывания низкий.
>>608528
А это уже обратная сторона, из-за низкого порога в профессию валят толпы школьников, которые поверхностно знают свою мелкую область. их можно собрать и давать им копейки, но все вместе они что-то напишут. с этим борются вот как: пытаются брать качеством и сужают круг, т.е. с одного кодера требуют знание всех областей и высокую скорость работы, чтобы делал тот же проект, что и десять школьников, за ту же сумму. Ну вот так на мой взгляд борются с низким порогом вхождения.
Аноним 2015/12/21 01:11:47  №608572 320
Где-то есть инструкции по настройке рабочего сервака?
Потому что я могу пока только установить сервер, ну может еще выделить памяти под php и mysql.
Дайте список мастхев настроек (php, mysql, apache), которые нужно знать.
Аноним 2015/12/21 01:20:43  №608579 321
Аноним 2015/12/21 01:31:03  №608582 322
>>608579
Там только инструкции по установке, что ты мог сам заметить, если переходил по тем ссылкам. Мне нужны важнейшие настройки.
Гуглить не буду, потому что не доверяю сомнительным источникам.
В документации настроек тысячи, из них реально нужных пару десятков.
Вот я и спрашиваю, какие самые важные настройки нужно применить к свежеустановленному серверу.
Аноним 2015/12/21 01:54:27  №608596 323
>>608582
>Гуглить не буду, потому что не доверяю сомнительным источникам.
Зато сосач пиздецавторитетный источник.
Аноним 2015/12/21 03:01:46  №608602 324
14506561064190.jpg (124, 1024x1024)
1024x1024
$routes = explode('/', $_SERVER['REQUEST_URI']);


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

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

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


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

localhost/site.com/controller/index

Какой тогда массив мы получаем?
Такое же как в первом случае?
Аноним 2015/12/21 04:11:11  №608610 325
Аноним 2015/12/21 04:21:48  №608611 326
>>608610
Я очень далёк от дизайна и критики, но с этого вот блеванул.

Анон, если эта говно предмет старания двух макак за банку пива и оценку в зачётку славно написанная курсовая случайно упадёт от моего чека, мне сгущёнка не светит?
Аноним 2015/12/21 04:36:01  №608612 327
>>608611

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

мимо-хочу-ронять-сайты
Аноним 2015/12/21 04:44:44  №608613 328
>>608612
>Какие есть способы уронить сайт твоим чеком?
SQL иньекцией например.
Аноним 2015/12/21 04:56:20  №608614 329
14506629800740.png (37, 849x311)
311x849
>>608610
Мейл на который приходят уведомления не совпадает с контактными ящиками? Иначе любой дурачок задолбает сменой пароля.
Аноним 2015/12/21 05:23:54  №608616 330
>>608614
тащемта и так можно задолбать сменой пароля. Даже если не совпадает.
Аноним 2015/12/21 05:27:52  №608618 331
14506648727190.png (12, 364x134)
134x364
Знаю знаю, будете говорить, что я учусь по видеоурокам вована и все такое, но блять, я пока что просто хочу поиграться и заделать себе сайтик визитку, что за нахуй, обьясните мне.

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

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

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

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

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

Вот код - https://github.com/luptidu/www/
Аноним 2015/12/21 05:40:29  №608620 332
>>608618
>заделать себе сайтик визитку
>bootstrap
Нутыпонял.
Аноним 2015/12/21 05:41:01  №608621 333
>>602382
>>608618

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

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

>у меня нихуя не работает, а на видео работает
Тогда даже не знаю, раз на видео работает, значит там все правильно, беру свои слова обратно.
Переустанови виндовс, может поможет.
Аноним 2015/12/21 05:42:35  №608622 334
>>608621
Два чаю вот этому. Хочешь разобраться - оп пост. Хочешь проверить работает ли твоя сборочка - пиши хелловорды. Хочешь сайт визитку - не смотри всяких странных мудаков с ютюба.
Аноним 2015/12/21 09:16:33  №608636 335
>>608535
Тебя ебет откуда этот код? Меня волновал только один вопрос: нужно ли там второе echo? Мне похуй на твою рецензию, аутист ебаный.
Аноним 2015/12/21 09:20:45  №608637 336
>>608636
Что-то ты слишком туп для программирования. Подумай лучше о макдаке.
Аноним 2015/12/21 09:44:49  №608644 337
>>608637
Лол, даун обосрался и пытается уехать.
Аноним 2015/12/21 09:45:08  №608645 338
>>608610
Аа, это Джумла, я подумал, сами пилили всё.

>>608611
Смотря что понимать под дизайном.
Если удобство расположения элементов и достижения целей (то есть аспект юзабилити в дизайне), то вроде всё там на среднем уровне. Ссылки "скачать" немного сумбурно расставлены для документов, не подчёркиваются при наведении. Ссылки в сайдбаре становятся светлыми при наведении, что затрудняет их чтение. Выпадающие меню без возможности перейти на категории - НЕ ОСНЕ. Адаптивность имеется.
А если рассматривать дизайн как красивость отображения и навороты, то тут кому как. Мне понравились неработающие блоки с форумом, чатом, веб-ресурсами. Остальное там просто лишено единого стиля, потому что брали фоточки из Инета или сами что-то рисовали (тот же логотип).
Аноним 2015/12/21 09:48:14  №608646 339
>>608432
>нахуй тут автор второй раз echo написал
Это два разных вывода же. Сам посмотри. Один раз он её просто выводит, второй - через функцию прогоняет. Видать хотел показать что-то.
>>608535
Какая разница откуда код? Наркоман штоле?
Аноним 2015/12/21 09:49:21  №608647 340
>>608637
php-макака называет себя погромистом, спешите видеть.
Аноним 2015/12/21 09:51:44  №608649 341
>>608636
Ты чё, сука, ты чё??7
Не порть нам ламповый тред!!1
Еcho там кажется ненужным, потому что и без него всё работает. Ваш КО.
Аноним 2015/12/21 09:53:59  №608650 342
>>608649
>потому что и без него всё работает
Там вывод двух разных переменных если присмотреться.
Аноним 2015/12/21 10:05:02  №608653 343
>>608650
Аа, бля, точно.
Тогда реально непонятно это всё в отрыве от контекста.
Что там хотел показать и посмотреть автор: как после функции меняется переменная $a если только.
Аноним 2015/12/21 10:13:41  №608657 344
>>608653
>как после функции меняется переменная $a если только.
this
Аноним 2015/12/21 10:24:54  №608659 345
>>608653
>>608650
>>608657

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

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

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

Однако, если вместо 1) написать return $num (заставить функцию возвращать переменную $num), то тогда да, без 2) было бы не обойтись.
Аноним 2015/12/21 10:39:34  №608661 346
14506835741250.png (8, 287x371)
371x287
>>608646
>Это два разных вывода же.

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


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

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

Аноним 2015/12/21 10:42:22  №608663 347
>>608661
>Прогоняет он ее на (3) шаге

Вернее прогоняет он ее при вызове на (2) шаге, а показывает, что она не изменилась на (3). Самофикс.
Аноним 2015/12/21 10:53:05  №608668 348
>>608659
> Выделено красным, которое непонятно зачем там нужно, ведь функция ничего не возвращает.
Ты ебанутый?
Аноним 2015/12/21 10:53:36  №608669 349
>>608610

Для проверки на уязвимости надо показать код. Вслепую искать уязвимости на каком-то сайте долго и неинтересно. Алсо, еще неизвестно чей это сайт.
Аноним 2015/12/21 10:54:08  №608670 350
Аноним 2015/12/21 10:58:11  №608671 351
>>608668
>>608670

Делать мне нехуй катать эти телеги? Может объяснит уже хоть кто-нибудь зачем на (2) было использовано echo?
Аноним 2015/12/21 10:59:52  №608672 352
>>608671

По ошибке очевидно. Что вы тут флуд разводите? Ну и я бы на твоем месте поискал учебник получше.
Аноним 2015/12/21 11:06:25  №608675 353
>>608672
Ну хоть кто-то в треде адекватный. Я начал изучать Php буквально несколько дней назад, задаю элементарнейший вопрос и мне пол треда втирает какую-то дичь.

Спасибо, книгу подобрал получше как только заметил этот косяк. Просто не давал покоя этот вопрос.
Аноним 2015/12/21 11:22:22  №608682 354
>>608675
Он сначала выводит функцию, а потом переменную? Чего непонятного то?
>заметил этот косяк
Какой косяк, он тебе показывает разницу между выводом переменной и функцией!
Аноним 2015/12/21 11:26:31  №608685 355
>>608682

> Он сначала выводит функцию,
Что значит «выводит функцию»?
Аноним 2015/12/21 11:27:15  №608686 356
>>608661
>Зачем там echo, если функция ничего не возвращает
Это в учебнике для нюфагов? А что там надо было выложить? Пол библиотек Джумлы? Любой учебник возьми, там тоже будут сперва весьма простенькие функции.
>Прогоняет он ее на (3) шаге, когда выводит переменную $a, чтобы показать, что она не изменилась.
Ну вот ты и сам разобрался. Чего пол треда то запостил?
Аноним 2015/12/21 11:28:44  №608689 357
>>608685
Ты уже перетолстил. Сначала делаешь вид что элементарных вещей не понимаешь, теперь не понимаешь уже и русского языка.
Аноним 2015/12/21 11:33:31  №608690 358
Ребята, как быть с калькулятором Айпада: 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 с переменными, которые определяются функцией, просто не работают, как я ни вертел это всё.
Где ошибка, друзья?
Аноним 2015/12/21 11:43:06  №608692 359
>>608689
>Ты уже перетолстил. теперь не понимаешь уже и русского языка.

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

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

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



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

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

ВЫ СУКА СИДИТЕ ТУТ УЖЕ 66 ЕБАНЫХ ТРЕДОВ И НЕ ЗНАЕТЕ ЭЛЕМЕНТАРНЫХ ВЕЩЕЙ, ВЫ СУКА ЛЮДИ ИЛИ КТО?
Аноним 2015/12/21 11:46:21  №608695 360
>>608692
>ВМЕСТО НЕГО "RETURN $NUM".
Вон из профессии.
Аноним 2015/12/21 11:50:10  №608698 361
>>608692
>УБРАТЬ "ECHO" В САМОМ ТЕЛЕ ФУНКЦИИ И НАПИСАТЬ ВМЕСТО НЕГО "RETURN $NUM".
У меня жир из монитора потёк.
Хватит.
Аноним 2015/12/21 11:53:27  №608699 362
>>608690
1. Проинициализируй paymentTotal в 0 в начале функции, например.
2. Функция ничего не возвращает, эхо ее результата ничего и не выводит.
Аноним 2015/12/21 11:54:04  №608700 363
Аноним 2015/12/21 11:56:45  №608704 364
Аноним 2015/12/21 11:58:37  №608706 365
Аноним 2015/12/21 12:08:23  №608712 366
>>608690
>($creditBalance + 7777,
Это вообще зачем?
Аноним 2015/12/21 13:16:38  №608739 367
>>608622

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


Бамп вопросу -> >>608618
Аноним 2015/12/21 13:25:45  №608743 368
>>607218
>А как тогда подключать его? Просто запрашивать файл?
ОПчи-и-к, ответить пожалуйста на этот вопрос, я без дела сижу.
Аноним 2015/12/21 13:45:08  №608762 369
Господа, а в чем суть формы, которая просит телефон на сеошных сайтах, зарабатывающих рекламой?
Типа этого. http://dom-dacha-svoimi-rukami.ru/stroim-dom
Аноним 2015/12/21 13:50:38  №608764 370
>>608762
Там вирус не ходите.
Аноним 2015/12/21 13:58:41  №608768 371
>>608618

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

в open server например это
C:\OpenServer\domains\localhost
Аноним 2015/12/21 14:09:01  №608772 372
>>608768

Так и сделал

C:\Server\htdocs\sitevizitka

Туда и пути прописал
Аноним 2015/12/21 14:14:02  №608776 373
>>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. Но для простого приложения это лишнее усложнение.

Аноним 2015/12/21 14:15:49  №608779 374
>>608772

На адрес 404 тебя редиректит движок сайта. Изучай код и выясняй что не так.
Аноним 2015/12/21 14:40:28  №608792 375
14506980280610.png (57, 1188x555)
555x1188
>>608779


так я блять все изучил, и по идее должен работать, если бы я понял в чем трабл не писал бы сюда
Аноним 2015/12/21 14:58:55  №608800 376
Литературу для начинающего какую посоветуете? Мусор 10-ти летней давности не предлагать.
Аноним 2015/12/21 15:01:02  №608802 377
>>608792
Залил на беслпатный хостинг с беслпатным доменом и все заебись работает.

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

Может потому что файл роут хуево под локалхост заточен?
Аноним 2015/12/21 15:04:44  №608803 378
Аноним 2015/12/21 15:27:36  №608809 379
Аноним 2015/12/21 15:40:13  №608819 380
>>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 рублей - эта сумма должна быть прибавлена к основной сумме долга.
Аноним 2015/12/21 15:43:16  №608823 381
>>608819
echo - это вывод строки. Ничего общего с возвратом значения оно не имеет, для этого есть return.
Аноним 2015/12/21 15:47:10  №608827 382
сап ниггеры, как запилить на сайте авторизацию?
регистрацию запилил, а как узнать, что это один и тот же пользователь заходит на сайт?
без кук всяких, разумеется.
Аноним 2015/12/21 15:48:42  №608830 383
>>608823
Спасибо, копаюсь сейчас.
Аноним 2015/12/21 15:49:14  №608831 384
>>608827
Пацаны, как мне еду приготовить? Без продуктов всяких, разумеется.
Аноним 2015/12/21 15:54:45  №608834 385
>>608831
куки это же устаревшее говно, разве ничего другого еще не придумали?
Аноним 2015/12/21 15:55:41  №608835 386
>>608834
Продукты это же устаревшее говно, разве ничего другого еще не придумали?
Аноним 2015/12/21 15:57:21  №608836 387
>>608835
Ну, сойлент придумали, внутривенные растворы, пожалуйста.
Аноним 2015/12/21 15:57:52  №608837 388
>>608831
Каша из топора (айди сессии в uri).
Аноним 2015/12/21 15:58:40  №608838 389
>>608830
Пока накопал только, что я тупой.
Аноним 2015/12/21 16:08:04  №608842 390
>>608834
Можно и без куков. Запрашивай каждый раз у юзера пароли.
Аноним 2015/12/21 16:09:40  №608845 391
Аноним 2015/12/21 16:27:43  №608858 392
14507044639840.png (254, 1318x869)
869x1318
Как сделать что бы на экран выводилась краткая новость, а ссылка краткой новости вела на новую страничку к полной версией новости. JS не предлагать! Необходимо решить посредством php, mysql, html, css.






<!DOCTYPE html>
<html>
<head>
<title>Jet</title>
<link rel="stylesheet" type="text/css" href="style.css">
<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)) { ?>

<div id="text">
<h2 align="center"><a href=""><?php echo $row['title'] ?><a></h2>
<p><?php echo $row['text'] ?></p>
<p align="right"><?php echo '<a href="view_news.php?id='.$row[id].'" '; ?> >Перейти к новости -><a></p>
</div>


<?php } ?>

</div>
</body>
</html>
Аноним 2015/12/21 16:33:41  №608864 393
>>608858
>JS не предлагать!
какой js, такое делаеться на ruby+python. там еще надо фреймворк и ооп подключить к бутстрапу через mvc.
Аноним 2015/12/21 16:37:01  №608867 394
>>608838
Вот в итоге вроде бы получился этот калькулятор Айпада: http://ideone.com/X0RbF2

Странно, что я не могу оттуда выцепить $month никак, пробовал по-разному.
Хотел в echo вывести ещё и количество месяцев, которые потребуются для оплаты.
Вот почему в этом случае я не могу просто написать там же return $month, а в итоговом echo просто поставить {$month}?
Чому так нельзя получить эту переменную, её как-то надо проинициализировать тоже?
Сейчас попробую...
Аноним 2015/12/21 16:40:18  №608870 395
14507052184140.gif (1, 175x162)
162x175
14507052184141.png (17, 400x400)
400x400
14507052184142.png (106, 360x360)
360x360
Что сделали с моим пхпстормом? Где старый охуенный логотип? Почему вместо него рваный кусок говна и мочи?
Аноним 2015/12/21 16:41:35  №608873 396
>>608867
Нет, так не вышло ничего.
Аноним 2015/12/21 16:44:37  №608874 397
>>608873
Функция может вернуть только одно значение. Но оно может быть массивом или объектом.
Аноним 2015/12/21 16:45:28  №608876 398
>>608870
Размазанность нынче не в моде.
Прежний был по хардкору.
Аноним 2015/12/21 16:47:18  №608879 399
>>608874
Спасибо, я это запомню, бро, мне пока далеко для этого. Если только массивом сделать, а потом ключи достать?
Ладно, вроде сам калькулятор работает - пока успокоюсь на этом, подожду разгромного анализа ОПа.
Аноним 2015/12/21 17:22:39  №608903 400
14507077599230.png (1708, 1920x1200)
1200x1920
Аноны, поясните за куски кода ниже

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?

Вообще как во всех случаях узнается адрес до самого скрипта, так как нигде тут полный адрес скрипта не прописан и что вообще лучше использовать?
Аноним 2015/12/21 17:44:31  №608914 401
14507090716190.png (89, 637x351)
351x637
>>607913
>Надо либо заключать строку в одиночные кавычки ' " ' либо экранировать бекслешем " \" "
>Или ты не про это?
Я про то что css-селектор input[type=text] корректный, а meta[property=og:image] выдает syntax error, поэтому приходится брать значение атрибута в кавычки.

>надо вывести список ссылок на картинки в консоль, а не список тегов img
Тогда так
https://jsfiddle.net/e5j566y3/

>в данном случае можно поступить проще и искать эти элементы по именам тегов
А как узнать, что элемент принадлежит форме? Некоторые элементы типа button вполне могут быть не привязаны к форме, находиться вне ее (неё?).
Если элемент лежит внутри формы, он однозначно к ней относится? Если так, тогда
https://jsfiddle.net/33zse693/
Аноним 2015/12/21 17:53:05  №608924 402
Аноним 2015/12/21 17:59:00  №608929 403
бля, да что за хрень опять не могу уи развернуть. не далее, как неделю назад каким-то боком развернул, в инете мануалы заполонены какой-то хуйней через командную строку, я же помню, что без cmd нормально разворачивал.
Аноним 2015/12/21 18:11:11  №608937 404
>>608525

ой бля, проследуй под шконку петушок
хули там можно пару лет учить маня?
любой школьник за пару месяцев все освоит
Аноним 2015/12/21 18:13:28  №608939 405
14507108082090.png (89, 739x632)
632x739
>>608924
На самом деле нет. Везде нужны опытные программисты, их не хватает. Брать джуниора после вуза и делать из него специалиста - долго, да и он может уйти в любой момент если денег больше предложат. Так и висят вакансии синьеров по месяцу.
Аноним 2015/12/21 18:16:35  №608944 406
>>608939
Это не сеньоры, это аналог работников макдака, которые работают вместо 5 кассиров, двух борщиков и одного повара ну и платят ему за всех этих людей. Тут пока выучишься одной рукой бургеры жарить, а другой счет выбивать на скорость, это да.
Аноним 2015/12/21 19:03:46  №608999 407
эй, погромисты, я тут решил учить погромирование с html, вообще я верно путь выбрал, или надо что-то другое брать для начала:?
Аноним 2015/12/21 19:05:34  №609002 408
>>608999
ох нихуя себе, трипл
Аноним 2015/12/21 19:06:16  №609004 409
>>608999
Бери Assembler, достаточно легкий язык, сделан специально для новичков. Как овладеешь ассемблером можно и на Brainfuck перейти, он уже посерьезнее.
Аноним 2015/12/21 19:14:46  №609015 410
>>609004
а я слышал начинающие паскаль учат еще. на него можно болт ложить?
Аноним 2015/12/21 19:16:24  №609021 411
>>609015
он над тобой стебаетсяхотя ассемблер вроде бы и легкий, но сперва оче трудно уловить логику
Аноним 2015/12/21 19:17:04  №609023 412
>>609015
Паскаль это тоже очень полезная вещь сейчас, можешь начинать с Turbo Pascal, за 3 месяца можно выучить его и пойти джуном в какую-нибудь аутсорс контору. Тут выбор уже за тобой.
Аноним 2015/12/21 19:19:08  №609025 413
Ну хватит, это уже не смешно.
(Автор этого поста был забанен. Помянем.)
Аноним 2015/12/21 19:21:25  №609029 414
Greetings.
Я запилил на сайтике регистрацию, и вот после успешной регистрации хочу, чтобы сайтик редиректил пользователя на соседнюю страницу, как это из ПХП сделать? Или нужен ЖС?
Аноним 2015/12/21 19:21:58  №609031 415
>>609025
Не вижу тут ничего смешного.
мимо паскаль макака 70к месяц
Аноним 2015/12/21 19:22:41  №609038 416
>>609029
header("Location: /page/");

Только учти, что заголовки нужно отправлять до хтмла.
Аноним 2015/12/21 19:23:00  №609039 417
>>608776
>Если тебе надо то лучше использовать в классе статическое поле. Но в данном случае такой надобности нет - так как Init у нас в одном экземпляре. Более того, сам Init не нужен тоже, как я написал выше.
А почему мы здесь тогда делали её статической? https://github.com/someApprentice/simpleRegistration/blob/master/Lib/connect.php#L11
Аноним 2015/12/21 19:23:17  №609040 418
>>609031
Поссал на нищеброда.
delphi-senior 250k в неделю
Аноним 2015/12/21 19:24:05  №609041 419
>>609040
Проиграл с раба.
assembler-бог 500к в день
Аноним 2015/12/21 19:25:05  №609043 420
>>609041
Кекнул с нищенки
xml-господь 130к в час
Аноним 2015/12/21 19:27:27  №609044 421
>>609043
В голос с индуса.
html-teamlead 750к в минуту
Аноним 2015/12/21 19:33:47  №609049 422
>>609044
Проиграл на весь пентхаус с убогого.
css инженер-проектировщик 800к за планковское время
Аноним 2015/12/21 19:52:52  №609061 423
>>609044
В голос с лоха.
Безработный-араб 4млн$ в секунду
Аноним 2015/12/21 19:54:25  №609064 424
Аноним 2015/12/21 20:16:08  №609097 425
>>609038
Выдает
Warning: Cannot modify header information - headers already sent by
Пхп сверху хтмла
Аноним 2015/12/21 20:20:44  №609106 426
>>609097
Это значит что заголовки уже отправлены. Заголовки должны быть отправлены ДО всего вывода разметки.
Аноним 2015/12/21 20:22:45  №609110 427
>>609097
Не должно быть ни одного echo перед header.
Файлы пересохрани в utf-8 без BOM.
Аноним 2015/12/21 20:24:09  №609112 428
Аноним 2015/12/21 21:57:45  №609185 429
Объясните, что такое HMVC и нужно ли оно вообще.

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

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

В комментах автора отхуесосили, ткнули в паттерн service layer и иерархические шаблоны.
Короче я только запутался и ничего не понял, нужная это штука или нет, если да то как реализовывается и есть ли готовые реализации во фреймворках (знаю Yii и микрофреймворки, но там вроде такой фигни нет)
Аноним 2015/12/21 22:59:50  №609232 430
Что надо сделать чтобы просить джуном 30к по МСК/Питеру?
Какой сложности работы сделать для портфолио?
Аноним 2015/12/21 23:03:31  №609238 431
>>609232
>что надо сделать
Минет с проглотом.
>какой сложности работы сделать
Хватит и обычного анала.
Аноним 2015/12/21 23:12:36  №609243 432
>>609232
Выучить хотя бы один фреймворк либо 1-2 cms. А лучше и то и другое.
Работы для "портфолио" не обязательны. Примеры работ просят обычно дно-конторы, у которых даже нет компетентного сотрудника для проведения собеседования.

Сделать несколько проектов не помешает конечно, только не для портфолио, а для себя.
В оп-посте есть задание на файлообменник например. Или можешь придумать что-то свое, например клон твиттера или авито.
Аноним 2015/12/21 23:18:37  №609251 433
>>609243
Из фреймворков как я понимаю yii самый востребованный?
Аноним 2015/12/21 23:29:46  №609266 434
>>609243
Ну нихуя себе у вас в ДС зажрались, уже и портфолио не нужно.
Аноним 2015/12/21 23:33:42  №609271 435
разрываюсь между паскалем, делфи и ассемблером, что перспективнее для переката в силиконовую долину?
Аноним 2015/12/21 23:34:43  №609275 436
Аноним 2015/12/21 23:37:15  №609278 437
Как мне уи установить, сириус квешн? Разворачиваю на локалке, даже доступ к папке с фреймворком запрещен.
Я забыл как разворачивал в прошлый раз.
Аноним 2015/12/22 02:06:31  №609379 438
14507391915790.jpg (11, 480x360)
360x480
Здарова, ребятки. Я тут нашел вакансию пхп погромиста и заинтересовался. Подскажите за сколько, примерно, месяцев среднестатистический битард, не знающий вообще ничего о программировании, сможет выучить ваш PHP чтобы потом его приняли в маленькую конторку в мухосранске?
Аноним 2015/12/22 02:09:03  №609380 439
>>607913
>Чем объекты jQuery такие особенные и отличаются от других?
Тем, что у объектов jQuery есть свойства и методы jQuery.
Если я создам две переменные
var first = document.getElementsByTagName("P");
var second = $("div");
То через пять строк я уже не буду помнить, какая переменная обычная, а какая jqery, к какой из них можно применить метод attr например. Можно конечно насильно потом пропустить через $(...)
А, ну да, или пользоваться webstorm.

>список всех постов в формате "Название поста", число просмотров, число комментариев, ссылка
>допиши к заголовкам постов в скобках число просмотров
https://jsfiddle.net/60rkobr8/1/

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

Самому писать корзину не нужно, ты же понимаешь какая это ответственность, если хакир из 8б сломает твой сайт? Присядешь ты, а не он.
Аноним 2015/12/22 03:05:00  №609389 444
>>609384
>Погромирование должно нравится

Согласен, братишка. То что нравится еще и дается легко. Только вот приколюха в том, что через лет 20-30, мне кажется, каждый должен будет уметь погромировать этих ебучих роботов и прочую парашу, поэтому придется все равно задрачивать. Это как сейчас в говне многим приходится ковыряться, хоть и не нравится, но платят хорошо, поэтому и ковыряются.
Аноним 2015/12/22 03:16:33  №609390 445
>>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 в обычном поле.
Кошки-мышки Аноним 2015/12/22 03:17:27  №609391 446
>>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");
}
кошки мышки Аноним 2015/12/22 03:17:55  №609392 447
>>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;
Не нужно.
Аноним 2015/12/22 03:18:13  №609393 448
>>607358

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

>>607381

> А как можно по-другому сделать? Мне это показалось самым естественным.
Можно сравнить буквы. Если они не совпали - слово не палиндром, выходим. Если совпали - продолжаем сравнение.

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

>>607471

В чем это проявляется? Ошибки какие-то выводятся? натыкай echo, var_dump, посмотри что в переменных.
Сокеты Аноним 2015/12/22 03:19:16  №609394 449
>>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 прокси, который можно прописать в браузере и он будет печатать первую строчку из каждого запроса и ответа прошедшего через него. Доп. опции:

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

Ну или чат сделай.

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

> или обмен данными в каких-нибудь онлайн-играх.
Возможно.







Аноним 2015/12/22 03:47:36  №609398 450
>>608864
я знаю что можно сделать даже без php но будет криво.Руби здесь уж совсем не причем
Аноним 2015/12/22 07:15:30  №609417 451
>>608858
>Как сделать что бы на экран выводилась краткая новость, а ссылка краткой новости вела на новую страничку к полной версией новости.
a href
Аноним 2015/12/22 07:18:31  №609418 452
>>609185
>То есть если у нас есть пользователь, то должен быть контроллер для пользователей, и он не должен манипулировать другими сущностями, например постами пользователя или комментариями (для них должен быть отдельный контроллер). То же самое для представлений: отдельное представление для каждой сущности.

Какая-то надуманная проблема высосанная из пальца. Манагеры с ветряными мельницами борятся?
Аноним 2015/12/22 11:35:45  №609444 453
>>608864
>ruby+python
Совсем поехал штоле? Ты ещё C++ предложи. Обколются своими фрэймворками и забудут как <a href=''>НОВОСТЬ</a> вгллядит. Ну и подогнать css под это.
Аноним 2015/12/22 12:14:47  №609460 454
>>609185

Если я не путаю. Идея HMVC в том, что мы делаем контроллеры для отдельных блоков на странице, как будто это отдельные страницы.

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

/comments/1234 - отображает комменты к видео
/related/1234 - показывает похожие видео
/video/1234 - отображает всю страницу с видео, вызывая при этом 2 контроллера выше.

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

Статья: http://habrahabr.ru/post/212065/

Мне кажется, это бессмысленное усложнение. Блоки проще реализовать как виджеты (хотя кто-то скажет что это и есть форма HMVC).

В статье мне не нравится это:

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


Аноним 2015/12/22 12:31:01  №609463 455
Что-то я не понимаю, как натянуть свою верстку на вп. В вп шаблоне куча непонятных функций, установить тему могу, а вот как ее с цмс связать, чтобы записи, комменты, виджеты выводились?
Аноним 2015/12/22 12:37:30  №609470 456
Интересно, у меня одного баг на ютубе, когда ты открываешь страницу с видео, смотришь комменты, жмешь «показать ответы» или «читать далее», там появляется круг, тупит пару секунд, а потом вся страница перезагружается? Вот как можно такое написать? Я знаю что первые разработчики ютуба особыми талантами не блистали, но сейчас же его поддерживает Гугл.
Аноним 2015/12/22 12:39:11  №609471 457
>>609470
Это не баг, просто в комментах ссылка на https версию. Нехуй пользоваться http версией.
Аноним 2015/12/22 12:48:52  №609477 458
>>609471

Действительно, меняется протокол. Но зачем? Если я загрузил http версию страницы, то никакой проблемы чтобы загрузить комментарии по HTTP наверно тоже нет? Меня не особо пугает что их прочтут шпионы.
Аноним 2015/12/22 13:21:09  №609490 459
Пиздец, пока сайт на одном фреймворке/цмс делаешь, другие полностью забываются. Год назад где-то натянул верстку на вп, сейчас так тяжело это снова дается и вспоминается по тому же мануалу с хабра.
Аноним 2015/12/22 13:30:53  №609496 460
кто может подробно обьяснить что такое глобальный массив $_GET , что он из себя представляет, зачем он нужен, и как он работает? Обьясните для чайника))
Аноним 2015/12/22 13:36:56  №609501 461
>>609496

Туда помещаются значения, переданные через query string (после знака вопроса) в URL.

Аноним 2015/12/22 13:49:11  №609507 462
>>609390
>объекта Init
>>608776
>Ты делаешь файл init.php или bootstrap.php, без классов, обычный скрипт.
Значит ничего плохого иметь именно класс Init? Я могу его оставить? Я не хочу сам подключать этот файл, а чтобы этим занимался автолоадер.
Аноним 2015/12/22 13:51:07  №609509 463
>>609460
По поводу именно ютюба - у них сделано всё очень через жопу с коментариями. Начинаешь коментировать - видео грузится снова, открываешь тред - видео грузится снова, нажимаешь отправить камент - видео грузится снова. В общем они перемудрили как-то.
>Ну если у нас например есть клон ютуба, то мы можем сделать отдельный контроллер для отображения комментариев, и отдельный для отображения списка похожих видео. Таким образом получается 3 URL:
Что-то я туплю, а как писать код не так? Ну тоесть ты ведь в любом случае не будешь писать index.php сразу с запросами, .css выводом, и со всеми страницами. Это просто невероятно неудобно!
Аноним 2015/12/22 14:00:03  №609513 464
И пара вопросов

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

>>608776
>По идее конечно можно сделать инициализацию классом. Так например в ZF сделан класс Bootstrap. Но для простого приложения это лишнее усложнение.
А в чем кроется усложнение? Я бы хотел во всем разобраться.
Аноним 2015/12/22 14:06:48  №609518 465
>>609507

А автолоадер кто подключит? Все равно придется писать require, хоть для автозагрузчика, хоть для init.php.

> Значит ничего плохого иметь именно класс Init? Я могу его оставить?
нелогично делать класс только ради автозагрузки. Оставить можно, но без него было бы проще мне кажется.

>>609509

Идея HMVC в том что там делается контроллер не только для страниц, а и для отдельных блоков на них.

> а как писать код не так?
Без лишних контроллеров.

>>609513

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

> А в чем кроется усложнение?
Без класса:

$pdo = new PDO...
$mapper = new Mapper;

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

Аноним 2015/12/22 14:10:56  №609520 466
Как мне уи2 подключить, м? Скачал фреймворком, как в одном видео, а там нужно было батник заранить init.bat, а его опа и нет.
Аноним 2015/12/22 14:18:44  №609528 467
>>609518
>$mapper = new Mapper;
>>607098
>$someMapper = new SomeMapper($pdo);
А что такое маппер? Я такое еще нигде не видел. Что он делает?
Аноним 2015/12/22 14:20:13  №609531 468
Аноним 2015/12/22 14:22:11  №609533 469
Аноним 2015/12/22 14:33:11  №609539 470
Аноним 2015/12/22 15:47:26  №609573 471
Всем привет.

Изучаю php, пользовался васяносборочкой денвер.
Вчера переустановил винду и решил всё поставить по-человечески. Поставил apache, поставил php, всё робит(отдельное спасибо автору шапки).
Теперь дошел черёд до MySQL. И с ним хочу узнать поподробнее. Я правильно понял, MySQL Server нужен для взаимодействия БД и сервера? И для чего нужен
Workbench? И как его тестить по установке?

Заранее спасибо.
Аноним 2015/12/22 15:49:24  №609575 472
>>609573
>И как его тестить по установке?
Имел в виду и MySQL Server и Workbench, если что.
Аноним 2015/12/22 15:53:36  №609580 473
>>609573
> всё поставить по-человечески
> форточки
Поделил на ноль.
Аноним 2015/12/22 15:54:12  №609581 474
>>609580
>имплаинг, что красноглазые - люди
Поделил на ноль.
Аноним 2015/12/22 15:55:20  №609583 475
>>609580
Я пока пользуюсь виндоусом.
Чуть позже буду ставить дуал Ubuntu, но пусть будет на обеих системах. Дело в том, что я еще и учусь в шараге(где нам и показали ставить денвер собственно), поэтому без виндоуса пока никуда, т.к. пользуемся программами, которых нету на линукс.
Аноним 2015/12/22 15:55:43  №609584 476
Как уии2 установить (с)?
Аноним 2015/12/22 16:03:40  №609591 477
>>609573
openserver можеш накатить, там все стоит сразу
Аноним 2015/12/22 16:06:55  №609592 478
>>609573
Что ты подразумеваешь под "сервером"?

MySQL это и есть сервер для базы данных (система управления базами данных - СУБД).
Сервер это программа, работающая в фоновом режиме, которая ждет что с ней соединится программа-клиент и попросит данные, тогда сервер отдает нужные данные.
База данных это файл на жестком диске.
Workbench это просто удобный инструмент для работы с базой.
https://www.mysql.com/products/workbench/
Нужен чтобы не писать sql-код из командной строки (хотя по мне нет разницы, что писать его в окошке, что в командной строке). Еще там можно смоделировать схему базы данных в графическом виде. Или даже создать новую базу данных на основе графической схемы.
Короче просто удобный инструмент, но необязательный.
В чем конкретно вопрос?

>>609584
http://www.yiiframework.com/doc-2.0/guide-start-installation.html
Аноним 2015/12/22 16:14:34  №609595 479
Привет, ребятки.
Есть MVC система. Посты из блога вывожу только из контроллера Index, хотя он нужен для всех страниц практически. Из модели идет запрос так же. Нужно сделать чтобы было отображение нав-бара на всех страницах.

Вывод страниц идет через for-each используя мультиуровневые массивы. Как переписать так, чтобы навигейшн бар был везде и был со списком постов up-to-date?
Алсо, это простой бложик, если что.

Заранее благодарю.
Аноним 2015/12/22 16:15:28  №609596 480
>>609595
Роутер режет путь и оттуда уже известно, какой контроллер вызывается и какой метод из него по-дефолту. Роутер переписывать не очень хочу.
Аноним 2015/12/22 16:25:12  №609602 481
>>609592
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Вот эти вот команды их откуда вызывать? У меня винда с кнопкой в меню Install Composer
Аноним 2015/12/22 16:30:56  №609607 482
>>609595
Тебе нужен навбар на всех страницах? Так подключи его в шаблоне/шаблонах, в которых это необходимо.
<? if($needNavbar) { include "path/to/navbar-template.php"; } ?>
Массив с постами получить либо прямо в представлении, либо если считаешь это нарушением mvc то передать из контроллера.
Покажи код, непонятно в чем проблема.

>Как переписать
Используй фреймворк с шаблонизатором.
>Алсо, это простой бложик, если что.
Это не оправдание. Нужно сразу писать качественно. Через неделю у заказчика попрет посещаемость, тогда он попросит тебя прикрутить блоки с рекламой. Потом он захочет регистрацию и комментарии, интеграцию с соцсетями. Затем возможность делать покупки на сайте. И так далее.
Аноним 2015/12/22 16:40:18  №609617 483
Странное дело: когда захожу на википедию, страница долго пытается загрузиться, потом выдает ошибку
>Веб-страница недоступна

>ERR_CONNECTION_TIMED_OUT
А через секунду сама обновляется и страница загружается нормально.
Аноним 2015/12/22 16:50:29  №609631 484
На собеседовании задали вопрос: как будете парсить XML в 2 ГБ?

В курсе, что любые средства основанные на стандартных классах PHP обсераются по ресурсам даже если ДОМ-документ весит около 100мб. Сам я с такими большими XML никогда не сталкивался, максимум 20-50 мб. Вангую что нужно использовать для этого другою платформу, С или node.js
Есть у кого идеи?
Аноним 2015/12/22 16:50:37  №609633 485
>>609602

Это для установки на линукс команды.
Аноним 2015/12/22 16:51:47  №609635 486
>>609631

Потоковыv парсером вроде XMLReader. Это банальная проверка, изучал ли ты теорию по XML или нет.
Аноним 2015/12/22 16:54:28  №609641 487
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 просто удалить?


ОП, а мы можем набрать обороты? Мне кроме как писать код нечем заняться, да и нравиться это дело очень. Не хочу просто так терять время.
Аноним 2015/12/22 16:56:49  №609645 488
>>609635
>изучал ли ты теорию по XML или нет.
Что ты имеешь в виду "изучал ли ты теорию". Использование конкретного средства это не теория, а практика. В самом XML нет никакой теории, это просто язык разметки.
Аноним 2015/12/22 17:00:56  №609656 489
>>609641
>почему мог перестать работать композер
Делай composer dump-autoload каждый раз, когда создаешь новый класс или меняешь пути к своим классам.

> vendor/x
Звездочка не нужна в гитигноре, это же регулярное выражение, означает что будет игнорировать все файлы в папке вендор, но не саму эту папку. Нужно просто vendor без звездочки.

>а мы можем набрать обороты?
Кто тебе мешает? Или ты хочешь чтобы он тебе помогал в онлайн режиме? Да ты охуель.
Аноним 2015/12/22 17:04:05  №609659 490
Аноним 2015/12/22 17:05:45  №609660 491
Суп. Можно платиновый вопрос?
На какую версию пыхи делать упор при освоении?
Аноним 2015/12/22 17:07:53  №609662 492
Кто придумал и зачем делать описательные структуры в PHP, aka "аннотации".

Я говорю про это
http://pastebin.com/j8LwLput

Есть же yml, xml.
Говнокода было мало?
Аноним 2015/12/22 17:08:19  №609663 493
>>609660
десятку ставь, охуенная
Аноним 2015/12/22 17:14:39  №609666 494
>>609656
>Делай composer dump-autoload каждый раз, когда создаешь новый класс или меняешь пути к своим классам.
Так делаю...

>Звездочка не нужна в гитигноре, это же регулярное выражение, означает что будет игнорировать все файлы в папке вендор, но не саму эту папку. Нужно просто vendor без звездочки.
Без звездочки тоже не получилось. Я в самом начале без нее писал.

>>609656
>Кто тебе мешает? Или ты хочешь чтобы он тебе помогал в онлайн режиме? Да ты охуель.
Я обычно за 1-2 дня все делаю и задаю вопросы какие не понятны, а потом всю неделю как овощ сижу без дела. Почему нельзя поощрить мое желание к знаниям давая больше практики? Я же не настаиваю а спрашиваю ОПа, может ли он так...
Аноним 2015/12/22 17:14:57  №609667 495
>>609607
Пожалуйста, не бей. Просто обоссы и скажи,что можно с этим сделать, лол.
Я делаю запрос из базы, он идет в контроллер, в нужный вид приводится и приводится сюда.
Роутер вполне обычный, с несколькими аргументами, пока что без исключений написанный.
http://localhost/controller/method/(param)/(param)/(param)
url[0] = Controller
url[1] = Method
url[2] = Param
url[3] = Param
url[4] = Param
Аноним 2015/12/22 17:15:26  №609668 496
>>609667
> и приводится сюда
Во вью. И во вью уже этот код, который я прикрепил.
Аноним 2015/12/22 17:16:57  №609669 497
>>609641

Отлаживай автозагрузчик. Код автозагрузчика лежит в vendor/autoload.php, и других файлах, натыкай туда var_dump и посмотри какие файлы он пытается подулючить.

Также, почему у тебя файл с классом называется с маленькой буквы? Разве PSR-4 такое разрешает? Файл должен называться так же как и класс.

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

Вписывать ее кстати надо как vendor, без слешей наверно.

> У меня не получилось обратиться без него.
Подумай как обойтись без global. Например можно делать require конфига внутри функции.

Также, зачем ты делаешь функции в init.php? Проще же просто написать последовательно действия.

И какой смысл вот в этом?

> $pdo = null;
> if (!$pdo) {
Это условие всегда выполняется.

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

> ОП, а мы можем набрать обороты?
Так набирай, ты ведь можешь сам код писать? У меня много других дел, я не могу в реальном времени отвечать, так что лучше всего задать какие-то вопросы и писать код не дожидаясь меня.
Аноним 2015/12/22 17:20:14  №609670 498
>>609666

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

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

Подумай сам, как наиболее эффективно двигаться вперед.
Аноним 2015/12/22 17:21:43  №609671 499
В 12ой задаче константы размера и начинки должны быть объектами?
Аноним 2015/12/22 17:22:28  №609673 500
>>609662

Доктрина вообще-то позволяет вместо аннотаций использовать XML или Yml. Ты мануал читал? Адски неудобно, но ты можешь попробовать.
Аноним 2015/12/22 17:24:13  №609676 501
>>609671
Нет, объекты походу должен возвращать метод типа getToppings. Константы должны быть строками типа foo.CHEESE = 'cheese', или вообще числами.
Аноним 2015/12/22 17:29:20  №609679 502
>>609656

> Делай composer dump-autoload каждый раз
Это не требуется.

>>609641

Для удаления папки vendor надо делать примерно так:

- не вносить vendor в gitignore, удалитть или перенести эту папку
- закоммитить
- внести vendor в gitignore, закоммитить
-вернуть vendor на место

Также, подозрительно выглядит вот это:

https://github.com/someApprentice/Students/commit/4a9f0c6357a6ebf852a47d404010c53dcc172909#diff-5e40181745bfd71598eafb75920663f1

Это ты не руками удалял? зачем?
Аноним 2015/12/22 17:41:43  №609687 503
>>609659

> return b[1]-a[1];
Это плохо читается. Почему не b.population - a.population?

> alert
Лучше console.log

Алсо по условию надо вывести не все города, а только первые N. И по моему вывести только названия.

>>609645

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

>>609617

Что-то с википедией или твоим браузером.

>>609607

> Массив с постами получить либо прямо в представлении,
Это неправильно.

>>609595

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

> Из модели идет запрос так же.
Не понял что значит «так же».

> Нужно сделать чтобы было отображение нав-бара на всех страницах.
И в чем проблема?

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

> Как переписать так, чтобы навигейшн бар был везде и был со списком постов up-to-date?
Получить нужные данные в контроллере и передать во вью, там вывести.
Аноним 2015/12/22 17:42:16  №609688 504
>>609595

Алсо, если что-то нужно на всех страницах, то можно эти данные в базовом контроллере получать и передавать во вью, или где-то в коде инциализации.
Аноним 2015/12/22 17:46:07  №609690 505
>>609573

> Я правильно понял, MySQL Server нужен для взаимодействия БД и сервера?
Это и есть сервер базы данных. Он принимает и выполняет SQL запросы.

> И для чего нужен Workbench?
Для проектирования базы днных

> И как его тестить по установке?
Как в туториале например: http://www.mysql.ru/docs/man/Connecting-disconnecting.html

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

Команда будет вроде

mysql -uUSER -p

Аноним 2015/12/22 17:46:07  №609691 506
>>609687
> Массив с постами получить либо прямо в представлении,
> Это неправильно.
В yii такое сплошь и рядом, виджеты сами обращаются к базе за данными.
Хотя не спорю, это нарушение mvc.
Аноним 2015/12/22 17:46:33  №609692 507
>>609673
>Есть же yml, xml
у меня это в посте написано
Аноним 2015/12/22 17:47:47  №609693 508
14507956676530.png (30, 920x239)
239x920
Почему при обращении к Hamburger.SMALL_SIZE выводит undefined? Как мне передать констаты конструктору?
Аноним 2015/12/22 17:49:54  №609696 509
>>609693
>классовые констаты в js
чаво?
Аноним 2015/12/22 17:50:42  №609697 510
>>609039

Потому что там функция, а не класс. В функции по другому ведь не получится сделать запоминание значения. Но сейчас мы переходим на ООП и функции нам не нужны. Ну и что касается инициализации, ее можно сделать классом, но проще обычным скриптом без функций или классов.
Аноним 2015/12/22 17:51:15  №609698 511
>>609693
Никак, их нужно задавать не в конструкторе, а в прототипе объекта.
В конструкторе перечисляются инструкции, которые будут выполняться при создании каждого ебаного объекта. Тебе же не нужно создавать константу при создании нового объекта.
Аноним 2015/12/22 17:51:17  №609699 512
>>609679
>Это ты не руками удалял? зачем?
Не могу понять что именно удалял?
Аноним 2015/12/22 17:53:44  №609700 513
>>609699

Строчку с папкой и неймспейсом в файле vendor/composer/autoload_psr4.php

Если что, ты можешь удалить папку vendor и заново сгенерировать автозагрузчик командой композера dump-autoload
Аноним 2015/12/22 17:56:53  №609702 514
>>609696
Это упражнение из задачника опа по имитации ооп в js.
То что получается выглядит крайне костыльно и только прививает отвращение к этому языку.

Кстати в es6 кажется таки ввели классовые константы.

Лично у меня складывается впечатление что js недоязык и годится только для манипуляций с домом, что бы там ни кукарекали хипсторы с ноджс.
Аноним 2015/12/22 17:59:38  №609704 515
>>609702

Чтобы не было непонимания, это не имитация ООП которую придумал ОП, а общепринятая имитация и ее можно увидеть в библиотеках. Да и как вы без ООП будете писать сложные приложения? Никак. Так что надо изучать.
Аноним 2015/12/22 18:03:46  №609705 516
14507966264800.png (38, 676x264)
264x676
>>609698
Пикрелейтед вводит в заблуждение. Получается мне нужно передавать не Hamburger.SIZE_SMALL, а Hamburger.prototype.SIZE_SMALL.
Всё-таки я не понимаю, почему многие негодуют от пхп, но расхваливают этот набор костылей.
Аноним 2015/12/22 18:04:38  №609706 517
>>609705
Чтобы пилить бабло на браузерных играх и не такое придумаешь.
Аноним 2015/12/22 18:06:20  №609707 518
>>609633
а для винды как установить?
Аноним 2015/12/22 18:08:34  №609711 519
Аноним 2015/12/22 18:11:16  №609712 520
>>609704
>как вы без ООП будете писать сложные приложения?
А какие могут быть сложные приложения на js?
Ну валидировать форму, ну сымитировать алёрт каким-нибудь jui dialog. Ну вставить параграф полученный аяксом.
Все это делается готовыми библиотеками, ничего нестандартного, никаких сложных архитектурных схем.

Приведи примеры или ссылки на навороченные нестандартные веб-приложения на js.
Мне кажется такие если и есть, то редкость. Ну или кастомные вещи типа онлайн-игр, не знаю.
Мы в конце концов php-шники, хоть и стремимся к фулстек.
Аноним 2015/12/22 18:15:20  №609713 521
>>609712
ты забываешь про дно.жс
Аноним 2015/12/22 18:16:39  №609716 522
>>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
Аноним 2015/12/22 18:18:24  №609718 523
>>609707
Композер это просто файлик, его можно и вручную скачать. Научить читать и не боятся команд и кода.

>curl -sS https://getcomposer.org/installer | php
>mv composer.phar /usr/local/bin/composer

первая строчка скачивает файлик, вторая перемещает.
Аноним 2015/12/22 18:18:29  №609719 524
>>609716
>Логичнее передавать Hamburger.SIZE_SMALL
В этом и был мой изначальнйы вопрос. Как её передать, если прямое обращение к Hamburger.SIZE_SMALL дает нам undefined? >>609693
Аноним 2015/12/22 18:19:28  №609720 525
>>609719

А как ты ее создаешь? Очевидно чтобы это работало надо написать

Hamburger.SIZE_SMALL = 'small'

или

Hamburger.SIZE_SMALL = 1;
Аноним 2015/12/22 18:21:49  №609722 526
>>609669
>Так набирай, ты ведь можешь сам код писать? У меня много других дел, я не могу в реальном времени отвечать, так что лучше всего задать какие-то вопросы и писать код не дожидаясь меня.
Так набираю, я не прошу отвечать мне реальном времени, я надеялся хотя бы на пару раз в неделю. Раз не можешь, так не можешь, нет проблем. Я просто буду еще делать в свободное время задачи по верстке и по линуксу.
Аноним 2015/12/22 18:22:55  №609724 527
>>609720
Как и свойства, через this внутри конструктора.
Аноним 2015/12/22 18:25:45  №609727 528
>>609716
Ну я к этому и веду, что такие задачи либо крайне специфические, либо требуют серьезного скила (для работы в яндексе или гугле).
Никого из этого треда не возьмут в гугл (даже тебя, хоть ты тут самый прошаренный).

Мы на js максимум будем простенькие сервисы писать, а скорее всего формочки да уведомления.
Поэтому имитация ООП в js хоть и интересна для ознакомления, но на практике не нужна. Ну и вторая мысль, что ООП реализован в js плохо. Почему я должен изобретать какую-то дикую телегу ради тех же несчастных констант?
Аноним 2015/12/22 18:28:10  №609730 529
>>609700
>Строчку с папкой и неймспейсом в файле vendor/composer/autoload_psr4.php
Нет, я этого не делал. Странно, может быть так случилось когда я неудачно переносил файлы чтобы как бы откатить версию чтобы убедиться что композер работал на ней. В любом случае я уже после этого много раз делал дамп комозера, это же должно заменить тот файл композера на новый?
Аноним 2015/12/22 18:30:10  №609731 530
>>609722

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

>>609727

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

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

И кстати что нестандартного в моей задаче на JS про автоматизированное рабочее место преподавателя? Ты думаешь подобные программы пишут только сеньоры? Нет, пишут стажеры и джуниоры, особенно если это госзаказ какой-нибудь, все деньги давно попилены и на сеньоров их просто не хватит.
Аноним 2015/12/22 18:32:16  №609732 531
>>609730

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

В мануале psr-4 пишут маленькими буквами: https://getcomposer.org/doc/01-basic-usage.md#autoloading

Почему у тебя большими?
Аноним 2015/12/22 18:37:01  №609736 532
>>609732
Советую всем использовать вместо echo и var_dump свою функцию, которая распечатывать массив или переменную в файл. При отладке сложных фреймворков или ajax незаменимо. Еще лучше конечно пользоваться для этого готовым решением для отладки, но этот способ самый быстрый и вы будете им всегда пользоваться.
Аноним 2015/12/22 18:41:40  №609741 533
>>609731
>ООп исплоьзуется еще в библиотеках.
Пусть используется. Я же не буду перечитывать исходный код jquery или mootools.
>Да и ничего сложного там нет.
Не сложно, но костыльно, неудобно, некрасиво и вообще нафиг не нужно.
>когда до реальных задач дойдешь?
Я не знаю, что ты подразумеваешь под реальными задачами. В твоем мире наверное стажеры допиливают Gmail, но я как-то с таким не сталкивался.
В моем мире js больше по части формочек и анимации на странице.
Ну ладно, мы с разных планет, не будем спорить.
Аноним 2015/12/22 18:42:05  №609742 534
>>609718
ну скачала композером, а дальше что? папка с фреймворком не открывается в браузере, доступ запрещен пишет.
Аноним 2015/12/22 18:46:59  №609745 535
>>609741
>Пусть используется. Я же не буду перечитывать исходный код jquery или mootools.
В одном случае из 10 - надо. Бывают случаи, когда есть некая редко-встречающаяся библиотека. Недавний пример с работы - нужно было найти готовый вариант для интерфейса тегирования - чтоб как втентакле проставлять теги на фотку. Готовых решений таких - пересчитать по пальцам. Нашли самый подходящий, но в нем был один косяк, который нам не подходил и решили устранить чутка дописав исходник. Работа понятное дело небольшая, но если бы фронтендщик не знал как пишут прототипы - наверное копался бы дольше. Это при том что работаю я в шараге, хуяк хуяк и готово. Где работа сложней хоть немного - таких прецедентов будет больше.
Аноним 2015/12/22 18:49:49  №609749 536
>>609742
А какой фреймворк ты ставишь то? В первом посте не написал ничего.
Аноним 2015/12/22 18:51:00  №609751 537
>>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)
}
В принципе, получается, это ненужная сложность тоже работает.
Аноним 2015/12/22 18:57:09  №609758 538
>>609745
Я и не говорил, что это не нужно знать, чего вы все накинулись.
Просто реализация ооп в js мягко говоря заставляет желать лучшего.
>если бы фронтендщик не знал как пишут прототипы
А у вас фронтендщик знает как в php парсить xml или работать с сокетами? Нет? Ну вот и я к тому же, что фулстек-фулстеком, а некоторое разграничение зоны ответственности все-таки должно быть.
Аноним 2015/12/22 19:00:36  №609761 539
>>609758
Фулстеки - миф. Говнокодеры, которые и швец и жнец и на хуе дуец не нужны. Разграничение ответственности не просто должно быть, а строжайшее. Иначе превратишься в раба, который одной рукой пишет скриптики, другой рукой макеты в фотошопе нарезает длля верстки.
Аноним 2015/12/22 19:00:51  №609763 540
Аноним 2015/12/22 19:01:35  №609764 541
Аноним 2015/12/22 19:02:03  №609765 542
>>609763
А еще там MyLibray без двух обратных слешей на конце.
Аноним 2015/12/22 19:06:26  №609767 543
>>609764
Спасибо, попробую. Вы тут все равно все геи, так что буду в своем роде писать.
Аноним 2015/12/22 19:07:48  №609768 544
>>609761
Я уже и не говорю о том, что фулстек - это физически не возможно, иначе один сайтик-проект будешь лет пять делать.
Работать и осваивать нужно на одной технологии, потому что пока другие осваивать будешь, первые забываются.
Аноним 2015/12/22 19:08:01  №609769 545
>>609761
Ну не скажи, есть и грамотные профессионалы, которые на фрилансе зашибают >2k зеленых, знал таких, уважаю. Правда работают по 16 часов в сутки.
Я бы так не хотел. Хочется и на природе отдохнуть с семьей, и книжку иногда почитать.

Ну и строгое разграничение ответственности не избавляет от среднего знания сопутствующих дисциплин. Например чтобы бекендер не начал высирать echo "<center>" например.
Аноним 2015/12/22 19:21:18  №609779 546
14508012781470.png (12, 376x137)
137x376
Это что еще за херня? Только сегодня заметил. Выскакивает на некоторых сайтах иногда. Никаких левых расширений у меня не стоит. Как это возможно?
ШОК, СЕНСАЦИЯ, ОПОБОЯЗНЬ Аноним 2015/12/22 19:24:59  №609782 547
Ребята, у меня ОПОБОЯЗНЬ.
Я делаю и заранее уже думаю, что что-то сделал не так.
Как мне успокоиться и начать жить?
http://ideone.com/M0dDNE - вот сделал первую проверку номера через регулярку.
Всё работает, всё показывает, но у меня уже ощущение, что сделано всё неправильно, можно было сделать проще и правильнее.
Аноним 2015/12/22 19:25:33  №609783 548
>>609779
Вирусня, у меня так было.
Аноним 2015/12/22 19:26:44  №609785 549
>>609769
Предполагаю, что эти профессионалы просто "агреггаторы фрилансеров". Люди - которые имеют распиаренные аккаунты на сайтах для фрилансеров и раздающие свои заказы удаленным разрабам.
Аноним 2015/12/22 19:35:22  №609795 550
>>609785
Нет, лично знаю пару человек, и не по двачам, а irl.
Действительно очень классные профи, причем не только веб-фулстек, но и отлично знают несколько других языков.
Естественно сеньоры с опытом 10-15 лет, а не 18-летние стажеры работающие за еду, как тут проповедует опчег.

Ну ладно, не хочу больше флудить. Истина посредине: понятно что никто не будет грузить джуна какими-то сложностями, но это не значит что достаточно знания синтаксиса чтобы взяли джуниором. Тем более что люди обычно ставят цель карьерного роста, а для этого нужно непрерывно учиться.
Аноним 2015/12/22 19:57:58  №609823 551
>>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/

Аноним 2015/12/22 20:04:01  №609831 552
>>609823
>Также и со сложными JS приложениями. Вполне возможно что разрабатывать их поручат тебе.
кусочек кода этих охуенных OOP-mlg-swag-JS приложений привести, чтобы ты охуел?
Аноним 2015/12/22 20:26:29  №609855 553
>>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

Я тоже так хочу, только брать заказы на западе и перепродавать тут.

Аноним 2015/12/22 20:27:05  №609857 554
>>609831

Меня ты вряд ли удивишь, но в целях обучения анонов можешь показать.
Аноним 2015/12/22 20:29:00  №609859 555
>>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' // нет +
);
Аноним 2015/12/22 20:36:39  №609867 556
>>607311
это не ссаные задачи. Это проекты среднего уровня, где можно многому научиться
Аноним 2015/12/22 20:36:59  №609868 557
>>609758
И я не знаю. Надо будет - на ходу доки читну.
бэкендер
Аноним 2015/12/22 20:38:29  №609871 558
>>609855
Я тоже "разбираюсь" и в том и в том, но делать и то и то и это для большого проекта одному человеку - не эффективно. Такое заставляют делать только очень жадные владельцы говноконторок и заказчики.
Аноним 2015/12/22 20:41:04  №609874 559
Аноним 2015/12/22 20:41:54  №609877 560
Аноним 2015/12/22 20:42:01  №609878 561
>>608914
>>609380
bump

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

>>609855
>Это выглядит как «не хочу учиться».
Не хотел бы, не решал бы твои всратые задачи.
Я всего лишь сказал, что мне не эстетически не нравится реализация ООП в js и выразил сомнение в востребованности серьезных приложений на js. Ну и сложные вещи явно делают не стажеры, я тебе не верю, можешь не пробовать меня переубедить.
Аноним 2015/12/22 20:50:44  №609883 562
Кстати, а зачем вы мне посоветовали в конфиг Апача лезть, чтобы уии2 развернуть? В прошлый раз я этого точно не делала. Локалка у меня итак работает (XAMMP), а вот сама папка фреймворка не разворачивается Access forbidden.
Аноним 2015/12/22 20:54:14  №609885 563
>>609823
>И никаких подробностей: ни что ты пишешь в адресной строке браузера, ни как настроен Апач. Без подробностей трудно что-то сказать.
>
>Алсо зачем браться за фреймворк если ты даже виртуальный хост на Апаче пока настроить не можешь.
Мальчеги, вы надо мной что ли издеваетесь) Я конечно девушка знатная, сиськи большие, жопа вот это вот все, но я уже два года делаю сайты на похапе и у меня прекрасно работает локалка. А вот фреймворк не разворачивается не знаю почему, собственно поэтому и был задан вопрос, как установить уии2. Зачем делать из меня дуру, не понимаю. Причем такая тупость в ответ на вопрос в этом треде постоянно встречается, вы видимо привыкли к нубским вопросам школьников.
Аноним 2015/12/22 20:57:29  №609888 564
>>609859
Блин, я никак не могу понять, почему у меня не работает указание количества цифр в регулярном выражении?
$regexp = '/^8([0-9]{3}-()\\s)([0-9]{5}-()\\s)$/'; - так не работает.
$regexp = '/^8([0-9-()\\s]+)([0-9-()\\s]+)$/'; так работает, но нет ограничения на количество цифр в номере.
Вроде всё просмотрел в том уроке - не нахожу дополнительных указаний для этого.
Я-то просто проверил те номера, проверил некоторые из тех, которые есть в твоей пасте, - просто похожие, подобного типа.
С этим было всё в порядке.
Чуть позже напишу проверку из массива, спасибо.
Аноним 2015/12/22 20:59:59  №609892 565
14508071999240.png (78, 300x300)
300x300
>>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?

Если такое пишут те йоба-стажеры битрикса, на которых молится оп, тогда я спокоен. Я тоже могу устраиваться в битурекс.
Но не хочу.
Аноним 2015/12/22 21:48:56  №609933 566
14508101360990.png (76, 1259x576)
576x1259
>>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 статус, надо разобраться...
Аноним 2015/12/22 22:01:16  №609940 567
yii\base\ErrorException:32 exception '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. Другие молчат в тряпочку, а этот отслеживает такие вещи, выбрасывает исключения знаешь ли.
Аноним 2015/12/22 22:34:57  №609961 568
>>609940
А, уже разобрался, действительно модуль был 2 раза подключен. На убунте какая-то странная структура кофигов php.
Файлов php.ini не счесть, так еще в папке /etc/php5/mods-available для каждого модуля отдельный файл. Черт ногу сломит.
Аноним 2015/12/22 22:41:09  №609966 569
> блаблабла я девочка
и что? Тут половина треда девочки, по крайней мере в душе, зачем в каждом посте напоминать?

>>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.


Аноним 2015/12/22 22:41:32  №609967 570
http://joomlaforum.ru/index.php?topic=80666.0
>Пока Ваш сайт не станет беспокоить Вас не передних страницах, я не стал бы волноваться.
>На вскидку, похоже на муху в PHP, а таковые - всегда есть были и будут в логах PHP/Apache/MySQL.
>Если нет ничего подозрительного в логах посещения сайта, не вижу причин для волнений.

Лысый человек тупой, или ему просто не хотелось долго и нудно расписывать клиенту как исправить эту ситуацию, поэтому отмазался увлекательной историей про "муху"?
Аноним 2015/12/22 22:51:32  №609969 571
>>609966
Разобрался уже.

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

И это же ворнинг, а не исключение, исключение бросает именно уй yii\base\ErrorException
Ну и уж точно 500 статус отдает не php.

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

Вообще для себя сделал вывод, что нужно забыть про рунет.
Кто не знает английского, срочно учите, потому что на русском языке вообще нет материалов.
Аноним 2015/12/22 22:59:20  №609974 572
>>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/


Аноним 2015/12/22 23:08:09  №609978 573
>>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 наверно тут лишний, не несет никакой пользы

> // к числу привести, или к строке?
без разницы мы все равно это выводим в консоль

В общем, решено верно.

Аноним 2015/12/22 23:09:18  №609981 574
>>609380

Насчет typescript, это майкрософт делает расширение JS для проверки типов, смотри как интересно: http://www.typescriptlang.org/Tutorial

Там и синтаксис для классов есть.

прочем на практике не стоит его использовать, так как не все его знают, да и нужен этап компиляции.
Аноним 2015/12/22 23:14:42  №609983 575
>>609966
>У тебя там 9 цифр всего разрешено в номере (включая восьмерку).
Ничего не меняется, если я пишу и вот так:
'/^8([0-9]{3}-()\\s)([0-9]{7}-()\\s)$/';
Сейчас пока сделал вот так всё, с помощью массива и очистки номера, как мы делали, когда палиндром очищали: http://ideone.com/VoniLC
Ещё сейчас сделаю проверку всех возможных номеров из твоей пасты, ещё попробую поставить \\d и \\D в регулярку. В принципе, это вообще может быть выходом, не подумал сразу.

>> так работает, но нет ограничения на количество цифр в номере.
>Да, надо его добавить. Можно сделать такую регялрку: сначала 8 или +7, за ними ровно 10 цифр между которыми любое число пробелов, скобок, минусов.
Буду пробовать, спасибо.
Аноним 2015/12/22 23:17:37  №609985 576
Привет. Может и не туда куда надо обращаюсь. Наивный пост.

Мне очень нужно стать материально обеспеченным. Я не хочу подрабатывать и дальше горе-дизайнером и "контент-менеджером" на фрилансе. Хочу обладать полезными знаниями которые хорошо оплачиваются. Съехать от родителей и начать уже самому нормально развиваться.

20 лет. Немного учил джаваскрипт, ушел не так далеко от Hello, world!, где-то в районе калькуляторов и какое из вводимых чисел больше (можно смеяться). Совсем школьником игрался с сайтом, но это больше с подгоном картинок, цветами и перераспределением кнопочек. Понимаю, что от школьного уровня далеко не ушел, но немного позанимавшись недавно почувствовал, что именно этим я бы и хотел жить. Может меня привлекло то, что PHP учить немного легче, ну и что с этого? Единственная проблема - не могу нормально начать заниматься. Передо мной стоит стена, которая постоянно мне мешала, только в этот раз я очень хочу через неё пробиться.

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

Спасибо.
Аноним 2015/12/22 23:23:27  №609987 577
>>609985
>В общем, тут сидите Вы, люди которые этим уже живут и зарабатывают на жизнь
кек

Тут кроме опа-дровосека нет грамотных разрабов. Из тех кто работает хоть где-то только пара говночистов битрикса и вордпресса.
>Единственная проблема - не могу нормально начать заниматься
Ты ждешь что сейчас кто-то скажет что-то волшебное, и ты "начнешь нормально заниматься"?
Аноним 2015/12/22 23:30:18  №609993 578
>>609961

Скорее всего это один файл на который стоят ссылки. Также для удобства у каждого расширения свой конфиг.

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

Более того, странно что у тебя такая ошибка, неужели это во встроенных конфигах что-то неправильно?

>>609969

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

> исключение бросает именно уй yii\base\ErrorException
Фреймворки часто преобразуют ошибки/варнинги в исключения.

> Но с большой долей вероятности гуглер н
Я проверил что ищется по моей ссылке

> Кто не знает английского, срочно учите,
хорошая мысль



Аноним 2015/12/22 23:30:39  №609995 579
>>609987
Нет. Жду то, о чем просил в самом конце. В волшебные слова и таблетки не верю.
Аноним 2015/12/22 23:34:59  №610001 580
>>609983

> -()\\s
Что это значит? Что оно должно делать?

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

Также, твой код ничего не пишет в этом случае - почему? http://ideone.com/QLmdqk

>>609985

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

Аноним 2015/12/22 23:56:11  №610020 581
>>610001
>Что это значит? Что оно должно делать?
Так не обращать внимание на разные знаки: минус, скобка вправо, скобка влево, пробел.
Это я делал до того, как стал просто от них очищать номер.
Я вот не пойму, почему я не могу в регулярке их просто указать и тут же указать количество возможных цифр - не работает это у меня, как ни вертел.
>Чтобы лучше изучить регулярки, сделай проверку без очистки.
Вот у меня застопорилось как раз на этом месте: не могу указать количество цифр вместе с лишними символами. Просто не пойму, что я ещё не учитываю, всё же вроде указываю...
>Также, твой код ничего не пишет в этом случае - почему? http://ideone.com/QLmdqk
Да, там можно поставить 8|+7 в начале регулярки, из массива убрать "+".
Но опять же проблема с количеством символов остаётся в простом виде, который я сначала сделал и который не учитывает количество цифр.
Аноним 2015/12/23 00:03:09  №610025 582
>Да, там можно поставить 8|+7 в начале регулярки, из массива убрать "+".
Аа, нет, так тоже не работает...
Тупость моя не знает границ, однако...
Аноним 2015/12/23 00:04:06  №610028 583
>>610020

ты что-то не так понял

> [0-9]{3}-()\\s
Это значит: ровно 3 цифры, за ними минус, за ними ровно один пробельный символ.

А как же скобки? Скобки тут спецсимвол и просто группируют пустое пространство внутри. Надо писать \\( чтобы указать символ скобки

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

AB

значит «A, за которой идет B»

A|B значит «либо A либо B»
[...] значит «любой один из символов в скобках»

Круглые скобки помогают группировать конструкции:

(A|B)C - A или B, за ними идет C
AB+ = А, за ней одна или больше B: ABBB
(AB)+ = ABABABAB

Перечитай-ка урок.

Аноним 2015/12/23 00:04:16  №610029 584
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";
но зачем объявлять лишние переменные и плодить строки кода.
Аноним 2015/12/23 00:12:06  №610036 585
>>610028
Спасибо, бро! Немного прояснело сейчас.
Сейчас снова прочитаю урок, действительно.
Аноним 2015/12/23 00:12:52  №610039 586
>>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

Аноним 2015/12/23 00:29:14  №610051 587
>>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 - в нее можно и класть.



Аноним 2015/12/23 00:31:28  №610053 588
>>610029

> Можно делать операции непосредственно в echo?
Нет

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

echo "... $word1 ... ";

И думает что ты пытаешься вывести массив. надо так:

echo ".. {$word1[$index]} ... ";

Но любые выражения там писать нельзя. Мануал http://php.net/manual/ru/language.types.string.php#language.types.string.parsing
Аноним 2015/12/23 00:33:56  №610055 589
Аноним 2015/12/23 00:34:01  №610056 590
Аноним 2015/12/23 00:48:55  №610062 591
>>610056
И нахрен я это запостил? Только всё удовольствие обломал анону.
Извините, не буду так больше делать.
Аноним 2015/12/23 00:57:22  №610066 592
>>610062
Ты хотел помочь, спасибо. А еще я узнал новую инструкцию.
Аноним 2015/12/23 01:18:58  №610077 593
Аноны, с какого браузера сидеть с ведра на кодакадеми? Они рекомендуют файрфокс, хром, ИЕ и сафари. С первых двух захожу, пишут что ваш браузер не поддерживается
Аноним 2015/12/23 12:50:59  №610247 594
Сюка...
Плачу сижу...
Какой же я тупоооооой...
В третий раз перечитываю http://archive-ipq-co.narod.ru/l1/regexp.html и не могу я сделать эту ссаную проверку номера со скобками, дефисами и пробелами, как надо...
Никак я не пойму, как сделать, чтобы в регулярном выражении искались все указанные символы, но чтобы регулярка учитывала количество цифр...
Без подсказки не судьба...
Перечитал подсказки ОПа мне - снова расплакался, потому что я ни хера не понимаю уже...
Аноним 2015/12/23 12:53:05  №610249 595
>>610247
Без рефлексии пожалуйста, у нас тут не тред оказания психотерапевтической помощи.
Аноним 2015/12/23 13:05:26  №610260 596
>>610249
Подскажи, пожалуйста, какая регулярка нужна для этой задачи:
>Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — праивльный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).
Выше делал ерунду с проверкой через массив с очисткой номера от ненужных символов, но как-то можно сделать через саму регулярку.
Вот как это можно сделать? Никак не додумаюсь.
Аноним 2015/12/23 13:09:04  №610263 597
>>610260
>Подскажи, пожалуйста, какая регулярка нужна для этой задачи:
Та, которая отфильтровывает неправильные телефонные номера.
Аноним 2015/12/23 13:30:10  №610277 598
>>610263
Регулярку в студию!
Аноним 2015/12/23 13:30:48  №610278 599
>>610277
Погоди, ты хочешь, чтобы я решил за тебя задачу?
Аноним 2015/12/23 13:37:31  №610282 600
>>610278
Какую-нибудь совсем прозрачную подсказку прошу - как минимум.
'/^8|\\+7((\\d{10}-\\(\\)\\s)?$/' - вот почему не работает это?
Как вообще указать в регулярке, что символ должен находиться в любом месте текста?
Как избавиться от последовательности, которая образуется, когда символы один за другим указываешь? Всё заключать в скобки?
Аноним 2015/12/23 13:38:11  №610283 601
Почему нет решения к задачам по JavaScript? Над первой пол вечера голову ломал, скажите как ее решить?!
Аноним 2015/12/23 13:38:17  №610284 602
'/^8|\\+7(\\d{10}-\\(\\)\\s)?$/' - вот так, точнее.
Аноним 2015/12/23 13:39:28  №610286 603
>>610282
>Как вообще указать в регулярке, что символ должен находиться в любом месте текста?
Наверное никак, но от тебя это и не требуется.
Аноним 2015/12/23 13:40:30  №610289 604
Аноним 2015/12/23 13:40:37  №610290 605
>>610286
Что же требуется от меня? Как я могу знать, сколько скобок может поставить юзер? Может, он поставит не код в скобки, а сам номер?
Аноним 2015/12/23 13:42:20  №610291 606
В чем смысл подобной "оптимизации"?
(new yii\web\Application($config))->run();
Разве нельзя было взять в переменную, а потом у этого объекта вызвать метод?

>>610283
Почему если не получается заработать денег их не выдают просто так?
Аноним 2015/12/23 13:44:34  №610292 607
>>610290
Ну вот предположим пользователь может ввести либо 911 либо (911) и оба этих номера должны быть правильными. Очевидно, что эту скобка должна идти в регулярке перед и после этих цифр с указанием повторений от нуля до одного раза "{0,1}" либо короткий вариант "?" что означает, что она может быть, а может и не быть в тексте. То есть конкретно для случая выше мне нужно будет написать регулярку вида:
//(?911//)?
Доступно объяснил?
Аноним 2015/12/23 13:46:45  №610293 608
>>610283
Потому что и ты не поможешь мне с регуляркой, и большинство тех, кто прошёл эти задачи, не помогут тебе.
Тут только ОП и пара анонов могут помочь. Остальные просто пройдут мимо.
А всё потому, что ты и сам не помоагешь мне с регуляркой.
Круговорт.
Аноним 2015/12/23 13:49:01  №610294 609
>>610292
Так там точно так же и "-" может идти, как быть в этом случае? Для всех возможных элементов в номере это прописывать?
Это доступно, спасибо. Но это я и так делал, такие дела.
Аноним 2015/12/23 13:49:43  №610295 610
То есть там может быть номер вида "8-(911)-506 56" - я об этом.
Аноним 2015/12/23 13:51:15  №610297 611
>>610294
>Так там точно так же и "-" может идти, как быть в этом случае?
Для этого есть [] только не забудь про экранирование, особенно тире, которое внутри квадратных скобок, если её не экранировать, будет означать символьный класс.
Аноним 2015/12/23 13:54:32  №610298 612
>>610292
Слеш не в ту сторону.

>>610293
Это простая задача, нечего здесь помогать. Прочитай еще раз теорию, пятый, десятый если нужно.
Программирование это умение думать логически (и изредка абстрактно).
Ты должен грамотно сформулировать условие задачи, это уже половина решения.
С этим номером телефона следующая ситуация:
8-(911)-506 56 56
Сначала идет либо цифра 8, либо +7. Если ты читал теорию, то ты знаешь, что в регулярных выражениях есть оператор "или". И оп выше в треде тебе его писал.
Дальше дефис, он может быть, а может не быть. В регулярных выражениях есть оператор "символ слева может быть один раз либо 0". Если ты читал теорию...
Дальше скобка открывающая может быть, может не быть.
Дальше ровно три цифры. Если ты читал теорию, ты знаешь, как указать количество подряд идущих символов.
Затем скобка закрывающая может быть, может не быть.
Затем дефис может быть, может не быть. Затем 7 цифр, между которыми могут быть пробелы, а могут не быть.
Аноним 2015/12/23 13:54:50  №610299 613
>>610297
Ещё немного прояснело, спасибо.
Минус я вообще не экранировал, вот лалка.
Аноним 2015/12/23 13:58:41  №610300 614
>>610298
Хорошо, спасибо.
Я просто запутался и стал думать, что нужно отслеживать ввод скобок в любом месте номера.
Также всё равно туплю с дефисами и пробелами - ведь они могут быть в любом месте основного номера.
Но тут уже буду разбираться сейчас.
У меня гипертестируемость уже.
Я смотрю, многие делают задачи и даже не парятся, работает или не работает правильно.
Аноним 2015/12/23 14:11:24  №610312 615
>>610297
Необязательно. Если расположить дефис в начале или конце, то он будет воспринят как есть. [-az] либо a, либо -, либо z.
Круглые скобки внутри квадратных тоже не нужно экранировать.
Аноним 2015/12/23 14:12:57  №610313 616
>>610312
Когда я сомневаюсь, нужно ли что-то экранировать, я это экранирую. Так надежнее и вреда никакого.
Аноним 2015/12/23 14:14:00  №610314 617
>>610313
Я когда сомневаюсь, смотрю документацию. Но это дело вкуса конечно.
Аноним 2015/12/23 14:35:16  №610324 618
14508705163200.png (35, 734x590)
590x734
14508705163211.jpg (41, 500x470)
470x500
сап, в пыхе недавно, пишу первые скрипты
решил побыстрому написать краулер, пилю второй день, такова прохладная:


всплыла хуева туча подводных
ссылки оказалось могут быть типа
#
..
/sasay
sasay
http://sasay


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

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

притом стараюсь код комментировать (отбивать tabami/пробелами не пошло чет, notapad и так подсвечивает где закрывается }

нуна функции юзать или как?
или это просто скрипт сам пос ебе трудоемкий?
cлава аллаху вроде как пашет :)

вопрос в нагрузку (внимание возможно выйти из стоя):

есть массив со ссылками
паршу по ним ссылки

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



зы: обезьяна ебучая, стремная капча из 80х опять
Аноним 2015/12/23 14:43:05  №610329 619
Аноним 2015/12/23 14:43:07  №610330 620
>>610324
Нет времени объяснять, просто найди готовую библиотеку.
Аноним 2015/12/23 14:47:20  №610331 621
Забавно, ОП оперативно добавляет подсказки в свои пасты после моих тупых вопросов.
Аноним 2015/12/23 15:21:30  №610351 622
14508732901170.png (320, 444x472)
472x444
>>610330
> найди готовую библиотеку

библиотека === готовый скрипт (если по простому), верно?

них не нашел, какие то отрывочные вскукареки на ТОСТЕРЕ и ХАБРА_ОБЩЕСТВЕ_ГОМОСЕКОВ из гугла - результата не дали

>Нет времени

постарайся уж пояснить мань, больше мне обсудить всю эту малафью нескем
Аноним 2015/12/23 15:25:09  №610352 623
Пишу к примеру парсер, парсер загружает определённые данные в базу данных, как сделать так, чтобы парсер самостоятельно обновлялся раз в 24 часа, то есть обновлял информацию в базе данных, полученную с другого сайта.
Аноним 2015/12/23 15:26:02  №610353 624
14508735623890.png (40, 986x349)
349x986
>>610351 вот кошак тоже говорит, что сложная хуйня мол, азаза
попробую патом толкнуть его за доширак, каким-нить лалкам-сеошникам))
Аноним 2015/12/23 15:30:09  №610355 625
>>610324
Это не скрипт трудоёмкий, это ты переменные называешь как 15л етний мудак.
Аноним 2015/12/23 15:32:46  №610357 626
Аноним 2015/12/23 15:33:10  №610359 627
Тут есть те кто зарабатывает фрилансом? Как побороть страх перед фрилансом и попробовать побороться за заказ? Смотрю проекты здесь https://www.weblancer.net некоторые мне по силам, но стрёмаюсь что на самом деле всё окажется не так как кажется сейчас и возникнет много подводных камней. Может быть кому то нужен помощник? Вы будете давать мне лёгкие заказы на которые лень тратить время?
Аноним 2015/12/23 15:38:31  №610361 628
Аноним 2015/12/23 15:39:14  №610363 629
Можно ли в вёрстке использовать отрицательные паддинги и маржины, это не является нарушением каких-нибудь правил?
Аноним 2015/12/23 15:40:21  №610364 630
>>610361
>б) функция sleep в бесконечном цикле
По моему извращение какое-то. Всё-таки пхп это не жаваскрипт.
Аноним 2015/12/23 15:41:58  №610366 631
>>610361
Что вообще делает твой краулер?
Аноним 2015/12/23 15:51:37  №610372 632
14508750970390.png (1612, 1280x1024)
1024x1280
>>610366

бегает по ссылкам из массива START

1) сохраняет внешние
2) по внутренним переходит и сохраняет с них внешние

нужно чтобы по внешним ссылкам переходил и делал шаг 1) 2) и так дрючился себе


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

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


нужно это например, челу из web который просил парсер мыл с германских сайтов (подключив крайлер он мог бы очень нехуевинько расширить базу таргетов для парсинга, за пару кликов)
Аноним 2015/12/23 16:14:45  №610385 633
14508764850770.png (544, 800x500)
500x800
Фух, ребята, разобрался с регулярками, спасибо за помощь!
Увидевшие эту регулярку сойдут с YMA: http://ideone.com/2vUD2N
Все номера из пасты ОПа рассматривает правильно.
Дошло только тогда, когда стал каждый шаг в создании регулярки проверять, такой вот тугодум.
Аноним 2015/12/23 16:29:13  №610397 634
>>610385
Не нужно брать каждый символ в квадратные скобки.
Квадратные скобки (символьный класс) - это список символов, которые могут находиться на данной позиции.
/4[5c8#y]9/ означает "сначала должна идти 4, на второй позиции один любой символ из перечня 5с8#y, третьим символом должна быть девятка".

Регулярка длинная и нечитабельная из-за копипасты.
Повторяющиеся куски можно нужно заменить на (повторяющийся набор символов){кол-во повторов}.

Смотри, после кода страны и города идут 7 цифр, между которыми могут быть скобки, дефисы или пробелы.
Опиши одну такую комбинацию, а потом просто укажи, что она повторяется 7 раз.
("дефис от 0 до 1 раза", "открывающая скобка от 0 до 1 раза", "закрывающая скобка от 0 до 1 раза", "цифра 1 раз"){7}
Аноним 2015/12/23 16:29:24  №610398 635
http://ideone.com/w3QKYo Начал решать задачку про палиндром не посмотрев что предложил ОП, получилось через while.
Что-то внутри меня бунтует против объявления переменных без указания типа данных и пока кажется странным синтаксис языка.
Аноним 2015/12/23 16:29:57  №610399 636
14508773974540.jpg (56, 225x220)
220x225
>>610385
Вот в таком выражении:
>{1}
нет никакого смысла. Выражение ищется ровно один раз по умолчанию что с этим квантификатором, что без него. И не нужно городить вот такие регулярки:
[abc]\\)?[abc]\\)?[abc]\\)?
Когда можно обернуть повторяющийся код в скобки и поставить после него квантификатор:
([abc]\\)?){3}
Аноним 2015/12/23 17:23:49  №610440 637
>>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 цифры, между которыми может быть любое число пробелов, минусов, скобок

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

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

И не проси готовых ответов, так ты ничему не научишься.
Аноним 2015/12/23 17:32:53  №610454 638
>>610291

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

> Разве нельзя было взять в переменную, а потом у этого объекта вызвать метод?
Можно

>>610313

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

\ ^ [ ] -

>>610324

Не надо парсить DOM регулярками, используй DOM + XPath или библиоткуи вроде phpQuery

не надо писать код работы с курлом напрямую, используй какую-нибудь библиотеку-HTTP клиент

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

Называй переменные нормально

делай проверку вызовов функций на ошибки.

Вместо fopen/fwrite/fclose есть file_put_contents

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

Аноним 2015/12/23 17:39:05  №610463 639
14508815455440.webm (3568, 320x184)
184x320
>>>610372

братишки, поч так?
https://ideone.com/weWPtu

нуна добавлять в конец массива значения (изнутри этого массива), так нельзя?
Аноним 2015/12/23 17:40:36  №610464 640
>>610463
Что за one two? Ты про строчные значения не слышал?
Аноним 2015/12/23 17:41:57  №610468 641
>>610331

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

>>610363

Отрицательных паддингов не бывает.

Отрицательные маргины - можно. А зачем они тебе понадобились? Они точно нужны или ты хочешь сделать костыль потому что не понимаешь как работает CSS? Если второе, советую порешать наши задачки на HTML/CSS из ОП поста, они может помогут разобраться.

>>610372

Спамер? катись-ка в /wrk отсюда. Если кто-то рассылает спам значит он продает никому не нужную ерунду которую кроме него берут из того же источника и продают еще 50 человек и спам ему вряд ли поможет.

Справедливости ради, кроме нелегальных спамеров есть еще и так называемые легальные - например фейсбук, твиттер. Они рассылают бессмысленные уведомления («знакомы ли вы с ололошем ололошевым?» или «почитайте этих интересных блогеров из госдепа») ради того чтобы люди кликали по ним, переходили на сайт и накручивали посещаемость (больше просмотров = больше денег от рекламы).

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

Аноним 2015/12/23 17:42:09  №610470 642
>>610440
Спасибо, ОП, я как раз шёл по предложенному тобой сейчас алгоритму: постепенно и посимвольно проверял работу разных конструкций в регулярном выражении. Думаю, стоило бы этот алгоритм и в урок добавить - направление для обучения регуляркам.
>>610397
Спасибо, уясню это и чуть позже попробую сократить, теперь это уже всё понятно.
>>610399
Да, это осталось, забыл поменять на [\\d{3}]?
Про повторяющийся в регулярке код теперь знаю, спасибо.
Аноним 2015/12/23 17:43:35  №610474 643
>>610464

упрощенный вариант - для теста
вместо one, two будут строки
Аноним 2015/12/23 17:45:31  №610478 644
>>610474
Ну так в чем вопрос был? Посмотри дамп массива и увидишь, что всё добавилось.
Аноним 2015/12/23 17:46:06  №610481 645
>>610385

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

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

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

Ну например выражение

ABCABCABC

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

(ABC){3}

{3} значит выражение в круглых скобках повторяется 3 раза.

Далее:

- [\\s]? - это то же самое что \\s?, квадратные скобки нужны когда мы хотим написать «один из указанных символов», а у тебя всего 1 символ и есть

- [\\s]?[\\-]?[\\s]?[\\(]? - тут квадратные скобки лишние, это равноильно \\s?-?\\s?\\(?. Но и так слишком длинно. Попробуй заменить это на такое выражение:

«любое число пробелов, скобок, минусов в любом порядке»

[0-9]{1} - то же самое что [0-9], писать еще {1} никакого смысла нет.

Аноним 2015/12/23 17:48:22  №610486 646
>>610470

> забыл поменять на [\\d{3}]?
Неправильно. Внутри квадратных скобок { и } не имеют специального значения. Выражение

[\\d{3}]

значит «одна любая цифра или одна любая фигурная скобка»

Аноним 2015/12/23 17:48:35  №610487 647
Куда посты пропадают? Я даже тред не обновлял
Аноним 2015/12/23 17:49:13  №610489 648
>>610470

Да, урок по регуляркам надо переделывать.
Аноним 2015/12/23 17:52:24  №610491 649
14508823440340.jpg (41, 485x604)
604x485
>>610468

неа

>Если кто-то рассылает спам значит он продает никому не нужную ерунду

смотрите, кажется очередной маня-мирок лопается :)

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

интернет магазин по продаже трав уведомляет что готов продавать травы производителей

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

взаимовыручка, всем хорошо
Аноним 2015/12/23 17:56:32  №610497 650
>>610491

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

А когда ты шлешь шаблонное сообщение на все мыла без разбора - это спам.

Алсо статья по теме с точки зрения того кто этот спам получает: http://habrahabr.ru/company/mosigra/blog/272287/
Аноним 2015/12/23 17:58:08  №610498 651
>>610491

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

Ох лол, какое уникальное предложение. Интуиция подсказывает мне что есть еще 20 точно таких же магазинов которые перепродают товар одного и того же производителя. Раз они взялись за спам, значит не очень-то нужны их услуги. Потому что если бы они были нужны их бы находили через гугл или может контекст.
Аноним 2015/12/23 17:58:14  №610499 652
14508826945190.webm (944, 640x480)
480x640
>>610478
в foreach только 1 значение выводится
stout посмотри
https://ideone.com/weWPtu


а должно быть 2, в массив же добавили значение в конец, а форич его не выводит

задача: все как в примере - добавлять значения в массив (изнутри массива)
Аноним 2015/12/23 17:59:51  №610503 653
>>610486
Ох щи, точно!
Надо ставить \\d{3}, спасибо снова.
>>610489
Я все примеры работы выражений переносил в IDE, смотрел, как работают скрипты. Однако на проверке номера застрял. Совет с поэтапной проверкой меня бы убыстрил, я уверен.
Аноним 2015/12/23 18:01:55  №610506 654
>>610499
https://ideone.com/L7cKDc Всё добавляется. То, что у тебя foreach Не выводит добавленное значение, то так и должно быть, ведь на момент запуска цикла там было лишь одно значение.
Аноним 2015/12/23 18:03:27  №610507 655
>>610499
Что там за ересь? Чего квадратные скобки там делают в имени массива?
Аноним 2015/12/23 18:05:11  №610508 656
Аноним 2015/12/23 18:06:46  №610510 657
Кстати, есть определенный момент когда компания переходит на темную сторону. Рано или поздно рост пользовательской базы замедляется, и начинается пора монетизации этой базы. Есть время сажать зерна и есть время собирать урожай.

Я был зарегистрирован на хабре и много лет они не рассылали никакого спама. Но в определенный момент, они выросли и начали нанимать (видимо) менеджеров по развитию. Что делает такой менеджер первым делом? Правильно, начинает рассылать спам. Это самый простой способ накрутить посещаемость и создать видимость полезности своей работы. Да и ничего другого они все равно ничего не умеют.

Хабр начал рассылать спам под видом писем «смотрите какие интересные статьи вышли на этой неделе». Вы что, дауны? Если бы я хотел почитать ваши статьи, я бы зашел и почитал.

Это именно спам, как не смотри. Они рассылают мне то, что я никогда не просил мне присылать. Почему их не вносят в черные списки?

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

Также хорошо бы переделать почтовый протокол - чтобы всякие организации не могли делать рассылки без предварительного согласия пользователя.
Аноним 2015/12/23 18:10:48  №610514 658
>>610498

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

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

и вручную это накладно/не возможно

>>610498

ну охуеть теперь)
ты мимо пхп-макака проспамся по 500к организациям, посмотрим станеш нужен или нет (скорее всего да)
споры уровня б

>>610507
просто иди нахуй)

>>610506
все верно, я сразу делал var_dump()

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

>ведь на момент запуска цикла

ну поидее массив по порядку перебирает и во время выполнения в конец добавляются значения, по логике должен их тоже обработать
Аноним 2015/12/23 18:14:07  №610519 659
>>610514
Ну так используй обычный цикл for и внутри после добавления элемента уменьшай счетчик на 1. Правда этот метод не подходит для ассоциативных массивов.
Аноним 2015/12/23 18:18:23  №610524 660
Почему мои посты про мокрую писечку пропадают? Фу, пидоры.
Аноним 2015/12/23 18:19:24  №610526 661
>>610514

Ты же школьник судя по посту. Что ты забыл в нашем треде? Уходи в /wrk. Это тред про прграммирование, а не про рассылку спама.

Аноним 2015/12/23 18:23:11  №610532 662
>>610514
научи спамить. как кнопки автоматом тыкать? вроде есть какое-то приложение в браузере?
Аноним 2015/12/23 18:23:27  №610533 663
>>610514

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

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

Например я покупаю товары в интернет-магазинах и я нахожу их без всякого спама. Просто они предлагают более удобные и выгодные условия, чем их конкуренты.
Аноним 2015/12/23 18:30:46  №610542 664
писечка то у меня все еще мокрая)
Аноним 2015/12/23 18:31:15  №610544 665
14508846757030.jpg (38, 549x604)
604x549
>>610526
да похуй мне на эти рассылки. хз почему у тебя так бомбит срака.. просто краулер пишу (а про емейлы написал - как пример использования краулера на практике)

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

>>610532

нах тебе спамить? я новичок, но чем могу помогу конечно

temper data в лисе, запускаеш - заполняеш форму - перехватыеш (смотриш какие переменные нужно заполнить)

посылаеш на ссылку которая в action пост/гет запрос с заполненными переменными они же поля и кнопка сама щелкается
Аноним 2015/12/23 18:32:10  №610545 666
>>610542

спотела чутка, откуда инфа? O_o
Аноним 2015/12/23 18:37:45  №610552 667
>>610507
сори что написал иди нахуй, прост показалось что ты агришся

так можно добавлять значения в массив (они добавятся в конец) - в специалисте показывал учитель эту фишечку
Аноним 2015/12/23 18:37:48  №610553 668
Посоны подскажите как правильно.
Написал небольшой скрипт который работает со сторонним api. Посылается запрос с id объекта, в ответе - информация об этом объекте. Один запрос - один ответ с информацией об одном объекте. Так вот, нужно иметь возможность получать информацию о нескольких десятках\сотнях объектах за раз.
Через jqeruy я сделал последовательный перебор по массиву с id, где рекурсивно вызывается функция которая запускает через ajax скрипт который по переданному id получает инфу об объекте через апи. При успешном выполнении ajax снова вызывается эта функция, но уже со след id в массиве, пока они не закончатся. В принципе, все работает. Но меня терзают смутные сомнения, что это немного не правильно, выполнять это на стороне клиента(через ajax). Верно? Или лучше выполнять все на стороне сервера? И как это делается? Насколько я понимаю нужно как-то разбивать скрипт на отдельные подскрипты, ведь на хостинге время выполнения одного скрипта обычно ограниченно минутой-две, а задержки при запросах и при большом количестве объектов вообще могут занимать очень много времени. Как вообще решаются такие задачи на стороне сервера?
Аноним 2015/12/23 19:02:29  №610579 669
14508865495730.jpg (168, 858x1280)
1280x858
>>610519

вот этому мудрецу чая,
через for рили работает

https://ideone.com/weWPtu

а анти-спам кун, лучше прячся под шконку, найду и заспамлю нах, бу!
Аноним 2015/12/23 19:03:24  №610580 670
>>610519
fix
увеличивай счетчик ток ты имел ввиду
Аноним 2015/12/23 19:06:21  №610583 671
Вот интересная статья: https://m.roem.ru/23-12-2015/215749/putin-and-runet/

В общем то многое из написанного адекватно, но вот это...

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

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

Как с этим бороться? Есть только один способ. Надо создавать отечественные сервисы, и избегать использования американских технологий вроде cloudflare, adsense или google analytics. Ну к примеру, вконтакте - при его использовании NSA остается с носом (хотя раньше там по моему стояли иностранные системы аналитики, но я уже плохо помню. сейчас вроде нет).

Аноним 2015/12/23 19:13:07  №610590 672
14508871874870.jpg (125, 1500x1000)
1000x1500
Так как PHP язык web'a спрошу тут.
Анон, посоветуй где почитать про CSS. Хочу научиться верстать.

Т.е. когда я пишу какой-то html, потом описываю какой то css, блоки уезжают не туда куда я хочу. Начинаю тыкать всякие float:left и тд.

Что почитать, чтобы знать что вот этот блок мне нужно сюда, значит я должен написать вот это и тд.
СПС.
Аноним 2015/12/23 19:16:31  №610597 673
Аноним 2015/12/23 19:18:07  №610599 674
>>610590
Поддвачну вопрос. Но больше интересуют всякие мастерские трюки и методы хорошей верстки. Быдловерсткой владею достаточно уверенно, могу даже сверстать с макета, но времени уходит довольно много, и порой приходится использовать какие-то костыли. Короче, хочется поднять свой уровен.
Аноним 2015/12/23 19:18:47  №610600 675
>>610510
>«никогда не показывать письма от этого получателя».
Вроде на Яндекс.Почте такое появилось недавно. Плюс тупо можно отписаться от новостей и оповещений сайта.
Аноним 2015/12/23 19:20:40  №610602 676
>>610597
>htmlbook.ru,
Ой, бля. Задрачив азбуку до дыр ты нихуя не станешь образованным интеллектуалом.
Аноним 2015/12/23 19:22:46  №610605 677
Аноним 2015/12/23 19:24:04  №610607 678
Спасибо, аноны. Пойду разбираться.

610590-кун
Аноним 2015/12/23 19:27:18  №610609 679
Видали, какие сайты красивые на всяких виксах? С разными шаблонами, возможностью добавлять всякие апп, гугл карты, делать магазин и прочее. Вебмакаки не нужны, наступил век конструкторов.
Аноним 2015/12/23 19:31:41  №610613 680
>>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
Аноним 2015/12/23 19:32:03  №610615 681
>>610609
То-то я смотрю, на срилансе количество заказов вроде перенести сайт со сранного викса на вордпресс становится все больше и больше.
Аноним 2015/12/23 19:44:03  №610629 682
>>610553

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

чтобы выключить лимит времени
в шапку
set_time_limit(0);
Аноним 2015/12/23 19:47:03  №610631 683
>>610629
Это не костыль?
То есть как понимаю, других вариантов нет?
Аноним 2015/12/23 20:06:20  №610642 684
>>610609

А конструкторы кто пишет и поддерживает?
Аноним 2015/12/23 20:12:51  №610650 685
Как пользоваться этим плагином для композера?
https://github.com/francoispluchino/composer-asset-plugin
Вроде позволяет загружать фронтенд-пакеты типа jquery или bootstrap через композер.
Но не понятно как ими пользоваться, они же попа дают в папку vendor. Может у композера появляется еще какая-то команда для "публикации" этих ассетов?
Аноним 2015/12/23 20:17:36  №610656 686
>>610613

Нет, все неправильно.

> https://github.com/someApprentice/Students/blob/master/app/Model/Gateway/StudentGateway.php#L4
> extends TableDataGateWay {
Gateway, а не GateWay - будь внимательнее. На линуксе имена файлов чувствительны к регистру и твой код не заработает.

> protected $student;
> protected $hash;
> protected $salt;
> protected $token;
зачем в классе для работы с БД эти свойства? Что они должны хранить?

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

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

> protected $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 его создавать удобнее так как это делается один раз и не надо копипастить код создания в несколько разных мест.

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

Аноним 2015/12/23 20:22:07  №610660 687
>>610650

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

Обычно для этого используют gnunt, gulp (новее). Я всегда использовал самописные bash скрипты, по моему они лучшеи удобнее, а у описанных выше инструментов неадекватный способ конфигурирования, но популярен именно gulp.

В том же Юи есть вроде assets которые позволяют «опубликовать» файлы из непубличных папок.

Аноним 2015/12/23 20:22:59  №610662 688
14508913793750.png (27, 990x223)
223x990
>>610359
такая-то корзинка)
поясните кто работает за расценки
20$ норм за пикрелейт?

>>610631
неа, прост убирает лимит
Аноним 2015/12/23 20:23:28  №610663 689
14508914082670.png (7, 553x232)
232x553
мне кажется или кнопка на пол-пикселя меньше инпута? как это убрать?
Аноним 2015/12/23 20:24:57  №610665 690
>>610615
это вообще возможно?
Аноним 2015/12/23 20:25:33  №610666 691
>>610642
оп сказал, что на написание конструктора у одного разраба уйдет вся жизнь.
Аноним 2015/12/23 20:27:17  №610669 692
14508916378290.jpg (47, 630x356)
356x630
Аноним 2015/12/23 20:27:23  №610670 693
>>610660
О боже, нужно ведь всего лишь скопировать несколько файлов из закрытой директории в публичную, даже тут столько мороки.

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

Ну офигеть теперь.
Аноним 2015/12/23 20:27:38  №610671 694
>>610663

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

>>610666

Не вся жизнь, но полгода например может уйти.
Аноним 2015/12/23 20:31:29  №610673 695
>>610670

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

А! Вспомнил. В композере есть хуки. Ты можешь назначить вызов php скрипта после любой установки или обновления пакетов. Соответственно можешь попробовать на коленке слепить скрипт публикации файлов.

https://getcomposer.org/doc/articles/scripts.md

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


Аноним 2015/12/23 20:34:51  №610679 696
>>610665
Так не идентичную же копию сделать, а просто сделать похожий сайт. Хотя я еще ни одного нормального сайта сделанного на том же виксе менеджером васяном не видел. Все они выглядят как говно, которые раньше клепали школьники на юкозе.
Аноним 2015/12/23 20:36:11  №610681 697
>>610673
Чё ты обзываешься, питер пен бесхвостый?
Надо будет, разберусь и в грунтах, и в исходных кодах линукса.
Только мне почему-то кажется неадекватным усложением для решения задачи копирования файлика из одной папки в другую пользоваться двумя менеджерами пакетов и самописными говноскриптами.
Аноним 2015/12/23 20:38:14  №610686 698
14508922943690.png (65, 993x690)
690x993
15$ за 2 дня, норм
Аноним 2015/12/23 20:39:11  №610687 699
>>610686
>15$ за 2 дня, норм
Я бы лучше грузчиком пошел.
Аноним 2015/12/23 20:41:58  №610693 700
Аноним 2015/12/23 20:45:57  №610698 701
>>610686

Если у тебя есть готовые скрипты, надо только чуть подправить конфиг. Час-два работы.
Аноним 2015/12/23 20:46:52  №610699 702
>>610686
я не понял тз(((
что значит "выкачивать материалы каталогов", да еще в формате экселя?
Аноним 2015/12/23 20:49:48  №610701 703
Всем суток времени доброго. Есть мленький опыт в Си и Обжектив-Си, работал чуть-чуть с ООП. Насколько перспективно начинать сейчас заниматься вебом, а именно php (с упором в php нежели фулстэк)?
Аноним 2015/12/23 20:50:17  №610702 704
>>610699

парсер с сохранением какой-то там структуры, и шоб в excel нах, 15$

гей-шлюха-кун уссыкается от смеха наверное
Аноним 2015/12/23 20:50:46  №610705 705
>>610698
Ха. Это верно практически для любой задачи.
Если бы было так все просто, то я бы уже давно стал миллионером нихуя при этом не делая.
Аноним 2015/12/23 20:55:42  №610709 706
>>610705

Ты просто не хочешь ничего делать. Чтобы зарабатывать на этом рынке надо быть умнее и гибче других. Либо брать и выполнять сотнями такие заказы (100 × 15 = $1500, а ведь это предварительная цена), либо собирать и перепродавать их за меньшие деньги.

Либо учись и занимайся чем-нибудь поинтеллектуальнее.
Аноним 2015/12/23 20:56:05  №610711 707
>>610702

Зато от парсинга попа не болит.
Аноним 2015/12/23 20:56:31  №610712 708
>>610701
Да, похуй вообще. Маленький опыт - значит никакого опыта. Просто начинай ебашить, если не бросишь, то работу всегда найдешь.
Аноним 2015/12/23 21:06:03  №610721 709
>>610709
Так я и не про себя писал. С заказами проблем нет, но из-за ебучей лени не получается нормально работать . Просто имел в виду, что это самое дно, таким заниматься. В начале еще можно, но потом. А свою ахуительную арифметику 100 × 15 = $1500 оставь наивным новичкам мечтающим начать зарабатывать в интернете. Я уж и не говорю про то, что в 90% таких "проектах" заказчики конченные долбоебы-перекупы, и с которых кроме геморроя нихуя не заработаешь.
мимо-макак-срилансер
Аноним 2015/12/23 21:06:10  №610722 710
>>610702
а, кажется понял: типа на сайте конкурентов выложены в табличном виде каталоги их продукции
и этот чел хочет чтобы кто-то извлек это дело и схоронил в ексель.
это в общем-то действительно не сложно, и тот очкозавр указал 2 дня специально с запасом, явно можно сделат быстрее

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

занавес
Аноним 2015/12/23 21:08:05  №610723 711
>>610721
расскажи где фрилансиш
чо делаеш конкретно, как по баблу
Аноним 2015/12/23 21:09:40  №610724 712
>>610722

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

>>610721

Да, в общем-то скрейпинг это дно фриланса. Хотя у меня конечно есть задумка брать такие заказы на западе и перепродавать тут, как ты думаешь, получится?
Аноним 2015/12/23 21:10:05  №610725 713
https://github.com/V3N0m21/Uppu4
ОП, решил я переписать свой файлообменник сначала и убрать все лишнее\переписать все что мне кажется кривым. Комменты пока не переписал, нужно свежим взглядом все просмотреть, потому что у меня там походу знатные велосипеды понаписаны.
Интересует правильно ли я организовал работу с UserHelper'ом, он у меня взял на себя также взял функции LoginHelper'а - это правильно, или это нарушение правила single responsibility?

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

Из того что пока вижу надо доделать автентификацию при удалении файлов и пользователей с комментариями, и возможно доделать валидацию
Аноним 2015/12/23 21:10:42  №610727 714
14508942420960.jpg (57, 720x717)
717x720
>>610722
у меня срака бомбанет от такого (уже бомбит)

надеюсь возьмут куда-нить на постоянку или запилю ёба -проекты свои
Аноним 2015/12/23 21:30:37  №610743 715
>>610712
Маленький опыт я приплёл к тому, чтобы показать что мне не надо проходить ньюфаг учебник из шапки (может задания потягать от туда и не более, синтаксис и на пхп.нет могу выучить).
Аноним 2015/12/23 21:31:45  №610745 716
>>610722
Ох, лол как же мне это знакомо. Только я обычно не довожу дело до сделки с незнакомыми мне людьми, и отзыв они поставить не могут.
Аноним 2015/12/23 21:39:36  №610760 717
>>610723
Сейчас в основном работаю со старыми заказчиками, которых наработал во время фриланса.
Но это для меня скорее хобби, чем заработок денег. Но заработать можно, только бы не ленится бля.
Аноним 2015/12/23 22:38:45  №610810 718
>>610481
Вот сократил с учётом рекомендаций: http://ideone.com/wzPQ7W
>Но и так слишком длинно. Попробуй заменить это на такое выражение:
>«любое число пробелов, скобок, минусов в любом порядке»
Я вдоль и поперёк прочитал страницу с уроком по регулярным выражениям, но ничего там не нашёл специфического, чтобы можно было именно таким выражением посчитать.
Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?
Но никак не продумаю сокращение. Там должен \\s быть с обеих сторон от символов скобок и минуса, затем должна идти цифра.
Пробую так сделать - не работает: (\\s?(\\)?|\\-?|\\)?|\\(?)\\s?[0-9]){7}.
Суть этой конструкции: символ пробела может быть, а может и не быть, дальше могут быть или не быть или ), или (, или -, затем опять символ пробела может быть или не быть, а затем идёт цифра. Что здесь-то у меня не так?
Аноним 2015/12/23 22:54:07  №610821 719
>>610686
бля ну и рожа, я бы с ним и ссать рядом не сел.
гейшлюха-кун
Аноним 2015/12/23 22:57:49  №610824 720
>>610709
Просто скажи мне. ладно еще контент спарсить file_get_content, но со структурой и как это в ехел конвертировать??? Ща опустим цену в 15 баксов. Допустим это будет стоить 3000 штуки баксов и срок месяца три - я бы еще мог не полениться и что-то там погуглить.
Аноним 2015/12/23 22:58:55  №610826 721
>>610722
явно не в ручную сохранять, а именно прога, которая берет, парсит и сама сохраняет.
Аноним 2015/12/23 23:09:05  №610832 722
>>609987
>Из тех кто работает хоть где-то только пара говночистов битрикса и вордпресса.
Нет ты.

>>609985
картинка_с_лебедевым.жпг
Аноним 2015/12/23 23:25:44  №610848 723
Вы во что тред превратили, ироды? Так лампово тут было ещё месяца два назад. А теперь сплошной флуд.
Аноним 2015/12/23 23:28:25  №610850 724
Как в вордпрессе сделать, чтобы оранжевое подчеркивание было по нижней границе меню? в хтмл меню залезть не могу, палочки между списком должны быть короткими.

top-menu ul {
margin-top:20px;
margin-bottom:20px;
}
.top-menu li {
display: inline-block;
padding: 0px 20px;
list-style-position: inside;
font: 10px NexaLight;
}
.top-menu li:not(:last-child) {
border-right:1px solid #767676;
}
.top-menu li.current_page_item {
border-bottom:1px solid red;

}
Аноним 2015/12/23 23:28:58  №610851 725
14509025383910.png (1, 373x81)
81x373
Аноним 2015/12/23 23:32:20  №610854 726
>>610848
хочешь поговорить о стимуляции дырочек? :3
Аноним 2015/12/23 23:36:58  №610856 727
>>610662
Что значит не писались ссылки?
Аноним 2015/12/23 23:39:03  №610859 728
>>610856

на сайте появляются левые ссылки (evil код)
задача - найти его и удалить
Аноним 2015/12/23 23:40:52  №610860 729
Что вообще надо больше уметь на фрилансе? Уметь натягивать вёрстку на вордпресс и верстать? Или же писать более менее сложные скрипты, вроде парсеров и т.д.?
Аноним 2015/12/23 23:41:51  №610862 730
>>610859
А как это делать? Находишь ссылку на странице, залазишь в базу данных, проверяешь нет ли там такой ссылки, если нет, то удаляешь?
Аноним 2015/12/24 00:01:25  №610890 731
>>610862

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

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

>>610860

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

>>610850

А ты CSS знаешь? Мы не делаем за других их работу.

Аноним 2015/12/24 00:01:58  №610892 732
>>610824

Я сомневаюсь что человеку которому лень погуглить, кто-то заплатит даже 200 долларов в месяц, не то что 1000.
Аноним 2015/12/24 00:36:06  №610916 733
14509065664320.png (608, 964x627)
627x964
>>610890
Я попробовал только что, раз уж они тут завели беседу о фрилансе.
Почти сразу наткнулся на задачу про калькулятор калорий и цен для какой-то пиццерии или закусочной. Прям как в твоем задании про гамбургеры.
Так что оказывается они довольно практичные (задобрил)

Как делается подобный пикрелейтед калькулятор?
Это оно аяксом при выборе из списка гоняет запрос на сервер, а потом джаваскриптом берет значения из формы и вычисляет результат?
А безопасно ли это? Ну вот допустим чувак выбирает фаршированную курицу, с сервера приходит какая-то цена, типа 100 рублей за 100 грамм. Куда сохранить это значение? Если куда-то в html, то хитрый юзер может взять и руками отредактировать html текущей страницы, вместо 100 рублей поставить 1 рубль и отправить заказ по такой цене.
Может в localstorage?
Кешировать ли результаты? Например юзер передумал и взял грудку индейки вместо куриной. А потом обратно куриную. Может сохранять куда-то все эти промежуточные результаты, чтобы не дергать сервер?
(я не собираюсь брать этот заказ, не стукай, мне просто интересно, в какую сторону копать, чтобы научиться такое делать)

У меня складывается впечатление что фриланс только для опытных разработчиков, без опыта там нечего ловить кроме заданий уровня наполнить контентом cms или поправить верстку. Лучше попробую устроиться в какую-нибудь скромную контору за еду и года за два прокачаться до нужного уровня, а там посмотрим.
Аноним 2015/12/24 00:40:42  №610919 734
>>610890
Да, я цсс знаю, и это не работу, маня, это для партфалио. Не знаешь вордпресс, тогда нахуй иди.
Аноним 2015/12/24 02:01:48  №610939 735
Кто может объяснить про IoC (Inversion of Control)
Курю сейчас уроки по Laravel и вот не могу понять каким магическим образом какой то класс видит что для конструктора другого класса нужен класс3 и потом где-то ищет его реализацию и создает объект и отправляет его в тот второй класс.

Как реализуется поиск этого всего?
Аноним 2015/12/24 10:26:51  №611078 736
>>610553
Посоны, никто не знает что ли? Задача ведь достаточно распространенная.
Аноним 2015/12/24 13:19:42  №611151 737
Чё так мертво в треде?
Аноним 2015/12/24 14:25:01  №611197 738
14509563016940.jpg (34, 484x497)
497x484
>>611151

у кого-нить был опыт использования multi-curl ?

я седня приуныл и нихуя не пишу
написавший-краулер-кун, пишите если нуна кому может будет, залью
Аноним 2015/12/24 15:02:40  №611228 739
Аноним 2015/12/24 15:10:04  №611235 740
Аноним 2015/12/24 15:29:05  №611266 741
>>611151
Ща, погоди, начну к вам приставать с регулярками.

Итак, нужен скрипт для проверки на ошибки, вторая задача от ОПа на регулярки.
>нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
>«жи» или «ши» написано с буквой ы
>в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
>в тексте есть слова «а» или «но» без запятой перед ними.
>В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).
Алгоритм такой. Составляем регулярное выражение, в котором ищутся следующие сочетания символов: "\\,[а-я]", "\\;[а-я]", "\\![а-я]", "\\?[а-я]", "\\:[а-я]", "(ж|ш(ы))", "(координально|сдесь|зделал|зделаю|зделан)", "\\,а", "\\,но". Далее с помощью функции preg_split и этого регулярного выражения находим в тексте все ошибки, засовываем разбитый ими текст в массив $errors. Далее в echo нам нужно вывести соседние элементы в массиве и между ними часть регулярного выражения, которая и разбила текст на эти вот фрагменты.
Правильный ли подход?
Ни черта не работает у меня. Наверное, потому что не могу логически и абстрактно мыслить, такие дела.
Аноним 2015/12/24 15:31:24  №611272 742
>>611266
>Ни черта не работает у меня. Наверное, потому что не могу логически и абстрактно мыслить, такие дела.
Нет более жалкого зрелища, чем жалеющий себя человек. Завязывай с этим, никто этого не любит.
Аноним 2015/12/24 15:33:16  №611277 743
Ананасы, вопрос не совсем по теме. Будет собеседованию на позицию разработчика. Будут больше спрашивать по sql, но я там так себе секу. Может, кто-то подскажет, на каком уровне надо знать? Позиция стажера. Вангую ответа тиnа sql-ex
Аноним 2015/12/24 15:34:15  №611280 744
>>611272
Хочешь, я тебя пожалею?
Это я подтрунивал над словами анона, который говорил выше, что для программирования надо логически и абстрактно мыслить. У меня тупо опыта нет, я с нуля это всё прохожу, впервые столкнулся с этим, какой там "мыслить абстрактно".
Аноним 2015/12/24 15:34:52  №611281 745
>>611277
>Будут больше спрашивать по sql,
>но я там так себе секу
Ну ты провалишь собеседование. От нас то ты чего хочешь? Платиновый вопрос, как выучить язк программирование за сутки? Ну никак.
Аноним 2015/12/24 15:36:00  №611284 746
>>611281
Нет. Есть какой-то универсальный вопрос? Ну типа, ебаните левосторонне соединения, используя подзапросы, а еще это все после того, как создадите cte
Аноним 2015/12/24 15:40:19  №611292 747
>>611284
Опиши реализацию MVCC в InnoDB, например.
Перечисли правила ACID.
Использование EXPLAIN для анализа запросов.
Аноним 2015/12/24 15:41:58  №611294 748
>>611292
Нормич ебанул. Но лады.
Аноним 2015/12/24 15:48:39  №611301 749
Есть один странный вопрос. Допустим есть два блока css, расположенных в случайном порядке. Как от одного блока пустить линию к другому? Необязательно прямую.
Аноним 2015/12/24 15:48:59  №611302 750
>>611266
http://ideone.com/hTlU2P - как вытащить соответствующую часть регулярки и поместить её в echo?
Я буду бампать до посинения или пока рак на горе не свистнет
Аноним 2015/12/24 16:11:39  №611333 751
Аноним 2015/12/24 16:19:10  №611341 752
Посоны, элементарная задачка.
Скачать файл по удаленной ссылке на свой сервер, сохранить его под другим именем и вывести ссылку на этот файл уже на своем сервере.
Аноним 2015/12/24 16:26:58  №611349 753
А написание виджетов и плагинов для вп дело не простое, как оказалось, там куча фукций и непонятно, как это все связано и связано с БД. Чувствую, года два еще на изучению этой темы уйдет.
Аноним 2015/12/24 16:41:42  №611364 754
>>611349
Все верно, если хуй забивать не будешь через два года можешь стать гуру вордпересса. Или ты хотел все и сразу? Несмотря на кажущуюся простоту и низкий порог вхождения нормальный скил появится только со временем, чем ты будешь выгодно отличаться от 95 % аудитории русского сриланса, криворуких необучаемых уебков, которые ебашат свой криворукий код, по принципу "главное чтобы хоть как-то работало", даже не утруждая себя убрать свой же закомментированный мусор или элементарно отформатировать и причесать его. Если уж решил встать на эту скользкую дорожку, то с самого начала приучай себя все делать по канонам php и апи вордпресса. Даже если на это потребуется в несколько раз больше времени. Не будь уебком! А то реально заебало после вас, хуесосов, брать такие проекты.
Аноним 2015/12/24 16:46:52  №611366 755
Сап, пхпач, с наступающим. Вопрос такой: нужно сделать редирект в случае захода на сайт с мобильного устройства на алиас (m.) домена (example.com). то-есть сайт один и тот же, нет двух отдельных сайтов с разными стилями, есть один сайт, в котором в случае захода с телефона будет открываться m.example.com и использоваться другая тема стилей. Так вот к сути: я в алиасах опенсервера на локалке сделал m.site => site, в самом сайте сделал детект мобильного устройства в хеддере и редирект на m.site. И тут же получил удар в спину циклическую переадрессацию. Я не совсем может понимаю того, чего от меня хотят, какие-то зеркала и алиасы. Помогайте.
Аноним 2015/12/24 17:02:13  №611384 756
>>611366
>то-есть сайт один и тот же
> в самом сайте сделал детект мобильного устройства в хеддере и редирект на m.site. И тут же получил удар в спину циклическую переадрессацию.

Еба, ты сам догадаешься почему тебя зацикливает?
Аноним 2015/12/24 17:16:42  №611393 757
>>611333
А, ну да, точно, спасибо, через неё всё можно попробовать.
А то я навертел штyк 10 регекспов и разных массивов с preg_split. Работает, конечно, но это не дело.
Аноним 2015/12/24 17:18:57  №611396 758
Аноним 2015/12/24 17:22:18  №611399 759
>>611384
Я знаю почему зацикливается, но задача такая стоит - редирект на m. но второго сайта на m. с подключением к той же базе нет, то-есть в моем распоряжении только один домен.
Аноним 2015/12/24 17:33:49  №611412 760
>>611399

передай с редиректом post/get перменную

if ($_POST['mobli'] = 'moblie';) { /тута пусто/}
else { /тута код редиректа (незабудь добавить передачу переменной)/}
Аноним 2015/12/24 17:38:35  №611419 761
>>611364
ну не бери хуле. я вообще считаю, кто пилил сайт, тот его и должен поддерживать а ковырять чужое легаси - зашквар.
Аноним 2015/12/24 18:28:50  №611447 762
>>611399
Ты че несешь вообще, поехавший? Какая база, какой домен, какие алиасы?
На домене example.com в хедере должен стоять редирект, который должен срабатывать при твоем условии, на домене m.example.com в хедере не должно быть никаких редиректов. Это единственное верное решение, вот и сделай это. А не еби мозги.
Аноним 2015/12/24 19:14:07  №611492 763
14я задача Аноним 2015/12/24 19:14:33  №611493 764
15 задача Аноним 2015/12/24 19:23:04  №611509 765
Аноним 2015/12/24 19:42:01  №611518 766
>>611509
https://jsfiddle.net/r9r6n0mh/1/ забыл про дату. Вот так правильнее.
Кстати, ОП, у тебя там в 15 задании написано:
>(которые являются объекты)
и еще переменная c в примере кода вроде напечатана в русской раскладке.

https://jsfiddle.net/410np1m2/ и 16 задача.
Аноним 2015/12/24 20:26:37  №611556 767
Есть такая удобная хуитка, как инициализация переменной в условии 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])) ...
Аноним 2015/12/24 20:32:56  №611561 768
Оп проверь верстку: исправил 10, 11, и 12.
http://integer64.github.io/site-layout/
По 12 заданию, сделал 2 варианта:
0. С id, потому что адаптивность более проще сделать.
1. Без id, тут уже для большой универсальность, надо бы еще использовать JavaScript. Я не стал заморачиваться и сделал через position:absolute; top:192px;.
Аноним 2015/12/24 21:29:06  №611603 769
Есть два стула. На одном рор дрочёный, на другом пхп + ларевел точёный. На какой сядите? Опыта в вебе вообще 0, хочу перекатиться из хеллоуворлдщика (пора бы уже, а то синтаксис уже и джавы, и обжа, и крестов, и питона освоил и даже ООП потрогал везде).
Цель - вкатиться в фриланс/удалёнку
Аноним 2015/12/24 22:54:46  №611705 770
Как закрыть возможность интерпретирования текста, введенного стороним пользователем(например в форму) как кода?

Получается же, любой хуй может ввести код. Помню преподаватель говорил, когда я у него спрашивал, но я что-то забыл это.
Аноним 2015/12/24 23:04:41  №611715 771
ОП, кстати, можешь добавить в шапку сайт phpclub, мне он показался довольно неплохим, сам начал более подробно изучать php(нужен для диплома).

Вот, например, вступление в php написано довольно доступно и с примером: http://phpclub.ru/detail/article/phpintro .
Аноним 2015/12/24 23:15:17  №611722 772
>>611603
Пыху учи, время рельсов уже прошло.
Аноним 2015/12/24 23:19:18  №611723 773
14509883588040.png (561, 895x476)
476x895
Аноним 2015/12/25 00:17:23  №611764 774
>>611705

Ты должен обрабатывать данные так, чтобы это было безопасно.

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

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

Погугли на тему «SQL инъекции» чтобы узнать подробнее.

Тут описано про плейсхолдеры: http://habrahabr.ru/post/148701/

Если ты выводишь на страницу - используй htmlspecialchars, вот урок: https://github.com/codedokode/pasta/blob/master/security/xss.md

Если подставляешь данные в яваскрипт - используй json_encode.

>>611723

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

Не надо изобретать велоспеды - способы защиты от инъекций давно уже придуманы.
Эмм... Аноним 2015/12/25 00:22:15  №611768 775
Так, вот вроде готова задача для проверки текста на ошибки с помощью регулярных выражений: http://ideone.com/BXho8s
Всё вроде бы проверяет, находит и выводит.
Однако столкнулся с тем, что если пересекаются символы от предыдущей ошибки и от следующей, то не выводит символы перед ошибкой у крайней ошибки.
То есть из куска текста "Такая,знаете ли,мура" выведет "Такая,знаете" и ",мура ", если не поставить количество символов от 3 до 5 - то есть если не избежать этого пересечения элементов. Тогда получится во втором элементе " ли,мура ".
Как-нибудь можно это всё сделать более хорошо и правильно?
Аноним 2015/12/25 00:23:55  №611769 776
>>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
> Вот и все, коммерческий продукт практически готов.
Ну вы поняли

Аноним 2015/12/25 00:54:54  №611808 777
Оп, прокомментируй тему "минификации и склейки" яваскриптов и css, я видел вы где-то выше это обсуждали. Под минификацией подразумевается удаление лишних переносов и комментариев?
По запросу asset management первой ссылкой нагуглил вот такую симпатичную и судя по кол-ву установок популярную библиотеку https://github.com/kriswallsmith/assetic

Почему бы ее не использовать? Зачем такие сторонние от php вещи как grunt или gulp? Тем более я так понял они тянут за собой установку npm, и вообще это нодовские фишки.
Короче я буду использовать эту библиотечку, пока меня кто-то не переубедит.

Хочу ставить бутстрап и джейквери композером, не хочу кочать орхивы.
Аноним 2015/12/25 02:34:55  №611849 778
>>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/ Аноним 2015/12/25 03:20:48  №611856 779
>>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}";
Не надо в базе хранить полный путь от корня диска. Надо хранить в базе относительно корня сайта, так как при переносе на другой сервер пути там будут другие и все сломается.
Аноним 2015/12/25 03:21:22  №611857 780
Остальные аноны, чье решения я пока не проверил, я проверю наверно завтра вечером.
Аноним 2015/12/25 08:41:35  №611889 781
Есть задача создать зип архив всех файлов в заданной папке.
Но ни одно решение у меня не работает! Например это 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 ЧЗХ?
Аноним 2015/12/25 09:23:25  №611895 782
>>611889
if($zip->close())
{
//успех
}

Даже это условие выполняется. Но архива-то нет! Да и с права доступа проблем быть не должно, потому что другой скрипт через file_put_contents создает файлы, которые нужно заархивировать.
Аноним 2015/12/25 09:55:36  №611914 783
>>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()
Корректно создает архив - чек.

Где архив бля?
Аноним 2015/12/25 10:36:11  №611931 784
>>610293
потому что я еще не дошел давно проходил да и что с этими регулярными выражениями сложного? это ж как таблица умножения, просто подобрать правильно выражения, все логично и если вникнуть достаточно просто
Аноним 2015/12/25 11:46:20  №611968 785
>>611764
я не тот кун, но в курсе про всю эту малафью, учитель из специалиста всё пояснял

>htmlspecialchars
да и подобное значение есть у фильт инпут вроде бы
Аноним 2015/12/25 12:21:22  №611983 786
Не устанавливается блядский Apache как он меня сука заебал, рот его пердолил - при запуске httpd.exe появляется командная строка и сразу исчезает. В