Двач.hk не отвечает.
Вы видите копию треда, сохраненную 25 января 2016 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
90 Кб, 360x352
844 Кб, 1800x768
35 Кб, 604x396
72 Кб, 800x500
Клуб изучающих PHP 66. Предновогодний часть три. #612122 В конец треда | Веб
Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

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

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

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

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

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

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

- Простая, но полезная задача сделать список студентов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2

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

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

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

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

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

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

- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://gist.github.com/codedokode/10539213

Что почитать

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

Нужен ли ООП, фреймворки, MVC? — Да, однозначно. Посмотри любую вакансию.
Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.net/45000175 и получи личную немного устаревшую копию сайта
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
46 Кб, 500x644
#2 #612127
>>612122 (OP)
Еще. Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

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

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

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

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

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

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

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

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

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

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

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

Объясняй

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

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

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

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
46 Кб, 500x644
#2 #612127
>>612122 (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, то рассказать об этом стоит в каком-нибудь другом треде.

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
#3 #612168
Подкиньте пожалуйста материалов по работе php с базами данных. То, что в ОП-посте я честно говоря не совсем понял.
#4 #612171
>>612168
Добавлю, что с самими базами данных я знаком, есть опыт работы с Access и Paradox(в C++ Buildere еще проект писал с подключением к приложению БД), с теорией тоже знаком. С SQL не знаком вообще.
#5 #612174
Задачи, начиная с какой нужно вкидывать в тред, чтобы ОП их проверил?
#6 #612176
>>612174
с первой.
#7 #612177
>>612174
С первой. Если ты не про js задачи конечно. Для них на первые 10 есть проверялка.
#8 #612185
>>612177
>>612176
В первых задачах же сам себя проверяешь, не? Если выводится то, что нужно, значит все ОК.
#9 #612186
>>612185
PS Я про учебник PHP для начинающих
#10 #612188
>>612185
Ну это верно разве что для задачек, где одна строчка с echo. В отношении других же это в общем не так, чаще всего восторженный ньюфаг при виде правильного результата спешит выложить "решенную" задачу в тред и обнаруживается, что работает она не совсем верно, либо вообще не верно.
86 Кб, 1152x648
#11 #612193
Где можно найти статью, где описывается реализация пикрилейтеда, желательно асинхронно?
#12 #612196
>>612185
Тебя никто не укусит если выложишь ссылку на Ideon сюда.
#13 #612197
>>612193
Что тут реализовывать то?
#14 #612201
>>612197
Авторизацию и регистрацию.
#15 #612203
>>612201
Это был риторический вопрос.
#16 #612208
>>612193
http://myrusakov.ru/php-regauth-user.html Держи. У него, кстати, полно примеров на пхп на все случаи жизни.
#17 #612263
>>612168
>>612171
Бамп вопросу.
#18 #612267
Вот, короче сделал задачу с кубиками. Что не правильно? ideone.com/0H2xel
#19 #612282
На бесплатный хостинг сайт на цмс не повесить, печаль.
#20 #612339
>>612193
Начнем с того, что значит асинхронно?
#21 #612382
>>612282
Хостингер.
#22 #612384
>>612267
У тебя там некоторые переменные в if без знака доллара стоят.
24 Кб, 872x405
#23 #612387
Потом ещё у тебя там лишняя точка с запятой, лишние скобки.
50 Кб, 500x500
#24 #612398
ОП, вот все мои задачи из прошлого треда.
http://ideone.com/C8o0SL - скрипт калькулятора Айфона.
http://ideone.com/8q8JVk - скрипт калькулятора Айпада.
http://ideone.com/wzPQ7W - скрипт проверки телефона.
http://ideone.com/BXho8s - скрипт проверки ошибок в тексте.
Некоторые явно не вполне нормальные. В телефоне можно ещё сильнее сократить регулярку.
#25 #612432
Оп проверь верстку: исправил 10, 11, и 12.
http://integer64.github.io/site-layout/
По 12 заданию, сделал 2 варианта:
0. С id, потому что адаптивность более проще сделать.
1. Без id, тут уже для большой универсальность, надо бы еще использовать JavaScript. Я не стал заморачиваться и сделал через position:absolute; top:192px;.
#26 #612487
Оп тут не сидит, глупцы, зачем вы кидаете свои задачи? Пока не проверены все задачи в прошлом, проверять ваши он не будет.
#27 #612494
>>612432
скинь фейкопочту, хочу пообщаться
#28 #612496
>>612487
прошлый тред потерли же уже
#29 #612498
>>612494
tyuivr(h252ANUSgmairpDlPUNCTUM<:icom
#30 #612502
>>612498
написал
#31 #612517
>>612496
Ты дурак или притворяешься?
#32 #612520
>>612517
У тебя явно проблемы с контролем агресси
#33 #612523
>>612520
Зачем ты пишешь о том, чего не знаешь?
#34 #612524
Аноны, давайте без лишней агрессии. Тут сидят только безэмоциональные биороботы интересующиеся программированием.

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

Напомню что вчера проверил файлообменник
https://github.com/MindiMakridi/filehosting/ тут >>611856\t
#35 #612540
>>612168
Что ты не понял конкретно, можешь написать?
#36 #612550
https://github.com/V3N0m21/Uppu4

Дописал комментарии, но то как реализован аякс мне не очень нравится. Если есть какая-то пространная статья о том как вообще нужно интегрировать яваскрипт и аякс в частности, буду благодарен. В общем жду твоих замечаний, ОП
#37 #612582
>>612550

А ты вообще JS изучал, learn.javascript.ru весь прочел, а может даже все наши задания на JS решил?

Если нет то советую решить.

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

Насчет аякса.

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

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

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

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

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

- возможность при некоторых ошибках повторить запрос

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

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

По организации кода. Хотя маленький кусок кода можно вставить в страницу, это плохая идея так как со временем он разрастется. Правильнее всего сделать 2 js-файла:

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

В файл мы выносим функции, а на странице оставляем только код запуска, такого типа:

<скрип>
var a = {{ x | json_encode }};
var b = {{ y | json_encode }};
initSomething(a, b);
initSomething(100500);
</скрип>

Не смешивай внешние переменные с кодом, как тут:

> $.ajax("/ajaxComments/{{file.id}}",


из-за этого функцию не получится вынести во внешний файл.

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

> document.forms.commentForm


Это какой-то древний подход, не используй его, используй поиск через jQuery

> ajaxStop: function() { $body.css({"display": "none"}); }


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

Алсо не пиши так

> $body.css({"display": "none"});



Стили должны быть в CSS файле, а в JS ты только навешиваешь классы. Показать/скрыть можно через show/hide.

> alert(errorThrown + ' - ' + textStatus);


Обработку ошибок надо сделать нормально, alert очень раздражающий.

> <br>


Ты плохо знаешь CSS. Советую найти время и пройти наш курс по HTMl/CSS

> {{ user.login|e }}


зачем |e ?

> <p><strong>Загружен:</strong> {{ file.uploaded|date('d-m-y H:i') }}</p>


это удобнее делать через dl/dt/dd

> <label for="name">


Где элемент с id = name ?

> <label for="comment"


> <textarea name="comment" id="commentBody">


Неправильно

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

> <input type="hidden" name="userId" value="{{ userHelper.getCurrentUserId() }}">


то есть я могу писать комментарии от любого имени?

> <input type="hidden" name="fileId" value="{{ file.id }}">


зачем это поле если там есть parentId? ты проверяешь соответствие fileId и parentId?

> <input type="button" onclick="postComment()" value="Post your comment">


Почему не submit? А если я хочу форму отправлять не кнопкой а нажатием Enter? А если кнопкой отправки на мобильной выдвижной клавиатуре?

Событие отправки формы это submit. А не click.

Также, ошибка:

<input type="button" onclick="postComment()" value="Post your comment">

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

> $("#commentButton").click(function(){


> onclick=""



Почему разные способы навешивания используются? Что-то это маленько сбивает с толку.

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

> $(".commentReply").


в самое начало кода.

> function refreshComments(){


> type: "POST",


Почему POST?

> $( "#comments" ).empty().append(text);


Неэффективно обновлять все комментарии. Подумай как обновлять только новые или изменившиеся комментарии.

> $body = $(".modal");


Почему одно и то же называешь по-разному?

Я вижу там еще много кода (когда ты только успел его написать), его наверно позже проверю. Пока работай над HTML/JS/AJAX.
#37 #612582
>>612550

А ты вообще JS изучал, learn.javascript.ru весь прочел, а может даже все наши задания на JS решил?

Если нет то советую решить.

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

Насчет аякса.

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

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

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

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

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

- возможность при некоторых ошибках повторить запрос

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

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

По организации кода. Хотя маленький кусок кода можно вставить в страницу, это плохая идея так как со временем он разрастется. Правильнее всего сделать 2 js-файла:

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

В файл мы выносим функции, а на странице оставляем только код запуска, такого типа:

<скрип>
var a = {{ x | json_encode }};
var b = {{ y | json_encode }};
initSomething(a, b);
initSomething(100500);
</скрип>

Не смешивай внешние переменные с кодом, как тут:

> $.ajax("/ajaxComments/{{file.id}}",


из-за этого функцию не получится вынести во внешний файл.

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

> document.forms.commentForm


Это какой-то древний подход, не используй его, используй поиск через jQuery

> ajaxStop: function() { $body.css({"display": "none"}); }


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

Алсо не пиши так

> $body.css({"display": "none"});



Стили должны быть в CSS файле, а в JS ты только навешиваешь классы. Показать/скрыть можно через show/hide.

> alert(errorThrown + ' - ' + textStatus);


Обработку ошибок надо сделать нормально, alert очень раздражающий.

> <br>


Ты плохо знаешь CSS. Советую найти время и пройти наш курс по HTMl/CSS

> {{ user.login|e }}


зачем |e ?

> <p><strong>Загружен:</strong> {{ file.uploaded|date('d-m-y H:i') }}</p>


это удобнее делать через dl/dt/dd

> <label for="name">


Где элемент с id = name ?

> <label for="comment"


> <textarea name="comment" id="commentBody">


Неправильно

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

> <input type="hidden" name="userId" value="{{ userHelper.getCurrentUserId() }}">


то есть я могу писать комментарии от любого имени?

> <input type="hidden" name="fileId" value="{{ file.id }}">


зачем это поле если там есть parentId? ты проверяешь соответствие fileId и parentId?

> <input type="button" onclick="postComment()" value="Post your comment">


Почему не submit? А если я хочу форму отправлять не кнопкой а нажатием Enter? А если кнопкой отправки на мобильной выдвижной клавиатуре?

Событие отправки формы это submit. А не click.

Также, ошибка:

<input type="button" onclick="postComment()" value="Post your comment">

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

> $("#commentButton").click(function(){


> onclick=""



Почему разные способы навешивания используются? Что-то это маленько сбивает с толку.

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

> $(".commentReply").


в самое начало кода.

> function refreshComments(){


> type: "POST",


Почему POST?

> $( "#comments" ).empty().append(text);


Неэффективно обновлять все комментарии. Подумай как обновлять только новые или изменившиеся комментарии.

> $body = $(".modal");


Почему одно и то же называешь по-разному?

Я вижу там еще много кода (когда ты только успел его написать), его наверно позже проверю. Пока работай над HTML/JS/AJAX.
#38 #612583
>>612550

Еще при аякс запросах надо делать:

- блокировка формы на время отправки данных для защиты от повторной отправки, некоторые люди например дважды кликают по кнопкам
https://github.com/lexdss/BookShop #39 #612595
Анон который https://github.com/lexdss/BookShop - ты уже по моему второй раз вбрасываешь ссылку и все удаляешь, я даже посмотреть код не успел. Хочешь чтобы твой код проверили - вбрасывай и подожди пока не проверят. У нас неспешный тред и большие проекты никто в тот же день не проверяет, придется подождать несколько дней.
#40 #612606
https://github.com/someApprentice - у тебя какие-нибудь вопросы к ОПу или анонам есть? Или мы все разобрали?
#41 #612609
А если я очень хуево говнокодю, но при этом я хипстер модный-молодежный, меня возьмут в какую-нибудь хипстеро контору в дс?
#42 #612610
>>612502
что написал?
#43 #612627
Проверил в прошлом треде все JS задачи, ответил на вопрос по реугляркам, в самом конце треда.
#44 #612692
ох лол тут отвечает тот же оп что отвечал полтора годан назад тут?
#45 #612700
>>612692
Нет, его имплентация.
#46 #612703
>>612700
он часто отечает? раньше оче редко отвечал
#47 #612704
>>612703
Раз в 2 дня примерно. Но тут так-то полно народу. Они тоже дельно пишут в 99% случаев.
#48 #612707
вот смотри, мне нужно ИНДЕКСИРОВАТЬ ФАЙЛЫ
то есть - вот есть папка, запоминаю состояние файлов (список файлов, которые есть, забекаплены ли они и т.д.)

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

ВОПРОС:

как мне связать этот класс для индексации с классом работы с бд?
отвечай по пунктам:
1) класс индексации же нужно отделить от хранения данных, так ведь? ну можно хранить в файлах, можно в бд
2) или же не делать класс индексации как отдельный компонент, который можно переиспользовать, а хуячить всё хардкодом на бд, без ебли?
#49 #612718
>>612625

>Это же однотипные классы. Почему нет наследования?


Так ведь есть же. Зря что-ли я у паверстанции все методы в прототипах написал и передал в соларпанел? А больше там и нечего наследовать.
#50 #612755
Ебаный стыд, сукаааа,постоянные танцы с бубмом, чтобы установить и заставить работать Apache, mysql и php. 2016 год, сука, ебаный стыд, куда я попал
#51 #612759
>>612755
проиграл с тебя
20 Кб, 437x289
#52 #612766

>2016


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



Как, скажите, как такое возможно?
#53 #612771
>>612755

>постоянные танцы с бубмом, чтобы установить и заставить работать Apache, mysql и php.


Какие это? раскоментировать 5 строк в php.ini?
Добрыня Никитич #55 #612860
курсы пхп которых нет паблик. с наступающим.

https://cloud.mail.ru/public/FPn9/fFaFDMcQ8
#56 #612861
>>612339
Есть форма авторизации (регистрацию пока не рассматриваем). Пользователь ввел логин и пароль - если такой пользователь есть в БД, сразу на этой же странице выводим "Привет, пользователь-нэйм", а все формы убираем без перезагрузки страницы.
#57 #612931
>>612860
Где взял?
#58 #612961
>>612860
Ужасный бубнеж
#59 #612965
ОП, почему на задание с SPA ссылку в шапке не прикрепляешь?
#60 #612986
>>612965

Мало кому по зубам его решить, хотя может и стоит позже добавить. Может его стоит еще в список JS задач ссылку добавить.
#61 #613041
>>612965

> на задание с SPA


Что за задание? 6 тредов тут, а впервые слышу.
#62 #613065
>>613041

https://github.com/codedokode/pasta/blob/master/js/spa.md

Это скорее черновик задачи, многое не описано, нужно больше советов по архитектуре итд
#63 #613072
>>613065

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


Эм..............................
На PHP, реализовать поддержку оффлайн-режима?
Я бы такого заказчика послал-бы. Например.
37 Кб, 496x366
#64 #613075
>>613072

>/js/


>требуемые знания: JS, DOM, HTML/CSS, один из серверных языков


>на PHP

#65 #613079
>>613075
PHP не серверный язык?
#66 #613084
>>613072

Это вообще-то задача на JS приложение. PHP там только на сервере для АПИ нужен (если кто-то хочет сделать на Питоне, Руби, ноде - пожалуйста, но разумеется сделать надо качественно).
#67 #613092
Вот что бывает если неправильно сделать кеширование: http://m.geektimes.ru/post/268352/

Заметьте, написано на PHP + MYSQL. То же самое что мы цчим в этом треде. Судя по именам файлов, это какая-то переделанная CMS.
#68 #613094
как и год назад оп отвечает на посты через раз
>>612707
#69 #613122
>>612860
Спасибо. Смотрю первое видео. Под этот голос я засну до конца видео раз наверное 8.
#70 #613138
Задача на банкомат у кого-нибудь осталась? Помню года три назад и /b в PHP треде была.
#71 #613148
>>613138
Что за банкомат, какая задача?
#72 #613149
#73 #613151
Анон, нужна твоя помощь. Делаю простенький сайт. Как мне хранить путь к картинкам в БД? Или как хранить сами картинки в БД и потом их выводить? И тот же самый вопрос только с текстовой информацией.
#74 #613156
>>613138
>>613041
сижу 666 тредов, помню опа когда тот еще под столом кодил на хаскеле.

▲ ▲


>>613151
Пути не надо хранить в базе, пусть их возвращают соотв.методы.
В бд хранить только имена картинок или часть имени. В задаче на файлообменник мы тут пришли к выводу, что лучше сохранять файлы под именем {$id}+оригинальное_имя+{безопасное_расширение, например .txt}
Так что в базе хранится только имя, под которым юзер загрузил файл и его id.
Методы твоего класса возвращают полное имя и путь к файлу.

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

Сделай задачи из оп-поста про сайт для студентов и файлообменник, потому что судя по вопросам у тебя есть небольшие пробелы в знаниях.
#75 #613159
>>613156

Я бы еще добавил что в оригинальном имени возможно стоит делать фильтрацию или транслитерацию. Пртилют файл с какими-нибудь непонятными символами в названии или из одних пробелов и непонятно как с ним работать.
#76 #613160
>>613156

>Текстовая информация


Я имел ввиду название книги, её автор.
#77 #613161
>>613156
почему мне никто не отвечает? >>612707
#78 #613177
>>613159
На линуксе вроде все работает. Только что проверил с файлами, содержащими юникодную фигню в названии.
На виндовс понятно никто в здравом уме рабочий сервер подымать не будет. Другое дело что у пользователя на винде, который попытается качнуть файл с неподходящим названием, могут возникнуть осложнения. Сейчас проверю, как rghost решил этот вопрос.
Да вроде никак, ничего они не переименовывают (ссылки на rghost почему-то не пропускает вакаба) http://pastebin.com/sByKUAuP
А нет, пробелы обрезают. Вот тут я поставил много пробелов в начале имени и между подчеркиваниями, были вырезаны http://pastebin.com/sByKUAuP

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

Качни какую-нибудь книжку типа "Основы mysql", потому что это самые основы, смысл тут все пересказывать. Видеокурс по-моему тоже есть от "Cпециалиста" (кавычки не из иронии, это название конторы). Потом порешай задания из оп-поста на sql для закрепления.

>>613161
Я не знаю про индексацию файлов. Но исходя из принципа единой ответственности, конечно нужно делать отдельный класс для индексации, чтобы ты под этим не подразумевал. Связать через dependency injection.
#79 #613179
>>613177

>Я не знаю про индексацию файлов


речь не про индексацию. речь про то как организовать это всё
#80 #613183
>>612707

> 1) класс индексации же нужно отделить от хранения данных, так ведь? ну можно хранить в файлах, можно в бд


Да, отдельно. Тут можно сделать класс работы с БД с паттерном ТDG, например FilesGateway и отдельно класс индексиации например FilesIndexer. Причем возможно что можно сделать это по-умному и сделать так чтобы эти 2 класса друг про друга не знали. Это лучший вариант, чем меньше зависимостей тем лучше.

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

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

А так сойдет. СПАСИП ЗАБРАЛ НА МАЙЛ ДИСК
Дублирую из прошлого треда #82 #613209
>>612619

>> $paymentTotal = $paymentTotal + $debt;


>>echo "{$month} месяц спустя: долг = {$


>Это повторяется 2 раза, надо бы избавиться от повтора


Ох щи, бро, ОП, разве куда-то ещё можно сократить? Там же все обязательные элементы стоят уже? Или ты имеешь в виду, что из разных частей нужно вытащить их и сделать общим для if и else? Там, где мы считаем для суммы больше, чем выплата в месяц, и там, где сумма долга меньше выплаты в месяц.
Честно говоря, не представляю, как это сделать, я в растерянности.
>>612623 >>612624

>Давай упростим задачу. Как бы ты записал «ровно один минус, скобка или пробел»? То есть один любой символ из указанных?


Например, вот так: "/^\\-|\\)|\\s$/". Но там в какой-то моменты может быть вот такое место в номере: "...9 ) - 8888..." То есть там сразу пять символов появляются, это меня запутало. Впрочем, сейчас я уже понял, как это должно выглядеть, позже переделаю. Планирую завершить регулярные выражения и снова все задачи пройти перед повторением, писать их не глядя.

>> Эта вот конструкция не замещает такое выражение: (\\s?\\)?\\s?\\-?\\s?\\)?\\s?\\(?\\s?[0-9]){7} ?


>Нет, это не то. У тебя там заложен определенный порядок символов и слишком громоздко


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

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


Да, все номера из твоей пасты показывает правильно.
#83 #613267
>>613209

> Или ты имеешь в виду, что из разных частей нужно вытащить их и сделать общим для if и else?


да. Незачем копипастить один и тот же код.

> Например, вот так: "/^\\-|\\)|\\s$/


А теперь напиши «любое число пробелов, минусов, скобок в любом порядке».

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

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


Там надо написать «любые промежуточные символы в любом порядке». Не надо писать громоздкие сложные выражения с кучей вопросов.
#84 #613283
Сделал там несколько задачек, воот, как дойдешь до меня, проверь, опхотя, там задачки для начинающих, но все же, может есть ошибки, да и я там с \n не разобрался :3
Делаю на LAMP сервере, но юзаю пока только php, до этого пытался в c# и java, но понял что не мое.
А php вроде ничего так, затянуло.
https://github.com/weissart/ipq-lessons
И спасибо тебе, оп, твои уроки приятно проходить.
http://integer64.github.io/ #85 #613285
>>611561
>>612432

> p {


> position: relative;


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

> float: left;


> position: absolute;


Это 2 свойства взаимоисключающие по моему

Твое решение с искуственным заданием min-height 180 мне кажется неправильным так как при увеличении длины текста высоты не хватит. Чтобы черная плашка не вылезала за пределы блока надо использовать overflow.

> img {


> display: block;


> width: 100%;


Неправильно, ты все картинки на странице растягиваешь а надо только ту что внутри figure. Также, мне кажется тут надо использовать max-width а не width. Почему width 100%?

Также, у тебя цифра [1] ниже пикселя на 3-4 чем строка текста.

> задача 11



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

Тень по моему не совсем правильная, на рисунке тень смещена вниз, а у тебя по центру.

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

>label {


> span {


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

Также, по 11 задаче дополнительный пункт. Если ты выведешь обычный чекбокс или радиокнопку, то увидишь что по ним можно перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом. Попробуй и у себя это реализовать.

> Exercise 12.0


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

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

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

> 12.1



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

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

Также, тут многовато врапперов. Попробуй избавиться от них.

В общем, тут надо менять общий принцип.

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

Также дам тебе статью для размышлений, про организацию вкладок без идентификаторов: http://chikuyonok.ru/2009/04/dl-tabs/

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

Вообще, как у тебя ощущение? Есть польза от решения задач или ничего нового не узнал?
http://integer64.github.io/ #85 #613285
>>611561
>>612432

> p {


> position: relative;


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

> float: left;


> position: absolute;


Это 2 свойства взаимоисключающие по моему

Твое решение с искуственным заданием min-height 180 мне кажется неправильным так как при увеличении длины текста высоты не хватит. Чтобы черная плашка не вылезала за пределы блока надо использовать overflow.

> img {


> display: block;


> width: 100%;


Неправильно, ты все картинки на странице растягиваешь а надо только ту что внутри figure. Также, мне кажется тут надо использовать max-width а не width. Почему width 100%?

Также, у тебя цифра [1] ниже пикселя на 3-4 чем строка текста.

> задача 11



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

Тень по моему не совсем правильная, на рисунке тень смещена вниз, а у тебя по центру.

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

>label {


> span {


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

Также, по 11 задаче дополнительный пункт. Если ты выведешь обычный чекбокс или радиокнопку, то увидишь что по ним можно перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом. Попробуй и у себя это реализовать.

> Exercise 12.0


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

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

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

> 12.1



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

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

Также, тут многовато врапперов. Попробуй избавиться от них.

В общем, тут надо менять общий принцип.

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

Также дам тебе статью для размышлений, про организацию вкладок без идентификаторов: http://chikuyonok.ru/2009/04/dl-tabs/

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

Вообще, как у тебя ощущение? Есть польза от решения задач или ничего нового не узнал?
Задача на регулярки #86 #613289
>>611768

> (\\,|\\;|\\!|\\?|\\:)


Экранировать тут надо только вопрос. Более того, чтобы указать «один из символов» есть конструкция квадратных скобок - лучше использовать ее тут

> [а-яё]


Надо добавить латинницу и цифры или использовать \\w

> з(делал|делаю|делано)


Можно было вынести не «з», а «здел»

> (\\,(а|но))


Надо искать не наличие, а отстутсиве запятой перед «а». Сразу скажу, контструкции для этого в регулярках нет, разве что негативное утверждение.

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


> Как-нибудь можно это всё сделать более хорошо и правильно?


Сложно. Для этого надо убрать .{3,5}, использовать специальный флаг в preg_match_all, PREG_OFFSET_CAPTURE (подробности в мануале) который вернет для каждого совпадения байтовый (не в символах, а в байтах) отступ от начала строки, далее по нему определить позицию в символах и добавить символы до и после совпадения. В общем, довольно сложно.

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

['я ', 'зделал', ' подарок']

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

Также, можно попробовать разбить строку на массив отдельных слов и их проверять циклом.
Задача на регулярки #86 #613289
>>611768

> (\\,|\\;|\\!|\\?|\\:)


Экранировать тут надо только вопрос. Более того, чтобы указать «один из символов» есть конструкция квадратных скобок - лучше использовать ее тут

> [а-яё]


Надо добавить латинницу и цифры или использовать \\w

> з(делал|делаю|делано)


Можно было вынести не «з», а «здел»

> (\\,(а|но))


Надо искать не наличие, а отстутсиве запятой перед «а». Сразу скажу, контструкции для этого в регулярках нет, разве что негативное утверждение.

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


> Как-нибудь можно это всё сделать более хорошо и правильно?


Сложно. Для этого надо убрать .{3,5}, использовать специальный флаг в preg_match_all, PREG_OFFSET_CAPTURE (подробности в мануале) который вернет для каждого совпадения байтовый (не в символах, а в байтах) отступ от начала строки, далее по нему определить позицию в символах и добавить символы до и после совпадения. В общем, довольно сложно.

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

['я ', 'зделал', ' подарок']

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

Также, можно попробовать разбить строку на массив отдельных слов и их проверять циклом.
#87 #613299
В старом треде всем ответил, кому не ответил - напомните о себе тут.

Про дефис: >>613296
Про Апач >>613294
Про зип: >>613291
По JS задачам >>612626\t
#88 #613300
>>612174

Хоть с первой. Только не сиди в ожидании ответа, решай задачи дальше.

>>612193

Не знаю, по моему из картинки все понятно:

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

>>612267

> PHP Parse error: syntax error, unexpected 'else' (T_ELSE) in /home/ol2Qj2/prog.php on line 26


Ошибка - лишняя точка с запятой

elseif (($anonSum) < ($compSum));{

>>612282

Места знать надо

>>612487

Теперь сидит.
#89 #613301
>>612861
А при чем здесь асинхронность?

Очевидный AJAX очевиден.
#90 #613304
>>612861

Это не практично так как часто страница для авторизованного пользователя и неавторизованного различается, проще ееперезагрузить.
81 Кб, 576x376
#91 #613305
https://telegram.me/joinchat/BxAn5ASN8mv5h_KmZ-Y9rA
Конфа php-богов данного ИТТ трендла.
#92 #613318
>>612582

>А ты вообще JS изучал, learn.javascript.ru весь прочел, а может даже все наши задания на JS решил?



Прочитал пару месяцев назад learn.javascript.ru, но не углубленно, все задачи оттуда не решал, похоже настало время вдумчиво перечитывать. Вообще после файлообменника я хотел сделать что-то по типу твоего SPA приложения, но на другую тему чем ты предлагаешь. Уже читал вводные статьи по knockout и angular, но знания яваскрипта надо таки сильно подтянуть.

>Ты плохо знаешь CSS. Советую найти время и пройти наш курс по HTMl/CSS



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

https://github.com/V3N0m21/Uppu4

Добавил проверку на зарегистрированного пользователя при просмотре списка файлов и пользователей, по твоим замечаниям к яваскрипту и вообще темплейтам пока ничего не делал, пока чуть подтяну знания.
Больше меня интересует чтоб ты сейчас посмотрел по самой архитектуре какие есть замечания
#93 #613321
>>613305
зачем нужны эти конфы?
#94 #613322
>>613321
Общение на разные темы завуалированные пхп тематикой.
#95 #613323
>>613318

До SPA надо изучить хорошо JS, DOM, jQuery.

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


У них есть просто текстовые уроки с задачами и проверкой вроде бы.
#96 #613368
>>613305
неизвестный тип адреса
#97 #613384
А если сравнивать с пхп + ларавел/yii, насколько легче/сложнее и медленнее/быстрее вкатиться в руби+ рор без опыта разработки (но есть опыт Си и решения маленьких задачек типа факториала через рекурсию и прочей детской фигни)?
#98 #613388
>>613384
ларавел - медленнешее говнище вообще из 9000 фреймворков. Не понимаю почему оно так популярно.
#99 #613389
>>613388
В трёх тредах уже не могут по существу ответить. Ну что за аноны пошли?!
#100 #613397
>>613389
Чем тебе не по существу? Запросы медленнее, функции излишне нагруженны чем-то. Иногда устыпают в скорости раз в 10. Короче оверхайп какой-то.
#101 #613399
>>613397
Я о пороге и перспективности. Куда быстрее въехать (кроме ларавела есть ещё и yii)? Куда легче въехать?
#102 #613411
Чет нихуя не понятно. Даются простейшие основы пхп, а потом резко - "создай сайт для регистрации абитуриентов с базой данных". Каким хуем я должен сделать это? Как создавать сайты? Где про это можно прочитать?
#103 #613427
>>613323

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



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

>До SPA надо изучить хорошо JS, DOM, jQuery.



Теорию я более-менее понимаю, для меня лучшее обучение это практика. Хотя я не спорю, сначала перечитаю learn.javascript, и постараюсь решить твои задачи
#104 #613428
Test
#105 #613443
Задача с игрой в кубики: http://ideone.com/2KvOSc

>>612384
>>613300
>>612387
Спасибо, исправил. Со скобками все в порядке было.
#106 #613454
>>613267
Спасибо, ОПчик!
Вот, сократил: http://ideone.com/4sYVu8
Там пришлось ввести дополнительную переменную для общих выплат в том случае, когда общий долг Анончика меньше его месячной выплаты. Верно ли на этот раз?

>А теперь напиши «любое число пробелов, минусов, скобок в любом порядке».


Наверное, так: "/^\\Wсимвол звёздочки$/".
Но ведь тогда там могут пройти проверку и такие вот номера: "8-(910) - - - - - 8888888" или "8-(910) ) ) ) ) - 8888888".
Не будет ли это неправильным?

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


>>> Например, вот так: "/^\\-|\\)|\\s$/


Наверное, вот так: "/^\\W?$/".

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


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

>>613289

>Экранировать тут надо только вопрос. Более того, чтобы указать «один из символов» есть конструкция квадратных скобок - лучше использовать ее тут


Ясно, спасибо. Наверное, это будет вот так выглядеть: "/[\\W][a-zа-яё]/ui".

>Надо добавить латинницу и цифры или использовать \\w


Спасибо, не подумал о таком.

>Можно было вынести не «з», а «здел»


Точно!

>Надо искать не наличие, а отстутсиве запятой перед «а». Сразу скажу, контструкции для этого в регулярках нет, разве что негативное утверждение.


Да, с этим пока тогда повременю, потому что только проникаю в PHP, со многим ещё не знаком.

>Сложно. Для этого надо убрать .{3,5}, использовать специальный флаг в preg_match_all, PREG_OFFSET_CAPTURE (подробности в мануале) который вернет для каждого совпадения байтовый (не в символах, а в байтах) отступ от начала строки, далее по нему определить позицию в символах и добавить символы до и после совпадения. В общем, довольно сложно.


Это для меня суперсложно пока что...

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


>['я ', 'зделал', ' подарок']


>И потом из этого массива уже нарезать как-то предыдущее и следующее слова.


Я с самого начала пробовал проверялку ошибок именно так сделать, но столкнулся с тем, конечно, что проверяется только одна ошибка из текста под соответствующий указанный в регулярке момент (сочетание символов). Вот моя первая проба: http://ideone.com/hTlU2P Так-то я теперь представляю, как можно попробовать вставить саму ошибку между этими частями (через preg_replace), можно попробовать, но тогда как ты советуешь дальше:

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


Вот так ещё попробую, вроде это вполне мне сейчас доступно.

>>613283

>И спасибо тебе, оп, твои уроки приятно проходить.


Неистово подтвердил!
#106 #613454
>>613267
Спасибо, ОПчик!
Вот, сократил: http://ideone.com/4sYVu8
Там пришлось ввести дополнительную переменную для общих выплат в том случае, когда общий долг Анончика меньше его месячной выплаты. Верно ли на этот раз?

>А теперь напиши «любое число пробелов, минусов, скобок в любом порядке».


Наверное, так: "/^\\Wсимвол звёздочки$/".
Но ведь тогда там могут пройти проверку и такие вот номера: "8-(910) - - - - - 8888888" или "8-(910) ) ) ) ) - 8888888".
Не будет ли это неправильным?

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


>>> Например, вот так: "/^\\-|\\)|\\s$/


Наверное, вот так: "/^\\W?$/".

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


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

>>613289

>Экранировать тут надо только вопрос. Более того, чтобы указать «один из символов» есть конструкция квадратных скобок - лучше использовать ее тут


Ясно, спасибо. Наверное, это будет вот так выглядеть: "/[\\W][a-zа-яё]/ui".

>Надо добавить латинницу и цифры или использовать \\w


Спасибо, не подумал о таком.

>Можно было вынести не «з», а «здел»


Точно!

>Надо искать не наличие, а отстутсиве запятой перед «а». Сразу скажу, контструкции для этого в регулярках нет, разве что негативное утверждение.


Да, с этим пока тогда повременю, потому что только проникаю в PHP, со многим ещё не знаком.

>Сложно. Для этого надо убрать .{3,5}, использовать специальный флаг в preg_match_all, PREG_OFFSET_CAPTURE (подробности в мануале) который вернет для каждого совпадения байтовый (не в символах, а в байтах) отступ от начала строки, далее по нему определить позицию в символах и добавить символы до и после совпадения. В общем, довольно сложно.


Это для меня суперсложно пока что...

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


>['я ', 'зделал', ' подарок']


>И потом из этого массива уже нарезать как-то предыдущее и следующее слова.


Я с самого начала пробовал проверялку ошибок именно так сделать, но столкнулся с тем, конечно, что проверяется только одна ошибка из текста под соответствующий указанный в регулярке момент (сочетание символов). Вот моя первая проба: http://ideone.com/hTlU2P Так-то я теперь представляю, как можно попробовать вставить саму ошибку между этими частями (через preg_replace), можно попробовать, но тогда как ты советуешь дальше:

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


Вот так ещё попробую, вроде это вполне мне сейчас доступно.

>>613283

>И спасибо тебе, оп, твои уроки приятно проходить.


Неистово подтвердил!
#107 #613459
>>613443

>Со скобками все в порядке было.


Да, но просто они лишние, и без них всё работает.
Просто надо готовиться к тому, как ОП проверяет: там тебя ждёт полный дотошный разбор, который весьма и весьма полезен.
#108 #613460
>>613454

>"/[\\W][a-zа-яё]/ui"


Наверное, первые квадратные скобки не нужны.
Эх, я совсем не уверенно себя чувствую пока что с этими регулярными выражениями.
4 Кб, 487x78
#109 #613489
ОП, а почему нельзя просто добавить .htaccess с таким содержимым в папку files, а при загрузке отлавливать только .htaccess файлы, чтобы его не заменили? Какие подводные камни?
3 Кб, 348x68
#110 #613491
>>613489
То есть вот с таким.
#111 #613504
>>613491
>>613489
Сообщения в отрыве от контекста. Сразу нихуя непонятно. Куда ты хочешь htacess засунуть? Зачем? Какую задачу выполнять?
#112 #613508
>>613504
Это для тебя в отрыве от контекста, а ОП поймет о чем я. В папку www/public/files мы помещаем подобный .htaccess чтобы предотвратить выполнение скриптов, которые туда могуз загрузить.
#113 #613510
>>613504
Аутист наверное имел ввиду задачу про файлообменник, вопрос про безопасную загрузку файлов.
>>613489
Это будет работать только на апаче.
#114 #613514
>>613510
Так и mod_rewrite слимовский тоже только на апаче работает, к нему почему-то претензий нет.
#115 #613519
>>613305
Как зайти?
8 Кб, 480x360
#116 #613521
>>613305

>Введите номер телефона для регистрации.

#117 #613542
В общем код, содержащий русские символы, отображается в браузере иероглифами. Как фиксить?
#118 #613544
>>613542
Кодировка.
#119 #613547
>>613544
Кодировка в редакторе кода или конфигах апаче?
#120 #613553
>>613542
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
#121 #613555
>>613547
На отдаваемой странице. meta-charset вот это вот все.
#122 #613580
>>613454

>>А теперь напиши «любое число пробелов, минусов, скобок в любом порядке».


> Наверное, так: "/^\\Wсимвол звёздочки$/".


Неправильно. \\W - это любой символ кроме букв, цифр и по моему подчеркивания. А надо искать только пробелы, минусы, скобки в любом количестве.

> Но ведь тогда там могут пройти проверку и такие вот номера: "8-(910) - - - - - 8888888" или "8-(910) ) ) ) ) - 8888888".


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

> >>> Например, вот так: "/^\\-|\\)|\\s$/


> Наверное, вот так: "/^\\W?$/".


Нет. \\W это не то же самое что \\-|\\)|\\s

> Ведь с \\Wзвёздочка могут проверку пройти и номера с кучей ненужных скобок, минусов и пробелов.


Это ничего. А вот то что там пройдут совсем левые символы вроде знаков доллара или вопроса - это хуже.
#123 #613584
>>613454

> Наверное, это будет вот так выглядеть: "/[\\W][a-zа-яё]/ui".


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

> Вот моя первая проба: http://ideone.com/hTlU2P


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

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


> Вот так ещё попробую, вроде это вполне мне сейчас доступно.


Вот это мне кажется проще и удобнее. Разбиваешь строку на слова, затем проходишь по каждому слову и проверяешь, нет ли в нем ошибки, не пропущен ли пробел.
#124 #613590
>>613489

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

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

Потому надежнее - переименовывать файлы с заведомо безопасным расширением вроде .txt. И как дополнительная мера, отключить PHP в папке через php_flag engine 0

А без переименования получается нельзя пересылать PHP файлы или .htaccess. Хотелось бы иметь возможность пересылать любые.

И кстати (?i) работает в Апаче - ты проверял?

>>613504

Это задача про файлообменник.
#125 #613595
>>613553

Что за древность? Где ты откопал это? XHTML давно умер, более того реально им почти никто никогда и не пользовался, все использовали HTML4 с лишними слешами и неправильным доктайпом (так как язык XHTML выбирается не доктайпом а заголовком Content-Type, и почти никто не писал там application/xml+xhtml).

В HTML5 это пишется проще:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
#126 #613596
Ну-ка аноны, давайте проверим знание HTML, раз уж вы начали постить HTML код. Зачем нужен доктайп? На что он влияет? Что будет если его не ставить?
#127 #613606
>>613596
Согласно спецификациям HTML и XHTML тег DOCTYPE (что означает «объявление типа документа») сообщает валидатору, какую именно версию (X)HTML вы используете в своей странице. Этот тег должен всегда находиться в первой строке каждой страницы. Тег DOCTYPE — ключевой компонент web-страниц, претендующих на соответствие стандартам: без него ваш код и CSS не пройдут проверку валидатором. Если вы будете пользоваться неполным тегом DOCTYPE, устаревшим его видом, или вообще забудете про него, броузер перейдет в «загадочный» (quirk) режим и будет исходить из предположения, что вы писали код страницы с ошибками и вольно отступали от стандартов, т.е. так, как писали в конце 90-ых годов. В этом режиме броузер попытается разобрать вашу страницу по правилам обратной совместимости и выведет на экран, например, CSS так, как его вывел бы Internet Explorer 4-ой версии, а DOM будет работать так, как он работал именно в этом броузере (IE переключается в свой старый DOM, а Mozilla и Netscape 6 переключается вообще в бог знает что).
Понятно, что для вас эти выкрутасы не желательны. Но именно это вы и получите, если будете пользоваться неполным или неправильным тегом DOCTYPE.

>>613595
Я впервые такой формат вижу и только тут его советуют применять. Может у меня что-то там давно и померло, но всё прекраснейшим образом работает только с этим тегом. Не вижу смысла переходить на что-то другое.
#129 #613621
>>613285

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


Конечно польза есть.=) Твой вопрос посеял во мне сомнения, типо я решил часть твоих задачек и ничему не научился=)
#130 #613631
>>613606

> Я впервые такой формат вижу


HTML5 не вчера появился. Ты по моему лет на 5 отстал. Или читаешь старые учебники.

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

В HTML не ставится слеш в конце тегов:

> charset=utf-8" />


Это ошибка, а работает оно так как HTML парсер прощает многие ошибки.

> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.


Это не столько неправильно, сколько нелогично. Зачем в HTML-документе указывать доктайп от XHTML? Чтобы запутать читателя?

> xml:lang="ru"


Опять же непонятно зачем это. Ты просто копируешь код не думая правильный он или нет нужны эти атрибуты или нет. В данном случае неймспейс xml не определен - значит с точки зрения XHTML это неправильный атрибут. А с точки зрения HTML это просто ничего не значащий атрибут.
#131 #613655
>>613631
Я этот код скопировал где-то года 3-5 назад, когда после переезда на хостинг, сайт в фаерфоксе немного raspidorasilo, безо всякой мысли и желания вникать в то, что этот код делает я его скопировал и вставил (попутно перелопатив 40 страниц гугла в попытках понять что не так, и почему фаерфокс не умеет в определение кодировки). Помогло. Во всех браузерах сайт смотрелся отлично. Главным образом я получил фикс кодировки.
#132 #613663
>>613655

Ни один из популярных браузеров не умеет в определение кодировки, и не обязан. По стандартам вроде при отстутствии кодировки надо ставить utf-8, но Хром например предпочитает windows-1251 - возможно в России сайты делали или делают на этой кодировке.

Если код помог 1 раз тебе, это не значит что он поможет кому-то другому в другой ситуации. Потому не стоит подавать его как универсальное решение. Плюс, у нас учебный тред и в него лучше вбрасывать правильный современный код с пояснениями.
#133 #613679
>>613580

>Неправильно. \\W - это любой символ кроме букв, цифр и по моему подчеркивания. А надо искать только пробелы, минусы, скобки в любом количестве.


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

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


Ясно, как скажешь, а то меня это застопорило.

>Нет. \\W это не то же самое что \\-|\\)|\\s


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

>совсем левые символы вроде знаков доллара или вопроса - это хуже.


Да, тогда это не подойдёт, однозначно.
>>613584

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


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

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


Я попробую, потом покажу.
Кстати, вот ещё одна моя решённая задача вот отсюда: >>612398.

>http://ideone.com/8q8JVk - скрипт калькулятора Айпада.


Просто если ты вдруг начнёшь отвечать на посты в этом треде.
Спасибо.
#134 #613684
Ребят, придумал хорошую идею для сайта, возможно даже потом делать денюжку на рекламе.
Вопрос, для того, чтобы его создать-необходимо изучать весь этот массив учебников и уроков?
Или есть какие нибудь готовые конструкторы или что-то вроде?
#135 #613686
>>613684

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


Конечно нет, достаточно лишь нанять макаку на фрилансе. Это ведь не проблема для тебя, судя по тому, что твоя гениальная идея должна окупиться.
#136 #613689
>>613686
Я сейчас на безденежье.
#137 #613691
>>613684
CMSки есть, Wordpress.
Для его установки достаточно почитать пару статей из Гугла, сделать всё по шагам.
Но это чисто база: страницы, меню, комментарии, вот это всё. Какие-то оригинальные идеи на нём реализовать сложно даже и достаточно разбирающимся в нём людям.
#138 #613694
>>613689
А ты займи денег, а с прибыли отдашь.
#139 #613699
>>613684

>возможно даже потом делать денюжку на рекламе.


А вот об этом уже можно забыть.
Реклама с кризисом знатно пошатнулась, доходы сеошников с информационными сайтами упали значительно.
Вот тут можно посмотреть: http://adsensetop.ru
Там топы - это люди с сайтами в буржуйском сегменте Интернета, там с рекламой более-менее, там нет кризиса значительного.
Анон делал сервис, кстати, доходы анонов тоже.
#140 #613702
>>613699
Анон мог бы и маржин небольшой к футеру прикрутить. Вырвиглазно смотрится.
#141 #613703
>>613691
Можно ли на нем создать что-то вроде закрытого форума?
Страничку с регистрацией, репутацией и всем прочим?
Ну само собой с аватарками, уровнями и так далее.
#142 #613706
>>613703
Легко. А если нужен только форум, то vBulletin какой-нибудь - чисто форумный движок.

>>613702
Да он вообще забил на него, похоже. Сервисы для сеошников редко красотой отличаются, кстати.
#143 #613707
>>613706
Ну на бутстрапе сложно сделать нечто некрасивое.
#144 #613708
>>613706
Хорошо, сейчас посмотрим.
#145 #613712
Еще такой вопросик, мне нужно сделать не совсем форум, мне нужен сайт с форумом или сайт на основе форума. Что-то вроде двача с регистрацией, новостями и возможностью создавать закрытые темы.
#146 #613713
>>613712
чем лучше сконструировать?
#147 #613721
>>613679

Давай я тебе дам подсказку. Вот допустим мы хотим найти такую строку: «буква от a до f, за ней 2 цифры». Мы можем записать это так:

[abcdef]\\d{2}

[abcdef] = один любой из указанных символов
\\d{2} = 2 цифры подряд

Квадратные скобки значат «один любой из указанных символов». Также, там есть еще пара правил. Во-первых, для букв и цифр можно писать диапазон через дефис. Например [abcdef] можно записать как [a-f] или как [ab-f] или как [a-cd-f]. При этом надо помнить что буква ё в юникоде идет отдельно и в диапазон а-я не попадает. Потому надо писать [a-яё].

Второе правило - если в самом начале скобок стоит ^ то это значит «любой из символов кроме указанных». То есть [^a-f] значит «любой символ, кроме a, b, c, d, e, f».

Теперь подумай еще раз как записать «любое число идущих подряд минусов, скобок, пробелов».
#148 #613724
>>613712

Это тред по веб-программированию, он рассчитан на тех кто учится или умеет программировать. Так что дольше обсуждать тут СЕО и как сделать сайт будет оффтопиком. Это лучше делать в /web.

По твоей проблеме - ищи готовый движок для форума, есть сотни CMS, может среди них есть то что тебе нужно.
#149 #613733
Прочитал вот это вот: http://tema.livejournal.com/2129837.html?nojs=1

Скорее всего это чушь. У плохо разбирающихся в теме людей есть ощущение что нейросеть это какая-то магическая штука обладающая разумом, ничего такого на самом деле нет - она просто выдает ответы на входные параметры которым ее обучили. Сомневаюсь что для нейросети со 128 входами достаточно информации с 2700 фотографий. даже если представить что каждый вход имеет всего 2 значения, это уже 2^128 комбинаций.
7 Кб, 513x106
#150 #613735
Вкатываюсь к вам попутно смотря пик, что скажите?
Это самая последняя версия 2015, насколько я понял их школа каждый год новые уроки делает, даже не те языки которые были ими разобраны.
Отзывы в интерентах хорошие.
#151 #613736
>>613735
на те языки*
#152 #613737
>>613735
Кто такой, чем знаменит? Дай ссылку, где качал, хоть на Складчике.
#153 #613741
>>613737
Учебный центр при Бауманке, сайт их в интерентах найдёшь, вообще их курсы платные и транслируются для дистанционного обучения, добрые люди записывают и выкладывают на трекерах.
http://nnm-club.me/forum/viewtopic.php?t=889322
http://nnm-club.me/forum/viewtopic.php?t=889427
http://nnm-club.me/forum/viewtopic.php?t=889601
#154 #613742
>>613735
А каков твой уровень? Уроки ОПа все сделал?
Аноны базарят, что там после переход к студентам резкий, вот как раз такие уроки могут подойти.
#155 #613743
>>613741
Спасибо.
#156 #613745
>>613735

Это люди которые ООП изучают только в третьей части, а до этого учат быдлокодить на функциях и писать велосипеды? Ну даже не знаю.
#157 #613746
>>613741

Какой смысл в стыренном видео если нет обратной связи, нельза задать вопрос, проверить решение, получить замечания?
#158 #613747
>>613742
Начал делать уроки ОПа, понял что это слишком легко для меня, HTML и CSS я уже знаю нормально, когда-то пробовал на php делать всякие регистрации, взаимодействие с БД но знания мои разбросаны, поэтому подумал начать с первого урока этого специалиста, но задания с ОП сайта реально уровня шестого класса, хочется чего-то посложнее.
#159 #613748
>>613746
Я думал ля этого и существует этот тред
#160 #613750
>>613745
Вот и я не знаю, как думаешь это навредит моему обучению и вообще обучению?
#161 #613752
>>613747
А ты показывал ОПу свои решения? Насколько уверен в их правильности? Вот что-нибудь сделай из массивов (калькулятор кредита на айфон) и регулярок, оцени свой уровень непосредственно.
#162 #613763
>>613721
Бро, спасибо, это я уже схватил вроде бы.
Я попробую сократить регулярку чуть позже, сейчас пока стал читать учебник Савельевой "Основы программирования на PHP", немного хочу перезагрузиться.
Мне ещё оставшиеся задачи на регулярные выражения надо сделать, я вроде бы их себе сейчас представляю.

>Теперь подумай еще раз как записать «любое число идущих подряд минусов, скобок, пробелов».


Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".
Правильно ли это? Я почему-то не улавливаю в твоём намёке ответ: не понимаю, как можно тут циркумфлекс использовать. Если только есть какая-то конструкция, которая может сокращённо указать все символы, но с помощью циркумфлекса можно как-то обозначить, что определённые сиволы там не нужны.
Воскресенье, вечер - всё отдыхает, голова - в том числе.
#163 #613772
>>613747

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

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

Также обрати внимание, у нас есть еще задачи на SQL, на JS, на HTML/CSS.
#164 #613785
>>613752
http://ideone.com/fork/CucUxi
да решение не идеально, но суть циклов я уяснил
>>613772
Окей спасибо, попробую порешать. Полистал сайт подальше и понял что я очень дохуя не знаю, а первые уроки казались какими-то странно лёгкими.
205 Кб, 463x384
#165 #613792
>>613785
То чувство, когда с удовлетворением понимаешь, что не зря мучаешь ОПа своими тупыми вопросами.
Бро, неправильно калькулятор считает.
Там должно получиться 61270 рублей со многими копейками.
#166 #613794
>>613712

закрытая группа вк может подойдет?

ну или попробуй макабу накатить, и дописать код, чтобы закрытые разделы отображались только при наличии SUPER_PUPER_KEY в куке
#167 #613797
>>613792
Бля хуёво, значит я где-то ошибся в математике, может подскажешь где я проебался?
#168 #613798
>>613735

годнота, я после первого уровня скрипты типа краулер/парсер/генератор влегкую пишу

учитель поясняет как для двачеров даунов

правда я еще читал коече, но книга попалась - хуйня старая
5 Кб, 462x115
#169 #613802
>>613797
У тебя получается за двенадцатый месяц выплачивается вроде бы 5262 рубля, а должно уже только 1270 - там остается 262рубля долга, к ним нужно прибавить 3% от 262 рублей и 1000 рублей СервисПеймент. Однако общая выплата у тебя не учитывает вот эти 1000 и 3%. Она меньше оказывается, чем была бы, если бы твой скрипт реально посчитал долг на двенадцатый месяц - вот эти получившиеся у тебя 5262.
Там алгоритм такой: в последний месяц или когда сумма долга оказывается меньше месячной выплаты анона - нужно просто выплатить остаток (также к нему нужно прибавить 1000 за обслуживание кредита и 3%).
После написания обязательно проверь на сумме кредита в 1000 рублей - там должно получиться 2030 рублей.
Немного запутанно, наверное?
#170 #613806
>>613797
Советую также поставить в echo $paymentTotal - чтобы отследить, как увеличивается общая сумма выплаты.
Аноним #171 #613807
>>613803
Куплю менструальную кровь. Дорого. Много.
#172 #613831
>>613802
Я понял про что ты, как раз я под этим и подразумевал "не идеально", просто если оставшаяся сумма меньше той которую покупатель платит каждый месяц, как-то нецелесообразно отдавать лишний косарь и лучше в последний месяц отдать чуть больше месячной.
В твоём случаи в условии надо проверять "пока сумма больше нуля" и ещё кое что поменять.
В общем ты так это имел ввиду?
http://ideone.com/4DiXVe
#173 #613843
>>613831

> и лучше в последний месяц отдать чуть больше месячной.


Лучше отдать все в первый день но школьнику столько денег не дают. даже лишний рубль сверх 5000 он найти не может.
#174 #613846
>>613831

> 13 месяц - осталось заплатить -3729.8132554793 руб.


Какой-то странный итог. Программа должна быть умнее и не платить больше чем требуется. Если долг = 262, и выплатить надо 1270 то надо выплатить только их и это же отразить в сообщении.
#175 #613847
>>613831

Также, надо убрать из текста числа 5000, 1000, 0.03 и вынести в переменную.
23 Кб, 586x291
#176 #613853
>>613831

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


Вот в том-то и дело, что Анон найти больше не может - такой Анон в вакууме, поэтому в месяц платит или 5000к, или оставшуюся сумму.

>В твоём случаи в условии надо проверять "пока сумма больше нуля" и ещё кое что поменять.


Нет, там лучше проверять так: пока сумма долга (долг + 1000 за сервис и 3% от долга) остаётся больше суммы месячной выплаты - мы выплачиваем 5000, сумма выплаченная растёт на эти 5000, а сумма кредита уменьшается на них. А когда общая сумма долга становится меньше 5000 (но уже с прибавленными 3% от неё и прибавленной 1000 за обслуживание кредита), то выплачиваем только этот получившийся долг и эту выплату плюсуем к прошлым выплатам.
ОП не одобрит твой калькулятор потому, что в минус не должно ничего уходить, такие дела.
Вот как получилось у меня после кучи наводящих советов ОПа и помощи другого анончика.

>>613843
Ну и плюс это же математическая задача, тут всё идеально.
#177 #613855
>>613853

Вот, все по полкам расставил. Ты теперь как будто эксперт по расчету кредитов.
#178 #613857
>>613855
Я просто раз ПЯТНАДЦАТЬ переписывал этот калькулятор с нуля, чуть не поехал, это наложило отпечаток.
Я почти все цифры в нём до запятых помню наизусть...
#179 #613903
>>613853
>>613857
Блять я уже третий раз эту ёбаную задачку переделываю, надеюсь это окончательно верный вариант.
http://ideone.com/X2E6dg
60 Кб, 660x561
#180 #613916
>>613903
То чувство, когда опытный анон тоже торчит на одной задаче много времени...
Если подставить 1000р, то считает в минус.
Для тестирования необходимо ставить долг меньше месячной выплаты и смотреть, правильно ли считает даже в этом случае.
Вот там что вижу я: $credit =+ ((($credit * $naeb) + $oxyet) - $money); - это считается даже в том случае, когда сумма долга не превышает 5000к, вот поэтому и уходит в минус, когда она изначально меньше. Ведь у тебя цикл связан с этим: if (0 >= $credit).
Это мешает - эта привязка к нулю, потому что не вполне верно: сумма кредита никогда и не должна быть меньше нуля, надо брать другой ориентир.
Под спойлером его напишу и нужный алгоритм: сумму долга надо сравниваться с месячной выплатой. Если меньше - то сразу выплачиваем долг с 1000 и 3%, а если больше - то продолжается цикл с увеличением общей выплаты и уменьшением суммы долга.
#181 #613918
>>613916

>То чувство, когда опытный анон тоже торчит на одной задаче много времени...


Вголоснул. Опытный анон такое решит за пару минут. Человек просто переоценил свои способности.
#182 #613920
>>613916
Куда ты 1000 подставил?
#183 #613921
>>613918
Ну, мне и до этого ещё далеко. Для меня все, кто может просто взять и написать скрипт с массивами, циклами и регулярками, сейчас опытные.
А он там что-то с БД уже мутил, какие-то сложные скрипты писал.
Поэтому уже три недели изучаю сайт ОПа - хочу заложить основы.
351 Кб, 650x701
#184 #613923
>>613920
В $credit надо подставить: http://ideone.com/ghRtcV
ОП так делал для проверки калькулятора.
Должно получиться 2030, то есть 1000 *1.03 + 1000.
68 Кб, 728x1820
#185 #613924
>>613923
По моему мы разные коды смотрим, у меня нет никаких минусов.
http://ideone.com/fazW3B
#186 #613928
>>613924
Аа, вот сейчас всё верно, мои поздравления.
Иногда Ideone не сохраняет конечный результат, замечал такое.
Задача у тебя при этом совсем по-другому решена, не так, как я решил.
Вот моё решение: http://ideone.com/C8o0SL
420 Кб, 500x494
#187 #613935
>>613928
Спасибо, ебать решение, ты как до этого додумался, это же пиздец как запутано, можно охуеть просчёты на 20 месяцев вперёд. По моему, мой вариант рациональнее.
А ну ка ОП или знающий анон поясните нам двум не шибко умным, какой вариант рациональнее, мне важно знать кто КРУЧЕ тот злорадствующий Анон или я пидорчсвшник.
http://ideone.com/C8o0SL
http://ideone.com/fazW3B
#188 #613940
>>613935
Ой, я тебе прежнее своё решение дал, вот сокращённый вариант: http://ideone.com/4sYVu8
Там упрощено уже было.
ОП обязательно пояснит со временем.
Там у тебя в одном месте то, от чего он требует обычно избавляться, - повтор или лишние телодвижения.
Вот тут: $credit = $credit + ((($credit * $naeb) + $oxyet) - $money);
\t$paid = $paid + $money;
В тот момент, когда $credit изначально меньше $money, после прохождения этого он становится с отрицательным значением. А потом становится нужной итоговой цифрой, когда снова прибавляем $money.
Предчувствую критику ОПа в этом случае.
#189 #613946
>>613935

>По моему, мой вариант рациональнее.


Вообще согласен: эти 20 месяцев изначально тоже какая-то неудобная привязка. Кто знает, сколько там месяцев, лучше исходить из точно известных или уже в ходе работы скрипта получаемых величин, я так думаю.
#190 #613948
>>613940
Я знаю, ты специально настраиваешь ОПа заранее против меня, вот негодяй.
Ну да, я это отрицательное значение использую в свою пользу, тем самым делаю код рациональнее как мне это кажется, наверно.
Ведь программа работает как надо, и на вывод нет никаких непонятных чисел.
#191 #613950
>>613948
ОПа хрен настроишь, такие дела.
Он часто проверяет все промежуточные варианты. Вот ты три калькулятора выложил в тред - он все три проверит и подробно напишет, что там не так.
Я его боюсь.
#192 #613960
>>613950
Лол, интересно я вообще в этот тред впервые сегодня зашёл и как ведёт себя ОП даже не знаю, но видимо я тоже начинаю его бояться.
И да, зачем у тебя процент это 1.03, когда 3% это 0.03 с математической точки зрения?
#193 #613973
>>613940

В решении есть копипаста, надо убрать:

2 раза написано ($creditBalance x $percent) + $servicePayment;

Неудобно если придется формулу менять например.

>>613935

> http://ideone.com/C8o0SL


Тут надо убрать копипасту:

> echo "{$month} месяц спустя: долг = {$creditBalance} р


> $paymentTotal = $paymentTotal + $debt;


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


Копипаста - зло.

> http://ideone.com/fazW3B


Тут серьезная ошибка: PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11

Обращение к еще не существущей переменной.

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

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

Также, echo зачем-то скопипащено 2 раза.

Обе программы требуют доработки.
#193 #613973
>>613940

В решении есть копипаста, надо убрать:

2 раза написано ($creditBalance x $percent) + $servicePayment;

Неудобно если придется формулу менять например.

>>613935

> http://ideone.com/C8o0SL


Тут надо убрать копипасту:

> echo "{$month} месяц спустя: долг = {$creditBalance} р


> $paymentTotal = $paymentTotal + $debt;


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


Копипаста - зло.

> http://ideone.com/fazW3B


Тут серьезная ошибка: PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11

Обращение к еще не существущей переменной.

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

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

Также, echo зачем-то скопипащено 2 раза.

Обе программы требуют доработки.
#194 #613974
>>613946

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

Там где стоит условие $credit > 0 - защиты нет, плохо. Самый простой способ защиты -как раз почтавить счетчик и ограничить каким-то разумным числом N. 20 конечно слишком мало.

Или более сложный вариант - аналитически определить например что долг не снижается N месяцев подряд.
#195 #613976
>>613973

> PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11


Окей с этим ясно спасибо, просто объявить эту переменную вначале и присвоить 0 например. Сойдёт за исправление?

> Это его запутывает и делает код менее понятным


Спорно.

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


Окей, предположим что это кусок какой-то большой программы и вдруг идёт обращение к $credit в момент её отрицательного значения, опять же, в конце этого куска кода её можно обнулить при условии что она отрицательная, и не нужно будет постоянно проверять отрицательная она или нет. Это конечно костыль, но и замечание это имеет косвенное отношение к конкретно этой задачи, но просчёт наперёд сколько-то там месяцев я считаю тоже не рациональным подходом, а если там не 13 месяцев, а 113, так что вопрос остаётся открытым, какое же решения для этой задачи является самым рациональным, в пределах этой задачи, без "если бы".
#196 #613978
>>613976

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

Понятно что в задаче из 4 строк это может и не принесет вреда, но такой подход в общем неправильный, и его лучше искоренять на самом раннем этапе. В программе большего размера использование таких неочевидных вещей приведет к тому что кто-то сделает ошибку.
#197 #613979
>>613978

> Предложи тогда свой вариант защиты от зацикливания.


Если бы я знал, то давно бы им поделился.

>насчет ухода в минус - а в чем сложность не уходить?


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

>искоренять на самом раннем этапе


Давай искоренять, я только за, но защита от зацикливания каким-то конкретным числом прогонов тоже не лучший вариант.
Нестандартное применение PHP или чего-то подобного #198 #613983
Привет, доброоп. Давно я тебе не писал. Сейчас уже 7ая версия пыха вышла? А я где-то на 5.2-5.3 завис. Хотел обратиться к тебе с таким вопросом: вот сайтики, цмски, вордпресс, фреймворки - это конечно все хорошо и здорово, но можно ли применить PHP в других областях, куда сейчас так рвутся js, python и им подобные? Ну, программирование десктопных gui-приложений на каком-нибудь Qt, мобильная разработка, использование в качестве скриптового языка, подключенного к C++ проекту и так далее? А если нет, то что бы такое взять, что было бы максимально близко к PHP по простоте старта, количеству и качеству документации, особенно,русскоязычной, коммьюнити, идеологии языка... Я так понимаю, в случае альтернатив я выбираю только из python, ибо остальные совсем уж малораспросраненны?
#199 #613987
>>613979

В голову приходят такие варианты защиты от зацикливания:

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

Мне конечно самым простым кажется второй.

Чтобы не уходить в минус можно сделать так:

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

Можно, но не имеет смысла.

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

Вроде раньше GUI программы писали на Си++, но он сам по себе сложный. Зато быстрый. Под винду сейчас на C# пишут. Можно писать на Яве, но она тяжелая и надо ставть огромный инсталлятор. Есть еще node-webkit и похожие штуки, позволяюие писать на HTML/JS.

PHP там применять точно не стоит.
#201 #613989
>>613988
Почему? Память течет? Та же Qt добавила бы события и заебись. Яву не хочу по описанным причинам, а шарп из-за зависимости от Microsoft. HTML/JS для гуя - ну это совсем пиздец. Я надеялся взять что-то, что хорошо ладит с кьютом, уж больно он моему сердцу мил. Я не собираюсь таким образом писать СЛОЖНЫЕ программы. Небольшие тулзы, простенькие игрушки, не больше.
#202 #614009
>>613989

Тогда Питон или Си++.
#203 #614022
>>613973
Ох щи, вот же как можно было сократить, действительно: http://ideone.com/krFqvs
Вроде бы всё, дальше некуда сокращать.
Но приблизительное время для выплаты кредита так и остаётся 20 месяцев.

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


Кстати, да, там и в одном echo есть неболшая засада: echo "$month мес.: долг = 0 руб, выплачено всего: $paid руб.\n"; - долг просто текстом выводится как "0", а не переменной. Нужно ещё помудрить, получается, чтобы именно переменной получить этот "0" в долге.
#204 #614025
>>614022
Блин, я запутался в своих вариантах, вот совсем сокращённый вариант: http://ideone.com/7FJfGm
#205 #614027
>>613960

>зачем у тебя процент это 1.03, когда 3% это 0.03 с математической точки зрения?


Так проще считать становится, мы сокращаем код.
Пишем не $credit умножить на $percent прибавить $credit (чтобы получить сумму кредита и процентов), а просто $credit умножить на $percent.
Буйство семёна #206 #614036
>>614022

>Кстати, да, там и в одном echo есть неболшая засада: echo "$month мес.: долг = 0 руб, выплачено всего: $paid руб.\n"; - долг просто текстом выводится как "0", а не переменной. Нужно ещё помудрить, получается, чтобы именно переменной получить этот "0" в долге.


Да чего там мудрить - вот как всё просто: http://ideone.com/foG9Y6
Просто ставим в самом конце выполнения скрипта $credit = 0; - и всё. Тем более, что это всё уже верным оказывается.
63 Кб, 748x290
227 Кб, 414x351
Onyx #207 #614053
Поучусь пожалуй по мануалу опа. Надеюсь никто не против что свои посты буду подписывать. Чтобы самому потом не забыть что я писал, а что не я.
Сразу спрошу, почему не рботает /n как перенос строки?

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


Куда втыкать?
Задача на курс доллара
https://ideone.com/YZp02e
Игра в броски кубиков
https://ideone.com/euuZLK
Рулеточка
https://ideone.com/JG4grX
Айфон в кредит
https://ideone.com/VVwDGV

Второй пик - работа рулетки.
Првый пик - в мануале не написано про то, как работать с /n может прописать? А то за пару тредов уже платиновый вопрос.
#208 #614112
Подскажите, пожалуйста, каким способом лучше всего вставить таблицу на сайт, который представляет из себя подобие интернет-магазина. Суть в том, что она должна иметь собственное колесо прокрутки, если она имеет больше n элементов, а в конце каждой строки должна быть кнопка, при нажатии которой предмет запоминается и помещается в корзину.
Само по себе всё работает, только вот с этой прокруткой проблема, гугл пишет много разной фигни.
#209 #614127
http://habrahabr.ru/post/235901/
Для Саблаймоюзеров. Вдруг кому пригодится.
#210 #614181
>>614036
Тогда уж если совсем сокращать, то вот так http://ideone.com/xq0hgG

тот самый автор этого варианта
#211 #614208
>>614053

>почему не рботает /n как перенос строки?


Ты именно так и пишешь? Слэш там обратный: \n.

>Куда втыкать?


Так у тебя в рулетке же воткнуто всё верно? В header и втыкать, если ты пишешь скрипты в IDE, а потом проверяешь в браузере.
В скрипте Айфона в кредит надо в последний момент долг нулевым сделать. Иначе у тебя получается, что в последний месяц всё выплачено, а долго всё равно 1270р.
Также некоторые переменные начинаются с заглавных букв - не по понятиям! Надо со строчных, а далее новое слово в переменной с заглавной.
>>614181
И то верно. Echo же одно и то же там. Но в моём скрипте так не получится, я там дополнительную переменную $paymentTotalLast ввёл, там у меня echo различаются.
9 Кб, 424x96
150 Кб, 421x400
#212 #614216
>>614053
Накопление процентов
http://ideone.com/sbRfdB
Задача про рост
https://ideone.com/OeB9Zb
Ответ на любой вопрос
https://ideone.com/hYGrl2
Генератор имён (надеюсь я правильно понял задачу)
http://ideone.com/NVt8My
Доделай шифрование до нормального уровня
http://ideone.com/JOFYEB
Доделай расшифровку зашифрованного текста.
http://ideone.com/CRpzpH
>>614208

>В header и втыкать, если ты пишешь скрипты в IDE, а потом проверяешь в браузере.


В header куда именно? Можешь пример написать?
#213 #614228
>>614216

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

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
Onyx #214 #614231
>>614228
Я в начало ставлю и что-то не срабатывает (
#215 #614243
>>614231

Покажи код, скажи куда сохраняешь php файл и как открываешь (если браузером то что в адресной строке).
Onyx #217 #614249
>>614246
Понял, спасибо. Теперь всё работает.
#218 #614250
>>614246

Неправильно, текст не должен идти выше header.
Надо делать так:

<?php
header ....
?>
текст
...
34 Кб, 1079x399
#219 #614255
>>614250
Так чтоли?
Onyx #220 #614256
>>614255
А коментарии разьве сработают за пределами <? ?>?
#221 #614257
>>614256
Естественно
5 Кб, 306x127
Onyx #222 #614260
>>614257
Ну как-то не работает.
#223 #614264
>>614260
А, ты это имеешь ввиду, ну если не надо выводить комментарий на экран, то надо загнать в <? ?>. А если надо вывести задачу на экран просто вывожу за пределами <? ?>, и // не обязательно писать, просто осталось.
#224 #614267
>>614264
блять, борда звёздочки спиздила [CODE]//[/CODE]
#225 #614287

>614216


Воу, воу, паринь палехчи!!1
Ты кроме РНР явно какой-то ещё язык знаешь?
#226 #614288
>>614216

Воу, воу, паринь палехчи!!1
Ты кроме РНР явно какой-то ещё язык знаешь?
#227 #614290
>>614216
В расшифровке два раза символ " повторяется.
Onyx #228 #614292
>>614208

> Надо со строчных, а далее новое слово в переменной с заглавной.


Буду знать, спасибо.
Лев Толстой
http://ideone.com/3UbyNy
Палиндром
http://ideone.com/f8UWDS
>>614264
Ну как-бы смысл комментария ведь в этом. Чтобы после компиляции его не было видно.
>>614288

>Ты кроме РНР явно какой-то ещё язык знаешь?


C++ уровня школьника знаю. Но толком ничего серьёзного не писал. С# уровня "Написал лабу 3 раза".
>>614290
Один на Щ, а второй где?
Onyx #229 #614294
#230 #614295
>>614216
Накопление процентов неправильно работает.
Там 49 лет должно быть.
Onyx #231 #614306
>>614295
Пофиксил.
Onyx #232 #614338
>>614306
Задача про айпад.
http://ideone.com/f4xEK7
Вот это сложновато. Надеюсь правильно решил.
#233 #614340
>>614338
Нет, там можно по среднемубанку проверить, должно быть 61270 - как в скрипте на кредит Айфона. Значит, и другие тоже неправильно считает.
#234 #614341
Задача с рулеткой http://ideone.com/wDWNxi

>>613443 -кун
#235 #614342
Господа, все-таки меня волнует адаптивная верстка, ведь у каждого телефона-планшета свои разрешения экрана... Вы можете примерно комбинацию ширина-высота экрана сказать, под которые оптимизируете верстку?
#236 #614344
>>614342
В прошлом или позапрошлом треде было. Попробуй поискать по @media, ну или я буду с компа - скину настройки для адаптива в CSS.
#238 #614355
>>614350
Там кроме тебя кто-то еще есть?
Что вы там вообще без ОПа делаете?
#239 #614356
>>614355
да, еще я там)
#240 #614357
>>614355
А зачем нам ОП? Тут не все ведь джуны в пхп/програмировании.
Onyx #241 #614358
>>614340
http://ideone.com/f4xEK7
Вроде 61270
1 строку исправил.
#242 #614359
>>614338
Нет, бро, там третий банк самый дорогой, там 69к должен кредит выйти.
Названия у переменных хер проссышь, что это, непонятно и запутанно.
26 Кб, 610x472
Onyx #243 #614360
>>614350
Вкатился.
#244 #614364
>>614350
Ух как вкачусь сейчас, да как начну вас траллить регулярками да прочей туфтой...
#245 #614368
>>614359
Около 69, я не помню точно.
#246 #614369
>>614344
Да ты уже скидывал, но там только для телефона разрешения для одноколончатого сайта, там же еще менюхи есть и у планшентов ширина экрана отличается от компьютерного. Т.е. я предполагаю, что нужно три мета тега выстраивать(телефон, планшет, компутер). А еще планшет может быть вертикальный или горизонтальный. А под телефон нужно делать более крупные иконки и текст, т.к. все масштабируется.
Onyx #247 #614376
>>614368
>>614359
Тоесть один банк я считаю правильно, а второй нет? Я лучше подожду ОПа. Как-то это странно выглядит.
Onyx #248 #614384
>>614359

>там третий банк самый дорогой


У него самый мелкий процент и нет комиссии. Считай - 12к рублей сразу. (если 1к в месяц платить целый год)
Onyx #249 #614390
>>614364

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


Отличи регуляркой тире от дефиса.
#250 #614391
Думаю что написать, чтобы всегда иметь козырь в кармане в случае если пойду устраиваться на работу ПХП программистом, думаю сделать следующее:

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

Такое пойдёт или не очень?
#251 #614403
Как бороться с тем, что мне все становится скучно и я не довожу до конца? Не донатянул верстку на цмс. Потом мне стало скучно делать ее адаптивной, хотел еще карусель плагином для вордпресса сделать, но стало так скучно верстать, что я начал осваивать новый фреймворк. В итоге у меня в резюме больше фреймворков, которые у меня лежат в иде в недоделанном состоянии и не выложены в гитхабе, как проекты для резюме. Это нормально или подумают, что пиздабол и лучше не писать те технологии, проекты на которых не выложены в законченном виде на гитхабе?
#252 #614407
>>614391
Не пиши "слайдеры-картинки-карусель-через админку", пиши нормальным языком плагины и виджеты. Не в школе все-таки уже.
#253 #614408
>>614391

>Сделать сайт на вордпресс


>если пойду устраиваться на работу ПХП программистом


Я думаю это сразу фэйл. Сейчас вордпресс даже домохозяйки могут.
#254 #614409
>>614369
Ты те шаблоны смотрел, на которые я ссылку давал? Там HTML-шаблоны simplicite, что-то такое.
Там на некоторых шаблонах изначально три колонки или две. Там в @media просто указываются id сайдбара или главного блока, когда экран такой-то ширины - они и становятся соответствующей ширины.
#255 #614410
>>614376
>>614384
Так ты изначально за открытие счёта платишь 7к - в том-то и дело.
#256 #614411
>>614390
По 16ричному коду жи есть.
#257 #614414
>>614410

>Так ты изначально за открытие счёта платишь 7к - в том-то и дело.


В других банках ты платишь 6 тыщь и 13 тыщь только не разово, а за счёт сервисных.
#258 #614415
>>614411
Пруфы.
#259 #614416
>>614410
Добавлю: из-за этих 7777 рублей там и должно получиться больше в итоге, потому что процентов там на тысяч 5-6 всего.
У тебя как-то неверно считается прибавление этих 7777 к начальному кредиту.
#260 #614417
>>614403
Артемий.jpg
#261 #614418
>>614403
Попробуй nofap
#262 #614419
>>614415
В прошлом тренде оп давал, в самом конце.
#263 #614435
Я уже просто заебался, поясните в чем может быть ошибка.
Есть метод, который принимает аргументы:
public function select($table, $fields, $where = null, $page, $order_by = array('id' => 'DESC'))

И есть его вызов:
$products = $this->db->select('products', $fields, $where, $page)

Но какого-то хуя $page всегда ебаный НУЛЛ. Я даже в самом методе уже задавал ему значение по-умолчанию, но он все-равно НУЛЛ. Причем если поменять местами $where и $page, то $where становится НУЛЛ, хотя до этого ее значение нормально отображается. В чем дело? Порядок аргументов разве играет значение? Или что блять не так?
#264 #614437
>>613156
А не проще ли хранить просто путь к файлу типа 'image/232334324.jpg'?
#265 #614447
>>614435
Зачем where по умолчанию равно null? Если это не обязательный аргумент, то он должен быть после обязательных.
#266 #614450
>>614447
Я знаю, но я делал и $page по-умолчанию null, ничего не менялось, хотя при вызове метода я туда значение передавал
#267 #614453
Задача про телефон.
http://ideone.com/UAC9M6
#268 #614514
Анон, поясни где я провтыкал?
http://archive-ipq-co.narod.ru/l1/functions.html
http://codepad.org/EqoSCLwx
И, может, кто знает как задача на палиндром без функции решается?
#269 #614588
>>614453
Нет, задача решена не верно. Там стоит внести лишний пробел - всё ломается: http://ideone.com/unkTGF

Алсо паста (ОПа).

### Номера телефонов

Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек!

Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 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' // нет +
);
#270 #614599
>>614414
Бро, извини, это у меня ошибка, походу.
Потому что я изначально бездумно прибавил 7777 к 40 000, а потом, получается, и проценты отсчитывались от этой суммы.
ОП просто ещё не проверил мой этот калькулятор.
Сейчас переделал - вот как у меня получилось: http://ideone.com/DK8ez3
Опять же расхождение с твоей цифрой по третьему банку, а остальное совпадает.
Я тупо прибавил к получившемуся в функции 7777р этой платы за открытие счёта.
Вроде бы и у тебя там то же самое.
Пока туплю и не могу проследить, почему так выходит.
#271 #614643
Извините, что отвлекаю вас от очень важного решения безумно сложных задачек про регулярки и считалочки уровня сделай-свой-гугл, но у меня вопрос про виртуалку, Какой параметр для типа сети ставить при установке Убунты на Виртуал бокс? Виртуальный адаптер хоста, NAT, Сетевой мост?
И еще как узнать диапозон айпи локальной сети? "и настройка виртуального сетевого адаптера так чтобы его IP-адрес входил в диапазон адресов локальной сети."
Специально копирую кусочек из мануала и катаю длинный пост, чтобы местные аутисты его а) прочитали б) правильно поняли в) местные школьники-дауны тоже правильно поняли и не задавали тупых вопросов и не раздавали еще более тупых советов.
#272 #614653
Что-то сокеты не работают по этому туториалу.
http://socketo.me/docs/hello-world
Может хост и порт неправильные? Какие указывать под винду локалку? Или лучше на линуксе это делать?
#274 #614676
Onyx #275 #614696
>>614599

>Вроде бы и у тебя там то же самое.


Я тебя наслушался и код перелопатил весь. В итоге изменилось только то, что 7777 я теперь считаю частью изначального кредит, соответственно процент в этом банке считается от суммы 4776 рублей, а не от 3999 как в других банках.
#276 #614699
>>613983
Бамп вопросу.

>>613988
>>614009
Тут бы заебись зашли объяснения, почему не подходит пых и чем предложеннные варианты лучше остальных.
#277 #614701
>>614699

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


Миллиард тонн доков, простота в освоении, огромное комьюнити, кросплатформенность (нативная в отличии от всяких JAVA) - C++.
#278 #614708
>>614701
Доков - на английском, причем сложном. Трудность освоения - МАКСИМАЛЬНАЯ. Код писать - одно мучение.
#279 #614711
У меня кончились идеи. Везде бэкенд один и тот же, одни и те же админки, функционал, разница между сайтами только в верстке и представлении. Я даже не знаю, что на yii написать, очередной говнобложик?
#280 #614712
>>614711
Игру напиши хоть. В чём вопрос?
#281 #614714
>>614712
1) Кому нужны браузерные игры в 2015?
2) Кому нужны браузерные игры без мощнейшего фронтенда и охуенной графики?
#282 #614715
>>614711

Напиши сайт тестов: https://gist.github.com/codedokode/8733007
#283 #614716
>>614714

В шахматах нет никакой графики, но игра интересная.
#284 #614717
>>614714

>Кому нужны браузерные игры в 2015?


Тебе шашечки или ехать, я чёт не пойму? Так можно вообще про всё написать, кому нужна земля, небо, двачь в 2015?
#285 #614720
>>614708
Перечитал твой вопрос.
У тебя есть Pyton, Perl, Ruby. Но по простоте освоения они ещё хуже плюсов.

>Доков - на английском, причем сложном.


На русском тоже есть. Причём много.

>Трудность освоения - МАКСИМАЛЬНАЯ.


Ну не надо тут. Вполне всё осваивается.

>Код писать - одно мучение.


Ставь MVSN и будет тебе счастье. Остальные компиляторы - да, ужос.
#286 #614724
>>614716
Только все "шахматы" уже 100 раз написаны.
>>614717
Писать ради писать? Тебе в хачкель-тред.
>>614720
Ну... Питон, имхо, проще, раби тоже, хоть и бесполезнее.

>На русском тоже есть. Причём много.


Покажи годный, реально годный и всеобъемлющий справочник по c++, STL, Boost, Qt вроде cplusplus.com или cppreference, но на русском? Покажи реально годных и всеобъемлющих учебниках не на тысячу страниц по чему-то, кроме с++ и стл (с поправкой на правило Парето, ладно) на русском.
#287 #614728
>>614724
Давай ты как-нибудь сам со своими тараканами разберёшься и придёшь сюда когда будешь готов получить совет.
#288 #614729
>>614728
А какие тараканы? Все вопросы по сути.
#289 #614732
>>614720

Питон считается понятным и простым. И для него есть биндинги на Qt.

>>614699

Тем что на нем никто это не делает, а значит большое число багов и нерешенных проблем, нет туториалов, библиотек. А на Питоне и Си++, Яве, C# пишет такие приложения куча людей.
#290 #614733
>>614729
Тебе на всё ответили. А ты ответил в стиле "Ну хз, мне лень искать мануалы, лень писать игры, лень самому придумывать идеи, лень писать код".
81 Кб, 576x376
#291 #614735
https://telegram.me/joinchat/BxAn5ASN8mv5h_KmZ-Y9rA
Конфа пхп-богов.
Общение не только на темы пхп.
#292 #614736
>>614732

>Питон считается понятным и простым. И для него есть биндинги на Qt.


Я и не говорил что он сложный, я говорил, что С++ проще.
#293 #614737
>>614736
Как вообще можно говорить что один язык сложнее другого? Я понимаю сравнивать парадигмы, но блять, не ЯП же. Есть более понятный синтаксис и менее.
#294 #614739
>>614733
Мы разные люди. Я мимокрок, который утверждает, что С++ НИХУЯ НЕ ПРОСТ ДЛЯ ИЗУЧЕНИЯ, это бред. И уж на русском нормальных доков по нему точно нет.
#295 #614740
>>614737
Есть возможность взять и работать с файловой системой. И есть возможность долго заниматься сексом с драйверами, библиотеками, разбираться в коде и потом работать с файловой системой. Понятная аналогия?
#296 #614742
>>614739
ХЗ, у меня знакомый джуном работает прочитав 1 книгу Страуструпа. Куда уж проще.
#297 #614743
>>614740
В таком случае это называется "менее подходящий для данной задачи".
#298 #614744
>>614736
Как ты можешь сравнивать язык для хипстеров, где есть все из коробки, с языком, где нет даже функции, узнающей размер массива?
>>614742
Джуном за 5к в Мухосранске? Нет, ну правда.
#299 #614745
>>614724
зачем тебе на русском, пидораха что ли?
#300 #614746
>>614735
у меня недоеб. меня там кто-нибудь потрахает большим членом?
#301 #614747
#302 #614748
>>614744

> узнающей размер массива


Написал count функцию для массива. Куда писать Страуструпу?
#303 #614749
>>614748
Не, ему не надо, ему и так норм. Алсо, гарантированно она работать не будет, если за последним элементом стоит что-то того же типа.
>>614745
Найс слив. Промотай диалог до начала, узнаешь зачем.
#304 #614752
>>614749
В плюсах нет NULL?
Есть указывает на NULL - массив закончен?
Типа в любом адекватном ЯП енто так.
#305 #614756
>>614752

>NULL


В плюсах указатель, указывающий на элемент, следующий за последним в твоем массиве, указывает на ЧТО УГОДНО. И да, адекватно проверить переменную на определенность ты тоже не можешь, если сам её предварительно не занулил. Как в Паскале прям.
#306 #614757
>>614756
Всмысле "что угодно"? Я не понимаю блять что за "что угодно"?
#307 #614758
>>614757
Вообще что угодно. Он напрямую указывает на ячейку в оперативной памяти. Там может быть число, число, представляющее символ, знак числа, ссылка на какой-нибудь другой адрес, любое значение вообще.
#308 #614761
Почему у меня аяксом данные в бд не отправляются? Подключение к бд, юрл для отправки, все правильное. Пишу скрипт в конце страницы - тоже не работает.
https://ideone.com/0BcDtA
6 Кб, 220x229
#309 #614762
#310 #614763
>>614761
И функции загрузки скриптов в конце тоже есть. и таблицы в бд с полями офк.
#311 #614764
А зачем правда кто-то учит все эти фреймворки, паттерны, МВЦ, читает инструкции по рефакторингу в стилях разных фирм, если все равно на PHP весь кодинг - это бесконечные круды, админки, генерация страничек и проверка данных из форм?
#312 #614765
>>614737

В одном ручное управление памятью, указатели могущие быть NULL, массивы без проверки размера, адские шаблоны, макросы, а в другом все безопасно. Действительно, какой же проще?
#313 #614766
>>614764

Потому что круды и админки пишутся на MVC феймворках и иногда рефакторятся очевидно.
#314 #614767
>>614744

>С++


>5к


Сам-то понял что сказал?
#315 #614769
>>614744

>нет даже функции, узнающей размер массива?


Ой вэй. кто-то за тебя написал ФУНКЦИЮ for(i=1; ;i++) и теперь ты без count жить не можешь
#316 #614770
>>614761
А где у тебя геттеры то? Что-то не понял?
#317 #614771
>>614766
Зачем? Ну объективно?
>>614767
Вполне. А ты сам понял, что сказал "одну книгу?"
>>614769
Я уже объяснял выше.
#318 #614773
>>614771
Получает сейчас 90к в ДС. Опыт чуть больше года.

>А ты сам понял, что сказал "одну книгу?"


Джуниор же. Тем более C++ спецов сейчас просто нет. Все внезапно решили года 4 назад вкатиться в руби, PHP, Питоны и прочие. Ну и да, его не с улицы взяли, он таки тестовые задания решал на собеседовании.
#319 #614774
>>614773
Джуниор. С++. Одна книга. 90к? И что ж тут делает целый тред-сериал "нет работы, куда деваться?"

>Ну и да, его не с улицы взяли


Вот с этого и надо было начинать, сын Роттенберга вон вообще всех дальнобоев страны доит.
#320 #614775
>>614774

>Джуниор. С++. Одна книга. 90к?


Что ты удивляешься? Он же её не просто пролистал, прорешал каждый пример, каждую задачу решил. Получил много знаний. Меня например хватало только на пол книги в 1300 страниц.

>И что ж тут делает целый тред-сериал "нет работы, куда деваться?"


Ты в этом треде был? Там буквально все поголовно "Я чёт задолбался хикковать, неделю назад нагуглил что можно вкатиться в JAVA и зарабатывать, 6 дней назад прочитал две статьи и написал целых 3 хеллоуворда. Вчера на собеседовании дали очень сложные задачи по сортировке массива, афигевшие HR хотят чтобы я знал всё за какие-то 150к рублей, вот сволочи!"

>Вот с этого и надо было начинать


Ну он не чей-то родственник если ты об этом, и не по знакомству. Просто подал резюмэ на вакансию которая была размещена, решил задачи. прошёл собеседование. Его взяли. А не так как ты тут хочешь представить. Шёл по улице, его спросили про C++ и сразу взяли на работу.
#321 #614777
>>614775

>Что ты удивляешься? Он же её не просто пролистал, прорешал каждый пример, каждую задачу решил. Получил много знаний. Меня например хватало только на пол книги в 1300 страниц.


Страуструп же меньше в 2 раза. Или ты про какую книгу?
#322 #614786
>>614775
>>614773
Тут не об этом. А о том, что Страуструп, Шилдт, Плата - это голый, чистый С++, на нем невозможно написать ничего, это не джава. Там ни графики, ни мультипотока, ни сети, ничего.
#323 #614788
>>614786

>ни графики


>невозможно написать ничего


У апача тоже графики нет. Так-то.
А вообще - Этож С++, подрубаешь библиотеку и лопатишь графон\сеть\мультипоток. Также как в PHP фрэймворки так и там. Только в крестах проще.
#324 #614791
>>614788
Апач - это не язык. И да, на PHP есть графика.

>А вообще - Этож С++, подрубаешь библиотеку и лопатишь графон\сеть\мультипоток.


Так это их все надо знать, а не чистый С++, о чем и речь. А в php/java оно из коробки есть.
Притом учить их все равно проще.
#325 #614794
>>614791

>Апач - это не язык.


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

>на PHP есть графика.


Библиотека обработки графики есть. На чистом PHP ты интерфейс не нарисуешь.

>А в java оно из коробки есть.


>Притом учить их все равно проще.


Ага, всего-то второй томик Хорстмана прочитать в 1850 страниц по JAVA в котором кратко описано как Java со Swing пытается в графику. Очень всё просто и есть из коробки.
#326 #614798
>>614775
бля эти сказочки уровня одна книга-волшебная пилюля меня в этом разделе доебали уже. все как будто пытаются подсунуть гнилой помидор под видом золотого слитка. а потом, когда ты показываешь, что это всего лишь гнилой помидор, они так нравоучительно: ну вот у меня знакомый получил золотой слиток при таких же обстоятельствах, значит ты что-то не так сделал, поробуй нарыть еще один гнилой помидор.
#327 #614799
>>614764
чтобы работодатель потек оттого, какой продвинутый спец лепит ему круды, с которыми справится и пятиклассник.
#328 #614802
>>614798
бабах
#329 #614803
>>614794
Апач активно использует сеть зато, а сетевых библиотек вместе с С++ тоже не идет. GD2 входит в поставку PHP, как и AWT/Swing в Java.

>Ага, всего-то второй томик Хорстмана прочитать в 1850 страниц по JAVA в котором кратко описано как Java со Swing пытается в графику. Очень всё просто и есть из коробки.


Вполне достаточно Шилдта в полтора раза меньше, все подробно.
>>614802
Но он прав.
>>614799
НО ЗАЧЕМ? Это ж даже хуже энтерпрайзного проганья в джаве. В PHP скрипты на 200-300 строчек, какие там MVC, паттерны и фреймворки, зачем?
#330 #614805
>>614803

>он прав.


В чём? Он просто устроил истерику в треде и все его посты сводились к "Вы всё врёти, я так не смог поэтому никто так не может."

>GD2 входит в поставку PHP,


Напиши трёхмерную игру на GD2.

>Вполне достаточно Шилдта в полтора раза меньше, все подробно.


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

>Это ж даже хуже энтерпрайзного проганья в джаве.


Вот с этим согласен.
#331 #614807
>>614786
Для использования библиотек книги уже читать не обязательно, достаточно документации к библиотекам. Вообще использовать книги вместо документации - признак неудачника, который так и не понял, что к чему. Книги при этом нужны, но не как копипаста документации.
#332 #614808
>>614696

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


Так ведь это абсолютно не верно! Это стоимость открытия счёта, зачем от неё считать проценты?
Но разве вот эта часть у тебя не то же самое, что и у меня: $finalPayed=$dolg+$openDebtPay; то есть простое прибавление 7777 к получившейся сумме выплат?
Подождём ОПа, он всех уничтожит рассудит.
#333 #614809
>>614808
уничтожит
#334 #614810
>>614807

>C++


>документации к библиотекам.


Проиграл
#335 #614813
>>614810
Неудачник как есть.
#336 #614814
>>614813
Успокойся, мы уже поняли что ты дальше лабы ничего не писал.
#337 #614816
>>614807
Вот! Вы спрашивали откуда появляется столько говнокода? Вот откуда!

>книги уже читать не обязательно


Всё. Пиздец. Человек реально поехал на собственном ЧСВ.
77 Кб, 954x726
#338 #614818
#339 #614830
>>614816
наоборот, говнокод появляется от личностей, которые прочитали какого-нибудь k&r (про си еще до стандартизации) или страуструпа (привет, 90-е) или лутца про гвидон 2 а потом думают что их устаревшие "знания" (не знаю правда стоит ли называть тупую зубрежку книг знаниями) это пиздец как нужно и важно.
#340 #614904
>>614830
У тебя шаблон головного мозга. Кто вообще будет читать книги 90 годов?
#341 #614961
Кто пользуется phpmyadmin ?
Поясните, норм ли, для создания и взаимодействия с БД, привязки к сайтам и тд.
50 Кб, 510x842
#342 #614967
Не особо доволен решением задачи на замену +7 в номере на 8 и удалением скобок, но сделал всё с помощью регулярных выражений, а не массивов.
http://ideone.com/WK0zr7
Также регулярка сокращено по самое не балуйся, но это было и в предыдущем варианте, когда просто проверяли номер.
#343 #614968
*регулярка сокращена
54 Кб, 600x450
#344 #614973
Как в этой регулярке можно сократить \\s?
http://ideone.com/1FcqEH
Когда искали пробелы и разные символы в номере, то было понятно, но теперь у нас строгий порядок букв, не могу додуматься, как сократить.
Так-то работает, но ОП же уничтожит и испепелит...
45 Кб, 1140x468
38 Кб, 587x342
#345 #614991
Смотрите, посоны.
Поставил себе MySQL Server, открываю источник от ОП'а, самый первый, теорию(пикрелейтед) и вижу подключение к серверу. Но у меня пароль спрашивает автоматически, когда открываю консольное окно, это получается я конекчусь сразу же при старте? Скриншот консоли прилагается.

И еще вопрос, нашел команду CREATE DATABASE ну и ввёл в консоль create database abc, сказало мол ок, всё создано. Куда её сохранило, где это посмотреть, пощупать?
28 Кб, 561x444
#346 #614995
Еще вопрос вдогонку.
Открыл \h, посмотрел возможные команды. Решил потестить \r (reconnect) и увидел id 14, как я понял каждый раз как я заново подключаюсь к серверу, id=id+1, но зачем, что это вооще такое и как работает?
#347 #614996
>>614991
На первом скрине обычная консоль, там нужно конектится к sql, на втором терминал mysql, там нужно только ввести пароль.
#348 #614997
>>614996
А куда сохраняет созданную базу и таблицу, где можно вживую пощупать, в какой папке?
#349 #615076
>>614514
Halp me!
#350 #615083
>>615076
У тебя скобки не все закрыты. И я не понял, зачем там 2 return'а подряд стоит. Перечитай урок про функции, по моему ты не понимаешь, как они работают.
#351 #615169
>>615076
Анон, а что ты мутишь такое? Зачем ты задачу на калькулятор Айфона делаешь через функцию сразу, ты делал её просто через циклы?
У тебя там сумбур полнейший: $bonus откуда ты взял? Почему не назначено этой переменной значение? В функции не может быть два return'а, может быть только один!
Ты сделал перед этим этот калькулятор, показывал нам решение?
Вот советую сначала с циклами разобраться, а потом ещё и про функции перечитать.
#352 #615172
Два дня искал ошибку, почему аяксом данные не постятся, оказалось, что дело в дебильной кодировке. Просто чат переписываю из открытого доступа, так там ошибка на ошибке.
#353 #615206
Посмотрите, скрипт правильный? Это для чата.

https://ideone.com/IgwIkD
#354 #615210
>>614803
лел, не знаю, то, что вышло бы в 20 строк кода максимум на одной странице, вместе с добавлением всяких фреймворков, цмс, мвц, "орхитектуры", дата мапперов, юнит тестов, эксепшенов, классов и прочей хуеты растягивается на многолетний пиздец.
Предполагаю, что кодером просто скучно лепить простенькие круды, вот они и пытаются занять свое время раскапыванием и закапыванием ямок. Ну и плюс повод понтануться "знаниями". А еще говорят, что гуманитарии в логику не могу, гуманитариям хотя бы свойственно ставить базовый метафицический онтологический вопрос НАХУЯ.
#355 #615214
>>614805
Ну почему же никто. Кому-то везет, у кого-то другие входные данные, богатые морально уравновешенные родители, прописка в ДС. Я и не приравниваю себя к некоторым.
166 Кб, 1360x768
#356 #615263
V3N0m21, напиши, пожалуйста, сюда - fake.emaE#HilANUS9U5bigmirPUNCTUM)pnnet
#357 #615364
>>612122 (OP)
Че анон скажет за пхп7? Используете новые фичи? Как скорость?
#358 #615367
>>614803
200-300 строк это статические странички, очевидно же. Сложные порталы отражающие сложную предметную область сложны. В чем суть твоего негодования - ты не видел больших сложных проектов на пыхе или считаешь что это все нинужно и ты знаешь как сделать лучше?
#359 #615422
>>615367

>Сложные порталы отражающие сложную предметную область сложны.


Вся суть даже очень сложных порталов - сводится к обработке нескольких полей и получении данных. Делать ради этого монстра больше 300 строк, тоже сомнительное занятие и изобретание велосипеда.
#360 #615522
>>614514

>И, может, кто знает как задача на палиндром без функции решается?


Так она и в уроке без функций решается. Там всё написано.
Можно через mt_rand, а можно через array_rand.
150 Кб, 620x413
#361 #615532
Кто про что, а Жирная Жопа про задачки из учебника ОПа.
http://ideone.com/qmOJ3J - задача про поиск и выведение e-mail'ов.
Тараканы в голове не позволяют мне удовлетвориться сим результатом, поэтому ожидаю разгромного анализа ОПа или других анончиков.
#362 #615557
хелп плз.

почему этот код работает:

<?php
try
{
$pdo = new PDO('mysql:host=localhost;dbname=testing', 'root',
'' ) ;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$output = 'Невозможно подключиться к серверу баз данных.' . $e->getmessage();
include 'output.html.php';
exit();
}
$output = 'Соединение с базой данных установлено.';
include 'output.html.php';

а этот не работает: я слепой?
<?php

try
{
$pdo = new PDO(`mysql:host=localhost;dbname=testing`, `root`,
``) ;
\t$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
\t$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$output = 'Невозможно подключиться к серверу баз данных.' . $e->getmessage;
include 'output.html.php';
exit();
}
$output = 'Соединение с базой данных установлено.';
include 'output.html.php';
#362 #615557
хелп плз.

почему этот код работает:

<?php
try
{
$pdo = new PDO('mysql:host=localhost;dbname=testing', 'root',
'' ) ;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$output = 'Невозможно подключиться к серверу баз данных.' . $e->getmessage();
include 'output.html.php';
exit();
}
$output = 'Соединение с базой данных установлено.';
include 'output.html.php';

а этот не работает: я слепой?
<?php

try
{
$pdo = new PDO(`mysql:host=localhost;dbname=testing`, `root`,
``) ;
\t$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
\t$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
$output = 'Невозможно подключиться к серверу баз данных.' . $e->getmessage;
include 'output.html.php';
exit();
}
$output = 'Соединение с базой данных установлено.';
include 'output.html.php';
#363 #615565
>>615169

>не может быть 2 ретурна


Может, например в функции с конструкцией if else
#364 #615566
>>615557
У вызова метода нет круглых скобок.
Поставь ide, там подсвечиваются такие ошибки.

И getMessage пишется кемелкейсом. php не чувствителен к регистру, поэтому прощает в именах функций. Но с именем переменной это была бы ошибка.
#365 #615583
>>615566
Спасибо , выручил.

Я не знаю о каких именно круглых скобках ты говорил , но проблемка была с вот такими символами:

' '' ' ' ' ' , вместо них почему то всегда ставлю ```` либо """" ._.
#366 #615595
>>615565
Не знал о таком, спасибо.
96 Кб, 640x960
#367 #615605
Задача с проверкой текста и исправлением ошибок: http://ideone.com/kvliHu
Не получается исправление - не понимаю, как вернуть в текст именно тот символ, который ушёл в предыдущей регулярке.
Например, можно пойти окольным путём: после первой регулярки тупо поставить после каждого пунктуационного знака пробел, далее третьей регуляркой заменить два пробела подряд на один пробел.
Со словами то же самое сделать, но уже четвёртой регуляркой.
Только ведь ОП за такое испепеляет одним своим взглядом...
#368 #615678
>>615605
В preg_replace, кстати можно передать массив из регулярок и соответствующий массив для замены по каждой регулярке. Не знаю как правильно, но я делал эту задачку через массивы.
#369 #615730
Ананасы, я правильно понимаю, что когда мы что-то скачиваем через композер, то он просто экономит время находит за нас и создает папку в нужном проекте?
167 Кб, 1000x1494
#370 #615735
>>615678
Хм, даже не представляю, как бы это выглядело...
Как так - массив из регулярок? Как будут подбираться соответствующие ошибкам регулярки? Даже не могу сообразить, как бы это выглядело.
#371 #615737
>>615678
Зачем?
#372 #615767
>>615737
Что ты предлагаешь?
#373 #615801
>>612122 (OP) (OP)
Делаю задачу про кратчайший путь.
Допустим, я нашел минимальное расстояние до каждого узла. Как мне построить путь для необходимой точки?
#374 #615806
>>615801
Не расстояние, а время, конечно.
#375 #615831
#376 #616108
Короче, если кому интересно - чтобы посмотреть где находится ваша БД созданная в MySQL(выше спрашивал, так и не ответили), путь таков:
C:\ProgramData]MySQL\MySQL Server 5.7\Data\

Эта папка по умолчанию является скрытой.

Ну или можно посмотреть путь в консоли с помощью команды:
SELECT @@datadir; .
#377 #616121
>>616108

А зачем это может понадобиться? Посмотреть сколько места занимает?
#378 #616149
>>616108
Мы и так знали, спасибо.
#379 #616189
>>616121
Забыкапить жи
2659 Кб, 1000x1500
#380 #616192
Держите сокрушительный удар от гуманитарной Жирной Жопы по задаче с исправлением ошибок: http://ideone.com/Nu8pUX
Сможете ли вы совладать с нею?
#381 #616195
>>616192
Странно как-то сделал.
322 Кб, 332x500
#382 #616197
>>616195
Гуманитарий 31-го уровня потому что.
646 Кб, 500x713
#383 #616201
>>616195
У меня просто гуманитарный синдром: раскладываю на простые действия до максимального усложнения кода, потому что тупо не могу сообразить, как сделать то же самое с помощью более сложных для меня элементов, массивов, например, и циклов.
Не пойму вообще, как тут можно было бы поступить, не представляю из-за отсутствия опыта.
Завязываю с Сальмой, просто восхитился её грудями, когда искал картинку по запросу "сомнение".
#385 #616221
>>616205
Спасибо, буду разбираться.
Чому там в итоге сумбур какой-то: не все ошибки выводятся, всё перемешано?
Опять же нет исправления текста в итоге.

Однако на следующие задачи ОПа смотрю - ну я лучше ещё раз все задачи перед повторением пройду, а то вообще нет ни уверенности, ни понимания, как всё реализовать, как будто не ковырялся со всеми предыдущими задачами три недели.
1445 Кб, 3738x2641
#386 #616251
Может кто-нибудь пояснить за друпаловский модуль bootstrap֊а? Хочу хоть как нибудь сделать вложенное меню, правлю bootstrap_menu_link, но он вообще не принимает никаких вложенных children, хоть я создал их в админ-панеле.
#387 #616334
>>616192
Даже не разбирая могу сказать, что это лютый говнокод, попробуй заняться чем-нибудь другим.
#388 #616336
>>616334
А может, приведешь пример своего неговнокода, который ещё и работал бы?
Да, я постоянно мониторю тренд, заняться больше нечем
#389 #616337
Поверить не могу, что школьники все еще решают тупые задачки на регулярки, а я, знающий тучу фреймворков и технологий, уже 3й год не могу найти работу.
#390 #616340
>>616337
Мне бы твои проблемы. Я давно был бы уже долларовым миллионером.
#391 #616380
Ой, чот НГ, все бухают наверное, а я решил доделать чат. Как скрыть дебагер в yii2 внизу, а то вдруг залью на хостинг, а там дебагер открытый?
#392 #616388
>>616205
Анончик, блиять, ничего не работает, всё пропало....
Сейчас занимаюсь сексом с твоим кодом - не выходит ничего, понимания нет.
С Наступающим!
#393 #616420
>>615801
>>612122 (OP)
ОП, я решил. http://ideone.com/KppkNl
Что дальше?
#394 #616427
Почему php не допускает классовые константы, совпадающих с именами встроенных функций?
http://ideone.com/fKxy2O
#395 #616442
>>616420
дальше засунь дилдо в жопу.
#396 #616443
Насколько перспективно в 2016 вкатываться в php? Есть маленький опыт Си и ООП в теории. Есть время на изучение и пердолинг/дрочинг веба в общем (даже на фронтенд).
#397 #616469
>>616443
Что ты понимаешь под "вкатываться"? Для того, чтобы достичь каких-то высот и зарабатывать этим? Это в любое время будет перспективно для того, кто понимает, для чего это ему нужно.
А если нет, то будешь три года искать работу, как анон выше.
#398 #616558
>>616469
Это такой намек, что я "не понимаю, для чего мне это нужно"? Ну так объясни "ДЛЯ ЧЕГО ЖЕ" мне это нужно, помимо заколачивания бабла? Вы тут каких-то сектантов напоминаете.
#399 #616561
>>616443
Конечно вкатывайся, если ты молодой-горячий школьник со стоящим хуем, тебя сразу возьмут, чтобы разминать мягкое очко в перерывах.
#400 #616577
>>616558
Собственные проекты надо делать, полно тем, которые приносят много денег, а конкуренции большой нет. Ты видел codeacademy, есть ли у неё достойные конкуренты в России? Скажешь, если бы был достойный конкурент, то его не разнесло бы сарафанное радио и школьники и слоупоки вроде меня не платили бы какие-то деньги за продвинутые курсы?
Это как пример, такого много в плане разных сервисов.
Учить программирование просто ради работы на дядю - как минимум, неумно.
#401 #616578
>>616577

>которые приносят много денег


>конкуренции большой нет


>codeacademy


Ониж бесплатные.
#402 #616580
>>616578
Лол.
Там продвинутые курсы платные, бесплатная только общая вводная часть.
#403 #616581
>>616580

>продвинутые курсы платные


Там продвинутые курсы уровня /b
Я хз чему там вообще научиться можно.
#404 #616596
Родина вам дала W3Schools, а вы всё говно жрете.
#405 #616599
>>616580
Пруфы, у них на сайте написано что они вообще только за Хелпдеск плату принимают. Ничего про продвинутые курсы не нашол.
#406 #616613
>>616599
Там влошений куча, там доля принадлежит Юрию Мильнеру (несколько миллионов долларов за 5 лет существования) и платыне курсы вроде становятся доступны только после прохождения основ.
И вообще я попутал с codeschool.com, сасайте, это там курсы по 20-30$ в месяц.
Codeacademy же не высокого уровня, >>616581 прав.
НЕ ИЩИТЕ ОТМАЗКИ, КАРОЧИ, ЧТОБЫ НИЧЕГО НЕ ДЕЛАТЬ И ЖДАТЬ СВОЕГО ДЯДЮ
Три питерских пограмиста в начале 2000-ых забацали свой IDE для Java, какую-то еще ебалу для этого всего, а сейчас десятки миллионов долляров зарабатывают в год, имеют штат из 400 сотрундиков. Google у них сасает со своим Android Studio.
Так что искренне сожалею, что у вас нет идей.
У меня вот идей ДО ХУИЩА, а знаний практически нет пока, не достаточно для реализации.
#407 #616615
>>616613

> Три питерских пограмиста в начале 2000-ых забацали свой IDE для Java


шта?
#408 #616616
>>616615
JetBrains и их редактор IDEA.
Android Studio от Google происходит от IDEA.
https://ru.wikipedia.org/wiki/JetBrains
#409 #616617
>>616615
Phphstorm и прочая ебала для языков - тоже их потных ручонок дело.
#410 #616644
>>616577
У меня нет никаких идей или стремлений. Я и код пишу уже на автомате, чтобы хоть что-то делать. Никакой фантазии не осталось, все, полный нигилизм.
Да и за выкладывание любого объемного проекта на цмсках или фреймворках больше слима придется покупать хостинг. А нахуй тратить в кризис на хостинг, если это говно не будет ничего приносить с 99.999999999% вероятностью.
#411 #616648
>>616613
В дешевенькие продвинутые курсики на кодеакадемии вложили несколько лямов долларов??? Застрелите меня, мне точно в айти делать нечего.
8 Кб, 199x329
#412 #616654
Оп, смотри пикрилейтид. Правильно я организовал структуру папок для задачи по студентам? Я хочу изначально все правильно начать делать.
#413 #616680
Помните тот заказ за 10 долларов на экспорт даных в эксель с сохранением иерархи? Оказывается при yii2 есть такой виджет.
http://www.yiiframework.com/wiki/763/step-by-step-for-how-to-full-export-yii2-grid-to-excel/
#414 #616705
Создаю в акшне объект модели, у нее другой неймспейс в отличие от акшна, класс ищется по неймспейсу акшна, как внутри класса акшн создать объект класса из другого неймспейса?

namespace app\controllers;

public function actionEntry()
{

$model = new EntryForm();
}

Class 'app\controllers\EntryForm' not found

namespace app\models;

use Yii;
use yii\base\Model;

class EntryForm extends Model
{
}
#415 #616707
>>616705
Либо импортировать класс через use, либо при создании экземпляра писать полный неймспейс.
#416 #616711
>>616705
А все, я просто изменил неймспейс в модели. Хотя это не очень логично.
#417 #616715
>>616707
Впрочем use тоже работает. В C# неймспейсы понятнее.
#418 #616725
Пусть когда оп отойдет от празднования, поможет мне разобраться в алгоритмах библиотеки getid3. Я не понимаю, что она творит с оперативной памятью.

У меня в файлообменнике эта библиотека занимается составлением отчета о медиаданных файла. Мелкие файлы грузятся без проблем, но при загрузке файла размером в 50 мб получил сюрприз вида:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 17759557 bytes) in /vendor/james-heinrich/getid3/getid3/module.archive.gzip.php on line 54

Под php выделено 128 мб памяти, upload_max_size и post_max_size по 500.
Хотя нет, эта либа судя по логу хочет только 17 мб (тоже немало), нужно понять кто съел остальные 110.
Ну ладно, сейчас я приведу код в рабочий вид и скину гитхаб.
#419 #616748
http://ideone.com/mXyAKw
Калькулятор.
Что не так? Или может нужно как-то без этих ififif делать, но как?
#420 #616755
>>616644
Ну хз, не понимаю я такого.
Несколько проектов уровня "проверить битые ссылки на сайте", "перемешать строки", "проверить текст на количество ключевых слов". Несколько проектов для портфолио - я тебе как заказчик на фрилансах скажу: это вкупе с нормальной ценой на услуги и нормальным количеством отзывов привлекает заказчика.
>>616648
Так там одной посещалки в сутки пара сотен тысяч человек, несколько тысяч человек оплатят курс на месяц - миллионная прибыль.
#421 #616778
>>609391
>>609392
Постарался исправить все, надеюсь нигде опять не накосячил с ООП. Посмотри, пожалуйста.
http://ideone.com/sepIh4
По ходу кодинга появились вопросы.
1)Сложный цикл for для мышей где 4 направления-копипаста делать(он там закомментирован)? Или достаточно его в котах и собаках где 8 направлений-копипастов.
2)> foreach ($foundAnimals["mice"] as $mouse) {

> if ($this->field->areChosenAnimalsNearTheCage($mouse->x, $mouse->y, $foundAnimals["mice"])) {


Тут явно ошибка - ты не используешь переменные $x, $y хранящие координаты хода.
Ошибки нету. Метод класса Field areChoosenAnimalsNearTheCage использован в foreach не с координатами хода, а с координатами каждой мыши чтобы перебрать все варианты. Допустим у нас две мыши. Одна мышь найдет рядом другую, аналогично со второй.
OneLine будет равно двум. А если их три, то результат будет равен трем (каждая мышь подтвердит факт наличия рядом с собой представителя своей породы).
3)>Попробуй использовать тут array_filter с анонимной функцией, мне кажется будет чуть проще.
Я сделал это для мышей и собак, но в кошках у меня три условия для массива(рядом ли мышка? можно ли походить? можно ли съесть?). Делать ли отдельный метод который совместит ли эти три условия?
4)Вопрос по тому же array_filtr
canIMoveTo у меня теперь с одним параметром содержащем две координаты, вместо двух наглядных параметров x и y, потому что не знаю как передать два параметра
в array_filtr вторым аргументом, который представляет собою анонимную функцию(метод из другого класса). Как передать эти два параметра?
5)Правильно ли я передаю анонимные функции? array($this, "функций").
6)Как быть со свойствам символов и дальности обзора? Делать ли их через _construct или указывать в свойствах?

Если что вспомню из вопросов, напишу. Что я изменил без твоего совета:
1)В методе startGame во внутреннем цикле foreach у меня был баг. Если следующий элемент в цикле был съеден, он не ходит, однако не ходят и все следующие элементы за ним. Они будут ходить только в следующем ходу. Поэтому foreach я поменял на for с новым последовательным порядком индексов через функцию array_values.
2)Переделал функцию searchNearbyCorner. Теперь она называется countStepsToCorners и считает сумму свободного пространства.
http://pastebin.com/xbTyqfUw твой ответ, на случай, если старый тред утонет.
http://ideone.com/oQtKhu код который ты проверял.
#421 #616778
>>609391
>>609392
Постарался исправить все, надеюсь нигде опять не накосячил с ООП. Посмотри, пожалуйста.
http://ideone.com/sepIh4
По ходу кодинга появились вопросы.
1)Сложный цикл for для мышей где 4 направления-копипаста делать(он там закомментирован)? Или достаточно его в котах и собаках где 8 направлений-копипастов.
2)> foreach ($foundAnimals["mice"] as $mouse) {

> if ($this->field->areChosenAnimalsNearTheCage($mouse->x, $mouse->y, $foundAnimals["mice"])) {


Тут явно ошибка - ты не используешь переменные $x, $y хранящие координаты хода.
Ошибки нету. Метод класса Field areChoosenAnimalsNearTheCage использован в foreach не с координатами хода, а с координатами каждой мыши чтобы перебрать все варианты. Допустим у нас две мыши. Одна мышь найдет рядом другую, аналогично со второй.
OneLine будет равно двум. А если их три, то результат будет равен трем (каждая мышь подтвердит факт наличия рядом с собой представителя своей породы).
3)>Попробуй использовать тут array_filter с анонимной функцией, мне кажется будет чуть проще.
Я сделал это для мышей и собак, но в кошках у меня три условия для массива(рядом ли мышка? можно ли походить? можно ли съесть?). Делать ли отдельный метод который совместит ли эти три условия?
4)Вопрос по тому же array_filtr
canIMoveTo у меня теперь с одним параметром содержащем две координаты, вместо двух наглядных параметров x и y, потому что не знаю как передать два параметра
в array_filtr вторым аргументом, который представляет собою анонимную функцию(метод из другого класса). Как передать эти два параметра?
5)Правильно ли я передаю анонимные функции? array($this, "функций").
6)Как быть со свойствам символов и дальности обзора? Делать ли их через _construct или указывать в свойствах?

Если что вспомню из вопросов, напишу. Что я изменил без твоего совета:
1)В методе startGame во внутреннем цикле foreach у меня был баг. Если следующий элемент в цикле был съеден, он не ходит, однако не ходят и все следующие элементы за ним. Они будут ходить только в следующем ходу. Поэтому foreach я поменял на for с новым последовательным порядком индексов через функцию array_values.
2)Переделал функцию searchNearbyCorner. Теперь она называется countStepsToCorners и считает сумму свободного пространства.
http://pastebin.com/xbTyqfUw твой ответ, на случай, если старый тред утонет.
http://ideone.com/oQtKhu код который ты проверял.
#422 #616781
Завтра вкатываюсь в пых. Есть опыт Си и Обжа. Щенто курить из книг (нихуя в вебе кроме слова php и http не знаю). За фронтенд тоже спрошу.
109 Кб, 910x512
Создание скрипта для поиска и замены ошибок в тексте #423 #616782
Ребята или ОП, подскажите, пожалуйста, верный ли алгоритм действий?

Создание скрипта для поиска и замены ошибок в тексте
- переменная для вывода текста ($text);
- массив с регулярками в ключах и описаниями ошибок в значениях ($regexp);
- пустой массив, в который будем собирать ошибки ($errors);
- С помощью функции вытаскиваем регуляркой из текста все ошибки и заполняем ими массив $errors (preg_match_all($regexp, $text, $errors);)
- Определяем переменную для всех ошибок, вытащенных предыдущей функцией ($matches = $errs[0];)
- Считаем количество ошибок в тексте (($number = count($matches);) ;
- Далее надо текст разбить на ошибки и вставить кусок из них с ошибкой: preg_split на три элемента – с ошибкой, предыдущий и последующий ($partOfText), далее циклом вытащить соответствующие части и собрать в строки.
- Далее находим соответствие между ошибками в массиве $matches и описанием ошибок в массиве ($regexp);
- Далее выводим результат с помощью echo: индекс с объяснением ошибки из массива $regexp и соответствующую ошибку из $errors.
На этом проверка и вывод ошибок оканчивается.
Для исправления ошибок нам надо массив из регулярок ($regexp) разбивать на ключи, содержащие регулярки, и с помощью цикла подставлять в функцию с заменой куска текста через регулярку (preg_replace($regexp[$i], $text, $cleanText[$i]);). Так же пополнять массив $cleanText[$i] с постепенно очищающимся текстом.
В самом конце выводим $cleanText[$i] – исправленный полностью текст.

Имеет ли право на жизнь?
Как же мне не хватает соображения во всём этом и какого-нибудь хорошего наставника уровня многих анончиков в этом треде, который бы давал советы и т.п.
#424 #616783
>>616781
ОП-пост - обязательно.
#425 #616797
>>616778
Это пиздеец....
На каком уроке это начинается?
Я до такого в жизни не дойду, вообще даже не врубаюсь, что там есть....
#426 #616809
>>616797
Не пугайся, я так тоже думал про многое, регулярки в оп учебнике, например, но постепенно дошел до этой задачи. Это раздел "Пасты и ООП".
#427 #616815
>>616783
А что там в той книге для нубов (которая на народе) полезного мне будет?
#428 #616820
>>616755

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


Это прикол такой?
#429 #616821
>>616778

> в array_filtr вторым аргументом, который представляет собою анонимную функцию


Не анонимная, а callback функция. Путаюсь в терминах.
#430 #616847
>>616820
Нет.
#431 #616853
#432 #616856
>>616809
Бро, есть ли у тебя желание помогать стремящемуся в РНР нубу? Оставь контактик, молю! Помогая другому - сам лучше понимаешь всё...
Ну и так далее моя пьяный бред.
#433 #616864
Есть что-то уютнее сублима? Пишу в нём и сразу будто в душу насрали.
#434 #616865
>>616864
Atom, PhpStorm.
56 Кб, 584x419
#435 #616870
Я развиваюсь. Какие ещё книжки посоветуете только что устроившемуся на работу человеку?
#436 #616878
Аноны, я нуждаюсь в помощи, есть ссылка - http://www.jomashop.com/bulova-accutron-watches.html и на ней есть список часов, каким образом можно достать ссылки на все часы? То есть циклом получить все ссылки, например:
http://www.jomashop.com/accutron-watch-64c104.html
http://www.jomashop.com/bulova-ladies-watch-63r33.html
http://www.jomashop.com/accutron-innsbruck-26e09.html

Я уже не знаю, что делать.
#437 #616880
>>616870
Пили стсори как устроился, что же ты.
#438 #616900
>>616870

>2016


>читать бумажные книги



Спасибо, сохранил картинку, почитаю тоже что-нибудь.
#439 #616902
>>616878
Урок ОПа на регулярные выражения может помочь.
Там есть регулярка для поиска всех ссылок на странице (или в тексте). Можно поставить в регулярке обязательное "watch", чтобы собирать ссылки только на часы.
#440 #616906
https://telegram.me/joinchat/BxAn5ASN8mv5h_KmZ-Y9rA - кто не залетел, тот пидорас.
6 Кб, 650x300
#441 #616950
>>612122 (OP)
привет, программач!

Подскажи, сведущий анон, с кем бы поговорить тут о плагинах WP? Я начинаю изучать движок и придумал себе задачу, с которой сам пока не в силах справиться.
#442 #616964
https://github.com/fxsloker/Student

Оп, помогай. Я не знаю, что дальше делать. Вернее я хочу правильно автозагрузку реализовать, но не понимаю как. Смотри она в bootstrap.php. Я подключаю ядро (core). А пространства имен как тут реализовать? Я читаю разные доки, в том числе и твои, и ничего не могу понять.

Я уже начал изучать, как реализовывается автозагрузка в composer. Но опять мне многое не понятно.
#443 #616970
>>616880

Да что там пилить.

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

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

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

На работе используют Symfony и Doctrine. Код пишу в PhpStorm`е, на компе с виндой. Запускаю на удаленном сервере в личной виртуалке (там debian).

Если что-то ещё интересно - спрашивай.

ДС, вышки нет.
#444 #616971
>>616970
Что за задание то было? Так в общих чертах. И сколько делал его?
#445 #616972
>>616970
Вкинь линк на гитхаб. Я студентов посмотрю.
#446 #616973
>>616971
1. Накидать архитектуру мини-приложения, не вдаваясь в детали.
2. Написать скрипт вытаскивающий из таблицы с ссылками (внешним ключами) на саму себя данные и строящий из них древовидную иерархию.
3. Написать SQL-запрос.
#447 #616974
>>616972
Или посмотри мой >>616964
#449 #616976
>>616973
На задание дали один день.
#450 #616977
>>616970
Сколько времени ушло на обучение?
#451 #616978
>>616977
5.5 месяцев где-то. Но я много времени уделял, особенно на первых порах.
#452 #616982
Вкатываюсь в пхп кодинг сегодня.
Поясните за лучшие по вашему мнению IDE/текстовые редакторы бесплатные для разработки.
#454 #616984
>>616983

> бесплатные


> phpStorm

#455 #616987
>>616984
Я ни копейки не заплатил. он совершенно безболезненно активируется. Ещё есть Atom.
#456 #616989
>>616950
бамп
#457 #616992
>>616978
Посоветуй как безболезненнее перейти от учебника опа к студентам?
#458 #616994
>>616987

>безболезнено


Как?
#459 #616995
>>616992
Сделай вектор и сразу переходи. По студентам хорошие советы у опа есть, должно легко идти. Возможно, урок по работе с формами тебя натолкнет на некоторые мысли.
#460 #616996
>>616994
Google: phpstorm 10 activation.
#461 #616998
>>616995
Спасибо.
#462 #617021
>>616978
Респектую успешно-куну!
Получается, программирование для толковых потсанов - шанс довольно быстро выбиться в люди и устроиться на нормально оплачиваемую работу с перспективами. И всё это без высшего образования.
Хотя тут пробегает иногда анон, который три года не может найти работу. Значит, имеет значение и дислокация.
В ДС ведь работу и так несложно найти, как правило, не обязательно пограмистом.
#463 #617022

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


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


>Это прикол такой?


Нет.
#464 #617025
>>616970

>На работе используют Symfony


Ты знаешь симфони? Если нет, то что ты там делаешь?
#465 #617028
>>617025

>что ты там делаешь?


Обучаюсь. Йобу с симфони выкачали мне на виртуалку, после праздников будут показывать, что там да как. Ну и документацию я сам в свободное время читаю, что-то пишу, пробую запускать.
#466 #617032
>>617028

>Обучаюсь


И за это платят деньги? Вообще охуеть. Может там еще бесплатные обеды и шлюхи?
#467 #617034
>>617028
А вообще фреймворки пробовал разбирать из ОП-поста?
#468 #617035
>>617032

>И за это платят деньги?


А почему не должны?

>Может там еще бесплатные обеды и шлюхи?


Нит. Но потом, может, будет дотация на питание.
#469 #617036
>>617034
Silex, Doctrine.
#470 #617040
>>617021
Я в мухосрани тоже устроился на работу. Правда сижу обновляю джумлы и делаю сайтики. За 25к.
#471 #617041
>>616970
Какой лвл? Я вот на 24-ом врываюсь в ИТ сферу, вышки нет, только желание добиться чего-нибудь.
#473 #617046
>>617043
Учил по тем материалам, что в шапке треда?
#474 #617047
>>617046
Конечно.
#475 #617051
>>617047
Ну, добра, ты молодец. Надеюсь, так же преуспеть
#476 #617063
>>617043
А что ты говорил про образование? И почему решил вкатиться?
#477 #617077
>>617063

>А что ты говорил про образование?


Сказал, что меня выгнали из гуманитарного вуза.

>И почему решил вкатиться?


Ойти всегда было в моем сердце мне интересно. В школе сдавал информатику в том числе. Правда, ничего не программировал.
#478 #617081
>>617077
А на кого учился?
#479 #617092
>>617081
Немного экзотическая гум. специальность.
#480 #617181
Анончики, есть ли возможность достать из массива ключ, когда ключи не по порядку идут, а с названиями? Но не с помощью конструкции $array['name'], а как-то иначе?
Можно ли как-то присвоить ключам порядковый номер и так достать?
#481 #617206
>>616870
На всякий случай бамп реквесту правильных книжек.
#482 #617212
>>617181
Каждый элемент ассоциативного массива в PHP по дефолту можно достать и числовым ключом. $a = ["kek" => "cat", "lol" => "dog"]; $a[1] === "dog", $a[0] === "cat".
#483 #617237
>>617212
Что ты несешь? inb4: яйца
http://ideone.com/Zqnj09
#484 #617246
>>617237
Хуй знает, с чего я это взял.
#485 #617251
>>616970
Сколько бабла запросил?
#486 #617252
>>617181
Есть функции для движения указателя по массиву. можно циклом отсчитать нужное количество вызовов next(), но как по мне, это ебать костыль.
http://php.net/manual/en/function.next.php
Здесь как достать именно КЛЮЧ, а не значение
http://php.net/manual/en/function.key.php
#487 #617255
>>617251
120 тысяч
#488 #617257
>>617255
Бакинских хотя бы?
#489 #617258
>>616870
Поясните за четвёртую плз. Уже не первый раз натыкаюсь на её упоминание.
#490 #617269
>>617212
Вот именно, что нет.
Что очень неудобно в решении задачи про поиск ошибки в тексте. Я думал в массив забить регулярки => объяснения правил. Потом тупо подставлять регулярки в цикл, чтобы искались разные ошибки в тексте.
Но не получается у меня, не получается.
Не даёт мне покоя моё кривое решение этой задачи, хочется правильного решения.
>>617252
Спасибо, вроде бы это должно помочь.
#491 #617315
Так, ну что. Как вкатиться в пхп? За плечами месяц Си. Читать уроки для нубов? Есть там что-то полезное? За фронтенд поясните, где учить и т.п. Что учить из фронта и т.д.
#492 #617317
>>617315
читай шапку, ленивый хуй
#493 #617405
>>616613
вообще то там хардкор полный и фундаменталки дохуя, а не просто идея, компьюктер саенс во все поля.
26 Кб, 458x280
#494 #617463
Ребята, простите, но я сейчас уже ёбнусь: https://ideone.com/7wA7Cj
Если поставить var_dump($matches), то покажет массив со всеми допущенными ошибками, в echo выведет в $values все соответствующие ошибкам значения.
Но как, как, блять, мне вытащить в эхо и соответствующие куски текста с теми ошибками? Я уже третий день трахаю эту задачу в хвост и в гриву.
#495 #617475
>>617463
Можно например вместо одной большой регулярки сделать несколько, одно регулярное выражение для каждого типа ошибки.
Тогда ошибки одного типа будут сгруппированы в отдельные массивы, и ты сможешь вывести это в формате
"Описание ошибки 1": [перечень фрагментов текста с этой ошибкой], ...
#496 #617479
>>617475

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


Так ведь у меня так и есть в $possibleErrors, разве нет? Почти так ведь.

>Тогда ошибки одного типа будут сгруппированы в отдельные массивы, и ты сможешь вывести это в формате


"Описание ошибки 1": [перечень фрагментов текста с этой ошибкой]
То есть одна регулярка будет проходить текст и собирать свои ошибки? Но не пойму всё равно, как бы это выглядело.
#497 #617501
На какие курсы на coursera можно записаться изучающим php?
98 Кб, 600x600
& !DTFMQfu90U #499 #617528
А если регулярку положить в портфолио на гитхаб меня возьмут на работу?
& !DTFMQfu90U #500 #617529
>>616970
Дс? Да не верю я в эти влажные истории, у меня уже давно гораздо больше проектов, чем файлообменник и что ты там за говно написал, висит - никаких откликов вообще. Забил уже, сижу в игры играю третий год.
& !DTFMQfu90U #501 #617531
>>617021
Может дело не только в дислокации, но и в том, что я 30летняя женщина, хз.
#502 #617586
>>617529
Везение, тупо не видно твою анкету из-за наплыва новых. Руки-то не надо опускать.
Опять же если бы не опускал руки, то на фрилансе работал бы давно.
#503 #617587
>>617475

>Тогда ошибки одного типа будут сгруппированы в отдельные массивы, и ты сможешь вывести это в формате


>"Описание ошибки 1": [перечень фрагментов текста с этой ошибкой], ...


Да блиять, как это сделать?
#504 #617598
>>617527
Там только бла-бла-бла от препода можно слушать, есть ли какие-нибудь тесты, возможность писать код и просто выполнять задания?
Говно какое-то, честно говоря.
#505 #617599
>>616906

>кто не залетел, тот пидорас.


Ты так говоришь, как будто это что-то плохое.
#506 #617600
#507 #617601
Да какое нахуй везение, не найти работу в мск - быть дауном. Вы там в своей Москве совсем уже отупели.
#508 #617604
>>617601
Анон - 30-летняя тётя, вполне возможно, хочет многого и сразу, по всей видимости.
Его только возьмут на работу, как он сразу залетит, потому как пора бы уже, блеять, а работодателю выплачивать декретные и прочая ебала, которая никому не нужна.
#509 #617622
Когда ОП проснется? Даже на почту не отвечает.
#510 #617650
>>617601
Ты вакансии-то сначала посмотри. Там одни битриксы.
#511 #617665
Заебался с установкой модуля XSendFile. Оказывается нужно прописывать XSendFilePath с директорией, откуда можно скачивать файлы. Почему на хабре про это не пишут, да и вообще ни в одном гайде по установке модуля про это ничего нет.
#512 #617667
>>617665
Напиши ты, чтобы все знали.
#513 #617669
>>617667
Написал. Теперь вы знаете.
#514 #617672
>>617669
Спасибо.
#515 #617673
>>617672
Рад был помочь.
#516 #617679
Скучаю без ОПа, никто не помогает нубикам, нубяшкам, нубью...
#517 #617680
>>617679
Без ОПа каждый день нас отдаляет от заветной работы с хорошей зарплатой.
#518 #617683
>>617680
а куда делся оп?
#519 #617685
>>617683
А черт его знает.
#520 #617687
>>617685
Сомневаюсь, что чёрт знает.
Ведь ОП выступает на Белой стороне, а не на Тёмной.
#521 #617688
>>617683
Он обиделся на флуд в его треде. И ушёл.
#522 #617690
https://github.com/MindiMakridi/filehosting очередная порция исправлений.
249 Кб, 900x675
#523 #617715
https://ideone.com/EOrbfY - ну едрит вашу через коромысло, в чём теперь-то там проблема?
Всё вроде бы должно как минимум выводить ошибки и правила, какого же, спрашивается, дьявола сие не работает?
#524 #617732
>>617715
ну едрит твою через коромысло, ошибки внизу для кого написаны? Во первых зачем ты вручную прописываешь числовые индексы массиву? Из-за этого у тебя массив начинается с 1, а не 0, а в цикле сначала обращение идет к несуществующему элементу с индексом 0.
#525 #617740
>>617715
Далее, еще одна тупейшая ошибка:

>preg_match($possibleErrors[$i]['pattern'], $matches[$i])


Смотрим документацию по preg_match:

>Ищет в заданном тексте subject совпадения с шаблоном pattern


>Список параметров



>pattern


>Искомый шаблон, строка.



>subject


>Входная строка.



>matches



Смотрим что у тебя: паттерн есть, необязательный аргумент matches есть, а Subject где? К чему применять регулярку?
97 Кб, 650x382
#526 #617742
>>617732
Ideone не показывает ошибки, когда несколько раз редактируешь код, сам сейчас увидел...

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


Почему же так?.. Ведь там стоит for ($i=0; $i < $number; $i++) и сначала в $i везде должен ноль подставиться?
Вот тут:
if (preg_match($possibleErrors[$i]['pattern'], $matches[$i])) { /Достаём из массива регулярку, подставляем её в функцию, проверяем найденные ошибки в массиве $matches на соответствие/
\t\t$message = $possibleErrors[$i]['message'];

А как их ещё прописать можно? Как по-другому вообще можно?
#527 #617743
>>617740
Но ведь у меня там $matches и есть subject?
Я этот получившийся массив проверяю регулярками из массива $possibleErrors...
#528 #617748
>>617742
Ты массивы проходил? Если создать массив вот так
$example = array("Яблоко", "апельсин", "банан")
То у яблока будет индекс 0, у апельсина 1, у банана 2 и т.д. Ты же пишешь вот так
$example = array(1 => "Яблоко", 2=>"Апельсин") Зачем? Мало того, что это делается автоматически, так ты еще и начал не с нуля, что потом вылезло в цикле, в котором ты уже начинаешь с нуля.
#529 #617749
>>617743
Ответь мне, что такое subject в твоем понимании?
#530 #617752
>>617740
Ну дак у него как бы все верно, необязательный аргумент последний же должен быть. Он тут просто проверяет есть совпадения или нет.
90 Кб, 853x1001
#531 #617755
>>617748
Я массивы уже вдоль и поперек прочитал у ОПа и в мануале...
Но эту ошибку не заметил, блин, спасибо...
Хотя всё равно у меня не работает, и я не понимаю, почему же так.
Разве там не подставляется соответствующая регулярка в preg_match? Почему же цикл не работает и не проходится до того, пока $i < $number (количества ошибок)?
#532 #617756
>>617743
>>617749
Окей, тут я сглупил, я думал у тебя matches пустой массив для ошибок.
#533 #617757
>>617749
Субъект :)

preg_match([регулярка], [где проверяем], [куда выводим результат(необязательно)]);
43 Кб, 520x331
#534 #617760
>>617749
Это то, что мы регуляркой и проверяем, разве нет?
>>617752
Я когда пробую просто весь массив $matches пройти регуляркой - вообще не воспринимает эту переменную почему-то.
#535 #617764
>>617756
Да, название просто не подходящее для второго прохода по всяким циклам.
>>617757
Да, всё так и делается у меня там.

*вообще не воспринимает эту переменную почему-то.
Вообще не воспринимает этот массив как текст для проверки. Сразу ошибка: PHP Warning: preg_match() expects parameter 2 to be string, array given in /home/4JI2nI/prog.php on line 46
Может, как-то надо разбить этот массив на строки?
#536 #617765
>>617755
Сделай var_dump своего массива matches и увидишь там 22 элемента. Регулярок у тебя всего 7. То есть на 7ом шаге цикла мы обращаемся к элементу $possibleErrors[7]['pattern'] которого нет, на 8ом к 8ому и т.д до 21.
#537 #617766
>>617764
Вложенный цикл еще нужен тебе. В каждом нахождении сверять с 7-ю возможными ошибками.
34 Кб, 250x250
#538 #617772
>>617765
Ох щиии...
Спасибо, вот ещё где засада....

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

>>617766
Как так, для чего? Почему нельзя будет просто выводить сработавшую регулярку в ключе массива и соответствующее правило (значение в этом массиве)?
#539 #617774
>>617772
Проверяй на тексте попроще постепенно.
Вот смотри
https://ideone.com/EskNkX
Здесь все нормально.
Поменяем местами ошибки и уже ничего не находит.
https://ideone.com/Uq2Gcw

У тебя скрипт ожидает что ошибки в тексте будут идти ровно в том порядке, в котором они указаны в регулярках. Нужно для каждой ошибки проходиться по всему массиву регулярок, а не надеяться, что индекс у ошибки и у паттерна совпадет.
23 Кб, 637x528
#540 #617779
>>617774

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


Блииин, действительно...
Тогда там надо использовать ещё и preg_match_all, наверное? Не цикл ещё один пустить, а каждую регулярку пустить по всему тексту?
А весь общий цикл можно ограничить количеством ключей-регулярок в массиве $possibleErrors - просто сделать count($possibleErrors).
Попробую так, ты вселил в меня надежду, спасибо!
#541 #617780
>>617779

>Не цикл ещё один пустить, а каждую регулярку пустить по всему тексту?


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

>А весь общий цикл можно ограничить количеством ключей-регулярок в массиве $possibleErrors - просто сделать count($possibleErrors).


А это зачем? То есть если у тебя будет 20 ошибок, ты собираешься проверять только первые 7?
87 Кб, 800x535
#542 #617782
>>617780

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


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

>А это зачем? То есть если у тебя будет 20 ошибок, ты собираешься проверять только первые 7?


Нет, я хотел именно регулярки посчитать, не ошибки. Чтобы цикл продолжался, пока не пройдены все регулярки в массиве, а каждая регулярка проверяет весь текст. Вот так думал.
Теперь вот разбираюсь, как посчитать отдельные элементы в массиве из массивов, что за напасть...
#543 #617786
>>617782
Я не понимаю к чему ты собрался применять Preg_match_all. Я написал очевидное решение, которое требует от тебя всего-лишь добавить и переписать пару строк. Внутри цикла for мы делаем цикл, который проходится по массиву регулярок и проверяет на каждом шаге через preg_match соответствует ли текущая регулярка с matches[$i], c $i из внешнего цикла. Делай как считаешь нужным, но я предупредил.
#544 #617791
>>617786
Preg_match_all - чтобы пройтись регуляркой по всей получившейся строке из ошибок.
Сейчас соберусь с мыслями, что-то сложно.
Нам ведь нужно использовать каждую регулярку в ключах массива для поиска ошибки во всём тексте, а когда соответствие находится - получать и это же значение из этого же массива......
Блин, я опять куда-то не туда упёр....
Какая строка из ошибок, а как я буду получать соответствующие куски из текста...
Ой, всё. Я уже поехал.
#545 #617796
А я ничего не понимаю в пространстве имен и в автозагрузчике? Я нормальный? Где можно почитать с хорошими примерами?
#546 #617821

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


>Внутри цикла for мы делаем цикл, который проходится по массиву регулярок и проверяет на каждом шаге через preg_match соответствует ли текущая регулярка с matches[$i], c $i из внешнего цикла.


Я теперь туплю и не представляю, как проверить это соответствие.
Внутри for сделать ещё один цикл с for?
Что с чем сравнивать и как? В массиве как я сравню регулярки и с чем? Ещё раз дублировать цикл? Каша в голове полнейшая уже.
Как сравнить matches[$i] с $i из внешнего цикла, там же у нас регулярка и просто числовое значение?...
#547 #617824
>>617821

>Внутри for сделать ещё один цикл с for?


О чем я и говорю.

>Что с чем сравнивать и как? В массиве как я сравню регулярки и с чем?


Значит у нас есть первый цикл, который берет некое $i, которое нам нужно для массива matches. $i в данном случае это номер ошибки. Для каждой ошибки нам нужно перебрать массив регулярок. Во внутреннем цикле for проверяем элемент массива регулярок $regElement[$n] на соответствие ошибке matches[$i].
#548 #617826
>>617824

>О чем я и говорю.



Есть в принципе еще array_search. Нативные функции по идее должны быстрее работать (точно не знаю) и кода меньше.
#549 #617828
>>617826
Я бы сделал через foreach, Например.
#550 #617831
>>617828
Почему?
#551 #617833
>>617831
Мне так удобнее, да и foreach не зависит от нумерации индексов и подходит даже для ассоциативного массива.
#552 #617848
>>617824
Да что ж такое-то, никак не пойму, как это будет работать и что именно нам даст...
Мне надо переспать с кодом или сложной задачей, чтобы наконец всё сложилось в голове
Просто поспать, мысленно подыскивая решение
4 дня уже плохо сплю

>$i в данном случае это номер ошибки.


Хм, но ведь $i у нас номер массива с регуляркой (ключом) и правилом (содержанием)?..
То есть нам нужно перебрать все эти массивы с регулярками и правилами, сравнивая их с ошибками в matches[$i], я ведь так и делал в первом цикле - я именно к этому там и стремился.

>>617828
То есть мне можно вот так сделать, наверное:
foreach ($possibleErrors as $pattern => $message тут пока не пойму, как разложить сложный массив на составляющие, сейчас буду искать) {
if ($pattern[$i] == $matches[$1]) {
echo "{$pattern[$i]} и {$message[$i]}\n";
}
}
Такое что-то?
Ну охренеть, вообще как в тумане хожу-брожу...
#553 #617850
перекат?..
#554 #617852
>>617848
У тебя possibleErrors состоит из ассоциативных подмассивов. Соответственно не $pattern[$i] (там ведь нет элемента с таким индексом $pattern это массив с индексами 'pattern' и 'message') а $patter['pattern']. И нужно не сравнивать с matches[$i] через == а проверять preg_match'ем
#555 #617855
>>617852
ах да, у тебя as $pattern => $message, здесь нам не нужны ключи, можно просто as $pattern. Соответственно мой совет выше именно для такого кода, где $pattern это сам элемент, а не ключ.
#556 #617858
>>617850
ОП вернется и перекатит
#557 #617862
>>617858
Постов через 300.
#558 #617864
Поясните начинающему: на кодакадеми прохожу курс PHP, но до этого по ссылке из оп-поста уже пару дней занимался. Кажется, что на кодакадеми какая-то супер-элементарщина. Дальше - лучше, или там всё - основы и ничего вглубь?
#559 #617869
>>617852
Точно, спасибо! Одно узнаю, прежнее забываю, я же уже и делал так: $possibleErrors[$i]['pattern'].
Тогда вот так, наверное:
for (; $i <= count($matches);) {
if (preg_match($possibleErrors[$i]['pattern'], $matches[$1]) {

$pattern = $possibleErrors[$i]['pattern'];
$message = $possibleErrors[$i]['message'];

echo "{$pattern} и {$message}\n";
}
}

>>617855
Вроде я тебя понял. Но только вроде, я уже не уверен.
#560 #617873
>>617869
То есть я просто взял и переписал ещё раз то, что у меня и так уже было.
Зачем так жить.
Именно это у меня и было в коде же.
#561 #617875
>>617869
Опять двадцать пять. Где внутренний цикл? Почему ты опять используешь $i для регулярок, когда это номер ошибки?

Вот тут >>617848 у тебя было почти правильно.
#562 #617876
>>617875
А к чему мне привести foreach?
Мне же не нужно, получается, раскладывать массив на регулярки и значения, я же их непосредственно потом достаю с помощью $possibleErrors[$i]['pattern']. Там ведь у меня ошибка в foreach, получается?
#563 #617879
>>617864
пацаны, не игнорьте
#564 #617884
>>617876
https://ideone.com/3RAY9G вот попытался максимально абстрактно пояснить, без совсем уж конкретики, чтобы это не было готовым решением.
#565 #617885
>>617875

>$i для регулярок, когда это номер ошибки


А тогда вообще конструкция $possibleErrors[$i]['pattern'] имеет ли право на жизнь? Если $i у нас номер ошибки, то, как анон писал выше, после семи регулярок там уже будет ошибка подставляться...
Я вот и думал $i к количеству регулярок привязать, а не ошибок.
#566 #617887
>>617879
Бро, пройди до конца, там может быть как и на сайте ОПа - чем дальше, тем глубже и сложнее.
#567 #617889
>>617885
Не используй ты этот $i вообще нигде, кроме как индекс массива matches
#568 #617896
У меня одного бугурт от того, что переменные имеют $ в начале? Тупо же
#569 #617903
>>617896
Просто знака кукиш нет.
#570 #617905
>>617896
бля, тоже бесит, перекатился с джавы и вечно забываю где-нибудь, а потом заебываюсь искать
#571 #617907
>>617889
Бро, спасибо тебе огромное.
Вот, вроде бы вот так надо быть с циклом внутри:

foreach ($possibleErrors as $value) {

$pattern = $value['pattern'];
$message = $value['message'];

if(preg_match($pattern, $matches[$i])) {
\t\t \t
echo "{$pattern} и {$message}\n";
}

Выдаёт сейчас соответствующие ошибкам регулярки и правила из массива $possibleErrors.

Сейчас пойду немного подышу свежим воздухом, чтобы в себя прийти.
Надеюсь, дальше соображу всё.
Да уж, это вам не говносайтики на HTML и Вротмнепрессе да SEO...
#572 #617908
>>617907
Молодец, а я уж для тебя задачу придумал на вложенные массивы, лол.
#573 #617909
>>617908
Oh no!..
Спасибо, бро, это мне будет полезно.
Какой там ООП, я пока все эти задачи с хода не буду решать - не перейду даже на другую страницу учебника.
#574 #617913
>>617908
А ты на каком уровне сейчас?
#575 #617915
>>617913
На файлообменнике.
#576 #617917
>>617915
Помоги мне со студентами. >>616964
#577 #617920
>>617917
Даже не знаю чем тебе помочь. На таком уровне задач уже не синтасксис или логику нужно проверять, а архитектуру приложения. Тут я не лучший советчик, дождись лучше ОПа.
#578 #617921
какой же уи легкий, пиздец. после собственной архитектуры.
#579 #617923
выучила пхп на уровне продвинутого миддла, потратила несколько лет, ни работы ни денег. чувствую, как будто мне пообещали жениться, потрахали и выкинули, пичалька. а ведь столько денег обещали, еще и этими историями об успешных школьниках разжигают.
#580 #617925
>>617923
Ну толсто же.
#581 #617926
>>617923
сколько лет?
#582 #617927
>>617586
у меня не хватает терпения клянчить, как попрошайка возле сортира, задания по 4 баксов. работа должна приносить без выклянчивания не меньше 20 в месяц, иначе это не работа, а хуйня какая-то.
#583 #617928
>>617923
А удаленка, фриланс? Я тут на двачах же нашел работодателя, которому пишу скриптики и деньгами не обижает. Есть и конфы таких людей. Ищи лучше.
#584 #617931
Не кормите толстяка. После этого

>на уровне продвинутого миддла


уже надо нахуй слать.
#585 #617932
>>617927
Да это легко, сидя дома можно 20ку делать, если даже тут на двачах связей набраться. Точно тебе говорю.
#586 #617933
>>617928
как ты тут нашёл кого-то?
#587 #617935
>>617933
Уже прямо точно укажу. В вебе ищи. Я там и на хорошие скайпоконфы вышел, и на хороших работодателей.
#588 #617938
>>617935
в каком вебе? мы тут в /pr варимся, где тут веб?
#589 #617939
>>617938
Тут учимся. Там работаем.
#590 #617942
>>617939
да ты доску укажи, что за веб-то?
#591 #617944
>>617942
Ебана, /web.
#592 #617946
>>617939
ОП, у тебя есть задачки, для которых обоснованно брать Symfony? А если нет, придумать можешь?
#593 #617948
>>617946
Это не ответ, прилипло.
19 Кб, 245x510
#594 #617950
>>617909
https://ideone.com/Upnbx3 Короче вот, я решил почувствовать себя ОПом и сделал для тебя задачку, а то оповские массивы совсем уж простые. Выведи массив досок в формате как на пикрелейтеде. Хотя, наверное, слишком просто, может в будущем усложню.
#595 #617961
>>617950
Хтмл, ксс?
#596 #617963
>>617961
Зачем? Задание чисто на php, на скрине stdout c ideone.
#597 #618025
Эй, друзья, мне пришло в голову, что php - это наилучший инструмент, чтобы получить быстрый выхлоп и в довольно интересном виде. Это правда?
#598 #618027
>>618025
нет, питон
#599 #618030
ОП, я тут опять со своим "магазином" - https://github.com/lexdss/shop , как-то закидывал его на проверку, но почти сразу удалил, т.к. множество очевидных даже для меня ошибок было. Привел его вроде в порядок, убрал работу с БД в отдельный класс, за счет чего объем кода существенно сократился и т.п. Интересует именно замечания по коду, на верстку не обращай внимания.
#600 #618031
Бля, а почему нового треда нет? Этот же тонет.
#601 #618039
>>617950
Спасибо, бро, интересная задачка.
Сразу застреваю с массивом в массиве в 'threads' и отсутствием такого же массива в 'name'.
Там точно можно сделать с учётом всего лишь знания массивов? Вроде бы да.
Сначала сделаю твою задачу, а потом продолжу тогда проверку ошибок - отдохнуть от неё хочу. Да и лучше представлю себе всё.
#602 #618043
>>617950
https://ideone.com/crLN0o
Я сделал. Для разминки.

>>618039
Только ты не смотри. Сам делай.
#603 #618050
>>618043
Молодец, даже лучше чем мое изначальное решение.
#604 #618051
>>618043
Да, себя же не обманешь.
Тогда сразу подскажи, бро: сколько там циклов будет в виде матрёшки? Можно ли как-то разложить массив без foreach или много значений туда внести: foreach ($boards as $desks => $threads => $names) - вот такое возможно что-нибудь?
#605 #618059
>>618051
3 массива == 3 цикла. foreach можно использовать только по следующей схеме:

foreach ($variable as $key => $value)

Ну и можно $key опустить.
#606 #618198
Решил что-нибудь распарсить по приколу. В пхп стремлюсь к нулю. Понятное дело, глаз пал на любимую раковальню у Абулия. Но если иные сайты file_get_contents более-менее переваривает, то сосач никак не реагирует. Чяднт?
#607 #618205
Господа, скачал себе эклипс для php. Не понимаю, как сделать run программы для тестинга. Там дают два варианта: PHP CLI и PHP Web ни один не работает. Как спокойно запускать свои хеллоуворлды и любоваться ими?
Проверяем потихоньку. #608 #618310
У меня не очень много времени, отвечу пока на старые посты, кого не успею, проверю завтра например.

>>612398

> http://ideone.com/C8o0SL - скрипт калькулятора Айфона.


Проверил тут >>612619

> Этот код все еще слишком большой. Надо упростить дальше:



>> $paymentTotal = $paymentTotal + $debt;


>> echo "{$month} месяц спустя: долг = {$


> Это повторяется 2 раза, надо бы избавиться от повтора



> http://ideone.com/8q8JVk - скрипт калькулятора Айпада



Тут тоже повторяется выражение

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


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

> http://ideone.com/wzPQ7W - скрипт проверки телефона.


Ответил в старом >>612624
Регулярка слишком громоздкая, надо упростить.

> http://ideone.com/BXho8s - скрипт проверки ошибок в тексте


Программа не находит ошибку «отсутствие запятой перед союзами а/но»: http://ideone.com/AflGY0

>>612815

> https://jsfiddle.net/4akump8y/2/ 11 задача


Ок, верно

> https://jsfiddle.net/8kwx97my/3/ 12


> if (this.getSizes()[size]===undefined){


Неправильный путь. Для проверки наличия ключа в объекте есть оператор in

> Hamburger.SMALL_PRICE = 50;


> Hamburger.SMALL_CALORIES = 20;


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

> if (this._toppings == Hamburger.TOPPING_MAYO) {


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

Остальное в задаче верно.

> https://jsfiddle.net/8k8604L3/ 13



> for (var i = 0; i < this._elements.length; i++) {


> if (this._elements instanceof PowerStation) {


> if (this._elements instanceof LivingHouse) {


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

> Network.prototype.getProfit = function(timeOfTheDay) {


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

> var result = 1;


Название неправильное - не говорит о смысле переменной

> SolarPanel.prototype = Object.create(PowerStation.prototype);


Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?

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

Также, ты сделал наследование через Object.create из ES5. Давай сделаем поддержку и для ES3.

> https://jsfiddle.net/o2shx897/1/ 16 заодно и 14я в одном флаконе.



> if(typeof obj[key] == "object"){


> copy[key] = deepCopy(obj[key]);


> }


> else{


> copy[key] = obj[key];


Догадаешься где тут ошибка? Алсо, "} else {" пишется в 1 строку.
Проверяем потихоньку. #608 #618310
У меня не очень много времени, отвечу пока на старые посты, кого не успею, проверю завтра например.

>>612398

> http://ideone.com/C8o0SL - скрипт калькулятора Айфона.


Проверил тут >>612619

> Этот код все еще слишком большой. Надо упростить дальше:



>> $paymentTotal = $paymentTotal + $debt;


>> echo "{$month} месяц спустя: долг = {$


> Это повторяется 2 раза, надо бы избавиться от повтора



> http://ideone.com/8q8JVk - скрипт калькулятора Айпада



Тут тоже повторяется выражение

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


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

> http://ideone.com/wzPQ7W - скрипт проверки телефона.


Ответил в старом >>612624
Регулярка слишком громоздкая, надо упростить.

> http://ideone.com/BXho8s - скрипт проверки ошибок в тексте


Программа не находит ошибку «отсутствие запятой перед союзами а/но»: http://ideone.com/AflGY0

>>612815

> https://jsfiddle.net/4akump8y/2/ 11 задача


Ок, верно

> https://jsfiddle.net/8kwx97my/3/ 12


> if (this.getSizes()[size]===undefined){


Неправильный путь. Для проверки наличия ключа в объекте есть оператор in

> Hamburger.SMALL_PRICE = 50;


> Hamburger.SMALL_CALORIES = 20;


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

> if (this._toppings == Hamburger.TOPPING_MAYO) {


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

Остальное в задаче верно.

> https://jsfiddle.net/8k8604L3/ 13



> for (var i = 0; i < this._elements.length; i++) {


> if (this._elements instanceof PowerStation) {


> if (this._elements instanceof LivingHouse) {


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

> Network.prototype.getProfit = function(timeOfTheDay) {


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

> var result = 1;


Название неправильное - не говорит о смысле переменной

> SolarPanel.prototype = Object.create(PowerStation.prototype);


Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?

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

Также, ты сделал наследование через Object.create из ES5. Давай сделаем поддержку и для ES3.

> https://jsfiddle.net/o2shx897/1/ 16 заодно и 14я в одном флаконе.



> if(typeof obj[key] == "object"){


> copy[key] = deepCopy(obj[key]);


> }


> else{


> copy[key] = obj[key];


Догадаешься где тут ошибка? Алсо, "} else {" пишется в 1 строку.
https://github.com/weissart/ipq-lessons/ #609 #618311
>>613177

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


Открой исходник страницы или скачай файл - все пробелы на месте. Это просто HTML при отображении страницы их объединил.

>>613283

Проверяю.

https://github.com/weissart/ipq-lessons/blob/master/arrays.php

> for ($i = 0; $i <= count($weather)-1; $i++){


удобнее, наглянее и проще использовать foreach для перебора массива. foreach ($weather as $day => $temp) ...

> //Оценки, которые поставили анону


Верно

> Рост анона


Верно

> $answers[mt_rand(0, 5)]


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

> Сгенерированное имя


Ок, верно

https://github.com/weissart/ipq-lessons/blob/master/cipher.php
Тут все правильно.

https://github.com/weissart/ipq-lessons/blob/master/credits.php

> return "Вам нужно платить больше чтобы покрыть этот кредит.";


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

return ['total' => 10000, 'error' => null ]; // нет ошибки
return ['total' => 0, 'error' => 'Ошибка ...' ]; // есть ошибка

Вообще, нехорошо когда функия возвращает разные типы данных - это запутывает и приводит к ошибкам

> $price x $percent) + $commision


Это повторяется раза 4, попробуй избавиться от повторов.

https://github.com/weissart/ipq-lessons/blob/master/cubes.php
В общем верно, хотя нет проверки на случай когда выпадают даблы.

https://github.com/weissart/ipq-lessons/blob/master/hello.php

> //тут я аутировал и пытался пофиксить \n, но забил, чому-то не работает



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

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

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

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

Так, все верно.

https://github.com/weissart/ipq-lessons/blob/master/loops.php
Тут выражение $creditSum = ($creditSum x $bankPercent) постоянно повторяется, попробуй избавиться от повторов.

> return false;


> break;


break никогда не выполнится так как return выходит из функции и из цикла тоже.

https://github.com/weissart/ipq-lessons/blob/master/poem.php
Не совсем по шаблону генерируется стих. Можешь переделать, не убирая цикл, чтобы генерировалось по шаблону описанному в задаче?

Также, лучше использовать foreach вместо for.

https://github.com/weissart/ipq-lessons/blob/master/regexp.php

> Задача на проверку номера телефона:


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

> а то невозможно читать эти регулярки получается.


Потому что ты пермудрил. Насчет читать - с опытом научишься.

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

Вот список номеров:

Правильные: 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' // нет +
);

> isGrammarNaziHappy


> а-яё\\w


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

> (^, (а|но


Э не. ^ тут значит символ крышечки и не несет специалного значения. Спецсимвол он только если идет первым в квадратных скобках.

> но не все ошибки находит из-за того что они расположены близко друг к другу, вот


Надо убрать .{3,5} которое съедает символы и сделать как-то по другому. Ну например, использовать preg_split, разбивать строку на куски с ошибками и их окружение, и нарезать как-то. Или использовать флаг PREG_DELIM_CAPTURE который захватывает позицию где найдено соответствие. Или не выводить окружающие ошибку буквы (самый простой вариант). Или после нахождения ошибки искать ее поиском по строке и искать окружение.

> for ($i = 0; $i < count($matches[0]); $i++) {


Лучше foreach

> replaceNumber


> '/( |-|\\( ?| ?\\))+/';


Тут лучше использовать квадратные скобки
https://github.com/weissart/ipq-lessons/ #609 #618311
>>613177

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


Открой исходник страницы или скачай файл - все пробелы на месте. Это просто HTML при отображении страницы их объединил.

>>613283

Проверяю.

https://github.com/weissart/ipq-lessons/blob/master/arrays.php

> for ($i = 0; $i <= count($weather)-1; $i++){


удобнее, наглянее и проще использовать foreach для перебора массива. foreach ($weather as $day => $temp) ...

> //Оценки, которые поставили анону


Верно

> Рост анона


Верно

> $answers[mt_rand(0, 5)]


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

> Сгенерированное имя


Ок, верно

https://github.com/weissart/ipq-lessons/blob/master/cipher.php
Тут все правильно.

https://github.com/weissart/ipq-lessons/blob/master/credits.php

> return "Вам нужно платить больше чтобы покрыть этот кредит.";


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

return ['total' => 10000, 'error' => null ]; // нет ошибки
return ['total' => 0, 'error' => 'Ошибка ...' ]; // есть ошибка

Вообще, нехорошо когда функия возвращает разные типы данных - это запутывает и приводит к ошибкам

> $price x $percent) + $commision


Это повторяется раза 4, попробуй избавиться от повторов.

https://github.com/weissart/ipq-lessons/blob/master/cubes.php
В общем верно, хотя нет проверки на случай когда выпадают даблы.

https://github.com/weissart/ipq-lessons/blob/master/hello.php

> //тут я аутировал и пытался пофиксить \n, но забил, чому-то не работает



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

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

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

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

Так, все верно.

https://github.com/weissart/ipq-lessons/blob/master/loops.php
Тут выражение $creditSum = ($creditSum x $bankPercent) постоянно повторяется, попробуй избавиться от повторов.

> return false;


> break;


break никогда не выполнится так как return выходит из функции и из цикла тоже.

https://github.com/weissart/ipq-lessons/blob/master/poem.php
Не совсем по шаблону генерируется стих. Можешь переделать, не убирая цикл, чтобы генерировалось по шаблону описанному в задаче?

Также, лучше использовать foreach вместо for.

https://github.com/weissart/ipq-lessons/blob/master/regexp.php

> Задача на проверку номера телефона:


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

> а то невозможно читать эти регулярки получается.


Потому что ты пермудрил. Насчет читать - с опытом научишься.

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

Вот список номеров:

Правильные: 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' // нет +
);

> isGrammarNaziHappy


> а-яё\\w


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

> (^, (а|но


Э не. ^ тут значит символ крышечки и не несет специалного значения. Спецсимвол он только если идет первым в квадратных скобках.

> но не все ошибки находит из-за того что они расположены близко друг к другу, вот


Надо убрать .{3,5} которое съедает символы и сделать как-то по другому. Ну например, использовать preg_split, разбивать строку на куски с ошибками и их окружение, и нарезать как-то. Или использовать флаг PREG_DELIM_CAPTURE который захватывает позицию где найдено соответствие. Или не выводить окружающие ошибку буквы (самый простой вариант). Или после нахождения ошибки искать ее поиском по строке и искать окружение.

> for ($i = 0; $i < count($matches[0]); $i++) {


Лучше foreach

> replaceNumber


> '/( |-|\\( ?| ?\\))+/';


Тут лучше использовать квадратные скобки
https://github.com/V3N0m21/Uppu4/ #610 #618312
>>613318

https://github.com/V3N0m21/Uppu4/blob/master/users.sql#L47
Тут зачем-то добавляется 3 раза один и тот же индекс по id. Почему логин не объявлен уникальным?

https://github.com/V3N0m21/Uppu4/blob/master/comments.sql
Нет внешнего ключа на fileId. Также логично было бы добавить поле userId чтобы заполнять в том случае если комментарий оставил залогинившийся пользователь. Хотя непонятно что делать с полем user тогда.

> https://github.com/V3N0m21/Uppu4/blob/master/Uppu4.sql#L22


CREATE DATABASE лучше наверно не писать, а то нельзя например развернуть 2 версии сайта.

Также, у тебя в Uppu.sql нет внешних ключей. Вообще, почему там так много sql файлов? Оставь только те что правильные.

> https://github.com/V3N0m21/Uppu4/blob/master/app/bootstrap.php


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

> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L31


> $app->response->cookies->set('urlRedirect', $app->request->getResourceUri(), '1 day');


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

> && UPLOAD_ERR_OK == 0


Неправильная проверка. UPLOAD_ERR_OK это константа а не код ошибки.

> $app->response->cookies->set('urlRedirect', '');


Там нет команды удаления куки?

> $app->get('/logout'


Хорошо бы после логаута еще выводить сообщение «Вы вышли с сайта». ВОобще, на любое действие должна быть какая-то реакция. Сообщение проще всего сделать через GET параметр вроде ?notify=logged_out

> $app->get('/users/:id/', function ($id) use ($app) {


Нет проверки что id существует - это ок?

> $app->delete('/users/:id/', function ($id) use ($app) {


Это любой анонимус может так удалять пользователей?

> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L144


> $user = $app->em->getRepository('Uppu4\Entity\User')->findOneById($file->getUploadedBy());


Мне кажется это неправильно, лучше сделать связь в доктрине и писать:

$user = $file->getUser(); (да, она так умеет)

> $app->delete('/view/:id/', function ($id) use ($app) {


Логичнее было бы назвать URL /file/:id, а то «delete view id» плохо читается. Также, нет проверки. Мне кажется для таких операций стоит сделать функцию или метод в каком-то классе, проверяющий полномочия. Например, удалять файл может только автор или админы. Также, метод проверяющий полномочия, пригодится в шаблоне: он может определять, показывать ли на экране кнопку удаления. Обычно такие методы называют вроде canDeleteFile().

> $validation = new \Uppu4\Helper\DataValidator;


> $commentHelper = new CommentHelper($app->em);


Стоит наверно сделать синглтоном Слима.

> $commentHelper->createComment($app->request->params('comment'), $parent, $file, $user);


> $comment = $commentHelper->comment;


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

> $comments = $app->em->getRepository('Uppu4\Entity\Comment')->findBy(array('fileId' => $id), array('path' => 'ASC'));


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

> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/CommentHelper.php#L15


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

В этом хелпере есть 2 нехороших момента, усложняющих понимание кода и могущих привести к ошибке:

1) createComment не возвращает результат, а кладет его в поле.
2) commentSave не получает аргумент напрямую, а зачем-то берет из поля. А что если мы забыли положить его туда? И как вообще понять что надо что-то положить в поле перед тем как вызвать метод?

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/DataValidator.php
Тут вопрос - почему используется поле $error, а не возвращается список ошибок сразу? Есть ведь такие варианты:

$errors = validate($entity);
$result = validate($entity, &$errors);

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

> return $this->error['comment'] = "Comment should not be empty";


Это 2 действия и их надо писать в 2 строки.

> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L21


Тут лучше макс. размер брать из поля класса где он и хранится.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L25

> public function fileSave(


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

> public function fileDelete($id) {


Файл с диска удаляется до удаления из базы, надо наоборот.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L31

> $_POST['comment']


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

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/Resize.php#L123

> throw new Exception("File '$savePath' not created", 1);


Сообщение можно написать лучше.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/Resize.php#L138

> $scaleQuality = round(($imageQuality / 100) * 9);


У PNG нет фактора качества - это формат без потерь. непонятен смысл преобразования.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L12
Тут и во многих других местах нужны тайп хинты.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L34

> public function saveUser


Название неудачное, правильнее registerAnonymousUser или как-то так. Где проверка что пользователь анонимен и еще не ргеистрировался ?

Соль наверно логчинее генерировать в момент сохранения пароля, какой смысл в ней без самого пароля?

> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L42


> $this->authenticateUser($postParams['login'], $postParams['password']);


Проверять пароль нет необходимости

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L52

> public function getUser()


> public function getCurrentUserId()


Названия запутывают. Например первая создает пользователя при отстутсиви, а вторая нет, а в названии это не отражено.

> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L76


> $this->responseCookies->set('token', $user->getToken(), '1 month');


> $this->responseCookies->set('hash', $user->getHash(), '1 month');


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

public function checkAuthorization()
Вместо null/true логичне вернуть false/true.

> $this->responseCookies->set('token', '');


Нет ли готовой функции удаления?

Также, у кук какой path выставляется? Посмотри в отладчике браузера на вкладке Network. Должен быть / иначе они будут не на всех страницах видны.

шаблоны и верстку не проверял.
https://github.com/V3N0m21/Uppu4/ #610 #618312
>>613318

https://github.com/V3N0m21/Uppu4/blob/master/users.sql#L47
Тут зачем-то добавляется 3 раза один и тот же индекс по id. Почему логин не объявлен уникальным?

https://github.com/V3N0m21/Uppu4/blob/master/comments.sql
Нет внешнего ключа на fileId. Также логично было бы добавить поле userId чтобы заполнять в том случае если комментарий оставил залогинившийся пользователь. Хотя непонятно что делать с полем user тогда.

> https://github.com/V3N0m21/Uppu4/blob/master/Uppu4.sql#L22


CREATE DATABASE лучше наверно не писать, а то нельзя например развернуть 2 версии сайта.

Также, у тебя в Uppu.sql нет внешних ключей. Вообще, почему там так много sql файлов? Оставь только те что правильные.

> https://github.com/V3N0m21/Uppu4/blob/master/app/bootstrap.php


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

> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L31


> $app->response->cookies->set('urlRedirect', $app->request->getResourceUri(), '1 day');


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

> && UPLOAD_ERR_OK == 0


Неправильная проверка. UPLOAD_ERR_OK это константа а не код ошибки.

> $app->response->cookies->set('urlRedirect', '');


Там нет команды удаления куки?

> $app->get('/logout'


Хорошо бы после логаута еще выводить сообщение «Вы вышли с сайта». ВОобще, на любое действие должна быть какая-то реакция. Сообщение проще всего сделать через GET параметр вроде ?notify=logged_out

> $app->get('/users/:id/', function ($id) use ($app) {


Нет проверки что id существует - это ок?

> $app->delete('/users/:id/', function ($id) use ($app) {


Это любой анонимус может так удалять пользователей?

> https://github.com/V3N0m21/Uppu4/blob/master/public/index.php#L144


> $user = $app->em->getRepository('Uppu4\Entity\User')->findOneById($file->getUploadedBy());


Мне кажется это неправильно, лучше сделать связь в доктрине и писать:

$user = $file->getUser(); (да, она так умеет)

> $app->delete('/view/:id/', function ($id) use ($app) {


Логичнее было бы назвать URL /file/:id, а то «delete view id» плохо читается. Также, нет проверки. Мне кажется для таких операций стоит сделать функцию или метод в каком-то классе, проверяющий полномочия. Например, удалять файл может только автор или админы. Также, метод проверяющий полномочия, пригодится в шаблоне: он может определять, показывать ли на экране кнопку удаления. Обычно такие методы называют вроде canDeleteFile().

> $validation = new \Uppu4\Helper\DataValidator;


> $commentHelper = new CommentHelper($app->em);


Стоит наверно сделать синглтоном Слима.

> $commentHelper->createComment($app->request->params('comment'), $parent, $file, $user);


> $comment = $commentHelper->comment;


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

> $comments = $app->em->getRepository('Uppu4\Entity\Comment')->findBy(array('fileId' => $id), array('path' => 'ASC'));


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

> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/CommentHelper.php#L15


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

В этом хелпере есть 2 нехороших момента, усложняющих понимание кода и могущих привести к ошибке:

1) createComment не возвращает результат, а кладет его в поле.
2) commentSave не получает аргумент напрямую, а зачем-то берет из поля. А что если мы забыли положить его туда? И как вообще понять что надо что-то положить в поле перед тем как вызвать метод?

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/DataValidator.php
Тут вопрос - почему используется поле $error, а не возвращается список ошибок сразу? Есть ведь такие варианты:

$errors = validate($entity);
$result = validate($entity, &$errors);

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

> return $this->error['comment'] = "Comment should not be empty";


Это 2 действия и их надо писать в 2 строки.

> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L21


Тут лучше макс. размер брать из поля класса где он и хранится.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L25

> public function fileSave(


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

> public function fileDelete($id) {


Файл с диска удаляется до удаления из базы, надо наоборот.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/FileHelper.php#L31

> $_POST['comment']


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

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/Resize.php#L123

> throw new Exception("File '$savePath' not created", 1);


Сообщение можно написать лучше.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/Resize.php#L138

> $scaleQuality = round(($imageQuality / 100) * 9);


У PNG нет фактора качества - это формат без потерь. непонятен смысл преобразования.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L12
Тут и во многих других местах нужны тайп хинты.

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L34

> public function saveUser


Название неудачное, правильнее registerAnonymousUser или как-то так. Где проверка что пользователь анонимен и еще не ргеистрировался ?

Соль наверно логчинее генерировать в момент сохранения пароля, какой смысл в ней без самого пароля?

> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L42


> $this->authenticateUser($postParams['login'], $postParams['password']);


Проверять пароль нет необходимости

https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L52

> public function getUser()


> public function getCurrentUserId()


Названия запутывают. Например первая создает пользователя при отстутсиви, а вторая нет, а в названии это не отражено.

> https://github.com/V3N0m21/Uppu4/blob/master/app/Helper/UserHelper.php#L76


> $this->responseCookies->set('token', $user->getToken(), '1 month');


> $this->responseCookies->set('hash', $user->getHash(), '1 month');


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

public function checkAuthorization()
Вместо null/true логичне вернуть false/true.

> $this->responseCookies->set('token', '');


Нет ли готовой функции удаления?

Также, у кук какой path выставляется? Посмотри в отладчике браузера на вкладке Network. Должен быть / иначе они будут не на всех страницах видны.

шаблоны и верстку не проверял.
#611 #618318
>>613411

Можно тут http://php.net/manual/ru/tutorial.php
Потом почитай про язык HTML в любом самоучителе. И комментарии к задаче про студентов.

>>613443

Все верно.

>>613460

Да, не нужны.

>>613606
>>613609

Приавльный ответ: по идее доктайп задает тип документа: что это за документ, какие теги и атрибуты в нем разрешены (вот пример ссылки где описаны в машинопонятном виде разрешенные теги: http://www.w3.org/TR/html4/strict.dtd ). Но браузеры все это не проверяют и используют доктайп только для одной цели: если в документе нет доктайпа, то это старый документ, написанный до 2000 года, и надо отображать его не по стандартам, а с отступлением от них. Потому доктайп надо ставить всегда, иначе может поплыть верстка.

>>613763

> Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".


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

>>613924

У тебя там ошибка: PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11

>>613979

Можно посчитать на сколько увеличился долг за месяц (процент + комиссия). Если это больше 5000 то анон никогда не выплатит долг.

>>614025

Тут проще сделать так:

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

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

Считает верно.
#611 #618318
>>613411

Можно тут http://php.net/manual/ru/tutorial.php
Потом почитай про язык HTML в любом самоучителе. И комментарии к задаче про студентов.

>>613443

Все верно.

>>613460

Да, не нужны.

>>613606
>>613609

Приавльный ответ: по идее доктайп задает тип документа: что это за документ, какие теги и атрибуты в нем разрешены (вот пример ссылки где описаны в машинопонятном виде разрешенные теги: http://www.w3.org/TR/html4/strict.dtd ). Но браузеры все это не проверяют и используют доктайп только для одной цели: если в документе нет доктайпа, то это старый документ, написанный до 2000 года, и надо отображать его не по стандартам, а с отступлением от них. Потому доктайп надо ставить всегда, иначе может поплыть верстка.

>>613763

> Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".


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

>>613924

У тебя там ошибка: PHP Notice: Undefined variable: paid in /home/jf4cUQ/prog.php on line 11

>>613979

Можно посчитать на сколько увеличился долг за месяц (процент + комиссия). Если это больше 5000 то анон никогда не выплатит долг.

>>614025

Тут проще сделать так:

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

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

Считает верно.
#612 #618360
>>618043
Блиин, какое изящное решение.
У меня какое-то топорное, при этом полночи искал, как достать содержимое вложенного массива.
Сколько уже изучаешь РНР, бро?
Вот моё решение: https://ideone.com/Ju7Vjk
Там всё так же, кроме подсчёта тредов, я его функцией сделал, так мне кажется более правильным, что ли.
>>618059
Получается ещё и так можно использовать:
foreach ($variable[$key] as $value)
А потом можно доставать уже значения вложенного массива.

>>618310

>> http://ideone.com/8q8JVk - скрипт калькулятора Айпада


>Тут тоже повторяется выражение


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


>попробуй убрать повторы. Так, считает верно.


Я далее убрал повторы, но почему считает верно? У меня же в этом варианте 7777 прибавляется к сумме долга, а потом проценты от 47777 тысяч уже отсчитываются, разве это правильно? Вот мой другой вариант, который, по идее, более верный: http://ideone.com/DK8ez3
Также вот сокращённый уже просто до минимума калькулятор кредита Айфона: http://ideone.com/7FJfGm

>Регулярка слишком громоздкая, надо упростить


>скрипт проверки телефона


Да, вроде бы упростил вот тут: http://ideone.com/wzPQ7W
>>618318

>> Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".


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


Да, так именно и сократил после, спасибо.
Спасибо, ОП и анончики.
Сегодня постараюсь домучить проверку текста на ошибки. Очень медленно иду, полночи искал, как правильно вытащить значения из глубоко вложенного массива...
#612 #618360
>>618043
Блиин, какое изящное решение.
У меня какое-то топорное, при этом полночи искал, как достать содержимое вложенного массива.
Сколько уже изучаешь РНР, бро?
Вот моё решение: https://ideone.com/Ju7Vjk
Там всё так же, кроме подсчёта тредов, я его функцией сделал, так мне кажется более правильным, что ли.
>>618059
Получается ещё и так можно использовать:
foreach ($variable[$key] as $value)
А потом можно доставать уже значения вложенного массива.

>>618310

>> http://ideone.com/8q8JVk - скрипт калькулятора Айпада


>Тут тоже повторяется выражение


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


>попробуй убрать повторы. Так, считает верно.


Я далее убрал повторы, но почему считает верно? У меня же в этом варианте 7777 прибавляется к сумме долга, а потом проценты от 47777 тысяч уже отсчитываются, разве это правильно? Вот мой другой вариант, который, по идее, более верный: http://ideone.com/DK8ez3
Также вот сокращённый уже просто до минимума калькулятор кредита Айфона: http://ideone.com/7FJfGm

>Регулярка слишком громоздкая, надо упростить


>скрипт проверки телефона


Да, вроде бы упростил вот тут: http://ideone.com/wzPQ7W
>>618318

>> Я многое делаю методом тыка пока что (знаю, что это неправильно, но ведь пока опыта просто нет), поэтому мне надо все проверять. Пока думаю, что вот так надо будет записать: "/^[\\-\\(\\)\\s]звёздочка$/ui".


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


Да, так именно и сократил после, спасибо.
Спасибо, ОП и анончики.
Сегодня постараюсь домучить проверку текста на ошибки. Очень медленно иду, полночи искал, как правильно вытащить значения из глубоко вложенного массива...
#613 #618369
Перекат будет?
#614 #618371
>>618369
Будет на 700 ответах.
#615 #618375
>>618371
Хорошо, ответь пока на это, пожалуйста, нихуя не понимаю
>>618205
#616 #618376
>>618375
Я не ОП. Но эклипсы крайне не рекомендую. Умеет всё, и всё через задницу.
#617 #618378
>>618376
А какую IDE тогда для пхп выбрать?
#618 #618379
>>618378
NetBeans бесплатный.
PHPStorm платный.
#619 #618386
>>618379

>PHPStorm платный.


А если я - пират?
#620 #618389
>>618386
ратрацкер
#621 #618392
>>618389
Нинужен. Всё качается с офф. сайта и спокойно активируется потом. Без пердолинга.

тоже пират
#622 #618394
С эклипсом никто не поможет всё-таки?
#623 #618396
>>618394

>как сделать run программы для тестинга


ctrl +F5
#624 #618400
>>618394
Он же еще оперативы много сжирает. Зачем это тебе нужно?
#625 #618402
>>618400

>2016


>Думать об оперативе

#626 #618406
>>618402
Поверь, сжирать при компиляции 16 гиг оперы - не очень хорошо.
#627 #618411
>>618402
Hello world
время компиляции 18 секунд.
оно тебе надо?
#628 #618413
>>618310

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


Не должны, если генератор будет наследовать PowerStation.

>Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?


Мне казалось это более логичным.

>Догадаешься где тут ошибка?


Нет.
#629 #618416
>>618392
А чем активировать?
#630 #618417
>>618392
с рутрецкера тоже качается только .txt с серийником какбы
#631 #618427
>>618416
PhpStorm 10 activation. Первая ссылка в гугле.
#632 #618430
>>618427

>PhpStorm 10 activation


Уже. спасибо. Пока тред тонет спрошу ещё нубский вопрос: для того, чтобы сделать run написанного helloworld-а, насколько понимаю, надо ещё установить какой-то php-interpreterю Я правильно понимаю, что это союственно сама вещь, которая будет "читать" пхп-язык? А Phpstorm - только текстовый редактор? Если всё так, то откуда взять интерпретёра?
#633 #618431
>>618430
Он уже есть в шторме. Там все есть.
19 Кб, 558x757
#634 #618432
>>618431
Качал с офф сайта, что я делаю не так?
#635 #618434
>>618432
В плагинах активировать PHP.

Вот https://www.jetbrains.com/phpstorm/help/enabling-php-support.html
#636 #618436
>>618434
В плагинах стоит галочка, т.е. уже активирован. Блин, в чём загвоздка?
#637 #618437
>>618431
Покопался, походу надо правда устанавливать отдельно пхп-интерпретёра и прописывать путь к нему, почему ты сказал, что в шторме уже всё есть? Я вообще ничего не понимаюблядь
#638 #618440
>>618437
Я им давно пользовался. Вроде все было и все работало.
#639 #618442
>>618440
а чем пользуешься сейчас?
#640 #618445
>>618442
Саблаймом. Я на работе верстальщик-кодер-дизайнер. А тут дошел только до студентов и пока нет надобности в шторме.
#641 #618446
>>618445

>студентов


Поясните, что в этом треде все называют "студентами"?
#642 #618447
#643 #618514
>>618360

>Вот моё решение:


Годнота.

>Там всё так же, кроме подсчёта тредов, я его функцией сделал


Ты даже лучше сделал.

>Сколько уже изучаешь РНР, бро?


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

>Получается ещё и так можно использовать:


Да.
#644 #618519
>>618514
А кем работаешь? и для чего учишь?
#645 #618525
>>618514

>Ты даже лучше сделал.


Спасибо, всегда приятно это слышать от разбирающихся людей.
#646 #618526
>>618519
Работаю в быдлоконторе, чаще верстка, иногда в php что-то. Обычная веб-студия. Учусь, чтобы устроиться на нормальную работу.
#647 #618562
>>616964
Оп, я разобрался кажется с автозагрузкой и пространствами имен. https://github.com/fxsloker/Student

Смотри обновленную версию. Что дальше делать? Все ли я правильно организовал?
20 Кб, 450x336
#648 #618615
Ребята, ну теперь уже совсем не понимаю, какого хрена так получается: https://ideone.com/FlhK1V
Вожусь с функцией mb_substr, пытаюсь достать часть текста на 30 символов от ошибки и на 30 символов после ошибки.
Я вообще ведь неправильно так стал делать: $wrongText = mb_substr($coolStory, (preg_match($pattern, $coolStory)) -30, 30); - совершенно очевидно же, что у меня там берётся тупо 30 символов от конца текста и прибавляется 30 символов вперёд, к концу.
UPD: сейчас поменял немного - вообще толку нет. Там, наверное, как-то надо искать в этом случае, какой по счёту этот символ стоит в тексте, вот что.

Может, как-то по-другому надо разбивать строку? Например, с помощью функции preg_split?
Но как разбивать, от ошибки до ошибки?

Столкнулся уже с тем, что считает только одну ошибку в сочетании символов ",жы", то есть не воспринимает ошибку в "жи", воспринимает только ошибку в отсутствии пробела после запятой.
#649 #618640
>>618615
preg_match возвращает true или false. Ты это значение потом пытаешься использовать вместо номера начала строки. Вот у тебя получается везде true, т.е 1.
#650 #618645
Где там был анон с задачкой по массивам? Давай еще какую-нибудь мозги разомнуть.
2 Кб, 182x69
10 Кб, 562x144
#651 #618660
>>618645
Ну ладно, вот тебе текст http://ideone.com/36xMZp
Задача: preg_match_all'ом поймать отсутствие запятых и записать в массив. В массиве должны быть вот такие значения. Задача решается в одну строчку. Тебе нужно лишь придумать правильную регулярку.
#652 #618664
ОП (и другие гуры в этом итт), а изучение Си дает какие-либо профиты в понимании PHP? Хочу обмазаться сишкой.
#653 #618666
>>618664
Обмазаться сишкой для того, чтобы понимать пхп? Ты ебанутый?
#654 #618667
>>618666
Но PHP на Си написан же.
#655 #618670
>>618667
Интересно, если бы ты работал сантехником, ты бы спрашивал "ребята, а мне стоит обмазываться сопроматом и м-теорией, чтобы лучше постичь профессию?"?
88 Кб, 317x372
#656 #618672
>>618670
нахуй не нужны все эти кресты, жыэсы, питоны, джавы-хуявы, это все для пидоров
хуячь гостевухи с менюхами как нормальный пыхыпыхер и не выйобуйся, сука бля
#658 #618675
>>618670
PHP - это не только сайтики. На этом языке немало работы, требующей квалификации повыше среднего уэб-мастера.

И у тебя ошибка в аналогии. Тут было бы уместнее привести в пример что-нибудь вроде сообщающихся сосудов и т. п. И да, сантехник с подобными знаниями (я про сосуды) определенно лучше своего коллеги без них.
#659 #618676
>>618674
Неплохо, но регулярка заточена на конкретный текст. Смотри, удалим одну ошибку и другую он уже не находит
http://ideone.com/kQoSiA
Или добавим еще одну ошибку, её скрипт не видит.
http://ideone.com/6H3Uaw
Будем считать, что я неправильно поставил условия задачи. Теперь я её усложняю. Сделай так, чтобы можно было добавить сколько угодно ошибок и он их нашел, или убрать.
#660 #618677
>>618676
Никогда не любил регулярки. Но знаю как сделать. Приеду домой напишу.
#661 #618687
>>618660
http://ideone.com/HBtO2S - вот мой вариант. Опять сталкиваюсь с тем, что при пересечения действия регулярок не видит ошибку.
#662 #618693
>>618687
Теперь верно.
#663 #618702
>>618693
Давайте какую-нибудь олимпиаду организуем. На самого умного анона.
#664 #618718
>>618702
Не надо, плз.
#665 #618719
>>618718
боишься, что она превратится в специальную?
#666 #618720
>>618719
вангую
#667 #618740
нашёл книгу в бумажном виде PHP и MYSQL Владимир Дронов за 2004 год. Выкидывать (12 лет прошло, лол!) или чем-то может быть ещё полезна?
#668 #618743
>>618740

>за 2004 год


Выкидывать, однозначно.

>Владимир Дронов


Тем более.
#669 #618776
>>618693
Я другой анончик тот, который тупит постоянно и никак не доделает задачу про проверку ошибок
Только пересечение ошибок меня беспокоит.
Как от такого избавляться? Снова мудрить с массивами и циклами? Но у меня и с ними не работает при пересечении ошибок всё равно...
>>618702
Лучше на самого глупого, так у меня будет больше шансов на победу.
#670 #618779
>>618776

>Только пересечение ошибок меня беспокоит.


Ты о чем?
#672 #618793
>>618776
А я тот анон, который просил задачу, и случайно глянул твое решение, и мне стало не интересно.
#673 #618801
>>618791
Уже была, не взлетело. А эта, с деаноном, и подавно не взлетит.
#674 #618803
>>618801

> 2016


> бояться деанона


Сноуден, ты нахуй двач открыл?
#675 #618804
>>618801
Нихуясе у тебя ЧСВ.
#676 #618805
Запилите гайд по установке апача и мускула на Макбук пока я не разозлился и не ушёл в руби треад.
#677 #618806
>>618791
Ну и нафиг нужна ваша конфа? Ньюфагам хоть помогаете?
#678 #618808
>>618805
А для этого твоего руби сервер не нужен?
#679 #618811
>>618808
А для него на инглише я уж сам найду гайды.
#680 #618821
>>618804

>ЧСВ


Значение знаешь?
#681 #618831
>>618779
А там дописал в текст "а что" в конце - он "а" видит, а что уже нет, не кладёт его в массив.
У меня так в скрипте с проверкой ошибок: ",жы" - видит только пропущенный пробел после запятой, не видит "жы".
Вот мне интересно, как с этим быть.

>>618793
Ну вот, печалька...
#682 #618842
>>618831
А, ты об этом. Особенности работы preg_match_all, я полагаю. Он начинает сравнивать текст с предыдущего вхождения регулярки, так что когда он нашел "слово а что текст", он добавляет в совпадение "слово а " и начинает следующее сравнение уже с "что текст".
#683 #618880
>>618831
А если сделать вот так (?<=(,жы))(?<=(жы))
Выглядит красиво. Мне стало интересно, я аж загуглить решил. Завтра потестирую.
#684 #618889
>>618831
Есть такая штука, что при не совпадении вернуться назад и ещё раз проверить по другой регулярке. А тут при совпадении вернётся ли он назад, не могу пока проверить.
#685 #618912
guys, I've got two questions: where is OP and when is the god-blessed PEREKAT?
#686 #618925
Bois, I've got 1 question: от взлома через форму ввода (ну если регулярками нельзя пользоваться) только htmlspecialchars защищает???
Ответы 200-350 #687 #618970
ОП тоже хочет отдохнуть, потому проверяет не спеша. Перекат - давайте завтра я постраюсь запилить.

>>614036

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

>>614053

> Сразу спрошу, почему не рботает /n как перенос строки?


Не /n, а \n. Не путай:

- слеш / используется в URL http://.../x/y/z, как знак деления, в путях на линуксе: /usr/bin
- бекслеш \ используется для вставки спецсимволов вроде \n, как разделитель неймспейсов \App\Class, и в путях на Windows: c:\temp\

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


> Куда втыкать?


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

> Задача на курс доллара


Молодец, все правильно.

> Игра в броски кубиков


Неплохо, пара замечаний:

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

> Рулеточка


Все верно, но пиши переменные с первой маленькой буквы.

> Айфон в кредит


Вот эти строки повторяются:

> $paymentTotal = $paymentTotal + $monthlyPayment;


> echo "{$month} месяц спустя: долг = {$creditBalance} руб,


Подумай как избавиться от повтора.

Ответ верный. Также, в программе что-то с отступами не то.

>>614112

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

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

>>614127

У меня стоят Emmet, DocBlockr, AutoFilename (не пригодился), markdown editing (тормозит иногда). какой-то из плагинов роняет процесс с плагинами в саблайме при быстром наборе текста.
Ответы 200-350 #687 #618970
ОП тоже хочет отдохнуть, потому проверяет не спеша. Перекат - давайте завтра я постраюсь запилить.

>>614036

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

>>614053

> Сразу спрошу, почему не рботает /n как перенос строки?


Не /n, а \n. Не путай:

- слеш / используется в URL http://.../x/y/z, как знак деления, в путях на линуксе: /usr/bin
- бекслеш \ используется для вставки спецсимволов вроде \n, как разделитель неймспейсов \App\Class, и в путях на Windows: c:\temp\

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


> Куда втыкать?


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

> Задача на курс доллара


Молодец, все правильно.

> Игра в броски кубиков


Неплохо, пара замечаний:

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

> Рулеточка


Все верно, но пиши переменные с первой маленькой буквы.

> Айфон в кредит


Вот эти строки повторяются:

> $paymentTotal = $paymentTotal + $monthlyPayment;


> echo "{$month} месяц спустя: долг = {$creditBalance} руб,


Подумай как избавиться от повтора.

Ответ верный. Также, в программе что-то с отступами не то.

>>614112

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

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

>>614127

У меня стоят Emmet, DocBlockr, AutoFilename (не пригодился), markdown editing (тормозит иногда). какой-то из плагинов роняет процесс с плагинами в саблайме при быстром наборе текста.
#688 #618971
>>614181

Лучше бы в минус не уходить, а делать так:

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

>>614216

> Накопление процентов



> if ($startSumm >1000000) {


А если ровно миллион то не годится? По моему тут знак не совсем тот.

В остальном верно.

> Задача про рост


Все правильно.

> Ответ на любой вопрос


Замечательно, все работает.

> Генератор имён


> 1 => 'Бар',


> 2 => 'ки',


Мне кажется, что писать вручную номера, начиная с 1, утомительно. А что если надо вставить новый элемент в середину? Тут можно сделать либо так:

$letters = [1 => 'аа', 'бб', 'вв', ...]; // все элементы после первого пронумеруются автоматически

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

В остальном верно.

> Доделай шифрование до нормального уровня


Праивльно.

> Доделай расшифровку зашифрованного текста.


Хорошо, работает.

>>614292

> Лев Толстой


Совет: не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2, ... - так сразу видно что они относятся к одной вещи. Или можно использовать массив: $randomWords[1], $randowWords[2].

В остальном верно.

>Палиндром


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

> Ну как-бы смысл комментария ведь в этом. Чтобы после компиляции его не было видно.


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

> C++ уровня школьника знаю. Но толком ничего серьёзного не писал. С# уровня "Написал лабу 3 раза".


Учись по нашим заданиям, мы тебя можем всерьез научить веб-программированию, у нас есть PHP включая продвинутые сложные задачи, JS, HTML/CSS, SQL. Но для начала конечно надо решить простые задачи из учебника. Хотя HTML ты можешь учить по задачам из ОП-поста параллеьно если есть время.

>>614338

> ( $startCredit x $percent ) + $commission;


Попробуй убрать повтор этого выражения.

> return $finalPayed;


> break;


return выходит из функции и из цикла, и break никогда не выполнится.

> ,5000


> 39999


Это надо выносить в переменные, а то менять не удобно.

Считает верно.

>>614341

Хорошо, все правильно.
#688 #618971
>>614181

Лучше бы в минус не уходить, а делать так:

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

>>614216

> Накопление процентов



> if ($startSumm >1000000) {


А если ровно миллион то не годится? По моему тут знак не совсем тот.

В остальном верно.

> Задача про рост


Все правильно.

> Ответ на любой вопрос


Замечательно, все работает.

> Генератор имён


> 1 => 'Бар',


> 2 => 'ки',


Мне кажется, что писать вручную номера, начиная с 1, утомительно. А что если надо вставить новый элемент в середину? Тут можно сделать либо так:

$letters = [1 => 'аа', 'бб', 'вв', ...]; // все элементы после первого пронумеруются автоматически

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

В остальном верно.

> Доделай шифрование до нормального уровня


Праивльно.

> Доделай расшифровку зашифрованного текста.


Хорошо, работает.

>>614292

> Лев Толстой


Совет: не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2, ... - так сразу видно что они относятся к одной вещи. Или можно использовать массив: $randomWords[1], $randowWords[2].

В остальном верно.

>Палиндром


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

> Ну как-бы смысл комментария ведь в этом. Чтобы после компиляции его не было видно.


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

> C++ уровня школьника знаю. Но толком ничего серьёзного не писал. С# уровня "Написал лабу 3 раза".


Учись по нашим заданиям, мы тебя можем всерьез научить веб-программированию, у нас есть PHP включая продвинутые сложные задачи, JS, HTML/CSS, SQL. Но для начала конечно надо решить простые задачи из учебника. Хотя HTML ты можешь учить по задачам из ОП-поста параллеьно если есть время.

>>614338

> ( $startCredit x $percent ) + $commission;


Попробуй убрать повтор этого выражения.

> return $finalPayed;


> break;


return выходит из функции и из цикла, и break никогда не выполнится.

> ,5000


> 39999


Это надо выносить в переменные, а то менять не удобно.

Считает верно.

>>614341

Хорошо, все правильно.
#689 #618972
>>614342

Есть таблица. http://mydevice.io/devices/

Я советую выбрать 1-2 значения, чтобы было 2-3 варианта: смартфон/планшет/дескторп или смартфон/десктоп. Для смартфона можно выбрать условие < 480, для планшета < 960. «Лопаты» лучше наверно считать смартфонами, они не очень широкие.

>>614358

Числа верные

>>614359

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

>>614360

Не хватает еще половины анона.

>>614369

Надо делать 2-3 варианта в зависимости от дизайна. Для некоторых простых сайтов хватит одного излома на ширине 600-700, для некоторых можно изламывать на 480 и 960.

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


да, либо картинки высокого разрешения либо вектор SVG.

>>614376

Третий банк по моему не самый дорогой. Там нет комиссии, отсюда экономия.

>>614391

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

>>614403

То что ты сделал hello world не значит что ты знаешь фреймворк. Такое легко раскусить на собеседовании.

>>614409

Можно поискать в сети статьи типа «лучшие адаптивные сайты» и посмотреть как у них сделано.

>>614410

Это меньше чем комиссия за год.

>>614435

Скорее всего там null потому что ты передаешь null. Проверь нет ли опечаток в имени переменных.

>>614437

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

>>614514

Не закрыта скобка у function () { .... (а закрывающей нет). Исправь выравнивание в коде и сразу станет видно.

> кто знает как задача на палиндром без функции решается?


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

>>614599

> $strawberryBankTotal = calc($creditBalance, $monthlyPayment, 1.02, 0, 0) + 7777;


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

>>614643

NAT чтобы виртуалка могла выходить в сеть. Чтобы ты мог видеть виртуалку и она могла выходить в сеть, есть 2 варианта:

1) host -only network + в винде в свойствах твоей настоящей сетевой карты выбрать расшаривание интернета с виртуальной картой. IP задавать не надо, он определится автоматически (винда организует в виртуальной сети выдачу IP через DHCP).

2) сделать 2 карточки для виртуалки: NAT + host-only network с вручную заданным IP.

> И еще как узнать диапозон айпи локальной сети? "и настройка виртуального сетевого адаптера так чтобы его IP-адрес входил в диапазон адресов локальной сети."


Имеется в виду у виртуального адаптера должен быть серый адрес из диапазона 10.x.x.x, 192.168.x.x. или 169 что-то там еще.
#689 #618972
>>614342

Есть таблица. http://mydevice.io/devices/

Я советую выбрать 1-2 значения, чтобы было 2-3 варианта: смартфон/планшет/дескторп или смартфон/десктоп. Для смартфона можно выбрать условие < 480, для планшета < 960. «Лопаты» лучше наверно считать смартфонами, они не очень широкие.

>>614358

Числа верные

>>614359

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

>>614360

Не хватает еще половины анона.

>>614369

Надо делать 2-3 варианта в зависимости от дизайна. Для некоторых простых сайтов хватит одного излома на ширине 600-700, для некоторых можно изламывать на 480 и 960.

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


да, либо картинки высокого разрешения либо вектор SVG.

>>614376

Третий банк по моему не самый дорогой. Там нет комиссии, отсюда экономия.

>>614391

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

>>614403

То что ты сделал hello world не значит что ты знаешь фреймворк. Такое легко раскусить на собеседовании.

>>614409

Можно поискать в сети статьи типа «лучшие адаптивные сайты» и посмотреть как у них сделано.

>>614410

Это меньше чем комиссия за год.

>>614435

Скорее всего там null потому что ты передаешь null. Проверь нет ли опечаток в имени переменных.

>>614437

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

>>614514

Не закрыта скобка у function () { .... (а закрывающей нет). Исправь выравнивание в коде и сразу станет видно.

> кто знает как задача на палиндром без функции решается?


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

>>614599

> $strawberryBankTotal = calc($creditBalance, $monthlyPayment, 1.02, 0, 0) + 7777;


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

>>614643

NAT чтобы виртуалка могла выходить в сеть. Чтобы ты мог видеть виртуалку и она могла выходить в сеть, есть 2 варианта:

1) host -only network + в винде в свойствах твоей настоящей сетевой карты выбрать расшаривание интернета с виртуальной картой. IP задавать не надо, он определится автоматически (винда организует в виртуальной сети выдачу IP через DHCP).

2) сделать 2 карточки для виртуалки: NAT + host-only network с вручную заданным IP.

> И еще как узнать диапозон айпи локальной сети? "и настройка виртуального сетевого адаптера так чтобы его IP-адрес входил в диапазон адресов локальной сети."


Имеется в виду у виртуального адаптера должен быть серый адрес из диапазона 10.x.x.x, 192.168.x.x. или 169 что-то там еще.
#690 #618973
>>614653

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

>>614696

Так и надо

>>614761

Открой отладчик в бразере Ctrl + sHift + I на вкладке Network и посмотри.

>>614808

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

>>614961

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

>>614967

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

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

> (\\s|\\-|\\(|\\))


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

>>614973

Сокращать не надо. Я бы только заменил вопрос на звездочку, так как пробелов может быть и несколбько. В остальном верно.

>>614995

Просто уникальный номер соединения. Можно просмотреть все активные сеансы через SHOW FULL PROESSLIST и убить сеанс по номеру через KILL 123;

>>614997

Это (расположение файлов таблиц) задается в файле my.ini в папке с mySQL. И возможно выбирается при установке, не помню.
#690 #618973
>>614653

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

>>614696

Так и надо

>>614761

Открой отладчик в бразере Ctrl + sHift + I на вкладке Network и посмотри.

>>614808

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

>>614961

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

>>614967

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

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

> (\\s|\\-|\\(|\\))


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

>>614973

Сокращать не надо. Я бы только заменил вопрос на звездочку, так как пробелов может быть и несколбько. В остальном верно.

>>614995

Просто уникальный номер соединения. Можно просмотреть все активные сеансы через SHOW FULL PROESSLIST и убить сеанс по номеру через KILL 123;

>>614997

Это (расположение файлов таблиц) задается в файле my.ini в папке с mySQL. И возможно выбирается при установке, не помню.
#691 #618974
Все, проверил всех за 28 декабря и за половину 29-го, остальные - завтра.
#692 #618995
https://telegram.me/joinchat/BxAn5ASN8mv5h_KmZ-Y9rA
ПХП конфа богов. Уже 13 юзеров. Рофлы, филиал /b, ценный джун из Германии с двух летним опытом пхп, джава даун, сисярп даун, выходцы из /b и т.д.
Ждёмс.
#693 #618996
>>618974
Ты ОП? Заходи в пхп конфу. Там сквозь 1к сообщений много вопросов по пхп проскакивает.
#694 #618999
>>618995
Постят прон целый день. Охуенные специалисты. Даже у /b конфа лучше.
#695 #619002
>>618999

> 0 контента от самого


> пиздит на прон


Лил. Ну задавай вопрос про пых - тебе ответят знающие в конфе. Пока нет вопросов - можно и прон постить.
Onyx #696 #619029
>>618970

> > Игра в броски кубиков


> Неплохо, пара замечаний:


> - нет проверки на даблы


> - не называй переменные с большой буквы, сбольшой буквы пишут классы и константы


Исправил, надеюсь правильно понял условия. Не совсем понятно нужно ли прекращать игру когда выпал абл, или всё-равно побеждает сумма чисел?
https://ideone.com/BmoCvk

>Все верно, но пиши переменные с первой маленькой буквы.


Мне в треде уже сказали, исправляюсь. Спасибо.

>Подумай как избавиться от повтора.


Эм, они не повторяются, это разные строки с разными формулами.
>>618971

>А если ровно миллион то не годится? По моему тут знак не совсем тот.


А что ели >=
>>618971
Судя по алгоритму этой задачи, нет никакой разницы между серединой и концом(кроме конечнодополнительной работы если вставлять в середину, при генерации же - разницы нет). Всё-равно рандом.
Но таки да, если задача именно в универсальности - твой код намного лучше.

>$letters = [1 => 'аа', 'бб', 'вв', ...]


Крутая уличная магия!
Внедрил в код, можешь не смотреть, 1 строку всего поправил.
https://ideone.com/q09F2G

>не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2


Так писать или не писать? Что-то не понял.

>после первого несовпадения можно выходить из цикла


Непонятно тут. А я разьве не так сделал? или break не прерывает цикл?
Onyx #696 #619029
>>618970

> > Игра в броски кубиков


> Неплохо, пара замечаний:


> - нет проверки на даблы


> - не называй переменные с большой буквы, сбольшой буквы пишут классы и константы


Исправил, надеюсь правильно понял условия. Не совсем понятно нужно ли прекращать игру когда выпал абл, или всё-равно побеждает сумма чисел?
https://ideone.com/BmoCvk

>Все верно, но пиши переменные с первой маленькой буквы.


Мне в треде уже сказали, исправляюсь. Спасибо.

>Подумай как избавиться от повтора.


Эм, они не повторяются, это разные строки с разными формулами.
>>618971

>А если ровно миллион то не годится? По моему тут знак не совсем тот.


А что ели >=
>>618971
Судя по алгоритму этой задачи, нет никакой разницы между серединой и концом(кроме конечнодополнительной работы если вставлять в середину, при генерации же - разницы нет). Всё-равно рандом.
Но таки да, если задача именно в универсальности - твой код намного лучше.

>$letters = [1 => 'аа', 'бб', 'вв', ...]


Крутая уличная магия!
Внедрил в код, можешь не смотреть, 1 строку всего поправил.
https://ideone.com/q09F2G

>не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2


Так писать или не писать? Что-то не понял.

>после первого несовпадения можно выходить из цикла


Непонятно тут. А я разьве не так сделал? или break не прерывает цикл?
Onyx #697 #619032
>>618971

> ,5000


> 39999


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


Наоборот! Если добавится ещё банк сразу есть местечко. Не придётся весь код переписывать, а только данные вбить.
#698 #619076
>>619032
Ответ уровня "мне несложно и копипастнуть 10 раз".
Лучше всегда использовать переменные для постоянных элементов.
Так ты и кэмл кейс можешь не использовать - писать переменные с заглавных букв, всё и так удобно и работает.
Onyx #699 #619088
>>619076

>Лучше всегда использовать переменные для постоянных элементов.


Но ведь он не постоянный. В 2 случаях он 0, в одном 7к.
#700 #619094
>>619088
Ты про плату за открытие счета говоришь, а я про вообще все переменные, они у тебя в функции просто цифрами стояли, насколько я помню.
Onyx #701 #619101
>>619094

>они у тебя в функции просто цифрами стояли


Вот мой код.
http://ideone.com/BqY2lL
Вот вызовы функций.
$homoCreditbankTotal=getTotalSum(1.04,500 ,0 ,5000,39999,0);
\t $softbankTotal=getTotalSum(1.03,1000,0 ,5000,39999,0);
$strawberryBankTotal=getTotalSum(1.02,0, 7777,5000,39999,0);
По моему если добавится 2chBank с комиссией 9001, проще допилить новый вызов функции,
$svachBankTotal=getTotalSum(1.01,0, 9000,5000,39999,0);
чем добавлять переменную и полностью перелопачивать код учитывая параметры двачебанка? Или я неправ?
#702 #619168
>>619101
Так анон как платил 5к, так и продолжит, его долг тоже остаётся прежним. Эти цифры и желательно сделать переменными. Надо максимально упрощать код таким вот образом.
#703 #619172
Есть кто решил новый вариант 12 задачи по верстке? Не могу придумать как связать заголовки табов с содержимым.
#704 #619179
А почему нет информации про html и javascript? Мне что, пиздовать в другие треды? Лол.
#705 #619184
Только вкатываюсь. Надо до последней версии обновляться? Искаропки стоит 5.5.30.
Onyx #706 #619191
>>619168
Я понять не могу, каким макаром это упростит код? Введётся новая переменная его только усложнит, раз надо будет дополнительно и её обсчитывать.
#707 #619192
>>619179
Позор не читавшему оп-пост до конца.
#708 #619193
>>619184
Да, сразу ставь php 7.
#709 #619196
>>619191
А если увеличивается сумма кредита, то так же каждый раз подставлять её в каждую функцию?
Не проще ли ввести $creditBalance перед функциями, а потом там менять? То же самое и с платой анона в месяц, если она вдруг изменится.
А остальные значения уже различаются, там переменные и не нужны.
#710 #619201
Может уже перекат все-таки?
#711 #619204
>>619201
Оп сказал, что перекат завтра сделает.
Onyx #712 #619207
>>619196
Чёт не понимаю я тебя совсем. Ты код мой точно видел хоть?
$homoCreditbankTotal=getTotalSum(1.04,500 ,0 ,5000,39999,0);
\t $softbankTotal=getTotalSum(1.03,1000,0 ,5000,39999,0);
$strawberryBankTotal=getTotalSum(1.02,0, 7777,5000,39999,0);

Под твои параметры можно просто сделать так.
$plataAnona=5000;

$homoCreditbankTotal=getTotalSum(1.04,500 ,0 ,$plataAnona,39999,0);
\t $softbankTotal=getTotalSum(1.03,1000,0 ,$plataAnona,39999,0);
$strawberryBankTotal=getTotalSum(1.02,0, 7777,$plataAnona,39999,0);
#713 #619216
>>618842
Да, сейчас мне это очевидно. А сначала я думал, что там берётся одна часть и весь текст прогоняется по ней, когда функция у нас preg_match_all. Жаль, как-то это несуразно.
>>618880

>А если сделать вот так (?<=(,жы))(?<=(жы))


Не могу прочитать, что это означает? Не встречал таких регулярных выражений чего-то.
Если сделать именно регулярку для поиска ",жы", то сразу предчувствую, что ОП разнесёт всё в клочья, в пух и прах, а ещё и уничтожит на месте. Тогда ведь надо будет регулярку делать и для ",шы", для прочих подобных ошибок.
Думаю, что лучше как-нибудь циклом регулярки из массива подставлять. Чтоб одна регулярка полностью проходила по тексту, затем другая регулярка полностью проходила т.д. Только у меня так не получилось, я так и хотел же сделать с самого начала.
>>618889

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


Так звучит как-то сложно для меня. По идее просто же брать из массива регулярки и подставлять, каждый раз заново проверяя текст, - так ведь должно работать.
Это у меня было, когда я мутил цикл с $possibleErrors[$i]['pattern'] - вот так пытался подставлять регулярки. В принципе, это возможно, надо только разобраться.
Так и не сделал эту задачу.
А ты её решил как-нибудь, братишка? Я не встречал ещё пока чьего-либо решения в тредах. Моё было, когда я в регулярку подставил прибавление символов вперед и назад от ошибки, но это чушь.
#714 #619218
>>619207
О том и толкую. А ещё и переменную для 39999 рублей.
Так вернее и надёжнее будет - по-любому.
Других-то претензий и не было, кроме ухода в минус калькулятора.
#715 #619220
>>619216

>А ты её решил как-нибудь, братишка?


Год назад наверное уже.
#716 #619227
>>619216

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


http://phpclub.ru/detail/article/regexp_2

>Чтоб одна регулярка полностью проходила по тексту, затем другая регулярка полностью проходила т.д.


А ты не так делал? Это же очевидно, вот он и выход.
Onyx #717 #619229
>>619218
Это было настолько очевидно, что я даже не понял сразу что ты именно это предлагаешь.
#718 #619230
>>619220
А ОП проверял-одобрял?
Тут уже сталкивались ведь с тем, что считали своё решение верным, а потом спустя 100500 постов получали по лбу с оттягом от ОПа.
#719 #619232
>>619230
ОП проверял и подтверждал. Я пороюсь попозже, где то может еще лежит решение. Даже больше года назад я это задание делал.
#720 #619236
>>619227

>А ты не так делал? Это же очевидно, вот он и выход


Ахаха, ну вот, а ты меня СОВРАТИЛ С ПУТИ ИСТИННОГО!!1
Это когда я стал через foreach делать и тупил долго.
Надо будет снова взяться, но пока отдыхаю.
Вот так у меня выглядело всё:
for ($i=0; $i < $number; $i++) {
\tif (preg_match($possibleErrors[$i]['pattern'], $matches[$i])) { /Достаём из массива регулярку, подставляем её в функцию, проверяем найденные ошибки в массиве $matches на соответствие/
\t\t$message = $possibleErrors[$i]['message']; /Выводим соответствующее правило из массива (содержание)/
\t\t$pattern = $matches[$i];
\t\techo "{$pattern} и {$message}\n";
}
Там только цикл надо ограничивать тогда не количеством ошибок, а количеством регулярок. Иначе, как подсказали, там начинают подставляться регулярки, которых нет, когда до седьмой доходит.
#721 #619238
>>619236

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


То есть ты будешь проверять только первые 7 ошибок? А остальные тупо проигнорируешь?
#722 #619239
>>619236
То есть там не в массиве с ошибками надо проверять, а в самом тексте, получается.

>>619232
Аа, неплохо тогда было бы, да.
#723 #619240
>>619238
Там нужно одной регуляркой полностью весь текст проверить - на все ошибки, какие встретятся, с помощью preg_match_all.
И так каждой регуляркой.
Тогда такое вот пересечение ошибок, как ",жы", должно - по идее - уже не беспокоить.
Как-то так надо делать, наверное.
#724 #619246
>>619240
Ты просто в сообщении выше preg_match написал.
#725 #619255
>>619246
Аа, да, это я скопировал то, что у меня было в одном из первых вариантов.
Там неверно то, что для рассмотрения массив с ошибками берётся, там ведь нужно не только выводить ошибку и правило, но и кусок текста с ошибкой.
Всё равно цикл нужен внутри для рассмотрения уже текста и выискивания кусков с ошибками оттуда.
Ну или сделать выборку куска текста сразу с ошибкой прямо регуляркой, как я тут делал: ideone.com/BXho8s
Но я сначала попробую сделать так, как уже начал после твоих советов делать, с неразличением пересечения ошибок. Я уже не успокоюсь теперь ведь.
#726 #619343
Какой лучше выбрать следующий шаг после освоения OOP и MVC: курить какой-нибудь фреймворк или лучше CMSки?
#727 #619387
Может кто-нибудь объяснить простым языком что такое фреймворк? Вкатываюсь потихоньку, учу по ОПовским материалам язык, но никак не возьму в толк, что такое фреймворк. Определение на вики оставляет меня в недоумении.
#728 #619410
>>619387
Ты уже знаешь, что такое ООП?
#729 #619413
Анон с задачами. Дай еще какую-нибудь задачу.
#730 #619415
Какой же уебищный и корявый этот css блять. Поясните по хардкору, на пике один блок внутри другого, ни у одного из них нет никаких отступов, почему тогда блять сверху есть отступ?! Сука!
12 Кб, 274x87
#731 #619416
>>619415
пик забыл прикрепить
#732 #619418
>>619416
У body по умолчанию есть отступ.
#733 #619422
>>619418
Ну это не в боди второй блок лежит. Короче структура такая:
боди>другой блок>блок с "ооо агросервис". У последних двух же нет никаких отступов, какого тогда хуя сверху там появляется отступ?
#734 #619425
>>619422
Короче вот по твоему вопросу как раз:
http://xiper.net/collect/html-and-css-tricks/content/img-in-the-block
#735 #619430
>>619422
боди>другой блок>>>>>>>>говно>>>>>>>>>>>>>>>>>>моча>>>>>>>>>>>>>>>>>>>>>>>>блок с "ооо агросервис"

не удержался
#736 #619432
>>619413
Бамп
#737 #619437
>>619432
Что, опять? У тебя целый учебник ОПа нерешенный.
#738 #619440
>>619416
Такова структура шрифта ещё.
Если бы "АГРОСЕРВИС" был бы написан капсом, то было бы так же ровно, как и "ООО", безо всяких отступов.
#739 #619441
>>619437
Я на студентах сижу. И жду ответ ОПа, иногда делаю там что-то. Но я хочу геморойные задачи как раньше. По типу банкомата.
#740 #619442
>>619441
Так это не ко мне вопрос, мои-то задачи чтобы подтянуть знания анона, который застрял на регулярках, для тебя они будут элементарными. А тебе я бы посоветовал открыть учебник по жс, читать его и делать задачи оттуда, пока оп проверяет твоих студентов. Всяко полезнее будет.
#741 #619444
>>619172
Что никто не решил?
#742 #619445
>>619442
Я его прошел уже давно.
#743 #619446
>>619387
Я сам вкатываюсь и пока не смотрел, но вроде это что-то типа CMS, только надо ещё собирать сами модули. Пространство для внедрения разных штук больше, наверное. Можно самому решать, какие модули будут появляться, а какие нет. Я хз, короче, азаза))0)))
#744 #619447
>>619445
Что, прям весь? И задачи ОПа на жс все решил? По DOMу Тоже?
#745 #619448
>>619447
Да, я и сапера уже накатал.
#746 #619449
>>619441
А задачу про проверку ошибок и исправление их ты сделал?
Покажи своё решение, быстро и решительно!

Мимо анончик с регулярками в жопе
#747 #619450
>>619449
Сделал, я делал больше года назад. Надо искать. Но и зачем скидывать готовое решение? Тебе будет уже не интересно решать.
#748 #619452
>>619448
Тогда это я у тебя задачи должен просить, а не наоборот.
#749 #619455
>>619448
работу ищи тогда, чего тут сидишь?
#750 #619457
>>619455
Я работаю в веб-студии. Я делаю задачу со студентами, поэтому и сижу. Хочу нормальную работу найти.
#751 #619459
>>619450
А ОП был удовлетворён решением?
Мне всё равно интересно, я давно с ней вожусь.
Сейчас с телефона и отдыхаю, но всё равно к ней возвращаюсь мысленно.
Я же её решил говнокодом и копипастой, ОП пока не проверил решение, но там уже ясно, что ерунда.
#752 #619460
>>619459
Да, он был доволен.
#753 #619465
>>619460
Завидую белой завистью, бро, я не шучу.
Эх, буду работать и изучать, что ещё остаётся.

Кстати, другой бро, который придумывал задачки, вот моя поделка с копипастой на исправление текста: http://ideone.com/oHPNqU
Вставил туда сейчас ",жы" - всё исправляет благодаря тому, что регулярки по отдельности проходят по тексту.
Там можно и циклом это всё сделать, причём это всё просто даже для меня.
Я потом это применю для замены, пока надо сделать нормальный вывод.
Ну, я просто к тому, что всё работать будет с отдельным проходом регулярок, это уже ясно.
#754 #619468
Что вы так дрочите на этого ОПа? Вы же понимаете, что не все, что он говорит - истина и идеальное решение?
#755 #619469
>>619468
Нет, все.
#756 #619471
>>619468
Нет, дрочим.
#757 #619473
>>619468
Ценность Опа в том, что он может указать на явные косяки и направить в какую сторону копать. Ну и если тебя кажется что Оп не прав в каких то вопросах, выскажи иной вариант, только аргументированно.
#758 #619477
>>619457
А веб-студии вы чем занимаетесь? Я диванный, правда интересно. Почему не считаешь свою работу нормальной?
234 Кб, 1256x978
#759 #619490
Объясните нубу. Делаю лабы специалиста в php storm и дошел до момента где он делит файл index.php на подфайлы в папку inc, а потом вставляет их через require_once. Все что я пишу через require_once в браузере потом не видно, когда открываю страницу index.php.
#760 #619495
>>619490
сервер отдает браузеру html документ. Все что ты делаешь в пхп сначала обрабатывает сервер и так сказать компилит хтмл страницу для браузера
#761 #619497
>>619490
Попробуй вместо <? require_once писать <?php require_once. Я вчера с подобной проблемой ебался когда переносил сайт с Денвера на поставленный руками сервер.
#762 #619501
>>619477
Потому что joomla, верстание в основном. Хочу в серьезный проект.
#763 #619502
>>619501
Сложная верстка? Адаптивная, все дела или обычная?
#764 #619503
Хоть кто-нибудь находил работу, занимаясь с нуля по ОПовским задачкам?
#765 #619505
>>619502
От требований заказчика зависит. Если хочет, то делаем, если нет, то не делаем.
#766 #619506
>>619503
Да, тут много человек уже.
#767 #619507
#768 #619509
>>619506
>>619507
Просто я чмо 25 лвл без вышки, такие ещё имеют шансы вкатиться?
#769 #619510
>>619509
Да, наизи.
#770 #619518
>>619509
Почитай, вдруг вдохновишься
http://benjamindudko.livejournal.com/514.html
#771 #619519
Господа, пытаюсь понять принцип вырезание строки. Пишу в шторме

$frase = "Hello!";
echo mb_substr($frase, 0, 3);

Выдаёт ошибку
Fatal error: Uncaught Error: Call to undefined function mb_substr()

в чём проблема?
#772 #619521
>>619519
в ideone.com всё работает нормально
#773 #619522
>>619519
В php.ini надо настройки покрутить.
#774 #619523
>>619522
А где это и как это делается? Заметил, что без "mb_" работает как надо. Зачем оно нужно?
#776 #619526
>>619501
лол говноед
#777 #619527
>>619503
Нет, все это наебалово, даже не пытайся.
#778 #619534
>>619524
спасибо... только не могу ума приложить, как включить это в php.ini
#779 #619535
>>619519
А просто mb_internal_encoding('utf-8'); в начале скрипта не решит проблему?
#780 #619539
>>619534
Открой php.ini и раскомментируй если заккоментированно
#781 #619542
>>619526
Я знаю, но я могу себе позволить снимать квартиру и жить в свое удовольствие.
#782 #619554
>>613285
Оп исправил почти все твои замечания
http://integer64.github.io/site-layout/
Задача 10:

>>Почему width 100%?


Гугль дал такое решение для адаптивности картинок
Задача 11:

>>перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом.


Реализовал, добавил для checkbox на :focus бордер тень,что бы было видно.
Задача 12:
Переделал, совсем без id у меня не получилось, надо было как то input с label связать. Может быть есть другое решение.
Связал вкладки и контент вкладок через data-атрибуты. Хотелось бы в CSS полноценные регулярные выражения, тогда решение было бы более эстетичное.
Возник вопрос по поводу длинны названия вкладки: три раза прочитал, так и не понял что требуется, разжуй пожалуйста, для самых глупеньких вроде меня.
#783 #619561
>>619497
Помогло, спасибо.
#784 #619566
>>619535
не

>>619539
Расскоментировал. extension=php_mbstring.dll, всё работает!
55 Кб, 654x594
#785 #619583
Решил таки попробовать что-нибудь выучить и начал с пхп.
Решил несколько задач
Первая http://pastebin.com/Q5CLkzck
Вторая http://pastebin.com/6w0GqbWt
Третья http://pastebin.com/G4kUKzeL
Стоило ли их вообще тут постить, лол
#786 #619605
>>619583
Простые первые задачи просты.
Там ты вряд ли и ошибся.
Вот посмотрим дальше на тебя.
#787 #619610
>>619583
Хотя нет, лол:
if ($anonSum > $compSum) {
echo "Победил анон";
}
if ($anonSum < $compSum) {
echo "Победил компьютер";
}
If ($anonSum == $compSum) {
echo "Ничья";
}
exit();
#788 #619614
>>619583
На ideone и давай ссылку, чё ты как не родной?
#789 #619621
>>619614
Как-то решил их и не оставил айдиона ссылки
#790 #619629
>>619610
exit(); не нужен
#791 #619635
>>619629
Понял, спасибо
#792 #619642
>>619415
Это не маргин коллансинг (схлопывание границ)? Верхняя граница заголовка проникает сквозь границу родителя.
#793 #619650
>>619642
Нет, это инлайн элемент и его обычное поведение.
#794 #619651
Как правильно делать на CSS на коммерческих сайтах, картиночки справой стороны или снизу у которых текст, типа 15 лет на рынке, самая лучшая методика, профессиональные кадры и т.д., такое кажется тизерами называется, такие есть и в шаблоне ОПа, там где андроид нарисован и другие картиночки. Так вот, как их правильно делать, просто как отдельными картинками и рядом текст? Или как фоновое изображение в дивах? Стоит ли делать из них специальный текст, текст из иконок?
#796 #619666
во имя Христа, перекат?
#797 #619668
>>619666

>666


>во имя Христа

246 Кб, 1276x938
#798 #619742
А почему я не могу получить параметр из тела запроса в phpstorm? 505 ошибка в браузере и неопределенный параметр в консоли внизу пикрелейтеда.
#799 #619745
>>619742
*502 ошибка
#800 #619807
Аноны, я не пойму, а как можно найти отсутствие пробела между запятой и союзом "а" или "но", кроме как такой регуляркой: '/,[^\\s]но\\s/ui'.
Но так не работает, не ищет так.
#801 #619812
>>619807
Вот так, теперь я понял: [^\\sа-яё]но\\s
74 Кб, 604x453
#802 #619815
>>619807

>аноны



>>619812
Наркоман?
/,но\s/u
426 Кб, 600x398
#803 #619816
Однако скрипт проверки на ошибки (пока совсем топорный вариант, но хоть на что-то похоже): https://ideone.com/vSnFKo
Далее попробую с помощью функций вывести кусок текста с ошибкой, а не с помощью регулярок.

>>619815
Сюка, аж в голос!... Действительно же, блиять...
#804 #619817
>>618205
Не стоит. Интеграция IDE с Php сервером нужна только для использования xdebug. А он жутко медленный, если trace включается с первой строчки кода
Тред закрыт #805 #619877
Этот тред закрыт. Не пишите здесь больше. Переходите в новый >>619873 (OP)

Тем, кому я не ответил, я все прочту и проверю в ближайшие дня 2-3. ОПу тоже ведь надо отдыхать иногда.
Ответы #806 #621467
>>615206

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

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

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

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

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

- возможность при некоторых ошибках повторить запрос

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

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

>>615210

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

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

>>615422

Очень наивное рассуждение.
Ответы #806 #621467
>>615206

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

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

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

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

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

- возможность при некоторых ошибках повторить запрос

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

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

>>615210

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

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

>>615422

Очень наивное рассуждение.
Ответы #807 #621468
>>615532

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

> [a-z0-9_+.\\-]


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

В остальном все верно.

>>615605

> .{3,5}((ж|ш)ы)


Не найдет слово Жыр в самом начале текста.

> (\\,(а|но)


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

> [а-яё]


Лучше добавить сюда и латинские буквы.

> $textClean = preg_replace($regexpClean, "{$regexpClean1}", $text);


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

>>615730

Да, а еще он сам ставит зависимости той библиотеки и настраивает подключение ее файлов и классов.

Также, это позволяет не выгружать сторонние библиотеки, когда ты выложишь код на гитхаб, а только свой код + файл composer.json.

>>615735

Массив вида

[
регулярка => пояснение,
регулярка => пояснение,
регулярка => пояснение,
...
]

>>615801

Тебе нужен один из готовых алгоритмов поиска пути: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8

Дейкстра довольно простой.

>>616189

Бекапить наверно лучше через mysqldump - она позволяет делать это при работающем сервере и формат получается читабельный.

>>616192

Те же замечания что к решению >>615605 + дополнительно:

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

- $regexpClean = '/\\,/';
- $regexpClean1 = '/\\;/';
- $regexpClean2 = '/\\!/';
Это все можно объединить в одно выражение, а в выражении для замены использовать $0 .. $9 . Почитай мануал http://php.net/manual/ru/function.preg-replace.php

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

- $regexpClean5 = '/жы/ui';
- $regexpClean6 = '/шы/ui';
Это тоже можно объединить вместе.

Формы слова «зделал» тоже можно объединить.

> $regexpClean13 = '/\\s\\s/ui';


Тут лучше исправлять не ровно 2, а любое число пробелов.

>>616251

Я с ним не работал.

>>616334

Бессодержательный и бессмысленный пост.

>>616380

по моему в конфиге есть опция вроде 'debug' => true/false
Ответы #807 #621468
>>615532

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

> [a-z0-9_+.\\-]


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

В остальном все верно.

>>615605

> .{3,5}((ж|ш)ы)


Не найдет слово Жыр в самом начале текста.

> (\\,(а|но)


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

> [а-яё]


Лучше добавить сюда и латинские буквы.

> $textClean = preg_replace($regexpClean, "{$regexpClean1}", $text);


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

>>615730

Да, а еще он сам ставит зависимости той библиотеки и настраивает подключение ее файлов и классов.

Также, это позволяет не выгружать сторонние библиотеки, когда ты выложишь код на гитхаб, а только свой код + файл composer.json.

>>615735

Массив вида

[
регулярка => пояснение,
регулярка => пояснение,
регулярка => пояснение,
...
]

>>615801

Тебе нужен один из готовых алгоритмов поиска пути: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8

Дейкстра довольно простой.

>>616189

Бекапить наверно лучше через mysqldump - она позволяет делать это при работающем сервере и формат получается читабельный.

>>616192

Те же замечания что к решению >>615605 + дополнительно:

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

- $regexpClean = '/\\,/';
- $regexpClean1 = '/\\;/';
- $regexpClean2 = '/\\!/';
Это все можно объединить в одно выражение, а в выражении для замены использовать $0 .. $9 . Почитай мануал http://php.net/manual/ru/function.preg-replace.php

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

- $regexpClean5 = '/жы/ui';
- $regexpClean6 = '/шы/ui';
Это тоже можно объединить вместе.

Формы слова «зделал» тоже можно объединить.

> $regexpClean13 = '/\\s\\s/ui';


Тут лучше исправлять не ровно 2, а любое число пробелов.

>>616251

Я с ним не работал.

>>616334

Бессодержательный и бессмысленный пост.

>>616380

по моему в конфиге есть опция вроде 'debug' => true/false
Поиск пути #808 #621469
>>616420

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

> $transportName[$paths[$path[$i]][$path[$i+1]]['by']]


Такие сложные выражения надо упрощать, например вынеся $path[$i] и $path[$i+1] в переменные.

> $i!=(count($path)-1)


Лучше использовать <, а то если $path пустой, будет бесконечный цикл.

Также, было бы хорошо собрать код инициализации (foreach($paths as $graph => $value) ... $time[$graph] = $inf;) тоже в отдельную функцию.

> $inf = 99999;


В PHP (и вообще в компьютерной математике) есть настоящая бесконечность: константа INF. Ее можно сравнивать с числами через < или >, нельзя только сравнивать 2 бесконечности между собой.

> foreach($time as $t => $value) {


> if(in_array($t, $visited)) {


> unset($time[$t]);


Чтобы найти элементы одного массива, которых нет в другом, есть функции array_diff и array_diff_key

> function Dijkstra($paths, $pos, $time, $visited, $start, $end, $path) {


> return Dijkstra($paths, $pos, $time, $visited, $start, $end, $path);


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

> foreach($paths[$pos] as $Graph => $value) {


> if($time[$pos] == $time[$Graph] + $value['time']) {


Тут очень ненадежно сдеално, а что если из узла выходит несколько связей с одинаковым временем? Ты не сможешь выбрать нужную. Чтобы запомнить оптимальный путь, надо сделать массив $next который хранит элементы вида [ вершина => предыдущая вершина ] и который меняется когда меняется массив $time (если мы нашли более оптимальный путь). По нему можно восстановить оптимальный путь.

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

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

> as $g => $v)



>>616427

Я думаю дело в том что empty это ключевое слово языка: http://php.net/manual/ru/reserved.keywords.php

>>616443

Не знаю.

>>616654

Я бы убрал core, и вместо одной папки models сделал разные папки для разных классов: для валидатров, сущностей, хелперов, классов работы с БД.

>>616711

Это скорее всего неправильно так как обычно неймспейс совпадает с именами папок.
Поиск пути #808 #621469
>>616420

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

> $transportName[$paths[$path[$i]][$path[$i+1]]['by']]


Такие сложные выражения надо упрощать, например вынеся $path[$i] и $path[$i+1] в переменные.

> $i!=(count($path)-1)


Лучше использовать <, а то если $path пустой, будет бесконечный цикл.

Также, было бы хорошо собрать код инициализации (foreach($paths as $graph => $value) ... $time[$graph] = $inf;) тоже в отдельную функцию.

> $inf = 99999;


В PHP (и вообще в компьютерной математике) есть настоящая бесконечность: константа INF. Ее можно сравнивать с числами через < или >, нельзя только сравнивать 2 бесконечности между собой.

> foreach($time as $t => $value) {


> if(in_array($t, $visited)) {


> unset($time[$t]);


Чтобы найти элементы одного массива, которых нет в другом, есть функции array_diff и array_diff_key

> function Dijkstra($paths, $pos, $time, $visited, $start, $end, $path) {


> return Dijkstra($paths, $pos, $time, $visited, $start, $end, $path);


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

> foreach($paths[$pos] as $Graph => $value) {


> if($time[$pos] == $time[$Graph] + $value['time']) {


Тут очень ненадежно сдеално, а что если из узла выходит несколько связей с одинаковым временем? Ты не сможешь выбрать нужную. Чтобы запомнить оптимальный путь, надо сделать массив $next который хранит элементы вида [ вершина => предыдущая вершина ] и который меняется когда меняется массив $time (если мы нашли более оптимальный путь). По нему можно восстановить оптимальный путь.

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

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

> as $g => $v)



>>616427

Я думаю дело в том что empty это ключевое слово языка: http://php.net/manual/ru/reserved.keywords.php

>>616443

Не знаю.

>>616654

Я бы убрал core, и вместо одной папки models сделал разные папки для разных классов: для валидатров, сущностей, хелперов, классов работы с БД.

>>616711

Это скорее всего неправильно так как обычно неймспейс совпадает с именами папок.
getId3, калькулятор #809 #621470
>>616725

Судя по названию module.archive.gzip.php она пытается в памяти распаковать архив. Не передавай этой библиотеке архивы на распаковку либо посмотри опции, может есть опция запрещающая это.

>>616748

Считает-то непраивильно. Должно получиться 23. И ответ не пишется.

> echo " Ответ: $imput . $result";


Тут надо выходить из цикла. Алсо у тебя по моему написано iMput

> if($char == 'x' || $char == '+' || $char == '-' || $char == '=') {


Нет деления

> }if($op == '=') {


на равно надо реагировать сразу, а не на следующем знаке

> "$result"


Зачем кавычки?
Кошки-мышки #810 #621471
>>616778

> 1)Сложный цикл for для мышей где 4 направления-копипаста делать(он там закомментирован)?


Ради 4 направлений наверно не стоит.

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


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


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

> 3)>Попробуй использовать тут array_filter с анонимной функцией, мне кажется будет чуть проще.


> Я сделал это для мышей и собак, но в кошках у меня три условия для массива(рядом ли мышка? можно ли походить? можно ли съесть?). Делать ли отдельный метод который совместит ли эти три условия?


Нет, не требуется.

> 4) canIMoveTo у меня теперь с одним параметром содержащем две координаты, вместо двух наглядных параметров x и y, потому что не знаю как передать два параметра


Не стоило canIMove переделывать ради array_filter. Аргументы функции выбираются из логики, тут логично чтобы аргументами были (x, y), то есть даем координаты и получаем ответ. Для совместимости с array_filter можно либо сделать метод в Animal, либо использовать анонимную функцию (так даже наверно лучше):

array_filter($x, function (...) use (...) {
...
});

> 5)Правильно ли я передаю анонимные функции? array($this, "функций").


Правильно, но это не анонимная функция, а ссылка ан метод объекта. Анонимная функция это http://php.net/manual/ru/functions.anonymous.php

> 6)Как быть со свойствам символов и дальности обзора? Делать ли их через _construct или указывать в свойствах?


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

> 1)В методе startGame во внутреннем цикле foreach у меня был баг. Если следующий элемент в цикле был съеден, он не ходит, однако не ходят и все следующие элементы за ним. Они будут ходить только в следующем ходу. Поэтому foreach я поменял на for с новым последовательным порядком индексов через функцию array_values.


Можно и так. А можно сделать метод у животного который говорит живо оно еще или уже нет.

> 2)Переделал функцию searchNearbyCorner. Теперь она называется countStepsToCorners и считает сумму свободного пространства.


ок.

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

> //Метод возвращения символа для вывода на карте


> public function getSymbol()


> {


> return $this->symbol;


У тебя это будет работать только если в классе-потомке определено значения поля symbol. Но где гарантия что его определят? Как сказать программисту что его надо определить?

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

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

> mt_rand(0, count($possibleMoves) - 1


Есть еще array_rand()

> protected function searchBestMove(array $foundAnimals, array $possibleMoves, callable $countPoints)


> $points = $countPoints($foundAnimals, $move);


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

> public static $counterOfSymbols = 1;


Почему public?

> $this->vision = 4;


Можно также просто написать в классе protected $vision = 4; Это не ошибка.

> $arrows[] = new Move($this->x, $this->y - 1);


> $arrows[] = new Move($this->x + 1, $this->y);



Тут можно еще записать короче:

$moves = [
new ...,
new ...,
new ...
];

Можно конечно и как у тебя.

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

То же самое для кошки - она может бояться сделать ход если рядом много собак.

> if (!count($foundAnimals["Cat"])) {


> throw new Exception("Ошибка. Должна быть как минимум одна кошка.");


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

> -abs(min($move->x - $nearbyEnemy->x, $move->y - $nearbyEnemy->y));


Неправильная формула. Надо брать min(abs) а не abs(min). Если dx = -4, а dy = 1 то она вернет 4.

> } while ($this->getAnimal($x, $y) || $i++ < 100);


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

> public function canIMoveTo(Move $move)


Мне кажется здесь лучше бы было аргуметами сделать x, y - чтобы не требовался объект Move. Этот объект, как мне кажется, нужен только внутри алгоритма выбора хода и незачем его вытаскивать в класс карты. да и функция получится более универсальная.

При удалении животного хорошо бы обнулять в нем ссылку на карту. Чтобы была симметрия с функцией addAnimal: одна функция добавляет ссылку, вторая удаляет.

> private function showField($turn)


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

> //Так как в цикле foreach копия массива надо проверять данные с изменениями через ссылку


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

> die("Конец игры.");


Лучше return

> array_key_exists($animalType = get_class($animal), $foundAnimals)


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

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


> if (!array_key_exists($animalType = get_class($animal), $foundAnimals)) {


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

А то так нет никаких гарантий что в массиве есть данный ключ.

> $animal->getX() >= $x - $vision && $animal->getX() <= $x + $vision || $vision == INF


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

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

>>616782

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

> Как же мне не хватает соображения во всём этом и какого-нибудь хорошего наставник


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

>>616815

Основы языка PHP, простые задачки.

>>616870

Эти прочти для начала.
Кошки-мышки #810 #621471
>>616778

> 1)Сложный цикл for для мышей где 4 направления-копипаста делать(он там закомментирован)?


Ради 4 направлений наверно не стоит.

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


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


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

> 3)>Попробуй использовать тут array_filter с анонимной функцией, мне кажется будет чуть проще.


> Я сделал это для мышей и собак, но в кошках у меня три условия для массива(рядом ли мышка? можно ли походить? можно ли съесть?). Делать ли отдельный метод который совместит ли эти три условия?


Нет, не требуется.

> 4) canIMoveTo у меня теперь с одним параметром содержащем две координаты, вместо двух наглядных параметров x и y, потому что не знаю как передать два параметра


Не стоило canIMove переделывать ради array_filter. Аргументы функции выбираются из логики, тут логично чтобы аргументами были (x, y), то есть даем координаты и получаем ответ. Для совместимости с array_filter можно либо сделать метод в Animal, либо использовать анонимную функцию (так даже наверно лучше):

array_filter($x, function (...) use (...) {
...
});

> 5)Правильно ли я передаю анонимные функции? array($this, "функций").


Правильно, но это не анонимная функция, а ссылка ан метод объекта. Анонимная функция это http://php.net/manual/ru/functions.anonymous.php

> 6)Как быть со свойствам символов и дальности обзора? Делать ли их через _construct или указывать в свойствах?


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

> 1)В методе startGame во внутреннем цикле foreach у меня был баг. Если следующий элемент в цикле был съеден, он не ходит, однако не ходят и все следующие элементы за ним. Они будут ходить только в следующем ходу. Поэтому foreach я поменял на for с новым последовательным порядком индексов через функцию array_values.


Можно и так. А можно сделать метод у животного который говорит живо оно еще или уже нет.

> 2)Переделал функцию searchNearbyCorner. Теперь она называется countStepsToCorners и считает сумму свободного пространства.


ок.

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

> //Метод возвращения символа для вывода на карте


> public function getSymbol()


> {


> return $this->symbol;


У тебя это будет работать только если в классе-потомке определено значения поля symbol. Но где гарантия что его определят? Как сказать программисту что его надо определить?

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

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

> mt_rand(0, count($possibleMoves) - 1


Есть еще array_rand()

> protected function searchBestMove(array $foundAnimals, array $possibleMoves, callable $countPoints)


> $points = $countPoints($foundAnimals, $move);


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

> public static $counterOfSymbols = 1;


Почему public?

> $this->vision = 4;


Можно также просто написать в классе protected $vision = 4; Это не ошибка.

> $arrows[] = new Move($this->x, $this->y - 1);


> $arrows[] = new Move($this->x + 1, $this->y);



Тут можно еще записать короче:

$moves = [
new ...,
new ...,
new ...
];

Можно конечно и как у тебя.

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

То же самое для кошки - она может бояться сделать ход если рядом много собак.

> if (!count($foundAnimals["Cat"])) {


> throw new Exception("Ошибка. Должна быть как минимум одна кошка.");


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

> -abs(min($move->x - $nearbyEnemy->x, $move->y - $nearbyEnemy->y));


Неправильная формула. Надо брать min(abs) а не abs(min). Если dx = -4, а dy = 1 то она вернет 4.

> } while ($this->getAnimal($x, $y) || $i++ < 100);


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

> public function canIMoveTo(Move $move)


Мне кажется здесь лучше бы было аргуметами сделать x, y - чтобы не требовался объект Move. Этот объект, как мне кажется, нужен только внутри алгоритма выбора хода и незачем его вытаскивать в класс карты. да и функция получится более универсальная.

При удалении животного хорошо бы обнулять в нем ссылку на карту. Чтобы была симметрия с функцией addAnimal: одна функция добавляет ссылку, вторая удаляет.

> private function showField($turn)


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

> //Так как в цикле foreach копия массива надо проверять данные с изменениями через ссылку


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

> die("Конец игры.");


Лучше return

> array_key_exists($animalType = get_class($animal), $foundAnimals)


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

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


> if (!array_key_exists($animalType = get_class($animal), $foundAnimals)) {


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

А то так нет никаких гарантий что в массиве есть данный ключ.

> $animal->getX() >= $x - $vision && $animal->getX() <= $x + $vision || $vision == INF


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

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

>>616782

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

> Как же мне не хватает соображения во всём этом и какого-нибудь хорошего наставник


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

>>616815

Основы языка PHP, простые задачки.

>>616870

Эти прочти для начала.
https://github.com/fxsloker/Student #811 #621472
>>616964

> ini_set('display_errors', 1);


Вот такие вещи лучше бы задавать в php.ini или в конфиге виртуал хоста Апача. Или хотя бы в конфиге приложения сделать поле debug = true. А то ты или кто-то выгрузит этот код на боевой сервер.

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

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

Если что, в стандарте PSR-4 есть образец автозагрузчика для изучения: http://www.php-fig.org/psr/psr-4/ru/examples/

https://github.com/fxsloker/Student/blob/master/app/config.php#L9

> 'prefix' => 'st_'


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

https://github.com/fxsloker/Student/blob/master/app/Core/Route.php
Класс назван неудачно: должно быть Router, а Route это один маршрут.

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

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

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

Также, в https://github.com/fxsloker/Student/blob/master/app/bootstrap.php надо убрать вызов фронт контроллера. Ведь bootstrap должен только инициализировать приложение, но не запускать обработку запроса.

use должен идти выше require если мне не изменяет память.

Алсо есть урок по композеру и автозагрузке https://github.com/codedokode/pasta/blob/master/php/autoload.md
https://github.com/fxsloker/Student #811 #621472
>>616964

> ini_set('display_errors', 1);


Вот такие вещи лучше бы задавать в php.ini или в конфиге виртуал хоста Апача. Или хотя бы в конфиге приложения сделать поле debug = true. А то ты или кто-то выгрузит этот код на боевой сервер.

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

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

Если что, в стандарте PSR-4 есть образец автозагрузчика для изучения: http://www.php-fig.org/psr/psr-4/ru/examples/

https://github.com/fxsloker/Student/blob/master/app/config.php#L9

> 'prefix' => 'st_'


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

https://github.com/fxsloker/Student/blob/master/app/Core/Route.php
Класс назван неудачно: должно быть Router, а Route это один маршрут.

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

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

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

Также, в https://github.com/fxsloker/Student/blob/master/app/bootstrap.php надо убрать вызов фронт контроллера. Ведь bootstrap должен только инициализировать приложение, но не запускать обработку запроса.

use должен идти выше require если мне не изменяет память.

Алсо есть урок по композеру и автозагрузке https://github.com/codedokode/pasta/blob/master/php/autoload.md
Ответы #812 #621512
>>617028

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

>>617040

Учи ООП, фреймфорки, джумла это бесперспективно.

>>617181
>>617237

Можно получить список всех ключей в массиве с помощью array_keys.

>>617269

foreach не годится?

>>617252

Лучше array_keys наверно.

>>617463
>>617479

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

>>617528

Смотря на какую.

>>617529

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

>>617622

ОП тоже хочет иногда отдохнуть.

>>617669

Если это какая-то моя задача на гитхабе и ты хочешь добавить туда советы или замечания - можешь отправить пулл-реквест с комментариями (залогиниваешься на гитхаб, открываешь задачу, жмешь иконку редактирования). Если это гист - можешь мне на почту (codedokode @ gmail.com) или в новый тред скинуть текст, я добавлю.
Ответы #812 #621512
>>617028

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

>>617040

Учи ООП, фреймфорки, джумла это бесперспективно.

>>617181
>>617237

Можно получить список всех ключей в массиве с помощью array_keys.

>>617269

foreach не годится?

>>617252

Лучше array_keys наверно.

>>617463
>>617479

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

>>617528

Смотря на какую.

>>617529

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

>>617622

ОП тоже хочет иногда отдохнуть.

>>617669

Если это какая-то моя задача на гитхабе и ты хочешь добавить туда советы или замечания - можешь отправить пулл-реквест с комментариями (залогиниваешься на гитхаб, открываешь задачу, жмешь иконку редактирования). Если это гист - можешь мне на почту (codedokode @ gmail.com) или в новый тред скинуть текст, я добавлю.
https://github.com/MindiMakridi/filehosting #813 #621513
>>617690

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L13

> "rootdirectory"


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

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L20
Длинные строки надо переносить. Ограничение 70-80 символов в строке. В данном случае можно аргументы конструктора PDO записать вертикально, PSR-1 или 2 это повзоляет, как именно, погугли.

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L60


> "token" => $app->getCookie('token')


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

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L66

> $path = $app->config("filesdirectory") . $id . $filename;


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

При генерации URL помни про неоьходимость кодировать спецсимволы в именах файлов процентным кодированием. Hello World -> .../Hello%20World/..

Урок https://github.com/codedokode/pasta/blob/master/network/urls.md

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L70

> filename=" . $filename);


Нельзя в заголовках исплоьзовать что-то кроме ASCII (то есть латинницы). Убери это поле.

Есть новый стандарт (не поддерживаемый старыми браузерами) для кодирования любых символов в заголовках (англ): https://tools.ietf.org/html/rfc5987#section-3.2.2

Не знаю, на сколько он поддерживается. надо тестировать.

Вот ответ по теме на англ.: http://stackoverflow.com/questions/4400678/http-header-should-use-what-character-encoding/4410331#4410331

Тебе это не нужно так как у тебя имя файла содержится в URL.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L93
Загрузку файла наверно надо вынести в отдельные методы. Мне кажется, логично сделать 2 метода: валидация пришедших данных и сохранение.

Добавление комментария надо вынести на отдельный URL, сейчас у тебя POST / отвечает за 2 разных действия и это плохо. Также я не вижу валидации при добавлении комментария к файлу. Читал урок про работу с формами? Почему не по стандартному алгоритму делаешь?

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

https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L33
Интересные у тебя геттеры. Зачем это ты исключение выбрасываешь? Я не против, просто хочу понять заечм.

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

> $name = preg_replace("/\.php|\.html|\.htaccess/", ".txt", $name);


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

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

> public function getFormattedSize()


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

Также, килобайт это 1024 а не 1000 байт.

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

> public function isImage($path)


Эта функция не использует поля объекта, может она вообще должна быть в другом классе?

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

> static function generateToken()


Это должно быть в другом классе.

https://github.com/MindiMakridi/filehosting/blob/master/models/FilesMapper.php#L50

> public function editFile($file)


Я думаю лучше передавать аргументами id и comment отдельно, нам ведь кроме них ничего не нужно.

https://github.com/MindiMakridi/filehosting/tree/master/models - мне кажется тут лучше сделать отдельные папки, отдельно для генератора превьюшек, это явно не модель, отдельно для хелперов.

https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L10

> e("files/#{file.getId()}#{file.getfileName()}")


> <a href="/download/{{file.getId()}}/{{file.getfileName()}}"


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

https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L16

> <p>{{file.getComment()}}</p>


Переводы строк теряются (или ты это через CSS поправишь?).

> https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L22


> {% if token==file.getToken()%}


Лучше бы {% if canEdit %} или {% if authHelper.canEditFile() %}, а то ты логику авторизации в шаблоны засовываешь.

https://github.com/MindiMakridi/filehosting/blob/master/templates/layout.html#L6

> viewport


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

> src="https://oss.maxcdn.com/h


> https://ajax.googleapis.com/


Не советую подключать скрипты с внешних сайтов, это снижает надежность и отдает данные о пользователях. Лучше добавить эти скрипты в свой проект.
https://github.com/MindiMakridi/filehosting #813 #621513
>>617690

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L13

> "rootdirectory"


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

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L20
Длинные строки надо переносить. Ограничение 70-80 символов в строке. В данном случае можно аргументы конструктора PDO записать вертикально, PSR-1 или 2 это повзоляет, как именно, погугли.

> https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L60


> "token" => $app->getCookie('token')


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

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L66

> $path = $app->config("filesdirectory") . $id . $filename;


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

При генерации URL помни про неоьходимость кодировать спецсимволы в именах файлов процентным кодированием. Hello World -> .../Hello%20World/..

Урок https://github.com/codedokode/pasta/blob/master/network/urls.md

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L70

> filename=" . $filename);


Нельзя в заголовках исплоьзовать что-то кроме ASCII (то есть латинницы). Убери это поле.

Есть новый стандарт (не поддерживаемый старыми браузерами) для кодирования любых символов в заголовках (англ): https://tools.ietf.org/html/rfc5987#section-3.2.2

Не знаю, на сколько он поддерживается. надо тестировать.

Вот ответ по теме на англ.: http://stackoverflow.com/questions/4400678/http-header-should-use-what-character-encoding/4410331#4410331

Тебе это не нужно так как у тебя имя файла содержится в URL.

https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L93
Загрузку файла наверно надо вынести в отдельные методы. Мне кажется, логично сделать 2 метода: валидация пришедших данных и сохранение.

Добавление комментария надо вынести на отдельный URL, сейчас у тебя POST / отвечает за 2 разных действия и это плохо. Также я не вижу валидации при добавлении комментария к файлу. Читал урок про работу с формами? Почему не по стандартному алгоритму делаешь?

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

https://github.com/MindiMakridi/filehosting/blob/master/models/File.php#L33
Интересные у тебя геттеры. Зачем это ты исключение выбрасываешь? Я не против, просто хочу понять заечм.

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

> $name = preg_replace("/\.php|\.html|\.htaccess/", ".txt", $name);


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

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

> public function getFormattedSize()


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

Также, килобайт это 1024 а не 1000 байт.

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

> public function isImage($path)


Эта функция не использует поля объекта, может она вообще должна быть в другом классе?

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

> static function generateToken()


Это должно быть в другом классе.

https://github.com/MindiMakridi/filehosting/blob/master/models/FilesMapper.php#L50

> public function editFile($file)


Я думаю лучше передавать аргументами id и comment отдельно, нам ведь кроме них ничего не нужно.

https://github.com/MindiMakridi/filehosting/tree/master/models - мне кажется тут лучше сделать отдельные папки, отдельно для генератора превьюшек, это явно не модель, отдельно для хелперов.

https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L10

> e("files/#{file.getId()}#{file.getfileName()}")


> <a href="/download/{{file.getId()}}/{{file.getfileName()}}"


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

https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L16

> <p>{{file.getComment()}}</p>


Переводы строк теряются (или ты это через CSS поправишь?).

> https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html#L22


> {% if token==file.getToken()%}


Лучше бы {% if canEdit %} или {% if authHelper.canEditFile() %}, а то ты логику авторизации в шаблоны засовываешь.

https://github.com/MindiMakridi/filehosting/blob/master/templates/layout.html#L6

> viewport


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

> src="https://oss.maxcdn.com/h


> https://ajax.googleapis.com/


Не советую подключать скрипты с внешних сайтов, это снижает надежность и отдает данные о пользователях. Лучше добавить эти скрипты в свой проект.
Ответы #814 #621514
>>617796

начни с урока https://github.com/codedokode/pasta/blob/master/php/autoload.md

>>617907

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

foreach ($possibleErrors as $error) {
...
}

>>617946

Задача на тесты: https://gist.github.com/codedokode/8733007 - как тебе?
Если хочешь что-то попроще - сделай клон ютуба. видео надо будет перекодировать с помощью очереди задач, сделать регистрацию, загрузку, просмотр, лайканье, дислайканье и комментирование видео.

>>617950

Норм, для начала пойдет.

>>618030

Ответил тут >>621438

>>618198

Анализируй заголовки и ответ сервера. Можешь использовать другой HTTP клиент вроде guzzle или использовать Wireshark для анализа трафика. Скорее всего там защита от ботов.

>>618205

Если твоя программа чисто текстовая то PHP Cli, если это веб страница то PHP Web. А настройках наверно придется задать путь к PHP и папке Апача.

>>618360

> У меня же в этом варианте 7777 прибавляется к сумме долга, а потом проценты от 47777 тысяч уже отсчитываются, разве это правильно?


Так и надо.

> Вот мой другой вариант, который, по идее, более верный: http://ideone.com/DK8ez3


Нет, это как раз неверный.

> Также вот сокращённый уже просто до минимума калькулятор кредита Айфона: http://ideone.com/7FJfGm


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

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

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

>>скрипт проверки телефона


> Да, вроде бы упростил вот тут: http://ideone.com/wzPQ7W


Не, это недостаточно просто. Вот твою сложную последовательность символов можно заменить на:

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

Подумай как такое написать.

Также, а ты проверял свою программу на большом списке телефонов?
Ответы #814 #621514
>>617796

начни с урока https://github.com/codedokode/pasta/blob/master/php/autoload.md

>>617907

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

foreach ($possibleErrors as $error) {
...
}

>>617946

Задача на тесты: https://gist.github.com/codedokode/8733007 - как тебе?
Если хочешь что-то попроще - сделай клон ютуба. видео надо будет перекодировать с помощью очереди задач, сделать регистрацию, загрузку, просмотр, лайканье, дислайканье и комментирование видео.

>>617950

Норм, для начала пойдет.

>>618030

Ответил тут >>621438

>>618198

Анализируй заголовки и ответ сервера. Можешь использовать другой HTTP клиент вроде guzzle или использовать Wireshark для анализа трафика. Скорее всего там защита от ботов.

>>618205

Если твоя программа чисто текстовая то PHP Cli, если это веб страница то PHP Web. А настройках наверно придется задать путь к PHP и папке Апача.

>>618360

> У меня же в этом варианте 7777 прибавляется к сумме долга, а потом проценты от 47777 тысяч уже отсчитываются, разве это правильно?


Так и надо.

> Вот мой другой вариант, который, по идее, более верный: http://ideone.com/DK8ez3


Нет, это как раз неверный.

> Также вот сокращённый уже просто до минимума калькулятор кредита Айфона: http://ideone.com/7FJfGm


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

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

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

>>скрипт проверки телефона


> Да, вроде бы упростил вот тут: http://ideone.com/wzPQ7W


Не, это недостаточно просто. Вот твою сложную последовательность символов можно заменить на:

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

Подумай как такое написать.

Также, а ты проверял свою программу на большом списке телефонов?
#815 #621515
>>618413

>>Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?


> Мне казалось это более логичным.


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

>> if(typeof obj[key] == "object"){


>> copy[key] = deepCopy(obj[key]);


>> }


>> else{


>> copy[key] = obj[key];


> Догадаешься где тут ошибка?


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

>>618562

Ответил тут >>>>621472 и в почте

>>618660

Хорошая задача.

>>618664

Дает. Но для этого надо очень хорошо знать Си.

>>618776

Можно сделать так:

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

>>618805

Ставится через какую-то систему пакетов, то ли homebrew то ли еще что-то. Также, в макбуке уже встроены и Апач, и PHP, правда старенькие и плохо годятся для обучения.
#815 #621515
>>618413

>>Непонятно почему SolarPanel наследуется от PowerStation. Солнечная панель это улучшенная версия электростанции? А почему не наоборот?


> Мне казалось это более логичным.


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

>> if(typeof obj[key] == "object"){


>> copy[key] = deepCopy(obj[key]);


>> }


>> else{


>> copy[key] = obj[key];


> Догадаешься где тут ошибка?


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

>>618562

Ответил тут >>>>621472 и в почте

>>618660

Хорошая задача.

>>618664

Дает. Но для этого надо очень хорошо знать Си.

>>618776

Можно сделать так:

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

>>618805

Ставится через какую-то систему пакетов, то ли homebrew то ли еще что-то. Также, в макбуке уже встроены и Апач, и PHP, правда старенькие и плохо годятся для обучения.
#816 #621516
>>618925

Ты про XSS? Да, он.

>>618996

1) некогда, пишите в треде
2) деанон

>>619029

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


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

Ошибка:

> https://ideone.com/BmoCvk


> elseif ($manResult=$aIResult) {


Ты перепутал = и ==. = не проверяет на равенство, а присваивает переменной какое-то значение. Перечитай урок.

>>Подумай как избавиться от повтора.


> Эм, они не повторяются, это разные строки с разными формулами.


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

>>А если ровно миллион то не годится? По моему тут знак не совсем тот.


> А что ели >=


Тогда правильно.

> Внедрил в код, можешь не смотреть, 1 строку всего поправил.


> https://ideone.com/q09F2G


Теперь правильно. Но лучше привыкай к тому что массивы по умолчанию нумеруются с 0, а последний индекс равен count() - 1.

>>не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2


> Так писать или не писать? Что-то не понял.


Не пиши $randomTwo, пиши $random2 или $random[2].

>>после первого несовпадения можно выходить из цикла


> Непонятно тут. А я разьве не так сделал? или break не прерывает цикл?


Если break есть то ок, я мог ошибиться

>>619032

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

>>619101
>>619191

5000 и 39999 надо сделать переменными чтобы было проще их поменять.

>>619172

Классы либо data-атрибуты.

>>619184

Пока не требуется.

>>619216

>>А если сделать вот так (?<=(,жы))(?<=(жы))


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


Это утверждения, они проверяют наличие символов, но не захватывают их: http://php.net/manual/ru/regexp.reference.assertions.php

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


Хорошая идея.
#816 #621516
>>618925

Ты про XSS? Да, он.

>>618996

1) некогда, пишите в треде
2) деанон

>>619029

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


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

Ошибка:

> https://ideone.com/BmoCvk


> elseif ($manResult=$aIResult) {


Ты перепутал = и ==. = не проверяет на равенство, а присваивает переменной какое-то значение. Перечитай урок.

>>Подумай как избавиться от повтора.


> Эм, они не повторяются, это разные строки с разными формулами.


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

>>А если ровно миллион то не годится? По моему тут знак не совсем тот.


> А что ели >=


Тогда правильно.

> Внедрил в код, можешь не смотреть, 1 строку всего поправил.


> https://ideone.com/q09F2G


Теперь правильно. Но лучше привыкай к тому что массивы по умолчанию нумеруются с 0, а последний индекс равен count() - 1.

>>не пиши номера цифрами, то есть лучше назвать переменные $randomWord1, $randomWord2


> Так писать или не писать? Что-то не понял.


Не пиши $randomTwo, пиши $random2 или $random[2].

>>после первого несовпадения можно выходить из цикла


> Непонятно тут. А я разьве не так сделал? или break не прерывает цикл?


Если break есть то ок, я мог ошибиться

>>619032

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

>>619101
>>619191

5000 и 39999 надо сделать переменными чтобы было проще их поменять.

>>619172

Классы либо data-атрибуты.

>>619184

Пока не требуется.

>>619216

>>А если сделать вот так (?<=(,жы))(?<=(жы))


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


Это утверждения, они проверяют наличие символов, но не захватывают их: http://php.net/manual/ru/regexp.reference.assertions.php

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


Хорошая идея.
#817 #621517
>>619343

Фреймворк Юи 2 или Slim.

>>619387

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

>>619416

Покажи код. Отладчиком в браузере смотрел?

>>619448

Есть задача на SPA в ОП-посте - ее несколько месяцев решать можно.

>>619465

Я в новом треде вроде проверял это или похожий код. Надо как минимум копипасту на цикл по массиву регулярок заменить.

>>619519

У тебя в PHP не установлен или не включен в php.ini модеуль mbstring где и находится эта функция.

>>619523

Есть урок по теме https://gist.github.com/codedokode/ff99e357e9860ea169b8
#817 #621517
>>619343

Фреймворк Юи 2 или Slim.

>>619387

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

>>619416

Покажи код. Отладчиком в браузере смотрел?

>>619448

Есть задача на SPA в ОП-посте - ее несколько месяцев решать можно.

>>619465

Я в новом треде вроде проверял это или похожий код. Надо как минимум копипасту на цикл по массиву регулярок заменить.

>>619519

У тебя в PHP не установлен или не включен в php.ini модеуль mbstring где и находится эта функция.

>>619523

Есть урок по теме https://gist.github.com/codedokode/ff99e357e9860ea169b8
http://integer64.github.io/ #818 #621519
>>619554

>>>Почему width 100%?


> Гугль дал такое решение для адаптивности картинок


Мне не нравится то что с width 100% мы в теории можем получить ситуацию когда картинка будет увеличена. Надо бы посмотреть нельзя ли заменить это на max-width: 100%;

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

> Задача 11:


>>>перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом.


> Реализовал, добавил для checkbox на :focus бордер тень,что бы было видно.


Это хорошо, я вижу тень на нижнем переключателе. А на верхнем - нет. Нужен скриншот/гифка?

Также, я заметил что при клике по нижнему переключателю он обводится рамкой. А вот если сделать обычные чекбоксы https://jsfiddle.net/n6f37jna/1/ - то они обводятся рамкой только при навигации с клавиатуры, при клике не обводятся. Почему так? я решил сам разобраться, сделав такой пример:

https://jsfiddle.net/n6f37jna/3/

Тут в Хроме как при клике, так и при клавиатурной навигации чекбокс становится большим (то есть получает фокус). Но только в случае клавиатурной навигации появляется синяя рамка. Видимо дело в свойстве

:focus {
outline: -webkit-focus-ring-color auto 5px;
}

Которое встроено в браузер. Видимо этот focus-ring появляется только при навигации с клавиатуры. Соответственно у меня возникла мысль: нельзя ли сделать аналогично. То есть не ставить стили на фокус, а засунуть инпут под кнопку, чтобы при навигации с клавиатуры стала видна синяя рамка. Не знаю, можно ли такое реализовать и будет ли это работать не под вебкитом. Наверно, не стоит, пусть лучше тень остается.

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

Задача 12

> Переделал, совсем без id у меня не получилось, надо было как то input с label связать. Может быть есть другое решение.


Можно через классы, можно через атрибуты. Без них можно таким интересным способом: http://chikuyonok.ru/2009/04/dl-tabs/ но он не поддерживает вывод заголовков вкладок в несколько рядов.

http://integer64.github.io/site-layout/exercise/exercise12.2/index.html
Это выглядит хорошо. Только с фоном страницы косяк - если сильно уменьшить масштаб или взять большой монитор то фон плохо стыкуется. Советую заменить фоновую картинку на CSS3 градиент, а то жалко хорошую работу таким багом портить.

> data-header="Tab 1"


Лучше наверно просто data-tab="1", зачем тут слово Tab?

Ну и если делать совсем идеально, я бы еще для имен классов применил БЭМ. Ну это не обязательно, меня и в нынешнем виде устраивает, хорошее решение. Старайся и дальше при верстке продумывать такие вещи как: независимость блоков (стили не должны конфликтовать с другими блоками страницы, блоки должны иметь возможность вкладываться друг в друга), слишком длинные или слишком короткие заголвоки, отображение на маленьких экранах.
http://integer64.github.io/ #818 #621519
>>619554

>>>Почему width 100%?


> Гугль дал такое решение для адаптивности картинок


Мне не нравится то что с width 100% мы в теории можем получить ситуацию когда картинка будет увеличена. Надо бы посмотреть нельзя ли заменить это на max-width: 100%;

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

> Задача 11:


>>>перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом.


> Реализовал, добавил для checkbox на :focus бордер тень,что бы было видно.


Это хорошо, я вижу тень на нижнем переключателе. А на верхнем - нет. Нужен скриншот/гифка?

Также, я заметил что при клике по нижнему переключателю он обводится рамкой. А вот если сделать обычные чекбоксы https://jsfiddle.net/n6f37jna/1/ - то они обводятся рамкой только при навигации с клавиатуры, при клике не обводятся. Почему так? я решил сам разобраться, сделав такой пример:

https://jsfiddle.net/n6f37jna/3/

Тут в Хроме как при клике, так и при клавиатурной навигации чекбокс становится большим (то есть получает фокус). Но только в случае клавиатурной навигации появляется синяя рамка. Видимо дело в свойстве

:focus {
outline: -webkit-focus-ring-color auto 5px;
}

Которое встроено в браузер. Видимо этот focus-ring появляется только при навигации с клавиатуры. Соответственно у меня возникла мысль: нельзя ли сделать аналогично. То есть не ставить стили на фокус, а засунуть инпут под кнопку, чтобы при навигации с клавиатуры стала видна синяя рамка. Не знаю, можно ли такое реализовать и будет ли это работать не под вебкитом. Наверно, не стоит, пусть лучше тень остается.

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

Задача 12

> Переделал, совсем без id у меня не получилось, надо было как то input с label связать. Может быть есть другое решение.


Можно через классы, можно через атрибуты. Без них можно таким интересным способом: http://chikuyonok.ru/2009/04/dl-tabs/ но он не поддерживает вывод заголовков вкладок в несколько рядов.

http://integer64.github.io/site-layout/exercise/exercise12.2/index.html
Это выглядит хорошо. Только с фоном страницы косяк - если сильно уменьшить масштаб или взять большой монитор то фон плохо стыкуется. Советую заменить фоновую картинку на CSS3 градиент, а то жалко хорошую работу таким багом портить.

> data-header="Tab 1"


Лучше наверно просто data-tab="1", зачем тут слово Tab?

Ну и если делать совсем идеально, я бы еще для имен классов применил БЭМ. Ну это не обязательно, меня и в нынешнем виде устраивает, хорошее решение. Старайся и дальше при верстке продумывать такие вещи как: независимость блоков (стили не должны конфликтовать с другими блоками страницы, блоки должны иметь возможность вкладываться друг в друга), слишком длинные или слишком короткие заголвоки, отображение на маленьких экранах.
#819 #621520
>>619583

> Первая http://pastebin.com/Q5CLkzck


Все правильно.

> Вторая http://pastebin.com/6w0GqbW


Тоже верно.

> Третья http://pastebin.com/G4kUKzeL



> if ($anonSum > $compSum) {


> if ($anonSum < $compSum) {


> If ($anonSum == $compSum) {


Тут лучше все ифы в программе объединить в один блок if ... elseif ... elseif .. .else чтобы было видно что возможен только один из 4 вариантов. А exit убрать за ненадобностью.

> Стоило ли их вообще тут постить,


Ну видишь, совет получил полезный.

>>619650

Код бы запостил.

>>619651

Отвечал вроде в новом треде - давай конкретные примеры.

>>619742

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

Насчет 502 ошибки - не знаю, это что-то другое.

>>619807

Легко. Ищи случаи когда идет запятая, за ней слово но, за ним граница слова.

[^\\s] значит «один любой символ кроме пробела». Это наверно не то что требуется.

>>619816

Вроде в новом треде прокомментировал? Если нет, запости в новый тред.
#819 #621520
>>619583

> Первая http://pastebin.com/Q5CLkzck


Все правильно.

> Вторая http://pastebin.com/6w0GqbW


Тоже верно.

> Третья http://pastebin.com/G4kUKzeL



> if ($anonSum > $compSum) {


> if ($anonSum < $compSum) {


> If ($anonSum == $compSum) {


Тут лучше все ифы в программе объединить в один блок if ... elseif ... elseif .. .else чтобы было видно что возможен только один из 4 вариантов. А exit убрать за ненадобностью.

> Стоило ли их вообще тут постить,


Ну видишь, совет получил полезный.

>>619650

Код бы запостил.

>>619651

Отвечал вроде в новом треде - давай конкретные примеры.

>>619742

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

Насчет 502 ошибки - не знаю, это что-то другое.

>>619807

Легко. Ищи случаи когда идет запятая, за ней слово но, за ним граница слова.

[^\\s] значит «один любой символ кроме пробела». Это наверно не то что требуется.

>>619816

Вроде в новом треде прокомментировал? Если нет, запости в новый тред.
#820 #621522
Все задачи проверены. Если я кого-то не проверил - пишите в новом треде >>619873 (OP)
#821 #621661
Хочу стать пэхопе-макакой, какие программы мне прямо сейчас скачать что бы начать учиться пограмировать?
#822 #621887
>>621661
Open Server, Sublime Text
#823 #623562
Охуенная шапка, чаю авторам.
Привет, анонимус, будет многобукв, очень надеюсь на помощь, потому что не знаю куда мне еще обратиться!

Я буду прям и краток, не вдаваясь в детали: уже несколько лет имеется магазин розничной торговли.
ВНЕЗАПНО захотелось автоматизировать некоторые процессы, потому что заебало писать всё на листках, и вообще работать вручную, а именно:
- вести учет товара на складе (поступления, продажи)
- автоматизировать выдачу договоров купли и пары других отчетов.

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

И я подумал, что было бы неплохо сделать ИНТЕРНЕТ-МАГАЗИН вместо нынешнего "сайта-визитки-каталога".

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

В общем, анонимус, я тут подумал, и в своих фантазиях набросал такую схему:
Ставлю CMS для интернет-магазина, пополняю его, тем самым у меня решается проблема складского учета товара в наличии.
А затем, при помощи PHP (который я так яро настроен изучить) - взять и к той же CMS прикрутить функционал выдачи договоров и прочих отчетов для курьера/грузчика и тд. Насколько моя идея охуительна и реально ли такое реализовать одному?

И вообще, анонимус, что ты думаешь по поводу моей уёбищной ситуации?

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

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

Пиздец, анон, сам не понимаю, чего хочу, прошу помочь с принятием решения.
Алсо - как долго нужно учить PHP?
#823 #623562
Охуенная шапка, чаю авторам.
Привет, анонимус, будет многобукв, очень надеюсь на помощь, потому что не знаю куда мне еще обратиться!

Я буду прям и краток, не вдаваясь в детали: уже несколько лет имеется магазин розничной торговли.
ВНЕЗАПНО захотелось автоматизировать некоторые процессы, потому что заебало писать всё на листках, и вообще работать вручную, а именно:
- вести учет товара на складе (поступления, продажи)
- автоматизировать выдачу договоров купли и пары других отчетов.

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

И я подумал, что было бы неплохо сделать ИНТЕРНЕТ-МАГАЗИН вместо нынешнего "сайта-визитки-каталога".

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

В общем, анонимус, я тут подумал, и в своих фантазиях набросал такую схему:
Ставлю CMS для интернет-магазина, пополняю его, тем самым у меня решается проблема складского учета товара в наличии.
А затем, при помощи PHP (который я так яро настроен изучить) - взять и к той же CMS прикрутить функционал выдачи договоров и прочих отчетов для курьера/грузчика и тд. Насколько моя идея охуительна и реально ли такое реализовать одному?

И вообще, анонимус, что ты думаешь по поводу моей уёбищной ситуации?

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

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

Пиздец, анон, сам не понимаю, чего хочу, прошу помочь с принятием решения.
Алсо - как долго нужно учить PHP?
#824 #623873
Сап, анончики. Некоторое время работал с django, сейчас перехожу на php, а конкретнее на yii, и машинально пытаюсь искать аналогии между ними. Вопрос такой, есть ли в yii аналог дажнговского свойства choices для текстового поля, чтобы захардкодить некоторые значения и не пилить под них отдельную таблицу в бд?
#825 #623879
Всем, сап. js-у и php я пока только учусь, но на работе поставили задачу, и времени на пошаговое изучение пока нет. Поэтому хочу обратиться к вам, авось поможете. Есть функция на js, которая передает параметры, по средствам - XmlHttpRequest, из сформированной ранее на php таблицы, для sql запроса на сервер. Далее на сервере формируется xls - документ(с помощью PHPExcel). Дак вот, если просто сохранить этот документ, на сервере, то проблем нет, но мне нужно его вывести в новом окне брузера или хотя бы предложить пользователю его сохранить. Сейчас у меня предаются параметры, формируется документ, и присылается ответ с сервера (responseText), но как мне этот ответ обработать, чтобы получить ссылку на скачивание документа, я хз.
#826 #623883
>>623879
Я когда-то делал отдачу генерируемого xls-файла таким образом:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="trulala.xls"');
$objWriter->save('php://output');
#827 #623888
>>623883
Я делаю точно так же, проблема с ответом, как его обработать когда его возвращает XmlHttpRequest
#828 #625593
Здравствуй анон, я пытаюсь заниматься версткой и в дальнейшем перекатится во фронтенд. У меня вопрос, как работают всякие каталоги товаров на сайтах. Ну т.е. есть в БД таблица: "Имя Картинка Цена", как оно превращается в html код? Что-то вроде такого?
[code]
var items = sqlRequest(select * from items);
var html = '';
foreach item in items {
parse(item, parsed);
html+= "<h1>" + parsed[0] + "</h1><br>"
+ "<img src=\"" + parsed[1] + "\"><br>"
+ "Цена: " + parsed[2];
}
[/code]
И вообще, подобную хуйню надо знать фронтам?
Curl #829 #625684
Аноны, хелпаните. Нужно взять некоторые данные с сайта. Подключаюсь к нему через curl, все окей. Но curl очень быстро грузит все данные с сайта, а мне нужна специальная задержка, так как при заходе на сайт появляется надпись "загрузка" и только через секунду появлется нужный HTML, который curl не успел забрать. Как эту задержку сделать, чтобы сайт полностью прогрузился?
215 Кб, 1000x666
#830 #626267
Анон, есть проблема, я уже в ярости нахуй.
В общем, preg_replace при попытке заменить одинарные или двойные кавычки (возможно, и некоторые другие символы), добавляет к изменённой подстроке один или обратных слеша \ соответственно.
Такое происходит даже если я пытаюсь заменить кавычки на пустую строку - вместо них просто появляются слеши.
Например:

>echo preg_replace('/"/', '', 'Станция "Петровско-Разумовская"')


выводит:

>Cтанция \\Петровско-Разумовская\\


Так вот, с какого хуя это происходит? Зачем и почему он это делает? И как это дерьмо исправить? Я уже заебался мозги ломать, уже бешусь от бессилия просто.
179 Кб, 960x960
#831 #626272
>>625593
Я не особо опытен в таких вещах, но, как мне кажется, вытаскиванием инфы из SQL занимается как раз-таки бекенд. Фронтенд обычно хуярит AJAX-запросы к серверным приложениям, но не напрямую к БД.
Забей, в общем. Такие задачи будут ставить только в край неадекватные заказчики.
6 Кб, 219x187
#832 #626283
>>625684
Покопайся в js страницы. Вероятно ты задаёшь адрес не самой страницы, а какой-нибудь заглушки, которая по тайм-ауту подгружает нужную страницу или редиректит на неё.
По крайней мере я бы копал именно в этом направлении.
#833 #626371
>>626267
А, всё, разобрался. На самом деле проблема была только в моём пиздоглазии, из-за которого в функцию передавалась строка уже со слешами.
#834 #626463
Весело хуярю html-теги через echo "<tag>";. Для разработки вообще никакого бугурта. В исходном коде все выведенное таким образом выглядит как одна очень длинная строка, что затрудняет отладку. Как сделать такие теги форматированными?
Строки, хакеры и шифровки #835 #626994
Анончики, подскажите, пожалуйста, где ошибка. Не всегда выводятся все.

<?php

error_reporting(-1);

$word1 = array('Чудесных', 'Суровых', 'Занятных', 'Внезапных');
$word2 = array('слов', 'зим', 'глаз', 'дней', 'лет', 'мир', 'взор');
$word3 = array('прикосновений', 'поползновений', 'судьбы явлений',
'сухие листья', 'морщины смерти', 'долины края', 'замены нету',
'сухая юность', 'навек исчезнув');
$word4 = array('обретаю', 'понимаю', 'начертаю', 'закрываю', 'оставляю',
'вынимаю', 'умираю', 'замерзаю', 'выделяю');
$word5 = array('очертания', 'безысходность', 'начертанья', 'смысл жизни',
'вирус смерти', 'радость мира');

echo "{$word1[mt_rand(1,4)]} {$word2[mt_rand(1,7)]} {$word3[mt_rand(1,9)]}\n
{$word1[mt_rand(1,4)]} {$word2[mt_rand(1,7)]} {$word3[mt_rand(1,9)]}\n
Я {$word4[mt_rand(1,9)]} {$word5[mt_rand(1,6)]} ";
?>
#836 #626999
>>626994
Уже не надо, разобрался, использовал "array_rand"
#837 #627381
1) Задача про миллион в банке

http://ideone.com/2CZC21

2) Генератор стихов:

http://ideone.com/Wqtqet

Иногда пропадают некоторые слова, как это пофиксить?
(Про array_rand из предыдущего поста не особо понял)

3) Про палиндром

http://ideone.com/myrecent
#838 #627447
Я наверно очень тупой или пора мне одевать очки, в чем тут ошибка?начал изучать php два часа назад. Как решить эту задачу?
<?php

error_reporting(-1);

$anonDice1 = mt_rand(1,6);
$anonDice2 = mt_rand(1,6);

$compDice1 = mt_rand(1,6);
$compDice2 = mt_rand(1,6);

/
echo "($anonDice1) и ($anonDice2) \n ($compDice1) и ($compDice2) \n"
$lastDigit = $number % 10

$anonSum = ($anonDice1 + anonDice2);
$compSum = ($compDice1 + compDice2);

if (($anonDice1 == $anonDice2) && ($compDice1 == $compDice2)) {
echo
exit();
}
/
?????????/
25 Кб, 438x324
24 Кб, 1266x144
#839 #627461
Анон, не обоссывай сразу, помоги ньюфагу разобраться в строках с 10 по 16:

\t$headCount = 0;
\t$flipCount = 0;
\twhile ($headCount < 3) {
\t\t$flip = rand(0,1);
\t\t$flipCount ++;
\t\tif ($flip){
\t\t\t$headCount ++;

На пикрелейтед код и его результат.
У меня вопросы:
1) Почему количество коинов каждый раз меняется - то 3, то 27, то ...;
2) Почему $headCount и $flipCount имеют 0?
3) Что делает $flip = rand(0,1) и $flipCount ++?
ЗАДАЧА ПРО IPAD #840 #627587
Анон, проверь, пожалуйста, задачу про Ipad.

http://ideone.com/E1TKjj
986 Кб, 500x650
#841 #627699
PHP-ны. Скажите, как реализовать следующую задачу:(Пожалуйста, подробно, в вебе я вообще ни разу ничего не делал)
1)Создать страницу, на которой есть возможность просмотра видео.
2)На этой странице есть возможность залить видео. После заливки видео обрабатывается(обрезается на половину(тут по подробней распишите, пожалуйста, если можете)). Не знаю куда заливать, посоветовали бесплатное амазноновское хранилище. После заливки идет запись в БД о том, куда залито обработанное видео и есть возможность на странице воспроизвести это видео. Добра вам сразу!
#842 #627716
>>627461
пока монет меньше 3 делать (
флип = рандомом 1 или 0
флипкаунт + 1
Если флип =\= 0 тогда (
монет + 1
)
)
#843 #627718
>>627461
1) их будет сколько угодно от 3 и далее из-за алгоритма
2) начальные условия, 0 решек, 0 сбросов
3) $flip = rand(1,0) присваивает $flip 0 или 1 рандомно. $flipcount++ делает inc($flipcount) или $flipcount = $flipcount + 1
17 Кб, 400x246
#844 #627770
Привет, анон. У меня вопрос.

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

1 Как лучше сохранять картинки в этой базе данных?
2 Как их лучше вызывать? Чтобы они отображались хорошо
3 Нормально ли я придумал таким образом делать галлерею? или можно как-то лучше?
#845 #627804
Изучил я PHP, а как сайт-то пилить?
#846 #627952
Тред легитимен?
Есть в вашем языке аналоги функций [].every и [].some из js?
#847 #627953
>>627804
Тащемта секретов тут нет, просто берешь и пишешь код.
#848 #628111
>>627770
я в базе хранил названия пикч с серва и тянул где надо в духе
<img src="/img/<?= $name ?>.png" >
#849 #628218
Посоны, чому не работет.

<?php
error_reporting(-1);

$randomMan1 = mt_rand(1, 6);
$randomMan2 = mt_rand(1, 6);

$randomRobot1 = mt_rand(1, 6);
$randomRobot2 = mt_rand(1, 6);

$randomManSum = ($randomMan1 + $randomMan2);
$randomRobotSum = ($randomRobot1 + $randomRobot2);

echo "БРОСАЕМ..! Получили: {$randomMan1} и {$randomMan2}, итого {$randomManSum}!";
echo "\n";
echo "БРОСАЕТ РОБОТ..! Получили: {$randomRobot1} и {$randomRobot2}, итого {$randomRobotSum}!";

if ($randomManSum > $randomRobotSum) {
echo "Ура! Ты победил!";
} elseif ($randomManSum == $randomRobotSum) {
echo "Победила дружба!;"
} else {
echo "Победил робот!";
}
?>
#850 #628222
>>628218
Нашел, посоны, отбой.

пиздец я слепой
#851 #628256
Чому не пашет \n
В идеоне показывает а в ЛАМПе - нет.
#853 #629026
Сосач, помоги, пожалуйста. Есть скрипт парсера youtube. В инпут вбиваем ключевые слова, на выходе получаем файл data.txt со списком спаршенных видео по ключам. Проблема в том, что скрипт добавляет несколько видео по кейворду, а нужно, чтобы добавлял только 1 видео. В PHP не шарю, поэтому прошу помощь здесь.
Код парсера:
<?php
//error_reporting();
@ini_set('max_execution_time', 0);
echo "<title>Парсер YouTube V2.1 (с) by Gogres</title>";
echo "<form method = \"POST\" >";
echo "Кейворды (по одному на строку):
медвед
креветка
<br><br>";
echo "<textarea name=\"keys\" cols=\"70\" rows=\"10\"></textarea><br>";
echo "<input name=\"page\" size=5 type=\"text\" value=\"1\"> :Количество страниц<br>";
echo "<input type=\"submit\" value=\"Click & Parse\">";
echo "</form>";

$data=fopen('data.txt','a');
if ($_POST['page']) $pages=$_POST['page']; else $pages=1;
if ($_POST['keys']){
$filename=$_POST['filename'];
$papkaname=$_POST['papkaname'];
$keys=split("\n", $_POST['keys']);

foreach ($keys as $k=>$key){
$key=trim($key);
$reskey=$key;
$key=urlencode($key);
$key=str_replace("%20", "+", $key);

for($i=0; $i<$pages; $i++)
{
$pageparse=file_get_contents("http://www.youtube.com/results?search_type=videos&search_query=".$key."&page=".$page);
if(strpos($pageparse, "/watch?v=")!=false)
{
$matches=array();
$pattern = "/href=\"\/watch\?v=([^\"]*)\"/sU";
preg_match_all($pattern, $pageparse, $matches);
$resultmovies=implode(" ", $matches[1]);
$resultmovies=str_replace("&hd=1", "", $resultmovies);
$resultmovies=str_replace("&feature=browch", "", $resultmovies);
$resultmovies=explode(" ", $resultmovies);
$resultmovies=array_unique($resultmovies);
$moviescount=count($resultmovies);
//$query="http://www.youtube.com/watch?v=".$resultmovies;
foreach($resultmovies as $movielink)
{

$link = trim($movielink);
if ($link!="EMPTY")
{
\t$text='<object width="425" height="350">';
\t$text.='<param name="movie" value="http://www.youtube.com/v/'.$link.'"></param>';
\t$text.='<param name="wmode" value="transparent"></param>';
\t$text.='<embed src="http://www.youtube.com/v/'.$link.'"';
\t$text.='type="application/x-shockwave-flash" wmode="transparent"';
\t$text.='width="425" height="350"></embed></object>';
fwrite($data, $text."\n");
\t}
}
sleep(1);
}

} }

}
fclose($data);

?>
#853 #629026
Сосач, помоги, пожалуйста. Есть скрипт парсера youtube. В инпут вбиваем ключевые слова, на выходе получаем файл data.txt со списком спаршенных видео по ключам. Проблема в том, что скрипт добавляет несколько видео по кейворду, а нужно, чтобы добавлял только 1 видео. В PHP не шарю, поэтому прошу помощь здесь.
Код парсера:
<?php
//error_reporting();
@ini_set('max_execution_time', 0);
echo "<title>Парсер YouTube V2.1 (с) by Gogres</title>";
echo "<form method = \"POST\" >";
echo "Кейворды (по одному на строку):
медвед
креветка
<br><br>";
echo "<textarea name=\"keys\" cols=\"70\" rows=\"10\"></textarea><br>";
echo "<input name=\"page\" size=5 type=\"text\" value=\"1\"> :Количество страниц<br>";
echo "<input type=\"submit\" value=\"Click & Parse\">";
echo "</form>";

$data=fopen('data.txt','a');
if ($_POST['page']) $pages=$_POST['page']; else $pages=1;
if ($_POST['keys']){
$filename=$_POST['filename'];
$papkaname=$_POST['papkaname'];
$keys=split("\n", $_POST['keys']);

foreach ($keys as $k=>$key){
$key=trim($key);
$reskey=$key;
$key=urlencode($key);
$key=str_replace("%20", "+", $key);

for($i=0; $i<$pages; $i++)
{
$pageparse=file_get_contents("http://www.youtube.com/results?search_type=videos&search_query=".$key."&page=".$page);
if(strpos($pageparse, "/watch?v=")!=false)
{
$matches=array();
$pattern = "/href=\"\/watch\?v=([^\"]*)\"/sU";
preg_match_all($pattern, $pageparse, $matches);
$resultmovies=implode(" ", $matches[1]);
$resultmovies=str_replace("&hd=1", "", $resultmovies);
$resultmovies=str_replace("&feature=browch", "", $resultmovies);
$resultmovies=explode(" ", $resultmovies);
$resultmovies=array_unique($resultmovies);
$moviescount=count($resultmovies);
//$query="http://www.youtube.com/watch?v=".$resultmovies;
foreach($resultmovies as $movielink)
{

$link = trim($movielink);
if ($link!="EMPTY")
{
\t$text='<object width="425" height="350">';
\t$text.='<param name="movie" value="http://www.youtube.com/v/'.$link.'"></param>';
\t$text.='<param name="wmode" value="transparent"></param>';
\t$text.='<embed src="http://www.youtube.com/v/'.$link.'"';
\t$text.='type="application/x-shockwave-flash" wmode="transparent"';
\t$text.='width="425" height="350"></embed></object>';
fwrite($data, $text."\n");
\t}
}
sleep(1);
}

} }

}
fclose($data);

?>
#854 #629050
>>623562
>>623873
>>623879
>>623883
>>623888
>>625593
>>625684

Анончики, это старый тред, созданный еще в 2015. Мы с 8 января сидим в новом (и кстати он тоже уже переполнен и завтра мы перекатимся из него в еще более новый): >>619873 (OP)

Перепостьте свои вопросы туда, здесь вам не ответят.
#855 #629054
>>626267
>>626463
>>626994
>>627381
>>627447
>>627461
>>627587

Анончики, это старый тред, созданный еще в 2015. Мы с 8 января сидим в новом (и кстати он тоже уже переполнен и завтра мы перекатимся из него в еще более новый, но еще дня 3 будем поддерживать старый): >>619873 (OP)
Анончики, вы заблудились #856 #629057
>>627699
>>627770
>>627804
>>627952
>>628218
>>628256
>>628298
>>629026

Анончики, это старый тред, созданный еще в 2015. Мы с 8 января сидим в новом (и кстати он тоже уже переполнен и завтра мы перекатимся из него в еще более новый, но еще дня 3 будем поддерживать старый): >>619873 (OP)

Ссылка в ньюфаг-треде как всегда устарела.
#857 #630432
>>613304
Двачую, практически везде после авторизации страница перезагружается
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 25 января 2016 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски