«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих php/webdev #94 Аноним 2017/09/29 02:43:01  №1067944 1
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

Предыдущий тред был тут: >>1049651 (OP) . Еще предыдущие треды ищутся в гугле по словам "клуб изучающих php" или в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

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

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

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование.

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

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Symfony: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- Если ты все решил, переходи к Symfony 3/Doctrine 2
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

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

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md

Что почитать

- Мануал по 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

Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492

У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.

Платиновые вопросы

- Почему PHP? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Аноним 2017/09/29 02:43:47  №1067945 2
grammar-nazi.png (56, 500x644)
644x500
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на 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/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
Ответы: >>1068342 >>1070279 >>1073813
Аноним 2017/09/29 02:47:19  №1067949 3
Ответы: >>1068010 >>1070224 >>1072015
Аноним 2017/09/29 09:34:56  №1067993 4
>>1067810
>Почкму ты думаешь проблема не в хостинге?
Хостинг заморский за кучу шекелей. Они клянуться что проблема не у них. На письма отвечают словами "баща данных" и прочими ругательствами

>>1067860
>почему бы не посмотреть логи ошибок веб-сервера
Maximum number of connection to host has been reached. Такие дела.
Ответы: >>1067996 >>1068041
Аноним 2017/09/29 09:57:17  №1067996 5
>>1067993
>Module 'PDO' already loaded in Unknown on line 0
И такое еще добро есть. Думаю-с что делать.
Аноним 2017/09/29 12:03:52  №1068010 6
>>1067949
ОП, а задачу про студентов можно на фреймворке сделать? Или там весь смысл в "чистом php"?
ньюфаг
Ответы: >>1068093
Аноним 2017/09/29 13:32:39  №1068041 7
>>1067993
>Maximum number of connection to host has been reached

Это нагруженный проект?

Когда ты сам заходишь, получал ли 503?

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

Если тебе самому выпадает через раз, попробуй
1) в корне html-страничку хелловорлд без PHP положи и раз 100 зайди.

2) Если будет опять 503, то, возможно:

а) >Боты-индексаторы, сканирующие ресурсы сайтов (поисковые системы, Sape и другие).

Nuff said. Настраивай robots.

б) >Использование элементов ресурсов или скриптов на чужих сайтах (ссылки на картинки, скрипты-информёры). Используйте антилич-модули/настройки.

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

в) >На сайте установлен элемент, который периодически посылает на сервер AJAX-запросы (например, чат). Количество запросов зависит не только от числа посетителей, но и от их привычки открывать несколько вкладок в браузере.

Также все понятно.

г) >DDoS

Зависит от сайта, если он небольшой, кому он сдался дудосить?
Аноним 2017/09/29 13:50:03  №1068048 8
>>1068041
>Боты-индексаторы, сканирующие ресурсы сайтов (поисковые системы, Sape и другие).
This. Контрол панель без инглиша, онли на эльфийском. Пока нашел логи, то проклял свою работу, небо и аллаха. Пошел настраивать robots.
В любом случае, спасибо.
Аноним 2017/09/29 14:32:36  №1068062 9
Ответы: >>1068576 >>1079886
Аноним 2017/09/29 14:46:39  №1068065 10
Покопался в кишках плагина и увидел, что там код чисто низкофункциональный, с объявлением коснтант, private static функций, классов, создаваемых синглетонами.
Короче, нихрена пхп надо не первым языком учить, а после серьезной базы типа C/C++/Asm/Java
Ответы: >>1068095
Аноним 2017/09/29 15:23:05  №1068087 11
>>1068041
>Боты-индексаторы, сканирующие ресурсы сайтов (поисковые системы, Sape и другие).
Есть еще 1 вопрос на эту тему.
503 выдает 24/7, а googlebot не реагирует на delay. Единственный шанс снизить поток этого говна - Search Console, но я не могу подвердить правана сайт - он не отвечает.
Как поднять сайт максимально быстро 10 минут назад? бить по морде 403 всем подряд?
Ответы: >>1079886
Аноним 2017/09/29 15:26:11  №1068089 12
>>1068041
>The robots.txt file must be in the top-level directory of the host, accessible though the appropriate protocol and port number.
>accessible though the appropriate protocol and port number.
Еще за это поясни плз.
Ответы: >>1068095
Аноним 2017/09/29 15:36:51  №1068093 13
>>1068010

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

Если делать на фреймворке - то с модификациями. Ну например, авторизацию сделать как указано в задаче, а не как удобнее фреймворку.
Аноним 2017/09/29 15:39:19  №1068095 14
>>1068041

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

>>1068065

Какого плагина?

>>1068089

протокол http или https, соответствено порты 80 или 443.
Ответы: >>1068147
someApprentice 2017/09/29 16:42:08  №1068108 15
Уже второй день не могу справиться с циклами в Обещаниях.

Вчера, я не мог асинхронно выполнить цикл

>getMessages().then(function(messages) {
>
>for (var key in messages) {
>console.log("LOOP: " + messages[key].id);
>
>decrypt(messages[key].content).then(function(decrypted) {
>console.log("PROMISE: " + messages[key].id);
>});
>}
>
>});
>
>//LOOP: 1
>//LOOP: 2
>//PROMISE: 2;
>//PROMISE: 2;

Поискав в интернете я нашел похожую проблему https://stackoverflow.com/questions/40328932/javascript-es6-promise-for-loop , и из её решения я понял что нужно написать функцию, которая рекурсивно вызывает Обещание одно за другим, и написал обёртку

decryptMessages(messages) {
var that = this;

function loop(messages, i) {
if (i === undefined) {
i = 0;
}

var length = Object.keys(messages).length;

encrypted = messages.content;

// + check if privateKey added
decrypted = that.decrypt(encrypted);

decrypted.then(function(decrypted) {
messages.content = decrypted.data;

if (i < length - 1) {
loop(messages, i + 1);
}
});
}

loop(messages);
};

----

getMessages().then(function(messages) {

decryptMessages(messages);

// Object {0: Object {id: 1, content:"DECRYPTED"}, 1: Object {id:2, content:"ONE MORE DECRYPTED"}}
// Perfect
console.log(messages);

for (key in messages) {
console.log(messages[key].content; // -----BEGIN PGP MESSAGE...
}

});

Из примера выше, внутри цикла, свойства итерируемых объектов почему-то остаются нерасшифрованными, не смотря на то что в коллекции они расшифровались.
Ещё одно странное поведение, при обращении к объекту в коллекции по ключу (messages[0].content) значение тоже выводиться не расшифрованным, значит дело не цикле, а в функции которая преобразует эти объекты. Для меня странно, что моя функция decryptMessages() ничего не возвращает, но это, наверно, потому что передается ссылка на объект, и далее он преобразуется в функции. Я ошибся тут? Что ещё тут я делаю не правильно (потому что корень проблемы начался с того что нельзя выполнять асинхронный код в синхронных циклах)?
Ответы: >>1070261 >>1079886 >>1079888
Аноним 2017/09/29 18:10:03  №1068146 16
14710958672110.jpg (36, 777x777)
777x777
>>1067944 (OP)
Мне просто хочется плакать, я так хочу научится погромировать, но не могу блять, не понимаю я его. Я завидую людям которые умеют это делать. Говорят пхп освоит любой - хуйня это все ебаная, если ты тупой, а я тупой, то будь то пхп, питон, неважно, не освоить никак блять. Просто сижу нахуй и плачу от того, ебаное погромирование единственный шанс выбратся из говна ебаного, но почему я родился ТУПЫМ??????
Читаешь теорию - все понятно, после теории приступаешь к задаче и просто не одуупляешь что от тебя требуется! Как блять реализовывать и грамотно использовать изученный материал - у меня не хватает на это мозгов, я тупорылый даун.
А как люди генерируют идеи, а после все это реализуют на ЯП? Это просто за гранью воображения, я не понимаю этого, гении.
Как же меня демотивируют задачи которые я не могу решить, это какой-то психологический барьер или хуй знает. Например, читаю книгу и решаю параллельно задачи по книге и если какую либо из задач я не могу решить - злость, фрустрация, закрываю книгу и лежу неделями на диване хуесося себя.

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

Создайте две случайные даты (с помощью mt_rand()) и установив их в 2 объекта класса DateTime.
Найдите количество дней, часов, минут и секунд, на которое одна дата отличается от другой.
Сделайте разбиение на периоды с интервалом 1 день.
В цикле выведите все даты, которые содержатся между созданными в 1-м пункте, с интервалом из 3-го пункта.

Я не понимаю как можно генерировать случайную дату юзая мт_ранд, если мы генерим дату в формате d.m.Y H:i:s то на выходе получим 29.09.2017 16:55:16, точки двоеточия и прочее, а мт ранд работает с числами только. Разбивать регулярым вырежения или что, я понимаю что в этой ебучей задаче от меня требуют.
>Сделайте разбиение на периоды с интервалом 1 день.
>В цикле выведите все даты, которые содержатся между созданными в 1-м пункте, с интервалом из 3-го пункта.
Чего блять? Я вообще не одупляю условия эти, периоды, какие периоды, хуй твою мамть знает.

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

я уебище тупое
Аноним 2017/09/29 18:11:35  №1068147 17
>>1068095
>Советую автору померять время обработки запроса для разных страниц.
Нет доступа к верверу. Если буду мерять на локалке - поможет ли мне это?
>протокол http или https, соответствено порты 80 или 443.
Мне нада поднять сайт максимально быстро. Я вьебал
User-agent: *
Disallow: /
В роботс, т.к. он был пустым.
Боты игнорят это говно. Вопрос: говно с портами или ботам поебать?
Ответы: >>1068168
Аноним 2017/09/29 18:13:40  №1068149 18
>>1068146
Не умеешь срать, не мучай жопу. Займись чем нибудь другим, хуйли тебе этот кодинг так вперся?
Ответы: >>1068152
Аноним 2017/09/29 18:18:14  №1068152 19
>>1068149
Чем другим? Рисовать не люблю, верстать сайты не нравится, СЕО хуета, поступить в университет на какого-то ТИХНАРЯ? Так там тоже обосрусь из-за ебучих задачек, условий которые в голове не укладываются.
Я нищук с мухосранска 5к, кодинк это был мой ласт шанс стать человеком и перебратся в более крупный город, получать норм даллары и прочее.
Мне нравится стезя погромирования, мне интересно изучать это, но блять у меня нет мозгов чтобы реализовать изученное, бесит нахуй.
Ответы: >>1068168
Аноним 2017/09/29 18:33:34  №1068160 20
>>1068146
У тебя хуевое отношение к задачам. Если ты встречаешь задачу которую не можешь сходу решить: ЭТО ХОРОШО. Это значит, что ты научишься чему то НОВОМУ. В твоем случае, начни с узнавания что такое: unix timestamp, как это получить в PHP, как это конвертировать в понятный формат даты.
Ответы: >>1069517
Аноним 2017/09/29 18:49:33  №1068166 21
>>1068146

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

Ну вот например, смотри, у тебя задача на объект DateTime. А ты вообще изучал этот класс, знаешь, какие у него есть методы? Начни с изучения мануала и прочитай весь раздел про дату/время: http://php.net/manual/ru/book.datetime.php

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

Кто тебе сказал, что дату можно задавать только в формате дней/месяцев/лет? Это не так.

Также, можешь прочесть мой урок про дату/время, вдруг что полезное найдется: https://github.com/codedokode/pasta/blob/master/php/datetime.md
Ответы: >>1069517
Аноним 2017/09/29 18:50:40  №1068167 22
>>1068146
>Я не понимаю как можно генерировать случайную дату юзая мт_ранд, если мы генерим дату в формате d.m.Y H:i:s то на выходе получим 29.09.2017 16:55:16, точки двоеточия и прочее, а мт ранд работает с числами только. Разбивать регулярым вырежения или что, я понимаю что в этой ебучей задаче от меня требуют.
Можно преобразовать число в дату с помощью функции date() и получившуюся строку передать в класс DateTime.

https://secure.php.net/manual/ru/function.date.php
https://secure.php.net/manual/ru/datetime.construct.php

$format = ...;

$random = mt_rand();

$date = date($format, $random)

$datetime = new DateTime($date);
$datetime->format($format);

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

>Сделайте разбиение на периоды с интервалом 1 день.
Здесь, наверно, имелось ввиду разделение полученной даты на дни. Т.е. если получившиеся значение было бы, к примеру, 2 дня и 12 часов, то получился бы массив состоящий из 0 => 24:00, 1 => 24:00, 2 => 12:00;

Ну вообще тут действительно не так очевидно.

P.S.
В шапке треда, кстати, есть задачи на любой уровень сложности.
Ответы: >>1068170 >>1069517
Аноним 2017/09/29 18:51:00  №1068168 23
>>1068147

Для начала, проверь, открывается ли этот файл robots.txt, причем в http и в https версиях.

>>1068152

В твоем случае нужно было полистать мануал и погуглить уроки про дату/время в PHP.
Аноним 2017/09/29 18:51:45  №1068170 24
>>1068167

Это костыль, таймстамп можно напрямую передать в DateTime.
Ответы: >>1068173
Аноним 2017/09/29 18:55:53  №1068173 25
>>1068170
>Это костыль, таймстамп можно напрямую передать в DateTime.
Значит можно обойтись без функции date(). В мануале просто написано что конструктор DateTime принимает именно строку.

https://secure.php.net/manual/ru/datetime.construct.php
public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
Ответы: >>1068206
Аноним 2017/09/29 19:17:00  №1068206 26
>>1068173

Во-первых, там есть метод для задания таймстампа. Во-вторых, там есть еще createFromFormat которая может принимать таймстамп.
Аноним 2017/09/29 19:58:27  №1068232 27
Аноним 2017/09/29 22:20:43  №1068317 28
Никак не могу найти ошибку. Задача про айпад и школьника.
https://ideone.com/EbjMYs
Я вбил данные из старой задачи про айфон. Там еще ответ за спойлером был, я его решил и сверить. И получается он разный.
Банки я пока что закомментил.
И еще есть вопросы:
1) Правильно ли я использую команду return ?
2) Можно ли было в данном случае использовать эту команду как-то по-другому, но тоже правильно? Спасибо.
Ответы: >>1068324 >>1068342
Аноним 2017/09/29 22:30:15  №1068320 29
Нубский вопрос. Есть форма, у нее action="make_huynya.php". Как сделать так, чтобы этот make_huynya не генерировал новую страницу, а дописывал содержимое к той, на которой форма?
Ответы: >>1068367 >>1068379
Аноним 2017/09/29 22:43:37  №1068324 30
>>1068317
Переделал. Теперь вроде все совпадает. Но вопросы по return остались. Прошу проверить, правильно ли я сделал. Пишу ли я как говнокодер? Если да, то как и где надо было правильно писать? Спасибо
Ответы: >>1068325 >>1068342
Аноним 2017/09/29 22:44:03  №1068325 31
Ответы: >>1068342
Аноним 2017/09/29 22:49:34  №1068328 32
61c711eb67.png (280, 600x610)
610x600
Какие существуют подходы для загрузки файлов к посту, до того как пост создан?

Например - Жмем кнопку добавить новость, загружаем сначала к ней картинки (AJAX), далее пишем сам текст и только после этого жмем кнопку сохранить новость.
Как лучше загружать связанные файлы вообще до того как родитель существует?
Ответы: >>1068352 >>1068358
Аноним 2017/09/29 23:38:13  №1068342 33
>>1068317
>Я вбил данные из старой задачи про айфон. Там еще ответ за спойлером был, я его решил и сверить. И получается он разный.
У меня вывелось столько же сколько и под спойлером.

https://ideone.com/EbjMYs
>stdout
>61270.186744521

>1) Правильно ли я использую команду return ?
>2) Можно ли было в данном случае использовать эту команду как-то по-другому, но тоже правильно? Спасибо.
Оператор return нужен чтобы функция завершила своё выполнение и вернула какой либо результат. Как его использовать зависит от тебя.

https://secure.php.net/manual/ru/functions.returning-values.php

>>1068324
Небольшая придирка к оформлению кода - где-то есть лишнее пробелы и переводы строки, где-то их нет. Аккуратно оформленный код проще читать. Как правильно оформлять код можно почитать здесь >>1067945 В частности, советую почитать стандарты PSR-1 и PSR-2.

>>1068325
https://ideone.com/2EheEI

Выражения вида $a = $a + $b можно писать проще $a += $b.

К сожалению комментарий об этом на английском:
https://php.net/manual/ru/language.operators.assignment.php#40084

Вроде правильно, но лучше спросить у codedecode разрешает ли он "имитировать" количество месяцев в цикле, а не считать их самому.
Ответы: >>1068356 >>1068364
Расчёт маршрута Аноним 2017/09/29 23:45:49  №1068347 34
Делаю задачу, где надо найди минимальный маршрут. Воспользовался алгоритмом Дейкстры, чтобы найти самые короткие маршруты. Аноны, как можно найти остановки маршрута?

https://3v4l.org/9rcVt

Ответы: >>1068363
Аноним 2017/09/29 23:51:54  №1068352 35
>>1068328
После отправки поста обновить записи о картинках к какому посту они привязаны.
Аноним 2017/09/30 00:01:54  №1068356 36
Аноним 2017/09/30 00:18:41  №1068358 37
>>1068328

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

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

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

Не забывай, что сначала мы сохраняем картинку на диск, а потом вставляем в таблицу. И в обратном порядке при удалении. Это гарантирует, что не будет записей в БД, которым не соответствуют файлы.

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

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

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

Помни, что скрипт (да и сервер целиком) может упасть в любой момент и продумывай логику так, чтобы минимизировать урон. Например, использование транзакций гарантирует, что в БД не будет "не до конца" вставленных данных. Это немного усложняет код, но экономит тебе много времени на исправление ошибок в БД.
Ответы: >>1068623
Аноним 2017/09/30 00:30:01  №1068363 38
>>1068347

У тебя есть массив maxTime (странное название), который хранит минимальное время, за которое можно добраться от старта до какой-то точки. Можно сделать еще массив prevPoint, который хранит для каждой точки, откуда ты в нее пришел. По этому массиву потом можно будет восстановить путь.

> $numberOfPaths
Название неудачное, лучше назвать например pointIds

> for ($i = 0; $i < count($numberOfPaths); $i++){
Посмотри функции array_fill и array_fill_keys.

Вообще, массив communications можно было и не делать, эти данные уже есть в массиве paths.

> for ($i = 0; $i < count($connectedStops); $i++){
Для перебора массива лучше подойдет foreach

> //ПОСТРОЕНИЕ ТАБЛИЦЫ ДОРОГ
Что-то выглядит сложно и запутанно. Это точно нужно?

> $maxTime[$i] = 1000000;
Если что, в PHP есть константа INF, а также функция is_finite():

http://php.net/manual/ru/math.constants.php
http://php.net/manual/ru/function.is-infinite.php
Аноним 2017/09/30 00:33:39  №1068364 39
>>1068342

Количество месяцев - это защита от вечного зацикливания. Можно сделать и по-другому, сделав например условие:

продолжать, пока (долг > 0) {
...
если (новый долг > предыдущего долга) {
получается вечный цикл, выходим;
}
}

Другой вариант - делать остановку после 200 лет например.

Желательно избегать циклов, где есть возможность зацикливания. Указание заведомо большего числа месяцев позволяет это сделать, хотя может вместо цифры 20 стоило бы как-то делать грубую оценку исходя из суммы долга и месячной платы, либо исходя из оценки времени жизни заемщика.
Аноним 2017/09/30 00:41:04  №1068367 40
>>1068320
> Как сделать так, чтобы этот make_huynya не генерировал новую страницу, а дописывал содержимое к той, на которой форма?
Простая отправка формы всегда заставляет браузер рендерить ответ.
Поэтому есть ajax. Что бы вкатится вполне пойдет старый добрый jquey.
Ответы: >>1068369
Аноним 2017/09/30 00:41:34  №1068368 41
Мне из моего скрипта надо взаимодействовать с API стороннего сайта. Нужно указать TOKEN, который мне выдал этот API... я не пойму куда его прописывать, в headers?
Ответы: >>1068374
Аноним 2017/09/30 00:42:08  №1068369 42
>>1068367
т.е. без javascript я эту задачу вообще никак не решу?
Ответы: >>1068371
Аноним 2017/09/30 00:44:37  №1068371 43
>>1068369
>т.е. без javascript я эту задачу вообще никак не решу?
Да. Без js не получится.
Но там на самом деле оч мало то нужно.
Ответы: >>1068372
Аноним 2017/09/30 00:45:48  №1068372 44
>>1068371
Лол, я JS знаю лучше чем php, просто удмал, что может как-то можно не плодя сущности и не добавляя js К существующей поделке
Ответы: >>1068375
Аноним 2017/09/30 00:49:58  №1068374 45
>>1068368
Кратко: смотри документацию.
Если ее нет, то пробуй без токена и может в ошибке, что вернет сервер, будет ответ.
А так, и в хидерах бывает, и в теле. У многих можно и так и так.

Но в теле, при гет запросе, не советуется. Т.к. при хттпс запросе, строка с адресом не кодируется.
Ответы: >>1080108
Аноним 2017/09/30 00:55:25  №1068375 46
>>1068372
> я JS знаю лучше чем php, просто удмал, что может как-то можно не плодя сущности и не добавляя js К существующей поделке
Ты сам подумай. Браузер должен знать, как твой ответ распарсить, чего там ковырнуть, как это отрендерить и куда это потом запихнуть.
Аноним 2017/09/30 01:05:22  №1068379 47
>>1068320
Слушай ну если это форма ты можешь просто проверять наличие ПОСТА и инклудить ее.
Ответы: >>1068390
Аноним 2017/09/30 01:09:18  №1068383 48
>>1068146
Спасибо за ответы парни, я остыл и решил заново трайнуть решить задачу.
https://ideone.com/XyB3i1
Написал функцую которая генерирует рандомную дату, потому что блять я ума не приложу как это по другому сделать.
Если кто-то знает каким образом по другому генерить рандом дату - отпишитесь плиз.
я не выебываюсь, а просто нарабатываю привычку писать в стиле ооп

тупое уебище
Ответы: >>1068385 >>1068388 >>1068394
Аноним 2017/09/30 01:11:13  №1068385 49
>>1068383
Алсо, если часто обновлять страницу, то получим вместо рандом даты нужного диапазона мы получим дату 19700101, с чем может быть связана проблема? Установлен последний апач.
Ответы: >>1068389 >>1068395
Аноним 2017/09/30 01:19:09  №1068388 50
>>1068383
Самый изич, это сгенерить юникс теймстамп и потом спарсить в дейт тайм.
Правда, эта рандом дата никогда не будет ранее 1970 года.

Но твоя функция тоже норм. Единственное, сделай ее сразу конструктором твоего класса.
Аноним 2017/09/30 01:24:56  №1068389 51
>>1068385
Ты точки забыл. Которые разделители в рандомной дате.
Аноним 2017/09/30 01:36:31  №1068390 52
>>1068379
но ведь она будет отрисовываться заново
Аноним 2017/09/30 02:14:48  №1068393 53
Еще один нубский вопрос. Вот мой скрипт обработал что-то полученное из формы и теперь ему нужно сгенерировать новую(простенькую) страницу для ответа. Как делают приличные люди? Смешать в одном файле код php и html?
Ответы: >>1068396
Аноним 2017/09/30 02:20:33  №1068394 54
>>1068383

А куда делся DateTime? Ты же вроде хотел его использовать?

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

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

Наконец, с точки зрения ООП выглядит тоже довольно бессмысленно. Вот что у тебя представляет объект класса RandomDate? Непонятно. Непонятно, зачем у тебя свойство date, которое никак вообще не используется.

Если ты хотел сделать объект, представляющий дату, то надо было либо хранить внутри него timestamp, либо по отдельности год/месяц/день. Хотя не очень понятно зачем это делать, когда есть DateTime.

Я бы тебе советовал все же прочесть мой урок https://github.com/codedokode/pasta/blob/master/php/datetime.md . Насчет ООП, я бы советовал почитать учебник из ОП поста, главу про ООП, и попробовать решить там задачу про Вектор. Тут у тебя ООП просто за уши притянут, ты вроде как используешь класс, но смысла в нем никакого нет, проще было сделать просто функцию либо статический метод в классе без свойств.

Ответы: >>1068397
Аноним 2017/09/30 02:22:07  №1068395 55
>>1068385

С тем, что ты генерируешь неправильную дату (вроде 2017131) которая не парсится. Прочти уже мануал по strtotime. Прочти описание поддерживаемых форматов даты. Никто за тебя это делать не будет.
Аноним 2017/09/30 02:24:28  №1068396 56
Аноним 2017/09/30 02:26:55  №1068397 57
OS0RGrUPWeQ.jpg (255, 1079x1024)
1024x1079

>>1068394
Читал твой урок, я тупой поэтому наговнокодил только вот это, днем буду переделывать https://ideone.com/ItLFPe
Завтра продолжу изучать, спокойной ночи всем итт.
Ответы: >>1080108
Аноним 2017/09/30 15:08:41  №1068564 58
Несколько у меня вопросов.
1. Чем в PDO bindValue и bindParam отличаются? Несколько раз перечитывал описание но так и не понял.
2. Нормально ли в конструкторе объекта дохуя кода писать? У меня такая привычка, я через него кучу всякой хуйни объявляю и даже некоторые вычисления, но подозреваю что это не очень хорошо.
3. Не очень понимаю что относить к моделям в MVC. Нет, ну понятно что работу с БД, сущности там. А всякие вещи типа валидации и пагинации - это тоже модели?
Аноним 2017/09/30 15:23:48  №1068572 59
>>1068564
3. Ну вообще да, модели, а контроллеры для них выступают в роли клиентского кода (вызывают методы этих моделей)
Ответы: >>1068585
Аноним 2017/09/30 15:34:35  №1068576 60
>>1068062
Бамп. Скажите, правильно ли я сделал эту задачку.
Ответы: >>1068881
Аноним 2017/09/30 15:47:48  №1068585 61
>>1068572
Т.е. пагинатор можно пихать в пространство имен к моделям? У меня такие сервисы пока просто App
Ответы: >>1068593 >>1068625
Аноним 2017/09/30 15:59:05  №1068593 62
>>1068585

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

Насчет пагинатора - трудно сказать, скорее это вспомогательный класс.
Ответы: >>1068625
Аноним 2017/09/30 16:53:00  №1068623 63
>>1068358
Спасибо. Собственно так и сделал, как самый простой вариант.
Только алгоритм сохранения такой:
- открыть транзакцию
- сохранить запись в бд
- если сохранилась сохранить файл
- если файл сохранился комит
- во всех остальных случая ролбэк

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

Ответы: >>1068635
Аноним 2017/09/30 17:03:25  №1068625 64
>>1068585
>>1068593
Да, это вообще концептуальное разделение, а не название папок/пространств.
Аноним 2017/09/30 17:28:14  №1068635 65
>>1068623

Получишь. Если скрипт упадет после сохранения файла, но до коммита. Но это не так страшно (по сути просто лишний файл), хуже если запись в БД есть, а файла на диске нет.
Ответы: >>1068646
Аноним 2017/09/30 17:42:58  №1068646 66
>>1068635
Понял. Спасибо еще раз.
Аноним 2017/09/30 18:47:48  №1068673 67
Поможите пожалуйста!
Есть Слим 3 и есть Твиг в качестве шаблонизатора. Есть проект файлообменника и короче после загрузки файла, я редиректю пользователя на другой контроллер и есть ссылочка вот такого вида которую успешно обрабатывает контроллер /download/id/cocy-xyu.jpg я получаю данные из базы данных в объект и вот как теперь мне передать эти данные в странчку download.twig.
$this->view->render($response,'home.twig'); вот так я попадаю на главную странчику.
а вот так мне предглагает мануал
echo $this->view->render('download.twig', array('file' => $file));
Как делать я чего-то не ябу.
Ответы: >>1068698
Аноним 2017/09/30 19:08:57  №1068676 68
Все же поясните нубу чуть подробнее:
У меня отработал скрипт, в нем я получил данные которые нужны для того, чтобы сгенерировать страницу, как мне ее отобразить, ну не echo же. Могу ли я это сделать без шаблонизатора? Потому что не хочется его прикручивать ради двухстраничного тестового задания
Ответы: >>1068678 >>1080108
Аноним 2017/09/30 19:12:46  №1068678 69
>>1068676
...вариант подключения шаблона(в котором тоже php) через require подойдет?
Аноним 2017/09/30 19:39:03  №1068698 70
>>1068673
Разобрался вроде
return $this->view->render($response,'download.twig', array('file' => $file));
Аноним 2017/09/30 19:54:30  №1068712 71
А в продакшне что нужно с исключениями делать?
Ответы: >>1068748 >>1069034
Аноним 2017/09/30 21:11:49  №1068748 72
>>1068712
Логировать, слать ошибку в телегу, юзеру показывать 500. Чего ты с ними еще сможешь сделать?
Ответы: >>1068778
Аноним 2017/09/30 22:27:10  №1068778 73
>>1068748
Ну вот да, а как это грамотно организовать? В set_exception_handler, ну и во всех имеющихся catch'ах просто вставить header('HTTP/1.1 500 Internal Server Error'); die()? Телега – это телеграм?
Аноним 2017/09/30 23:01:56  №1068786 74
Объясните. У меня есть форма. Я ее обрабатываю php-скриптом. Я по его итогам получил данные, которые мне нужны, чтобы сгенерировать страницу ответа. Как мне данные из php ей передать? У меня получилось через require_once('aaa.html'), но тогда я как бы продолжаю находиться в своем скрипте, меня это не устраивает. Правильный(вроде бы) переход получается через header("Location: /aaa.html"), но как тогда передать ему данные(их довольно много) из php?
Ответы: >>1068873
Аноним 2017/09/30 23:49:29  №1068812 75
И сразу же еще один вопрос. Я в скрипте получаю нужный мне массив и делаю require_once('aaa.html'), в этом html файле, используя php как шаблонизатор я циклом for отрисовываю нужные мне div'ы. Я бы хотел, чтобы каждый div был ссылкой и в качестве href указать адрес с параметрами, которые зависят от номера данного элемента массива. Как мне в href запихать переменную?
Ответы: >>1068847 >>1068873 >>1069034
Аноним 2017/10/01 00:13:40  №1068847 76
>>1068812
Div - это div, его нельзя сделать ссылкой, только средствами JS. Но возможно тебе подойдет обычный тег "a" с display:block. Возможно ошибаюсь, ибо последние 3 года занимаюсь только backend, может что-то поменялось в мире html
Ответы: >>1068859 >>1068860
Аноним 2017/10/01 00:21:31  №1068859 77
>>1068847
блин, да я обернул div в а, вот и все.... ты не понял вопроса, но я его уже решил. Зато появился другой вопрос.
Логика работы моей поделки: на главной странице форма, куда вбивается поисковая строка, результат обрабатывается php-скриптом и получается некий результат. На основе этого результата выдаем html страницу. На этой странице есть ссылка(пока одна, но потом будет много), она работает- направляет на правильную страницу, НО... на этой странице почему-то не работает php, вот просто игнорируется все, что внутри <?php ?>. Что за херня?
Ответы: >>1068868 >>1069034
Аноним 2017/10/01 00:22:38  №1068860 78
>>1068847
Можно ещё за место <div> использовать <label> с display:block и заключить его в ссылку.
Ответы: >>1068863
Аноним 2017/10/01 00:23:24  №1068863 79
>>1068860
На мой первый вопрос забей
Аноним 2017/10/01 00:26:07  №1068865 80
>>1068564
1. Ну написано же русским языком в оффициальном php.net
>В отличие от PDOStatement::bindValue(), переменная привязывается по ссылке, и ее значение будет вычисляться во время вызова PDOStatement::execute().
Значит, в случае с bindValue ты привязываешь значение переменной, а bindParam привязываешь саму переменную. Например, у тебя есть подготовленное "pdo-выражение" bindParam, где ты привязал переменную $megaHash, а этот мега-хеш вычислять 10 раз потом и сделать $stmt->execute(). И у тебя привяжется последнее значение этого мега-хеша
2. Это плохо. В идеальном случае ты через конструктор должен передать только зависимости для твоего объекта.
3. Вот то, про что ты пишешь - так сделано вроде в Yii2. Но лучше, чтобы модель не была слишком толстой. В моем понимании модель - это бизнес-логика и все. Форма лежит рядом, но отдельно. Так как у тебя может быть одна модель User и куча форм с валидацией к ней: Registration, ChangePassword, etc.
Аноним 2017/10/01 00:30:09  №1068868 81
>>1068859
Выглядит так, как будто ты хочешь чтобы php работал у тебя в браузере, такому не бывать. PHP выполняется на стороне веб-сервера, браузер лишь выполняет отрисовку результата работы веб-сервера + php
Ответы: >>1068870 >>1068875
Аноним 2017/10/01 00:30:50  №1068870 82
>>1068868
Блядь... и действительно
Аноним 2017/10/01 00:33:49  №1068873 83
>>1068786
Да, нужно делать через require\require_once.
Переход через header нужен если нужно куда-то перенаправить. Например, на заглавное странице есть форма регистрации с action="register.php", в register.php мы обрабатываем данные и если всё ок, то куда-нибудь перенаправляем например на заглавную страницу.

>>1068812
>Как мне в href запихать переменную?
href="<?= $variable ?>"
Ответы: >>1068877 >>1069031
Аноним 2017/10/01 00:36:17  №1068875 84
>>1068868
Последний вопрос и я перестану трахать мозг:
вот пользователь ввел данные в форму и нажал кнопку отправки, включается скрипт, он вычисляет нужное и делает require_once('aaa.html')- внутри этого html я искпользую переменные из моего скрипта. Как мне сделать так, чтобы я по-прежнему мог внутри aaa.html использовать переменные из скрипта, но при этом именно перенаправлять пользователя на готовый aaa.html. Ведь при текущей реализации, после нажатия кнопки в форме я вижу в адресной строке /обработчик формы.php
Ответы: >>1069031
Аноним 2017/10/01 00:37:28  №1068877 85
>>1068873
>href="<?= $variable ?>"
Я думал об этом, но у меня там массив, который может быть недетской длины. Некрасиво как-то
Ответы: >>1068883
Аноним 2017/10/01 00:39:34  №1068881 86
>>1068576
Норм. Как решишь эту же задачу, если по условию будет, что на вход подается только однобайтная строка, а не utf8?
Аноним 2017/10/01 00:42:03  №1068883 87
>>1068877
>>href="<?= $variable ?>"
>Я думал об этом, но у меня там массив, который может быть недетской длины. Некрасиво как-то
Тогда нужно использовать цикл.

Для шаблонов придумали альтернативный синтаксис:
https://php.net/manual/ru/control-structures.alternative-syntax.php
Ответы: >>1068887
Аноним 2017/10/01 00:46:50  №1068887 88
>>1068883
Я хочу, чтобы у пользователя в адресной строке всегда было/что_то_там.html Для этого, мне нужно использовать header(). Но мне на той странице, куда я перехожу, нужны переменные из скрипта. Есть ли решения,кроме передачи их параметрами запроса типа ?a=1&b=2 ???
Ответы: >>1068889 >>1068893
Аноним 2017/10/01 00:52:21  №1068889 89
>>1068887
Тебе нужно что-то вроде Rewrite Rules, чтобы, когда пользователь переходит на page.html, на самом деле выполнялся скрипт page.php
Почитай про Rewrite Rules в nginx, apache, lighttpd или что ты там используешь
Ответы: >>1068891 >>1068895
Аноним 2017/10/01 00:53:19  №1068891 90
>>1068889
Да даже к php -S, вроде, можно написать маршрутизацию как тебе надо
Аноним 2017/10/01 00:55:50  №1068893 91
>>1068887
Гугли htaccess и RewriteEngine
Аноним 2017/10/01 00:57:28  №1068895 92
>>1068889
Почитаю на досуге, мысль вроде ясна.
А вообще, когда я нажимаю на кнопку формы, получаю страницу результата, но вижу в адресной строке /обработчик_формы.php это вообще плохо?
Ответы: >>1068896 >>1069031
Аноним 2017/10/01 01:00:25  №1068896 93
>>1068895
для поделки и тестового задания - нет, для крупного интернет-магазина не очень.
Ответы: >>1068901 >>1068929
Аноним 2017/10/01 01:07:46  №1068901 94
>>1068896
Так. А если зайти с другой стороны. Сейчас я в php обработчике формы взаимодействую со сторонним api которое мне возвращает нужные данные, я это делаю с помощью file_get_contents.
Могу ли я делать то же самое на стороне клиента с помощью JavaScript? Если да, могу ли я потом передать результаты из скрипта другой html странице?
Ответы: >>1068903 >>1069031
Аноним 2017/10/01 01:10:47  №1068903 95
>>1068901
>Могу ли я делать то же самое на стороне клиента с помощью JavaScript?
Скорее всего нет, почитай про Access-Control-Allow-Origin
Ответы: >>1068906
Аноним 2017/10/01 01:14:40  №1068906 96
>>1068903
На досуге почитаю. Можешь в двух словах объяснить что помешает мне это сделать?
Ответы: >>1068907 >>1068908
Аноним 2017/10/01 01:15:33  №1068907 97
>>1068906
типа нельзя делать кроссдоменные запросы?
Аноним 2017/10/01 01:16:02  №1068908 98
>>1068906
Браузер, но тут скорее нужно мнение frontend эксперта
Ответы: >>1068914
Аноним 2017/10/01 01:22:16  №1068914 99
>>1068908
Смотри, мне дали такое задание:
попробуйте на любом бесплатном хостинге сделать страницу, которая будет позволять любому пользователю ввести адрес или кадастровый номер объекта недвижимости, а в ответ на введенные данные получить информацию по этому объекту. Далее выбрав объект (если их несколько) пройти процедуру оплаты. Саму интеграцию платежного шлюза делать не надо, это потребует времени.
Интеграцию получения сведений об объектах недвижимости необходимо производить через API проекта apirosreestr.ru

ТО есть стек технологий и технические пожелания по реализации не указаны. Делать это на php- норм, или изначально плохая идея?
Ответы: >>1068916 >>1068940 >>1069031
Аноним 2017/10/01 01:23:46  №1068916 100
>>1068914
... я не очень понимаю что они подразумевают под процедурой оплаты. Первая мысль- просто сделать страницу вида "вот тут мы будем платить за объект такой-то"
Ответы: >>1069031
Аноним 2017/10/01 01:33:37  №1068929 101
>>1068896
А если бы это был крупный интернет магазин. И нужно из php обработчика формы передать результат(большой массив) html странице. Неужели передаче через ?a=12b=22c=15... ,которые маячат в адресной строке, это нормально?
Ответы: >>1068931 >>1069031
Аноним 2017/10/01 01:34:13  №1068931 102
>>1068929
?a=12&b=22&c=15
быстрофикс
Ответы: >>1068947
Аноним 2017/10/01 01:39:26  №1068940 103
>>1068914
php, nodejs - проще простого. Но судя по твоим вопросам в треде, тобi пизда, ибо как я вижу наипростейший алгоритм
1) юзер на index.html вводит номер и нажимает поиск
2) аякс запрос на твой скрипт api.php, откуда возвращается список и рендерится на странице средствами js
3) юзер переходит по ссылке на /pay.php?objectId=7 и показывается простая форма оплаты с вводом номера Карты, имени с кода. И кнопка оплатить
4) по нажатию на кнопку форма ведёт на result.php?objectId=7, где ты выводишь инфу по объекту

Вот это самое простое решение
Ответы: >>1068945 >>1068956 >>1068977
Аноним 2017/10/01 01:43:46  №1068945 104
>>1068940
Мне было бы даже комфортнее на node.js, но
1) Хочется немного пощупать php
2) Думаю, что могут быть проблемы с поиском бесплатного хостинга поддерживающего ноду
Аякс запросы на php я не знал что так можно, лол. Идея хорошая, попробую реализовать
Ответы: >>1068950
Аноним 2017/10/01 01:45:18  №1068947 105
>>1068931
Из php в html ничего не передаётся. Считай, что php - это шаблонизатор, который может динамически в зависимости от запроса строить html страничку. Большие магазины сидят на jsonrpc, protobuff и не гоняют статику просто так.
Аноним 2017/10/01 01:46:58  №1068950 106
>>1068945
У тебя аякс запрос уходит со странички в браузере на твой php скрипт. Он не в php.
Ответы: >>1068955
Аноним 2017/10/01 01:49:06  №1068955 107
>>1068950
хочу помогать ньюфажикам, но чёт пиздец, видимо поясняю как-то плохо или невнятно. Извините если что
Аноним 2017/10/01 01:49:32  №1068956 108
>>1068940
У меня сейчас есть работоспособное решение такое:
У формы action='api.php' и там в конце этого скрипта require_one('results.html')
На странице results у найденных объектов ссылки вида /pay.php?тут данные описывающие объект которая ведет на страницу оплаты
Аноним 2017/10/01 02:06:38  №1068977 109
>>1068940
Сюда залил https://afradkova.000webhostapp.com/

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

Только вбивай адрес не как можно более конкретный вплоть до номера дома, а то выдаст тебе 100500 объектов
Ответы: >>1068982 >>1069030
Аноним 2017/10/01 02:09:30  №1068982 110
>>1068977
*как можно более конкретный
Ответы: >>1068983
Аноним 2017/10/01 02:10:30  №1068983 111
>>1068982
Норм, работает чёт медленно только. И причеши
Ответы: >>1068985
Аноним 2017/10/01 02:11:39  №1068985 112
>>1068983
Я так понял, что api не очень быстро отвечает
Ответы: >>1068989
Аноним 2017/10/01 02:13:01  №1068989 113
>>1068985
Я могу сделать чтоюы по нажатию на кнопку и мой php скрипт запускался и параллельно с ним запускался js скрипт, который бы выводил вращающийся спиннер с надписью "ждем результатов"?
Ответы: >>1069030
Аноним 2017/10/01 02:30:43  №1069005 114
https://ideone.com/wRo3RI

Почему он мне 5000 выдаёт? Я не понимаю. Я же написал как ему считать $paymentTotal, а он к ему только месячный взнос прибавляет. Он поехавший? Что он пишет?
Ответы: >>1069030
Аноним 2017/10/01 02:33:58  №1069006 115
Аноним 2017/10/01 02:40:29  №1069010 116
>return возвращает управление программой модулю, из которого была вызвана функция.

Это почти как break работает?

>Значения возвращаются при помощи необязательного оператора возврата.

Что? Куда они возвращаются?
Ответы: >>1069018 >>1069029
Аноним 2017/10/01 03:12:48  №1069018 117
Аноним 2017/10/01 04:03:50  №1069029 118
>>1069010

Во-первых, вот мой пост про return, прочти >>1067893

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

// определяем функцию, в этот момент просто создается функция, но ее код пока не запускается
function someFunc($a, $b)
{
// создаем временную переменную $c, которая
// существует только до момента выхода из функции
$c = $a + $b;
return $c;
}

// вызываем ее, PHP начинает выполнять функцию, а ее результат после выхода сохранит в $x
$x = someFunc(3, 4);

// а можно сразу вывести результат, без переменной
echo someFunc(3, 4); // выведет 7

Функция не видит переменные, созданные снаружи ее (это сделано специально, и это хорошо, иначе в большой программе был бы риск, что функция затрет какую-то созданную снаружи переменную). С помощью аргументов в скобках мы передаем значения ($a = 3, $b = 4) внутрь функции. Она выполняется. И затем команда return выходит из функции и возвращает результат, который сохраняется в переменную $x (в данном случае 7).

> Это почти как break работает?
Да, break выходит из цикла, return из функции. Но на этом аналогия заканчивается.

> Что? Куда они возвращаются?
В место, откуда была вызвана функция. В примере выше return вернет результат, который будет сохранен в переменную $x. Функция может, если хочет, вернуть одно какое-то значение как результат своей работы (если в функции нет команды return, то считается что она вернула значение null). А тот, кто вызвал функцию, может, если хочет, сохранить это значение, или сделать что-то еще с ним. А может ничего не делать.
Аноним 2017/10/01 04:10:48  №1069030 119
>>1069005

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

$paymentTotal;

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

>>1068989

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

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

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

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

>>1068977

Нужно сделать защиту от выдачи 100500 объектов.

Аноним 2017/10/01 04:17:38  №1069031 120
>>1068929

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

Ну или мы о разных вещах думаем.

>>1068916

Так спроси.

>>1068914

Задание надо делать самому.

>>1068901

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

>>1068895

Нет

>>1068875

Вообще, тебе надо изучать теорию .Есть 2 метода - GET и POST для отправки форм, у них свои недостатки и достоинства, читай урок https://github.com/codedokode/pasta/blob/master/forms.md

>>1068873

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

Аноним 2017/10/01 04:22:27  №1069034 121
>>1068564

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

>>1068859

Расширение наверно надо сделать php, а не html.

>>1068812

div не может быть ссылкой, надо использовать тег a. Тебе стоило бы изучить HTML/CSS получше.

>>1068712

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

Описано у меня в уроке https://github.com/codedokode/pasta/blob/master/php/exceptions.md

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

Аноним 2017/10/01 04:28:34  №1069035 122
>>1068564

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

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

> 3. Не очень понимаю что относить к моделям в MVC. Нет, ну понятно что работу с БД, сущности там. А всякие вещи типа валидации и пагинации - это тоже модели?

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

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

То есть модель и есть само приложение, а контроллеры/вью, это так, обертка, чтобы человек мог взаимодействовать с моделью.
Аноним 2017/10/01 04:37:43  №1069037 123
>>1068564

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

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

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

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

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

Я видел приложения без MVC, ну например, там регистрация пользователя дублировалась в нескольких контроллерах (так как было несколько мест, где это можно сделать). Если ты хочешь поменять логику проверки email, например, то надо было менять код в нескольких местах, и тестировать каждое по отдельности. Очень неудобно.
Аноним 2017/10/01 12:03:06  №1069103 124
Так, снова проблема, отношения к php не имеет, но ладно, пусть уж будет тут. Этот тот анон, что вчера поздним вечером показывал свою поделку.
Проблема такая: я решил поставить скрипт на кнопку формы, для мгновенного отклика на нажатие, чтобы юзер понимал, нажалось ли, сработало ли и тп. Делают тег SCRIPT, туда функцию, в onclick ее указываю и.... ничего, не срабатывает. А если в onclick напрямую что-то указываю типа alert('bla-bla-bla'), то срабатывает.
Ответы: >>1080108
Аноним 2017/10/01 13:10:23  №1069121 125
pidor1.jpg (75, 2560x588)
588x2560
Я упоротый или у IE бледнее палитра?
Ответы: >>1069233
Аноним 2017/10/01 13:13:40  №1069123 126
Так. Я смог осилить написание Ajax запроса из JS на php, он выполняется. Но есть проблема, в PHP я получаю переменную и мне нужно ее передать как результат этого Ajax запроса. Как это сделать? Я думал тупо return $result, но нихера
Ответы: >>1069126
Аноним 2017/10/01 13:20:51  №1069126 127
>>1069123
И еще... сейчас подробнее опишу: форма, а кнопке отправки стоит JS обработчик, который делает AJAX запрос на PHP скрипт.(сам запрос выполняется, проверено) 2 проблемы:
1. Даже если в PHP скрипте нет ничего такого, что должно выводить что-то на экран, все равно появляется пустое окошко после нажатия кнопки.
2. Как отдать переменную $result как результат Ajax запроса?
Ответы: >>1069127
Аноним 2017/10/01 13:22:15  №1069127 128
>>1069126
первый вопрос снимается, второй актуален
Ответы: >>1069142
Аноним 2017/10/01 13:56:03  №1069142 129
>>1069127
Так... проблема вот в чем. У меня запрос отправляется и данные получаются обратно, в xhr.responseText все нужное я получаю. НО у меня почему-то после выполнения php страница перезагружается, как поправить?
Аноним 2017/10/01 15:50:33  №1069183 130
Are Parent constructors called implicitly inside a class constructor?

No, a parent constructor have to be called explicitly as follows:

parent::constructor($value)

Это странно. Пишу сейчас программу и у меня есть класс Контроллер от которого другие контроллеры наследуются. И вот у контроллера есть конструктор, а у других нет. Хотя я обращаюсь к свойству родителя без проблем. Как так?
Ответы: >>1069185 >>1069236
Аноним 2017/10/01 15:56:56  №1069185 131
>>1069183
Потому что когда ты переопределяешь метод родителя у тебя два пути - или ты полностью пишешь новый метод затирая старый, или ты дополняешь старый - parent::__construct() в твоем случае.
Аноним 2017/10/01 17:32:46  №1069233 132
>>1069121

Вообще, у IE есть особенность, влияющая на вывод картинок.

ИЕ и другие браузеры по-разному интерпретируют блок GAMA, который задает гамма-коррекцию для цветов в PNG.

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

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

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

https://jonathannicol.com/blog/2006/12/01/fixing-png-gamma/
https://hsivonen.fi/png-gamma/

Решение - не добавлять гамму при сохранении PNG (наверняка есть опция) или вырезать ее утилитами вроде pngcrush.

Кстати, на моем бледном экране оба логотипа на твоей картинке выглядят почти одинаково. Я даже на телефон скопировал картинку и там оба логотипа тоже выглядят одинаково. Но проверка гимпом (через окошка Pointer Info) показала - вверху красный цвет eb6661, а внизу ea6661, так что ты прав, что они разные.
Аноним 2017/10/01 17:36:21  №1069236 133
>>1069183

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

Текст, который ты процитировал, относится к случаю, когда конструктор определен и в предке, и в наследнике - в этом случае конструктор предка по умолчанию не вызывается, если ты это не делаешь явно.
Аноним 2017/10/01 20:35:57  №1069308 134
1.JPG (55, 776x504)
504x776
2.JPG (87, 798x809)
809x798
Отправляю почту через пхп, понадобилось прикрутить select, но с него ничего не отправляется. Что я делаю не так?
Ответы: >>1069324
Аноним 2017/10/01 21:03:50  №1069324 135
>>1069308
>var user_dlina
Ай си вот ю дид зер
Ответы: >>1069327 >>1069341
Аноним 2017/10/01 21:09:16  №1069327 136
Аноним 2017/10/01 21:18:50  №1069341 137
>>1069324
Во первых убери у селекта тайп
Во вторых <option value="pizda">вагина</option>
Вот при отправке (при выборе "Вагина") отправляться будет pizda.
Ответы: >>1069346
Аноним 2017/10/01 21:22:54  №1069346 138
3.JPG (22, 529x195)
195x529
>>1069341
Попробовал уже так, не отправляет.
Ответы: >>1069405 >>1069424
Аноним 2017/10/01 21:25:42  №1069352 139
Тут такая проблема: поставил OpenServer, в php скрипте обращаюсь к файлу blablabla.html- все работает. Когда же просто в html ставлю на него ссылку, он ругается, пишет, что доступ запрещен. Как и где поправить?
Ответы: >>1069354
Аноним 2017/10/01 21:27:06  №1069354 140
>>1069352
причем, если я тупо в адресной строке вбиваю путь к нему- все нормально переходит
Аноним 2017/10/01 21:36:12  №1069364 141
15059361286130.jpg (60, 640x640)
640x640
>>1068146
Помню некоторые простые задачки по джс по 3-5 дней обдумывал. http://learn.javascript.ru/ за полгода осилил. А ты сколько над своей задачкой сидел?
Ответы: >>1069517
Аноним 2017/10/01 22:06:06  №1069378 142
>>1068146
>Я не понимаю как можно генерировать случайную дату юзая мт_ранд, если мы генерим дату в формате d.m.Y H:i:s то на выходе получим 29.09.2017 16:55:16, точки двоеточия и прочее, а мт ранд работает с числами только. Разбивать регулярым вырежения или что

Время в формате юникс не не слышал?
Займись лучше задачками опа, сделай МВЦ приложение, а потом файлообменник.
Аноним 2017/10/01 22:36:46  №1069394 143
В задаче про файлообменник каким размером делать превью для картинок?
Нужно ли перекодировать видео для превью?
Ответы: >>1080109
Аноним 2017/10/01 22:55:01  №1069405 144
Аноним 2017/10/01 23:58:47  №1069424 145
>>1069346
Выведи в консоль содержимое переменных, которые передаешь, если все в порядке, то пусть на сервере скрипт через эхо вернет содержимое $_POST. Будет видно где проебался.

Алсо, обычно содержимое формы через .serialize() конвертируют в массив и его передают. Хуй знает что у тебя в свойстве data, никогда так не пробовал

Я делал так https://github.com/grigoryMovchan/2ch_get_img/blob/master/public/js/download-result.js#L13-L40
Ответы: >>1069432
Аноним 2017/10/02 00:11:51  №1069432 146
>>1069424
>Выведи в консоль содержимое переменных
Не могу, код на хостинге.
Ответы: >>1080115
Аноним 2017/10/02 00:53:32  №1069453 147
Почему nginx все время работает: включил компьютер, nginxне запускал, а все прописанные в файле hosts адреса переходят на "Welcome to nginx!"?
Ответы: >>1080115
Аноним 2017/10/02 01:23:26  №1069464 148
Привет тред, помогите ньюфагу.
https://ideone.com/FMplvx
При нажатии на кнопку получаю 404, wtf?
Object not found!

The requested URL was not found on this server. The link on the referring page seems to be wrong or outdated. Please inform the author of that page about the error.

If you think this is a server error, please contact the webmaster.

Error 404

localhost
Apache/2.4.27 (Win32) OpenSSL/1.0.2l PHP/7.0.22
Ответы: >>1069473 >>1069480
Аноним 2017/10/02 01:37:52  №1069473 149
>>1069464
Здесь СТОЛЬКО ошибок, что я просто в ахуе.
Ответы: >>1069475
Аноним 2017/10/02 01:40:30  №1069475 150
>>1069473
Пример из книги модного издательства Орейли.
Ответы: >>1069514
Аноним 2017/10/02 01:46:19  №1069480 151
>>1069464
Исправил ошибочку сам.
Аноним 2017/10/02 04:01:53  №1069513 152
Ребят, я тут думал. Скрою на всякий случай, чтобы оффтопа не было. А то тема на /b похожа. А сколько можно зарабатывать фрилансом на верстке, включая функционал JS? Видел недавно парня который брал 500 руб за обычный сайт и его дизайн, и цену постепенно повышал на 500 за каждую услугу, ну мол "Добавить падающее меню" и судя по всему у него были клиенты. Сколько вообще может взять человек знающий все в совокупности, для верстки, типа HTML/CSS/JS/BootStrap и др. типа Blueprint. Что если вообще создать сайт с набором заверстанных тобой макетов с интернета? Грешить на дизайн можно, мол не тобой сделанное, но ведь ты предлагаешь верстку. Так вот, в чем подводные камни?
Спасибо за ответ заранее.
Аноним 2017/10/02 04:03:46  №1069514 153
>>1069475
У О'рейли ток справочники нормальные. Да и то я в них что-то глоссария не наблюдаю удобного. Ну разве что в HTML Pocker reference.
Аноним 2017/10/02 04:10:27  №1069516 154
>>1068146
Не тупой, просто больше практики нужно, вот и все. Не умеешь решить задачку - Не стоит себя обманывать, старайся думать, думать, думать. У меня когда я писал программы на C, пирамидку например, которая выводится с помощью символов алфавита, там нужно было выравнивание поставить, сделать так, чтобы с каждой линией символы менялись, кода там было... Сидел долго, перечитывал, но проблема была в одном - Я не писал код, а учил теорию, а этого делать нельзя. По статистике все выпускники из больших университетов учащих PC Science или как ее назвать - 99% не умеют программировать, совсем. Нужно уметь отдыхать и одновременно не расслабляться. Много ли людей решают задачи в один день? С одной стороны ответ - Да, потому что времени на самом деле не существует, а временные рамки созданы для удобства. Но если подумать, они ведь тоже создавались не один день, согласись? В общем, как это у нас говорят - ПИШИКОД.
Аноним 2017/10/02 04:13:12  №1069517 155
Аноним 2017/10/02 14:11:11  №1069585 156
<img src=../upload/2017-10-01/2.jpg height=216 alt=2.jpg >

Картинка не отображается потому что не в паблике лежит?
Ответы: >>1080115
Аноним 2017/10/02 14:29:41  №1069593 157
images.jpg (5, 299x168)
168x299
Господи, какой же брееееееед. Когда в <a> заключаешь <img> ТЕГ БУДЕТ МЕРДЖИТЬСЯ ТОЛЬКО ЕСЛИ ПОСТАВИТЬ TEXT-ALIGN: CENTER
Аноним 2017/10/02 15:35:04  №1069614 158
ревьера.jpg (150, 1610x630)
630x1610
>>1067944 (OP)
>- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк.

Опчик, поясни пожалуйста моменты:
по программированию: что значит "знать Гит"? Это же вроде программа с резервными копиями. На каком уровне я должен ее знать? Просто в ней работать? Или ее дорабатывать как-то?
И вопрос по верстке: я знаю jquery на уровне просто подключить с какой-нибудь каруселью и забыть. Верстальщики реально правят ее код?
Ответы: >>1080115
indexedDB Аноним 2017/10/02 15:55:59  №1069620 159
15050234842280.png (344, 343x391)
391x343
Вопрос по indexedDB
Читаю документацию, но что-то понимаю смутно.
В доках говорится, что дескать любая запись\чтение происходит через транзакцию.
Даже небо, даже Аллах.
И в примерах кода всюду:
>var transaction = db.transaction(["customers"], "readwrite");

Но что если я просто сделаю
>DB.objectStore("hui").add({cocol:"semen"});

Без получения богомерзких транзакций?

Это легально вообще?

Будет создана транзакция негласно?
Или браузер сломается?

И если транзакция все равно автоматически будет созданна, почему нигде в примерах нет такого использования?
Ответы: >>1080115
Аноним 2017/10/02 16:03:30  №1069626 160
14266875772112.jpg (57, 702x553)
553x702
Оп и все помогаторы, я просто хочу вас поблагодарить и сказать, что вы делаете богоугодное дело, добра вам
Аноним 2017/10/02 21:39:05  №1069727 161
регулятивные выражения в ideone работают?

вбил пример и вот результат: https://ideone.com/o4nr9D
Ответы: >>1069729 >>1069743 >>1069766
Аноним 2017/10/02 21:43:54  №1069729 162
Аноним 2017/10/02 22:16:50  №1069743 163
>>1069727
Там вообще ничего не работает. Тупо отдает код обычным текстом.
Ответы: >>1069745
Аноним 2017/10/02 22:18:31  №1069745 164
>>1069743
и что тогда делать?
Аноним 2017/10/02 22:45:09  №1069766 165
Ответы: >>1069779
Аноним 2017/10/02 22:45:17  №1069767 166
Посоветуйте гайд по регуляркам. На сайте из ОП-поста нормально написано, но не полно.
Ответы: >>1069783
Аноним 2017/10/02 22:56:48  №1069779 167
>>1069766
Точно! Вот я тупенький ¯\_(ツ)_/¯
Спасибо!
Аноним 2017/10/02 23:01:36  №1069783 168
>>1069767
Не на русском, но самое разжёванное и подробное, что находил: https://www.regular-expressions.info/tutorial.html
Алсо автор сайта из ОП-поста обитает в треде и отвечает на вопросы, ну и мы подскажем как сможем, так что уточняй что непонятно.
Ответы: >>1069795
Аноним 2017/10/02 23:06:49  №1069795 169
>>1069783
Добра тебе! Как раз что-то подобное искал.
Аноним 2017/10/02 23:58:48  №1069814 170
image.png (40, 801x216)
216x801
Добрый вечер.
Я не совсем по теме,так как работаю с нодой, но в жс-треде вряд ли ответят на такой вопрос.

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

Проблема может быть решена посредством закрытия/открытия соединения с БД, но это рушит всю архитектуру моего приложения и совсем не изящно. Подскажите, как дропать таблицы?
Ответы: >>1069816 >>1069818
Аноним 2017/10/03 00:10:32  №1069816 171
>>1069814
C какой субд работаешь? Подкинь модуль. Почему не MySQL?
Ответы: >>1069817
Аноним 2017/10/03 00:14:03  №1069817 172
image.png (54, 714x349)
349x714
>>1069816
С этой, которую модифицирую, на скрине.
https://github.com/mapbox/node-sqlite3
Не знаю, почему. Просто эта первая на глаза попалась. Я вообще начал это копать для расширения кругозора, чтобы освоить SQL.
Ответы: >>1069819
Аноним 2017/10/03 00:21:17  №1069818 173
>>1069814

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

Также, промисы по умолчанию съедают ошибки, убедись что у тебя любые ошибки выбрасываются в виде исключений и отображаются.
Ответы: >>1069822
Аноним 2017/10/03 00:22:32  №1069819 174
>>1069817

Также, зачем ты функцию описываешь словом const? разве не логичнее использовать function, которое для этого и придумано? Читать тяжело эти скобки и стрелки.
Ответы: >>1069822
Аноним 2017/10/03 00:27:34  №1069822 175
>>1069818
Пробовал, путаница ужасная. Если верить логам, то тесты выполняются ещё до того, как сервер подключится к базе, но подключение внутри них работает. Сейчас пробую другое решение.
>>1069819
Это фича из нового стандарта ЖС, на самом деле удобно.
Ответы: >>1069832
Аноним 2017/10/03 00:32:28  №1069824 176
Проблема решена. Спасибо async/await, превратил практически весь код, свящанный с подключением к БД и её подготовке к первому запуску в псевдосинхронный + конкретно для этого теста создаю новую БД вместо подключения общей.
Аноним 2017/10/03 00:52:13  №1069832 177
>>1069822

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

array.map(x => x.getName());

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

function doSomething() { // ok

const doSomething = () => { // какая-то невнятная фигня

> Если верить логам, то тесты выполняются ещё до того, как сервер подключится к базе, но подключение внутри них работает.
Значит ты накосячил с промисами.



Ответы: >>1069841
Аноним 2017/10/03 01:10:19  №1069841 178
>>1069832
А мне вот конфиг еслинта от эйрбнб наоборот советует везде использовать стрелочные. Пожалуй, буду следовать его совету, а то тимлид обоссыт.

Да, накосячил. Один тест проходит, зато попадали все другие, и при ручном тестировании не работает. Ух, лучше бы дальше монгой пользовался.
Аноним 2017/10/03 12:16:42  №1069948 179
15060326017440.jpg (132, 449x546)
546x449
https://ideone.com/WBUof5

Ну тут я даже не вижу, где ошибка и почему оно неправильно работает. Или правильно? Я не понимаю.
Ответы: >>1069950 >>1080116
Аноним 2017/10/03 12:19:35  №1069950 180
>>1069948
Неправильно, STR не может быть на один миллион. Ошибка в самом цикле или я return не туда впихнул?
Ответы: >>1069952
Аноним 2017/10/03 12:24:18  №1069952 181
>>1069950
Ошибка при подсчёте softcredit. Чего он отказывается его считать?
Аноним 2017/10/03 12:49:51  №1069955 182
Какова должна быть логика в Yii2, если нужно сделать несколько форм на одной странице?
Допустим, на странице регистрации пользователей есть форма для ввода данных нового пользователя и таблица уже зарегистрированных юзеров, к каждому из которых прикреплена кнопка "Удалить". С регистрацией понятно: вводим данные, нажимаем "Зарегистрировать", срабатывает контроллер, проверяет данные, запускает модель и прописывает юзера в таблицу базы данных. А как правильно добавить удаление? Я пока что вижу такой алгоритм:
- Генерировать под каждую кнопку:
<?php $form = ActiveForm::begin(['id' => 'form1']); ?>
<?= $form->field($model, 'city_name')->textInput(); ?>
<?= Html::submitButton('button1', ['class' => 'btn btn-primary', 'name' => 'button1']); ?>
<?php ActiveForm::end(); ?>

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

Или нужно делать две разных модели?
Ответы: >>1080116
Аноним 2017/10/03 13:11:35  №1069964 183
Сделай на кнопку ссылку вида этастраница/user=del и разбирай в контроллере
Ответы: >>1069965
Аноним 2017/10/03 13:12:35  №1069965 184
Ответы: >>1069987 >>1069988
Аноним 2017/10/03 13:42:37  №1069977 185
Программошки, выполняю уроки из оп-поста про строки. Задание - взять слова из массивов и сделать стих. Поясните, так вот нельзя выбирать рандомное слово из массива:

$word1[rand(1, count($word1))]

https://ideone.com/e.js/Bcxkl4

? Я имею ввиду какой-нибудь тим-лид - сноб от програмирования - не скажет "да вы гляяяньте на дурачка, тут же код будет выполняться на целую пикосекунду доооольше!"
Ответы: >>1069982 >>1080116
Аноним 2017/10/03 13:52:30  №1069982 186
>>1069977
Ой, аноши, накосячил, там, наверное, надо писать вот так


$word1[rand(0, count($word1)-1)]
Аноним 2017/10/03 14:14:55  №1069987 187
>>1069965
Зачем тебе сабмит кнопки на удаление? Мути просто ссылки с айди или еще каким-нибудь уникальным атрибутом пользователя. И в роутере разбирай эти ссылки, делай чо надо и редиректь обратно. Хотя это просто мысли я сам вкатывальщик не знаю насколько это правильно
Аноним 2017/10/03 14:15:19  №1069988 188
>>1069965
Зачем тебе сабмит кнопки на удаление? Мути просто ссылки с айди или еще каким-нибудь уникальным атрибутом пользователя. И в роутере разбирай эти ссылки, делай чо надо и редиректь обратно. Хотя это просто мысли я сам вкатывальщик не знаю насколько это правильно
Ответы: >>1069989
Аноним 2017/10/03 14:20:12  №1069989 189
>>1069988
Движок же. Там "ни единого слова в простоте". Я пока его не освоил (и освоение идёт, как восход солнца вручную).
Аноним 2017/10/03 15:17:23  №1070014 190
lol.jpg (350, 992x1072)
1072x992
Когда ты накосячил с классами.
Аноним 2017/10/03 15:19:56  №1070016 191
И, судя по всему, Yii я не смогу освоить. Уже почти два месяца пытаюсь, но воз и ныне там. Шайтан машина просто. Именно тот случай, когда "смотришь в книгу - видишь фигу". Слишком сложно для самостоятельного освоения.
Ответы: >>1070024 >>1070595
Аноним 2017/10/03 15:20:19  №1070017 192
Какой самый простой способ добавить httpBasicAuth в yii2 глобально чтобы не подключать в каждом контроллере? Вариант с промежуточным контроллером в котором будет реализовываться behaviour с httpBasicAuth тоже так себе, придется менять предков для всех контроллеров
Ответы: >>1080117
Аноним 2017/10/03 15:29:35  №1070024 193
Ответы: >>1070462
Аноним 2017/10/03 15:30:43  №1070026 194
2.JPG (13, 272x133)
133x272
1.JPG (13, 416x79)
79x416
3.JPG (12, 278x180)
180x278
Чому картика не отображается? Заебался уже!
Ответы: >>1070031 >>1070036 >>1080117
Аноним 2017/10/03 15:33:27  №1070031 195
>>1070026
Покажи ошибку в консоли браузера (там будет 404 и указан путь по которому он пытался найти картинку)
Ответы: >>1070041
Аноним 2017/10/03 15:40:29  №1070036 196
>>1070026
Потому что тег не может ее найти и она скорее всего вне директорий разметки.
Аноним 2017/10/03 16:00:35  №1070041 197
5.JPG (12, 472x41)
41x472
>>1070031
> Аноним 03/10/17 Втр 19:33:27  №107
Аноним 2017/10/03 16:52:53  №1070061 198
7.JPG (12, 375x50)
50x375
Получается если у меня урл такого вида, то я должен делать что-то типа <img src="../../../upload/1.jpg?
При этом аплоад должен быть в паблике?
хтмл не может выйти выше из паблик директори?

Или я тупой?
Ответы: >>1070075 >>1070084
Аноним 2017/10/03 17:25:54  №1070075 199
Аноним 2017/10/03 17:47:19  №1070079 200
Для верстки есть какой-нибудь фреймворк с визуальным перетаскиванием блоков, или я фига губу раскатал иди в блокноте пиши ленивый ебантяй
Ответы: >>1070095 >>1080117
Аноним 2017/10/03 18:03:31  №1070084 201
>>1070061

Суть паблик директории как раз в том, что все, что за ее пределами, не видно снаружи.
Ответы: >>1070089
Аноним 2017/10/03 18:14:14  №1070089 202
Аноним 2017/10/03 18:25:52  №1070095 203
Ответы: >>1070097
Аноним 2017/10/03 18:31:41  №1070097 204
Аноним 2017/10/03 18:54:45  №1070104 205
1.png (106, 1680x900)
900x1680
Это прям вселяет уверенность.
Большое искреннее спасибо автору учебника, он няшка, а мать его - милашка.
Ответы: >>1070109
Аноним 2017/10/03 19:01:52  №1070109 206
>>1070104
А теперь то же самое, но в плюсах.
Ответы: >>1070116 >>1070117 >>1070178
Аноним 2017/10/03 19:21:47  №1070116 207
>>1070109
До дома доеду - попробую. С телефона неудобно.
Аноним 2017/10/03 19:28:00  №1070117 208
>>1070109
Что значит в плюсах?
Ответы: >>1070141 >>1070472
Аноним 2017/10/03 19:46:01  №1070132 209
Что можно окромя крудошлепства в PHP?
Аноним 2017/10/03 20:11:14  №1070141 210
>>1070117
Мож инкремент имеют ввиду.
Аноним 2017/10/03 22:13:17  №1070178 211
Ответы: >>1070202 >>1070493
Аноним 2017/10/03 22:25:33  №1070183 212
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html
>MySQL uses the type keyword and these constructions produce DATE, TIME, and DATETIME values, respectively, including a trailing fractional seconds part if specified. The TIMESTAMP syntax produces a DATETIME value in MySQL because DATETIME has a range that more closely corresponds to the standard SQL TIMESTAMP type, which has a year range from 0001 to 9999. (The MySQL TIMESTAMP year range is 1970 to 2038.)

Ненавижу. Что имел ввиду автор документации?
Ответы: >>1070202
Аноним 2017/10/03 22:59:07  №1070202 213
>>1070178

Неправильно, индексы массивов начинаются с 0, а не с 1.

>>1070183

Для начала, надо изучить, что такое литерал: https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D0%BB_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)

Литерал - это конструкция в исходном коде, обозначающая какое-то постоянное значение. Например, число, строку.

В синтаксисе стандартного SQL и в диалекте MySQL есть специальный синтаксис для записи литералов, представляющих значения даты или времени. Синтаксис описан в мануале. Пример синтаксиса: DATE '2010-01-01' описывает значение типа DATE, представляющее указанную дату. Пример использования литерала для сравнения с колонкой типа DATE:

SELECT ... WHERE addedDate = DATE '2010-01-01';

Абзац, который ты выделил, говорит о том, что синтаксис с ключевым словом TIMESTAMP или ts:

TIMESTAMP '1999-01-01T12:00:00.123' (из стандарта SQL, формат ISO8601)
{ ts '....' } (из ODBC, это общее API для соединения с разными видами БД)

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

От себя скажу, что мне не приходилось использовать такой синтаксис. MySQL позволяет использовать в INSERT или в WHERE просто строку:

INSERT INTO x (addedTime) VALUES ('2018-01-01 12:00:00');
SELECT ... WHERE x = '2012-01-01'

Но я не уверен, что это соответствует стандарту SQL и будет работать в любой СУБД. Стандарт SQL, увы, платный (180 евро по моему за самый новый), потому ссылку дать не могу, могу дать только ссылку на http://modern-sql.com/standard с сборником бесплатных ссылок.

Ответы: >>1070206 >>1070643
Аноним 2017/10/03 23:17:09  №1070206 214
>>1070202
>Неправильно, индексы массивов начинаются с 0, а не с 1.
Ой ладно тебе. Представь, что там не 6 + 1, а 5. Я вообще плюсы первый раз в жизни увидел, код надерган копипастой из гугла.
Ответы: >>1070207
Аноним 2017/10/03 23:21:21  №1070207 215
>>1070206

В Си++ вроде принято использовать для вывода потоки:

cout << question; (если у string определен оператор вывода в поток, я думаю, определен)

printf используется для форматированного вывода и вообще не очень правильно использовать его для вывода просто строки.
Ответы: >>1070211
Аноним 2017/10/03 23:23:48  №1070211 216
>>1070207
Да мне пофигу, если честно. Ты просил на плюсах - ты получил на плюсах.
https://github.com/radiodog/studentlist Аноним 2017/10/03 23:52:46  №1070224 217
>>1065726
>>1066173
>>1067949

> https://github.com/radiodog/studentlist/blob/master/composer.json
Тут name и description можно не указывать. У тебя же не библиотека.

> https://github.com/radiodog/studentlist/blob/master/mydb.sql
тут в дампе явно лишние команды, требующие администраторских привилегий, например, CREATE EXTENSION.

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

Папку vendor нужно внести в gitignore.

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

https://github.com/radiodog/studentlist/blob/master/src/Classes/Router.php
В конструкторе класса Router указан аргумент $url, но на самом деле туда передается массив. Причем нигде не описано какой именно массив, с какими полями. Не нужно так делать, нужно указать конкретные аргументы.

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

Тем более ненормально, что роутер еще и exit вызывает в конструкторе. Это вообще не роутер, а FrontController получается.

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

URL можно разобрать на части с помощью parse_url.

https://github.com/radiodog/studentlist/blob/master/src/Classes/Controller.php
Базовый контроллер выглядит странно. Например, почему там прописана установка соединения с БД? Как-то немного странно. Зачем вообще в контроллере иметь объект PDO?

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

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

Для хранения данных формы можно было использовать объект Student, а не массив.

https://github.com/radiodog/studentlist/blob/master/src/Classes/Controller.php
Тут у тебя в случае успеха сообщение об успехе выводится до DOCTYPE, это неправильно. Это вообще может привести к тому, что кодировка не определится правильно. И после успешной обработки POST-формы надо делать редирект, а не выводит снова эту форму. Это описано в моем уроке про формы.

> public function getValuesFromPost()
Тут надо было использовать цикл, а не копипастить код.

> $validator->validate($values,$dataGateway);
> $message = $validator->message;
Что мешает вернуть результат функции через return? Зачем городить такой странный способ передачи результата?

> if ($values['e_mail']==$valuesFromDB['e_mail']) {
> $errors['e_mail'] ='';
Лучше в валидаторе сделать проверку, что при редактировании можно использовать тот же email.

> $student->setId($this->dataGateway->getCount()+1);
Это неправильный и неэффективный способ, и не защищает от гонки (один поток считает число записей, другой в это время делает вставку новой записи), нужно использовать lastInsertId. И, конечно, делать это в классе работы с БД, а не в контроллере.

> getMarks($placeholder)
Это бы конечно лучше делать во view, а не тут.

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

Название MainController неудачное, не отражает назначение контроллера. И PageController тоже.

https://github.com/radiodog/studentlist/blob/master/src/Classes/PageController.php#L22
> if ($_SERVER['REQUEST_METHOD']=="GET"){
А если не GET, то что тогда произойдет?

> public function createNext($request)
> public function createPrev($request)
Тут сплошная копипаста. Лучше сделать одну универсальную функцию для генерации URL, и не в контроллере.

> $numPattern = "/(0-9)*/ui";
нет привязки к краям строки (^$)

> https://github.com/radiodog/studentlist/blob/master/src/Classes/PageController.php#L42
> $request['order'] = ....
> $request['order'] = ....

Создается впечатление, что первая строчка ничего не делает и не нужна.

https://github.com/radiodog/studentlist/blob/master/src/Classes/Pager.php#L25
Тут какая-то переусложненная формула. Посчитать число страниц можно проще.

https://github.com/radiodog/studentlist/blob/master/src/Classes/Student.php#L16
Слишком много аргументов в конструкторе. Лучше сделать либо пустой конструктор, либо сделать метод вроде updateAttributes, принимающий массив.

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

https://github.com/radiodog/studentlist/blob/master/src/Classes/UserDataGateway.php#L19
> return $row = ...
Зачем здесь создается переменная?

> https://github.com/radiodog/studentlist/blob/master/src/Classes/UserDataGateway.php
В этом файле не выдерживается единый стиль кода, посмотри на имена функций и на расстановку фигурных скобок.

https://github.com/radiodog/studentlist/blob/master/src/Classes/UserDataGateway.php#L33
> OFFSET $index");
Тут SQL инъекция.

> ORDER BY $sort $order
И тут

> $name = $student->getName();
> $stmt->bindValue(':name', $name);
Что мешает сразу писать $student->getName() без создания промежуточной переменной?

> $result = $stmt->fetch();
> return $result['count'];
Есть метод для получения одного значения.

https://github.com/radiodog/studentlist/blob/master/src/Classes/Validator.php#L153
> checkArr($message)
Название ничего не говорит о том, что делает метод. "проверить массив" ничего не значит.

Для пола и locality нужно завести константы.

> [1-2][90]
Лучше вместо регулярки использовать сравнения вида $x > 1900 либо писать (19|20)

> OR ($form['name']=='Имя'))
Странная проверка.

> elseif ((preg_match($name_pattern, $form['name'])==1)&(mb_strlen($form['name'])>40)) {
> elseif ((preg_match($name_pattern, $form['name'])==1)&(mb_strlen($form['name'])>40)) {
> elseif ((preg_match($name_pattern, $form['name'])==1) &(preg_match($tag_pattern, $form['name'])==0) &(preg_match($digits_pattern,$form['name'])==0) &(40>mb_strlen($form['name'])) & (mb_strlen($form['name'])>0)){

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

> href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css"
Лучше держать свои файлы на своем сервере, а не полагаться на другие.

https://github.com/radiodog/studentlist/blob/master/src/View/Form.php
HTML код не отформатирован (отступы не соблюдаются) и его тяжело читать. Вместо табов лучше использовать 4 пробела.

https://github.com/radiodog/studentlist/blob/master/src/View/Form.php#L27
> value = "<?=$values['name']?>"
Тут XSS уязвимость.

> placeholder = "<
А HTML стандарт позволяет ставить пробел между названием атрибута и знаком равенства? Поищи-ка https://html.spec.whatwg.org/multipage/syntax.html#attributes-2

> <div class="invalid-feedback">
Возможно, стоит не показывать эти блоки, если ошибки нету.

> <a href='http://localhost/index.php/list'>Список студентов</a>
Используй относительные ссылки, где не указан протокол и домен. У меня есть урок про URL.

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

https://github.com/radiodog/studentlist/blob/master/src/View/List.php#L49
> <?php $thisStudent = ($value->getEmail()==$this->dataGateway->getByHash($this->hashUser)['e_mail']) ? "table-active" : "" ?>
Этот код не должен быть во view. С каких это пор у нас View отвечает за проверку кук или поиск в БД?

https://github.com/radiodog/studentlist/blob/master/src/View/List.php#L64
Пагинатор очень громоздкий. Нельзя ли его сократить?

Вообще, ты бы мог сделать класс ViewHelper с обычными или статическими методами, которые бы помогали при выводе шаблона.
Ответы: >>1070505 >>1071118
Аноним 2017/10/04 01:56:11  №1070254 218
Ответы: >>1070279
Аноним 2017/10/04 02:10:06  №1070261 219
>>1068108
Решил проблему

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

getMessages.then(function(messages) {
var promises = [];

for (var key in messages) {
var decrypted = decrypt(messages[key]);

promises.push(decrypted); // Можно даже не выставлять ключ, обещания добавятся синхронно, а асинхронное выполнение будет позже
}

Promise.all(promises).then(function(decrypted) {
for (var key in messages) {
messages[key] = decrypted[key].data;
}

showMessages(messages);
});

});

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


Немного пугает, что я не мучился над решением этой задачи, её решение пришло мне в голову само собой. Можно сказать, что мне просто повезло.
Я просто подумал, как бы я её решил если не было возможности получить вашего совета, и единственное что пришло в голову, это то что бы я просто выводил бы сообщения по одному внутри метода расшифровки, что являлось бы самим по себе нарушением инкапсуляции. Только через некоторое время мысль о том, что можно получить обещания и выполнить их все сразу, пришла сама собой.
Если бы не ваши наставления, я бы писал довольно хаотичный код, и даже не чувствовал за это угрызение совести.
Ответы: >>1080117
Аноним 2017/10/04 02:26:33  №1070279 220
>>1070254
>$monthlyPay = 5000;
>if ($totalSum <= 5000)
Ежемесячная плата должна передаваться через аргументы, а не определяться по среди функции.

И ещё пара придирок:
>echo "{$month} месяц спустя: долг = {$totalSum} руб, выплачено всего {$paymentTotal} руб. \n";
Такой вывод, обычно, используется для проверки работы функции. Если функция рабочая, то достаточно просто вернуть какое-то значение.

Если это не редактор кода сломал оформление, то советую почитать >>1067945
Очень много лишних отступов и табуляций.
Аноним 2017/10/04 11:14:12  №1070462 221
Ответы: >>1075428
Аноним 2017/10/04 11:29:44  №1070472 222
>>1070117
>Что значит в плюсах?
напсать эту прогу на с++
Ответы: >>1070493
Аноним 2017/10/04 11:34:33  №1070475 223
Сколько нужно изучать php чтобы понимать о чем тут говорит 90% людей?
Ответы: >>1070476 >>1070495
Аноним 2017/10/04 11:36:15  №1070476 224
Аноним 2017/10/04 12:36:12  №1070493 225
>>1070472

Вот жи >>1070178, только с индексацией в массиве обосрался чуть. Ничего ведь сложного, десять минут гугла.
Аноним 2017/10/04 12:39:49  №1070495 226
1.png (109, 1680x900)
900x1680
Аноним 2017/10/04 13:11:28  №1070501 227
Погромисты, поясните про регулярку пожалуйста
чем вот эта: [a-z][a-z][0-9][0-9][0-9][a-z]
отличается от этой: [a-z]{2}[0-9]{3}[a-z]{1}

число в {} говорит о количестве повторений, правильно?
Ответы: >>1070595
Аноним 2017/10/04 13:15:42  №1070502 228
Как понять ООП, MVC и прочие сложные концепции? Осилил большинство задач для ньюфагов от ОПа кроме бонусных, теперь приступил к уроку по ООП, но мне кажется, что этого будет мало. Я совсем ньюфаг в программировании. Вроде примитивный computational thinking освоил, но когда открываю профессиональный код какого-нибудь сайта, то охуеваю. Что еще можно почитать про ООП? Неважно на каком языке, главное чтобы было максимально просто разжевано.
Ответы: >>1070507 >>1070595
Аноним 2017/10/04 13:26:08  №1070505 229
Аноним 2017/10/04 13:28:39  №1070507 230
>>1070502
Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования

Ну и практика
Аноним 2017/10/04 14:12:09  №1070522 231
1.png (124, 1680x900)
900x1680
https://ideone.com/uMaxHO

Понимаю, что плохо и криво. Не понимаю, как сделать лучше. Очень хочется уйти от принципа "но ведь работает же!" и перестать писать говнокод.
Ответы: >>1070528 >>1080118
Аноним 2017/10/04 14:31:45  №1070528 232
>>1070522
я занимаюсь php вот уже который год два дня, но мне все нравится, особенно рандом внутри ключа массива. Идеальней ведь не напишешь. Есть тут гуру? Все же верно вроде и не говнокод
Аноним 2017/10/04 15:10:31  №1070544 233
Начал делать задачу с файлообменником, не могу разобраться с nginx: установил, сделал конфиг как в руководстве от Slim (там, кстати, два немного отличающихся в разделе web servers и в first application, но он мне отдает – 504 Gateway Time-out. Время ожидания пробовал менять, nginx -s reload незабывал, все равно результат одинаков. Как быть?
Ответы: >>1070555 >>1070590 >>1070595
Аноним 2017/10/04 15:19:33  №1070548 234
1.png (112, 1680x900)
900x1680
2.png (81, 1680x900)
900x1680
3.png (80, 1680x900)
900x1680
В седьмом ПХП функция mb_internal_encoding не работает (пик один).
В пятом ПХП уже не ругается и компилит, но только с латиницей (пик два).
С кириллицей выходит лажа (пик три).
Ответы: >>1071402
Аноним 2017/10/04 15:33:15  №1070551 235
Аноны, дайте пожалуйста ответ на задачу, где сравниваются телефоны согласно регулярному выражению:
http://archive-ipq-co.narod.ru/l1/regexp.html

Вот список номеров:

// Правильные:
$correctNumbers = [
'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'
];

// Неправильные:
$incorrectNumbers = [
'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' / нет + /
];



Какой смысл корячится и изголяться с учетом скобок/пробелов/минусов, если можно просто убрать эти символы из строки?
Ответы: >>1070552 >>1070617
Опчик помогай Аноним 2017/10/04 15:39:06  №1070552 236
Можно ли без своей реализации сделать на yii2 чтобы и httpBasicAuth работал и обычная браузерная аутентификация основанная на сессии? Мне надо чтобы сайт работал в двух режимах: и как обычный сайт и как API если передать определенный параметр, вот встал вопрос реализации аутентификации по токенам.
>>1070551
>Какой смысл корячится и изголяться с учетом скобок/пробелов/минусов, если можно просто убрать эти символы из строки?
Но ведь юзер об этом не узнает, ввел он телефон в одном формате, а потом к примеру пытается восстановить пароль или залогиниться по номеру, а ты сохранил номер в другом виде. Вообще для этих целей используют masked input который не дает юзерам выстрелить себе в ногу неправильным вводом номера
Ответы: >>1070558 >>1071401
Аноним 2017/10/04 15:40:37  №1070555 237
>>1070544
Причем тут слим, читай мануал нгинкс для своего дистра. Если шперма то хз.
Ответы: >>1070573
Аноним 2017/10/04 15:46:12  №1070558 238
>>1070552
>Но ведь юзер об этом не узнает
Спасибо за ответ, няша. Я имею ввиду зачем нам изголяться, учитывая скобки/палочки/минусы, если можно перед сравнением строки с регулярным выражением просто убрать из нее все не нужные символы автозаменой вот так

$wwq = array("\"", "'", ";", ",", ":", "/", "\\", "=", ")", "(", "%", "*", "?");
$row['title'] = str_replace($wwq, "", $row['title']);

а потом уже совать в регулярку голые цифры?
Меня будет будущий тимлид ругать за то, что я сделаю проще, а не через регулярку?
Ответы: >>1070564 >>1070595
Аноним 2017/10/04 15:57:42  №1070564 239
>>1070558
>$wwq = array("\"", "'", ";", ",", ":", "/", "\\", "=", ")", "(", "%", "", "?");
>$row['title'] = str_replace($wwq, "", $row['title']);
Проще же
preg_replace('/(\\D)/', '', $string) тогда.
>Меня будет будущий тимлид ругать за то, что я сделаю проще, а не через регулярку?
Редко приходится работать с регулярками, но ты должен иметь представление, что это и для чего их можно использовать
Ответы: >>1070572 >>1070595
Аноним 2017/10/04 16:10:41  №1070572 240
Аноним 2017/10/04 16:15:27  №1070573 241
>>1070555
Слим при том, что там есть простейший вариант конфига для фронт контроллера
Ответы: >>1070590 >>1070788
Аноним 2017/10/04 17:12:05  №1070590 242
>>1070544
>>1070573
Сделал, надо было вручную php-cgi включать
Ответы: >>1070788
Аноним 2017/10/04 17:33:00  №1070595 243
>>1070016

А что ты изучал до Юи?

>>1070501

Да

>>1070502

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

>>1070544

Gateway timeout значит что нгинкс отправил запрос на бекенд (например на php-fpm), но ответа не пришло. Тебе надо разобраться в своем конфиге, куда он отправляет запросы и почему на них не отвечают вовремя.

>>1070558

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

>>1070564

> preg_replace('/(\\D)/', '', $string)
Это вырежет буквы, а наличие букв должно делать номер неправильным.

Ответы: >>1070596 >>1070597
Аноним 2017/10/04 17:35:36  №1070596 244
>>1070595
Голый php/js. Ну, ещё краем аякс и jquery захватил.
Аноним 2017/10/04 17:41:35  №1070597 245
>>1070595
>Ты наверно просто не знаешь, как это сделать регуляркой.
не знаю, поэтому и спрашиваю ответ. А ответа именно к этой задаче нету.
Кроме того, мне кажется, что убрать одной регуляркой всё кроме цифр намного проще, чем писать регулярку, которая будет учитывать:
1.Начало с +7, + 7, 8
2.Палочки, скобочки, пробелы
3.Все вышеперечисленное определенной длины
Ответы: >>1071401
Аноним 2017/10/04 17:44:45  №1070599 246
Сап, помогите с Laravel:
Есть роут Route::group(['domain' => 'admin.' . env('APP_DOMAIN') где APP_DOMAIN = sitename.dev. На сервере у меня нормально заходит по этому адресу, но на локалке получаю Server not found (ошибка как будто я захожу на несуществующий сайт). В route:list всё нормально. Как настроить правильно?
Ответы: >>1071401
Аноним 2017/10/04 18:16:33  №1070613 247
Знающие аноны, подскажите, пожалуйста, по регулярному выражению в задаче про телефоны. Я с подсказки доброго анона сделал ее через предварительную замену ненужных символов (в коде закомменчено), а сейчас пытаюсь сделать через одну регулярку онли

вот код:
https://ideone.com/e.js/ZCPtZ5

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

вот сама регулярка:
$regexp = "/(\+7|8|\+ 7)+[0-9\-\(\)\s]{10}/ui";
как сделать чтобы {10} применялось ко всей строчке, а не только, как я понимаю, к последнему куску, и как обрезать "позвать люсю"?
Ответы: >>1070615 >>1070616
Аноним 2017/10/04 18:22:50  №1070615 248
>>1070613

Квантификатор {10} применяется к идущей перед ним конструкции [0-9\-\(\)\s]

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

(выражение){10}
Ответы: >>1070682
Аноним 2017/10/04 18:24:55  №1070616 249
>>1070613

> и как обрезать "позвать люсю"?

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

aaaaaa +70001234567 ааааааааа

Нужно использовать привязку к краям строки с помощью ^ и $.
Ответы: >>1070682
Аноним 2017/10/04 18:30:08  №1070617 250
>>1070551

Можно убрать, но сделать нужную регулярку проще, если ты хорошо в них разбираешься.
Аноним 2017/10/04 19:49:58  №1070643 251
>>1070202
>- создает значение типа DATETIME, а не TIMESTAMP. Потому что DATETIME позволяет представить более широкий диапазон дат. Могут ли от этого быть проблемы? Для этого придется изучить в мануале отличия типов DATETIME и TIMESTAMP и сделать выводы.
Как тогда получить TIMESTAMP, если префикс TIMESTAMP означает DATETIME?
Ответы: >>1070663
Аноним 2017/10/04 20:08:47  №1070663 252
>>1070643

С помощью литералов - никак, но может быть там есть функция конвертации в TIMESTAMP?

Можно поискать по слову timestamp тут: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestamp

Но там даже функция TIMESTAMP() возвращает datetime. Я подозреваю, что видимо разработчики MySQL не видят особой выгоды в использовании TIMSTAMP и считают что DATETIME лучше. (она отличается только привязкой к временной зоне по моему).

А какой у тебя случай? Зачем тебе понадобилось именно значение типа TIMESTAMP, можно поинтересоваться? Что в нем есть такого, чего нет в DATETIME?

Если что, мануал по особенностям этих типов тут:

- https://dev.mysql.com/doc/refman/5.7/en/date-and-time-types.html
- https://dev.mysql.com/doc/refman/5.7/en/datetime.html

Ответы: >>1070761
Аноним 2017/10/04 20:26:15  №1070682 253
Аноним 2017/10/04 21:38:23  №1070761 254
>>1070663
>А какой у тебя случай?
Я решил прочитать документацию MySQL, вот какой у меня случай. :3 Терплю умеренные бомбардировки тылов в связи с тем, как она написана.
Аноним 2017/10/04 22:22:42  №1070788 255
>>1070573
Нгинкс никак не соотносится с твоим фронт-контроллером, всё зависит от ос которую ты используешь, равно как и апач, это так сказать сфера системного администрирования уже. Там написано только то, что тебе нужно сделать на стороне приложения, конфиг самого сервера нужно курить дополнительно.
>>1070590
Молодца, ежели разобрался.
Аноним 2017/10/04 23:07:58  №1070821 256
https://ideone.com/51rYLU

Чо я не так написал? Вроде всё норм, но припопытке нажатия на кнопку жалуется мол "Warning: implode(): Invalid arguments passed in ..\json_answer.php on line 4"

Код json_answer.php посередине.
Ответы: >>1070829 >>1071401
Аноним 2017/10/04 23:21:58  №1070829 257
>>1070821
Сердце аж схватило от велосипеда в Js. Почитай про .serialize()
Ответы: >>1071006 >>1071300
Аноним 2017/10/05 08:01:56  №1071006 258
>>1070829
Ладно, посиотрим. А можно чуть подробнее суть проблемы?
Аноним 2017/10/05 09:55:39  №1071029 259
ОП, в общем я все переделал заново, код не смотрел прошлый, я его просто удалил, но судя по твоим замечаниям он был убог.
Я совершенно случайно додумался сделать динамичную адаптивную верстку, не знаю это ли ты имел ввиду когда говорил, чтобы я сделал не механическую верстку. Я проверил страницу на 3х устройствах, сбоев нет. Пока не знаю как включить виртуалку, чтобы проверить на IE-7-11, но представляю что там будет, браузерстак пока покупать не в состояний, будущем подпишусь.
Сделать мульти-страничный CSS не смог, осознание пришло под самый конец, поисправлял кучу классов и.т.д
Верстка заняла примерно 4 дня, не полных конечно же.
https://theknacker.github.io/Webpaint/webpaint.html
Ответы: >>1071068 >>1071399 >>1071403
Аноним 2017/10/05 12:09:09  №1071067 260
12.png (5, 826x361)
361x826
Я снова с Yii2. И всё с тем же вопросом.
Может кто-нибудь подробно объяснить логику рботы фреймворка, когда на вью страницы есть несколько кнопок?

Без него всё было просто: для логина три инпута и кнопка. На кнопке висит onclick="register();", запускающий предачу данных через аякс php-скрипту. А таблица генерируется динамически через foreach, столько строк, сколько есть в базе юзеров. И кнопка удаления на каждой строке onclick='delete_line($user_id, $table_users);' При нажатии, js-скрипт передаёт данные аяксом php-скрипту и тот удаляет из указанной таблицы указанную строку.

Теперь с фреймворком.
Создал модель SignupForm с атрибутами и парой методов. Подключил в контроллере, создал public function actionSignup(). В неём загрузка и проверка данных:
$model = new SignupForm(); //создаём объект модели UsersForm
if($model->load(\Yii::$app->request->post()) && $model->validate()){}
$user = new User(); //создаём объект модели User (эта модель указана в качестве компонента идентификации в файле config\web.php)
$user->username = $model->username; //передаём атрибут модели UsersForm в атрибут модели User
$user->full_name = $model->full_name; //заполним его полученными из формы данными
$user->password = \Yii::$app->security->generatePasswordHash($model->password); //Аналогично, только ещё и шифруем
if($user->save()){
return $this->render('users', compact('model')); //рендерим вью users, передав в него модель model
}
А во вью прописываем $form = ActiveForm::begin(), затем поля для ввода $form->field($model, 'username', ['template' => '{label} <div class="row"><div class="col-sm-2">{input}{error}{hint}</div></div>']), кнопку Html::submitButton('Регистрация', ['class' => 'btn btn-success', 'id' => 'add1', 'name' => 'add2']) и в конце ActiveForm::end().

Это всё как-то даже работает. Но как правильно сгенерировать кнопки удаления и обрабатывать их нажатия?
1) Все поля и кнопки во вью должны быть между begin() - end(), или для каждого блока эта конструкция должна быть своя?
2) Обработка идёт в контроллере? В одном и том же акшене? Как проверить, от какой кнопки пришло нажатие?
3) Модель не трогаем?
4) Что за \ в акшене? Я переписал это из урока по Yii, но нагуглить, что это такое, не смог.
5) Я не понимаю конструкцию $model->load(\Yii::$app->request->post()) && $model->validate()
По сути, она загружает в модель полученные данные, если они получены и провалидированы. Но если разбираться, то получается, что сначала данные приходят постом, потом валидируется модель, в которой пока что нет новых данных (и непонятно, зачем вообще её проверять), а потом идёт load непонятно чего.
6) Как вообще вытащить из post данные в контроллере? Я делал
echo '<pre>'; print_r($model); //распечатка модели
и получал все данные, а вот получить конкретное значение поля, которое ввёл юзер, не могу.
Ответы: >>1071081 >>1071087 >>1071398
Аноним 2017/10/05 12:11:41  №1071068 261
>>1071029
Я не ОП, но по-моему отлично вышло.
Ответы: >>1071148
Аноним 2017/10/05 13:29:11  №1071081 262
>>1071067
Могу предположить что бэкслеш это говорит о Неймспейсе
Ответы: >>1071084
Аноним 2017/10/05 13:37:15  №1071084 263
>>1071081
>говорит о Неймспейсе
Непонятно.
Аноним 2017/10/05 13:41:42  №1071087 264
>>1071067
\Yii::$app->request->post()
вот это и есть твой $_POST
Ответы: >>1071089
Аноним 2017/10/05 13:43:23  №1071089 265
>>1071087
Ну, это-то понятно, но зачем "\"? Без него никак нельзя? Что-то же он делает.
Ответы: >>1071092 >>1071261 >>1071398
Аноним 2017/10/05 13:49:07  №1071092 266
>>1071089
напиши вначале скрипта use \Yii as Yii
и можешь убрать его.

Вот урок по теме от Опа
Ответы: >>1071093
Аноним 2017/10/05 13:49:26  №1071093 267
Аноним 2017/10/05 15:18:28  №1071118 268
>>1070224
pdo объект лучше создавать в конструкторе объекта работы с базой данных?
Ответы: >>1071330
Аноним 2017/10/05 16:03:29  №1071148 269
>>1071068
Благодарю, добрый анон.
Аноним 2017/10/05 16:06:04  №1071151 270
https://ideone.com/Qk2CzO
Не работает команда ORDER BY. Параметр проходит правильно, в консоли запрос отлаживал. ЧЯДНТ?
Ответы: >>1071166 >>1071177
Аноним 2017/10/05 16:29:23  №1071166 271
>>1071151

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

Имя поля нужно вставлять напрямую в запрос, предварительно проверив его по списку разрешенных значений.
Ответы: >>1071170
Аноним 2017/10/05 16:46:59  №1071170 272
>>1071166
Да, я уже разобрался. Интересно, почему PDO не предусматривает возможности подставлять имя поля или таблиц? Вроде же логично что бы была и такая фича.
Ответы: >>1071174
Аноним 2017/10/05 17:00:15  №1071174 273
>>1071170

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

Для запроса вроде такого:

SELECT x FROM t WHERE a = ?

Здесь СУБД может построить план запроса, не зная подставляемого значения.

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

Хотя я согласен, что есть смысл в том, что ты предлагаешь. Для этого можно написать библиотеку поверх PDO. Я такие возможности видел в одной старой библиотеке плейсхолдеров которую когда-то использовал (да, я почти с самого начала писал запросы с плейсхолдерами, хотя PDO тогда еще не было и в учебниках про них не писали): http://dklab.ru/lib/DbSimple/ (внимание! библиотека безнадежно устарела).

Вообще конечно, было бы хорошо, если бы какой-нибудь анон с запасом свободного времени сделал бы обзор разных библиотек для работы с БД.
Аноним 2017/10/05 17:15:11  №1071177 274
>>1071151
Кстати там же у меня не работает WHERE LIKE, я так понимаю там тоже надо как-то хитро экранировать, не?
Ответы: >>1071221
Аноним 2017/10/05 19:04:20  №1071221 275
>>1071177

Нет, это не из-за плейсхолдеров.

Также, ORDER BY или WHERE правильнее будет назвать не "командой", а "конструкцией". По английски это называется clause (например, "This statement contains ORDER BY clause" - в этом запросе есть конструкция ORDER BY), а по-русски мне ничего, кроме "конструкция" в голову не приходит.

Вообще, clause переводится так: http://dictionary.cambridge.org/ru/%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/%D0%B0%D0%BD%D0%B3%D0%BB%D0%BE-%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9/clause

Основной смысл - статья (пункт) в договоре.

Тут https://postgrespro.ru/docs/postgresql/9.6/queries-table-expressions.html clause переводят как "предложение", но мне кажется, это неудачный перевод.

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

Ответы: >>1071223
Аноним 2017/10/05 19:08:48  №1071223 276
>>1071221
Ну кусок "WHERE
name LIKE :search OR
secondName LIKE :search OR
groupNumber LIKE :search OR
summary LIKE :search "
У меня не работает, опять же если без плейсхолдеров то все норм.
Ответы: >>1071398
Аноним 2017/10/05 20:51:38  №1071261 277
>>1071089
Потому что, если у тебя в файле объявлен неймспейс, например
namespace frontend\controllers;
то Yii::$app->request->post() попытается обратиться к frontend\controllers\Yii::$app->request->post();
Чтобы этого избежать - как выше писал анон - можно сделать use Yii; либо указать \ (рут)
Аноним 2017/10/05 20:53:26  №1071262 278
Аноны дайте совет битарду. Смогу запустить контекстную рекламу на сайт, который создан на конструкторе ukit.com? как данные сайты себя чувствуют в поисковых запросах? сфера моих услуг - юриспруденция. Или может лучше заказать сайт на битриксе у анонов?
Ответы: >>1071264 >>1071304 >>1071398
Аноним 2017/10/05 20:57:17  №1071264 279
>>1071262
Лучше и школьников каких-то закажи визитку на вордпрессе и отдельно ищи услуги по раскрутке. Битрикс нахуй не нужен.
Ответы: >>1071266 >>1071269
Аноним 2017/10/05 20:58:30  №1071266 280
>>1071264
думаешь так лучше будет?а шаблонный на конструкторе совсем дно?
Аноним 2017/10/05 21:19:29  №1071269 281
>>1071264
еще вопрос, а без опыта, я сам не сделаю на вордпрессе?
Ответы: >>1071271
Аноним 2017/10/05 21:25:02  №1071271 282
Ответы: >>1071276
Аноним 2017/10/05 21:30:37  №1071276 283
Ответы: >>1071295
Аноним 2017/10/05 22:04:45  №1071295 284
>>1071276
Но вот что именно ты сделаешь - большой вопрос. Наверни The7, она ахуенна!
Аноним 2017/10/05 22:07:16  №1071300 285
>>1070829
ААААААА! Сука, что за хуйня там. Целая страница ёбаного кода. Я нихуя понять не могу, что не так блять.
Аноним 2017/10/05 22:18:10  №1071304 286
>>1071262
вордпресс или джумла, там без проблем разобраться. А битрикс скорее нужен для сайтов с каталогами товаров и выгрузкой/загрузкой в 1с.
Ответы: >>1071307
Аноним 2017/10/05 22:26:31  №1071307 287
>>1071304
У битрикса дохуя возможностей, но без опыта кодинга там особо делать нечего
Аноним 2017/10/05 23:26:48  №1071325 288
Есть какой-нибудь гайд по деплою приложухи на хероку? А то на офиц сайте не очень понятно, интересует именно подключение к базе. + на хероку же постгрес, пытался сейчас создать таблицы в консоли, нихуя не получается, куча ошибок. Кое-как таки создал страницу с юзерами, инсертнул туда данные, пытаюсь войти на сайт - просто страница обновляется, и даже не ебу в чем проблема, ведь базу я не могу посмотреть, ошибок тоже никаких. Делал на PDO, если что.
Ответы: >>1071345
Аноним 2017/10/05 23:37:13  №1071330 289
>>1071118

Лучше использовать DI: https://github.com/codedokode/pasta/blob/master/arch/di.md

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

Там в статье есть часть кода простейшего контейнера, а можно в принципе сделать еще проще и использовать в качестве контейнера просто массив.
Ответы: >>1071387
Аноним 2017/10/05 23:42:50  №1071332 290
Анончес, как сделать из мухи слона на PHP?
Аноним 2017/10/05 23:52:59  №1071341 291
Блядь, я с этими регулярками ковыряюсь как обезъяна с астролябией. Но мозг работает, это хорошо.
Уже почти все правильные варианты могу отобрать, кроме одного, при всего лишь трех ложных срабатываниях. Идти дальше по упражнениям или продолжать задрачивать?
Ответы: >>1071355 >>1071361
Аноним 2017/10/05 23:54:07  №1071345 292
>>1071325

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

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

По поводу логов тут https://devcenter.heroku.com/articles/php-logging#logging-from-plain-php написано что ошибки должны идти в "heroku logs".

Соответственно тут дана команда просмотра логов: https://devcenter.heroku.com/articles/logging#view-logs

Попробуй с нее начать.

Также, можно получить доступ к консоли, если ты знаком с линуксовыми командами: https://devcenter.heroku.com/articles/getting-started-with-php#start-an-interactive-shell

Из консоли можно например попробовать соединиться с БД, выполнять какие-то SQL запросы.

Тут описано подключение к Postgres: https://devcenter.heroku.com/articles/getting-started-with-php#provision-a-database

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

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

Идея передавать конфигурацию в переменных окружения есть в сборнике статей 12 factor app: https://12factor.net/ru/config

Мне эта идея не нравится, я считаю, что у нее есть недостатки, о которых авторы почему-то умалчивают (в итоге многие приходят к хранению перменных в .env файле, что не сильно отличается от обычного конфига). Но этот принцип хорошо работает в облачных системах, где твое приложение может сегодня запуститься на одном сервере, а завтра на другом. И где часто файловая система работает только на чтение, так что править конфиг нельзя.
Аноним 2017/10/06 00:02:22  №1071355 293
>>1071341

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

В твоем случае я вижу такие проблемы:

- никак не задано точное число цифр в регулярке. [\d\s]{7,14} - это значит от 7 до 14 цифр и других знаков, а должно быть 7 или +8, за ней ровно 10 цифр
- используются противоречащие друг другу квантификаторы. Например: (\s?|...)+ "?" обозначает 0 или 1 повторение, "+" - 1 или больше. Так что ты хотел написать в итоге?

Если ты хотел написать "любое число скобок, минусов, пробелов" то лучше сделать это так:

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

А вообще, тут подошла бы такая регулярка:

- вначале идет +7 или 8
- за ней ровно 10 раз такое выражение: 1 цифра, за ней любое число минусов, скобок пробелов

Разумеется, копипастить выражение 10 раз не нужно, используй квантификатор.

Ответы: >>1071358
Аноним 2017/10/06 00:06:27  №1071358 294
>>1071355
>Если ты хотел написать "любое число скобок, минусов, пробелов"
Это и хотел.

>1 цифра, за ней любое число минусов, скобок пробелов
Почему не наоборот - сначала любое количество скобок, минусов и пробелов, а потом цифра? После +7 или 8 цифрты-то может и не быть.
Ответы: >>1071362
Аноним 2017/10/06 00:07:45  №1071361 295
>>1071341

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

- привязка к краям строки ^ и $
- привязка к краю слова \b
- один конкретный символ (a)
- один любой символ (.)
- один символ из определенной группы: \s, \d, \w
- один любой символ из набора [1234a-f]
- один любой символ, кроме указанных [^abc]
- одно из выражений: (X|Y|Z)
- повторение выражения указанное число раз: вопрос, звездочка, плюс, {N,M} в сочетании с круглыми скобками

Разумеется, ты должен знать все указанные выше конструкции наизусть.

Там еще есть другие конструкции (подробности в мануале http://php.net/manual/ru/pcre.pattern.php ) но для наших задач хватит того, что я привел
Ответы: >>1071364
Аноним 2017/10/06 00:08:49  №1071362 296
>>1071358

> Почему не наоборот
Можно и так, не принципиально. Я общую идею только привел, как сделать, чтобы было ровно 10 цифр. Главное, чтобы ты умел с помощью простых условий строить сложные шаблоны осознанно, а не наугад переставлял символы.
Ответы: >>1071364
Аноним 2017/10/06 00:11:28  №1071364 297
>>1071361
>>1071362
Блин, аноны, с вашей подсказкой слишком просто получилось.
Зато я понял свою ошибку. Квантификаторы внутри квантификаторов - это так просто но совершенно контринтуитивно.
Ответы: >>1071371
Аноним 2017/10/06 00:24:02  №1071371 298
>>1071364

Можно сделать лучше. Во-первых,у тебя 2 раза повторяется +7 с небольшими изменениями.

Во-вторых, для квантификатора "от 0 до бесконечности повторов" есть более короткая запись.
Ответы: >>1071372
Аноним 2017/10/06 00:29:50  №1071372 299
Ответы: >>1071376 >>1071398
Аноним 2017/10/06 00:33:02  №1071376 300
>>1071372
Во!

^([\s\+][78])([\s\(\)\-]\d){10}$
Ответы: >>1071378
Аноним 2017/10/06 00:33:45  №1071378 301
Ответы: >>1071398 >>1071612
Аноним 2017/10/06 01:05:08  №1071387 302
Аноним 2017/10/06 02:00:24  №1071398 303
>>1071372

Так пройдет номер +78 и 10 цифр

>>1071378

Так пройдет номер с +8 в начале или с 7 без +.

>>1071262

Если у твоего сайта есть URL то сможешь. Но не надо тут устраивать флуд из кучи коротких сообщений.

>>1071223

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

>>1071089

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

>>1071067

Вообще, тебе надо сначала прочесть документацию Юи по работе с формами. Я думаю, он умеет сам копировать данные из модели формы в модель сущности БД.

Разные кнопки можно различать, если дать им разные имена - нажатая кнопка передается в POST.

> Я не понимаю конструкцию $model->load(\Yii::$app->request->post()) && $model->validate()
Я тоже, по моему она неправильная

> Все поля и кнопки во вью должны быть между begin() - end(),
Ну ты изучи, что делают эти функции, какой HTML вставляют в шаблон.

> Как проверить, от какой кнопки пришло нажатие?
Ее имя будет содержаться в POST данных

> Как вообще вытащить из post данные в контроллере?
Они находятся в объекте request, изучи документацию по нему.


https://theknacker.github.io/Webpaint/webpaint.html Аноним 2017/10/06 02:01:29  №1071399 304
>>1071029

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

browserstack можно (вроде бы) пользоваться бесплатно несколько раз, если зарегистрироваться. И можно даже без регистрации, если отправлять запрос с сайта modern.ie. Найдешь ссылку сам? Я проверил, работает.

Далее, сделаем простой тест. Возьмем и добавим на твою страницу section с HTML-кодом взятым отсюда http://motherfuckingwebsite.com/ или отсюда http://www.blindtextgenerator.com/snippets?snipps=EN-snippets-kafka . Или вообще очищаем содержимое body и вставляем туда HTML код.

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

Что мы видим у тебя? https://pste.eu/p/HRFa.html - это явно нельзя назвать красиво выглядящим текстом в стиле сайта. Каша какая-то.

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

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

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

У тебя сейчас стили текста заданы только для абзаца внутри определенного блока: .service_item p { ... }. Это неправильно, нужно их задавать для html, чтобы они работали по умолчанию на всей странице.

Более того, ты исопльзуешь CSS reset, который обнуляет многие полезные стили. В итоге текст не выглядит как текст, а как нечитаемая каша. Если ты используешь CSS reset, ты обязан задать стили для всех элементов, для которых ты их сбросил тут в начале: https://theknacker.github.io/Webpaint/style.css (и если подумать, то окажется что выгоднее не использовать CSS reset вообще, чем сбрасывать стили и затем заново ставить им обратно те же значения).

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

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

Далее, у тебя там есть стили слишком широкого действия:

> a:not(.logo), label, img {
> transition: all 200ms linear
Этим ты ставишь транзишен для всех картинок и ссылок на сайте на все свойства. Такого не требовалось. Нужно сделать правило более специфичным, указав конкретные элементы и конкретные свойства.

Или тут:

> li a{

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

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

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

Далее, ты там используешь width: fit-content, про который я первый раз слышу, и видимо не только я, так как он мало где поддерживается: https://developer.mozilla.org/ru/docs/Web/CSS/fit-content#Browser_compatibility и по моему ты даже используешь эту функцию неправильно.

Насчет тега cite я тоже не уверен - я тут почитал https://developer.mozilla.org/ru/docs/Web/HTML/Element/cite - можно ли его использовать для указания копирайта?

> input#graphic:checked ~ a:not([href="#graphic"]),
Это не подойдет, так как мы не можем менять ссылку на произвольную. И мы не можем поместить работу в 2 категории. Нужно использовать либо классы, либо специально придуманный data атрибут.

> <div class="service_image_android"></div>
Этот элемент не нужен, для картинки можно использовать псевдоэлемент.

Еще по моему на макете был курсив в шапке.

И вот тут вот проблема: безымянный див:

> <footer>
> <div>

div сам по себе не несет никакого смысла, он предназначен для нестандартных элементов, и смысл этих элементов задается id или классом. А ты не используешь тут класс и потом городишь какие-то трудные для понимания селекторы. Завтра кто-то добавит третий див, и все стили собъются потому что у тебя там используется :last-of-type.

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

Если тебе интересно, ты можешь еще почитать про методологию БЭМ, которая как раз придумана, чтобы упростить дальнейшую поддержку кода, чтобы верстку было как можно легче править в будущем: https://ru.bem.info/methodology/ У нас тут очень простая верстка, и БЭМ использовать не требуется, но если ты будешь верстать более сложные страницы, а тем более сайты с большим числом страниц, понимание БЭМ тебе пригодится. Прочитай, если есть время.

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

Также у тебя нет метатега viewport ( http://frontender.com.ua/mobile-web/wtf-viewport/ ).

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

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

Давай для начала с этим разберемся, а потом более внимательно остальное посмотрим.

Я бы конечно еще тебе хотел дать задачу исследовать варианты подключения SVG картинок, какие при этом возникают сложности, как они поддерживаются в разных браузерах, но не знаю, готов ли ты такую задачу сделать, есть ли время. Если есть, то потом я тебе объясню, что надо сделать и зачем.
Ответы: >>1071409
Аноним 2017/10/06 02:25:03  №1071401 305
>>1070821

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

Алсо тут ошибка:

> data: 'json =' + JSON.stringify(json)

Спецсимволы должны кодироваться процентным кодированием при использовании метода application/x-www-url-encoded или как-то так. У меня есть урок https://github.com/codedokode/pasta/blob/master/network/urls.md и там это мельком упомянуто (там про query string, но принцип тот же):

> параметры (строка запроса, query string) - может содержать дополнительные параметры, которые будут переданы на сервер. Обычно параметры пишутся через знак =, и разделяются символом &, например ?a=1&b=2&c=hello%20world. Спецсимволы в именах и значениях параметров надо кодировать процентным кодированием. В примере выше в фразе hello world пробел (который нельзя использовать в ссылке) закодирован кодом %20.

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

>>1070599

У тебя переменная окружения, которая указана в коде, задана? Видна ли она в PHP? Проверь через getenv или phpinfo() например.

>>1070597

Можно сделать так:

- в начале идет +7 или 8
- за ним ровно 10 раз повторяется такое выражение: "любое число минусов, скобок, пробелов в любом порядке, за ним ровно одна цифра". Повтор задается через квантификатор конечно.

>>1070552

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

> Можно ли без своей реализации сделать на yii2 чтобы и httpBasicAuth работал и обычная браузерная аутентификация основанная на сессии? Мне надо чтобы сайт работал в двух режимах: и как обычный сайт и как API если передать определенный параметр, вот встал вопрос реализации аутентификации по токенам.

Начать нужно с изучения документации по авторизации/аутентификации в Юи и затем смотреть, как это реализовать. Она там настраивается, можно писать свои классы, так что наверно это возможно.
Ответы: >>1071410
Аноним 2017/10/06 02:25:25  №1071402 306
>>1070548

Боюсь что это баги соответствюущих сервисов, где криво настроен PHP. Попробуй еще другие какие-нибудь. Ну вот например https://repl.it/languages/php - тут все работает или 3v4l.org.

Или установи себе PHP на компьютер, и запускай встроенный в PHP сервер, и смотри результат в браузере, инструкции где-то в ОП посте.
Ответы: >>1071633
Аноним 2017/10/06 02:26:30  №1071403 307
>>1071029

И еще, если я что-то непонятное написал или плохо сформулировал замечания, ты уточняй.
Аноним 2017/10/06 03:26:20  №1071409 308
>>1071399
Благодарю ОП, именно это я и имел ввиду когда говорил про стиль который действует на всех страницах. Я только под конец понял что ошибся. Методологию я вот собирался на днях изучать, ровно как и поработать с селекторами, чтобы лучше их понять.
>Насчет тега cite я тоже не уверен
Я думал что этот тег можно было для копирайта использовать. Заменю на <i>, пожалуй?
>нет метатега viewport
Я его хотел добавить, но подумал, что пользователь может увеличить страницу в случае чего. Судя по статье так делать нежелательно.
Еще проблема есть одна, во всех браузерах все отображается верно, но в Mozilla и ее мобильной версии один <div> элемент перед названием города съезжает вниз, т.е посередине, пока не знаю как фиксить.
Да ОП помоги чем сможешь. И еще хотел спросить, где все эти ресурсы искать? Я с книг беру всякие полезные сайты и т.д Бойлер плейты всякие итд. А у тебя прям набор какой то, опыт? Во всяком случае объясни, это все по мере работы находится?
Ответы: >>1071413 >>1071414 >>1071415
Аноним 2017/10/06 03:30:07  №1071410 309
Аноним 2017/10/06 03:33:01  №1071411 310
Привет!
Поясните почему форма работает некорректно, а именно почему постоянно срабатывает 7 строка? Вроде корректно ввожу данные, а проверка проходит не так как положено.
https://ideone.com/3rQ5Cn
Ответы: >>1071423
Аноним 2017/10/06 03:47:12  №1071413 311
>>1071409

Теги i и b поменяли свое значение в HTML5. В любом случае, они тут не подходят, используй просто div с классом.

meta viewport сам по себе не блокирует зум. Он говорит мобильному браузеру, что страница оптимизирована под мобильные устройства и задает настройки для ее отображения (если тега нет, браузер думает, что это страница, не знающая про мобильные браузеры). Без него мобильное устройство отобразит десктопную широкую версию сайта в уменьшенном масштабе. Ты можешь открыть свой сайт в Хроме или ФФ и включить там в отладчике режим отладки адаптивной версии и увидишь. Ну или на реальном устройстве.

> но в Mozilla и ее мобильной версии один <div> элемент перед названием города съезжает вниз, т.е посередине, пока не знаю как фиксить.
Что отладчик показывает? Какие стили применены? Где она съезжает?

> Да ОП помоги чем сможешь.
Ты задавай конкретные вопросы тогда.

> И еще хотел спросить, где все эти ресурсы искать?
Информацию по HTML/CSS свойствам я ищу со словом MDN. например "mdn flexbox"

Учить наизусть все теги конечно не надо, просто достаточно прочитать список 1 раз, чтобы знать, что есть, что в принципе возможно.

Также есть дайджест новостей в таком формате https://habrahabr.ru/company/zfort/blog/331168/

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

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

Если есть очень большое желание можно почитать спецификации по HTML/CSS (осторожно, много букв, но зато все очень подробно расписано). Я в них обычно ищу какие-то спорные вопросы, про которые нигде толком не написано. Ну вот к примеру, тут автоматическое определение размеров элементов в CSS очень подробно расписано: https://www.w3.org/TR/CSS2/visudet.html#q10.0

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

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

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

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

Ответы: >>1071434 >>1071463
Аноним 2017/10/06 03:48:53  №1071414 312
>>1071409

Насчет тегов i и b, решил дополнить. В HTML4 это были презентационные теги, задававшие внешний вид элемента (курсив и жирный шрифт). В HTML5 наконец-то решили покончить с презентационными тегами (внешний вид задается в CSS, а не в HTML) и поменяли им смысл. А также ввели strong и em которые задают смысловое выделение текста.
Ответы: >>1071463
Аноним 2017/10/06 04:03:43  №1071415 313
>>1071409

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

Затем:

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

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

Тогда скорее всего все будет нормально.

Ответы: >>1071422 >>1071463
Аноним 2017/10/06 04:39:32  №1071422 314
>>1071415
ОП, а я правильно понял про механическую адаптацию, или у меня как раз она получилась? Не могу понять верно или нет.
Ответы: >>1071443 >>1071444
Аноним 2017/10/06 04:41:58  №1071423 315
>>1071411
Я дегенерат ^^
if ($_POST['city'] == NULL || $_POST['street'] == NULL || $_POST['house'] == NULL || $_POST['apartment'] == NULL || $_POST['size'] == NULL || $_POST['weight'] == NULL){
print "<br><b>Форма заполнена некорректно, попробуйте еще!</b>" . showForm();
Аноним 2017/10/06 06:10:40  №1071434 316
>>1071413
Кстати я как раз изучение html и css со спецификации начинал, каждый день их вкладки открыты. Значит я в правильном направлений. ОП если сможешь ответь на мой вопрос выше.

З.Ы Отладчик посмотрю.
Ответы: >>1071443
Аноним 2017/10/06 07:40:07  №1071443 317
>>1071422

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

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

>>1071434

Ну вот и хорошо, это значит что технические вещи ты понимаешь, но теперь надо разобраться с вопросом удобства пользования, удобства поддержки программистами.
Аноним 2017/10/06 07:40:41  №1071444 318
>>1071422

Или хабр например сравни, обычную версию с мобильной.
Аноним 2017/10/06 09:58:24  №1071463 319
>>1071413
>>1071414
>>1071415
ОП я исправил версию на мозилле, там почему то адресный div элемент внутри ссылки ни в какую не хочет расширяться в fit-content, вот оно как раз твое замечание. В общем я так решил, пока буду пытаться максимально ужать классы и более логичней и удобней для всех. Методологию, почитать ресурсы, так же попробую поверстать еще странички и.т.д
Думаю не буду тебе надоедать своим тупоумием, если уж совсем сложно будет спрошу. И еще - Спасибо за то что ты делаешь.
Ответы: >>1071513 >>1074291
Аноним 2017/10/06 10:02:30  №1071465 320
Задам еще тут вопрос...
Есть JS скрипт с "отзывами": https://ideone.com/BWZEXS
Нужно его добавить на страничку с отзывами, к примеру http://www.site.ru/otzyvy/
А он добавляется на все страницы сразу, которые есть на этом сайте.
Добавляю в xml файлик который отвечает на верстку html, не пойму как сделать что бы этот скрипт был на определенной странице.
если это важно, то движок umi.cms
Ответы: >>1071622 >>1071901 >>1074291
Аноним 2017/10/06 12:22:42  №1071513 321
>>1071463
Апдейт по Moz:
В элементе adr::before когда я ставлю ему контент иконки, он перестает быть inline-block элементом, фиксится либо изменением ширины, в результате чего в IE11 SVG элемент сразу масштабируется до нее и становится больших размеров, но в мозилле и хроме все в порядке. Я пробовал переделать svg с ФШ, не помогло. В общем чтобы элемент не перескакивал на след. строчку, приходится ему ставить display:inline-block;
Ответы: >>1074291
Аноним 2017/10/06 13:57:38  №1071553 322
Регулешки, поясните пожалуйста вот какой момент:
заменяю начальные буквы в строке на заглавные:
$regexp = "/^([а-яёa-z])/u";
вопрос: я могу прямо в прегреплейсе сделать как-нибудь конструкцию вида:
$value = preg_replace($regexp, "strtoopper($1)", $textt);
или мне нужно выковыривать букву регуляркой, потом уже не регуряркой поднимать регистр, и обратно вставлять? Можно ли в одной строчке сделать автозамену?
Аноним 2017/10/06 14:09:43  №1071560 323
>>1071553
Так ты в интерперетаторе запусти свой скрипт и узнаешь, можно или нет.
Ответы: >>1071571
Аноним 2017/10/06 14:19:03  №1071571 324
>>1071560
я запускаю, не работает. Мне нужно понять, не работает потому что ЭТО В ПРИНЦИПЕ НЕЛЬЗЯ И ТАК НЕ ДЕЛАЕТСЯ, или не работает потому что МЕТОД ВЕРНЫЙ, НО СЕЙЧАС ЕСТЬ ОШИБКА В СИНТАКСИСЕ, И ЕСЛИ ЕЕ ИСПРАВИТЬ, ТО ВСЕ ЗАРАБОТАЕТ.
Можно же мне сейчас сказать, что это невозможно, чтобы я не тратил время зря и использовал другой метод
Ответы: >>1071582
Аноним 2017/10/06 14:29:18  №1071575 325
Есть одна задача: заполнить магазин А товаром из магазина Б потом и В,Г....
Как это реализовать без регистрации и смс человеку с опытом в полтора часа?
В гугле советуют писать свой парсер из говна и палок.
Занимался ли кто такими хитрыми делами товары, мейлы, телефоны, небо, Аллах? Мб есть чего готового для этих целей?
Ответы: >>1071873
Аноним 2017/10/06 14:42:10  №1071582 326
>>1071571
То есть посидеть, поковыряться и разобраться у тебя времени нет, а сидеть тут и ждать, пока ответят - есть? Ну ок.

Я не спец в ПХП, но если strtoupper() возвращает строку, а $0 ждет строку, то никаких препятствий я не вижу.

>я запускаю, не работает
У тебя в примере минимум две опечатки. Может, поэтому и не работает? Опять же, интерпретатор тебе ошибки писать должен, не бывает так, что "просто не работает".
Ответы: >>1071591
Аноним 2017/10/06 14:44:30  №1071584 327
>>1071553

Тебе нужен preg_replace_callback.

То, что ты хочешь сделать, раньше делалось специальным флагом, но позже это было признано опасным способом, вызывающим уязвимости.
Ответы: >>1071599
Аноним 2017/10/06 14:45:14  №1071586 328
>>1071553

Алсо strtoupper не работает корректно с utf-8, имей в виду.
Аноним 2017/10/06 14:46:17  №1071587 329
>>1071553
Зачем strtoupper($1) в кавычках? У тебя сейчас буквально первая буква строки заменяется на подстроку "strtoopper($1)", я сомневаюсь, что ты именно этого добивался.
Ответы: >>1071592
Аноним 2017/10/06 14:52:35  №1071591 330
>>1071582
Как же я умиляюсь с таких мудаков как ты.
Во-первых, я спрашивал совета у знающего анона, а не у мимокрокодила, который никак в сабже не разбирается, но лезет учить.
Во-вторых, не смешивай понятия "просиди и подумай" с "трать все время на заведомо неправильное решение просто потому что снобам от программирования, сидящим в треде помощи, лень написать да или нет"
А вообще ты напоминаешь мне дяденьку-председателя колхоза из старого баяна, где солдаты-срочники строили гараж для сельхоз-техники, затаскивали огромную плиту на опорные балки вручную, как рабы, рискуя быть придавленными, а он каждый день приходил и сидел - смотрел на них. И под конец, когда балку затащили, председатель подошел и сказал "ребят, очень низко сделали, трактор не проедет". И на все вопросы "а что же ты, дядя, до этого момента молчал?", он отвечал "так я в отпуске был"
Так что будь добр, просто не лезь в то, в чем не разбираешься
Ответы: >>1071597
Аноним 2017/10/06 14:55:41  №1071592 331
>>1071587
>Зачем strtoupper($1) в кавычках?
ты у мамы не очень умный, да? Потому что без кавычек ideone выдает ПУСТУЮ ошибку без ничего, по которой ничего не понять. Или ты думаешь ты единственный, который подумал убрать ковычки, дыа?
Ответы: >>1071597
Аноним 2017/10/06 15:05:13  №1071597 332
>>1071592
>взял функцию в кавычки
>удивляется почему не работает
>мааам ну он дурак ну скажи ему мааам

>>1071591
>ну ка все метнулись резко и читнули за меня мануалы а то я слишком занятой чтобы васякой хуйней заниматься
Найс подрыв.
Ответы: >>1071600
Аноним 2017/10/06 15:09:40  №1071599 333
>>1071584
Вот тебе спасибо, помогло
Аноним 2017/10/06 15:10:18  №1071600 334
>>1071597
>>взял функцию в кавычки
>>удивляется почему не работает
>>мааам ну он дурак ну скажи ему мааам

Ты идиот?
Ответы: >>1071601
Аноним 2017/10/06 15:13:42  №1071601 335
>>1071600
Нет нужды быть агрессивным.
Ответы: >>1071602
Аноним 2017/10/06 15:19:07  №1071602 336
>>1071601
дажи ни знаю, кто хуже, агрессивный мимокрокодил или дурачок, который считает себя невозмутимым Буддой, надрачивая тем самым свое чсв и самоутверждаясь засчет новичков
Ответы: >>1071604
Аноним 2017/10/06 15:20:58  №1071604 337
>>1071602
Имеешь право думать так, как умеешь. Пока я говорю, что твоя агрессия бесполезна.
Аноним 2017/10/06 15:43:29  №1071608 338
>На вход скрипта дан введенный пользователем номер телефона в виде 8-911-404-44-11 или +7(812)6786767 (в начале 8 или +7, потом идут 10 цифр и, возможно, какие-то символы). То есть, как и в прошлой задаче, человек вводит номер как хочет. Надо проверить номер на правильность и привести любой номер к единому формату 89114044411 (то есть, заменить +7 на 8 и выкинуть весь мусор вроде пробелов, скобок и минусов, кроме цифр)

А эта задача вообще решаема в один проход? То есть в два прохода я ее решить могу - заменить сначала +7 на 8, а потом вырезать все не-цифры. Но как это сделать в один проход - ума не приложу.
Ответы: >>1071612 >>1071614 >>1074291
Аноним 2017/10/06 15:52:20  №1071612 339
>>1071608
вот вчера аношка в одну регулярку решил
>>1071378
Ответы: >>1071617
Аноним 2017/10/06 15:55:14  №1071614 340
1.png (93, 1680x900)
900x1680
Ответы: >>1071620
Аноним 2017/10/06 15:55:58  №1071615 341
Можно ли вкатиться в пхп-разработку с крайне скудными уменями верстки, в т.ч. и яваскрипта? Мне вот нравится кодить движок сайта, а верстка ну совсем не вдохновляет.
Ответы: >>1074291
Аноним 2017/10/06 15:58:58  №1071617 342
>>1071612
Не, это другое. Распарсить номер и заменить символы - разные вещи.
Аноним 2017/10/06 16:16:41  №1071620 343
>>1071614
Ну так это тоже в два прохода - ты же дважды preg_replace вызываешь. Так я тоже могу. Ты за один вызов реши.
Аноним 2017/10/06 16:17:24  №1071621 344
Чому на https://ideone.com/
строка mb_internal_encoding('utf-8'); выдает
ошибку? И прочие mb_
Ответы: >>1071633
Аноним 2017/10/06 16:18:59  №1071622 345
>>1071465
Отвечайте на мой ответ!
Ответы: >>1071625
Аноним 2017/10/06 16:30:33  №1071625 346
>>1071622
Прости, няша, я не знаю. Подожди опа, он вечером вроде приходит. После двеннадцати.
Аноним 2017/10/06 16:39:25  №1071633 347
Ответы: >>1071695
Аноним 2017/10/06 17:17:07  №1071654 348
Ht.PNG (89, 836x376)
376x836
Начал изучать регулярные. Пытаюсь понять зачем тут [0-9]. Может кто-нибудь объяснить, пожалуйста? Спасибо.
Ответы: >>1071658 >>1071686
Аноним 2017/10/06 17:26:35  №1071658 349
>>1071654
Это значит "тут должна быть любая цифра от 0 до 9 ровно один раз". В двадцатичетырехчасовом формате времени на этом месте может быть любая цифра от 0 до 9.
Ответы: >>1071662
Аноним 2017/10/06 17:28:58  №1071660 350
Screenshot1.png (19, 785x319)
319x785
Застрял в третей задаче на массивы, что дальше то писать?
Как вывести именно значение массива?
Ответы: >>1071663 >>1071668
Аноним 2017/10/06 17:29:58  №1071662 351
>>1071658
Хорошо. А зачем тогда число 12 стоит до этого ?

Получается ведь что-то типо 121:34
Ответы: >>1071670 >>1071672
Аноним 2017/10/06 17:30:46  №1071663 352
Ответы: >>1071668 >>1071677
Аноним 2017/10/06 17:37:12  №1071668 353
>>1071663
>>1071660
в array_rand надо массив сам вставить
$random = array_rand($answers)
Ответы: >>1071677
Аноним 2017/10/06 17:44:53  №1071670 354
>>1071662
>зачем тогда число 12 стоит до этого ?
По аналогии с 0-9 - это будет любая цифра в диапазоне от 1 до 2.
мимо опыт пхп 14 минут
Ответы: >>1071671 >>1071672
Аноним 2017/10/06 17:47:43  №1071671 355
>>1071670
Там нету никаких знаков. Не 1-2, а просто 12.
Ладно. Позже попробую понять снова. Всем спасибо за отклик.
Ответы: >>1074291
Аноним 2017/10/06 17:47:48  №1071672 356
>>1071670
>>1071662
Не совсем. Это будет 1 или 2. "Любая цифра в диапазоне от 1 до двух" - это [1-2]. Я понимаю, что это ожно и то же по сути, но с точки зрения записи это разные вещи.
Аноним 2017/10/06 17:57:06  №1071677 357
Ответы: >>1071678
Аноним 2017/10/06 18:01:36  №1071678 358
>>1071677
$random = array_rand($answers);
$answer = $answers[$random];
echo $answer;
Аноним 2017/10/06 18:05:19  №1071679 359
Благодарствую
Аноним 2017/10/06 18:15:28  №1071686 360
>>1071654

Квадратные скобки значат "один любой из указанных символов". Ну например [123456] значит одна цифра от 1 до 6.

При этом можно использовать минус для указания диапазона и [1-6] это то же самое, что [123456].

Если первый символ это ^ то смысл меняется на противоположный и скобки значат "один любой символ кроме указанных", например [^1-9ab] значит любой символ, кроме цифр 1-9 и букв a, b.

Мануал http://php.net/manual/ru/regexp.reference.character-classes.php
Ответы: >>1071706
Аноним 2017/10/06 18:26:28  №1071695 361
Аноним 2017/10/06 18:39:53  №1071706 362
>>1071686
Понял, спасибо ольшое
Аноним 2017/10/06 23:09:55  №1071796 363
15056790880800.jpg (180, 500x494)
494x500
>>1067944 (OP)
Немного знаю пхп, но никогда не работал с API социальных сетей, и всякие "токены для идентификации", "асинхронный обмен данными" внушают мне неподдельный ужас. Официальные гайды не объясняют, "куда вообще всё это вбивать и что нахуй делать шоб стало заебись", примеров мало, практики, скорее справочники какие-то, а не гайды. Ютуб наоборот заполнен всяким бредом вроде "поклацай клавишами в МэниБот или Снапчат, станет охуительно". Интересующие платформы: ФБ, ВК, Телеграм, Твиттер. Хочется поделать ботов-автоответчиков, реагрирующих на присылаемый текст и нетекст (схоронял присылаемые пикчи, например, или присылал обратно черно-белую версию, или конвертировал форматы), мб автопостеры какие-то или парсеры. Как, имея хостинг с пыхом, все это делать, есть какие-то Quick Startы?
Ответы: >>1071803 >>1071836
Аноним 2017/10/06 23:37:35  №1071803 364
>>1071796
нужно реальное знание РНР -- и тогда все официальные гайды соц.сетей внезапно просто и понятно предоставляют всё что нужно.

А для дураков -- бесконечно-бесполезные тренинги, курсы и видосики.
Ответы: >>1071805
Аноним 2017/10/06 23:40:02  №1071805 365
>>1071803
>дураков
вкатывальщиков, если точнее
Аноним 2017/10/07 01:59:40  №1071835 366
laravellogo.png (20, 300x300)
300x300
Как в ларе передать параметр во все вьюхи?
Предлагали в конструкторе основного контроллера (Controller.php) - не подходит ибо некоторые унаследованные контроллеры перегружают конструктор (и лезть туда не нужно)
Ответы: >>1072357
Аноним 2017/10/07 02:19:09  №1071836 367
>>1071796

Во-первых, API соцсетей основаны на HTTP, потому стоит в общем прочитать про этот протокол, чтобы знать его особенности и может тогда документация будет понятнее. Вот урок (если что-то там непонятно или плохо объяснено, напиши): https://github.com/codedokode/pasta/blob/master/network/http.md

Заодно прочитай на всякий случай урок про URL : https://github.com/codedokode/pasta/blob/master/network/urls.md

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

Во-первых, если ты хочешь слать запросы вручную (например для тестирования), то есть такие программы-клиенты:

- curl - для командной строки
- программы с графическим интерфейсом ищутся по словам "http gui client"

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

В PHP есть расширение curl, но оно довольно неудобное для использования. Гораздо удобнее использовать ООП-библиотеки вроде Guzzle. есть и другие библиотеки, они ищутся по словам "php http client library", еще можно поискать

- на phptrends: https://phptrends.com/search?q=http+client
- в packagist: https://packagist.org/?q=http%20client&p=0

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

АПИ с авторизацией могут быть сложными для новичка, потому потренироваться можно на более простом АПИ, не требующем авторизации, например на АПИ геокодера из яндекс-карт: https://tech.yandex.ru/maps/doc/geocoder/desc/concepts/About-docpage/

Также, есть специальный сайт, который отдает заранее известные HTTP ответы который можно использовать для тренировки: http://httpbin.org/




Ответы: >>1071842
Аноним 2017/10/07 02:57:27  №1071838 368
ОП, скажи мне, вот какая у тебя мотивация сидеть здесь годами и строчить длинные пасты за бесплатно?
ты одинок?
Ответы: >>1071840
Аноним 2017/10/07 03:13:30  №1071840 369
>>1071838
Всё просто
тортик - ложь
Оп - няша[/spoil
er]
Аноним 2017/10/07 03:26:36  №1071842 370
>>1071836
Погоди-погоди, это все примерно понятно, спасибо, анон, но мне нужен именно кьюик старт по конкретному апи соцсетки, пусть даже и не сложному для начала. В теории я понимаю и про заголовки http, и даже курлом когда-то пользовался, из пыха header'ы и setcookie вызывал, но читаю про АПИ и охуеваю. И даже не только про апи, а хотя бы про
>такие программы-клиенты
https://habrahabr.ru/post/271687/
Например в этой статье мне по-отдельности все более-менее понятно, если посимвольно буквально разбираться, но в сумме "блядь блядь как сложно нахуй вообще так сделано блядь что зачем это господи что за хуйня вообще ааааа". А в случае, когда я заделал, например, в
>в МэниБот или Снапчат
основу и теперь хочу добавить кастомные команды, выводящие ответы из моих скриптов (в зависимости от посланных командой этим скриптам данных), тут я вообще не понимаю даже, в какую сторону копать.
Ответы: >>1071844
Аноним 2017/10/07 03:41:07  №1071844 371
>>1071842

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

> нужен именно кьюик старт
Зачем он нужен если есть документация? Ну хотя, в документации обычно бывают примеры кода.

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

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

В статье нет конкретики, но если перейти по ссылкам, почитать документацию этого стандарта (?), то думаю станет понятно.

Там еще упоминается PSR-7, это интерфейсы дял объектов, представляющих HTTP запрос или ответ. Если ты знаком с ООП и если ты почитаешь документацию, то тебе все станет понятно, я думаю.

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

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

Короткого пути нет. Точнее, есть один - нанять кого-то, кто умеет делать то, что тебе нужно. Или же разбираться постепенно самому.

> хочу добавить кастомные команды, выводящие ответы из моих скриптов

Для этого тебе сначала полностью разобраться как работает существующий код.
Ответы: >>1071847
Аноним 2017/10/07 04:41:27  №1071847 372
>>1071844
>Мне идея понятна из первого абзаца. Есть много разных библиотек-HTTP-клиентов, и если ты использовал в своей программе одну, ты не можешь заменить ее на другую, так как у них разный интерфейс, разные классы, разные методы. Там люди пытаются придумать общий интерфейс, так, что ты пишешь код под него и после этого можешь легко подключить любую совместимую библиотеку и твой код автоматически окажется с ней тоже совместимым.
Да, это-то понятно. Я про код. Сейчас объясню на живом примере. Я хочу гайды типа таких
https://pikabu.ru/story/api_vkontakte_dlya_python_3961240
https://tproger.ru/translations/telegram-bot-create-and-deploy/
или хотя бы типа таких
https://habrahabr.ru/post/281559/
https://habrahabr.ru/post/316666/
https://habrahabr.ru/post/278847/
https://habrahabr.ru/post/127237/
Но для пхп находится какое-то говно + все юзают разные библиотеки и я ебал так жить.
>В статье нет конкретики
>Дальше есть немного сложных моментов - про асинхронные запросы и discovery - это рассчитано на тех людей, кто с ними сталкивался и понимает о чем речь. Если ты не сталкивался, то конечно, статья ничем тут не помогает.
Вот, блеать. Я знаю основы пхп, но всю жизнь писал круды и админки, там хттп ограничивалось посыланием заголовков через header () и минимальным аяксом.
>Для этого тебе сначала полностью разобраться как работает существующий код.
Если ты пилишь бот каким-то конструктором, там и нет кода, вернее, ты его не видишь, он от тебя скрыт, перед тобой только кнопочки админки сервиса (в случае снапчата) для создания ботов или (в случае телеграма) само окошко той штуки, для которой ты делаешь бота (клиент телеграма с диалогом бот-криейтора или созданным ботом, в данном случае). Как к имеющейся хуйне добавить команду, которая не только ответ заготовленный возвращает, а хотя бы результат скрипта <? return random(); ?> не въезжаю :с
Ответы: >>1074291
Аноним 2017/10/07 09:37:12  №1071873 373
>>1071575
Если магазин маленький (до пары тысяч товаров) и пирсинг одноразовый -можно парсить скриптом написанным на коленке за час, если магазин большой и нужны актуальные данные всегда - готовься придумывать архитектуру, проектировать хранение, использовать абстракции над курлом типа angrycurl/rollingcurl с коллбеками. Алсо будь готов что тебя будут постоянно банить, сперва автобаны будешь ловить, потом по IP руками.
В любом случае опыт нужен не только с пхп, но и курлом, xpath или с другой либой которая работает с дом-деревом, знание MySQL
Ответы: >>1072685
Аноним 2017/10/07 12:44:58  №1071901 374
Ещё немного задачек Аноним 2017/10/07 12:50:02  №1071905 375
Ответы: >>1074289
Аноним 2017/10/07 15:56:54  №1072015 376
Ответы: >>1074717 >>1074718
Аноним 2017/10/07 17:31:29  №1072070 377
Сделал задачу на генератор стиха вот таким способом:
https://ideone.com/OTtUP3
Такой вариант имеет право на жизнь? Алсо, если объявить переменную шаблона стихотворения до массива с рандомными словами, то не работает. Подскажите, почему.
Ответы: >>1074289
Аноним 2017/10/07 20:09:53  №1072147 378
Анончики, разбираюсь с ларой.
Назрел вопрос. Вот в юии есть виджеты, которые могут генерировать готовую html разметку из входящих данных и т.д.
Как это в ларе лучше сделать?
Хочу я, например, сделать метод, который получает массив, которым он заполнит value и name, после чего генерирует выпадающий селект из всего этого.
Вынести в отдельный класс для работы с массивами и выдающий html?
Если да, то как правильно?
Ответы: >>1072179
Аноним 2017/10/07 21:37:44  №1072179 379
>>1072147
Правильно - погуглить готовые виджеты и использовать их. Судя по тому, что ты просишь, достаточно будет этого пакета для генерации HTML:
https://laravelcollective.com/docs/5.2/html
https://laravelcollective.com/docs/5.2/html#drop-down-lists
Кстати раньше он был частью фреймворка. Есть ещё такой пакет: https://github.com/adamwathan/bootforms - по сути тоже самое, но с использованием Twitter Bootstrap.
Ответы: >>1072182
Аноним 2017/10/07 21:44:01  №1072182 380
>>1072179
От души, братишка.
Там и гляну как правильно делается.
Аноним 2017/10/08 13:45:54  №1072357 381
>>1071835
Ну раз ты гугл не хочешь использовать, то давай немного подумаем и пройдёмся по исходникам. Тебе нужны глобальные переменные в шаблонах, это значит (как мне кажется), что при каждом создании рендерера вьюшек эти переменные должны туда передаваться, может в конструктор, может в метод какой, неважно. Открываем исходники компонента View:
https://github.com/laravel/framework/tree/5.5/src/Illuminate/View
видим так какой-то класс View:
https://github.com/laravel/framework/blob/5.5/src/Illuminate/View/View.php
Помню, что в контроллере мы используем метод render, находим его в этом классе, углубляемся по цепочке protected методов к методу gatherData и видим строчку:
$data = array_merge($this->factory->getShared(), $this->data);
Выглядит как то, что нам нужно - $this->data это массив, который передаётся через $this->render('template.name', ['key' => 'value']) и есть ещё какие-то shared переменные у фабрики. Смотрим её исходники и находим там массив с комментарием "Data that should be available to all templates.": https://github.com/laravel/framework/blob/5.5/src/Illuminate/View/Factory.php#L52
И тут же метод для добавления глобальных переменных:
https://github.com/laravel/framework/blob/5.5/src/Illuminate/View/Factory.php#L309

Итого тебе нужно получить доступ к фабрике View и добавить туда через share свою переменную. Самый простой способ - в AppServiceProvider в методе boot вызвать View::share('key', 'value')
Здесь View - это фасад. Если непонятно почему это работает, то почитай о service provider'ах в ларавеле и изучи как фреймворк резолвит такие статические вызовы (на самом деле он достаёт фабрику из DI-контейнера).
Ответы: >>1072366
Аноним 2017/10/08 14:03:37  №1072366 382
>>1072357
В провайдерах нельзя использовать фасад Auth, а мне он нужен. Но проблема решилась банальным мидлвером примененным ко всем роутам
жаль что программисты не умеют отвечать на вопрос парой строк
Ответы: >>1072638 >>1074289
Аноним 2017/10/08 16:22:42  №1072407 383
Анон, который умеет в твиг, подскажи как в самом шаблоне "template.twig" выполнить подключение файла по аналогии с require_once('path/to/file.php'); С гуглом пытаюсь наладить отношения, но пока он мне сильно не помог
Ответы: >>1072425 >>1074289
Аноним 2017/10/08 17:17:24  №1072425 384
Ответы: >>1072429
Аноним 2017/10/08 17:24:04  №1072429 385
>>1072425
Это видел, но он подключает лишь шаблоны, а php файлы судя по всему нет
Ответы: >>1072433
Аноним 2017/10/08 17:30:52  №1072433 386
>>1072429
Он и не должен PHP файлы подключать, ты хочешь одновременно использовать 2 шаблонизатора (Twig и PHP)? Объясни зачем, может ты слишком много логики в шаблон пихаешь. Ты знаком с макросами твига и кастомными функциями?
Ответы: >>1072443
Аноним 2017/10/08 17:54:27  №1072443 387
>>1072433
я с твигом можно сказать только начинаю знакомство, поэтому вряд ли, есть задание по работе под твиг переписать существующий tpl шаблон, в нём было подключение класса, которое я уже вынес в контроллер и вроде как получил желаемый результат, плюс в этом tpl шаблоне было создание экземпляра класса, который через twig тоже не получилось присвоить, и сделал это через контроллер, ну а с выводом в twig уже вроде как проблем не составило, так что хоть как задумал изначально - не сделал, т.к. тупо нет такой возможности, но обходным путём воспользовался, посмотрим что скажут
Аноним 2017/10/08 19:00:50  №1072485 388
2017ый на дворе, а я вкатился к вам.

Фига у вас всё расписано сначала то, потом это, даже сайтик свой, ни в одном треде на дваче нет такого продвинутого комьюнити
Ответы: >>1072493
Аноним 2017/10/08 19:11:54  №1072489 389
Курсы специалиста по похапе стоит рассматривать или уг?
Ответы: >>1072493
Аноним 2017/10/08 19:13:43  №1072493 390
>>1072485
>>1072489
У нас тут есть свой уютный учебник к официальный мануал.
Аноним 2017/10/08 19:42:07  №1072502 391
Пацаны почему вот так работает:
$stmt = $this->dbn->prepare("SELECT FROM student ORDER BY :sort DESC LIMIT 10 OFFSET :offset");
А вот так нет:
$stmt = $this->dbn->prepare("SELECT
FROM student ORDER BY :sort :order LIMIT 10 OFFSET :offset");
$stmt->bindValue(':order','DESC');

постгресиквел
Ответы: >>1072791 >>1072803
Аноним 2017/10/08 19:44:59  №1072504 392
prnscr.PNG (3, 345x106)
106x345
output.PNG (1, 215x38)
38x215
Объясните дауну как в хпх склеивать в строке переменную и текст, и как это всё нормально переносить на следующую строку с помощью \n.
Ответы: >>1072512
Аноним 2017/10/08 19:57:19  №1072512 393
>>1072504
$строка = 'строка'.$переменная.'еще строка'.'\n';
Аноним 2017/10/08 21:01:28  №1072532 394
Снимок.PNG (27, 778x484)
484x778
2 дабла это типо большая редкость или наоборот рядовой случай, но приятно?
Ответы: >>1072610 >>1072661
Аноним 2017/10/08 21:32:55  №1072537 395
Снимок.PNG (23, 774x447)
447x774
Ответы: >>1072539 >>1072577
Аноним 2017/10/08 21:37:36  №1072539 396
>>1072537
ой, я чет не подумал, что надо новую пасту было создать
Аноним 2017/10/08 23:15:41  №1072577 397
>>1072537
Потому что $credit больше нуля 3 строка
а у тебя условие: $credit <= 0 9 строка
Ответы: >>1072614
Аноним 2017/10/09 00:23:11  №1072610 398
>>1072532
в суть не всматривался особо, но на 16й строке скрина в первом условии должно идти сравнение ==, вместо присвоения =
Ответы: >>1072614
Аноним 2017/10/09 00:34:33  №1072614 399
Аноним 2017/10/09 01:11:46  №1072620 400
А правда, что в php меньше всего вкатывальщиков?
Ответы: >>1072621
Аноним 2017/10/09 01:13:12  №1072621 401
>>1072620
Наоборот. В js и php много вкатывальщиков.
Аноним 2017/10/09 02:31:49  №1072635 402
ynnp.png (447, 720x590)
590x720
Пыханы, поясните за неймспейсы. Суть в том, что есть обьявленый класс в одном неймспейсе, но доступ к его методам нужен из другого неймспейса. Есть такая возможность на 5.3 пыхе?
Ответы: >>1072636
Аноним 2017/10/09 02:38:44  №1072636 403
Ответы: >>1072637
Аноним 2017/10/09 02:57:21  №1072637 404
>>1072636
Сори, я упорол косяка впринципе с видимостью классов, дело не в неймспейсе.
https://ideone.com/xqMIVT
Межушный ганглий уже не соображает, пойду спать.
Ответы: >>1073673
Аноним 2017/10/09 03:39:00  №1072638 405
>>1072366
А лень твоя тут причем?
Ответы: >>1073325
Хелп ретарду vandarkholme 2017/10/09 04:48:44  №1072648 406
ajh.png (3, 339x138)
138x339
суп,антоны. абсолютно не разбираюсь в теме и буду рад пояснениям или если ты такой щедрый,то решение пикрила

Найти значение переменной z, заданной суммой функций. Для нахождения значения функции f(u,t) написать пользовательскую функцию. Числа a и b – случайные.


Ответы: >>1072690 >>1072692
Аноним 2017/10/09 06:33:12  №1072661 407
>>1072532

Давай посчитаем. На 2 костях может выпасть 6 x 6 = 36 разных комбинаций. Из них 6 комбинаций - это даблы (1 и 1, 2 и 2 итд). Следовательно, вероятонсть выпадения дабла на 2 костях = 6 / 36 = 1 / 6. Если бросать 2 кубика, дабл выпадает в среднем раз в 6 случаев (у кого есть кубики, можете попробовать проверить).

А что насчет выпадения даблов у 2 игроков? Очень просто, чтобы найти вероятность того, что произойдет 2 независимых события, надо перемножить их вероятности. Вероятность выпадения даблов у первого игрока = 1/6, у второго = 1/6, вероятность выпадения даблов у 2 игроков одновременно = 1/6 x 1|6 = 1/36 или чуть менее 3%.

Часто это или редко, думай сам.

математическая статистика всегда мне казалась сложной и непонятной
Аноним 2017/10/09 09:51:32  №1072685 408
>>1071873
>Если магазин маленький (до пары тысяч товаров) и пирсинг одноразовый -можно парсить скриптом написанным на коленке за час
Это и есть моя задача. Сделать один раз - залить в мой магаз и продавать. Аритектуру и абстракции буду допиливать как разберусь.
>В любом случае опыт нужен не только с пхп, но и курлом, xpath или с другой либой которая работает с дом-деревом, знание MySQL
Знаю MySQL более-менее и с пхп разбираюсь. Можешь подкинуть чего по курлу?
>Алсо будь готов что тебя будут постоянно банить, сперва автобаны будешь ловить, потом по IP руками.
С этим проблем быть не должно.
В идеале я хотел найти готовый говноскрипт - пропарсить им 1 раз, залить товары и продавать, пока я допиливаю все к толковому виду.
Аноним 2017/10/09 10:11:18  №1072690 409
>>1072648
>sin f(,a) - что это?
мимонесилачвматематике
Аноним 2017/10/09 10:17:30  №1072692 410
>>1072648
>Для нахождения значения функции f(u,t) написать пользовательскую функцию.
Вот тебе функция:
функция малафья (говно, моча)
{
if говно>2 return 1 строчка
elseif говно <=2 return 2 строчка
esle return гроб, гроб, кладбище, пидор
}

Дальше сам
Аноним 2017/10/09 12:15:31  №1072762 411
Часто вижу в резюме всяких васянов такую фразу: "делаю сайты под ключ". Под какой еще ключ? Что они имеют ввиду?
Ответы: >>1074289
Аноним 2017/10/09 13:21:02  №1072791 412
>>1072502
Короче в препаре нельзя пихать все подряд. Сначала нужно составить строку запроса в которой явно заданы названия полей и уже потом ее препарить.
Аноним 2017/10/09 13:33:00  №1072797 413
image.png (485, 730x720)
720x730
Анонасы спасайте.
Дело обстоит так, вкатился в пхп и все сопутствующее уже как 4 года.
За плечами создания анонимного чатика, форума, работа с неким неадекватным куном над браузеркой в качестве фронд-ендщика(рисовал анимацию к файтингу), все в порядке унубления( от более качественной к менее качественной реализации).
Пока я все это пилил, то не юзал ни фреймворков, ни ооп, ни мвц, ничегошечки их этого.
И вот ананасы, наступил мой 5 курс универа, мне уже надоело глять во всякую хню, с друзьями и т.д. Да и тян уже есть, и я подумал, - "а хуль бы мне не вкатиться прохрамистом?". В среде программистов со своего универа имею кое-какое уважения в качестве задрота(сам учусь на факультете не имеющим ничего общего с программированием), да и думал до этого что нет нерешаемых для меня задач.
Так вот, решил я вкатиться и начал смотреть вакансии, и тут мой взор упал на обилие всяких непонятных мне технологий (jqeury, фреймворки, git... ). Ну накатал я резюме которое затрагивает хоть немного из этого, хотя сам прочитал сугубо теорию о многом. Невероятно, но меня позвали на собеседование.
Собеседование прошло довольно радужно, два прогера меня интервьюировали около часа, правда один свалил на половине, болтали о всякой поеботе типа отличия js от php, всяком практическом и т.д.
В итоге дали некое проверочное задание, связанное с разработкой блога.
Вкратце используя php7, mysql DB не используя сторонних библиотек (я решил на этом задании надрочить знание jQuery а его использовать нельзя было, олололо, надо было внимательней читать, хотя рааньше его совсем не юзал)
Итог что написали, далее приведу жирным цветом что ответил HR и прокомментирую в скобках:
Здравствуйте, пока, к сожалению не можем вам ничего предложить, так как тестовое задание выполнено слабо(ну ок, слабо, но ведь все же работает)

Выполнено с использованием сторонних библиотек (jQuery)(как ни странно но эта технология мне понравилась, ибо действительно сокращает js код), отсутствует разделение логики и представления(это как их разделять, что такое мвц вообще? в задании не было сказано его использовать), ООП не использовано( зачем его юзать если есть процедурное программирование, и в задании не было сказано использовать ООП), множественное дублирование кода(один раз дублировал аякс запрос из-за пока что плохого понимания jquery, потому что не смог обратиться к ему же, а время поджимало разбираться), непродуманная организация базы данных(а вот тут вообще обидно, ибо использовал БД которая была приведена в задании).


Так вот ананасы, как смыть с себя этот позор(нет), ну допустим задрочу я эти все технологии, буду делать все используя мвц и паттерны, как искать вакансии в своем городе-то, если уже облажался с одной конторкой а другие не ищут пхп манагеров или я из задинамил?(
Соре за сумбурность и ашипке(
Ответы: >>1074289
Аноним 2017/10/09 13:38:13  №1072803 414
>>1072502

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

Если нужно вставлять имя поля, то его надо проверить по списку разрешенных значений и после этого вставить напрямую в запрос.
Аноним 2017/10/09 15:24:36  №1072861 415
Сап парни, нужен человек, который сделает сайт для игрового сервера (в перспективе для нескольких игр сразу).
Писать в телегу - @aleksShinobi1
Аноним 2017/10/09 17:56:59  №1072952 416
Аноним 2017/10/09 17:57:44  №1072955 417
Господа, что такое => ? Нигде не могу найти определения. Примерно понимаю, как оно работает, но хочу знать определенно.
Ответы: >>1072958 >>1074287
Аноним 2017/10/09 18:02:28  №1072958 418
Аноним 2017/10/09 18:15:26  №1072962 419
Как в Yii 1.0 сделать поиск по БД?

Есть 3 таблицы, через yiic сделал их ActiveRecord, CRUD скрипты сгенерировал, вьюхи для круда есть.

Теперь надо сделать поиск по БД через sql запросы, но я нихуя не вдупляю MVC, теория с практикой не сходится. Знаю, что такое м-в-к, а как их правильно самому сделать, и наладить взаимодействие- хз.
Ответы: >>1072989 >>1074287
Аноним 2017/10/09 19:45:25  №1072989 420
>>1072962
Зачем ты первую версию изучаешь?
Ответы: >>1073163
Аноним 2017/10/09 21:49:32  №1073070 421
>>1067944 (OP)
Прошу проверить, правильно ли я понял регулярки. Так как на специальном сайте из-за моей косожопости ничего не находило, я решил сделать в ideone.
Номер машины: https://ideone.com/7uAo3W


Аноним 2017/10/09 22:53:03  №1073113 422
>>1073070
А вот с телефонными номерами пока не понимаю. Как сделать, чтобы игнорировало и пробелы, и другие символы?
Ответы: >>1073187 >>1074287
Аноним 2017/10/10 00:13:59  №1073163 423
Ответы: >>1073453
Аноним 2017/10/10 02:20:04  №1073183 424
>>1073070
Как сделать, чтобы искало плюс семь или восемь. У меня на плюс выдает ошибку, как я понял.
Ответы: >>1073187 >>1074287
Аноним 2017/10/10 02:29:08  №1073184 425
Парни, можете по полочкам раскидать - как написать спам-бота для чатика на пхп?
1. Парсер
2. Хуярсер
3...
А ещё там гугловская каптча.
Ответы: >>1073189 >>1074287
Аноним 2017/10/10 02:54:51  №1073187 426
>>1073183
>>1073113
>>1073070
Сделал задание без семерки с плюсом, потому что глупенький. https://ideone.com/kAfpHf
Боже мой, какой же я все-таки глупенький, потому что я допустил, что пропущенные символы могут быть цифрой.
Ответы: >>1074286
Аноним 2017/10/10 03:22:56  №1073188 427
Делаю селект к таблицам(5, 2, 12 записей), а на выводе от 64 до 144 строк, шо це за дела?
Ответы: >>1073389 >>1074286
Аноним 2017/10/10 03:24:20  №1073189 428
>>1073184
Для этого взять язык Python, в нем есть многопоточность , и необходимые библиотеки. Этой штуки тебе за глаза хватит

https://github.com/lorien/grab
Ответы: >>1073197
Аноним 2017/10/10 03:50:42  №1073197 429
>>1073189
Не хочу и не могу в питон.
Ответы: >>1073202
Аноним 2017/10/10 04:05:30  №1073202 430
Аноним 2017/10/10 10:52:33  №1073325 431
Ответы: >>1073327
Аноним 2017/10/10 10:56:08  №1073327 432
Аноним 2017/10/10 12:49:36  №1073389 433
>>1073188
Покажи запрос хотя бы
Аноним 2017/10/10 13:14:54  №1073418 434
Поясните за ООП в пхп. Я пару месяцев смотрел на джаву, там на любой пук нужно создавать объект, но в целом мне понравилась вся эта хуйня с абстрактными классами и полиморфизмом. Я смогу делать так же в пхп?
Ответы: >>1073665 >>1074285
Аноним 2017/10/10 14:14:30  №1073453 435
>>1073163
Если ты его сделаешь успешно - они копипастнут его в проект, а на тебя положат хуй. Если не сделаешь - то просто положат хуй. Энджой.
Ответы: >>1074154
Аноним 2017/10/10 16:14:37  №1073543 436
Ребятки, а почему код такого вида не работает:

[CODE]

$text = "жы шы";

$patterns = array();
$patterns[0] = "/(ж|ш)ы/ui";

$replacements = array();
$replacements[0] = preg_replace("/ы/ui", "и", $0);

echo preg_replace($petterns, $replacements, $text);

[/CODE]

Это потому, что там $0 в качестве аргумента на функцию подано? Так нельзя разве?
То есть меня не запарит сделать паттерн и реплейсер для каждого кейса, но хотелось покомпактнее как-то.
Ответы: >>1073557
Аноним 2017/10/10 16:40:22  №1073557 437
>>1073543
Потому что $0 в кавычки не взял, вот я тупой-то.
Сам спросил, сам ответил.
Аноним 2017/10/10 16:47:06  №1073566 438
Yii2
Допустим, есть таблица в БД. И данные из неё выводятся на страницу (тоже в виде таблицы). И есть кнопка "добавить ещё строку в таблицу".
Я правильно понимаю, что по нажатию на неё мы пинаем контроллер, тот добавляет строку, а затем заново рендерит страницу?

Я так сделал (и оно работает), но как-то медленно. Если обойтись без Yii, то по нажатии на кнопку данные улетают аяксом в пхп-скрипт, который добавляет их в таблицу, а потом возрващает success жс-скрипту. И тот добавляет новую строку на страницу через dom.

Протестировал оба вариата - dom работает раз в шесть быстрее yii и обходится без рефреша страницы. Как такое же сделать в Yii?
Ответы: >>1073573 >>1073660 >>1073664
Аноним 2017/10/10 16:50:47  №1073573 439
>>1073566
Сам ответил на свой вопрос- проблема в коде контроллера.
Один хуй и контроллер, и пхп скрипт у тебя выполняют одну и ту же операцию - insert в таблицу.
Ответы: >>1073581
Аноним 2017/10/10 16:56:49  №1073581 440
>>1073573
Нет, это понятно, что код так сделан, что получается оно это самое, етить его через коромысло.
Мне интересно, можно ли сделать так, чтобы нажатие на кнопку обрабатывал контроллер Yii, а дабавление строки далалось без рефреша страницы?
Ответы: >>1073636
Аноним 2017/10/10 17:02:10  №1073587 441
Так, ладно, я тупой, но код все равно работает странно. Вот этот пример работает, как надо, заменяет точки без пробелов на точки с пробелами:

[CODE]

$text = "aaaaa.ffffff";
$regexp = "/\\w\\.\\S/ui";
$matches = array();

preg_match_all($regexp, $text, $matches);
var_dump($matches);

echo preg_replace('/\\./', '. ', $matches[0][0]);

[/CODE]

А вот этот код почему-то не хочет, хотя регулярка такая же и функция тоже. Неужели опять опечатка?

[CODE]

mb_internal_encoding('UTF-8');

$text = "вышел сдесь координально жы есть aaaa.fffff";

$patterns = array();
$patterns[0] = "/(ж|ш)ы/ui";
$patterns[1] = "/сдесь/ui";
$patterns[2] = "/здел(ал|ан|аю)/ui";
$patterns[3] = "/координально/ui";
$patterns[4] = "/\\w\\.\\S/ui";

$replacements = array();
$replacements[0] = preg_replace("/ы/ui", "и", "$0");
$replacements[1] = "здесь";
$replacements[2] = preg_replace("/з/ui", "с", "$0");
$replacements[3] = "кардинально";
$replacements[4] = preg_replace("/\\./", ". ", "$0");

echo preg_replace($patterns, $replacements, $text);

[/CODE]
Ответы: >>1073649 >>1073651 >>1074286
Аноним 2017/10/10 18:39:04  №1073636 442
>>1073581
Можно. Если контрол умеет обрабатывать JSON.
Контроллер выполняет задачу, отдает JSON. AJAXовый контрол парсит данные и рефрешит элементы.
Ответы: >>1074036
Аноним 2017/10/10 18:56:45  №1073649 443
>>1073587
Бляя почитай какие символы можно использовать в регулярных
Аноним 2017/10/10 19:00:28  №1073651 444
>>1073587
Алсо foreach'ем пройтись надо по массивам, откуда вы берётесь такие
Аноним 2017/10/10 19:12:15  №1073660 445
>>1073566
А в чем проблема сделать аякс запрос в нужный route на сервер? Какая аяксу разница делаешь ты аякс-запрос в пхп-скрипт или в контроллер?
Контроллер делает то, что ты ему скажешь. Скажешь рендерить страницу, он будет рендерить страницу. Скажешь выплюнуть json-код - он его выплюнет. Скажешь ничего не делать и кинуть 500 эррор, он его кинет. Контроллер это тот же пхп скрипт, просто с кучей подтянутого на фоне бэкенда.
Ответы: >>1074036
Аноним 2017/10/10 19:13:28  №1073663 446
Пояните нубу, зачем нужна возмозможность объявлять функции в переменной, вот так: $pizda = function ($huy) и в каких ситуациях это используется?
Ответы: >>1073670 >>1073789
Аноним 2017/10/10 19:14:12  №1073664 447
>>1073566
Командуешь аяксу кинуть запрос на нужный адрес - myfacebook.com/controller/method
Командуешь методу контроллера принять данные из запроса и return new Response(200) или че там в йии.
Ответы: >>1074036
Аноним 2017/10/10 19:15:02  №1073665 448
>>1073418
Нет. Что такое классы?
Аноним 2017/10/10 19:19:28  №1073670 449
Ответы: >>1073694 >>1073781
Аноним 2017/10/10 19:22:14  №1073673 450
Аноним 2017/10/10 19:55:37  №1073694 451
Аноним 2017/10/10 22:03:33  №1073765 452
Подскажите как лучше всего конвертировать min.js в js и обратно? Можно ли это сделать средствами netbeans 8.2?
Ответы: >>1074285
Аноним 2017/10/10 22:39:18  №1073781 453
>>1073670
Прочел все по ссылкам про замыкания, колбек и анонимные функции. Вроде все понял, но я бы еще задачи порешал. Может у кого-то есть на эту тему? У ОПа только задача про айпад в уроках, которую я давно решил.
Аноним 2017/10/10 23:14:16  №1073789 454
>>1073663

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

Зачем они нужны? Разберем пример.

Представь, что у тебя есть склад. На складе лежат товары, у каждого товара есть вес (в кг), цена и название.

Склад можно описать с помощью массива товаров (попробуй). У меня получилось так:

$warehouse = [
['name' => 'картошка', 'weight' => 100, 'price' => 100500],
['name' => 'морковка', 'weight' => 50, 'price' => 5000],
...
];

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

function findByName($warehouse, $name) { ... }

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

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

А что, если мы хотим сделать функцию, которая ищет товары на складе не только по имени, а по любым произвольным критериям? Например:

- товары с названием на букву "А"
- товары легче 100 кг
- товары, у которых цена за килограмм меньше 10

Как представить в коде и как передать в функцию эти критерии поиска? Как передать условие "легче 100 кг"? Тут-то и приходят на помощь анонимные функции. Мы можем выразить критерий поиска в виде анонимной функции, которая получает на вход товар и возвращает true или false в зависимости от того, соответствует товар условию поиска или нет.

Вот пример функции, которая получает на вход товар (массив с информацией об одном товаре) и проверяет, что он весит меньше 100 кг:

$checkWeightIsLessThan100 = function ($item) {
return $item['weight'] < 100;
};

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

$items = findItems($warehouse, $checkWeightLessThan100);

Задание:

1) допиши код, чтобы все это работало
2) прочитай в мануале про array_map и array_filter
3) прочитай в мануале про usort. Эта функция позволяет отсортировать (упорядочить) элементы массива по произвольному критерию. Напиши функцию, которая отсортирует товары на складе, чтобы они шли в таком порядке:

а) сначала группа товаров с ценой менее 1000
б) за ними группа товаров с ценой менее 5000
в) за ними оставшиеся товары

Внутри групп а, б, в товары сортируются по названию (по алфавиту).

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

function createCounter() { ... }

$c1 = createCounter(); // создаем первый счетчик. в $c1 должна записаться анонимная функция, которая при каждом вызове будет возвращать числа, начиная с 1

echo $с1(); // выводит 1
echo $c1(); // выводит 2
echo $c1(); // выводит 3

$c2 = createCounter(); // создаем вторую независимую функцию-счетчик

echo $c2(); // 1
echo $c2(); // 2

// при этом первая функция-счетчик тоже работает:

echo $c1(); // 4
echo $c1(); // 5

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

Ответы: >>1074329
Аноним 2017/10/11 00:07:09  №1073798 455
>>1067944 (OP)
пишу скриптик по работе, как отправить смс в скрипте через свою мобилу? Есть ли какие то програмки с API на Android или IOS?
Ответы: >>1074204
Аноним 2017/10/11 00:26:18  №1073806 456
Разница между php 5 и php 7 большая?
Ответы: >>1074285
Аноним 2017/10/11 00:30:16  №1073811 457
А php версии откатывать можно?
Ответы: >>1074285
Аноним 2017/10/11 00:36:05  №1073813 458
>>1067945
Есть ли выравнивание кода в атоме? По дефолту или же с помощью доп пакета?
Ответы: >>1074008
Аноним 2017/10/11 11:43:43  №1073971 459
Здарова, натуралы.

Ищем себе человечка. Джуна/Мидла.
Локация: Москва.
Нужно знание PHP7, Symfony 3 и MySQL/PostgresSQL (вообще похуй, т.к. есть DoctrineORM же).

Вообще у нас дают тестовое , после собеседования, но его (естесно)
никто не делает.
Так вот, анон, я предлагаю тебе запилить его! Я его проверю, помогу тебе в тихаря "причесать" и оформить так, чтобы тимлиду понравилось.
Если все будет ОК, то тебя пригласят на собес. Собес == взять на работу. Т.к. он больше будет нужен провети тебя на имбецильность и шизу (80% кандидатов такие).

Не все пункты задания обязательные, например 4 задание не нужно хуярить супер верстку, вообще можно ее не делать. Мы ищем PHP-шника, верстальщик у нас есть.

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

http://rgho.st/6Sw48CLfT - само задание

С вопросами и выполненным заданием пишите в телегу: @spudro или в треде.



Ответы: >>1074039 >>1074041
Аноним 2017/10/11 12:15:47  №1073979 460
Снимок.PNG (8, 531x170)
170x531
Какая наилучшая последовательность изучения?
В сети предлагают разные
Занимаясь 3 месяца по 18 часов в день хватит освоить эти азы?
Ответы: >>1073983
Аноним 2017/10/11 12:31:43  №1073983 461
Ответы: >>1073984
Аноним 2017/10/11 12:33:23  №1073984 462
>>1073983
Вай?
Я так диплом писал по радиотехнике
параллельно ебашил чертежы и паял схему
Ответы: >>1073989
Аноним 2017/10/11 12:39:59  №1073989 463
>>1073984
>чертежы
Это немного сложнее чем кописатить совковое говно.

Еще бля понабрал говна разного, ты вообще что хочешь?
Ответы: >>1073990 >>1073992
Аноним 2017/10/11 12:42:59  №1073990 464
>>1073989
Ебать ты даун братишка
Аноним 2017/10/11 12:44:24  №1073992 465
>>1073989
вебмакака горит лол.
схемотехника для него это изи.
иди выпились еблан.
Ответы: >>1073998
Аноним 2017/10/11 12:51:38  №1073998 466
>>1073992
Ты че так порвался-то? Опять зарплату канифолью выдали?
Аноним 2017/10/11 13:44:10  №1074008 467
>>1073813
вроде бы есть, по поиску расширений поищи.
Аноним 2017/10/11 14:07:27  №1074022 468
1.png (20, 1105x217)
217x1105
Что это? Пытался с пеки запустить регулярное выражение, которое было в примере с котом, выдало это.
Ответы: >>1074032 >>1074042
Аноним 2017/10/11 14:20:30  №1074032 469
>>1074022
Кодировка строки не та.
Аноним 2017/10/11 14:35:21  №1074036 470
>>1073636
>Контроллер выполняет задачу, отдает JSON.
Это можно. Но как организовать приём? То есть, вот эту штуку:
>AJAXовый контрол парсит данные и рефрешит элементы.

>>1073660
>А в чем проблема сделать аякс запрос в нужный route на сервер? Какая аяксу разница делаешь ты аякс-запрос в пхп-скрипт или в контроллер?
Получится лишняя прослойка. На вью кнопка, при нажатии срабатывает js (а не контроллер) и передаёт аяксом в контроллер данные, а потом принимает оттуда json и изменяет вью. Так я уже делал и оно работает. Но по фен-шую ли это? То есть, не монтирую ли я велосипед?

>>1073664
То есть, всё же, считывать нажатие на кнопку не контроллером, а js-скриптом - это правильно? Но я тогда не понимаю, как это согласуется с моделью MVC. Не претендует ли скрипт на роль второго контроллера?
Ответы: >>1074284 >>1074933
Аноним 2017/10/11 14:41:50  №1074039 471
>>1073971

> и MySQL/PostgresSQL (вообще похуй, т.к. есть DoctrineORM же).
Это типичное заблуждение, что можно не знать SQL если ты используешь ORM. Это не так. SQL знать все равно надо (а в случае с доктриной еще и DQL).
Ответы: >>1074047
Аноним 2017/10/11 14:43:10  №1074041 472
>>1073971

Также, где гарантия что ты именно работодатель, а не соискатель, желающий, чтобы ему кто-нибудь сделал тестовое задание?
Ответы: >>1074047
Аноним 2017/10/11 14:44:29  №1074042 473
>>1074022

Программу в utf-8 сохранил на диск?
Ответы: >>1074307
Аноним 2017/10/11 15:04:31  №1074047 474
>>1074039
Все тонкости типа работы с jsonb или встроенным полнотекстовым поиском есть в доках, а основы работы с базой это матчасть. А больше джуну и не надо.

>>1074041
>где гарантия
За щекой у тебя.
Аноним 2017/10/11 16:09:53  №1074070 475
Можно ли через Html::activeTextInput не рендерить в имя название модели?
Ответы: >>1074284
Аноним 2017/10/11 18:54:43  №1074154 476
>>1073453
Щас бы тестовуху джуна на ебаном yii 1.0.0 положить в проект. Энджою.
Аноним 2017/10/11 19:00:50  №1074158 477
Как правильно реализовать метод, общий для трёх контроллеров?
Аноним 2017/10/11 21:05:21  №1074200 478
>>1074158
Сделать общего родителя и реализовать там?
Ответы: >>1074201 >>1074204
Аноним 2017/10/11 21:09:59  №1074201 479
>>1074200
Родитель фреймворковский, его вроде зашкварно изменять. Или норм?
Ответы: >>1074204
Аноним 2017/10/11 21:12:10  №1074204 480
>>1074200
>>1074158
Если есть возможность - вынести логику в отдельный сервис/хелпер, который потом можно будет вызывать из любого контроллера, из консоли, в юнит-тестах. Да кого я обманываю - какие юнит-тесты у похапешников?
Метод попроще и похуже - вынести в трейт.
Самый плохой - наследование. Завтра у него появится другая функция, которую нужно переиспользовать в разных контроллерах, а множественного наследования в PHP, к счастью, нет.

>>1074201
Это вообще не норм.

>>1073798
sms.ru

И какое отношение "Android или IOS?" имеют к треду?
Ответы: >>1074209
Аноним 2017/10/11 21:18:22  №1074209 481
>>1074204
>вынести логику в отдельный сервис/хелпер
Как об этом нагуглить чтиво?
Ответы: >>1074228 >>1074291
Аноним 2017/10/11 21:52:44  №1074228 482
>>1074209
https://github.com/codedokode/pasta/blob/master/arch/di.md
https://github.com/jupeter/clean-code-php
http://blog.byndyu.ru/2009/10/solid.html (если не знаешь C#, то читни туториал на learnxinyminutes, там очень сжато про синтаксис)

Советую изучать ООП в целом. Так как на классах вполне себе можно писать процедурный сложно читаемый код. Я вот сейчас работаю с проектом, в котором люди лепят наследование вместо DI, по ходу выполнения программы создают у объекта свойства (почему это вообще не запретят в PHP?), а потом повсюду проверяют if (isset($obj->property1) && isset($obj->property2))
Читать такой код очень тяжело, вместо того, чтобы доверять объектам с инкапсуляцией приходится держать в голове кучу внутренностей класса. Ну а вообще вот слова для гугления:
- Dependency Injection (контейнер тебе пока не нужен)
- SOLID/GRASP
- Composition over inheritance
- Law of Demeter
- Cohesion/Coupling

В ссылках выше всё это есть. И самое главное - практикуйся. В ОП-посте есть хорошие задачи, ты можешь написать игру консольную (например шахматы, без ИИ). Недавно наткнулся на такую задачу: https://gist.github.com/wbars/2c3590206ee4a590eca5

Аноним 2017/10/12 00:45:25  №1074284 483
Анон, с задачей на гитхабе, подожди еще чуть-чуть.

>>1074158

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

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

Алсо почитай мой урок про MVC https://github.com/codedokode/pasta/blob/master/arch/mvc.md

>>1074070

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

>>1074036

> считывать нажатие на кнопку не контроллером, а js-скриптом - это правильно?
А как PHP-код, который выполняется на сервере, может "считать" (обработать) нажатие на кнопку в браузере? По моему кроме JS, это никак не сделать (если только через отправку формы, но это тебе не подходит).

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

Соответственно, будешь ты использовать аякс или нет - с MVC никак не связано, так как MVC применяется в данном случае для описания только кода на сервере. Формально можно сказать, что JS скрипт является частью вью, но ведь он не выполняется на сервере и он для сервера ничем не отличается от HTML-разметки - это просто какие-то текстовые данные, которые надо отдать в HTTP-ответе.

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

Впрочем, бывают сложные приложения (SPA), где JS код также использует архитектуру MVC. В этом случае мы имеем аж 2 отдельных MVC приложения - серверное и клиентское, работающее в браузере.

> Не претендует ли скрипт на роль второго контроллера?
Нет, так как он не на PHP и не выполняется на сервере.

> Мне интересно, можно ли сделать так, чтобы нажатие на кнопку обрабатывал контроллер Yii, а дабавление строки далалось без рефреша страницы?
Код на сервере не может добавить строку в DOM. Это может сделать только JS-код.
Ответы: >>1074361
Аноним 2017/10/12 00:45:44  №1074285 484
>>1073811

Это зависит от того, какая у тебя ОС и как ты устанавливал PHP. В Windows точно можно удалить одну версию PHP и установить другую, в Дебиане, я думаю тоже, хотя там могут быть подвохи (например, старая версия PHP требует старую библиотеку, которая не совместима с другими программами). Для линукса также есть скрипт phpenv, который умеет по команде скачивать и компилировать любую версию PHP, а также делать другие интересные вещи.

>>1073806

Не очень, но в PHP7 есть полезные улучшения, о которых надо знать. Погугли статьи "что нового в PHP7".

>>073798

С андроида СМС можно отправить через встроенный в смартфон модем.

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

>>1073765

Гугли JS beautify. Код правда может быть обфусцирован (запутан) и ты все равно его не разберешь. Если это библиотека то лучше найти исходники.

> и обратно?
Гугли "минификация JS"

>>1073418

Да, и тебе не придется долго учиться так как ООП в PHP очень похож на ООП в Java.
Аноним 2017/10/12 00:46:05  №1074286 485
>>1073587

> $replacements[0] = preg_replace("/ы/ui", "и", "$0");
Ты наверно думаешь, что preg_replace будет вызван для замены найденного текста. Но это не так. Ты не понимаешь, в каком порядке выполняется код.

А выполняется код (если нет if, циклов и тд) сверху вниз. Соответственно, эта строчка выполнится так:

PHP вызовет функцию preg_replace("/ы/ui", "и", "$0"), которая ищет в строке "$0" соответствие шаблону "/ы/ui". Соответствия нет, потому функция вернет просто строку "$0", которая и запишется в массив.

Вот пример, как правильно использовать $0-$9 при замене текста:

echo preg_replace("/(\S+)@(\S+)/", '$1 [at] $2', "Напишите мне на [email protected]");
// Напишите мне на aaa [at] example.com

Если тебе нужно, чтобы при нахождении совпадения с регуляркой вызывался твой код, то тебе нужна функция preg_replace_callback и анонимные функции (с помощью анонимной функции ты описываешь, что делать при нахождении совпадения с шаблоном). Прочесть при них можно в мануале, а я дам пример их использования: https://repl.it/M3uo/1

mb_internal_encoding('utf-8');

$text = "здравствуйте. до свидания.";

echo preg_replace_callback("/(\A|\.\s*)\w/u", function ($m) {
return mb_strtoupper($m[0]);
}, $text);
echo "\n";

// Здравствуйте. До свидания.

\A значит "начало текста".

>>1073188

С джойнами? Джойн без ограничений дает присоединение каждой строки к каждой и в твоем случае выдаст таблицу с 5 * 2 * 12 = 120 строками.

>>1073187

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

Ты тестировал свою регулярку на https://regex101.com/r/qF7vT8/3 ?

Вот, как надо ее решать:

Сначала надо внимательно изучить примитивные конструкции, из которых составляются шаблоны: точка, квантифкаторы (звездочки, плюсы, фигурные скобки), вертикальная черта, круглые скобки, квадратные скобки, условия вроде ^ или \b.

Потом мы пишем такое выражение:

- в начале идет 8 или +7
- за ним 10 раз повторяется такое выражение: "любое число минусов, скобок или пробелов в любом порядке, за ними ровно 1 цифра"
- разумеется, копипастить выражение 10 раз не надо, надо использовать квантификатор

Мануал в помощь: http://php.net/manual/ru/pcre.pattern.php
Аноним 2017/10/12 00:47:08  №1074287 486
>>1073184

Спамботы не нужны.

>>1073183

Плюс - это спецсимвол, который обозначает повторение предыдущего символа от 1 до ∞ раз. Чтобы написать в шаблоне просто "ищи символ плюс", его надо экранировать бекслешем: \+ и он потеряет свое специальное значение.

Спецсимволы в регулярках надо выучить наизусть ( http://php.net/manual/ru/regexp.reference.meta.php ).

Бекслеш также можно писать 2 раза, так как бекслеш имеет специальное значение при записи строк ( http://php.net/manual/ru/language.types.string.php ) и когда мы пишем \\+, то \\ интерпретируется как \ и в строку попадает просто \+.

>>1073113

Нужно писать "любое количество символов" между цифрами.

>>1073070

Правильно.

>>1072962

Читал мой урок? Там и пример MVC кода есть https://github.com/codedokode/pasta/blob/master/arch/mvc.md

>>1072955

Это символы, которые используются при описании массивов и в конструкции foreach:

$a = [1 => 100, 2 => 50];
foreach ($a as $k => $v) { ... }

Стрелка является частью этих конструкций и отдельно от них не несет никакого смысла.
Аноним 2017/10/12 00:48:36  №1074289 487
>>1072797

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

> это как их разделять, что такое мвц вообще? в задании не было сказано его использовать
Есть урок https://github.com/codedokode/pasta/blob/master/arch/mvc.md

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

Алсо, в ОП посте в учебнике написано про ООП. Также, там есть задача про студентов, которая поможет изучить MVC.

>>1072762

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

Смысл выражения "под ключ" описан тут: https://ru.wiktionary.org/wiki/%D0%BF%D0%BE%D0%B4_%D0%BA%D0%BB%D1%8E%D1%87

> не требующий доделки, доводки, настройки; в полностью готовом к немедленной эксплуатации состоянии

>>1072407

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

>>1072366

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

>>1072070

Решено верно.

>>1071905

> Сдача https://3v4l.org/LHVOQ

> foreach ($bills as $key => $value) {
Лучше было дать переменным key/value более осмысленные имена (номинал и число купюр).

> while ($key <= $amount){
> $billsForDelivery[$key]++;
Используй деление вместо цикла.

Также, не проверяется наличие нужного набора купюр. Вот например, купюр номиналом 200 нет, а он пишет, что выдать сумму возможно: https://3v4l.org/JX2Hd

Пока что неправильно.

> Лиличка https://3v4l.org/jc4PN

Тут важно предупредить, что в Windows некоторые программы кодируют новую строку как \r\n ( ). Этот символ может испортить расчет длин строк и вывод текста, потому для надежности можно его удалять, или делать разбиение по выражению \r?\n

> preg_split('/\n/',
Можно было просто explode использовать

Найти макс. длину строки может быть удобнее через max() и array_map(), сможешь?

А так, работает верно.

> Считалка https://3v4l.org/dDAaI

> for($j = $numberLeft; $j < $total; $j++){
> $positions[$j] = $positions[$j+1];
Удаление элемента удобнее делать через array_slice.

> if ($total - $numberLeft < $skip - 1){
> $numberLeft = $skip - ($total - $numberLeft) - 1;
> } else {
Для того, чтобы увеличивать число с возвратом к числу 1, удобнее использовать оператор % - деление с остатком, только придется считать номера с 0.

> $total--;
Вместо этой переменной можно было использовать count().

Так, работает верно.

> Алфавит https://3v4l.org/d5PAs

> $letters = preg_split("//u", $phrase);
там надо добавлять флаг PREG_SPLIT_NO_EMPTY, а то в массив добавляются 2 пустых элемента с краев. Видимо по этой причине тебе пришлось в $i <= $phraseLength; написать <= вместо <.

> for ($y = 0; $y < $height; $y++){
> $screen[$y] = array_fill(0, 150, ' ');
Можно было 2 раза использовать array_fill вместо цикла.

> $coordinateYOfLetter
Лучше $letterX

> foreach ($value as $a) {
> echo $a;
Можно было использовать implode.

Так, работает верно.

> Навигатор https://3v4l.org/75dUN

> $paths[$startPoint][1][0] = 0;
А что значит [1][0] ? Что-то я не очень понимаю. Ты зря в справочник расстояний добавляешь какие-то странные элементы, лучше было сделать отдельный массив для хранения времени до точки.

> foreach ($paths as $key => &$value) {
Тут надо помнить, что после окончания цикла переменная $value продолжает указывать на последний элемент массива и команда $value = 1 запишет туда единицу например. И цикл foreach ($x as $value) тоже запишет значение по ссылке.

Это вроде бы описано в мануале.

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

> if ($value2 == $key){
> continue 2;
А тут не просто continue должно быть?

Вместо key и value лучше было выбрать более понятные имена.

Часть кода можно было вынести в функции, например, поиск ближайшей к текущей точки, ради повышения читабельности кода.
Ответы: >>1074474
Аноним 2017/10/12 00:48:58  №1074291 488
>>1071465

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

>>1071847

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

>>1071671

[abc] - один любой символ из набора a, b, c
[a-d] - любой символ от a до d
[a-fmn] - любой символ от a до f, или m или n

>>1071608

В один проход наверно никак.

>>1071615

Основы то изучить нетрудно, и learn.javascript.ru пройти. не будешь же за каждой правкой бегать к верстальщику.

>>1071513

> В элементе adr::before когда я ставлю ему контент иконки, он перестает быть inline-block элементом,
Лучше сделать ::before просто блоком или абсолютно позиционированным относительно колонки блоком. В контент поставить пустую строку. Задать размеры. Поставить картинку как фоновую.

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

>>1071463

> ни в какую не хочет расширяться в fit-content,
Зачем его использовать, он пока толком нигде не поддерживается.

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

>>1074209

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

Аноним 2017/10/12 01:25:52  №1074307 489
>>1074042
Нет. Я даже не знаю о такой.
Ответы: >>1074308
Аноним 2017/10/12 01:28:36  №1074308 490
>>1074307

Кодировка выбирается в настройках редактора или при сохранении. Нужно выбирать utf-8 without BOM.
Аноним 2017/10/12 01:32:14  №1074310 491
А важны ли знания о основах информатики, её истории, меры Шеннона всякие, архитектура ЭВМ и так далее для?
Аноним 2017/10/12 03:13:54  №1074329 492
>>1073789
Сделал задачу на функцию счетчик:
https://ideone.com/ADY3k4
Правильно? Алсо, лучей добра за объяснение.
Ответы: >>1074332
Аноним 2017/10/12 04:40:37  №1074332 493
>>1074329

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

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

$c1 = createCounter(3);
echo $c1(); // 3

если значение не передано, то оно равняется 1.
Ответы: >>1074689
Аноним 2017/10/12 04:57:21  №1074333 494
Аноним 2017/10/12 09:22:07  №1074361 495
>>1074284
>Соответственно, будешь ты использовать аякс или нет - с MVC никак не связано, так как MVC применяется в данном случае для описания только кода на сервере.
Спасибо, стало понятнее.
Аноним 2017/10/12 12:35:14  №1074425 496
Делал раньше файлообменник на слиме, но потом в силу обстоятельств забил на полгода и вот теперь опять возвращаюсь, но теперь решил писать его на Йии. Пока читаю документацию, полет нормальный. Только подскажите, на какие классы стоит обратить внимание для решения задачки? Их дохуя чет, а я пока знаю только стандартные фичи с контроллерами, ну там построение форм и валидацию, этив реворд, ну ты понел.
Ответы: >>1080118
Аноним 2017/10/12 13:26:20  №1074436 497
Привет, котоны. У меня печаль. Пишу на Laravel 5.5 и использую валидатор для проверки ввода. Валидатор отрабатывает, но сообщений об ошибках нет. Переменная $errors всегда пустая. Почему так происходит?
Ответы: >>1074518
Аноним 2017/10/12 14:31:29  №1074464 498
Не знаю где спросить кроме вас. В оьбщем нужен дешовый хостинг с PHP7.0 или 7.1, хостился на Godaddy но они за следующий год запросили аж 20 тыщь. Хотя у меня весь сайт это 500 посетителей и метров 50 сам сай с БД. Денег сайт не приносит, а вот вваливать в него так много я не собираюсь. Может знает кто что?
Ответы: >>1074476 >>1080118
Аноним 2017/10/12 14:38:52  №1074468 499
Laravel: Up and Running: A Framework for Building Modern PHP Apps от O'Reilly где можно скачать бесплатно и без смс?
Ответы: >>1074487
Аноним 2017/10/12 14:50:01  №1074474 500
>>1074289
>Если тебе лень лазать по коду, значит в следующий раз ты просто не сможешь решить проблему.
ох уж эти программисты, так заботятся обо мне, вместо того, чтобы просто ответить
Ответы: >>1080118
Аноним 2017/10/12 14:50:29  №1074476 501
>>1074464
Виртуальный хостинг
Аноним 2017/10/12 15:15:43  №1074487 502
>>1074468
>где можно скачать бесплатно и без смс?
Мы в этом итт треде против пиратства и за интеллектуальную собственность. Лучше конечно купить. Но вдруг ты гол как сокол в жерновах вечного постсовкового кризиса? Что ж тебе теперь книжек не читать?
gen.lib.rus.ec
Аноним 2017/10/12 16:27:05  №1074513 503
login.png (10, 353x166)
166x353
Yii2
Как регистрировать пользователей через бд я осилил. И они даже потом могут залогиниться. Но стоит нажать на любую другую ссылку, логин пропадает.

Возможно это от того, что при логине меняется PHPSESSID. До логина там одно значение, а после - другое. Нагуглил только, что Yii::$app->user->login($this->getUser() изменяет куку и это нормально. Но в дефолтном примере всё то же самое и работает нормально. Юзер один раз логинится и его логин весит, не отваливаясь.
Ответы: >>1080118
Аноним 2017/10/12 16:38:38  №1074518 504
Аноним 2017/10/12 19:23:26  №1074580 505
Решаю задачки опа на ЖС и проблема! Помогите разобраться.
Вот собственно задача http://dkab.github.io/jasmine-tests/?spec=4
А вот мое неправильное решение:

function fmap(a, gen) {
return function b() {
c = a(gen(arguments[0],arguments[1]));
return c;
}
}
В задании говорится чтобы нужно чтобы gen принимала любое количество аргументов. А я вот не знаю как это сделать. Конечно можно туда тупо передавать массив со всеми аргументами. Но дело в том что функция ген принимает в качестве аргументов два числа. Я конечно бы мог просто переписать этот ген. Но вроде как нужно написать все в этой функции.
Ответы: >>1074589
Аноним 2017/10/12 19:40:38  №1074589 506
>>1074580

Погугли Function.prototype.call и Function.prototype.apply.

Функции в JS это объекты и у них есть прототип с несколькими полезными методами.
Ответы: >>1074645
Аноним 2017/10/12 21:43:27  №1074645 507
>>1074589
что-то я не понимаю как это работает совсем. Прочитал несколько статей и все равно. Какая-то каша фаршу. Может есть какое-то более доступное объяснение?
Ответы: >>1074647
Аноним 2017/10/12 21:48:53  №1074647 508
>>1074645

А тут читал?

- https://learn.javascript.ru/call-apply
- https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

Вот пример:

function f(a, b) { ... }
var context = {};

f.call(context, 100, 200); // вызывает f, передавая ей this = context, a = 100, b = 200

f.apply(context, [100, 200]); // вызывает f, передавая ей this = context, a = 100, b = 200

Вместо context можно передавать null, тогда this будет указывать на глобальный объект (window в браузере, global в Node.JS).

Что именно непонятно? Или тебе непонятны объекты, методы и прототипы?
Ответы: >>1074659
Аноним 2017/10/12 22:07:58  №1074659 509
>>1074647
Непонятно например как функции это объекты.
Да я понял уже что рано залез в задачи. Пошел читать learn.javascript.ru. Просто я не думал что настолько все сложно для меня будет.
Ответы: >>1074661
Аноним 2017/10/12 22:13:19  №1074661 510
>>1074659

Ну не бойся, поначалу там действительно сложно, особенно если ты учился по учебникам, которые обошли эти моменты стороной. Но разобраться в этом можно. Яваскрипт не очень сложный язык. Так что читай learn.javascript.ru и решай задачи как только поймешь, что можешь решить.

> например как функции это объекты.

Ну это особенность языка (довольно удобная), что функции это еще и объекты. То есть когда ты объявляешь функцию, создается объект с прототипом Function. Соответственно, если ты пишешь f() то происходит вызов функции, а если f.x или f.x() то происходит обращение к свойству или методу объекта.

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

Когда ты разберешься, ты увидишь, что это само по себе очень разумно и удобно сделано.
Ответы: >>1074669
Аноним 2017/10/12 22:26:46  №1074669 511
>>1074661
Спасибо за поддержку друг!
Аноним 2017/10/12 23:09:02  №1074689 512
>>1074332
>Ну или хотя нет, давай тогда изменим задание. В функцию createCounter() должно передаваться начальное значение счетчика, например:
$c1 = createCounter(3);
echo $c1(); // 3
если значение не передано, то оно равняется 1.
Переделал с новым условием:
https://ideone.com/rATnXa

Ответы: >>1074692
Аноним 2017/10/12 23:21:44  №1074692 513
>>1074689

Решено верно. Надеюсь, ты теперь лучше понимаешь анонимные функции.
https://github.com/vadimyen/students Аноним 2017/10/13 00:56:59  №1074717 514
>>1066512
>>1072015

> `gender` tinyint(1) NOT NULL COMMENT '0 - male, 1 - female',
Тут можно было использовать ENUM 'male', 'female', а в коде для пола прописать константы.

> ADD KEY `gender` (`gender`),
Индексы ускоряют поиск по значению поля, но на поля вроде gender, где по одному значению выбирается полтаблицы или больше, их ставить особого смысла нет (это мельком упомянуто например тут https://ruhighload.com/post/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+%D1%81+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D0%BC%D0%B8+%D0%B2+MySQL в пункте про селективность).

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

> extract ($router->getController());
Я не уверен, что хорошая идея так писать, так как непонятно, в какие переменные будет записан результат. По моему опыту, удобно писать либо так:

list($controller, $method) = someFunc();

либо так:

$result = someFunc();
echo $result['controller'];

либо может так:

$result = someFunc();
echo $result->controller;

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

> echo "<b>Искоючение:</b> ", $exception->__toString();
Это хорошо бы отключать на продакшене - например, используя ini-параметр display_errors.

Что касается функций, в принципе никакого запрета использовать функции нет (даже без неймспейсов). Но по моему это неудобно, так как для функций нет автозагрузки и тебе надо вручную их все инклудить. Вдобавок, нет стандарта для выбора имени таких файлов (можешь написать предложение в PSR, если есть идеи). Удобнее просто сделать их статическими методами в классе HtmlUtil например (паттерн utility class). Вроде как у тебя даже это сделано.

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

Что касается констант, удобнее не использовать глобальные константы, а отнести их к какому-то классу. Хотя в общем-то ничего против глобальных констант не имею. Ну и если что, их можно тоже в неймспейсы класть \PageType\HOME или добавить префикс: PAGE_TYPE_HOME. А то не очень понятно, что они обозначают.

> https://github.com/vadimyen/students/blob/master/app/Router.php
Тут лучше передавать URI снаружи, а не делать, чтобы роутер сам его откуда-то магически получал. Будет логичнее: на вход получаем URL, на выходе даем параметры контроллера.

Также, твой роутер имеет недостатки, что одному действию может соответствовать несколько URL:

/, /Index, /Index/, /Index/index

Это плохо для поисковой оптимизации да и не очень логично.

В этом файле съехали отступы https://github.com/vadimyen/students/blob/master/app/Router.php из-за смешивания табов и пробелов. В PSR рекомендуют использовать 4 пробела для отступа, настрой свой редактор.

Далее, ты используешь PHP7, значит используй его возможности и ставь тайп-хинты на string/int/bool, а также тайп-хинты для возвращаемых значений. Это документирует твой код и защищает от ошибок.

В контейнер обычно кладут объекты без состояния, которые можно смело выдать нескольким потребителям и с которыми ничего не случится. Объект Security у тебя имеет состояние, а значит, он должен каждый раз создаваться заново через new либо при выдаче из контейнера (в Pimple такое возможно, смотри factory). Вообще, к сожалению, даже в Симфони можно увидеть несоблюдение этого приципа - они там кладут в контейнер объекты вроде Request, User, итд. Но это плохо по нескольким причинам:

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

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

> } catch (SException $e) {
> die("<b>There's some trouble with your cookie: </b>" . $e->__toString());
не нужно тут ловить исключение, есть же глобальный обработчик. Ну и кривые куки наверно проще игнорировать, чем выдавать ошибку. Пользователь-то что с этим сделает?

https://github.com/vadimyen/students/blob/master/app/Helper/Pager.php
Валидацию параметров лучше наверно делать в контроллере, а не в пагинаторе.

> public function renderPaginator()
Это наверно лучше было бы сделать отдельным шаблоном, а не тащить HTML код в PHP-код.

> private function generateURL($params) {
Функция называется generateUrl, но на деле генерирует только query string.

> public function logIn(Student $student)
> {
> $student->setCookie($this->generateHash(32));
Тут функция не проверяет, что у студента может быть уже есть хеш. может это загруженный из БД студент. У тебя тут неявно заложено, что она должна вызываться в определенной ситуации (до вставуки студента в БД), это очень ненадежно, нет никаких гарантий что функция будет использоваться именно так.

Я бы советовал тогда сделать по-другому, например:

- генерировать хеш при вставке в БД
- или вообще сделать метод регистрации, который и хеш с генерирует, и куки выставит

> public function logout(Student $student)
Справедливости ради, для разлогинивания студент в принципе не нужен

Проверку CSRF наверно стоило отделить от авторизации в отдельный класс. У них ведь ничего общего нет, и твой класс Security выглядит как 2 склеенных вместе класса.

> PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, Student::class, array_fill(0, 8, null)
Ага, вот ты и понял, что PDO не очень удобен для заполнения объектов.

https://github.com/vadimyen/students/blob/master/app/Mapper/StudentMapper.php#L70
Тут нет проверки переменных $field, $direction, получается SQL инъекция

> if (isset($pattern)) {
isset проверяет переменную на существование, лучше писать !is_null или !== null, чтобы яснее были видны намерения.

> public function getStudentsWithPagination(
> public function getStudents
Их можно было бы объединить в одну функцию, добавив для $limit значение 0 или \INF

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

https://github.com/vadimyen/students/blob/master/app/Entity/Student.php#L24
конструктор с таким числом аргументов неудобен: легко перепутать их порядок, и неудобно создавать объекты. Лучше либо убрать их вообще, либо предусмотреть возможность передачи массива.

> public function __toString ()
Хочу предупредить, что из-за неявного преобразования в строку можно сразу не заметить ошибку. Ну например, ты думаешь, что в $student лежит id, а там лежит объект. И пытаешься использовать его так:

$query .= " WHERE id = $student ";

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

> if (filter_var($student->getGender(), FILTER_VALIDATE_INT, ["options" => ["min_range" => 0, "max_range" => 1]]) === false) {
Тут по моему проще in_array было использовать.

Также, в мануале по filter_var написано:

> Возвращает отфильтрованные данные или FALSE, если фильтрация завершилась неудачей.

Это ничего, что ты не используешь возвращаемое значение кроме как для проверки на false?

Ответы: >>1076338
https://github.com/vadimyen/students Аноним 2017/10/13 00:57:33  №1074718 515
>>1066512
>>1072015

https://github.com/vadimyen/students/blob/master/app/View/index/index.php#L1
> <?php extract($params); ?>
Это лучше наверно было сделать в методе render()

> <a href="/?<?=$pager->getSortingLink('firstName')?>">
Если строго говорить, то тут данные должны тоже экранироваться. Что, если там кавычка или знак &?

https://github.com/vadimyen/students/blob/master/app/View/index/index.php#L31
> <?php if(isset($students)) :
Вот это мне не нравится, что переменная может быть, а может не быть. Как тогда код писат надежно в таких условиях?

https://github.com/vadimyen/students/blob/master/app/View/profile/index.php#L4
Вот этот use тут - плохо. Надо хотя бы переместить его в самый верх файла.

> echo "<li>{$value}</li>";
echo не используют в шаблонах, данные нужно экранировать.

> required=""
Можно просто required

> value="<?=isset($user) ? html($user->getFirstName()) : ""?>
Вот опять же, isset тут плохо. Лучше создать пустой объект.

https://github.com/vadimyen/students/blob/master/app/Controller/ProfileController.php#L30
> try {
> $this->isSubmitted();
> } catch(SException $e) {
> header('Location: /profile');
> exit();
> }
Вот это странно смотрится, почему метод с названием isSubmitted выбрасывает исключение? Не лучше ли было бы сделать if (!$this->isSubmitAllowed()) ... ? Ну и редиректить молча тоже нехорошо, надо хотя бы в URL код ошибки добавить или страницу ошибки показать.

https://github.com/vadimyen/students/blob/master/app/Controller/ProfileController.php#L61
> private function getProcessedData() {
Не лучше сразу заполнить объект Student вместо передачи туда-сюда массивов?

> if ($isNew) {
> $student = new Student(...$args);
Очень неудачно так как этот код полагается на то, что переменные в getProcessedData() идут в том де порядке, что и в конструкторе, это нигде не документировано и сломается при первой же правке.

Лучше сделать так:

- обработку GET и POST сделать в одном методе
- алгоритм примерно такой:


Если (юзер залогинен) {
$user = загрузить данные из БД ;
} иначе {
$user = пустой объект;
}

Если (форма отправлена) {
обновить $user значениями из POST;
}

...


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

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

Так, в общем сделано неплохо. Подправить код и будет совсем хорошо.

Не знаю, думал еще предложить тебе сделать тесты, но наверно это будет рановато и может быть их лучше сделать к следующей задаче.
Ответы: >>1076338
Аноним 2017/10/13 12:50:43  №1074848 516
Ответы: >>1082512
Аноним 2017/10/13 14:01:00  №1074880 517
14682181844860.jpg (67, 800x515)
515x800
>>1067944 (OP)
Привет.
Сверстал макет, понимаю html+css, основы php, отличу get от post, базовые знания ООП, что делать дальше не знаю, в интернетах нет толковых книг по php+sql с хорошими практическими задачками вроде тех которые в ОП посте. Вот по блядскому питону миллиарды книг на торрентах, по парсингу, хуярсингу, графике и проч.
Просмотрел курс Русакова, вполне сносно, вкратце поясняет и дает задачки, в отличии от СПЕЦЫАЛИСТА где за 15 часов поясняют что такое условия иф елсе и циклы.
Вроде как пхп один из самых "хайповых" языков, а путных книг вовсе нет, книг которые дали бы сильную базу от А до Я.
Короче хуй знает что со всеми этими знаниями делать, база есть, идей нет.
Чем занимаюсь сейчас? Читаю книжку по ООП и учу SQL, нахуя? Сам не знаю.
Ответы: >>1075042 >>1080119
Аноним 2017/10/13 15:11:00  №1074933 518
>>1074036
То есть, всё же, считывать нажатие на кнопку не контроллером, а js-скриптом - это правильно? Но я тогда не понимаю, как это согласуется с моделью MVC. Не претендует ли скрипт на роль второго контроллера?
ОМГ, что у тебя за каша в голове? Тебе надо подучить матчасть. Контроллер ничего не считывает, он принимает запрос от клиента и ему пофиг каким образом этот запрос на стороне клиента был сформирован, через жс, напрямую формой в браузере отправлено либо через какой-нибудь Postman вручную созданный запрос. Его задача принять запрос и обработать его - все. Бэкенд никак твой фронтэнд не считывает и ему по большому счету плевать, что у тебя на фронте (ну, если только это не какой-нибудь говно-мутант типа C# WebForm, но оно тебе не надо). Модель MVC это вообще про другое. Скрипт может быть контроллером, т.к. во фронтенде тоже можно реализовать тот же MVC - гугли про фронт энд фреймворки.
Но перед этим сначала возьми и перечитай книги по пыхе заново, чтобы базовые знания в мозгах появились. Пока их там нет, отсюда и все твои проблемы с непониманием того как надо и как не надо.
Аноним 2017/10/13 17:35:45  №1075042 519
>>1074880
На кодеварс есть сложные задачи по всем языкам.
Аноним 2017/10/13 21:50:37  №1075151 520
[a-z](0-9){3}[a-z]

Рег. выражение на проверку авт. номеров верное?
На regex101 оно никак не выделяет примеры.
Ответы: >>1080119
Аноним 2017/10/13 22:02:24  №1075159 521
Ответы: >>1075168 >>1075173
Аноним 2017/10/13 22:15:07  №1075168 522
>>1075159
как-то много условий есть же if-elseif-elseif....else
Ответы: >>1075173
Аноним 2017/10/13 22:20:00  №1075173 523
>>1075159
пофиксил скобочку на квадратную у тебя в регулярках и все сработало
https://ideone.com/I7zfCZ

мимо>>1075168 который сам в регулярках запутался немного
Ответы: >>1075185
Аноним 2017/10/13 22:20:22  №1075174 524
Пацаны расскажите про функции в ЖС, которые используют в сортировке.
Типа arr = ["хуе","моё","залупа","якорь"];
function fn(a,b){
return a-b;
}
arr.sort(fn());
залупа,моё,хуе, якорь
Как оно сортирует? Расскажите пожалуйста.
Ответы: >>1075260 >>1075262
Аноним 2017/10/13 22:28:12  №1075185 525
Ответы: >>1075195
Аноним 2017/10/13 22:34:08  №1075192 526
Кто-то пользовался amazon s3? Расценки я видел, но не особо представляю сколько денег за месяц может уйти. Расскажите про подводные камни тоже. К примеру если мне надо будет сменить IP - будут ли сложности?
Аноним 2017/10/13 22:36:20  №1075195 527
>>1075185
посмотрел твои ифы. это можно сделать через подборку элементов массива с помощью команды foreach. Быстренько написал, но должно быть понятно. https://ideone.com/NIcPaE.

>не выделяет
Вроде работает, но я сам этим сайтом не пользуюсь пока поэтому весь функционал не знаю: https://regex101.com/r/oHw9aW/1
Ответы: >>1075197
Аноним 2017/10/13 22:36:59  №1075197 528
Аноним 2017/10/13 23:02:59  №1075214 529
Не могу понять как задать регулярку выбора или +7 ( и семь и плюс идут вместе) или только 8. Может кто-то подсказать? Спасибо!
Ответы: >>1075378
Аноним 2017/10/13 23:39:58  №1075232 530
14606535901550.jpg (111, 648x864)
864x648
ОП! Хочу выразить огромную благодарность тебе за старания, железную выдержку и терпеливое отношение к новичкам! Устроился без опыта работы с дропнутой вышкой джуном на 700$ в мухосрани, сейчас 20 лет, помню как начинал в 18 знакомиться с программированием по твоим анимешным урокам, помню радость от первого работающего скрипта с "искусcтвенным интеллектом", бросающим кубик (отсюда и ник на гитхабе), помню как несколько дней ломал голову над циклами и задачей про рост анона. С тех пор прорешал кучу задачек в треде, сейчас работаю с Symfony/Laravel (уже третий месяц).
Самыми полезными я считаю ревью ООП задач. Интересно, что тут много анонов несправедливо считают все эти задачи абстрактными и оторванными от реальности. А я решал их все + скидки и калькулятор с поддержкой чисел произвольной длины и скажу следующее: советы ОПа научили меня прагматичному и осторожному подходу к выделению абстракций, избавили от догматизма в отношении паттернов (теперь для меня паттерн - это прежде всего идея, а не диаграмма классов). Юнит-тесты помогли лучше понять DI и инкапсуляцию. Думаю, эти концепции более масштабируемы и универсальны, чем любые фреймворки. Этот фундамент позволяет сейчас без особого труда читать исходники фреймворков. Очень жизненными оказались задачи на SQL и JS.
Так что ОП учит правильными вещам за что ему ещё раз большое спасибо!
Ответы: