Сохранен 856
https://2ch.hk/pr/res/1109863.html
Домены arhivach.top и arhivach.site временно не функционируют! Используйте домен ARHIVACH.XYZ.
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Клуб изучающих PHP и webdev, #97

 Аноним 20/12/17 Срд 10:40:46 #1 №1109863 
php-noob-01-new-year.png
cat-cafe-osaka.jpg
ake-ome-2018-2.jpg
happy-new-year-2016.jpg
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

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

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

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

Предыдущий тред был тут: >>1097438 (OP). Остальные треды есть в архиве: http://phpclub.tech/ или ищутся в гугле по словам "клуб изучающих 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? — Да, однозначно. Посмотри любую вакансию.
Важно Аноним 20/12/17 Срд 10:42:00 #2 №1109864 
grammar-nazi.png
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на 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
Аноним 20/12/17 Срд 10:42:45 #3 №1109865 
Если вы писали вопрос в старом треде >>1097438 (OP) - зайдите, проверьте, может на него есть ответ. Если нет, напомните о себе в этом треде.
Аноним 20/12/17 Срд 13:22:27 #4 №1109947 
друзья, подскажите в таком вот вопросе по проектированию БД. в кач-ве БД планирую использовать постгрес. есть идея реализовать приложение типа эверноут, где пользователь вносит заметки, а потом может как-то с ними работать. и вот хочется дать пользователю возможность самому создавать поля в таблице с этими заметками, т.е. чтобы каждый мог запилить свое - допустим, траты за неделю или адреса контор, куда он ходил на собеседования и пометки в чем он обосрался.

и вот я думаю как лучше это сделать. из кажущихся вменяемыми пока придумал только такой вариант (упрощенно): одна таблица custom_columns(id, user_id, type, title) и вторая соответственно custom_columns_values(id, column_id, value) и потом делать запрос типа
select * from custom_columns_values v inner join custom_columns c on v.column_id = c.id where c.user_id = :user что-то такое

есть еще какие-то варианты, как такое сделать?
Аноним 20/12/17 Срд 17:03:09 #5 №1110053 
Ололо, я сделал задание с переводом чисел в пропись часов за пять. В чём суть? Там написано, что оно на несколько дней.
Аноним 20/12/17 Срд 17:47:53 #6 №1110091 
>>1110053

Это чтобы придать тебе уверенности в себе перед задачами на ООП и про студентов, чтобы ты не сдался сразу, прочитав условия.
Аноним 20/12/17 Срд 17:55:01 #7 №1110092 
Прошел весь учебник на народе, что дальше учить? Я просто нихуя не многозадачный, мне что-то одно учить проще. Хтмл с ксс? Яваскрипт? Что надо знать для задачки про студентов с сайтом?
Аноним 20/12/17 Срд 19:04:39 #8 №1110114 
изображение.png
изображение.png
Говнокод или изящное решение?
Аноним 20/12/17 Срд 19:26:55 #9 №1110125 
>>1110114
Как по мне - лютый говнокод. Есть же класс для паботы с ФС, зачем ты велосипед пишешь?! Тем более без try/catch.
Аноним 20/12/17 Срд 19:30:41 #10 №1110128 
>>1110114

Во-первых, нечитаемая колбаса. Ты строчки экономишь? Во-вторых, зачем ты переопределяешь DOCUMENT_ROOT? Это поле, которое заполняет интерпретатор PHP, а не ты.
Аноним 20/12/17 Срд 20:18:12 #11 №1110148 
>>1110114
добавлю к другим ответам, что есть правило "очевидное лучше неочевидного", оно в этих двух строках нарушается несколько раз.
Аноним 20/12/17 Срд 20:30:55 #12 №1110157 
>>1110114
Вообще, изящность решения обычно заключается в его архитектуре, комбинации различных практик, своевременно и правильно примененном паттерне и многом другом, но точно не в компактно написанном куске кода, который по сложности равен сложению двух чисел. Т.е. чтобы оценить изящность решения, это решение должно решать какую-то более-менее серьезную задачу. Считать задачу присвоения строки изящно решенной может только студент, который вчера дочитал книгу "Языкнейм за 21 день".
Но если тебя интересует безотносительно размера задачи, то я бы сказал так - существуй критерии изящности решения, то читабельность и наглядность были бы далеко не последними критериями.
Аноним 20/12/17 Срд 20:48:30 #13 №1110175 
>>1110114
вообще конструкция if-elseif редко подразумевает изящность. есть подозрение, что это троллинг, но в любом случае ознакомься вот с книгой по теме https://github.com/jupeter/clean-code-php
someApprentice 20/12/17 Срд 21:22:29 #14 №1110190 
>>1109863 (OP)
У нас появился https протокол https://phpclub.tech

Менять ссылку в шапке не обязательно, потому что http перенаправиться на https
Аноним 21/12/17 Чтв 10:37:13 #15 №1110308 
>>1109863 (OP)
Анон, у меня задача на забор данных из GET.
Где почитать про манипуляции с GET-ом?
Аноним 21/12/17 Чтв 10:38:06 #16 №1110309 
>>1109863 (OP)
Сап, анончики. Вопрос такой, есть те кто работал с Amiro.CMS?
Аноним 21/12/17 Чтв 12:02:17 #17 №1110334 
>>1110128
этот код в консоли выполняется, а там doc_root неопределён.
>>1110125
> класс для работы с ФС
ща погуглю
> try/catch
как я понял, Exeption выкидывать, если ни первый, ни второй случай не выполнится
Аноним 21/12/17 Чтв 12:19:39 #18 №1110337 
>>1110334

> этот код в консоли выполняется, а там doc_root неопределён.

Логично, это ведь параметры, которые приходят от веб-сервера. Значит, не надо его использовать вообще тогда.
Аноним 21/12/17 Чтв 12:20:46 #19 №1110338 
Screenshot429.png
Screenshot430.png
>>1109863 (OP)
Блэт, аноны. Где я обсераюсь? Чому только с одним сравнивает?
Аноним 21/12/17 Чтв 15:35:51 #20 №1110417 
давно хочу сказать, но забываю.
http://archive-ipq-co.narod.ru/ у меня в последнем хроме в разрешении 1920 на 1080 не жмутся кнопки меню. уменьшаю размер окна до половины стола по ширине и все становится ок
Аноним 21/12/17 Чтв 15:39:22 #21 №1110418 
>>1110417

Спасибо за информацию, потом проверим.
Аноним 21/12/17 Чтв 17:12:41 #22 №1110470 
>>1110338
я может чего-то не понимаю, но где тело foreach в фигурных скобках?
Аноним 21/12/17 Чтв 17:33:26 #23 №1110481 
Программисты, в чем разница указывать строку в '' или ""?
Аноним 21/12/17 Чтв 17:37:36 #24 №1110483 
>>1110481
В интерпритации переменных
Аноним 21/12/17 Чтв 17:42:03 #25 №1110485 
>>1110483
Можешь в двух словах пояснить?
Аноним 21/12/17 Чтв 17:46:15 #26 №1110488 
>>1110485
Ну смотри.
$key = 1;
$str1 = 'Number: $key'; //на выходе ты получишь такую же строку, т.е. Number: $key
$str2 = "Number: $key"; //тут на выходе получишь Number: 1
Аноним 21/12/17 Чтв 17:49:14 #27 №1110490 
>>1110488
Благодарю!
Аноним 21/12/17 Чтв 17:50:53 #28 №1110491 
>>1110483
блядь, хули вы отвечаете как кокетливые девки на вписке. алсо, "интерпретация"

>>1110481
https://secure.php.net/manual/ru/language.types.string.php
>В отличие от синтаксиса двойных кавычек и heredoc, переменные и управляющие последовательности для специальных символов, заключенных в одинарные кавычки, не обрабатываются.

то есть echo "$bar"; выведет значение $bar, а echo '$bar'; выведет дословно название переменной со знаком доллара.

также про внутренности языка тут вот https://habrahabr.ru/company/mailru/blog/318008/ есть про двойные кавычки в php7, ищи по словам "encapsed-строки". если вкартце, в семерке двойные кавычки - уже не такая дорогая операция и можно переставать писать конструкции вида echo $foo . ' blah blah ' . $bar;
Аноним 21/12/17 Чтв 17:51:07 #29 №1110492 
>>1110490
Да не за что, антош :3
Аноним 21/12/17 Чтв 18:29:29 #30 №1110500 
>>1110491
И тебе спасибо!
Аноним 21/12/17 Чтв 18:29:31 #31 №1110501 
>>1110491

Они были недорогой операцией и в PHP5, если только конечно основная суть твоей программы не в выводе миллионов строк текста.
Аноним 21/12/17 Чтв 18:42:18 #32 №1110504 
Поясните вот эту конструкцию if ($handle = fopen($source, 'w')) !== FALSE)

В данном случае у нас сперва вычисляется первое выражение конструкцию if ($handle = fopen($source, 'w')), а потом $handle сравнивается с FALSE?
Аноним 21/12/17 Чтв 18:44:44 #33 №1110505 
>>1110504

Тут ошибка в скобках. Должно быть

if (($handle = fopen(...) !== false)

А вообще, мне такое не нравится и лучше записать это в 2 строчки, вынеся присваивание из if.
Аноним 21/12/17 Чтв 18:45:37 #34 №1110506 
>>1110505

И сам сделал ту же ошибку. Должно быть if (($handle = fopen(...)) !== false)

Вот видите, почему надо писать в 2 строчки.
Аноним 21/12/17 Чтв 18:46:28 #35 №1110507 
>>1110506
Теперь понял, мерси за ответ.
Аноним 21/12/17 Чтв 18:48:43 #36 №1110509 
>>1110367

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

Если ты не доверяешь своим клиентам (почему?) то лучше всего делать не программу, а сервис, который хостится у тебя и который доступен через браузер. Ну или программу с API.
Аноним 21/12/17 Чтв 18:58:49 #37 №1110511 
Посоны, есть задача:
По запросу пользователя формировать несколько xlsx документов, иногда больше 50 за один раз. Потом архивировать и архив отдавать пользователю.
Всё это, безусловно, нужно делать в параллельных потоках иначе ждать можно очень долго.
Как это будете делать в php?
Версия php - 7.1, куда pthreads не завезён.
Аноним 21/12/17 Чтв 19:27:12 #38 №1110524 
google.png
Кстати, хотел похвастаться, в гугле уже довольно давно пикрелейтед. Может, пора текст на "вы" переписать?

В Яндексе вроде раньше тоже так было, но потом у них что-то поменялось. Или, может проблема в недружелюбном https://github.com/robots.txt . Что же, жаль, что пользователи Яндекса не увидят эту статью.
Аноним 21/12/17 Чтв 19:27:45 #39 №1110525 
>>1110511

Нужно использовать менеджер фоновых задач вроде Gearman. Потоки тут никакие не нужны.
Аноним 21/12/17 Чтв 19:40:23 #40 №1110528 
Вопрос по JS
Нужно выполнять некое действие при наведении на линк.
У меня получился вот такой говнокод, как его оптимизировать с использованием циклов или подобного? Линков будет много.
...
<section data-mouseover0> линк </section>
...
<section data-mouseover1> линк </section>
...
скрипты:
var object0 = document.querySelector("[data-mouseover0]");
object0.addEventListener("mouseover", mouseOver0);

var object1 = document.querySelector("[data-mouseover1]");
object1.addEventListener("mouseover", mouseOver1);

function mouseOver0()
{
object0.innerHTML="<h2>Событие mouseover0</h2>"
}


function mouseOver1()
{
object1.innerHTML="<h2>Событие mouseover1</h2>"
}
Аноним 21/12/17 Чтв 19:46:32 #41 №1110529 
>>1110528
http://learn.javascript.ru/event-delegation
Аноним 21/12/17 Чтв 19:47:27 #42 №1110530 
>>1110529
Спасибо.
Аноним 21/12/17 Чтв 20:07:21 #43 №1110537 
>>1110525
а какие есть аналоги у Gearman? я смотрю, там документации нормальной нет, да и наверняка уже что-то новое появилось
Аноним 21/12/17 Чтв 21:28:11 #44 №1110598 
>>1110524
Я считаю, что было бы очень удобно, если бы в репозитории pasta были хотя бы ссылки на гисты про тестхаб, автоматизированное тестирование, задачи на js. Навигация в gist.github.com очень неудобная + PR отправлять нельзя
Аноним 21/12/17 Чтв 22:04:05 #45 №1110632 
v1dfsl1a.lbs.Square-Baby-Elephant---Baba-with-English-Break[...].png
Сап, увидел вы тут запилили новый сайт и решил ещё раз заскочить и выразить респект ОПу и всем хорошим анонам.
Спасибо за помощь в обучение.
Аноним 21/12/17 Чтв 22:06:20 #46 №1110636 
>>1110598

gist это вообще такое временное хранилище. Я их планировал переносить на гитхаб, но руки пока не дошли. Ну и их поисковой выдачи они тогда могут выпасть, увы.
Аноним 22/12/17 Птн 00:37:37 #47 №1110712 
Безымянный.jpg
Почему просвечивает текст с body, как сделать 100% непрозрачность дива?

.hidemenu
{
display:none;
margin-right:-1111px;
background-color: yellow;
Opacity: 1;
z-index 100;
}
Аноним 22/12/17 Птн 01:07:09 #48 №1110722 
>>1110338
>>1110470
Неверный синтаксис
После `foreach` открывай фигурные скобке, после `if(...){$x++;}` закрывай
Конструкция if(...) у тебя должна относиться к циклу
Аноним 22/12/17 Птн 01:14:51 #49 №1110724 
>>1110537
>>1110511
Я бы сделал так: список xlsx-файлов на генерацию храним у клиента в js. На каждый файл создаём ajax-запрос и отправляем серверу, сервер делает xlsx и где-то временно хранит, отвечает юзеру об успешной генерации. На js показываем юзеру прогрессбар, название текущего файла, процент выполнения, etc. Так мы и сервак не перегрузим, и пользователь будет знать, что происходит.
Аноним 22/12/17 Птн 01:27:48 #50 №1110727 
>>1110712
неактуально
Аноним 22/12/17 Птн 02:21:54 #51 №1110741 
Айфон в кредит 1.JPG
Айфон в кредит 2 .JPG
Ребзи, моё решение задачи про айфон в кредит может быть правильным, или это хуйня на постном масле?
Как эту задачу автор решил?
Аноним 22/12/17 Птн 03:07:26 #52 №1110755 
>>1110722
Анон, ты просто спаситель. Благодарю тебя. Я понимал, что foreach и if должны быть связаны, но не понимал, как.
Аноним 22/12/17 Птн 03:48:14 #53 №1110763 
Screenshot555.png
Такой вопрос. Как ОП решил эту задачу? Я просто не понимаю, что должно быть в переменной $answer
сам решил наглым и лютобешенным копипастом с мануала по пхп, но перед этим усердно думал над решением
Аноним 22/12/17 Птн 03:49:54 #54 №1110764 
lol.jpg
Ребят я тут зашел на сайт JavaScript, ищу где, мол, туторы есть или документация (Та что попроще, потому что спецификацию трогать нет смысла пока) и смотрю пишет - Measure your skill with Plural Sight. Ну зашел, смотрю - HTML5 думаю, мол, что!?(Версии обозначать ведь не имеет смысла) Ну ладно, зарегался, начинаю проходить тест из 20 вопросов, а там всего 2-3 вопроса относящиеся к HTML, там либо DOM, какого то хрена JSON, формы конечно и т.д т.е от самого HTML там не много. Я пройдя тест с горелой жепой, я же читаю спецификации вечно, я уже их фанат, вспоминаю строчку от WHATWG - In more length: the term "HTML5" is widely used as a buzzword to refer to modern Web technologies, many of which (though by no means all) are developed at the WHATWG.

Вот так бывает ребятки. Кстати IQ по HTML у меня 120. Думаю изучив JS вместе с прилагательными он повысится до 300.

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

Ладно я свалил верстать, удачного дня кто там проснется.
Аноним 22/12/17 Птн 05:13:52 #55 №1110774 
>>1110763

функция array_rand() возвращает ключ случайного элемента массива (или нескольких элементов, зависит от второго аргумента).
Соответственно, в переменную $random ОП заносит ключ случайного элемента, а в $answer надо засунуть значение этого элемента, например, так:

$answer=$answers[$random];

Ты в твоем варианте по сути сократил код, вынеся конструкцию $answers[$random] прямо в эхо
Аноним 22/12/17 Птн 05:48:47 #56 №1110778 
Решил я значит устроиться в конторку стажёром или джуном после года обучения где я дрочил базу, ООП, паттерны, проектированию бд , правильным практикам учился, сделал пару проектов для себя и закинул на гитхаб. Конторка сама по себе скам, пилят говно на говнодвижках и прочий аутсорс, и вообщем так случилось что мы вам перезвоним.. Я отправил резюме и свой гит профиль, обещали выслать тестовое в итоге забили на меня хуй. Как это понимать, неужели им нужно было сделать сраную визитку на вордпрессе? Просто горит блять. В мухосрани пару подобных контор и все. Фриланс не потяну т.к нужно на галере хотя бы немного посидеть.
Аноним 22/12/17 Птн 05:58:10 #57 №1110779 
howinteresting.jpg
>>1110778
Аноним 22/12/17 Птн 06:42:17 #58 №1110787 
1451390154970.gif
Так объясните всё же, реально ли найти некую удалёнку или фриланс мухосранск-кунам, которые не имеют возможности набраться опыта, работая за спасибо и чуть-чуть доширака?
Что-то уже чёрт знает сколько пытаюсь всё куда-то вкатиться, но пока что безуспешно. Если подумать, возможно, проблема в отсутствии конкретных целей и задач. Но самая очевидная цель — походить по гвоноконторам и устроиться джуном — практически недостижима в мухосранских реалиях. А "планы" уровня "буду чего-то там писать-писать вилкой, выкладывать на гитхаб, а потом, может, какой заказ чудом где урву, и вот так и вкачусь потихоньку", — это, наверное, говно, а не планы...
Аноним 22/12/17 Птн 06:54:18 #59 №1110789 
Принес вам задачу по фану решить.

В суши-шопе есть ассортимент из 10 роллов. Сколько всего можно сетов сосавить из этих ролов, что бы роллы в сете не повторялись? Если по 3 ролла в сете. Если по 4 ролла в сете.

Аноним 22/12/17 Птн 07:17:57 #60 №1110793 
>>1110789
sushi = lambda x : len(list(itertools.combinations(range(10), x)))
Аноним 22/12/17 Птн 07:39:36 #61 №1110795 
>>1110789
Если считать, что ролл ABC == ролл ACB == ролл CAB и т.д., то количество сетов= n!/(k!*(n-k)!), где n – ассортимент роллов, а k – количество роллов в сете.
Таким образом, из 10 роллов можно составить 120 трехролльных сетов или 210 четырёхролльных
Аноним 22/12/17 Птн 07:47:33 #62 №1110796 
>>1110787
Нахуй ты сюда приперся, выблядок? Нахуй нам твое нытье? Чего ты хочешь? Сьеби пожалуйста и не надоедай своими биопроблемами, вон в б дохуя места, иди туда поной.
Аноним 22/12/17 Птн 08:02:21 #63 №1110797 
>>1110778
>>1110787
Уебки, для вас загон свой сделали на этой же доске, хули вы здесь срете? Зарепортил.
Аноним 22/12/17 Птн 09:39:00 #64 №1110808 
Аноны, отговорите https://htmlacademy.ru/intensive/php
за 16к норм план обучения или такие знания можно самому за 2 месяца подтянуть на хорошем уровне?
Сам я учу js и перспектива за полтора месяца получить базу по php+sql меня радует.
Аноним 22/12/17 Птн 10:22:22 #65 №1110826 
>>1110509
Клиентам не доверяю потому что для них будет дешевле нанять студента если потребуется какой-нибудь допил, чем обратиться к разработчику за дополнительную плату. К тому же софт уникальный и шанс прибрать его к рукам и сделать на его основе свой - очень велик. В данный момент одна компания пользуется им в качестве сервиса (сервер располагается у нас), но это только в качестве обкатки. Дальнейшее распространение предполагается в качестве готового продукта в виде собранного устройства с софтом.
Аноним 22/12/17 Птн 10:41:57 #66 №1110833 
Чому?

дерево:

autoload.php
--Namespace
----Class.php
----ClassTwo.php

-Class.php:
Namespace Namespace;

class Class
{
public function __construct()
{
new ClassTwo;
}
}

-ClassTwo.php:
Namespace Namespace;

class ClassTwo {}

-autoload.php:

spl_autoload_extensions('.php');
spl_autoload_register();

$Class = new Namespace\Class;

>Fatal error: spl_autoload(): Class Namespace\ClassTwo could not be loaded in C:\Apache24\htdocs\Programm\Namespace\Class.php on line 7

Если убрать из конструктора создание второго класса, ошибки нет.
Аноним 22/12/17 Птн 10:58:24 #67 №1110838 
>>1110833
Ой всё я довен. Все работает, я просто делал как тут рекомендуют и забыл про то что нахожусь в другой папке из которой инклюдю это всё. (http://php.net/manual/ru/function.include.php#116522)

У меня было:

>require_once . '../autoload.php';

а должно быть

>require_once __DIR__ . '../autoload.php';

Не думал что это так важно.
Аноним 22/12/17 Птн 11:08:26 #68 №1110839 
>>1110789

Это что-то из этого раздела https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D0%BA%D0%B0 , лень искать что именно.
Аноним 22/12/17 Птн 11:12:35 #69 №1110841 
https://pastebin.com/eKERpSQ4
Анон, мне кажется, или я написал калькулятор лучше и проще, чем в учебнике? Сюда можно в теории любые действия вообще добавить, включая степени и синусы-косинусы, надо только регэксп править.
Аноним 22/12/17 Птн 11:15:30 #70 №1110842 
>>1110841
И да, я не юзаю for each, меня в ВУЗе джва года Дельфи и Матлабу учили, привык каждый раз длину массива определять.
Аноним 22/12/17 Птн 11:24:24 #71 №1110843 
>>1110525
>Gearman
Под винду какой-то пердолинг страшный и не факт, что заработает с окружением данного мне сервера.
Есть ли аналоги под винду и версию пхп 7.1?
Аноним 22/12/17 Птн 11:27:38 #72 №1110844 
>>1110774
> в $answer надо засунуть значение этого элемента
> $answers[$random];

Спасибо, что пояснил за это.
Аноним 22/12/17 Птн 11:29:42 #73 №1110846 
>>1110724
Ну, неплохой вариант вроде бы. У меня с клиента отправляется только один запрос с id - по этому id из базы уже выбираются id зависимых сущностей (те самые 50) и к базе уже идут запросы на выборку данных по этим id и после уже формируются файлы.
Получается мне нужно вернуть на клиент эти 50 id. Не очень красиво, конечно.
Аноним 22/12/17 Птн 12:02:56 #74 №1110875 
Как передать post запрос по линку?
Аноним 22/12/17 Птн 12:26:32 #75 №1110889 
>>1110843
поддерживаю вопрос. Герман вроде как уже не особо поддерживаемый продукт
Аноним 22/12/17 Птн 12:28:42 #76 №1110890 
>>1110826
>о продукта в виде собранного устройства с софтом.
вообще странно, что вы сначала разработали продукт, а потом задумались о его защите.

так-то в твоем случае нормальный вариант один - saas. тем более ты говоришь, что этот вариант у вас уже работоспособен
Аноним 22/12/17 Птн 12:47:05 #77 №1110906 
>>1110841
рассказывать, что ты там козырный тип в вузе лучше после того, как ты решил задачу правильно, а велосипедно-костыльными методами в стиле php4. твое отличие от "обычного" решения в том, что ты применил регулярки и зачем-то сам считаешь индексы у массивов. оба решения неудачные, т.к. повышают вероятность ошибок при усложнении программы.

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

for ($i = 0; $i < count($znaki); $i++) объясни, в чем плюс такого подхода перед foreach? попробуй по приколу написать тесты или замерить скорость выполнения в цикле из 1000 запросов для такого решения и нормального foreach
Аноним 22/12/17 Птн 12:51:13 #78 №1110914 
>>1110906
>повышают вероятность ошибок при усложнении программы.
Так вообще про любой код сказать можно. Не понимат как программировать калькулятор так чтобы потом из него СУБД для заказчика сделать.
мимокрокодил.
Аноним 22/12/17 Птн 13:05:36 #79 №1110926 
>>1110914
не нужно делать СУБД, просто допустим добавить еще 4 действия, которые являются более сложными, чем арифметические (которые не выполнить внутренними функциями языка).

есть такой принцип https://en.wikipedia.org/wiki/Open/closed_principle говорящий о том, что для добавления нового функционала в хорошо спроектированном приложении нужно будет дописывать новые методы и классы, а не менять (или по минимуму менять) существующие. понятно, что калькулятор - это не "приложение", а просто задачка на основы языка, но нужно хотя бы следовать принципу наименьшего удивления и стремиться к читаемости кода, а вынос логики программы в регулярку не добавляет читаемости (пример как повысить читаемость регулярки, кстати: https://github.com/jupeter/clean-code-php#use-searchable-names-part-2)
Аноним 22/12/17 Птн 13:06:46 #80 №1110929 
>>1110926
фикс https://github.com/jupeter/clean-code-php#use-searchable-names-part-2
Аноним 22/12/17 Птн 13:23:04 #81 №1110943 
>>1110890
Да сначала вообще не предполагалось так все развивать. Просто выполнили один заказ. С энтузиазмом. Настолько с энтузиазмом что решили в свободное время этот проект развивать, и в конечном итоге получился довольно универсальный продукт, у которого нет аналогов. Ну и было решено его продавать так или вместе с монтажом под ключ.
Аноним 22/12/17 Птн 13:34:24 #82 №1110950 
Фестиваль тупых вопросов продолжается.
Есть картинки разного размера, запханные в таблицу из 1 ячейки со стилем, почему они меняют размер?
td
{
height: 300px;
width: 400px;
text-align:center;
}

<table>
<tr>
<td><img class="img-responsive" src="upload/img_<?php echo $row['id_model'];?>.jpg"></td>
</tr>
</table>
Аноним 22/12/17 Птн 13:35:27 #83 №1110952 
>>1110950
в смысле - почему ячейка меняет размер.
Аноним 22/12/17 Птн 13:36:21 #84 №1110954 
>>1110889
Не, под линухи нормально всё. На гитхабе репозиторий активный.
Аноним 22/12/17 Птн 13:58:18 #85 №1110970 
>>1110952
Вообще, чтобы задать таблице фиксированные размеры столбцов используют:
<col width="%">
Аноним 22/12/17 Птн 14:04:43 #86 №1110972 
>>1110950
>img-responsive

класс в студию
Аноним 22/12/17 Птн 14:08:52 #87 №1110975 
>>1110950

Потому что в таблицах по умолчанию height/width задают минимальный, а не точный размер (в спеке это называют preferred width). Меняется каким-то свойством, отключающим подстройку размера.

Где-то тут описано https://www.w3.org/TR/css-tables-3/#width-distribution-algorithm
Аноним 22/12/17 Птн 14:09:56 #88 №1110976 
>>1110970

Нет. col просто задает preferred width, но не окончательное значение. Отключить подстройку размера можно по моему через table-layout: fixed
Аноним 22/12/17 Птн 14:12:21 #89 №1110977 
>>1110833

autoload.php
--Namespace
----Class.php
----ClassTwo.php
--public
----index.php

index.php:

require_once __DIR__ . '/../autoload.php';

Та же ошибка
>Fatal error: spl_autoload(): Class Namespace\ClassTwo could not be loaded in C:\Apache24\htdocs\Programm\Namespace\Class.php on line 7

вопрос открыт, не могу разобраться с этими реквайрами.
Аноним 22/12/17 Птн 14:19:38 #90 №1110982 
>>1110972
Угу, спасибо. Там height: auto; стоял, а я чекнуть дефолтный бустраповский даже не подумал.
Спать пора :-(
Аноним 22/12/17 Птн 14:31:27 #91 №1110985 
>>1110906
>козырный тип
Лол, ни разу, просто мне это кажется проще, чем решение в учебнике. А осваивать и правда легче, я прошёл учебник за две недели, занимаясь на работе в свободное время. Но дальше там ООП, у меня всего несколько семинаров по нему было всего. В моём ВУЗе упор был на вычисление интегралов, численные методу и подобную шнягу, ибо я у мамы инженер потому и решил вкатиться в ит, зарплаты инженеров не радуют, а за бугор перекатываться сложно
>for ($i = 0; $i < count($znaki); $i++) объясни, в чем плюс такого подхода перед foreach
Лично мне это кажется универсальнее, чем for each. Идти по массиву простым циклом - в этом есть унификация некоторая.
>применил регулярки
Это разве плохо? Очень мощный метод работы с текстовыми данными, мне понравился в Дельфи такого не было, например
Аноним 22/12/17 Птн 14:35:55 #92 №1110987 
>>1110975
Че ты несешь блять.
Аноним 22/12/17 Птн 14:40:16 #93 №1110991 
>>1110982
Всмысле там, у тебя не должно быть повторяющихся параметров.
Аноним 22/12/17 Птн 14:43:50 #94 №1110994 
>>1110991
>Всмысле там
Я же писал - дефолтный бустраповский.
>у тебя не должно быть повторяющихся параметров
Не понял? Что мне мешает переписать в последнем подключенном файле стилей параметры предыдущего?
Аноним 22/12/17 Птн 14:47:50 #95 №1110996 
>>1110994
Их не нужно переписывать.
Аноним 22/12/17 Птн 14:51:00 #96 №1110997 
>>1110996
Тебе - не нужно, мне - нужно.
Расскажи, как ты не переписывая стили скроешь инпуты на нужной странице?
Будешь весь файл стилей копировать, менять 1 строчку и подключать?
Аноним 22/12/17 Птн 14:52:11 #97 №1110998 
 .jpg
Ой блять просто пока.
Аноним 22/12/17 Птн 14:57:56 #98 №1111001 
>>1110997
У тебя с семантикой там проблемы короче.
Аноним 22/12/17 Птн 15:05:08 #99 №1111006 
>>1110985
если вкатываешься в айти, то тут есть определенные промышленные стандарты, грубо говоря с таким кодом ты бы не прошел аудит (или не получил бы хорошую оценку от препода).

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

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

вызывать каждый раз count($znaki) невыгодно с т.з. опять же скорости, такие вещи надо сохранять в переменную.

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

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

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

также лучше заменить if elseif на switch case. вместо == НАДО использовать ===. не мешать английские слова с русскими. ну еще [] и форматирования по psr, но это мелочи.

не путать что за массив как называется. почему в znaki[1] лежат цифры и ты им присваиваешь $znaki = $znaki[1] ?

в целом я бы при решении задачи сконцентрировался на читаемости кода. также очень рекомендую книгу https://github.com/jupeter/clean-code-php
Аноним 22/12/17 Птн 15:06:10 #100 №1111008 
>>1111006
>znaki
>Название массива
Мда.
Аноним 22/12/17 Птн 15:07:28 #101 №1111009 
>>1111006
>Clean-Code
Чому вы полагаетесь на чужие мысли? Сами не можете писать код, как в книжках учат? Смысл книжки? Что дает?

Мимокрок >>1111008
Аноним 22/12/17 Птн 15:13:46 #102 №1111013 
Безымянный.jpg
>>1111001
Как скажешь.
Ты лучше расскажи, отчего у меня лишний перенос строки образовался на другой странице?
Стили и код подключаются идентично.
Аноним 22/12/17 Птн 15:19:29 #103 №1111016 
>>1111009
это вопрос из серии "зачем ноты учить, музыка же из души должна идти!1". немного непрогрессивный, так скажем, подход. смысл книжки в том, в чем и смысл всех других книжек - учиться и развиваться.

а смысл чистого кода в том, что ты придешь на собеседование в хорошую контору, а тебе скажут "покажите ваш код". и ты откроешь код, где написано $numberKolonki или что-то подобное, а тебе скажут "спасибо, до свидания". а если пишешь какие-то опенсорс библиотеки с таким вот кодом и вложенными циклами, другие разработчики не будут их дописывать. а следование и понимание bp позволяет работодателю понять, что ты стремишься развиваться, даже если пока ничего серьезного не умеешь.
Аноним 22/12/17 Птн 15:23:12 #104 №1111021 
>>1110997
>>1110994
У тебя задан стиль для всех td элементов, это изначально плохая практика, лучше создавать стили для дефолт-HTML элементов если ты хочешь создать свой дефолт стиль для страницы, и не тот что с крутыми свистульками, а тот, что отобразится даже на Нетскейпе.

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

Такими соображениями руководствуются не просто так, дабы не засрать посыл кода для другого разработчика. Создатели семантики говорят, что нужно для каждого элемента задавать внутренний контекст, его предназначение. Сделать это можно путем добавочного аттрибута который называют классом, он задает свою семантику и сохраняет стиль дабы его можно было пихать куда нибудь еще и таким образом ты создаешь двойной смысл для элемента, например td это ячейка для инфы, а если дать ему класс td__picture-container то любому будет понятно, что это ячейка контейнер для картинки. Клево да? Приходим сюда: http://bem.ru

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

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

>>1111016
Да не я не говорил такого, я спросил про то что зачем читать книжки, когда сами мануалы и книжки орут о том, что нужно соблюдать чистописание, а вам книжки какие то для этого нужны. Говнокодит как правило тот, кто забивает хуй, потому что правильно кодить не получается или опыта не хватает.
Аноним 22/12/17 Птн 15:29:07 #105 №1111024 
>>1111021
С линком проебался.
https://ru.bem.info/
Аноним 22/12/17 Птн 15:30:27 #106 №1111025 
>>1111021
>Да не я не говорил такого, я спросил про то что зачем читать книжки
а. ну именование переменных не транслитом - это простой пример, понятно для этого не надо книгу читать (хотя в целом по именованию тоже много нюансов и умные люди пишут статьи типа http://www.yegor256.com/2015/09/01/redundant-variables-are-evil.html и http://www.yegor256.com/2015/03/09/objects-end-with-er.html).

просто в этой книге описано много хороших кейсов, которые редко очевидны новичкам (и не только новичкам).
Аноним 22/12/17 Птн 15:33:13 #107 №1111027 
>>1111024
Кратко говоря, там почти пересказывают то, что написано на WhatWG, только предлагают удобный способ наименовании дабы код не повторялся и как мне показалось повышает производительность.

Правда на самом WG все расписывают даже для слепых, мол, Всегда юзайте alt! Слепые тоже серфят!
>>1111025
А понял, передается ценный опыт, полезно тогда.
Аноним 22/12/17 Птн 15:36:43 #108 №1111029 
Анон, делаю подключение к БД, с целью получения значений. https://ideone.com/hW7XOc
Есть три строки: id, name, alias.
Где ошибка в запросе?
Аноним 22/12/17 Птн 15:55:46 #109 №1111047 
>>1111021
>У тебя задан стиль для всех td элементов, это изначально плохая практика
Это для конкретной страницы, на которой таблиц скорей всего больше не будет. А если будет - то разделю на классы.
>лучше создавать стили для дефолт-HTML элементов если ты хочешь создать свой дефолт стиль для страницы, и не тот что с крутыми свистульками, а тот, что отобразится даже на Нетскейпе.
Очень много времени занимает верстка.
Я дольше сижу и красоту навожу, чем продумываю и пишу реализацию. А если с нуля делать, так вообще зашиться можно.
>>1111021
>Скинь гит, посмотрю.
Нету гита.
Могу так кинуть, только тут смотреть ну очень неудобно по причине не работающего php.
http://plnkr.co/edit/skqNk6nRalrK5YjxEjbt?p=preview
Скрины выше были сделаны с индекса и продукта, подключаются к ним стили (виднов отвечает за окно логина) и хидер + райт сайд (сам код окна)

Аноним 22/12/17 Птн 16:05:04 #110 №1111049 
>>1110841

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

> for ($i = 0; $i < count($znaki); $i++){
Тут надо использовать foreach так как твой код тяжелее воспринимать и он многословнее.

> $znaki = $znaki[1];
Ты тут используешь одну переменную для разных типов массивов и это сбивает с толку и может быть причиной ошибки. Условно говоря. я вижу там preg_match_all($separ, $calc, $znaki); и думаю, что в $znaki всегда будет результат preg_match_all, а он позже перезаписывается.

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

Желательно не называть переменные транслитом. Не znaki, а tokens или parts.

> if ($actions[$i] == "+"){
> } elseif ($actions[$i] == "-"){
> } elseif ($actions[$i] == "*"){
Не надо копипастить выражение несколько раз, надо завести новую переменную.

И наконец, что, если в выражении есть ошибка? Ну например,

12+z+2=

хорошо бы это обнаруживать.

В использовании preg_match_all, конечно, нет ничего плохого. Еще есть вариант делать preg_split по знакам с флагом PREG_SPLIT_DELIM_CAPTURE и получим последовательность токенов (цифр и знаков).

Аноним 22/12/17 Птн 16:07:59 #111 №1111051 
>>1111029
Ты уверен, что там надо кавычки? Я не знаток msqli, но php.net говорит, что надо делать так
/ Select запросы возвращают результирующий набор /
if ($result = $mysqli->query("SELECT Name FROM City LIMIT 10")) {
printf("Select вернул %d строк.\n", $result->num_rows);
Аноним 22/12/17 Птн 16:14:22 #112 №1111055 
>>1110842

Отвыкай.

>>1110846

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

>>1110875

Из PHP программы? Надо использовать библилотеку-HTTP клиент вроде Guzzle.

Алсо надо ознакомиться с теорией по HTTP https://github.com/codedokode/pasta/blob/master/network/http.md

>>1110914

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

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

Есть такое понятие, как "defensive programming", книга "совершенный код" если тебе хочется разобраться дальше. Есть небольшой сборник советов https://github.com/codedokode/pasta/blob/master/good-code.md

Аноним 22/12/17 Птн 16:19:09 #113 №1111060 
>>1110985

foreach читабельнее, так как содержит меньше знаков. Когда я вижу foreach, я понимаю с 1 взгляда на это слово, что у нас перебор массива. В случае с for, надо распарсить глазами все эти точки с запятой, посмотреть как дальше используется переменная - времени нужно больше (согласен?)

foreach короче.

Ты пишешь, что тебе понятнее for, но может ли быть, что ты просто к нему привык, а к foreach пока нет?

Регулярки это мощный инструмент, спора нет.
Аноним 22/12/17 Птн 16:23:05 #114 №1111065 
>>1111009

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

>>1111047

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

> Это для конкретной страницы, на которой таблиц скорей всего больше не будет.
Выглядит как оправдание нежеланию разбираться в БЭМ.

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


Аноним 22/12/17 Птн 16:31:16 #115 №1111069 
>>1111065
Это хорошо, когда есть свободное время для этого.
А не тогда, когда панически гуглишь, как же реализовать нужное действие.
Аноним 22/12/17 Птн 16:46:12 #116 №1111076 
>>1111065
Все таки мне кажется новичкам в этом деле трудновато рендерить в голове. Ты можешь иметь представление о том что будет, но уже машинальное представление придет с опытом как мне кажется.

мимокрок

--

Учите консоль сука, чем раньше тем лучше, благо я вовремя это понял и то случайно
Аноним 22/12/17 Птн 16:48:31 #117 №1111080 
>>1111055
>А сделал бы фоновую задачу на gearman или аналогичной библиотеке - было бы красиво
>>1110843
Аноним 22/12/17 Птн 18:44:28 #118 №1111135 
у кого-нибудь еще лицензия от шторма слетела?
Аноним 22/12/17 Птн 19:07:56 #119 №1111145 
Так работает. Как. понять. автозагрузку. ?

autoload.php
--Namespace
----Class.php
----ClassTwo.php

-Class.php:
Namespace Namespace;

class Class
{
public function __construct()
{
new ClassTwo;
}
}

-ClassTwo.php:
Namespace Namespace;

class ClassTwo {}

-autoload.php:

//spl_autoload_extensions('.php');
//spl_autoload_register();

require_once __DIR__ . '/Namespace/Class.php';
require_once __DIR__ . '/Namespace/ClassTwo.php';

$Class = new Namespace\Class;
Аноним 23/12/17 Суб 02:20:26 #120 №1111310 
Можно в продакшене нотайс о неопределенной переменной игнорировать? Делаю студентов, и у меня получилось, что в некоторых ситуациях в шаблон может передаться переменная со значением null. Это нормально?
Аноним 23/12/17 Суб 09:46:54 #121 №1111345 
>>1111013
Брейки поубирай.
><span id="_close" onclick="openbox('windowLogin')">Закрыть</span>
<br>
<br>
<br>
линк на восстановление пароля
<br>
линк на регистрацию
Аноним 23/12/17 Суб 09:47:50 #122 №1111346 
>>1111013
Один брейк лишний. *
Аноним 23/12/17 Суб 09:59:47 #123 №1111349 
Безымянный.jpg
>>1111345
>>1111346
Еще варианты?
Аноним 23/12/17 Суб 10:59:10 #124 №1111361 
>>1111310

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

> может передаться переменная со значением null

Ты ничего не путаешь? Переменная со значением null нотиса не вызывает, ошибка именно при обращении к несуществующей переменной.
monolog и security component Аноним 23/12/17 Суб 11:08:38 #125 №1111365 
Вопрос про monolog и security component в silex.

> When a security configuration does not behave as expected, enable logging (with the Monolog extension for instance) as the Security Component logs a lot of interesting information about what it does and why.

Я правильно понял, что волшебной настройки "enable logging" для Security component не существует, и нужно ручками прописывать $logger->info('...') внутри методов внутри классов внутри интересующих компонентов? Или сделать свой EventListner и подписать его на все события security component, который будет писать их в лог?
Аноним 23/12/17 Суб 12:51:53 #126 №1111401 
>>1111349
Кек почему у тебя кнопки в воздухе висят?
Аноним 23/12/17 Суб 13:33:46 #127 №1111420 
>>1111365

Нет, думаю, что надо просто подключить логгирование стандартным способом и Security начнет в него писать.
Аноним 23/12/17 Суб 13:35:18 #128 №1111421 
>>1111349

Приложил бы код на jsfiddle/codepen. Как мы тебе по картинке скажем, что не так?
Аноним 23/12/17 Суб 13:42:02 #129 №1111424 
>>1111421
Настоящие профессионалы смогут. Код слишко интепрайзный чтобы его светить.
Аноним 23/12/17 Суб 13:44:48 #130 №1111426 
>>1111420
Спасибо, действительно, пишет само.
Аноним 23/12/17 Суб 13:46:21 #131 №1111428 
>>1111424

Ок, подождем настоящих профессионалов.
Аноним 23/12/17 Суб 14:13:21 #132 №1111434 
>>1111424
>не может в элементарное css
>код слишком интерпрайзный
докатились
Аноним 23/12/17 Суб 14:14:00 #133 №1111435 
>>1111424
>>1111428
Ору
Аноним 23/12/17 Суб 15:17:53 #134 №1111457 
>>1111450
>php в продакшне не бывает не под линуксом
В смысле? На шиндовс сервер нини, онли линукс?
Аноним 23/12/17 Суб 15:31:08 #135 №1111463 
>>1111457
я ни разу не видел и не слышал, чтобы такое было в реальности. и из моих знакомых никто не видел и не слышал.

в теории может быть, просто это как купить мотоцикл и использовать его в бизнесе для перевозок цемента. где-то может такое и есть, но думаю не от хорошей жизни, а из-за каких-то исторических факторов.
Аноним 23/12/17 Суб 15:35:46 #136 №1111467 
>>1111463
Ну хз. У нас превалируют спермо сервера на работе и я не чураюсь юзать иис в связке с эрэнэр через фастсиджиай. Ничего зазорного в этом не вижу. Работает как надо.
Аноним 23/12/17 Суб 16:20:55 #137 №1111476 
>>1111467
ты в этом вопросе (вопросе винды на проде) явно опытнее, так что поинтересуюсь:
1. что делать, если понадобится сервер очередей? герман или rabbitmq встанут?
2. нет проблем с установкой расширений для php?
3. сфинкс и elasticsearch работают под винду?
4. скрипты по крону запускаете?
5. какая бд?
Аноним 23/12/17 Суб 16:44:56 #138 №1111485 
>>1111476
Ответы на все свои вопросы ты найдешь в гугле. Ибо я не занимался такими вещами какие тебе интересны. Связка эрэнэр и sqlite/mysql работает спокойно, с либами для эрэнэра проблем не было, они все идут скомпилированные. В конфиг пыха просто добавляешь их имя и кладешь либу в стандартную папку. Есть небольшой гемор при работе с иис с чпу т.к. надо ставить доп модуль url rewrite. А при работе под спермой с апачем/энджинкслм таких проблем не встречал. Короче, я думаю гемора не возникнет.

Если уж всякие связки iis+php+mysql позволяют под спермой wordpress/joomla запускать...
Аноним 23/12/17 Суб 17:11:12 #139 №1111491 
>>1111476

Проблемы будут, так как многие расширения, библиотеки никто не тестирует и не разрабатывает под винду.
Аноним 23/12/17 Суб 17:31:38 #140 №1111497 
>>1111476
А зачем нужен Rabbitmq? Да ещё и под виндой. Мимо.
Аноним 23/12/17 Суб 17:58:30 #141 №1111510 
>>1111476
я примерно представляю ответы на эти вопросы, но хотел поинтересоваться у человека, знакомого со стеком.

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

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

>>1111497
для хайлоада. это и был вопрос про мимо или не мимо, т.к. в теории любое публичное приложение может стать хайлоадом однажды.
Аноним 23/12/17 Суб 18:05:49 #142 №1111514 
>>1111510
>Rabbitmq
>Windows
>Хайлоад
kek
Аноним 23/12/17 Суб 18:09:01 #143 №1111515 
>>1111510
Не, я пых сам разворачивал, нам под внутренние цели более чем. Тебе скорее всего лучше под линупсом все делать. Я далек от мира погроммирования (сис одмин я).
Аноним 23/12/17 Суб 21:07:30 #144 №1111565 
>>1111401
>почему у тебя кнопки в воздухе висят?
position: absolute
>>1111421
Вот тут же, ну. Под спойлером >>1111047
Аноним 23/12/17 Суб 21:25:02 #145 №1111571 
>>1111565
Хуясе

<input span id="_enter" ... ></span>

интепрайз, ага.

position: absolute;

Зачем? У тебя стандартнейшие элементы, почему ты не даешь им просто идти друг за дружкой?
Аноним 23/12/17 Суб 21:27:13 #146 №1111572 
>>1111565

position absolute тут плохо годится, он обычно используется для закрепления одного блока относительно другого. Элементы с PA не влияют на раскладку соседних блоков, и потому они плохо подходят для твоей ситуации.
Аноним 23/12/17 Суб 21:36:15 #147 №1111577 
>>1111571
>>интепрайз, ага.
Чини детектор.
>Зачем?
ЧТоб не двигались при изменении размера окна.
>>1111572
>position absolute тут плохо годится
Допустим. Но проблема не в position,а в лишнем переносе строки на ровном месте.
Аноним 23/12/17 Суб 23:10:04 #148 №1111604 
подскажите по проектированию БД.

если у нас в таблице всего два столбца, например order_id и item_id, сочетание которых будет уникально, нужно ли добавлять еще столбец id и делать его первичным ключом или можно в кач-ве первичного ключа задать комбинацию этих двух столбцов?
Аноним 23/12/17 Суб 23:14:24 #149 №1111608 
еще вопрос

есть таблица с товарами, там их айдишки и названия.
планирую добавть таблицу зaказов, где будет айди зaказа и в каждом зaказе должно быть несколько товаров. соответственно для того чтобы соблюсти правила первой нормальной формы, я не могу захуярить несколько айдишек через запятую для одного заказа.
я делаю еще одну таблицу типа ordered_items, где будут поля order_id и item_id. и для одного order_id может быть хоть миллион item_id. а если мне нужно будет запросить данные по зaказу, буду писать запрос типа https://ideone.com/AVv3Y8 (бд - постгрес)

это корректный подход? есть еще какие-то общепринятые варианты?
Аноним 24/12/17 Вск 03:54:07 #150 №1111651 
>>1111577
Какое изменение окна? Я сделал у меня все ровно. Поставь фиксированную ширину и все.
https://greghove.github.io/Test/login.html
Аноним 24/12/17 Вск 05:07:51 #151 №1111655 
Какой приятный тред. Редко захожу на борды, но когда захожу удивляюсь уровню неадеквата в тредах. Но здесь не так. Спасибо всем за создание такой уникальной атмосферы.
Аноним 24/12/17 Вск 05:12:46 #152 №1111657 
>>1111655
Ток держи в секрете. Нам тут вытекших не надо.
Аноним 24/12/17 Вск 09:01:36 #153 №1111682 
Всем привет, я пытаюсь осваивать xpath.
Мне удалось успешно написать правило, которое выделяет посты со ссылками
2ch.hk##:xpath(//div[@class='post-wrapper' and descendant::a[contains(text(), 'http')]])
теперь я пытаюсь написать правило для выделения постов без ссылок. Перепробовал уже около 5 вариантов, не заработал ни один.
Буду благодарен помощи.
Аноним 24/12/17 Вск 14:25:07 #154 №1111750 
изображение.png
Задался вопросом, как узнавать о новых версиях Composer'а своевременно. Твиттера модного у них нет. Можно подписаться на github, но тогда я буду видеть обновления по каждому файлу. А мне нужно только новые релизы видеть. Как быть?
Аноним 24/12/17 Вск 15:25:58 #155 №1111776 
>>1111750
https://twitter.com/seldaek
Я слежу за Jordi Boggiano. Он подспамливает, но умеренно.
Аноним 24/12/17 Вск 15:30:36 #156 №1111781 
Если я в объекте "А", в котором создано соединение с бд, создаю объект "Б" у которого много методов с бд. Мне лучше всего сделать что бы в конструкторе объекта "Б" ему вшивалась бд в его параметры или лучше на каждый его метод, который требует бд, передавать бд?
А если у него пара методов с бд тоже вшивать?
А если у него очень много методов с бд тоже не вшивать?
PHP BCook 24/12/17 Вск 15:35:48 #157 №1111787 
Как реализовать бесконечную рекурсию поиска Основного пользователя у пользователя и если у пользователя нет Основного пользователя вызвать break?
Таблица (id|user_id|main_user_id)
Аноним 24/12/17 Вск 15:45:27 #158 №1111790 
Screenshot442.png
Screenshot443.png
Аноны, как еще можно решить задачку с первого пика? Такое чувство, что есть способ иной.
Аноним 24/12/17 Вск 17:19:37 #159 №1111824 
>>1111790
дублирование - это плохо, можно убрать его:
for($i = 1; $i <= 6; $i++) {
$name = 'word' . $i;
echo array_rand($$name);
if (0 === $i % 3) {
echo "/n";
}
};

можно еще решить с помощью функций или ООП, но ты их скорее всего еще не проходил, так что это потом
Аноним 24/12/17 Вск 17:23:41 #160 №1111825 
>>1111781
если у тебя в контексте вызова объекта всегда одна БД и одни параметры подклюдчения, то передавай в конструктор.
Аноним 24/12/17 Вск 17:26:25 #161 №1111827 
>>1111824
>echo "\n";
Аноним 24/12/17 Вск 19:17:18 #162 №1111861 
>>1111824
Спасибо.

Однако после
"echo array_rand($$name);"
он выписывал лишь значения ключа, а не слова, дописал:

$result = array_rand($$name);
echo $$name[$result];

и заработало как нужно.
Аноним 24/12/17 Вск 19:28:28 #163 №1111862 
Какой фреймворк выбрать для изучения и почему?
Аноним 24/12/17 Вск 20:07:35 #164 №1111881 
>>1111861
это я специально ошибся, чтобы проверить твои способности, лол
Аноним 24/12/17 Вск 20:09:18 #165 №1111884 
>>1111862
если хочешь побыстрее найти работу, yii2. если хочешь серьезных проектов и готов больше заебываться, симфони. ларавел хуй знает в каком случае гыгы
Аноним 25/12/17 Пнд 00:38:37 #166 №1111999 
>>1111884
> хочешь серьезных проектов
> симфони
Это только симфонисты думают что у них проекты серьёзные. На самом деле любой проект симфони можно переписать на любом другом фрэймворке и получится раза в 2 быстрее и производительнее. Вообще не понимаю откуда этот фап на симфони пошёл.
Аноним 25/12/17 Пнд 03:50:55 #167 №1112047 
Сап, ананасы, а есть советы по тому как улучшить читаемость своего кода и вообще по коду?
Я не профи, но знаний на уровне джуна имею, и программирую периодически на PHP уже года 2 как, всё по стандартам из шапки. Думал про себя что довольно хорошо пишу, и даже код написанный год назад могу прочитать и разобраться в нём за 10-15 секунд. Но на днях показал код синьору с опытом овер 9000 лет, и он обоссал код со всех сторон, за кавычки, за переносы строк, даже добавил за обработку событие которое может случиться при ошибке, мол лишний код написал же. И как-то меня это даже демотивировало сильно код писать и вообще как-то двигаться дальше.
Аноним 25/12/17 Пнд 06:55:58 #168 №1112056 
>>1112047
>И как-то меня это даже демотивировало сильно код писать и вообще как-то двигаться дальше.
Думаю он добился чего хотел. Тупо самоутвердился за счет новичка, который подвержен влиянию "авторитетов". То что кто-то пишет на пхп 9000 лет не значит что он делает это хорошо, он может быть тем еще говнописцем со времен пхп 4, и всё что написано не так как ему привычно стало быть == говнокод. Хуй забей и не показывай больше ничего ему. Лучше сюда приноси. А вообще если тебя волнуют кавычки и отступы, то изучи стандарты psr или прочее.
Аноним 25/12/17 Пнд 07:15:49 #169 №1112058 
>>1112056
Спасибо анон. Не так грустно теперь.
Аноним 25/12/17 Пнд 07:41:10 #170 №1112064 
>>1112047
Читай больше хорошего кода и подражай.

Критика синьоров - это нормально. Вполне вероятно, что твой код кошмарен, но ты по неопытности этого не понимаешь. Продолжай работать, копи опыт, сам станешь синьором.
Аноним 25/12/17 Пнд 11:48:08 #171 №1112113 
>>1111604
Не нужно.
>>1111608
Корректный.
Аноним 25/12/17 Пнд 12:58:05 #172 №1112125 
>>1112113
сенкс
>>1112047
https://github.com/jupeter/clean-code-php
покажи конкретно код и его замечания, мы тоже посмотрим и обоссым этого синьора если что
Аноним 25/12/17 Пнд 13:40:39 #173 №1112138 
>>1112047
Я нахуй шлю любого долбоеба который меня пытается как то критиковать, а не помогать исправить.
Аноним 25/12/17 Пнд 13:47:09 #174 №1112144 
>>1112047
Чувак представь что ты маленькая анимешная девочка и тебя обидели мимокрокодилы-долбоебы харчком по твоему песочному замку и сказали мол, это говно, это гавно. А другие типа ОПа сказали тебе, почему это говно, только не харкали.
Аноним 25/12/17 Пнд 20:59:25 #175 №1112319 
>>1109863 (OP)
Так это, посоны, с помощью каких инструментов вы бы решали задачи где требуется распараллеливание процессов ВНЕЗАПНО под виндой?
Под линух есть Gearman. Или может тупо в питон передавать эту задачу? Там вообще никакой ебли с параллельными процессами нет. Эх…
Аноним 25/12/17 Пнд 21:25:10 #176 №1112347 
>>1109863 (OP)
Привет, Опи чан. Хотелось бы спросить, что из себя представляет программист PHP или как ВАС называть. ВЫ дизайнеры? Есть карьерный рост?
Аноним 25/12/17 Пнд 22:15:27 #177 №1112377 
PHPSpotting.png
Benchmark.png
Egil.png
Mice.png
>>1112347
>что из себя представляет программист PHP
Аноним 25/12/17 Пнд 22:22:02 #178 №1112382 
>>1112319
тут недавно обсуждали php на винде, постов 10 назад, только один анон признался, что у него пхп под виндой.

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

https://secure.php.net/manual/en/intro.pthreads.php там перекомпилировать правда надо
>>1112347
толсто
sageАноним 25/12/17 Пнд 22:48:31 #179 №1112401 
>>1112382
>тут недавно обсуждали php на винде, постов 10 назад, только один анон признался, что у него пхп под виндой.
Так я и есть тот анон, лол. Pthreads не подойдут из-за проблем с пхп версии 7.1
Аноним 25/12/17 Пнд 22:48:49 #180 №1112402 
>>1112401
Без сажи, конечно же
Аноним 25/12/17 Пнд 23:49:53 #181 №1112424 
Допустимо ли писать одной строкой, если конструкция очень простая?

if (foo) return bar;
Аноним 26/12/17 Втр 00:02:01 #182 №1112430 
>>1112424
1) Допустимо.
2) Возврат из оператора условия внутри функции может быть запрещён в некоторых языках (но не в похапэ).
Аноним 26/12/17 Втр 00:06:39 #183 №1112431 
>>1112382
>>1112377
>толсто
А если серьезней, но по человечески.
Аноним 26/12/17 Втр 00:08:53 #184 №1112432 
>>1112401
>Так я и есть тот анон, лол. Pthreads не подойдут из-за проблем с пхп версии 7.1
а в чем проблема обновить?
Аноним 26/12/17 Втр 00:15:39 #185 №1112435 
>>1112431
если серьезнее, то пхп программист это либо тоже самое, что любой другой программист для высокоуровневых языков (ооп, куча технологий, много абстракций), либо веб-макака, которая подверстывает и прикручивает шаблоны к вордпрессу или пилит виджеты для битрикса. к сожалению, исторически так сложилось, что язык очень лоялен к говнокоду. но в то же время современный пхп достаточно пиздат для больших приложений и прост для изучения. а еще он очень быстро развивается (развиваться в контексте пхп - это пиздить удачные вещи из других языков)
Аноним 26/12/17 Втр 03:39:56 #186 №1112475 
>>1109863 (OP)
Анон, есть обычный хостинг не выделенный сервер, composera там нет, есть FTP, MySQL и PHP 5.4. Какие фреймворки можно использовать в этом случаешь? Как их ставить, если нет composera?
Аноним 26/12/17 Втр 04:15:08 #187 №1112480 
>>1112435
Сказал бы проще, что так же как и везде есть ленивые хуесосыТипа тебя рождающие стереотипы об хорошем языке, которым все пользуются и не пиздят.
Аноним 26/12/17 Втр 05:45:41 #188 №1112483 
>>1109863 (OP)
Сап. Придумываю механизм сессий.

1. время жизни сессии: 1 час
2.время жизни куки: 1 час
3. привязка сессии к юзер-агенту и ип ххх.ххх.?.?
4. в сессии хранится пароль (не мд5) чтоб когда юзер сменит пароль старая сессия не работала
5. при авторизации генерация нового ид сессии и при смене пароля (без удаления старой)
6. если без авторизации серфишь сессия не запускается
7. если чел вышел или неправильно ввел пароль удаляю ему куки чтоб не грузил мне серв
8. каждые 20 минут генерация нового ид сессии (без удаления старой сессии для предотвращения потери сессии при большом кол-ве запросов)

время выставил для примера. по итогу сессию хуй спиздишь + сервак не засирается файлами сессий.
какие подводные?
Аноним 26/12/17 Втр 05:45:53 #189 №1112484 
>>1112475
>Какие фреймворки можно использовать в этом случаешь?
Те которые поддерживают версию PHP <= 5.4

>Как их ставить, если нет composera?
Перекинуть папку vendor через FTP
Аноним 26/12/17 Втр 05:49:45 #190 №1112485 
>>1112435
Чот стереотип на стереотипе и стереотипом погоняет. Виджеты для битрикса, шаблоны для вордпресс (где там PHP то?).
> пиздить удачные вещи из других языков
Пиздят в основном потому-что всякие нытики заваливают форумы своим нытьём. Потом выясняется что новые функции нужны в 0.00000000001% случаев в 1 проекте, но это можно было сделать и по другому. Просто нытик привык что в жабе так.
Вон, возьми анонимные функции которые в 7.1 добавили. И посмотри где на практике их стали использовать? Да нигде. Только спустя год начали хоть как-то что то делать на них. Но при этом впринципе все кто писал про PHP у себя в блогах упоминали что это ооочень большой недостаток.
Аноним 26/12/17 Втр 05:53:14 #191 №1112486 
>>1112483
p.s. и потери сессии нет. идеально же блять
Аноним 26/12/17 Втр 05:54:13 #192 №1112487 
>>1112483
>3. привязка сессии к юзер-агенту и ип ххх.ххх.?.?
Зачем?

>4. в сессии хранится пароль (не мд5) чтоб когда юзер сменит пароль старая сессия не работала
Лучше уничтожить и хранить все таки мд5

https://secure.php.net/manual/ru/function.session-destroy.php

>5. при авторизации генерация нового ид сессии и при смене пароля (без удаления старой)
Зачем?

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

А сессия - не уверен что она способна нагружать сервер

>8. каждые 20 минут генерация нового ид сессии (без удаления старой сессии для предотвращения потери сессии при большом кол-ве запросов)
Не уверен что сессия может просто взять и потеряться
Аноним 26/12/17 Втр 05:56:03 #193 №1112488 
>>1112485
При этом с С++ также. Возьми 2011 год, когда все ныли про утечки памяти, про небезопысность, про это вот всё. Вышел новый стандарт и... Хоть кто-нибудь использует новые наработки? Нееееет. Давайте будем ковырять говно мамонта.
Аноним 26/12/17 Втр 06:24:33 #194 №1112489 
>>1112484
Анон, спасибо большое. До сих пор к фреймворкам не притрагивался из-за этого.
Аноним 26/12/17 Втр 06:25:48 #195 №1112490 
>>1112487
привязка по айпи не обязательно. люди с мобилок сидят с разных инетов айпи разные. а юзер агент обязательно, чтоб снизить вероятность кражи сессии (сам пиздил уязвимостями, знаю).

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

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

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

потеря сессии:
написано в описании функции session regenerate in с решением из костылей, но попробую объяснить.
допустим у меня хуевый инет 10 кбит/с. обновляю сразу 2 вкладки одного сайта. на одной вкладке мне выписало новую сессию, а другая еще не может отправить запрос на сервер из за пинга 20000, и вот отправила со старой кукой сессией ебать а ее нахуй на сервере нет уже. по итогу на 1 вкладке авторизация есть а на другой нет.

короч, все это паранойя, но делается просто и надежности прибавляет.
Аноним 26/12/17 Втр 06:30:23 #196 №1112491 
>>1112487
вот для чего нужна регенерация при авторизации, один из примеров:
Подмена сессии (Session Fixation)

Для подмены сессии злоумышленнику не нужен идентификатор чужой сессии, достаточно установить идентификатор своей сессии легальному пользователю, прошедшему авторизацию. Логика такого типа атаки противоположна по отношению к краже сессии, но в обоих случаях создается ситуация, при которой злоумышленник и легальный пользователь имеют один и тот же идентификатор сессии.
Аноним 26/12/17 Втр 06:31:51 #197 №1112492 
>>1112491
только в примере неточность есть. если чел прошел авторизацию и ему подменили куки, он что, из аккаунта не вылетит будто?
Аноним 26/12/17 Втр 09:48:04 #198 №1112531 
>>1112432
Отсутствие прав администратора на сервере. Надо работать с тем, что есть. Так ты можешь привести альтернативы gearman под шинду?
Аноним 26/12/17 Втр 13:06:37 #199 №1112562 
>>1112480
они может везде и есть, только за другие языки пусть говорят те, кто с ними плотно работает.
я-то как раз работаю в нормальной конторе на 7.1 с tdd и bp.

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

эм, анонимные функции в 7.1? может ты путаешь с анонимными классами в 7.0? анонимные функции уже миллион лет есть.

анонимные классы я постоянно использую в тестах - очень удобная вещь для тестирования абстрактных классов
Аноним 26/12/17 Втр 13:17:38 #200 №1112568 
>>1112531
тебя там вообще походу в угол зажали. мало того, что винда, так еще тебе как админу админских прав не дают лол. посмотри rabbitmq, это тоже типа сервер очередей, может он работает в винде.

у меня только возникает сомнение, что ты сможешь его установить, если у тебя нет админских прав на сервере.
Аноним 26/12/17 Втр 14:25:01 #201 №1112712 
>>1112568
Админы отказываются обновлять php потому что там не только мой сервис и обновление php чревато непредсказуемыми последствиями. А вот какую-то отдельную приблуду поставить - которая бы не затрагивала php в целом и настройки сервера - они согласны.
Аноним 26/12/17 Втр 14:27:13 #202 №1112713 
>>1111682
Бамп.
Аноним 26/12/17 Втр 15:06:24 #203 №1112732 
>>1112712
ну вообще у меня на локальной машине стоит 3 версии php. они лежат в /etc/php/7.* и не конфликтуют друг с другом. в нжинксе явно указывается, какую версию использовать для конкретного сайта, а для cli можно прописать явно, какую версию использовать при вызове команды php.

более того, думаю можно версию, скомилированную с флагом, нужным для pthreads можно положить в отдельную папку и использовать по необходимости.
Аноним 26/12/17 Втр 15:09:08 #204 №1112734 
>>1112712
>Админы отказываются обновлять php потому что там не только мой сервис и обновление php чревато непредсказуемыми последствиями.
ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯСНО.
Скажи этим пидорам, что они пидоры блять. И поставили тебе еще один пхп паралельно, нужной версии.
Аноним 26/12/17 Втр 16:28:39 #205 №1112768 
>>1112732
> в нжинксе явно указывается, какую версию использовать для конкретного сайта
Вот это OCHE круто. А в апаче есть такая возможнсоть?
>>1112734
Да, было б збс
Аноним 26/12/17 Втр 17:10:14 #206 №1112794 
Как в этом вашем похопэ проверить существование переменной для получения пост-параметров?

$action = isset($_POST["action"]) ? $_POST["action"] : null;

Так норм? Или правильные пацаны как-то иначе записывают?
Аноним 26/12/17 Втр 17:19:22 #207 №1112798 
>>1112768
>Вот это OCHE круто. А в апаче есть такая возможнсоть?
в нжинксе это делается одной строчкой в конфиге. в апаче не без танцев с бубном, но можешь попробовать https://stackoverflow.com/questions/42696856/running-two-php-versions-on-the-same-server

правда, это достаточно рискованное дело на проде.

алсо, в контексте нашего разговора о стеках, изначально ты сказал, что пользуешься виндой и тебя все устраивает. через несколько дней ты уперся в ограничения стека. я не злорадствую и желаю тебе успехов в борьбе с другими админами, но этот случай, считаю, для всех анонов поучителен - пхп под виндой это костыль и невозможность роста проекта.
Аноним 26/12/17 Втр 17:28:14 #208 №1112801 
>>1112794
на первый взгляд это кажется довольно бессмысленным, т.к. если в посте по ключу action значение не будет давать true на isset, оно будет либо равно 0, либо '', либо null. то есть смысл твоей конструкции в том, чтобы заменять 0 на null, но зачем это надо - непонятно.

если надо (зачем?), оставляй так (либо воспользуйся оператором ?? в семерке:
$action = $_POST["action"] ?? null;), либо можно просто напиши
$action = $_POST['action'];
Аноним 26/12/17 Втр 17:33:14 #209 №1112805 
>>1112798
>алсо, в контексте нашего разговора о стеках, изначально ты сказал, что пользуешься виндой и тебя все устраивает.
Не, такого не говорил. Кокрастыке я сам страдаю от этого. Но это сторонний проект, сервак не мой я просто разместил объяву. Щито поделать.
Аноним 26/12/17 Втр 18:03:43 #210 №1112824 
F3gxy2p[1].png
>>1112801
>$action = $_POST['action'];
Пикрелейтед. Я понимаю, что notice это даже не warning, но по-хорошему, наверное, их стоит избегать?
Аноним 26/12/17 Втр 18:13:23 #211 №1112826 
>>1112824
да. мой косяк, не обратил внимания. тогда $action = $_POST["action"] ?? null;
Аноним 26/12/17 Втр 19:01:46 #212 №1112838 
>>1109863 (OP)
ПХП и Мускул из поставки вертригосервера.
Делаю в пхпмайадмин INSERT INTO бла-бла-бла ; SELECT LAST_INSERT_ID() - получаю то, что ожидаю получить. Делаю то же самое из пхп (внутри mysql_query()) - ошибка "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT LAST_INSERT_ID()' at line 1". Пробовал заменить точку с запятой на запятую, амперсанд и на ничего - результат тот же. Обычный инсерт инту (без точки с запятой и SELECT LAST_INSERT_ID()) работает как ожидается. Что делаю не так, как исправить?
Аноним 26/12/17 Втр 19:11:19 #213 №1112845 
>>1112838
1) для одного или нескольких запросов (разделённых ";") используются разные ф-ции, __например__, для устаревшего mysqli мульти-запрос: http://php.net/manual/ru/mysqli.multi-query.php

2) не рекомендую использовать "SELECT LAST_INSERT_ID()" в принципе, т.к. в нагруженном проекте он возвращает ХЗ что. Могу ошибаться, канешн, но ИМХО надёжнее выбрать запись обратно по известным признакам, отдельной процедурой.
Аноним 26/12/17 Втр 19:12:23 #214 №1112846 
>>1112824
ну типа "правильно" инициализировать все переменные и индексы хотя бы нулём, но на практике все забивают, и ничего ужасного не случается
Аноним 26/12/17 Втр 19:13:17 #215 №1112848 
>>1112794
норм.
Аноним 26/12/17 Втр 19:16:49 #216 №1112849 
>>1112489
ну я не уверен, что это хороший порядок причины и следствия
Аноним 26/12/17 Втр 19:18:16 #217 №1112850 
>>1112794
насчет того, что все забивают и ничего не страшного случается, не слушай. за такое отношение в приличных местах по рукам бьют.

$action = $_POST["action"] ?? '';

если совсем правильно хочешь, то надо в строковую переменную по умолчанию делать пустой строкой. тогда можно будет использовать тайп-хинтинг и, если нужно, поиграть в строгую типизацию.
Аноним 26/12/17 Втр 19:19:44 #218 №1112851 
>>1112845
>2) не рекомендую использовать "SELECT LAST_INSERT_ID()" в принципе, т.к. в нагруженном проекте он возвращает ХЗ что. Могу ошибаться, канешн, но ИМХО надёжнее выбрать запись обратно по известным признакам, отдельной процедурой.
Это как? Отдельный запрос ебошить? Может тогда уж лучше count()?
А в каких именно случаях "ХЗ что" вернется? Ну, кроме случая, когда долбоебы удалили запись из таблицы, "забыв" поправить автоинкремент?
Аноним 26/12/17 Втр 19:19:51 #219 №1112852 
>>1112850
>приличные места
в индустрии все просто выёбываются кто как может, а на практике бизнесы гребут бабло совершенно по другим критериям, нежели -- что ты там себе наинициализировал ;)
Аноним 26/12/17 Втр 19:21:06 #220 №1112853 
>>1112845
>для устаревшего mysqli
Ебать. А что сейчас-то используют? я до сих пор, по старинке, mysql_select_db, mysql_query, mysql_fetch_array... Я мамонт?
Аноним 26/12/17 Втр 19:21:27 #221 №1112854 
>>1112475
вообще yii2 поддерживает чуть ли не 5.3.

а это что за хостинг такой, если не секрет? в чем его преимущества?
Аноним 26/12/17 Втр 19:22:08 #222 №1112855 
>>1112852
>в индустрии все просто выёбываются кто как может
Что ты имеешь ввиду?
Аноним 26/12/17 Втр 19:22:52 #223 №1112856 
>>1112853
да, мамонт, новые проекты делай с универсальным PDO (к любой БД) http://php.net/manual/ru/book.pdo.php

Старые оставляй как есть, если всё работает
Аноним 26/12/17 Втр 19:23:25 #224 №1112857 
>>1112852
это если ты подчиняешься напрямую бизнесу (фрилансишь, например). а если есть команда разработчиков, тимлид, аудит и прочее, то такой код не пропустят.
Аноним 26/12/17 Втр 19:24:07 #225 №1112858 
>>1112857
ну да, надо же им как-то оправдывать свой хлеб -- как раз такими выебонами
Аноним 26/12/17 Втр 19:28:49 #226 №1112860 
>>1109863 (OP)
Ну вот смотрите, если я не “одаренный” чел, но который готов упорно работать, которому интересна работа с базами данных и сетямино это не точно ,но не интересна работа с дизайноми это тоже не точно, который хочет иметь карьерный рост и приличные деньги, но который хочет и пожить, то есть не все время тратить на программирование и изучение новых технологий, то PHP можно назвать верным путем, естественно учитывая, что помимо PHP нужно изучить и другие технологии?
Аноним 26/12/17 Втр 19:30:42 #227 №1112861 
>>1112860
1) вкатывальщики не нужны
2) да
Аноним 26/12/17 Втр 19:30:54 #228 №1112862 
>>1112858
не соглашусь. говнокод деморализует как если бы в центре офиса насрали кучу говна. то есть всерьез уже сложно относиться к работе.

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

а если нужно сделать сайт автосервиса, то конечно им поебать, какие там нотисы летят. лавешка мутится и заебись
Аноним 26/12/17 Втр 19:31:15 #229 №1112863 
>>1112862
это уже твои выебоны, мне пох :3
Аноним 26/12/17 Втр 19:34:51 #230 №1112867 
>>1112863
это понятно, просто я подозреваю что ты сам около фриланса крутишься, или в конторе, где полтора фулстека.
Аноним 26/12/17 Втр 19:37:06 #231 №1112870 
>>1112860
иди в перезвоним-тред, там тебя поддержат и помогут выбрать верный путь
Аноним 26/12/17 Втр 20:08:56 #232 №1112876 
PHP Транзакции и автоматическая фиксация изменений - Manual[...].png
>>1112856
Блядь, а нахуй так сложно-то всё? ООП это ебаное (зачем оно мне в скрипте на 50 строк, блядь?), исключения и их перехват вместо mysql_error()
>Если ваше приложение не перехватывает исключение PDO конструктора, движок zend выполнит стандартные операции для завершения работы скрипта и вывода обратной трассировки. В этой трассировке будет содержаться детальная информация о соединении с базой данных, включая имя пользователя и пароль.
Мда, охуительно.

Эм, транзакции теперь обязательны везде, где они поддерживаются? Блджад, что за пиздец? Какой вообще профит от этого всего? Все равно я не могу единообразно работать с мускулом и редисом по определению.
Аноним 26/12/17 Втр 20:13:04 #233 №1112877 
>>1112856
> http://php.net/manual/ru/book.pdo.php
По-моему, моя реакция обусловлена вот этим. Есть какой-нибудь гайд "PDO для дебилов" или урок от ОПа на этот счет? Ну, чтоб было понятно, зачем на все это говно тратить время, и какие профиты в итоге, я хз?
Аноним 26/12/17 Втр 20:15:48 #234 №1112879 
>>1112876
1. использование класса - это еще не ооп.
2. а в чем проблема поймать исключение, добавив четыре строчки кода?
3. в чем проблема автоматических транзакций? тебе же не надо ничего писать, оно там тихо само крутится
Аноним 26/12/17 Втр 20:19:23 #235 №1112880 
>>1112877
https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md там есть чуток про пдо, но
>зачем на все это говно тратить время
с таким подходом возможно тебе лучше дальше сидеть на mysql, правда ее выпилили из 7.0, но можно еще посидеть на 5.4, пока сервера с ней не рассыпятся в пыль.
Аноним 26/12/17 Втр 20:22:06 #236 №1112881 
>>1112879
>2. а в чем проблема поймать исключение, добавив четыре строчки кода?
Нахуй мне этот ПДО, если он сам не может их отлавливать, и мне помимо лишних строчек на ПДО надо добавлять лишние строчки на отлов его исключений (когда раньше строчек было аж две - mysql_query и if(mysql_error))? Зачем вообще что-то, неважно, что, ООП, исключения, что угодно еще, если можно было и без этого?
>3. в чем проблема автоматических транзакций? тебе же не надо ничего писать, оно там тихо само крутится
Оно, судя по мануалу, автоматически откатится, если я его прямо не завершу. В том, что майиасм не поддерживает транзакции, судя по тому же мануалу. И вся эта типа универсальность идет по пизде.
>>1112880
>с таким подходом возможно тебе лучше дальше сидеть на mysql, правда ее выпилили из 7.0, но можно еще посидеть на 5.4, пока сервера с ней не рассыпятся в пыль.
Если так рассуждать, то с таким подходом нахуй идет пхп с его фирменным "через жопу, зато лаконично и просто", от которого (в случае с базами данных) нихуя не осталось
Ключевым было "зачем тратить время ЕСЛИ ПРОФИТЫ НЕОЧЕВИДНЫ".
Аноним 26/12/17 Втр 20:24:37 #237 №1112882 
>>1112876
>>1112877
это я тебе писал выше,
неохота разбирать налетевшие камменты,
ты, главное, не бугурть, все старые процессы можешь оставить как есть, если всё работает
Аноним 26/12/17 Втр 20:28:01 #238 №1112884 
7.jpg
>>1112882
Да я стараюсь, сорри, если мои посты выглядят как-то враждебно или ретроградно, я просто не понимаю, какой должен быть подход к этому ко всему. "О, вышла новая писька, а старую выпиливают, все как раньше без нее, только концептуально более лудше и всего в 5 раз больше кода, пойду скорее осваивать"? Чувствую себя изучающим фреймворк джаваскрипта, а не пхп.
Аноним 26/12/17 Втр 20:29:12 #239 №1112885 
>>1112884
>>1112881
>"через жопу, зато лаконично и просто", от которого (в случае с базами данных) нихуя не осталось
ты чего бомбанул? остался примерно такой же mysqli,

но правда-истина в том, что PDO занимает такое же количество писанины, ничего не изменится в твоих скриптах на 50 строк, просто будет больше возможностей. Не бомби, всё в порядке, в 5 раз больше кода тебе писать не нужно -- просто можешь пользоваться дополнительными ООП плюшками, если захочешь.
Аноним 26/12/17 Втр 20:30:54 #240 №1112886 
>>1112861
>>1112870
Почему тут не могут адекватно ответить на вопрос)?
Аноним 26/12/17 Втр 20:32:08 #241 №1112887 
>>1112884
>>1112885
Вот смотри, все методы доступны как статические, тот же самый запрос в одну строчку:

http://php.net/manual/en/pdo.query.php
Аноним 26/12/17 Втр 20:32:26 #242 №1112889 
>>1112886
Тебе адекватно ответили: >>1112861
Аноним 26/12/17 Втр 20:33:09 #243 №1112890 
>>1112861
>1) вкатывальщики не нужны
Ты в общем говоришь или ты имеешь в виду, что с нулевым опытом не берут?
Аноним 26/12/17 Втр 20:34:16 #244 №1112891 
>>1112890
это просто факт, и в общем и в частном, вкатывальщик-2017 просто никому не нужен
Аноним 26/12/17 Втр 20:36:10 #245 №1112892 
>>1112891
FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
Аноним 26/12/17 Втр 20:36:11 #246 №1112893 
>>1112881
исключения выбрасываются программой, а ловишь ты их сам. никто за тебя их ловить не будет.

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

>зачем тратить время ЕСЛИ ПРОФИТЫ НЕОЧЕВИДНЫ
пока профиты тебе неочевидны, то и не нужно. если твое приложение вырастет и надо будет нанять еще чувака для его поддержки, профиты станут очевидными
Аноним 26/12/17 Втр 20:39:06 #247 №1112894 
>>1112884
ну к сожалению, это во всех языках происходит, пакет "mysql" саппортили лет 20, потом расширили его до сих под живым расширенным mysqli, но по мере взросления стало понятно, что нужен универсальный драйвер к SQL базам. Он такой же простой в использовании, в те же пару строчек, ничего фатального не произошло, а возможностей -- больше. Короче, лучше кайфани, вместо бугурта.
Аноним 26/12/17 Втр 20:58:03 #248 №1112896 
>>1112892
2018, извините
Аноним 26/12/17 Втр 22:11:01 #249 №1112901 
>>1109863 (OP)
dd
Аноним 26/12/17 Втр 22:13:21 #250 №1112902 
>>1112891
Я тебя прекрасно понимаю, честно. Ты не хочешь увеличивать популярность WEB разработки, дабы не палить годноту/не увеличилась конкуренция/профессия не скатилась в хавно (нужное подчеркнуть). Но вот если чисто, между нами, не в общем смысле, а в прямом, профессия норм или есть большие подводные?
Аноним 26/12/17 Втр 22:27:09 #251 №1112908 
>>1112885
>ты чего бомбанул? остался примерно такой же mysqli,
Там еще более дохуя всякого.
>>1112885
>но правда-истина в том, что PDO занимает такое же количество писанины, ничего не изменится в твоих скриптах на 50 строк
ООП, которое занимает строки, обработка исключений, которая занимает строки.
>>1112887
А в чем разница тогда с всей предыдущей хуйней? Блядь, я запутался. По описанию exec и query примерно одно и то же делают, только результат разный возвращают.
>>1112893
>исключения выбрасываются программой, а ловишь ты их сам. никто за тебя их ловить не будет.
Дак а зачем, опять же, в скрипте на 50 строк это, когда была mysql_error?
>>1112893
>пока профиты тебе неочевидны, то и не нужно. если твое приложение вырастет и надо будет нанять еще чувака для его поддержки, профиты станут очевидными
А конкретнее?
>>1112885
>ты чего бомбанул?
Просто ненавижу, когда что-то работает и всех устраивает, может, не идеально, но работает и всех устраивает, все годами пользуются, а потом какой-нибудь долбоеб решает навернуть пару уровней абстракций, которые нихера на практике даже не абстрагируют ничего (пример из мануала выше с транзакциями), требуют только больше писанины и надо переучиваться ради того, чтобы переучиваться, а толк ото всего этого непонятно какой. Не надо больше эксейпить значения переменных? Так все давно написали себе функцию автоматического добавления-удаления и забили.
>>1112894
Пытаюсь, пока не выходит. Может, из-за языка написания документации.
>такой же простой в использовании, в те же пару строчек
Только теперь вместо двух функций обработка исключений (обработчик напиши сам, разумеется, стандартный вывалит логин-пароль при неудачной авторизации). И вместо двух функций 3 класса.
>саппортили лет 20
сэдфрог.жпг

Такс, анон, а если у меня уже таки есть код со старым mysql_connect и всем этим говном, и мне его надо показать прям через час, есть какие-нибудь бесплатные хостинги, где по-прежнему пхп5 стоит, или все уже на 7ую версию перекатились?
Аноним 26/12/17 Втр 22:31:36 #252 №1112909 
Аноны, старый тред утонул, если кто-то не дождался ответа на вопрос или решения задачи, напомните о себе здесь.
Аноним 26/12/17 Втр 22:39:14 #253 №1112911 
>>1112908
это я тебе писал; на тытьё отвечать не буду, захочешь -- попробуешь и сам увидишь, что всё норм.

А хостингов с РНР5 полно.
Аноним 26/12/17 Втр 22:44:04 #254 №1112913 
>>1112908
>Просто ненавижу КОКОКОКО
Просто оставь свои проекты на текущей версии и не бузи, всё будет работать
Аноним 26/12/17 Втр 23:01:21 #255 №1112917 
Давно замечаю что многие сервисы разлогинивают тебя после закрытия браузера. Это поведение самого браузера или новый стандарт безопасности?

Как можно узнать о нём?

Т.е. как определяется что пользователь закрыл браузер и нужно сбросить кукисы?
Аноним 26/12/17 Втр 23:04:48 #256 №1112919 
>>1112917

У куки есть атрибут "время жизни", expires: https://ru.wikipedia.org/wiki/Cookie#Атрибуты_куки

Если его не указать, то кука называется "сессионной" и живет до закрытия браузера (или вкладок с сайтом).
Аноним 26/12/17 Втр 23:30:36 #257 №1112922 
>>1112919
Как-нибудь объясняется зачем делать куки сессионными за исключением очевидного, что пользователь может надолго оставить доступ к устройству и злоумышленник может этим воспользоваться?
Аноним 27/12/17 Срд 00:21:21 #258 №1112937 
ОП, проверь пожалуйста задания по HTML. Спасибо!

https://github.com/pmaprog/codedokode-html
Аноним 27/12/17 Срд 00:40:48 #259 №1112944 
>>1112911
Бесплатный, с пхп5 и мускулом, куда можно вот уже сейчас, в течение часа, залить и чтоб работало (подразумевается либо выдача домена от хостинга, либо реально быстрое прикрепление бесплатного доменного имени) можете подсказать? zzz.com.ua - пхп 7.1.12, хостингер совсем охуел, то ему мобильник мой нужен, то еще чего-то, не хочет просто дать мне залить проект.
Аноним 27/12/17 Срд 00:53:00 #260 №1112950 
>>1112944
Погодите, это я ебланю, с хуя ли из 7 выпилено-то мое говно мамонта? Работает все, даже ошибками типа "депрекейтед" не сыпет.
Аноним 27/12/17 Срд 01:48:24 #261 №1112972 
>>1112886
ты задал слишком общий вопрос, я так и ответил.

по теме - вкатывальщики нужны в дс, за другие города не скажу. работы без опыта не много, но она есть. главное - быть толковым и знать необходимый минимум: язык, ооп, бд (джоины, индексы), линукс и как вообще веб работает. и еще, не иди в битрикс работать, это карьерный тупик. найди контору с собственным продуктом, поработай там за еду полгода-год и дальше иди на норм зп в норм проект. такой план
Аноним 27/12/17 Срд 01:56:05 #262 №1112973 
>>1112908
ну mysql уже небезопасна, ее и выпилили. и пхп тут не виноват, так как она с 2013 года считается устаревшей.

а в чем проблема написать еще даже и 50 строк кода? это не повлияет на скорость работы или что-то такое. я так понимаю, ты не программист по основной деятельности, так что пиши какие-то вопросы по коду, тут помогут
Аноним 27/12/17 Срд 02:02:17 #263 №1112974 
>>1112902
профессия норм, если тебе нравится писать код. а ты так написал "не хочу тратить все время на изучение", что немного настораживает. то есть, тебя никто не заставляет по 15 часов педалить, но сам подход лучше поменять. главное, чтобы интерес был, а не чтобы сразу защищать свое личное время.

ну это мое мнение, может ты что-то другое имел в виду
Аноним 27/12/17 Срд 02:04:16 #264 №1112975 
>>1112950
это надо phpinfo смотреть. подозреваю, там не 7.1, либо mysql не вызывается
Аноним 27/12/17 Срд 02:13:25 #265 №1112977 
Аноны, это тред про веб-разработку. Ваш вопрос про хостинги не требует больше 2-3 постов, прекращайте тут чат устраивать.
Аноним 27/12/17 Срд 03:13:04 #266 №1112987 
>>1112922

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

>>1112908

> ООП, которое занимает строки,
Примерно столько же получается, сравни сам:

$result = mysql_query(...);
$result = $pdo->query(...);

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

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

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

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

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

> есть какие-нибудь бесплатные хостинги, где по-прежнему пхп5 стоит
Можно взять VPS (скорее всего небесплатный, цены смотри на poiskvps.ru) и поставить любую версию PHP через phpenv.

>>1112894

Причины, почему задепрекейтили mysql, описаны тут https://wiki.php.net/rfc/mysql_deprecation и тут https://stackoverflow.com/questions/16859477/why-are-phps-mysql-functions-deprecated
Аноним 27/12/17 Срд 03:13:36 #267 №1112988 
>>1112893

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

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

>>1112886

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

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

>>1112884

mysql выпиливают уже лет 5, я думаю. Ты где был все это время? тут вот https://wiki.php.net/rfc/mysql_deprecation стоит дата 2012 год. Если ты учился по устаревшему учебнику, то зря. Опять же, никто тебе не запрещает поставить 5.6 и сидеть на нем до конца жизни, код свободный, как хочешь, так и используй.

>>1112881

> надо добавлять лишние строчки на отлов его исключений
не надо

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

>>1112879

Ловить не надо.
Аноним 27/12/17 Срд 03:14:05 #268 №1112989 
>>1112877

Погугли статью на Хабре про PDO. ООП и исключения, конечно, надо понимать, чтобы читать статью.

>>1112876

Трассировка выводится на экран, только если включен display_errors.

> транзакции теперь обязательны везде
нет. В mysql по умолчанию включен AUTOCOMMIT, погугли, что это. В других СУБД - не обязательно.

>>1112860

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

>>1112850

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

>>1112824

notice это ошибка в коде. Ее надо исправлять.

>>1112845

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

>>1112826

Нужно добавлять strval, так как могут передать массив вместо строки.
Аноним 27/12/17 Срд 03:14:55 #269 №1112991 
>>1111682

count(descendant::...) = 0

>>1112485

Если ты не используешь анонимные функции, это не значит, что они не нужны. Я их использую, например. Например, для сортировки по произвольному критерию, вместе с array_map/array_filter, и тд. Добавили их в 5.4.

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

>>1112491

Session fixation работает тогда, когда посторонний может как-то задать id сессии. Например, если он передается через GET-параметр, злоумышленник дает пользователю ссылку example.com?sid=12345678, пользователь залогинивается (и это записывается в сессию 12345678), после чего злоумышленник сам заходит по такой же ссылке и оказывается тоже залогинен (так как у него тот же id сессии, в которой стоит признако залогиненности).

Потому не надо передавать id сессии через что-то, кроме кук.

>>1112490

Еще есть вариант просто не использовать сессии вообще. Не так они и нужны.

>>1112483

Рассмотри еще вариант не использовать сессии вообще.

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

> каждые 20 минут генерация нового ид сессии
Непонятно, зачем. Ты приводил ниже пример, но в браузере куки общие для всех вкладок.
Аноним 27/12/17 Срд 03:15:24 #270 №1112992 
>>1112424

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

>>1112430

надо опираться на PSR, а не на свое личное мнение. Или хотя бы писать, что это твое, а не общепринятое, мнение.

>>1112347

Нет, дизайнер это другая профессия. Рост есть, если развивать кругозор, а не ограничиваьться одной технологией.

>>1111861

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

>>1111824

Вместо $$name надо использовать массив. Не учи плохому. Массив специально придуман для случаев, когда надо искать данные в списке по индексу, не надо изобретать кривые костыли.

>>1111787

Не понял вопрос. В SQL нет рекурсии.

>>1111781

Ты изучал DI? Тут нельзя использовать DI? https://github.com/codedokode/pasta/blob/master/arch/di.md

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

> А если у него пара методов с бд тоже вшивать?
А может ты просто неправильно спроектировал класс? Каждый класс должен заниматься своим делом.
Аноним 27/12/17 Срд 03:15:58 #271 №1112993 
>>1111750

Есть старая технология RSS, которая позволяет отслеживать обновления на сайте. На странице гитхаба с релизами есть RSS-лента ( https://github.com/composer/composer/releases.atom ), подпишись на нее любым RSS ридером. Также, композер умеет сам проверять свои обновления и обновляться, посмотри справку по нему.

>>1111608

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

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

order_id | item_id | count | ordered_price | ...

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

Правильно, что придерживаешься нормализации.

> буду писать запрос типа
А зачем группировка-то? Можно и без нее.

>>1111604

Можно. Это называется составной естественный ключ. Это также защищает от вставки одной и той же пары id 2 раза.
Аноним 27/12/17 Срд 13:09:19 #272 №1113073 
С точки зрения хорошего кода нормально писать методы которые не возвращают ничего, а просто выполняют какой то код?
Аноним 27/12/17 Срд 13:14:09 #273 №1113075 
>>1113073

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

$validator->validate($user);
$errros = $validator->getErrors();

Тут лучше написать

$errors = $validator->validate($user);
Аноним 27/12/17 Срд 13:46:24 #274 №1113093 
Оп добавь в шапку - Учи английский, хотя бы основы (2500 слов)
Аноним 27/12/17 Срд 14:12:06 #275 №1113101 
>>1111824
>>1112992
>Вместо $$name надо использовать массив. Не учи плохому

сорян. ну это я написал в данных условиях (когда есть несколько переменных не в массиве). если можно переписать входные данные на $words[] = [...] и т.д., то лучше сделать
$i = 1;
foreach ($words as $word) {
echo $word[array_rand($word)];
if (0 === $i++ % 3) {
echo "/n";
}
}
Аноним 27/12/17 Срд 14:20:27 #276 №1113105 
>>1112993
спасибо за секрет - я действительно об этом не подумал (реального опыта работы с интернет-магазинами не было). получилась бы неудобная ситуация, лол

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

а почему не использовать группировку? это накладно?
Аноним 27/12/17 Срд 14:28:39 #277 №1113109 
>>1110308
Двачую. Самому интересно.
Можешь описать свою задачу,
Аноним 27/12/17 Срд 14:41:04 #278 №1113113 
>>1110308
>>1113109
какие ещё манипуляции?
PHP автоматически извлекает GET-параметры из адресной строки в глобальный массив $_GET,

в /script.php?foo=bar&biz=baz будут доступны переменные $_GET['foo']=='bar' и $_GET['biz']=='baz'

всё.
Аноним 27/12/17 Срд 21:45:43 #279 №1113256 
ОП, почему на гитхабе затих? Предлагаю темы, интересно почитать твоё мнение, будет круто если в виде статьи в репозитории pasta:
- сокеты, "неумирающий" PHP. По сокетам, да ещё и для PHP-шников, статей как кот наплакал.
- некачественный код в популярных библиотеках/фреймворках. У новичков мало опыта и они впитывают информацию как губки из чужих библиотек, это хорошо. Но бывает библиотека некачественная и прививает плохие практики. Например у этой библиотеки дурацкий API: https://github.com/php-curl-class/php-curl-class
> $curl = new Curl();
> $curl->get('https://www.example.com/')
> if ($curl->error) {
Тут явно напрашивается класс Response и иммутабельный подход в целом. Ещё Yii - это прямо сборник плохих подходов:
- неявное вместо явного (магические методы)
- доступность сервис-локатора отовсюду
- синдром Not Invented Here: https://github.com/yiisoft/yii2-httpclient
Аноним 27/12/17 Срд 22:46:43 #280 №1113282 
>>1109863 (OP)
Как сделать так, чтобы текст был с боку от картинки?
Как импортировать html через php?
Как начать зарабатывать?
Как заставить себя учить и не быть тупым идиотом?
Аноним 27/12/17 Срд 23:55:13 #281 №1113307 
Нахуя оп поставил майнер на свой сайт?
Аноним 28/12/17 Чтв 00:48:00 #282 №1113320 
>>1113307

Это не я, чесслово. Всю рекламу ставит юкоз. Он меня уже поддостал, и я думаю, не перенести ли сайт на гитхаб.
someApprentice 28/12/17 Чтв 01:37:00 #283 №1113339 
>>1113320
Переходите лучше на наш сайт!
Аноним 28/12/17 Чтв 02:03:29 #284 №1113346 
>>1106146

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2

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

>При оформлении SQL кода стоит придерживаться этого руководства по стилю: http://www.sqlstyle.guide/ru/
вроде сделал

>В дальнейшем тебе стоит также подумать о создании отдельной публичной папки, а сейчас у тебя по сути все файлы вывалены в общий доступ.
я думал у меня только index.php в публичном доступе

>В репозиторий стоит добавить README с кратким описанием проекта и инструкцией по установке. Образцы (можно даже более кратко сделать):
Напишу как сделаю

>>class CheckForm
>> const REG_FORM_SEX_MAN = "Мужской";
>Эту константу уместнее поместить в студента, а не в проверяльщик формы.
Почему?

>Методы checkRegForm() и checkProfileInfo() содержат много одинакового кода. Копипаста кода - это зло. Потому что изучать такой код в 2 раза дольше, править в 2 раза дольше.
Сделал общий. Но по мне он непонятнее и сложнее в изучение чем кучка ифов.

>Папку лучше назвать не Student, а Entity или Model.
почему?

>https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist/blob/master/src/DbConnect/DbConnect.php
>Этот класс не очень-то и нужен, тебе ведь никто не запрещает просто создать PDO через new.
вообще я украл это. ну и как я понимаю, он для того что бы данные для пдо из ини файла брать.

>https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist/blob/master/src/UsersTableGateway/UsersTableGateway.php
>Тут стоит попробовать применить Dependency Injection: https://github.com/codedokode/pasta/blob/master/arch/di.md
не понимаю. я вроде делаю большинство того что там написано

>> public function SearchStudents($search, table $table)
>Здесь проблема в том, что ты возвращаешь "неполноценные" объекты Student, у которых не заполнена часть полей. Это усложняет код, так как в нем где-то гуляют полностью заполненные объекты, а где-то нет и различить их невозможно. >Получив такой объект, ты не знаешь - у студента пустое название группы или оно просто не загружено. Если ты хочешь вернуть только 4 поля, надо использовать массив или отдельный объект. Но лучше бы вернуть полноценных студентов.
В смысле гулять. Он же используется только в профайле и потом уничтожается. А возвращаться полноценых с хешомпароля, логином и тд не опасней?

>(в роутере) Вместо exit лучше бы поставить return.
почему?

>> header('location: http://localhost:8081/login');
>Тут зря ты прописал домен и порт, как перенести код на другой домен?
То как я дселал сейчас нормально?

>Контроллеры profile и reg наверно можно объединить?
но они же разные

И еще пара вопросов
Я сначала подключая headers, и потом к нему только тело. Это нормально?
Сама реализация стала адевкатной или я все еще делаю "дичь"? В примеру в первой версии я смешал ооп и процедурный код и вообще была полная параша.
Теже контролеры. Приемлимо их так делать? Нормально ли создавать их и вызывать функцию doExecute (что я тоже кстати подсмотрел), когда это можно все в конструктор запихать. Нормально ли создавать в них классы и потом их передавать тем кто нуждаются?
Нужно ли мне использовать интерфейсы и абстракт класы к примеру к контролерам?
А еще я запушил новые файлы и папки а старые так же остались и получилась каша. Как скрыть старые?
Аноним 28/12/17 Чтв 02:03:44 #285 №1113347 
>>1113256
мне вот лично интересна не конкретная тема, а такая, где человек имеет опыт и ему есть что сказать. плюс у ОПа на любые темы получается интересно писать.

по поводу сокетов: в ютубе есть хорошее видео с какой-то конференции про асинхронный пхп, там все достаточно интересно и подробно рассказано. завтра буду за компом и скину ссылку.
Аноним 28/12/17 Чтв 10:32:11 #286 №1113402 
>>1113320
Погоди, там сайт заброшенный уже, менюшки не работают, половина ссылок, я на этом сайте ничего не читал чесслово из-за неудобности и еще удивлялся почему он в шапке. >>1113282
Конкретней вопросы задавай. В треде сидит HTML&CSS дрочер, он поможет. Ыыы я про себя ыыыыыы
Аноним 28/12/17 Чтв 11:39:00 #287 №1113411 
>>1113339
Че?
Аноним 28/12/17 Чтв 11:45:20 #288 №1113412 
>>1113402

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

>>1113339

Спасибо, но я пока рассматриваю вариант хостить на гитхабе.
Аноним 28/12/17 Чтв 11:46:35 #289 №1113413 
>>1113412
ОП хочешь я сделаю сайт? Заебашу крутой дизайн со сковородками?
Аноним 28/12/17 Чтв 11:47:43 #290 №1113414 
>>1113413
В Омлет входит:
- Методология БЭМ
- Чистота семантики
- Эргономичный дизайн
- Бесплатность
Аноним 28/12/17 Чтв 12:15:06 #291 №1113419 
>>1113413

А чем плох нынешний дизайн? Также, ты недооцениваешь сложность работы. Там куча мелочей вроде отступов и тд.
Аноним 28/12/17 Чтв 12:22:09 #292 №1113423 
>>1113419
Нет если ты хочешь сохранить дизайн то дело твое, если хочется держать олдскуль то все ок.
Я бы добавил шрифты читабельные, побольше привлекательности и каких нибудь свистулек, чтобы сайт казался модернизированным.
Аноним 28/12/17 Чтв 12:35:19 #293 №1113427 
>>1113423

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

Выглядеть "современным" - это для меня не является критерием.

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

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

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

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

А если речь о том, чтобы просто поменять стиль и сделать сайт похожим на какой-то другой, то я не очень понимаю, какая мне и читателям от этого выгода. Вот, у Ютуба, напримепр недавно поменяли дизайн на "материальный" и на него теперь больно смотреть (хотя это конечно очень субъективно, кому-то нравится, кому-то нет).
Аноним 28/12/17 Чтв 14:10:40 #294 №1113447 
>>1113427
Сделай как на Гите у тебя, там как раз то что я имел ввиду. Простота и сплошная приятность.

Представь что твой сайт это книга или статья. Держи цвета в минимуме и гармонии (Обычно работает 1-4 оттенка), чем больше контраста и округленности - Тем лучше.
Во всем остальном руководствуйся семантикой, она рождает распорядок, когда ставить отступы, создавать элементы и т.д

Ютуб делал опросы, собирал информацию, делал беты и т.д и так уж получилось что количество одобривших оказалось больше, и получилось соответствие логике стандартов
Аноним 28/12/17 Чтв 23:04:00 #295 №1113592 
>>1109863 (OP)
>>1112937
bump
Аноним 28/12/17 Чтв 23:59:53 #296 №1113607 
gerggiebyxxdasmiepxx-db4cizz.png
Cап, ненастоящие девочки
Я тут это... проспорил. Сам не знаю как так вышло.
Суть такова-я за 8 дней изучаю Vue.js и в качестве проверочного задания пишу форму заполнения брифа, которая формирует письмо и отправляет на указанный адрес.
Я проиграл или есть шансы?
Аноним 29/12/17 Птн 01:19:25 #297 №1113656 
https://www.youtube.com/watch?v=CW5oGRx9CLM
Аноним 29/12/17 Птн 02:09:40 #298 №1113666 
>>1113607
Никогда и никому не делай тестовые задания, рыжик.
Тысячу раз ведь уже, в каждом втором треде, ну скокаможна.
Аноним 29/12/17 Птн 03:01:53 #299 №1113680 
>>1113656
Убери это говно отсюда.
>>1113607
Пошел нахуй пёс.
Аноним 29/12/17 Птн 06:35:03 #300 №1113701 
1.jpg
>>1111651
Поставил.
>position: static;
Ничего не изменилось, перенос строки все так же идет.
Еще варианты?

<button id="_close" form="none" onclick="openbox('windowLogin')">Закрыть</button>
</div>
линк на восстановление пароля
<br>
линк на регистрацию
</div>
Аноним 29/12/17 Птн 08:26:56 #301 №1113708 
>>1113701
position это не ширина, я имел ввиду параметр width/max-width, поставь там ширину фиксированную: px, em, pt в wrap элементе и ничего не будет изменяться при передвигании окна, как бы ты не старался.
Ты смотрел код по ссылке?
Аноним 29/12/17 Птн 09:40:38 #302 №1113736 
>>1113708
Да, сделал фиксированный размер окна и кнопок.
Но дело не в этом.
Когда я подключаю код в индексе, все нормально.
Когда я подключаю в другой странице этот же код - появляется двойной перенос строки после формы. В этом- проблема.
Почему такое может быть?
Аноним 29/12/17 Птн 10:26:18 #303 №1113746 
>>1109863 (OP)
>>1109863 (OP)
Анон, помоги вот с чем:

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

https://ideone.com/Q3Gv2P

Не могу взять в толк, как правильно вытаскивать значение, введенное пользователем, чтобы потом скармливать его реквесту SQL.
Аноним 29/12/17 Птн 11:25:10 #304 №1113760 
>>1113746
$_GET[$country] — используй хотя бы htmlspecialchars, и ограничь поле длиной до максимального названия страны - тиинидад и тобаго самое длинное что сейчас приходит в голову.

Регеэкспы делай в самом сиквеле, подключайся через PDO.
Аноним 29/12/17 Птн 11:46:57 #305 №1113768 
>>1113760
Я немного нуб, немного. ха ха и посему отвечу:
1.Там есть всякие "Бермудские острова" + БД может быть расширена. Нет смысла в ограничении на количество символов.
2.
>используй хотя бы htmlspecialchars
Зачем?
3.
>Регеэкспы делай в самом сиквеле, подключайся через PDO.
А в чем профит?
Аноним 29/12/17 Птн 12:04:38 #306 №1113781 
>>1113768
1. Очень хуево спроектированная БД
2. Чтобы не эксплуатировале поле для всяких атак
3. Профит в том, что сверяешь с данными в БД, а не с данными не пойми с чем. У тебя регулярка проверяет поле country с чем? Тебе надо выполнить подклбчение через безопасный объект PDO к БД, осуществить поиск и сверить, после дать ответ.
Аноним 29/12/17 Птн 12:10:19 #307 №1113787 
>>1113781
1.Я взял список стран с id через API json, прошелся в нотпаде автозаменой и залил в БД.
Ну ты понял, что это НЕ ОЧЕНЬ крутая БД?

2.Внутреннее использование и только. Никто из вне сети не должен иметь доступ.

3.
>а не с данными не пойми с
С регуляркой.

>У тебя регулярка проверяет поле country с чем?
$regexp= '/[A-zа-яёА-ЯЁ]{2,}/u';
Аноним 29/12/17 Птн 12:14:44 #308 №1113788 
>>1113607

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

>>1113701

Не гадай, а освой инструменты разработчика (Ctrl + SHift + I) и посмотри.

>>1113746

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

Включи у себя локально вывод всех ошибок в php.ini (display_errors = On , error_reporting = -1) и ты увидишь предупреждение по поводу строки 13.

Вместо preg_match_all надо использовать preg_match.

Что ты хотел проверить регуляркой, непонятно. Она просто проверяет что в строке есть хотя бы 2 буквы среди прочих символов.
Аноним 29/12/17 Птн 12:16:17 #309 №1113789 
>>1113760

Ты какие-то странные советы даешь.

htmlspecialchars надо использовать при выводе данных.

Как и зачем использовать регулярку в SQL, я не понял.
Аноним 29/12/17 Птн 12:22:03 #310 №1113792 
>>1113788
>Что ты хотел проверить регуляркой, непонятно. Она просто проверяет что в строке есть хотя бы 2 буквы среди прочих символов.
Ну, чтобы была заполнена хоть чем-то, это "чем-то" не символы или цифры.
Аноним 29/12/17 Птн 12:28:08 #311 №1113795 
>>1113792

Твоя регулярка пропустит строку "??????aa&&&&".
Аноним 29/12/17 Птн 12:29:52 #312 №1113797 
>>1109863 (OP)
Подскажите пожалуйста.
Допустим я хочу сделать свой автозагрузчик для создания объектов, но я не понимаю как сделать чтоб он автозагружал не только сам класс, но и родителя и интерфейсы и примеси для класса, если они есть. В двух словах можно намекнуть?
Аноним 29/12/17 Птн 12:31:34 #313 №1113800 
>>1113797

Не надо ничего специально делать. PHP сам вызовет автозагрузчик для каждого дополнительного класса (родителя, интерфейса итд).
Аноним 29/12/17 Птн 12:40:10 #314 №1113801 
>>1113800
Ах да, забыл сказать, у меня еще неймспейсы, не вызывает.
Cам класс лежит в условном classes/main, его абстрактный родитель в classes/abs, интерфейсы в classes/intefaces, если неймспейс глобальный то и проблем нет, я не спорю, а с "кастом" неймспейсами просто вываливается ошибка что для класса SomeItem не найдем родитель Item и так далее.
Ну либо я дурак и чего-то не догоняю.
Есть разве что мысль чтоб автозагрузчик как-то ловил исключения и по ним подключал нужные интерфейсы и родителей, но я при мысли об этом чувствую как едет крыша.
Аноним 29/12/17 Птн 12:47:32 #315 №1113803 
>>1113801
если у тебя труктура неймспейса дублирует структуру папки, проблем быть не должно. если не дублирует, а все неймспейсы различаются префиксом, то используй автозагрузчик композера и там все их прописывай типа
{
"autoload": {
"psr-4": {
"MyLibrary\\": "src/",
"MyApp\\Plugins\\": "plugins/"
}
}
}

пример отсюда https://github.com/codedokode/pasta/blob/master/php/autoload.md
Аноним 29/12/17 Птн 12:49:32 #316 №1113804 
>>1113787
1. Да, БД не оч, но преобразовать под свои нужды все де можно. Поэтому юзай какую-нибудь тулзу визуальную для редактирования

2. Хорошо

3. У тебя в коде не видно коннекта к БД и не понятно что регулярка проверяет. Шаблон есть, а входных данных не видно.

>>1113789
Эта функция экранирует спец символы и как разультат защищает от ввода в поле > <script>touch_my_tra_lya_lya()</script>

По сиквелу еще раз повторяю, для сопоставления данных введенных в поле и взятых из базы.
Аноним 29/12/17 Птн 12:49:38 #317 №1113805 
>>1113801

Не изобретай свои схемы наименования папок, а используй PSR-4, тебе ссылку уже выше дали на урок.
Аноним 29/12/17 Птн 12:49:53 #318 №1113806 
>>1113803
Спасибо, почитаю.
Аноним 29/12/17 Птн 13:04:13 #319 №1113811 
Привет пацаны!
Тут возникают периодами вопросы что нужно знать для прохождения собеса. Я вот хожу на них и вот такой списочек возник.

1. Что такое ооп? Ну и каждый пункт.
2. Как работает сервер.
3. Виды протоколов. http ftp smtp pop
4. Рестфулл апи?
5. SQL. select insert join having вы будите писать запросы на бумажке.
6. Проектирование бд, нормализация.
7. Вы будете писать php код на бумажке тоже!!! Маленькие функции, но все равно будете. Задачки будут на рекурсию точно. Факториал, Фибоначчи. Два раза попались задачки из учебника Опа.

Ни разу не спросили про хтмл и цсс.

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

На самом собесе главное не волноваться. Это очень сложно было для меня. Кроме похода на собес не в девелоп контору. Там было похуй.
Аноним 29/12/17 Птн 13:08:13 #320 №1113812 
>>1113811
>код на бумажке
сразу нахуй таких
Аноним 29/12/17 Птн 13:14:05 #321 №1113814 
>>1113812
Вакансии июнек. Мне кажется это норм, как ты еще подтвердишь что хоть что-то знаешь умеешь? Хули ты три строчки факториала не сможешь написать? Я читал про долбоебов которые заказывают решение тестовых, у которых знаний хуй. И вот чтобы таких отсеять и делают это. Конечно ебаная практика. Я привык хуярить код, а потом тестить его. И с первого раза у меня ничего не работает. Опыта же нуль. Но с другой стороны это просто покажет что ты хоть с синтаксисом знаком.
Аноним 29/12/17 Птн 13:29:48 #322 №1113818 
>>1113680
лечи нервишки
Аноним 29/12/17 Птн 13:45:10 #323 №1113826 
>>1113804
https://ideone.com/6zjEBp

Вот вторая часть кода.

Не могу понять, почему у меня не выводится результат.
Аноним 29/12/17 Птн 13:52:37 #324 №1113828 
>>1113826
Логин/пасс точные при подключении?

В сиквеле у тебя явная ошибка: ты выбираешь id и сравниваешь с именем.
Аноним 29/12/17 Птн 13:53:49 #325 №1113829 
>>1113828
Логи пассы я заменил ололо! дианон1 хотя, кому я нахуй нужен...

>ты выбираешь id и сравниваешь с именем.
В смысле?
Аноним 29/12/17 Птн 14:13:35 #326 №1113837 
>>1113829
Про логин/пасс я уточнил, а то вдруг ты не додумался их заменить.

> $str_sql_query = "SELECT id FROM dbCountries WHERE name LIKE '%$word%' OR alias LIKE '%$word%' ";

После селекта пишешь name вместо id
Аноним 29/12/17 Птн 14:42:28 #327 №1113841 
>>1113837
Не. Мне нужнро, чтобы юзер вводил "Турция", а ему вываливался id-шник "65".
Аноним 29/12/17 Птн 14:47:53 #328 №1113843 
>>1113841
Тогда пишешь id, name
Аноним 29/12/17 Птн 14:56:10 #329 №1113846 
>>1113843
Меня больше интересует, как выводить значения из $result = mysql_query($str_sql_query, $link);
Аноним 29/12/17 Птн 15:02:28 #330 №1113848 
>>1113846
Самый просто способ echo $result
Аноним 29/12/17 Птн 15:11:43 #331 №1113851 
>>1113848
Не, херня получается.
Ввожу "Абхазия". В БД у неё ид = 1.

Ответ через echo:
Resource id #5
Аноним 29/12/17 Птн 15:59:09 #332 №1113862 
1.jpg
>>1113788
>Не гадай, а освой инструменты разработчика (Ctrl + SHift + I) и посмотри.
ф12 клацнуть проще.
И что я там должен увидеть?
Аноним 29/12/17 Птн 16:08:52 #333 №1113867 
>>1113851
Всё правильно. Так и должно быть. Если ты хочешь увидеть содержимое ввиде текста, самоое легкое это через var_dump посмотреть
Аноним 29/12/17 Птн 16:15:15 #334 №1113870 
>>1113826

1) расширение mysql устарело, переходи на mysqli или PDO
2) не подставляй переменные в запрос напрямую, будет SQL инъекция, читай урок https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
Аноним 29/12/17 Птн 16:16:23 #335 №1113871 
>>1113862

Там для каждого элемента выводится его размер, паддинги и маргины, примененные CSS праивла. Можно увидеть, в чем проблема.
Аноним 29/12/17 Птн 16:17:52 #336 №1113872 
>>1113846

Прочитай мануал по mysql_query и что она возвращает. http://php.net/manual/ru/function.mysql-query.php
Аноним 29/12/17 Птн 16:23:41 #337 №1113874 
>>1113872
Прости, Анон, но я никак не пойму, что мне нужно сделать, чтобы вытянуть из mysql_query id-шник.

>>1113867
Мне его обязательно нужно будет передать.

>>1113870
Сейчас для меня это не особо важно, т.к. срок горит.
Обещаю, что в следующей задаче (а это первая на моем счету) постараюсь сделать все "по-взрослому", но вот прям щас хоть на костылях.
Аноним 29/12/17 Птн 16:53:51 #338 №1113887 
>>1113874

Надо читать мануал http://php.net/manual/ru/mysql.examples-basic.php и смотреть код там. Вообще, тебе надо еще учиться.
Аноним 29/12/17 Птн 17:15:00 #339 №1113889 
>>1113887
>Вообще, тебе надо еще учиться
Слушай, я, как бэ, даже не заикался про то, что я там супер-пупер дохуя джедай, который ебет всех в рот.

Просто есть я и задача. И я не понимаю, как добиться результата.

Вот например:

Я посмотрел, что mysql_connect можно подключать напрямую к БД, без mysql_select_db

Написал :
mysql_connect(localhost, Uname, Upass, BDname) и потратил 15 минут, пытаясь понять. почему не работает. Как итог - вернулся назад.
Аноним 29/12/17 Птн 17:50:33 #340 №1113894 
>>1113887
https://ideone.com/N0rYXs

Все! Сделал. Теперь осталось придумать, как вложить это в цикл, где будет sql запрос получать значения из массива.
Аноним 29/12/17 Птн 18:02:07 #341 №1113902 
https://ideone.com/zbW7ga

Почему мой цикл не работает внутри цикла?
Аноним 29/12/17 Птн 18:17:00 #342 №1113908 
>>1113894
>>1113874
>>1113889
Распиздяйничество уноси отсюда, ты сам не умеешь думать чтоле блять? Я с вас в шоке просто, как вы треды находите? Или ты самый хитрый хуесос, который решил, что за него будут задачи делать? Ты совсем дурак чтоле сука!?
Аноним 29/12/17 Птн 18:25:10 #343 №1113910 
preg_match_all возвращает массив в массиве.
А есть способ возвращать обычный массив, при использовании регулярного выражения?

>>1113908
>бабах
Спасибо, мне очень важно твое мнение.
Аноним 29/12/17 Птн 18:47:57 #344 №1113914 
Аноны, не разводите бесполезный флуд на полтреда. Если вы хотите помочь, напишите ему сразу решение, а не выясняйте полтреда, что ему нужно. Если вы недовольны - просто молча пройдите мимо.
Аноним 29/12/17 Птн 18:48:51 #345 №1113915 
>>1113910
Я с тобой ничем не делился сука, на тебя мнение тратить хуже быть червем пидором, сьеби отсюда ибо тебе уже никто не поможет, ты потерян сука. Ты хуже спортсмена Гоши который программирует лучше чем ты.
Аноним 29/12/17 Птн 18:51:37 #346 №1113917 
>>1113910
Зачем ты пишешь сюда и засоряешь тред своими мыслями вслух? Нам твое каждое движение не интересно, поверь.
Аноним 29/12/17 Птн 20:18:52 #347 №1113943 
>>1113910
тебе подсказали про mysqli и pdo, а ты такой "ну щас накостылить надо, а учиться потом". после таких слов вряд ли кому-то будет интересно что-то обсуждать. за тебя никто костылить не будет.

иди на фл.ру и там тебе за 300 рублей решат твою задачу как раз с помощью mysql. тут не сайт бесплатных решений
Аноним 29/12/17 Птн 22:16:52 #348 №1113968 
>>1113666
Это для себя

>>1113680
Я лися

>>1113788
Ну хоть один адекват
Аноним 29/12/17 Птн 23:37:34 #349 №1113990 
>>1113943
>тебе подсказали про mysqli и pdo
Посоветовали улучшить код, в виде улучшения защиты от взлома.

Вот скажи, нахуя это нужно, если 0-ая угроза взлома?

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

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

>>1113917
Ну это да.
Аноним 30/12/17 Суб 04:47:27 #350 №1114054 
>>1113990
Ой пошел нахуй отсюда.
Аноним 30/12/17 Суб 11:18:01 #351 №1114099 
>>1114054
Чё злой такой?
Аноним 30/12/17 Суб 13:26:01 #352 №1114124 
>>1112993
> Также, композер умеет сам проверять свои обновления и обновляться, посмотри справку по нему.

Я только узнал, что после 60 дней необновления он выводит сообщение Warning: This development build of composer is over 60 days old. It is recommend
ed to update it by running "C:\ProgramData\ComposerSetup\bin\composer.phar self-
update" to get the latest version.

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

> На странице гитхаба с релизами есть RSS-лента
Вот это как раз то, что нужно. Подписался
Аноним 30/12/17 Суб 16:33:26 #353 №1114151 
Аноны, где скачать темплейты для интернет магазина. Все что нашел уебанские какие-то
Аноним 30/12/17 Суб 17:49:46 #354 №1114168 
Где можно почитать про empty, isset, !=null и их отличия?
Аноним 30/12/17 Суб 20:04:19 #355 №1114224 
>>1113990
я спаситель треда, лол

плюсы указанных расширений не только в защите от взлома, там тебе вроде еще кинули вот эту ссылку https://stackoverflow.com/questions/16859477/why-are-phps-mysql-functions-deprecated если она тебя не убедила, то и не парься пока. решил задачу и хорошо.
Аноним 30/12/17 Суб 20:05:05 #356 №1114226 
>>1114168
https://secure.php.net/manual/ru/types.comparisons.php
Аноним 30/12/17 Суб 20:40:04 #357 №1114233 
>>1114168
Ну это вообще пиздец какой-то.

php --rf empty/isset

Ну и конечно не забываем, что есть php.net с поиском и документацией...
Аноним 30/12/17 Суб 21:47:11 #358 №1114247 
https://phpclub.tech/pr/res/1097438.html#1109855
Спасибо за ответ!

> Зачем в каждой папке лежит пустой gitignore?

Создаётся командами типа make:controller. Поудаляю

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

Подсмотрел у knpuniverse. Без подчеркивания - это страница, с подчеркиванием - какой-то элемент: форма, модуль, и т.п. По-моему удобно. Да и в библиотеках такое встречал (вроде в EasyAdmin)

> "{{ path('tests', {'tag': tag.name}) }}"
> Вот это мне не нравится. Разве не лучше было бы написать getTestsByTagUrl(tag)? Так мы собираем код генерации URL в одном месте, а не размазываем по шаблонам, получаем тайп-хинты, можем делать дополнительные проверки. Можем как-то централизованно влиять на генерацию URL.

Че-то я не понял, о чем ты

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

И тут тоже не понял, о каких переменных ты говоришь


> https://github.com/TheSidSpears/test_hub/blob/master/templates/tests/list.html.twig#L8
> 'attr': {
> 'value': searchValue
> Что-то выглядит как костыль. Значение в форму в контроллере прописать нельзя?

Я долго искал, как это реализовать. В итоге нашел вариант переопределить поле: $form->add('search', null, ['data' => $searchString]);
Но меня ждал облом: You cannot add children to a submitted form
Как переопределить аттрибут поля, а не всё поле целиком, я найти не смог. Но что-то мне подсказывает, что такая возможность должна быть

> Почему strict_variables включены только в режиме debug?
Почитал issue, понял о чем речь. С тобой согласен, поставил strict_variables: true
А вот в routing.yaml у меня стоит strict_requirements: ~ и я не знаю, что означает тильда

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

> Неудачная идея, по моему, делать присваивание внутри if.
В данном случае я исправил и код стал проше. Но в принципе, я не понимаю, что плохого в присваивании внутри if

> https://github.com/TheSidSpears/test_hub/blob/master/src/Migrations/Version20171208191454.php#L18
> Тут charset utf8 стоит, а не utf8mb4
Исправил. А для того, чтобы в миграциях автоматически проставлялась верная кодировка, мне пришлось добавить doctrine.dbal.default_table_options.charset: utf8mb4 и doctrine.dbal.default_table_options.collate: utf8mb4_unicode_ci, не смотря на то, что уже стоит doctrine.dbal.charset: utf8mb4
По-моему, это не круто, что придётся прописывать в каждом проекте настройки, которые для mysql являются дефолтными

> https://github.com/TheSidSpears/test_hub/blob/master/src/Repository/TestRepository.php#L19
> Для не меняющегося запроса, наверно короче будет написать его на DQL.
У меня короче не получилось https://ideone.com/6Wqs9R

Осталось разобраться с тестами. Алсо, выставляю на проверку https://github.com/TheSidSpears/test_hub
Аноним 30/12/17 Суб 23:15:28 #359 №1114271 
Здравствуйте. Решая задачу на палиндром столкнулся с проблемой.
1)Для начала хотел бы избавиться с пробелами и перевести строку $text в нижний регистр, но программа выдает ошибки, в чем проблема?(Код программы https://ideone.com/4ARugv)
2)В каких случаях нужно использовать строку mb_internal_encoding('udf-8')?
Аноним 30/12/17 Суб 23:17:04 #360 №1114273 
>>1114271
Извините, пробел задел ссылку
https://ideone.com/4ARugv
Аноним 30/12/17 Суб 23:33:13 #361 №1114284 
2017-12-30 (1).png
>>1114271
>>1114273
>>1114271
>>1114273
1) utf-8 бро. у тебя udf.
Unicode (or Universal Coded Character Set) Transformation Format – 8-bit
2) Короткий ответ - всегда, так как эта кодировка кодирует символы из все алфавитов. Но на ideone не работают mb_ функции. Там до сих пор не поlключили нужный модуль к php.
А так твой код работает как надо.
Аноним 31/12/17 Вск 00:14:13 #362 №1114297 
У меня есть цикл с циклом внутри и выходит что то типо внешний цикл считает до 6, а внутренний с каждой итерацией внешнего только до 1.
Аноним 31/12/17 Вск 00:17:30 #363 №1114301 
15032885899660.jpg
Пагни я тут вкатываюсь в ПэХопЭмакакинг с нуля опытный пользователь, лел
Скилы:
-Лондон из зе кэпитал оф грейт бурито - 5\10, читаю фанфики, разговорный не качал пока зря, думаю - с ним можно работать без всяких пехапе
-Гуру пейнта, сони вегаса и прочих фотошопов - 4\10
-Администрирование, эникей и прочая "Почему принтер не работает и кто поставил VNC?!" - 4\10
-Матан - 1\10 я у мамки гуманитарий

Стоит ли вкатываться, если планирую рубить трафик с пиратского контента, или РЫНОЧЕК ПОДЕЛЕН? ха-ха не пиздите тут мне Подводных камней не боюсь, если они преодолимы. Работать буду соло. Какие подводные камни? Кроме того, что РОСКОМНАДЗОР щемит благородных господ?
Аноним 31/12/17 Вск 00:37:33 #364 №1114307 
>>1114301
Иди в воркач или бизнесач. Там все твои друзья.
Аноним 31/12/17 Вск 00:59:11 #365 №1114317 
15115346640582.jpg
>>1114307
>Иди в воркач или бизнесач. Там все твои друзья.
Таки вы считаете кодинг настолько унылым, или это я не вписываюсь в рамки индуса? Ближайшие полтора года у меня быдлоработка два на два, за это время я постараюсь освоить высшую нервную деятельность, в то время пока спинной мозг будет лепить гвнокод, я буду думать о запиливании/продвижении своих рамок/поисков/экстракторов медиа на чужое добро и конечно приготовлюсь стилить идеи с eng-сектора. Воркач от меня не уйдет он придет сюда
Аноним 31/12/17 Вск 01:06:19 #366 №1114319 
PHPSpotting.png
Benchmark.png
>>1114317
Не трогай ни эту часть «кодинга», ни сам «кодинг» в целом.
Аноним 31/12/17 Вск 01:12:48 #367 №1114321 
>>1114301

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

Матан для программирования сайтов не нужен.

Изучай PHP/JS либо верстку + JS и иди занимайся нормальной работой. Если ты умеешь работать с графическими редакторами, а тем более если у тебя есть вкус и понимание, что красиво, а что нет, что модно, какие цвета гармонично сочетаются, то это будет большим плюсом.
Аноним 31/12/17 Вск 01:19:21 #368 №1114328 
>>1114319
Хех не трогать веб своими грязными руками? После гуглов-яндексов-меилрушечек мне эту выебанную шлюху трогать не очень то хочется, однако единственное тело, готовое вкладывать трудочасы в мои концепты и делиться профитом - это я сам, засим избавлю вас от своего общества, извините за беспокойство, но глупо начинать что-то не спросив на двачах смачно рыгает и почесывает яица, вернусь через месяц надеюсь что нет
Аноним 31/12/17 Вск 01:19:24 #369 №1114329 
Untitled.png
>>1114297
https://pastebin.com/YuE5zb8d
Этот код не запустится, но может кто глянет глазком почему при каждой итерации внешнего цикла, внутренний каждый раз делает только первую итерацию. Пикрелейтед.
Аноним 31/12/17 Вск 01:22:56 #370 №1114331 
>>1114321
Постараюсь, просто покоптив небо у меня сложилось устойчивое впечатление, что законы и налоговая - это две вещи, мешающие зарабатывать, этот травматический опыт будет сложно преодолеть.
Аноним 31/12/17 Вск 04:46:06 #371 №1114372 
>>1114301
>>1114317
>>1114328
Ты оставайся, ты хороший. Только в конце пикчу не запостил, ублюдок ебаный
Аноним 31/12/17 Вск 06:08:08 #372 №1114379 
>>1114224
Спасибо, анон!
Аноним 31/12/17 Вск 11:04:33 #373 №1114404 
>>1114284
Спасибо дружище.
На http://sandbox.onlinephpfunctions.com/ все заработало.
Только вот я та и не понял зачем включать mb_internal_encoding(), если без него все работает? Для стиля что ли?) Ну да ладно.
ВСЕХ С НАСТУПАЮЩИМ НОВЫМ ГОДОМ!!!!
Аноним 31/12/17 Вск 14:34:33 #374 №1114443 
>>1109863 (OP)
В 2018 обещаю научиться программировать на PHP.
Торжественно клянусь.
Аноним 31/12/17 Вск 14:35:40 #375 №1114445 
>>1114443
Хе хе хе, я себе это с ~2008 года обещаю ;-)
Аноним 31/12/17 Вск 14:41:21 #376 №1114447 
>>1114445
Не, в 2018 точно выучу.
Аноним 31/12/17 Вск 16:03:31 #377 №1114490 
>>1114447
Ахахахахахха ну кончено
Аноним 31/12/17 Вск 16:05:34 #378 №1114492 
>>1114490
А чему не можешь научиться в php за ~10 лет?

мимо
Аноним 31/12/17 Вск 16:06:25 #379 №1114493 
>>1114490
Нет, срсли, уже учу.
Аноним 31/12/17 Вск 16:09:40 #380 №1114494 
>>1114492
П — прокрастинация. Книгу пол года назад купил php 7 симдянова и котерова. До нее покупал рнр 5 в далеком 2008. До этого потинкту пытался учить рнр.

Давеча решил позырить тенденции в рнр, охуел он пеар, композер, как все разворачивают, ооп и прочие штуки. В мою бытность бралась ЦМС, и к ней искались/писались плагины. Сейчас проще с фреймворком работать, чем с ЦМС.

Меня больше рнр интересует как расширенный диалект Си. Одно удовольствие на нем писать утилиты для автоматизации. Сайты не мое, хотя я их 10 лет назад делал...
Аноним 31/12/17 Вск 16:16:05 #381 №1114495 
>>1114494
Почему ты знаешь Си, но не знаешь ООП и другие перечисленные тобой вещи, которые можно изучить за пол часа?
Аноним 31/12/17 Вск 16:23:12 #382 №1114500 
>>1114495
Я его когда-то давно учил из интереса. Хотел писать клиент-серверные gui приложения под линух, но из-за уебищности gtk+ скудоумия быстро забросил.

Я по профессии сись одмен, погромировааие хобби
Аноним 31/12/17 Вск 17:08:37 #383 №1114521 
>>1114500
ООП это изи

Придумываешь объект и какие у него свойства и методы могут быть и пишешь класс
Например, User

class User
{
private $name;
private $password;

...
}

Вся суть ООП

Дальше MVC (Model View Controller)
Модель занимается состоянием программы
Отображение выводит его пользователю
Контроллер дирижирует ими двумя

namespace App\Model;

use App\Model\User;

class Database
{

public function addUser(User $user)
{
...
}

public function getUser(int $id): User
{
...
}

public function deleteUser(int $id)
{
...
}

}


namespace App\Model;

class User
{
...
}


namespace App\View;

class View
{
public function render(...)
{
...
}
}


namespace App\Controller;

use App\Model\Database;
use App\View\View;

class Controller
{
//Dependency Injection (DI)
private $db;
private $view;

//DI
public function __construct(Database $db, View $view)
{
$this->db = $db;
$this->view = $view;
}

public function registration()
{
$user = new User(...);

$this->db->addUser($user);

$this->view->render(...);
}

}

index.php
require_once ...;

use App\Model\Database;
use App\View\View;
use App\Controller\Controller;

$db = new Database();
$view = new View();
$controller = new Controller($db, $view);

$controller->registration();

Дальше лучше изучить какой-нибудь фреймворк. Советую slim https://www.slimframework.com/ Его можно изучить за вечер. Он даст представление о том как должно выглядеть приложение в идеале.

Композер тоже изи

Устанавливаешь
Используешь команды require, install, update...

Не забываем под автоподгрузку классов https://getcomposer.org/doc/01-basic-usage.md#autoloading

https://getcomposer.org/doc/00-intro.md
https://getcomposer.org/doc/01-basic-usage.md


Готово! Теперь вы знаете php и вы восхитительны!

Надеюсь ты правда не знал всего этого и я не зря это писал
Аноним 31/12/17 Вск 17:29:09 #384 №1114528 
>>1114521
Спасибо, анон. В ООП пытался, писал простые классы, в твоём примере смотрю уже даже тип данных User есть, это сахар от какого то фрэймворка?
> public function addUser(User $user)

Все эти поля, пространство имён, приватные поля... сложна :-( и нудно но уж в этом-то году я точно выучу РНР ахахахха
Аноним 31/12/17 Вск 17:30:10 #385 №1114529 
>>1114528
Что такое сахар?
Аноним 31/12/17 Вск 17:45:12 #386 №1114532 
>>1114528
Это имя класса User

Любой класс можно объявить как тайпхинт

https://secure.php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration
Аноним 31/12/17 Вск 17:52:05 #387 №1114534 
>>1114529
https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%B0%D1%85%D0%B0%D1%80
Аноним 31/12/17 Вск 18:07:36 #388 №1114538 
>>1114532
Лихо, даже не знаю, где такое может пригодиться. РНР развился со времен 5.0/5.1 которые я учил оч сильно. Спасибо, антош, за старания.
Аноним 31/12/17 Вск 18:12:19 #389 №1114539 
С наступившим всех! Желаю всем за год, а то и за меньший срок перестать быть двачерами и стать мега-супер-залупер программистами Не мамкиными и быть конкурентно-способными.

Скидываю MY JAAAAM
https://youtu.be/dSLcZ4yR-Ck?t=34m55s
https://youtu.be/dSLcZ4yR-Ck?t=36m10s
https://youtu.be/fkYIAdJvP5Q?t=38m45s
https://soundcloud.com/rootkitmusic/rootkit-good-2-go-feat-tylor-maurer
https://soundcloud.com/thisisechelon/ghastly-goldplate-dogs-in-the-house
https://soundcloud.com/mustdiemusic/hellcat-habstrakt-remix
https://soundcloud.com/jadebluemusic/bodyrox-ft-luciana-yeah-yeah-jade-blue-bootleg
Тут почти моя сокровищница, на следующий год еще раскрою. Но только избранный найдет путь дальше.
Аноним 31/12/17 Вск 18:16:15 #390 №1114540 
Тут разговор про Си пошел смотрю. Но по факту - Если вы знаете Английский, да так что аж на C2 уровне, то естественно у вас есть доступ к стандартам, а это огромная сила, могущество.
Если знаете английский - Выучите все остальные языки без проблем и станете полиглотом.
Знаете Си - Знаете все языки программирования.
Аноним 31/12/17 Вск 18:41:13 #391 №1114547 
>>1114494
выброси книги котерова, бро. мой тебе совет. это говно мамонта. читай нормальные книги по ооп-языкам (джаве, например), мануал php и реальный код (симфони, например). еще есть http://www.phptherightway.com/ для ознакомления с тем, что изменилось с 2008.

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

(сорри за нотки иронии)
Аноним 31/12/17 Вск 18:46:26 #392 №1114549 
>>1114540
если ты так думаешь, то ты очевидно не знаешь английский и себя обманываешь типа "вот в этом главная проблема". узнаешь и поймешь, что надо сидеть на жопе и каждый язык учить минимум полгода, погружаясь в хаос новой инфы и чувствуя себя беспомощным и никчемным достаточно долго, прежде чем придет какая-то уверенность.

также очень спорная мысль, что зная процедурный низкоуровневый язык программирования, ты типа легко выучишь высокоуровневый ООП. ну хз. ты сам на каком уровне знаешь си? хорошо? а какие еще языки?
Аноним 31/12/17 Вск 18:51:01 #393 №1114550 
>>1114540
то есть, ты может и знаешь, я хз. я вот знаю и просто читаю инфу на английском. не представляю, как можно быть программистом и не знать английский, а ждать, пока кто-то соизволит перевести. никакой супер форы это не дает, скорее я просто (как и многие тут) имею доступ к той инфе, которая открыта для всего мира (американцев, европейцев, индусов). а ведь по двум из трех самых популярных фреймворков на php даже нет русской документации.

но вот почему знание английского равно знанию всех остальных языков?
Аноним 31/12/17 Вск 19:06:45 #394 №1114554 
>>1114547
Для меня это все стало открытием. Я понятия не имкл про пеар и композер. Я з говорю, брал нуленый цмс а ля DLE и к нему уже писали/искали плагины. Это сейчас composer init, composer install yoba-framework и у тебя почти готовый проект, осталось только пару зависимостей устранить и шаблон под себя в каком-нибудь css-шаблонизаторе переделать.
Аноним 31/12/17 Вск 19:09:39 #395 №1114556 
>>1114549
>если ты так думаешь, то ты очевидно не знаешь английский и себя обманываешь типа "вот в этом главная проблема".
Что? Знаю английский на уровне B2 и это за год с A2. Свободно читаю документацию, использую речь и понимаю диалоги. Пишу каждый день слова, заучиваю и все автоматизированно тащемта, даже грамматика.
>узнаешь и поймешь, что надо сидеть на жопе и каждый язык учить минимум полгода, погружаясь в хаос новой инфы и чувствуя себя беспомощным и никчемным достаточно долго, прежде чем придет какая-то уверенность.
Что? Ничего не понятно что ты пытаешься сказать, такое ощущение что ты проецируешь свои проблемы на меня, попытаюсь ответить. Ну во первых как человек который не говорил, что он ЗНАЕТ английский, а знает на уровне B2 отвечу, что язык не выучить НИКОГДА и НИКАКОЙ, это невозможно, можно выучить его составляющие и ими руководствоваться. (Английский кстати я подтянул только потому, что еще русский начал учить)
>также очень спорная мысль, что зная процедурный низкоуровневый язык программирования, ты типа легко выучишь высокоуровневый ООП.
Не знаю все учат без проблем и не жалуются, опять же как будто свои проблемы проецируешь или придумываешь там что-то, завязывай, тебе не знать что там у других людей.
>ты сам на каком уровне знаешь си? хорошо? а какие еще языки?
Не знаю критерии хорошего в Си, но думаю лапше-код избегаю. Другие языки: Паскаль, Фортран, Си/C++/C#, Java, LUa, Lisp, Go и все другие, ну еще Баш.
Сам Страуструп говорил, что без Си не понять С++, и в своей же книге пишет, что сначала нужно пройти курс Си, дабы понять содержимое, оно и верно, новичок не поймет С++ и зачем он, Си вообще должен быть базой после Фортрана или Паскаля.
>то есть, ты может и знаешь, я хз. я вот знаю и просто читаю инфу на английском. не представляю, как можно быть программистом и не знать английский, а ждать, пока кто-то соизволит перевести. никакой супер форы это не дает, скорее я просто (как и многие тут) имею доступ к той инфе, которая открыта для всего мира (американцев, европейцев, индусов). а ведь по двум из трех самых популярных фреймворков на php даже нет русской документации.
А еще переведенная информация передается не в том контексте в каком ее предоставляют и многие понятные места в русском переводе сложные в силу лексической аутентичности.
>но вот почему знание английского равно знанию всех остальных языков?
Английский язык состоит из Французского, Латинского, Греческого(Чуть-чуть), грамматические правила не имеют никаких исключений, есть единые правила, но например в одном языке, возьмем английский, есть отличные грамматические временные глаголы, сам язык аналитический и страдает дефицитом того, что есть в Русском синтетическом и замещает этот недостаток своими Tense глаголами. Т.е языковые отличия нулевые. Если есть опыт в освоении сути одного языка, то с каждым новым выученным языком все становится проще и проще, выучишь Латинский - Без проблем освоишь Испанский, или Английский, или Немецкий, или Французский. Т.е вся суть лежит в ядре.
Аноним 31/12/17 Вск 19:11:09 #396 №1114557 
>>1114547
У меня в электронном виде макулатуры по пограмированею отдельный внешний диск на 1 Тб, там асма до всяких бэйсиков... все в свое время пробовал изучать. Котеров и Симдянов мне по душе, стоит заметить, что их труд для уже представляющих что такое программирование. Стиль изложения сложноват, но это потому что книга не для новичков в программировании. В целом неплохая книга, объемная.

Я другие читал, в том числе от расмуса нашего лердорфа.
Аноним 31/12/17 Вск 19:22:23 #397 №1114558 
Всплакнулось
https://github.com/visavi/rotor
Аноним 31/12/17 Вск 19:53:09 #398 №1114563 
>>1114556
>Паскаль, Фортран, Си/C++/C#, Java, LUa, Lisp
воу-воу, профессор, полехче

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

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

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

>Си вообще должен быть базой после Фортрана или Паскаля

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

в остальном мне ход твоей мысли понятен, но по мне так ты сильно теоретизируешь. чтобы выучить английский и испанский, никто не учит сначала латинский. все учат сразу то, что нужно, и нормально живут. также и с ЯП.
Аноним 31/12/17 Вск 19:59:37 #399 №1114568 
>>1114554
да, только проекты пропорционально усложнились и выросли в объеме по сравнению с тем, что было в ранние годы.

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

может ошибаюсь, давно не интересовался его литературой. если актуальные скинешь примеры его кода, будет интересно.
Аноним 31/12/17 Вск 20:06:46 #400 №1114576 
>>1114563
Не я ничего против современных языков не имею, это даже хорошо что преподают как базу их вместо Паскалей и Фортранов, я просто не знаю чему там сейчас учат. Но Питон правда уши за этот год прожужжал, неплохой язык если так посмотреть, интересные вещи выдает. Мне понравилось как с ним ботнет создали для Твиттера.
Ну и Латинский учить не надо, но как пример сойдет. Си это Латинский если подумать. Не обязателен, но без него трудно будет познавать другие языки, чем с ним, что наоборот.
Аноним 31/12/17 Вск 20:21:33 #401 №1114579 
>>1114568
https://github.com/igorsimdyanov/php7
Аноним 31/12/17 Вск 21:13:22 #402 №1114606 
>>1114579
котеров видимо не в курсе, что такое PSR
https://github.com/igorsimdyanov/php7/blob/master/phpdocs/PHP7/Page.php

if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);
за такое бьют по рукам в конторах, где следят за качеством кода. к сожалению, видимо, котеров о существовании таких контор за 40 лет преподавательской деятельности пока не узнал.

https://github.com/igorsimdyanov/php7/blob/master/mail/handler.php
блин, ну книга по ПХП7, а пишет так, как на ПХП4 писали на моей первой работе. это просто полный пиздец. там в каждой строчке пиздец.

https://github.com/igorsimdyanov/php7/blob/master/exec/dead.php
он упоротый что ли ставить ?>

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

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

короче, если тебе нравится, то ты читай конечно, список тем вроде обширный. но учитывай, что писать код как он - не надо.
Аноним 31/12/17 Вск 21:17:06 #403 №1114607 
>>1114579
писать код как он - не надо, а так как программирование - это наука про код, лучше сожги это говно. больше приобретешь

это как учить детей русскому языку и самому на уроках употреблять слова типа "ложить" или "созвОнимся". невежество
Аноним 31/12/17 Вск 21:54:36 #404 №1114616 
>>1114606
Так это код, скорее всего, с 5.0/5.1 версии немного адаптированный местами под 7 версию. На то время это может норма была?

Мне как новичку в 2008 понравилась книга, хоть я её так до конца и не осилил. Ошибок там, кстати, хватало, у Котерова есть форум, где пишут про косяки, их там...

Я тебя услышал, анон. Советуй норм лит-ру for dummies beginners
Аноним 31/12/17 Вск 21:54:54 #405 №1114617 
>>1114607
Я тебя услышал
Аноним 31/12/17 Вск 22:30:43 #406 №1114624 
>>1114616
котеров пытается делать книги а-ля англоязычные по джаве и плюсам (например от герберта шилдта), но не хватает скиллов и желания что-то там изучать. подозреваю, что он последний реальный код писал на заре двухтысячных годов, а потом только учил людей.

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

есть учебник ОПа, но там совсем основы. также есть его паста на гитхабе (ссылки вверху темы). я еще рекомендую курсы от pr-of-it, у них есть три курса, внезапно php1, php2 и php3. там по качеству кода и по самой подаче материала все охуенно и хитро построено. если жалко денег, можешь качнуть с торрентов. я сам частично качал, а частично за бабло проходил.

https://github.com/jupeter/clean-code-php вот скорее не книга (очень уж урезана по сравнению с оригиналом), а портированный с джавы сборник best practices, тоже полезно посмотреть.
Аноним 31/12/17 Вск 22:46:57 #407 №1114627 
>>1114624
Спасибо, ещё раз. Не знаю на какой хуй ты на меня воемя тратишь, но тем не менее спачибо. Почитаю.
Аноним 01/01/18 Пнд 00:29:53 #408 №1114632 
>>1114624
Чем именно тебя Котеров не устраивает. Читал его последнюю. По моему вполне себе вышло неплохо.
Аноним 01/01/18 Пнд 00:48:44 #409 №1114636 
>>1114632
братюнь, вот тут >>1114606 примерно ответил. если в последней книге ситуация поменялась, скинь примеры кода, обсудим и сравним с тем, что было раньше (на примере https://github.com/igorsimdyanov/php7)
Аноним 01/01/18 Пнд 00:58:12 #410 №1114640 
>>1114606
Какая-то критика уровня батхёрта. За что бьют по рукам. Где конкретно неправильно? А как надо было?
>там в каждой строчке пиздец.
Что конкретно не так? Опять не объяснил.
>он упоротый что ли ставить ?>
В чём неправота то? Так можно делать. Или объясни почему ты считаешь это неправильным?
Я не защищаю Котерова, но такая критика - это просто размещение ссылок на гитхаб и "Фу пидор , код говно." Как-то хочется из треда научиться как кодировать стоит а как нет. А в итоге после таких комментариев сидишь в шоке и думаешь "А что конкретно то не так?"
И да, я понимаю что мб ты работешь в теме лет 10 и для тебя всё очевидно. Но для новичка типа меня нет.
Аноним 01/01/18 Пнд 01:45:40 #411 №1114646 
>>1114640
я не 10 лет работаю, но не надо работать 10 лет, чтобы понимать как следовать стандартам.

давай по пунктам, которые есть
1. есть такая штука http://www.php-fig.org/psr/psr-2/ это разработчики языка и некоторых важных вещей в нем (например, популярных фреймворков) собираются и обсуждают гайдлайны, по которым хорошо бы писать код, чтобы каждый не выдумывал свои стили, отступы и прочее. котеров на эти гайдлайны кладет болт https://github.com/igorsimdyanov/php7/blob/master/phpdocs/PHP7/Page.php
посмотри сам и сравни с примером кода
2. у котерова
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);

надо
if (empty($picture)) {
mail($mail_to, $thm, $msg);
} else {
send_mail($mail_to, $thm, $msg, $picture);
}

в отличие от js, в пхп для читаемости и очевидности пишут фигурные скобки ВСЕГДА.

3. ставить закрывающий тег в файле, который содержит только php-код (без html), не нужно, т.к. это может привести к появлению лишних пробелов при выполнении и к ошибке во всяких конструкциях include, require, работе с буфером и некоторых других функциях. поэтому его не используют - чтобы не объебаться. котеров на это кладет хуй, т.к. не видел реальный код.

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

> if (!preg_match($pattern, $_POST['mail_to'])) {
exit("Введите адрес в виде [email protected]");
}
видимо, автор книг по php не слышал про исключения.

> $_POST['mail_subject'] =
>htmlspecialchars(stripslashes($_POST['mail_subject']));
зачем это на разных сточках?

> $_POST['mail_msg'] =
>htmlspecialchars(stripslashes($_POST['mail_msg']));
> $msg = $_POST['mail_msg'];

я может чего-то не понимаю, но почему не сделать $msg = htmlspecialchars ... ?

> if (!$fp) {
> print "Файл $path не может быть прочитан";
> exit();
> }

почему выше написано exit("Введите адрес в виде [email protected]") а тут сначала print, а потом exit без сообщения?

> if(empty($_POST['mail_to'])) exit("Введите адрес получателя");
> if (!empty($_FILES['mail_file']['tmp_name'])) {
> if(!mail($to, $thm, $multipart, $headers))
> {

чем обсуловлено то, что в каждой строчке по-разному написано?

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

и по другим файлам я не смотрел, просто чувак живет в каком-то параллельном мире, где все пишут код на 486-х и выходят в интернет по модему. мне немного обидно за всю ситуацию, т.к. он позволяет себе учить новичков и берет за это деньги. а новички потом такие "оп, заебись!", и идут работать в битрикс за копейки на всю жизнь, хороня свою карьеру php программиста лол
Аноним 01/01/18 Пнд 01:49:56 #412 №1114647 
>>1114646
Спасибо анон, теперь я всё понял. Ты няша.
Аноним 01/01/18 Пнд 01:55:32 #413 №1114649 
>>1114640
алсо, чем плоха простыня кода

согласно PSR-1:
>Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both.

там же в одном файле и функция, и объявление переменных, и выходы с сообщениями, и редирект.

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

if (!sendMail($params)) {
throw new Exception(...);
} else {
redirect($address);
}
Аноним 01/01/18 Пнд 01:55:52 #414 №1114650 
>>1114647
на здоровье
Аноним 01/01/18 Пнд 17:06:15 #415 №1114711 
Как в Апаче настроить отдельный сайт?

В PHP делал так:

>C:\prоject\public>php -S 127.0.0.1:9001 rоuter.php

>C:\anоther-prоject\public>php -S 127.0.0.1:9002 rоuter.php

и хорошо. А теперь понадобился PDО, но он требует какой-то драйвер:

>PDOException: could not find driver

Поставил Апач, майэскуэль. Настроил. Если все кинуть в htdоcs (она вроде как корень?), лезут одни фатальные ошибки класс куд нот би лоадед и т.п. Бился, бился с путями, так ничего не заработало.

Как сделать чтобы как в PHP: прописал паблик папку, роутер и все работает?
Аноним 01/01/18 Пнд 17:29:37 #416 №1114716 
>>1114711
В php.ini удалить ; перед строкой extension=php_pdo_mysql.dll
Аноним 01/01/18 Пнд 17:34:09 #417 №1114717 
>>1114716
О! Заработало в PHP!

А что по Апачу? Или он устарел и не стоит в нем разбираться?
Аноним 01/01/18 Пнд 17:36:06 #418 №1114718 
>>1114717
если задаешь такой вопрос, то да, лучше nginx поставь. там намного гибче можно настраивать конфиги, разные версии пхп для разных сайтов, регулярки в путях папок и прочие радости.
Аноним 01/01/18 Пнд 17:49:22 #419 №1114721 
>>1114718
Хорошо, попробую его, спасибо!
Аноним 01/01/18 Пнд 18:03:41 #420 №1114723 
>>1114717
Апач не устарел. Подключай РНР к апачу и создавай виртуальные хосты для своих сайтов.

на мой взгляд, тебе лучше взять lamp/denwer и не засирать ветку своими сообщениями
Аноним 01/01/18 Пнд 18:35:01 #421 №1114726 
fat free vs slim. Что лучше? Почему первый практически не используется, а второй щас в тренде?
Аноним 01/01/18 Пнд 18:43:33 #422 №1114728 
>>1114726
Почему joomla говно, а wordpress тоже говно, но в тренде?
Аноним 01/01/18 Пнд 18:48:31 #423 №1114729 
>>1114728
ну я посмотрю ты философ дохуя, а мне интересно что выбрать для разработки, потому что индустрия развивается быстрее, чем я успеваю за ней следить
Аноним 01/01/18 Пнд 19:06:23 #424 №1114734 
>>1114729
Изучай перманентно все что в тренде. Либо работай со студией какой-нибудь, которая пилит сайты на своем движке. Ларавел или зенд в штатах в почете. Слим/берд/вордпресс для одностраничников. Никоо всерьез на этой залупе не работает. Будешь до конца дней своих хеллоу ворлды писать на этиц фреймворках.
Аноним 01/01/18 Пнд 19:30:07 #425 №1114741 
>>1114734
мне для своих проектов надо, а не на дядю. расклад такой, что для крупного проекта я бы выбрал Ларавел, даже несмотря на то, что он тормозной, но я такие проекты не разрабатываю. чаще это одностраничники, где даже не всегда авторизация есть, но нужны всякие плюшки типа мультиязычности, поэтому совсем уже деревянные фрейморки не подходят. вот и выбираю.
Аноним 01/01/18 Пнд 19:30:09 #426 №1114742 
https://habrahabr.ru/post/267721/ сравнение апача и нжинкса. также стоит учитывать, что статье больше двух лет, сейчас на новых больших проектах никто апач не использует.

>>1114723
какой нахуй денвер? он с 5.3 не обновляется. 5.3 вышел в 2011 году, кажется. на мой взгляд, не надо давать плохие советы
sageАноним 01/01/18 Пнд 19:35:28 #427 №1114743 
>>1114741
> Одностраничники
> без авторизации
> не на дядю
> мультиязычность, тормоза и т.п.

Ахахаххахахаха спешите видеть кретина итт. Набигаем ололо гнобим и гоним отсюда сраными тряпками.

Дебил или изучай езык погромирования хтмл5, джейси и цэсэс в придачу. Клоун ебаный. Сажи тебе уебку.
Аноним 01/01/18 Пнд 19:35:59 #428 №1114744 
>>1114742
Я в душе не ебу в какой там стадии денвер, ибо не юзаю.
Аноним 01/01/18 Пнд 19:40:11 #429 №1114745 
>>1114743
этот петушок порвался, выносите его из треда
Аноним 01/01/18 Пнд 19:55:12 #430 №1114748 
>>1114744
а зачем тогда советовать
Аноним 01/01/18 Пнд 19:58:38 #431 №1114749 
>>1114748
Я же не знаю какую именно версию пхп учит вопрошающий. Может ему и денвера за глаза хватит. Ну и потом, я же приоритеты расставил на первом месте ламп, чо доебался то до меня?
Аноним 01/01/18 Пнд 20:05:40 #432 №1114750 
>>1114749
чтобы придать огласке уебищность денвера, конечно же.

алсо, у денвера есть современный аналог для винды - open server. там пхп вплоть до 7.2 и на выбор нжинкс с апачем. кому лень ставить по-взрослому на линуксе, можно использовать его.
Аноним 01/01/18 Пнд 20:16:36 #433 №1114753 
>>1114750
Убедил, антуан
Аноним 01/01/18 Пнд 22:49:04 #434 №1114790 
>>1113402
Ну вот смотри. На дваче, если выложить картинку, то текст будет с боку. Без редактирования картинка просто находится в строке и распидорашивает её. Мне нужно чтоб в одном случае картинка была справа как на вики и в другом случае слева как на дваче.
Аноним 01/01/18 Пнд 23:02:04 #435 №1114792 
Как жить, если идея, казавшаяся тебе супер-крутой, уже реализована каким-то фреймворком. Конечно, можно использовать его, но как же досада?
Аноним 01/01/18 Пнд 23:46:22 #436 №1114809 
>>1114792
Хитро усмехнуться, погуглить чем их реализация кого-то не устраивает и сделать лучше.
Аноним 01/01/18 Пнд 23:56:08 #437 №1114811 
Блин, ничего не понимаю в ассоциативных массивах. Как их распарсивать то?
Ладно когда есть один ассоциативный, а когда он многомерный, ещё и вместо индексов имена? Как рогом упёрся и нифига понять не могу.
Какие-то => появляются, а как они работают я понять не могу. Я ведь по обе стороны => вообще любую переменную пишу. Прямо голова взрывается.
Аноним 01/01/18 Пнд 23:59:44 #438 №1114812 
>>1114811
что значит "как распарсивать"? в чем проблема-то?
напиши конкретную задачу, что тебе надо с ним сделать.
Аноним 02/01/18 Втр 00:00:14 #439 №1114813 
>>1114811
На самом деле это просто переменные с индексом-переменной.
Аноним 02/01/18 Втр 00:47:37 #440 №1114826 
>>1114812
https://ideone.com/qdHhd0

Ну вот я накидал пример.
И если обработать какой-нибудь одномерный массив просто. Но например из многомерного массива $cars вывести просто имена фирм, например "Nissan" оказалось довольно сложно. Думал над этим часа два наверное. А когда в итоге написал, то понял что скорее методом тыка получилось. И вообще не понимаю как это работает.
Например почему $key распарсивается в итоге на $params и $value? Как он узнаёт что там правильные данные? Какая-то каша в голове от этого. А если например там виесто одного из параметров - массив вложенный?
Аноним 02/01/18 Втр 00:49:29 #441 №1114828 
>>1114728
Потому-что Wordpress выглядит няшно и имеет адекватный интерфейс.
Аноним 02/01/18 Втр 00:55:49 #442 №1114831 
>>1114809
Так появилась Mongo в своё время.
Аноним 02/01/18 Втр 00:58:07 #443 №1114832 
>>1114711
Что-то каша какая-то. У тебя ошибки сыпятся
>лезут одни фатальные ошибки класс куд нот би лоадед и т.п. Бился, бился с путями, так ничего не заработало.
А ты уже в PDO полез. Для начала настрой и выведи хотя-бы helloworld. А лучше просто поставь OpenServer. А уже потом к базе подрубайся.
Аноним 02/01/18 Втр 01:09:24 #444 №1114833 
Willy-Wonka-Chocolate-Factory-GIFs[1].jpg
>>1114826
>там виесто одного из параметров - массив вложенный

А читал ли ты документацию, дружок?

http://php.net/manual/ru/language.types.array.php
>key может быть либо типа integer, либо типа string. value может быть любого типа.

>Массивы (тип array) и объекты (тип object) не могут использоваться в качестве ключей. При подобном использовании будет генерироваться предупреждение: Недопустимый тип смещения (Illegal offset type).

На твоем примере https://ideone.com/7RmzCn
Аноним 02/01/18 Втр 01:18:14 #445 №1114834 
>>1114826
во-первых, посмотри этот пример: https://secure.php.net/manual/ru/function.array-search.php#116635

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

также у тебя путаница с названием переменных внутри foreach. там всегда пишут конструкцию $array as $key => $value; в каждом элементе массива $array есть ключ и значение.
>key может быть либо типа integer, либо типа string. value может быть любого типа.
https://secure.php.net/manual/ru/language.types.array.php

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

как он узнает что там правильные значения? ну это задача интерпретатора, можешь посмотреть сишные исходники php и сам выяснить. я не смотрел, как именно это реализовано.
Аноним 02/01/18 Втр 01:18:50 #446 №1114835 
>>1114833
о, братюнь, опередил меня с цитаткой из мануала
Аноним 02/01/18 Втр 01:19:10 #447 №1114836 
>>1114832
Я ж говорю, настроил, ит воркс. Даже PHP подрубил, если смотреть из локалхоста, работает. Но если раньше у меня на каждый урок своя папка была и один вендор на все проект на уровень выше, композером хуяк хуяк зависимости, в цмд одной строчкой запустил урок — холосо! а тут одна папка эштидокс, как мне блджажд разграничить уроки, если он не видит больше мой вендор?
Аноним 02/01/18 Втр 01:21:16 #448 №1114837 
>>1114836
В папке htdocs создай папку "mypornsite.com".
Профит.
Аноним 02/01/18 Втр 01:37:13 #449 №1114840 
Capture.JPG
>>1114837
Ну я понял твою мсль, но...
Аноним 02/01/18 Втр 01:47:24 #450 №1114843 
>>1114833
>>1114834
Как всегда помог разобраться. Как же хорошо что ты есть. Спасибо тебе анон.
Аноним 02/01/18 Втр 01:57:47 #451 №1114847 
Простенькая задачка. Хочу снизить количество запросов к API и увеличить скорость загрузки и отображения данных на моём сервере. API генерит данные в зависимости от запроса и данные поступают почти что всегда разные. Параметры запроса передаются в URL при обращении к API.

Придумал алгоритм. Беру URL, делаю запрос, получаю данные. Далее, беру только что использованный URL и получаю из него MD5 хэш, использую его в качестве ключа, под которым положу только что полученные данные в memcached. При следующем запросе получаю MD5 хэш из ссылки и спрашиваю memcached, лежит ли в нём что-то под этим ключом. Если да, беру данные из memcached и возвращаю на клиент.

Норм алгоритм? Почему-то меня преследует мысль,
что можно сделать намного проще, но я тупой(
Аноним 02/01/18 Втр 02:14:16 #452 №1114852 
>>1114847
Спиздил и запатентовал твою идею. Единственный вопрос, может ли переполниться memcached? Не, серьезно, идея годная, нужно попробовать.
Аноним 02/01/18 Втр 02:20:52 #453 №1114854 
>>1114852
>может ли переполниться memcached?
Ну я не планирую класть что-то в memcached навсегда. У API есть эндпоинт, позволяющий по IP-адресу клиента определить его город, страну и координаты города. Эти данные я могу положить к кэш на месяц, например. Есть эндпоинт, позволяющий получить среднюю цену на билет из %город_нейм% в %город_нейм% на текущий месяц. Эти данные я планирую класть в кэш на 24 часа. Пока пользователь будет лазить по сайту и периодически запрашивать эти данные, ему они будут отдаваться из кэша. Если цена спустя сутки изменится, то зайдя на сайт повторно клиент уже увидит новые данные, которые сразу же будут опять закэшированы на 24 часа. Щас напишу, кароч.
Аноним 02/01/18 Втр 02:37:32 #454 №1114859 
Насколько реально джуну вкатититься и устроиться на работу программируя симфони, ларавел?
Аноним 02/01/18 Втр 02:52:16 #455 №1114862 
>>1114854
Заебись, работает.
Аноним 02/01/18 Втр 03:14:45 #456 №1114866 
>>1114847
... В итоге и тебя 9000 ключей, по которым 9000гигов закешированных данных лежит?
Аноним 02/01/18 Втр 03:15:58 #457 №1114867 
>>1114859
Примерно на 78.675% реально. Задавай пожалуйста более конкретные вопросы.
Аноним 02/01/18 Втр 03:17:12 #458 №1114869 
>>1114854
Чот хрень. А если данные изменились за час? На кой там кешированные данные?
Аноним 02/01/18 Втр 03:29:50 #459 №1114871 
>>1114869
Актуальность некоторых данных не критична. К тому же, я более чем уверен, что API тоже не проводит ежеминутную проверку актуальности данных и тоже отдаёт мне их из кэша. Свой же кэш я пишу только для того, чтобы ускорить загрузку некоторых страниц и как можно скорее отдать пользователю контент. Это важно. Например, есть отрывочек кода, где мне нужно получить данные на год вперёд по каждому месяцу, но API разрешает мне за раз взять данные только за один месяц. на таких страницах колесо загрузки крутится по 2-3 секунды Приходится в цикле отправлять 12 запросов. Чтобы избежать этой бомбёжки API и не получить пизды от моих партнёров, предоставивших доступ к API я и пишу кэш.

>>1114866
Ну, сомневаюсь, что там прям так дохуя это всё будет весить. Буду следить за размером кэша. Вдруг что - у моего хостера дополнительный SSD-диск на 50GB стоит 7$.
Аноним 02/01/18 Втр 04:19:01 #460 №1114875 
>>1114871
>Буду следить за размером кэша. Вдруг что - у моего хостера дополнительный SSD-диск на 50GB стоит 7$.
А, я еблан. Memcached же в оперативку всё складывает.
Аноним 02/01/18 Втр 04:50:41 #461 №1114878 
>>1114875
Вот и я про что.
Аноним 02/01/18 Втр 18:12:28 #462 №1115021 
Как проверить ассоциативный массив имеют ли все его элементы значение null или нет?
Аноним 02/01/18 Втр 18:27:07 #463 №1115024 
>>1115021
foreach или array_map()
Аноним 02/01/18 Втр 19:14:09 #464 №1115036 
>>1115021
как бы в пхп вообще поебать, ассоциативный массив или нет. ты почему-то к этому привязываешься (если ты >>1114826 анон), мол ассоциативные массивы - это принципиально что-то другое. а нихуя, у них просто в качестве индекса буковки, а не циферки
Аноним 02/01/18 Втр 19:21:26 #465 №1115040 
>>1115021

function isArrayEmpty(array $data): bool
{
foreach ($data as $value) {
if (is_null($value)) {
return false;
}
}
return true;
}
Аноним 02/01/18 Втр 19:26:47 #466 №1115042 
>>1115040
Что это у нас тут?

Г О В Н О К О Д
О
В
Н
О
К
О
Д

Аноним 02/01/18 Втр 20:04:42 #467 №1115054 
>>1115024
>>1115036
>>1115040
Я сделал так: if (in_array(!null, $array)) {
...} Это говнокод?
У меня от валидатора приходит ассоциативный массив с ошибками. Нужно чекнуть если он пустой, то тогда добавляем данные в БД.
Аноним 02/01/18 Втр 20:37:31 #468 №1115065 
>>1115042
ну предложи свой вариант
Аноним 02/01/18 Втр 20:43:25 #469 №1115067 
>>1115042
Аргументируй, а то несерьезно как-то.
Аноним 03/01/18 Срд 00:23:29 #470 №1115119 
>>1115065
>>1115067
Вам разрабы пыхи дали in_array, array_filter и array_walk. Вы же пишите свой говнокод велосипед.

Мне не хочется давать рабочий пример, я вам указал путь. Считайте удочку дал, а уж рыбку съесть или на хуй сесть это уже вы как нибудь сами.
Аноним 03/01/18 Срд 00:32:45 #471 №1115121 
>>1115119
Ебет, зашёл в тред по пыхе, а тут злой дядя
Аноним 03/01/18 Срд 00:40:48 #472 №1115122 
Сколько в среднем времени потребуется для изучения PHP? Немного знаю C# на базовом уровне.
Аноним 03/01/18 Срд 00:44:47 #473 №1115123 
>>1115121
Злой пиздец. Была бы возможность, я бы прутом вам по рукам бил за говнокод ведосипедостроительство. Есть же дока, изучайте. Нет блядь, my way... и пусть весь мир подождёт. Поверьте, ваш максимум в программировании на рнр — использование готового кода, функций, который был написан, когда вы представляли из себя семенную субстанцию в тестикулах ваших прородителей.

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

Всё.

На этом все ваше программирование и закончилось.
Аноним 03/01/18 Срд 00:46:56 #474 №1115124 
>>1115122
От недели до бесконечности. Зависит от того, как ты будешь подходить к процессу. Что именно ты хочешь писать.

Сам язык прост. Сложнее вникать в фреймворки, шаблонизаторы и ООП. Но это практически идентичные базовые вещи для любого ЯП.
Аноним 03/01/18 Срд 01:01:35 #475 №1115128 
>>1115123
А я бы дал тебе отхлестать себя прутом.
Аноним 03/01/18 Срд 01:02:32 #476 №1115129 
>>1115123
Это не на меня ори, я не имею к челу выше отношения, я лишь зашёл в тред помочь, а тут злые
Аноним 03/01/18 Срд 01:03:05 #477 №1115130 
>>1115128
Ты доску перепутал, козлик.
Аноним 03/01/18 Срд 01:03:51 #478 №1115132 
>>1115040
пых это си от веба, жаль парней, чо уж, я тоже с пыха начинал когда-то
Аноним 03/01/18 Срд 01:11:19 #479 №1115136 
>>1115132
Пых хорош тем, что он многогранен. Не так как низкоуровневые ЯПы, но, например, я себе несколько скриптов написал а ля телефонная книна и напоминалка и запускаю все в терминале. Можно было бы на Си писать, но заняло гораздо больше времени.

А тут тебе и работа с субд, и никакой компиляции и синтаксис как у си... короче плюсов хватает.

Имхо, не самый плохой вариант для вкатывания в программирование.
Аноним 03/01/18 Срд 02:02:06 #480 №1115147 
Доброго времени суток, анон. Пишет тебе веб-макака, писатель кода пальцами на php. Опыт работы на данный момент около 8 месяцев в офисе, честно говоря - говнокожу и ничего более, шаражкина конторка с плохо налаженными процессами.
Довольно много приходится писать и на js, я стараюсь не быть идиотом и изучать инструмент хорошо. С недавних пор вообще загорелся мечтой укатиться в светлые дали js разработки, а конкретно - в Ангуляр.
И вот пришел спросить у вас совета, если найдутся люди шарящие. Я выполнил на сайте ангуляра туториал (tour of heroes), что бы вы дальше мне посоветовали, какие шаги предпринять?
Аноним 03/01/18 Срд 02:04:07 #481 №1115148 
>>1115119
во-первых, отложи свое высокомерие.

во-вторых, почитай, что такое lazy loading. если массив состоит из миллиона элементов, а надо отловить только первое не-null значение, то моя функция завершится при нем же и не будет перебирать остальные элементы. а данные тобой функции не остановятся там, где нужно - ресурсоемко получается. в итоге ты либо невнимательно прочитал задачу, либо не знаешь основ.
Аноним 03/01/18 Срд 02:11:30 #482 №1115149 
>>1115123
ты судя по манере речи и ценности твоих "советов" никакой не опытный, а банально петушок, рисующийся перед анонами. я опытных знаю, они отвечают нормально и по существу, а не "дают удочки". при реальном общении со мной ты бы свою удочку (или прут, что там у тебя в фантазиях) засунул себе в жопу, поверь
Аноним 03/01/18 Срд 02:21:45 #483 №1115154 
>>1115122
да, тема в том (наверняка сам знаешь, если писал на шарпе, но все же), что в программировании тебе платят не за то, что ты знаешь язык, а за то, что ты знаешь, что на нем написано (фреймворки, реальные проекты).

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

пхп простой, но после других языков немного ломающий мозг. если заебись знаешь шарп и писал реальные проекты, знаешь все смежное говно (sql, git и прочее), то месяц на сам язык (плотненько) и еще месяц на фреймворк, на котором хочешь работать.
Аноним 03/01/18 Срд 02:23:26 #484 №1115155 
>>1115148
Во-первых, не указывай как с вами себя вести
Во-вторых, про lazy loading мне можешь не рассказывать.
В-третьих, если у тебя массив ищ миллиона значений, то ты удостоен медали — говнокодер -2018. Твое место в шапке треда с подписью:
не будь как он.

>>1115149
Давай фейкопочту, я тебе предоставлю ирл шанс.
Аноним 03/01/18 Срд 04:45:55 #485 №1115170 
>>1115040
>Доходишь такой до изучения массивов.
>Развитие тебя как программиста останавливается.
>Надо передать данные - В МАССИВ
>Надо обработать - В МАССИВ
>Надо создать ряд элементов - В МАССИВ
>Надо вытереть задницу - МАССИВ
>Надо выйти из-за компа и пойти в магазин покушать купить - МАССИВ
У меня от таких программистов бомбит почему-то. Ещё со времён когда 5 лет назад Java изучал. Там это вообще поголовная болезнь терминальной стадии. Доходит до того, что они не понимают как задачу решать не через массив.
Аноним 03/01/18 Срд 04:56:45 #486 №1115171 
>>1115036
Что то какой-то бред. Там методы обработки разные. Смотри код.
Аноним 03/01/18 Срд 07:17:43 #487 №1115173 
>>1115148
Читайте пожалуйста анализ алгоритмов в худшем случае оно закончится за N операций где N и есть кол-во элементов массива и другого решения этой задачи нет.

Но другой вопрос что ты миллионы данных обрабатываешь массивами, аноны беспокоятся, неужели нельзя использовать базы?
Аноним 03/01/18 Срд 07:25:46 #488 №1115174 
>>1114859
Джуны это не про фреймворки, джуны это про отсутсвие опыта, первое что надо выкинуть из головы джуну это привязываение к фреймворкам, будь готов за короткое время выучить любую хуйню и разобраться в чем угодно
Аноним 03/01/18 Срд 07:27:41 #489 №1115175 
>>1114717
С апачом разбирайся,ровно столько чтобы поднять локальное окружение, а вообще все суровые сайты используют нжынкс в него можешь углубиться по самые гланды, лишним точно не будет.
Аноним 03/01/18 Срд 08:24:07 #490 №1115182 
>>1114790
У тебя с флоу проблемы?
Аноним 03/01/18 Срд 09:09:15 #491 №1115184 
>>1115175
Кому кроме васянов из колхозов в 2018 приходится nginx настраивать? Обычно всё навтраивает за тебя админ или хостер.
Аноним 03/01/18 Срд 09:28:49 #492 №1115186 
>>1115184
ну когда у тебя наступит такой момент когда тебе например какое то особенное кэширование надо на энжинксе настроить или какой то редирект интересный сделать так станет ясно кому оно надо, а так хорошо что тебе его настраивать не приходится, но понимать что там к чему крайне полезно.
Аноним 03/01/18 Срд 09:41:41 #493 №1115187 
>>1115186
> особенное кэширование надо на энжинксе настроить
Делается либо через ТП провайдера, либо через предоставленную веб морду.
>или какой то редирект интересный сделать
Что значит реддирект интересный сделать? Берёшь и делаешь. Можно даже не ковырять Nginx а тупо в PHP прописать или в JS.
>понимать что там к чему крайне полезно.
Ага, мне это уже лет 10 говорят. Надо ли говорить что за 10 лет я настраивал апач 1 раз, когда начинал PHP учить. Больше никогда к нему не прикасался.
Аноним 03/01/18 Срд 10:14:17 #494 №1115196 
>>1109863 (OP)
Решил хотя бы попытаться вкатиться к вам. И черт возьми "http://archive-ipq-co.narod.ru/" это веселая хуйня, анонасы которые это делали вы ахуенные. Хоть и амублядки
Аноним 03/01/18 Срд 10:19:07 #495 №1115198 
13491238614086.jpg
>>1115196
>амублядки
Аноним 03/01/18 Срд 10:25:07 #496 №1115202 
Вы тут ругаетесь по поводу функции проверки массива на наличие null элементов, но почему-то никто не обратил внимания, что автор вопроса явно неправильно работает с ошибками валидации.

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

Вот эта проблема. Валидатор должен возвращать массив с ошибками, а не массив со всеми ключами. Тогда и не нужно обходить весь этот массив и проверять null'-ы, достаточно будет проверки:
$errors = $validator->validate($entity);

if (count($errors)) {
// вернуть пользователю ошибки
} else {
// сохранить сущность
}

Так например сделано в Symfony:
- http://symfony.com/doc/current/validation.html#using-the-validator-service

>>1115024
array_map это о том, как преобразовать один список в другой, применяя к каждому из элементов функцию-преобразователь. Количество элементов на входе будет равно количеству элементов на выходе: https://ru.wikipedia.org/wiki/Map

>>1115198
Тут не чатик, к чему этот пост?
Аноним 03/01/18 Срд 10:27:52 #497 №1115203 
>>1115202
К чему оскорбления в мой адрес на ровном месте?
Аноним 03/01/18 Срд 11:44:15 #498 №1115216 
>>1115182
Я пока учусь, стараюсь всё делать руками.
Аноним 03/01/18 Срд 12:57:32 #499 №1115236 
>>1115216
Float и есть руки. Я не понял в чем проблема, что ты хочешь? Если хочешь сделать так чтобы в одном случае картинка была справа, в другом была слева просто создай 2 класса.
Аноним 03/01/18 Срд 13:03:07 #500 №1115237 
Не советую больше использовать Float, он - Всё.
Аноним 03/01/18 Срд 13:03:58 #501 №1115240 
>>1115203
Бля а ты веселый паря как я погляжу.
Аноним 03/01/18 Срд 13:06:22 #502 №1115242 
>>1115236
Я вообще не могу так сделать.
Аноним 03/01/18 Срд 13:16:48 #503 №1115247 
>>1115155
чтобы выдавать медали, нужен авторитет. у тебя его нет. я не знаю сколько элементов в массиве, этого нет в условиях задачи, может 10, а может 100000. а ты начинаешь оправдываться "неправильни массив кококо"
>>1115170
> еще со времен когда 50 лет назад был гендиром в майкрософте
иди выебывайся в перезвоним-тред, пожалуйста
Аноним 03/01/18 Срд 13:17:57 #504 №1115248 
>>1115247
Я всегда думал что медали для долбоебов.
Аноним 03/01/18 Срд 13:18:59 #505 №1115249 
>>1115184
>васянов из колхозов
>хостер
лол, крутой парень на шаред хостинге
Аноним 03/01/18 Срд 13:19:44 #506 №1115250 
>>1115242
А цель какая?
Аноним 03/01/18 Срд 13:20:01 #507 №1115251 
>>1115249
ты наверное когда у тебя сайт ломается, пишешь хостеру "кококо, товарищ хостер, у меня НЕ РАБОТАЕТ, почините срочно кококо!"
Аноним 03/01/18 Срд 13:20:58 #508 №1115252 
Ебать петушинный бой в ПХП ТРЭДЭ! ВОЗЬМУ ПОПКОРМ
Аноним 03/01/18 Срд 13:23:24 #509 №1115257 
>>1115184
>>1115251 это тебе было если что
Аноним 03/01/18 Срд 13:24:35 #510 №1115259 
>>1115175
>а вообще все суровые сайты используют нжынкс
Nginx в паре с апачем чаще всего работает как прокси, отдает статику сам, а другие запросы передает апачу.
Так что и то, и другое надо уметь настраивать.
Аноним 03/01/18 Срд 13:28:35 #511 №1115267 
>>1115250
Чтоб с боку от картинки был текст.
Аноним 03/01/18 Срд 13:29:11 #512 №1115268 
 .jpg
Блять почему я всегда ору с этой хуйни? Они это до сих пор не убрали, заняты своими Grid'ами и Flex'ами.
>How to center the text of a block element horizontally (more precisely: in the inline direction) even if (part of) the block is next to a float?
Аноним 03/01/18 Срд 13:29:54 #513 №1115270 
>>1115267
https://www.w3schools.com/css/css_float.asp
https://www.w3schools.com/css/css_margin.asp
Аноним 03/01/18 Срд 13:32:15 #514 №1115273 
>>1115252
да, лол. видимо, не все программисты используют каникулы для написания своих опесорс-проектов
Аноним 03/01/18 Срд 13:33:51 #515 №1115279 
>>1115273
Бля проиграл.
Аноним 03/01/18 Срд 13:34:18 #516 №1115281 
3434343.gif
Аноним 03/01/18 Срд 13:36:03 #517 №1115284 
>>1115270
Спасибо, посмеялся над собой. Пойду таки сначала выучу всё, а потом буду пытаться закрепить.
Аноним 03/01/18 Срд 13:36:19 #518 №1115285 
>>1115259
это ты скорее говоришь про проекты, запущенные несколько лет назад. новые проекты чаще всего используют просто нжинкс из-за того, что php-fmp работает быстрее, чем php как служба апача. ну и из-за удобства.

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

если ты агитируешь за связку апач+нжинкс для новых проектов, то подскажи плюсы апача, будет интересно
Аноним 03/01/18 Срд 13:37:48 #519 №1115287 
>>1115284
Ну я бы советовал параллельно все делать, быстрее прогресс пойдет.
Аноним 03/01/18 Срд 13:39:36 #520 №1115288 
>>1115285
>php-fpm
фикс
а то такой анон пошел доебчивый
Аноним 03/01/18 Срд 15:38:20 #521 №1115337 
>>1115175
Мне и надо локальное, но походу php -S это мой предел. 2 дня читал, ничего не откладывается в голове, боюсь браться за майэскуэл (что, теперь на каждый чих документации сотни страниц? А я думал PHPnet это самый сложный шаг).
Аноним 03/01/18 Срд 16:17:46 #522 №1115348 
изображение.png
Есть ли смысл в сущностях доктриновской орм прописывать type-hints у геттеров и сеттеров, если в аннотациях они и так стоят?
Аноним 03/01/18 Срд 17:18:31 #523 №1115376 
>>1115202
да, но это анон написал уже после того, как задал изначальный вопрос. ты рассуди нас, корректно ли использовать foreach чтобы ускорить обработку больших массивов или нет?
Аноним 03/01/18 Срд 17:41:18 #524 №1115386 
>>1115257
>>1115251
Вангую что ты школьник без опыта работы вообще. Сейчас у меня 126 сайтов на том или ином хостере. Никогда за всю практику такой ситуации небыло.
Аноним 03/01/18 Срд 17:42:27 #525 №1115387 
>>1115268
<center>
Но местные этот метод хуесосят. Пушо "УСТОРЕЛ БЛЯЯЯЯЯЯЯЯЯЯЯ"
Аноним 03/01/18 Срд 18:21:09 #526 №1115400 
>>1115386
вообще не угодал.
31, последние два года работаю в достаточно большой конторе с саас-продуктом. я понимаю, что ты клепаешь лендосы (ну ладно, не только лендосы), поэтому у тебя вопросы решаются хостингом, но серьезные проекты всегда работают на своих vds и там полезно представлять работу сервера, даже если ты не админ.

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

плюс у меня на локальной машине всегда стоит нжинкс с последним пхп и днс-сервером, чтобы всегда иметь возможность разворачивать свои проекты сначала у себя. а у тебя, полагаю, нет.
Аноним 03/01/18 Срд 18:36:37 #527 №1115402 
>>1115348
Я дублирую. Это же по сути разные вещи - аннотации смотрит доктрина, а тайп-хинт аргуметов и ретурна сам интерпретатор
Аноним 03/01/18 Срд 18:37:15 #528 №1115403 
>>1115400
Последний проект принёс мне контракт на 10 000$ Где был отдельный админ на Nginx и закуп 2 серверных стоек под него. Если ты сам настраиваешь что-то внутри сервака, то у тебя уровень фронтенда в 31 год.
Аноним 03/01/18 Срд 18:41:37 #529 №1115404 
>>1115403
У меня есть OpenServer и мне этого достаточно. Я лучше новый гайд почитаю по PHP или разберу что нового добавили, чем буду ковыряться в Nginx. Ибо на практике это в итоге не нужно. И тот факт что ты даже примеры привёл которые можно решить вообще не касаясь Nginx только подтверждает это.
Аноним 03/01/18 Срд 18:42:23 #530 №1115405 
>>1115403
наверное у тебя больше развит талант бизнесмена (или пиздобола), если ты думаешь, что серваки настраивают фронтенды.
Аноним 03/01/18 Срд 18:45:58 #531 №1115408 
>>1115404
опен сервер - хорошая штука. когда сидел на винде, тоже им пользовался. но практика такова, что ты почитаешь новый мануал по 7.2, а потом выкатишь сайт на хостинг, где в лучшем случае 7.0
Аноним 03/01/18 Срд 18:46:08 #532 №1115409 
>>1115405
Да, я считаю что администрирование сервака - это значительно проще чем программирование. В конце концов по тому-же Nxinx есть куча документации. А как сделать ту или иную фичу на бэкэнде с 4 миллиардами записей в БД - хрен найдёшь.
Аноним 03/01/18 Срд 18:48:56 #533 №1115410 
>>1115403
алсо, работа одмина в больших конторах - это в основном давать доступы к впн и прокладывать провода. настройками веб-сервера, бд и производительности занимаются чуваки из отдела эксплуатации, где обычно сидят самые крутые и прошаренные программисты, знающие нутро проекта и среды.
Аноним 03/01/18 Срд 18:50:54 #534 №1115411 
>>1115410
Ты слишком высокого мнения о них. Раз в пол года шевельнут мизинцем и то радость.
Аноним 03/01/18 Срд 20:32:30 #535 №1115439 
>>1115400
Спасибо что пояснил этому колхознику, мне было лень печатать
Аноним 03/01/18 Срд 20:35:17 #536 №1115441 
>>1115410
Прошаренные девопсы
Аноним 03/01/18 Срд 20:36:29 #537 №1115442 
>>1115337
будешь браться за базы советую прорешать любой задачник по SQL запросам, так будет проще, вообще не читай ничего, а занимайся сразу практическими задачами параллельно гугля вопросы которые у тебя появятся.
Аноним 03/01/18 Срд 20:46:11 #538 №1115446 
Анон, подскажи, какую книгу по PHP стоит купить в бумаге?

Я понимаю, что так-то весь материал можно в инете прочитать, но есть ли что-то, что в наш цифровой век, следует сохранять в аналоговой форме?
Аноним 03/01/18 Срд 20:50:40 #539 №1115450 
>>1115446
не стоит у меня вся полка этим мусором завалена
Аноним 03/01/18 Срд 20:54:06 #540 №1115454 
>>1115446
по джаве дохуя хороших книг, по php нихуя. мой совет - читай по джаве, а потом переноси. по основам читай мануал. у других языков обсосные мануалы, а у php норм.
Аноним 03/01/18 Срд 21:01:30 #541 №1115466 
>>1115454
>>1115450
Странно, лол.
Так-то у меня эта идея появилась от того, что я когда сети изучал, то купил себе Олифера в бумаге и не прогадал.
Аноним 03/01/18 Срд 22:40:04 #542 №1115509 
>>1109863 (OP)
Анонсы, это нормально, что у меня не получаются задачки про регулярки? я тупой? все, что было до них легко решалось, а тут на тебе, ничего не понятно, мда. Может стоит почитать что-то, кроме того гайда для чайников?
вкатился полторы недели назад, до этого к погромированию вообще отношения не имел
Аноним 03/01/18 Срд 22:51:19 #543 №1115513 
>>1115509
Показывай что не получается
Аноним 03/01/18 Срд 22:56:31 #544 №1115515 
123.png
>>1115513
С задачей про номера проблем не было, а вот остальное вообще никак
Аноним 03/01/18 Срд 23:23:15 #545 №1115519 
>>1115515
ты код-то свой покажи
Аноним 03/01/18 Срд 23:31:05 #546 №1115524 
Ворвусь со своей прохладной историей. С пхп да и вообще с нормальными языками никогда не работал, пишу на 1с всякую пиздоту.
В новом году понадобилось завести магазин так, чтобы данные о товарах грузились с 1с. Говно вопрос сказал я себе, задача казалось вполне простой:
Выгрузить - > Передать по соап -> загрузить
Такую задачу я много раз решал между 1с системами и тут мне казалось, что проблем не будет.
За основу я наугад выбрал opencart, оказалось что он на пхп, ну да и хуй с ним. Развернуть на локалке и поднять сервак оказалось очень простым. В целом никаких проблем.
Вопросы начались, когда стал решать задачу загрузки со стороны сайта. Решил по старой схеме передавать с помощью типизированного хмл wsdl схема. Включил соап сервер и оказалось, что всдл надо руками формировать, никаких механизмов из коробки по формированию исходника я не нашел. Оказывается существуют множество всяких библиотек типа php2wsdl, которые делают это декларативно. В общем полдня я ебался просто с установкой этого модуля, классы не грузились, автозагрузка хуй его знает как работает, поставил композер, разобрался с автолодом. Потом стал формировать всдл, еще полдня разбирался как работать с этими классами и методами, каждая ошибка вгоняла в гугол. В 1с классического ооп нет, поэтому для меня вся эта бодяга с классами немного напрягала. В общем на следующий день я посмотрел на сформированный всдл и понял, что к нему надо еще писать обработчик. Тут я подумал и решил что нахуй он не нужен этот всдл.
Решил использовать json, тем более один раз с ним уже работал. Удалив всё что наработал начал заного и внезапно пришла в голову идея, что наверно у опенкарта должно быть апи, так и оказалось, но нужных методов там не было. Но при разборе структуры апи внезапно столкнулся с mvc и охуел. Ничего подобного я раньше не видел и это меня сильно удивило. Сегодня написал свой первый контроллер с моделью и всё-таки удалось выгрузить данные, но авторизацию пока не победил. Завтра буду ебаться с токенами и прочей хуйней.
Мир пхп такой забавный, кек.
Аноним 03/01/18 Срд 23:31:53 #547 №1115525 
>>1115519
https://ideone.com/Kud1UY
Аноним 03/01/18 Срд 23:34:29 #548 №1115526 
>>1115525
это про граммар нази, остальные вроде как норм получились
забыл дописать туда
Аноним 04/01/18 Чтв 00:16:42 #549 №1115537 
>>1115509
брось регулярки если они тебе прям не нужны и занимайся программированием, регулярки заебная хуйня
Аноним 04/01/18 Чтв 00:28:45 #550 №1115543 
>>1115524
почему ты битрикс то не взял
Аноним 04/01/18 Чтв 04:36:22 #551 №1115593 
>>1115387
Ну он не сколько устарел сколько неудобен. Из блока нужно делать плавающую строку и накладывать кучу свойств на него чтобы выровнять. Сейчас все само делается парой строчек и стандартными средствами, тут уже вопрос об производительности.
И опять же, Float - Не нужен, бросайте его использовать, надеюсь его удалят.
Аноним 04/01/18 Чтв 10:55:20 #552 №1115623 
Ребята, у меня такой вопрос.

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

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

Что вы думаете по этому поводу. Видимо придется подучивать еще какой-то js фреймворк?
Аноним 04/01/18 Чтв 11:36:55 #553 №1115629 
>>1115593
Я вообще вместо пары строк предлагаю 1 тег. Чем он неудобен то? Написал и забыл.
Аноним 04/01/18 Чтв 12:20:51 #554 №1115642 
 .jpg
>>1115629
Аноним 04/01/18 Чтв 12:41:44 #555 №1115645 
>>1115642
Что не так-то, аргументировал бы хоть.
Аноним 04/01/18 Чтв 15:12:34 #556 №1115678 
Анон, помоги понять, как решить задачу (ну т.е. какие функции могут пригодится).

Сама задача простая:

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

Первый вопрос:
Как задать, чтобы через HTML-форму входил целый массив, а не строка?
Аноним 04/01/18 Чтв 15:27:01 #557 №1115686 
>>1115678
Несколько полей ввода с именем вида name[]
Аноним 04/01/18 Чтв 15:34:02 #558 №1115690 
>>1115629
покажи на примере, а то не понятно
Аноним 04/01/18 Чтв 15:36:40 #559 №1115691 
>>1115686
Не, поле только одно.

А так только вариант с преобразованием строки в массив?
Аноним 04/01/18 Чтв 15:43:17 #560 №1115692 
>>1115691
>вариант с преобразованием строки в массив
а чем тебе этот вариант не нравится?

мимо
Аноним 04/01/18 Чтв 15:52:36 #561 №1115695 
Не могу решить это
W5.1. Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?
код примера на http://codepad.org/nm9jPcpd
Аноним 04/01/18 Чтв 16:17:03 #562 №1115702 
>>1115525
https://ideone.com/MtOprg

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

только не надо подсказывать в стиле чсв-анона "сделай preg_replace_callback, вошь, я даю вам удочку" лол. конкретную реализацию напишите
Аноним 04/01/18 Чтв 16:20:21 #563 №1115703 
>>1115692
Не то чтобы "не нравится". Просто решил проработать несколько вариантов.

Так значит, через форму можно вводить только что-то простое?
Аноним 04/01/18 Чтв 17:06:13 #564 №1115721 
>>1115703
Можешь использовать множественный селект, но для этого нужно будет еще ручками дописать функционал (можешь погуглить 'multiple select') либо заюзать какую-то библиотеку, например, select2.
Аноним 04/01/18 Чтв 18:55:30 #565 №1115776 
Крч, есть билд на С++, а сайт (интерфейс) на пыхе, нужно соединить
Как ?
Аноним 04/01/18 Чтв 19:23:55 #566 №1115786 
>>1115776
rest api
Аноним 04/01/18 Чтв 20:24:31 #567 №1115811 
>>1115786
Можно ссылкой, где пхп и С++ ?
Аноним 04/01/18 Чтв 20:33:01 #568 №1115816 
>>1115811
что за "интерфейс" на пыхе?
Аноним 04/01/18 Чтв 20:58:11 #569 №1115826 
>>1115816
ботнет ;d
Аноним 04/01/18 Чтв 21:23:14 #570 №1115837 
>>1115811
в смысле ссылкой? это как просить ссылку "как водить солярис". мол мне все вождение похую, только солярис бы научиться водить. если ты оба языка знаешь, то проблема только в жопочасах. по рест апи инфы миллион.
Аноним 04/01/18 Чтв 21:46:58 #571 №1115845 
>>1115702
так, чтобы буквы становились заглавными я делал в своем варианте, хотя оно почему-то не работало, хз почему, лол
Аноним 04/01/18 Чтв 21:55:30 #572 №1115846 
>>1115776
Сложно https://habrahabr.ru/post/303572/

Просто -- API

Ещё проще -- вызывай C-приложение прямо из пыхи, например http://php.net/manual/en/function.shell-exec.php
Аноним 04/01/18 Чтв 22:47:23 #573 №1115862 
Котята, что-то я не понимаю. Сейчас остановился на задание из шапки про игру с компом в кубики. Вроде все сделал, все играется. Но как только ставлю exit, нихуя не работает. Почему так? Код https://ideone.com/dIhueJ и само задание http://archive-ipq-co.narod.ru/l1/conditions.html .
Аноним 04/01/18 Чтв 22:47:33 #574 №1115863 
Подскажите годную книгу по верстке.
Аноним 04/01/18 Чтв 22:55:30 #575 №1115865 
>>1115862
Разобрался, просто не добавлял после if скобочку {. Но все равно, в задание оно есть, а у меня нету. Значит что-то не так
Аноним 04/01/18 Чтв 22:59:45 #576 №1115866 
>>1115862
А теперь все работает, я все правильно делаю вообще? https://ideone.com/E7WgXE
Аноним 04/01/18 Чтв 23:10:55 #577 №1115873 
>>1115866
зачем там тебе exit() если и так всё работает хммммммм
Аноним 04/01/18 Чтв 23:20:46 #578 №1115876 
>>1115873
Я думаю ровно так же, но в задание exit стоит. Ну вот и подумал что нужно так же.
Аноним 04/01/18 Чтв 23:25:51 #579 №1115877 
Screenshot2018-01-0501-28-07.png
Решил для прикола пройти учебник ОПа, сам на пыхе писал аж два проекта, включая дипломку. Уже ко второму заданию родились вопросы:
1. Зачем оборачивать переменные в строке в {}? В данном случае все отлично работает и без них. Тем более в первом уроке их нет и нигде не объясняется, зачем они нужны.
2. Зачем после exit ставить скобки? Краткость - сестра таланта же. Сам ставлю только со строкой внутри при дебаге и всегда использую die.
3. Бесполезные \n вместо <br>, все, понял, ideone.
Вообще уроки классные, спасибо тебе. Сам я учился в универе на программиста 5 лет, но это не особо меня вставляло, особенно на последних курсах. Полтора года проработал админом-эникейщиком, сейчас пытаюсь вкатиться в вебдев. Хотел узнать, насколько это занятие сложное для нервной системы и изматывающее для всего организма? По состоянию здоровья не могу напряженно работать, тем более думать, больше часа подряд, дальше клонит в сон и я уже не способен нормально работать, пока не отдохну пару минут. Так вот, реально ли с такой проблемой кодить фуллтайм? В начале весны сваливаю с работы, думаю за 2 месяца подтянуть знания и устроиться стажером за еду, в принципе есть куда. Сидеть за компом с утра до вечера не проблема, проблема при этом постоянно работать. Как там в офисах вообще, есть возможность встать, размяться, подремать 10 минут? Спасибо заранее, добра всем и ОПу особенно.
Аноним 05/01/18 Птн 01:04:00 #580 №1115899 
>>1115877
1. чтобы выводить более сложные конструкции типа $foo->getName(), $foo[0] и прочие. чтобы интерпретатор понимал, что именно ему выводить
2. die это синоним для exit. в скобках пишется ообщение, которое надо вывести при выполнении этой конструкции
3. сюрприз, пхп может работать не только в хтмл-страничках, но и в cli, и для вывода данных в файл, и в жсоны всякие, и т.д. странно, что после 5 лет инста ты об этом позабыл

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

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

встать и размяться - ну где-то может стоят за спиной и палкой бьют тех, кто пытается разминаться, но думаю можно найти место, где понимают твои потребности. а так смысла спрашивать "ну как там в офисе?" нет, надо самому пойти и попробовать. только 2 месяца на подготовку к нормальной работе - это думаю, маловато, вот полгода и какие-то вменяемые курсы уже более реально
Аноним 05/01/18 Птн 02:47:44 #581 №1115924 
Двач, подскажи поддерживаемую разработчиком опенсорсную админ-панельку на PHP под PostgreSQL. Минимально необходимый функционал - двухфакторная аутентификация(смс или Google Auth). Нужен самый минимум - логин-окошко, где после правильного ввода логин-пароля должно забрасывать в админку.
Аноним 05/01/18 Птн 03:47:14 #582 №1115933 
>>1115877
В сети удобство в том, что есть удаленка.
Аноним 05/01/18 Птн 04:16:49 #583 №1115934 
Хочу с помощью preg_replace очищать вводимый текст от всяких символов, чтобы потом превращать в массив.

Почему у меня не работает эта регулярка?
https://regex101.com/r/MLy2Gd/1
НАПОМИНАЛОЧКА Аноним 05/01/18 Птн 07:12:14 #584 №1115944 
ПРЕКРАЩАЙТЕ ИСПОЛЬЗОВАТЬ FLOAT
Аноним 05/01/18 Птн 07:26:37 #585 №1115946 
>>1115934
>Почему у меня не работает эта регулярка?
Судя по твоему решению, ты не очень понимаешь как они работают. Может повторить уроки ОПа?

<?php
error_reporting(-1);
mb_internal_encoding('utf-8');

$reg = '/[^a-z\s]/iu';
$str = "Some cool string!!! With a lot, of shit in it #$(24324";
echo $str . PHP_EOL;

$result = preg_replace($reg, '', $str);
echo $result . PHP_EOL;
Аноним 05/01/18 Птн 07:47:39 #586 №1115949 
>>1115946
Не, мне хотелось удалить всё, кроме букв и дефисов из вводимого пользователем.

Но я перечитал урок опа и понял, что можно сразу запилить массив из вводимого юзером, через функцию preg_split
Аноним 05/01/18 Птн 10:22:55 #587 №1115981 
>>1115899
Спасибо, это были вопросы не сколько по языку вообще (я как бы понимаю немного), сколько по конкретной реализации и простоте понимания для новичков.
1. Но в конкретной задаче же выводятся только переменные. И, повторюсь, назначение фигурных скобок еще не было описано в учебнике.
2. Об этом я и писал. Если выводится сообщение - скобки нужны. Если не выводится, можно обойтись и без них, насколько я помню, это даже в стандарте где-то было.
3. Опять же, для новичка, запускающего пример на локалхосте, не очевидно, почему переносы строк не работают, хотя он их прописал. Ну это ладно, урок рассчитан на онлайн-интерпретатор.

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

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

Кое-какая база у меня уже есть, так что 2 месяцев на освежение и систематизацию знаний, думаю, хватит. Сейчас, кстати, прохожу курс по Yii 2 от webformyself, но проблема в том, что за день успеваю пройти не больше одного урока (1-2 часа видео, с конспектированием и выполнением заданий уходит примерно в 2 раза больше). Параллельно собираюсь пройти учебник ОПа, он намного быстрее, проще и не содержит воды.

Спасибо за подробный ответ. Успехов тебе в работе и саморазвитии.
Аноним 05/01/18 Птн 10:27:19 #588 №1115984 
>>1115933
Для удаленки мне пока не хватает знаний и опыта, учитывая, что в верстке и фронтенде я почти ноль. Еще имеются жесткие проблемы с самодисциплиной, из-за которых у меня сорвалось уже два проекта. Но спасибо за совет, если не получится в офисе, попробую фриланс снова.
Аноним 05/01/18 Птн 10:50:12 #589 №1115987 
Приветствую анона!
Сейчас попиливаю первую задачку от ОПа про список студентов, пытаюсь сделать валидацию. У меня несколько вопросов. В хтмле в инпут теги можно добавить атрибут required, рисует красивую плашечку, не дает форме отправиться. Но это с клиентской стороны. Я правильно понимаю, что если я отправлю форму с другого места/сайта на свой sumbit адрес, то вся эта клиентская валидация с жс регэкспами до пизды? А если сделать защиту, как в той самой статье от ОПа про XSRF уязвимость, невидимую форму с токеном и куками, в таком случае я могу обойтись только клиентской валидацией ну или хотя бы required и быть уверенным что мой $_POST точно будет не пустым?

Еще про ООП, нужно ли создавать объекты на любой вздох, не считается ли плохим использовать статические методы? Вот роутер у меня например, что я напишу Router::run, что в конструкторе вызову метод, какая разница?

Для выполнения задачи так же требуется "типа" регистрация на куках, после успешного добавления студента в бд в куки что-то записывается, и после этого вместо кнопки добавления студента будет кнопка изменения. Я думал посл добавления записи брать последний айди из бд, как-то его там хешировать например и записывать в куки, а потом проверять, я даже хз будет ли это работать. Но если два чувака примерно в одно время отправят правильную форму, инфа добавится в бд, другой метод возьмет последний айди и выдаст не последнему чуваку из-за каких-то задержек? сложна
Аноним 05/01/18 Птн 13:10:13 #590 №1116009 
Здравствуйте.
Можете посмотреть регулярку на https://regex101.com/r/EzsdMh/1
Вроде все работает, но может написано коряво... Вот задание
Grammar Nazi. Напиши скрипт, проверяющий текст на наличие злостных ошибок:
нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
«жи» или «ши» написано с буквой ы
в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
в тексте есть слова «а» или «но» без запятой перед ними.
Аноним 05/01/18 Птн 13:33:53 #591 №1116015 
Что то с этими регулярками сложновато. Есть ли смысл вначале прочитать книжку, например Регулярные выражения Джеффри Фридл, а потом продолжать изучать PHP по плану ОПа?
Аноним 05/01/18 Птн 16:18:51 #592 №1116107 
>>1116015
Нет. Лучше почитывать книжку и пописывать регулярки 2-3 раза в неделю по пару часов (spaced repetition вот это все). Тормозить основной процесс смысла нет.
Аноним 05/01/18 Птн 16:34:36 #593 №1116114 
>>1115987
> только клиентской валидацией ну или хотя бы required и быть уверенным что мой $_POST точно будет не пустым?
Открываю я значит chrome devtools, нахожу твою форму, стираю с инпутов required и кликаю сабмит.

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

>>1116015
https://regex101.com/ , может здесь поиграться с регулярками, очень удобно.

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

>>1115623
бамп вопросу
Аноним 05/01/18 Птн 16:41:25 #594 №1116118 
>>1116015

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

>>1116009

> [:|.|?|!|,]
Символ | тут обозначает сам себя, то есть вертикальную черту. В квадратных скобках | не имеет специального значения.

> [ж|ш]
То же самое, надо писать просто [жш] так как квадратные скобки обозначают "один любой из указанных символов"

> зделал|зделаю|зделан
Нет "зделаем"

> [\s]
Можно просто написать \s

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

После но/а, кроме пробела может идти запятая или двоеточие. Тут лучше было использовать \b (граница слова), а не \s.
Аноним 05/01/18 Птн 16:41:53 #595 №1116119 
>>1115987

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

> А если сделать защиту, как в той самой статье от ОПа про XSRF уязвимость, невидимую форму с токеном и куками, в таком случае я могу обойтись только клиентской валидацией ну или хотя бы required и быть уверенным что мой $_POST точно будет не пустым?
Нет, так как пользователь может отключить валидацию в браузере, либо отправлять HTTP POST запрос не из браузера, а программой вроде curl, которая позволяет указывать любые данные. Если ты читал урок про HTTP ( https://github.com/codedokode/pasta/blob/master/network/http.md ), то знаешь, что браузер при отправке формы просто соединяется с сервером и отправляет определенный кусок текста. Никто не запрещает сделать то же самое без браузера. Или модифицировать браузер.

То есть защита токеном (либо по Referer/Origin) это защита именно от CSRF и ничего больше.

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

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

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

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

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

Еще немного по этой теме можно поискать тут

- https://github.com/codedokode/pasta/blob/master/arch/di.md
- https://habrahabr.ru/post/169301/
- https://www.google.ru/search?q=%D1%87%D0%B5%D0%BC+%D0%BF%D0%BB%D0%BE%D1%85%D0%B8+%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B&newwindow=1&dcr=0&gbv=1&sei=vX1PWum9BYqXsgHLgZuABg
- https://www.google.ru/search?q=what+wrong+with+static+methods&newwindow=1&dcr=0&gbv=1&sei=wn1PWuS2NMmgsgGtvZuABg (англ)

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

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

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

- хеш пароля (но у нас нет паролей)
- случайно сгенерированный токен
- id, подписанный секретным паролем приложения (хеш от id + секретный пароль)
- id сессии

Аноним 05/01/18 Птн 16:42:31 #596 №1116122 
Что такое Апач ?
Нахера он ?
Аноним 05/01/18 Птн 17:17:45 #597 №1116131 
>>1115984
Да как бы дело не во Фрилансе, многие компании берут Джунов и прочее для работы на удаленке.
Аноним 05/01/18 Птн 17:30:19 #598 №1116133 
>>1116107
>>1116114
>>1116118
Спасибо большое.
Аноним 05/01/18 Птн 17:44:19 #599 №1116138 
Анон, подскажи, как правильно составить регулярку, чтобы потом получить из этого всего массив с наименованиями:

$regexp = '/\s[,][.][;]/';
$food= 'Хлеб, мясо яблоко. пирог; отбивная';
$matches= preg_split ($regexp, $food);
var_dump($matches);

Вводить могут хоть как, но нужны только слова.

>>1116122
Прога на сервере, отвечающая за отдачу HTTP-запросов.
Аноним 05/01/18 Птн 20:55:33 #600 №1116216 
>>1116138
Я ж тебе вверху давал код. Там два параметра допилить. Что же вы батенька такой лентяй:

<?php
error_reporting(-1);
mb_internal_encoding('utf-8');

$reg = '/[^а-я]+/iu';
$str = 'Хлеб, мясо яблоко. пирог; отбивная ';
echo $str . PHP_EOL;

$result = preg_split($reg, $str, -1, PREG_SPLIT_NO_EMPTY);
var_dump($result);
Аноним 05/01/18 Птн 20:58:31 #601 №1116217 
>>1116138
$regexp = '/(,|.|;)\s/';
Аноним 05/01/18 Птн 21:10:48 #602 №1116219 
>>1116217
>>1116216
Справедливости ради, мне понадобилось абсолютно иное выражение и Ваше не подходит!
В полной мере.

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

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

Хлеб пробел запятая пробел свекла.

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

https://regex101.com/r/pfaOHr/2

Моя логика:
может быть сколько угодно пробелов, а может и не быть
может быть любой из данных символов, а может и не быть
может быть сколько угодно пробелов, а может и не быть
Аноним 05/01/18 Птн 22:41:53 #603 №1116234 
>>1116219
https://regex101.com/r/pfaOHr/3 ?
Аноним 05/01/18 Птн 22:49:18 #604 №1116239 
>>1116219
Алсо:
>а может и не быть
а как ты собираешься разделять слова тогда? Хотя бы один знак любой должен присутствовать. У тебя не регекспы хромают, а логика (Без обид).
Аноним 05/01/18 Птн 23:01:56 #605 №1116250 
>>1116234
А! Т.е. "что-то из перечисленного появиться один раз".
Хороший вариант. Спасибо!
>>1116239
Ну, подразумевается, что вводящий значения пользователь не будет аутистом, который пишет "яйцахлебкрокодилзалупасыр" и не замечает ничего странного, но может присутствовать что-то одно из списка.
Ну типа "яйца.хлеб.твоямамка.говно".
Аноним 05/01/18 Птн 23:27:04 #606 №1116260 
Делаю студентов. Появился вопрос: как реализовать подстраницы на странице со списком студентов?

Считать сколько студентов в БД и если больше 50, то создавать новую подстраницу?
Аноним 06/01/18 Суб 00:06:53 #607 №1116268 
Что такое фреймворк? Я скачал бутстрап, там наборы стилей и джаваскриптов. Это чтоб самому ксс не писать?
Аноним 06/01/18 Суб 00:08:58 #608 №1116269 
>>1116268
Да. Это набор уже готовых решений.
Аноним 06/01/18 Суб 01:37:36 #609 №1116286 
>>1116268
Да. Подключаешь и просто задаешь элементам нужны классы и вкладываешь их друг в друга в нужном порядке.
Аноним 06/01/18 Суб 01:59:55 #610 №1116292 
>>1116286
Почему в новом бутстрапе не работает nav? Он заменён расовоправильным navbar? Он у меня работает.
Аноним 06/01/18 Суб 06:36:18 #611 №1116330 
>>1116260

Считаешь, сколько всего в БД студентов, делишь на допустим 20 и получаешь число страниц. Выводишь список страниц. Номер страницы можно передавать в параметре page, то есть ссылки могут выглядеть так:

/students.php (1-я страница)
/students.php?page=2 (2-я)
/students.php?page=3 (3-я)

итд.

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

Для выборки части результата в MySQL есть нестандартная (ее нет в стандарте SQL) опция LIMIT.

>>1116219

Есть еще интересный вариант - разбивать по границе слова (\b): https://regex101.com/r/bN3dsN/2 (я добавил флаг u для поддержки юникода).

Также, можно использовать \W (не-слово).

Не знаю, подойдет ли.

>>1116216

Надо писать [^а-яё] так как "ё" не входит в диапазон "а-я", а идет отдельно.

>>1116122

Это веб-сервер, отвечающий на HTTP запросы. Подробнее: https://github.com/codedokode/pasta/blob/master/network/http.md

Аноним 06/01/18 Суб 06:36:55 #612 №1116331 
>>1115981

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

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

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

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

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

> Сейчас, кстати, прохожу курс по Yii 2 от webformyself,
Тебе надо изучить сначала ООП, MVC, работу с БД, написание веб-приложений вообще (то есть формы, таблицы, HTTP) - ты все это знаешь? У нас есть в ОП посте задача про студентов, если ты не можешь ее сделать, тебе рано браться за Юи.

>>1115944

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

>>1115866

Не рассмотрен 4-й возможный исход (даблов нет, но сумма очков равна), например, если выпало 1, 5 у анона и 2, 4 у компа.

exit не нужен.

>>1115865

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

>>1115826

Таким, как ты, мы не помогаем.
Аноним 06/01/18 Суб 06:37:28 #613 №1116332 
>>1115702

> (\,|\.|\?|\!)
короче написать [,.?!]. Также, "," и "!" не спецсимволы и не требуют экранирования.

> [^\s]
То же самое, что \S

preg_replace может принимать массив регулярок и массив строк для замены: http://php.net/manual/ru/function.preg-replace.php

> надо еще сделать буквы заглавными, но не могу придумать как
1) Разбить текст на массив строк, у каждой заменить первую букву, склеить обратно
2) Использовать preg_replace_callback, который вызывает указанную тобой функцию для каждого найденного фрагмента текста. В ней ты можешь делать любые замены.

>>1115695

С этой задачей у многих сложности.

Попробуй переписать код внутри цикла примерно так:

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

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

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

>>1115678

Либо select2, либо несколько полей, либо текстареа и попросить пользователя писать названия на отдельной строке.
Аноним 06/01/18 Суб 06:37:52 #614 №1116333 
>>1115623

> Глядя на современные веб приложения я все больше замечаю, что php больше используется как веб-сервис для взаемодействия с бд, а все остальное пишется на каком-то js фреймворке.
Ты наверно говоришь о SPA (Single Page Application), когда на клиенте работает JS-приложение и оно получает/отправляет на сервер данные через AJAX.

Сразу скажу, что рассуждать "в 2018 году X устарело и надо всегда использовать Y" неправильно. У SPA есть особенности, которые дают ему преимущество перед традиционным подходом (генерация страниц на сервере) в одних ситуациях, и оборачиваются недостатками в других. Не хочу даваать готовый ответ, давайте вместе подумаем, в чем плюсы и минусы SPA против традиционных приложений? Где что лучше использовать?

Подсказка, рассмотрите такие моменты:

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

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

>>1115268

text-align: center не подойдет?

>>1115593

> Float - Не нужен
Ты вообще с ним знаком? Мне кажется, ты CSS плохо знаешь. Он отлично работает в таких ситуациях например:

- вынос элемента на поля
- врезка картинки с края текста
- горизонтальное расположение элементов с переносом

>>1115387

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

Дело не в устаревании, а в нелогичности.
Аноним 06/01/18 Суб 06:38:30 #615 №1116334 
>>1115525

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

>>1115402
>>1115348

Там в аннотации прописывается не тип поля, а тип маппинга - как преобразовывать данные из БД перед записью в поле объекта. И наоборот. Так что да, прописывать.

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html

Ну, например, для поля типа int там может стоять integer, bigint, smallint в зависимости от типа в БД.

Если где-то Доктрина может правильно определить маппинг по умолчанию, то можно не прописывать.

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

>>1115202

Еще есть вариант возвращать объект-коллекцию ошибок.

>>1115285

> php-fmp работает быстрее, чем php как служба апача.
Есть какие-то подтверждения? я в этом сомневаюсь.

Используют php-fpm, так как нгинкс обычно уже есть (для раздачи статики, что он умеет очень хорошо), и ставить за ним второй веб-сервер (Апач) только ради запуска внутри него модуля PHP нет смысла, проще сразу поставить php-fpm. Также, php-fpm в случае нескольких сайтов позволяет использовать для каждого своих пользователей, свои лимиты, видеть кто сколько потребляет CPU/памяти и тд.

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

>>1115196

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

>>1115187

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

В любом нормальном проекте свой сервер, и иногда свой админ к нему.
Аноним 06/01/18 Суб 06:38:52 #616 №1116335 
>>1115170

В учебнике в ОП-посте и про объекты рассказывается.

А так, есть ситуации, когда массив прекрасно подходит.

>>1115148

Справедливости ради, lazy loading я видел в документации Доктрины, там это было про загрузку данных из БД.

У него задача про валидацию формы и там миллиона ошибок быть не может.

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

>>1115147

А в ОП посте есть супер-сложная задачка на SPA ведь https://github.com/codedokode/pasta/blob/master/js/spa.md

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

>>1115119

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

in_array можно, если мы ищем именно null.

>>1115123

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

>>1115122

6-8 месяцев
Аноним 06/01/18 Суб 06:39:23 #617 №1116336 
>>1115054

Наверно !in_array(null, ...) ? Там еще стоит добавить параметр, чтобы in_array делал строгое сравнение с null.

>>1114847

Зачем использовать хеш, если можно использовать сам URL? отлаживать код будет проще, если захочешь посмотреть содержимое кеша.

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

Подвохи кеша такие:

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

Чтобы кеш работал эффективно, число попаданий в кеш должно быть больше, чем число "промахов".

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

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

>>1114854

> У API есть эндпоинт, позволяющий по IP-адресу клиента определить его город, страну и координаты города.
Вообще, проще конечно скачать себе какую-нибудь геобазу.

>>1114840

Права на файлы надо проверить наверно?

>>1114836

Вообще, папка vendor и не должна быть публично доступна.

>>1114711

Виртуальные хосты. Ты можешь создать несколько "сайтов" и каждому назначить отдельную корневую папку.
Аноним 06/01/18 Суб 06:39:53 #618 №1116337 
>>1114811

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

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

> Например почему $key распарсивается в итоге на $params и $value? Как он узнаёт что там правильные данные?

foreach работает так. Он проходится по списку элементов, из которых состоит массив. Для каждого элемента, он копирует его ключ и значение в переменные key/value, затем выполняет тело цикла. Затем берет следующий элемент, копирует ключ/значение в переменные и снова выполняет тело цикла. И так столько раз, сколько в массиве элементов.

> А если например там виесто одного из параметров - массив вложенный?
То этот массив будет скопирован в value.

Вот возьмем твой пример. Тут ты создаешь массив из 3 элементов:

> $cars = Array("nissan" => $nissan, "toyota" => $toyota, "isuzu" => $isuzu);

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

>>1114790

Есть CSS свойство float: http://softwaremaniacs.org/blog/2005/12/01/css-layout-float/

Также, может тебе поможет мой недописанный урок https://github.com/codedokode/pasta/blob/master/html/positioning.md

>>1114646

Я хочу прокомментировать это:

> $_POST['mail_subject'] = htmlspecialchars(stripslashes($_POST['mail_subject']));

Это вообще неправильно. Ну например, зачем там stripslashes? Он же вырезает бекслеши из текста. Кто об этом просил?

Также, htmlspecilachars тут использован неправильно, его надо использовать при выводе HTML, а не в начале скрипта. Ну например, пользователь ввел в поле "<", и мы хотим посчитать длину текста. Если мы сначала вызовем htmlspecialchars, то он превратит "<" в "& lt ;" и мы получим 4 вместо 1.

Также, в заголовках писем не используется HTML кодирование, и тема <привет> превратится в &lt ;привет& gt; и именно так и будет отображаться в почтовой программе.

htmlspecialchars нужна только в одном случае: для экранирования символов в тексте, который подставляется в HTML-код. И применять ее надо только там, где происходит эта подстановка.

Почитайте про правильное использование htmlspecialchars: https://github.com/codedokode/pasta/blob/master/security/xss.md

Тем, кто хочет разобраться с экранированием, я рекомендую решить задачу: https://github.com/codedokode/pasta/blob/master/soft/web-server.md#Экранирование
Аноним 06/01/18 Суб 06:40:25 #619 №1116338 
>>1114538

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

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

Обрати внимание, что php7 усовершенствовал систему тайп-хинтов - теперь можно в их качестве указывать примитивные типы вроде int/string, а в php7.1 стало можно указывать тайп-хинт для возвращаемого функцией значения: https://habrahabr.ru/post/267799/ , причем можно указать тип void, значащий, что функция ничего не возвращает.

>>1114521

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

>>1114528

Предлагаю тебе для практики в ООП 2 полезных задачки:

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

Задача про Гостиницу

Есть Гостиница, в ней есть Номера. Для каждого Номера известен его номер, количество Гостей, которое в него влезет, а также цена за сутки. В Гостиницу приезжают Гости. Нужно сделать объектную модель Гостиницы с такими возможностями (методами):

- получить список свободных номеров на определенную дату
- получить список свободных номеров, которые будут свободны в определенный диапазон дат (от A до B)
- дан список Гостей и диапазон дат, в которые они хотели бы заселиться. Необходимо подобрать им самый дешевый (а среди номеров с одинаковой ценой - самый маленький) Номер, который их вместит и который свободен в это время.
- то же самое, но при отстутствии одного подходящего номера для Гостей разрешается заселить их в несколько номеров, опять же, начиная с самых дешевых. Например, приехало 3 Гостя, но все 3-местные номера заняты и мы выделяем 2 2-местных, или 3 1-местных или 1-местный + 2-местный.
- зарегистрировать проживание данных Гостей в данных Номерах на данный период
- получить историю заселения Номера (кто в нем когда жил)
- получить историю заселения Гостя (в каких номерах он жил)
- получить статистику доходов Гостиницы за данный диапазон дат (в день A отдель заработал X тугриков, в день B - Y тугриков и так далее)

Для хранения дат подходит встроенный в PHP класс DateImmutable.

Задача про Продюсерское Агенство

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

Персоны - это люди, у которых есть какие-то творческие способности. У каждой Персоны есть такие свойства:

- имя
- контактный номер телефона

Кроме того, у них могут быть навыки: Персона может быть Актером, Моделью, Музыкантом, Менеджером.

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

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

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

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

Задачи на ООП решаются примерно так:

- определяем, какие у нас есть в задаче сущности и для каждой делаем класс
- определяем, какие их свойвства нам интересны, делаем поля в классах
- определяем, что эти классы должны уметь делать, какую информаицю предоставлять, что с ними можно делать - и делаем методы
- определяем, как сущности связаны между собой, если их больше одной
Аноним 06/01/18 Суб 06:40:51 #620 №1116339 
>>1114404

Оно задает кодировку для функций вроде mb_strlen (они сами угадать кодировку текста не могут). Писать его стоит на случай, если в конфиге PHP стоит не utf-8, чтобы программа корректно работала в этом случае.

>>1114329

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

Код ужасный. Не смешивай вперемешку логику (получение данных из БД) и их вывод. Пиши это отдельно .Читай про шаблоны https://github.com/codedokode/pasta/blob/master/php/templates.md

> SELECT * FROM `articles_categories` WHERE `id`
Неправильный запрос. Что значит "WHERE id" ?

Нет проверки того, что функция mysqli_query вернула не ошибку. Читай https://ru.stackoverflow.com/questions/509143/%D0%9A%D0%B0%D0%BA-%D0%BE%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-%D0%B2-mysqli

При выводе данных надо использовать htmlspecialchars: https://github.com/codedokode/pasta/blob/master/security/xss.md

Почему не работает, понять трудно, так как код плохо читаемый.

>>1114271

> В каких случаях нужно использовать строку mb_internal_encoding('udf-8')?
не udf, а utf-8. Она задает кодировку по умолчанию для функций вроде mb_strlen, и нужна на тот случай, если другая кодировка указана в php.ini.
Аноним 06/01/18 Суб 08:04:20 #621 №1116347 
>>1116334
>А если ты напишешь места в уроках, которые ты не понял, или понял сначала не так, или долго разбирался, может быть, мы сможем сделать сайт еще лучше! А может ты даже сможешь предложить лучшее объяснение!
Дошел до циклов и вообще нихуя понять не могу. Я понял общую работу циклов, начало=>проверка все ли заебись=>продолжает. Но я уже на первой задачке из циклов ахуел. Я не могу понять как сделать таблицу умножения и тем более расчитать 10% годовых.
Аноним 06/01/18 Суб 08:48:29 #622 №1116351 
>>1116347
Почитал архивач и нашел как все сделать, но до сих пор не понимаю. Почему без точки не работает?
<?php
$n = 10;


for ($i=1; $i<=$n; $i++) {
$sum = $i * $i;
echo $sum .(вот эта ебанная точка) "\n";
}

Блин, учебник хороший, но черт возьми как все расплывчато.
Аноним 06/01/18 Суб 08:49:34 #623 №1116352 
>>1116351
Код распидорасило https://ideone.com/p7fO0R
Аноним 06/01/18 Суб 10:30:13 #624 №1116363 
Аноны, шапку прочитал полностью. Обучение начинается с php. Но я хотел бы начать с HTML/CSS. Я абсолютный ноль в этом деле. Знаю, что аноны как правило рекомендуют только грамотные курсы, поэтому обращаюсь к вам.

Аноны, порекомендуйте годные курсы, чтобы начать с нуля. Или все равно с чего начинать по HTML?
Аноним 06/01/18 Суб 10:59:15 #625 №1116369 
>>1116363
бесплатная эштиэмэль академия неплохая, у опа также есть гайды. Основы если знать будешь, можешь в мануале быстро искать информацию и ничего и составлять вопросы в гугл.
Аноним 06/01/18 Суб 11:06:21 #626 №1116372 
Привет, помогите разобраться с запросами между сервером и клиентом.

У меня есть форма аутенфикации и следующие состояния запроса на клиенте:
SUBMIT_REQUEST - ожидание ответа
SUBMIT_ERROR - ошибка
SUBMIT_SUCCESS - запрос прошел успешно

Вроде все понятно, если запрос не отправился, например из-за проблем с сетью - это очевидный SUBMIT_ERROR, а если запрос ушел и вернулся ответ с набором валидационных ошибок, это SUBMIT_ERROR или SUBMIT_SUCCESS? Какой код ответа должен отдать сервер в этом случае 2хх или 4хх?

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

Нужно ли вообще всегда отдавать код на каждый запрос к api?
Аноним 06/01/18 Суб 11:25:02 #627 №1116375 
>>1116369
Спасибо. Этого достаточно. Дальше сам разберусь.
Аноним 06/01/18 Суб 12:56:28 #628 №1116390 
>>1116363
Заходишь сюда: https://html.spec.whatwg.org/dev/
И тут начинается твое путешествие.
Аноним 06/01/18 Суб 12:57:12 #629 №1116391 
>>1116375
Плохой совет про ПарашеКадеми, никому не советую.
Аноним 06/01/18 Суб 13:36:11 #630 №1116400 
>>1116390
Спасибо, но, к сожалению, не могу в ангельский.
Аноним 06/01/18 Суб 13:40:05 #631 №1116402 
>>1116400
тогда лучше начать не с html. без английского в нашем деле будешь хуй сосать

вообще htmlacademy отличные курсы. если жалко денег, посмотри в ознакомительных целях в торрентах
Аноним 06/01/18 Суб 14:01:06 #632 №1116407 
>>1116402
Хорошо, понял, спасибо.
Аноним 06/01/18 Суб 15:37:26 #633 №1116450 
>>1116372

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

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

> Какой код ответа должен отдать сервер в этом случае 2хх или 4хх?
Нет единого мнения. Некоторые используют HTTP-коды (например 401), некоторые отдают 200, но в ответе передают информацию об ошибке.

> И как должен выглядеть диалог между сервером и клиентом при авторизации?
В случае аякс запроса - конечно, редирект делать нет смысла, и надо отдавать ответ (правильный логин/пароль или нет). Обычно ответ отдается в формате JSON. Что касается авторизационной куки, есть 2 варианта - сервер может передавать ее с ответом как куку (в заголовке Set-Cookie) либо же в JSON-ответе, а клиент уже сам создает ее.

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

Если ты хочешь делать полноценное REST API, то в описаниии REST https://ru.wikipedia.org/wiki/REST упомянут такой пункт:

> 2. Отсутствие состояния

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

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

>>1116400

Есть еще htmlbook, там тоже какой-то самоучитель был.

>>1116351

Точка это оператор склеивания строк. Например, ("a" . "b") дает строку "ab". Соответственно echo $sum . "\n"; склеивает содержимое $sum и символ \n, и выводит получившуюся строку.

Без точки получается просто ошибка:

echo $sum "\n";

здесь PHP после $sum ждет точку с запятой, обозначающую конец команды, а ее нет. Вот и ошибка. У echo синтаксис примерно такой:

echo <значение>;

Написать 2 значения через пробел нельзя.

Кроме точки, ты бы мог использовать подстановку переменных в строку: http://php.net/manual/ru/language.types.string.php#language.types.string.parsing

echo "$sum\n";
Аноним 06/01/18 Суб 16:14:20 #634 №1116463 
>>1116332
>>1116330
Добра тебе!
тот, кто пытается сортировать овощи
Аноним 06/01/18 Суб 19:23:33 #635 №1116525 
Анон, у меня затык.

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

В чем трудность:
Если я пытаюсь использовать этот код для создания запроса и передачи его результата в переменную, то записывается только последнее значение не то чтобы местный анон не догадался бы, но это скорее я пытаюсь объяснить, что не полный дурак
https://ideone.com/w4CJWC

Внимание вопрос: как мне запилить массив с присвоением результата запроса?
Или же просто: как мне подружить цикл for для создания массива с foreach, через который я буду выводить содержимое массива?
Аноним 06/01/18 Суб 19:26:14 #636 №1116527 
>>1116525
$countrysId[] = mysql_query($str_sql_query, $link);
Аноним 06/01/18 Суб 21:01:05 #637 №1116564 
>>1116527
Премного благодарен.
Мне кажется или стоит добавить такой способ создания массива из массива в учебник?

И ещё:
$countrysId[] - это массив состоящий из таблиц взятых из БД.
Я и раньше с трудом понимал, как работает логика цикла

while ($line = mysql_fetch_array($countrysId, MYSQL_BOTH)
Пока значение переменной не равно нулю, делай что-то?

То теперь я не представляю, как можно вытащить значения из массива таблиц.
Я попробовал вот что https://ideone.com/aq6gtM , но в результате нихера.
Аноним 06/01/18 Суб 22:12:04 #638 №1116600 
СУКА БЛЯТЬ НУ ЧО ЗА ХУЙНЯ ЕБАЛ Я ЕБАЛ ВСЁ ЭТО В РОТ НАХУЙ М[...].png
image.png
БЛЯЯЯЯТЬ!
КАК!? КАК СДЕЛАТЬ ТАК ЧТОБЫ СЛОГИ ВЫСТРАИВАЛИСЬ БЛЯТЬ В СЛОВО!? КАК СДЕЛАТЬ ЭТО!?
Я что только не пробовал уже, помогите раздуплить, сука. Почему на этом http://archive-ipq-co.narod.ru/ сайте вашем нету ответов у задач? Ну ладно, остальные я пока осилил сам, но это просто завело меня в тупик. Слишком сложно, сука, слишком сложно! Я уже 2 часа сижу как аутист, пялюсь в экран и нихуя не выходит. Какую хуйню только не пытался выдумать, а постоянно какая-то ебала в результате, а не слоги в ряд. Помогите! Как решить эту задачу?
Аноним 06/01/18 Суб 22:30:59 #639 №1116620 
>>1116600
Тебе надо из нескольких строк получить одну, то есть сложить их. Это называют буржуйским словом "конкатенация". Гугл по запросу "конкатенация строк php" выдаст все что нужно.
Аноним 06/01/18 Суб 22:33:40 #640 №1116621 
>>1116620
А как из всех добавить в переменную "$name"? Эта задача стопудова так решается, все слоги из одного массива.
Аноним 06/01/18 Суб 22:40:18 #641 №1116624 
>>1116621
>из всех
Их всех я имел ввиду. Все эти ебучие слоги сначала нужно записать в переменную Нейм, так в условии задачи сказано, а я не знаю блять каким образом это сделать так, дабы всё работало в итоге.
Аноним 06/01/18 Суб 23:00:31 #642 №1116632 
>>1116600
Лах.

http://php.net/manual/ru/function.implode.php

Предлагаю ОПу запилить первым делом гайд: как пользоваться поисковыми системами.
Аноним 06/01/18 Суб 23:04:59 #643 №1116634 
>>1116624
Ну блин, ну в задании же написано.


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

Создать переменную и положить в нее пустую строку ($string = '';). Затем на каждом шаге цикла «приклеивать» к ней новый кусочек: $string = $string . $piece; или $string .= $piece; Точка — это оператор, склеивающий («конкатенирующий») 2 строки вместе. Оператор .= надо писать слитно, без пробела.

Создать переменную, поместить в нее пустой массив. На каждом шаге добавлять в массив новый слог. В конце склеить слоги в массиве в одну строку с помощью implode.
Аноним 06/01/18 Суб 23:14:06 #644 №1116638 
>>1116564
Пока ждал ответа, пришел к выводу, что я неправильно все делал.

Надо было перебирать таблицы в foreach и уже их подставлять в while.

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

foreach ($countrysId as $x=>$table){
while ($line = mysql_fetch_array($table, MYSQL_BOTH)) {
print_r ($line);
}
}
Аноним 06/01/18 Суб 23:35:44 #645 №1116645 
>>1116638
>mysql_fetch_array
Возвращает массив. Возвращает массив.
Аноним 06/01/18 Суб 23:46:47 #646 №1116651 
>>1116645
foreach ($countrysId as $x=>$table){
while ($line = mysql_fetch_array($table, MYSQL_NUM)) {
foreach ($line as $s=>$a){
echo "$a\n";
}
}
}

Да, вывел. У меня там порядок чисел от 1 до 200.
Ну что ж, у меня неверное значение приходило!

Тогда такой вопрос:

$str_sql_query = "SELECT id FROM dbCountries WHERE name LIKE '%$count%' OR alias LIKE '%$count%' ";
foreach ($first as $count){
$countrysId[] = mysql_query($str_sql_query, $link);
}

foreach ($second as $cit){
$str_sql_query = "SELECT id FROM dptCities WHERE name LIKE '%$cit%' OR synonymus LIKE '%$cit%' ";
$citiesId[] = mysql_query($str_sql_query, $link);
}

Я правильно понимаю, что $str_sql_query - это просто устоявшееся название переменной?

Алсо, в этом коде в каждом цикле foreach правильно указано, чтобы использовалось свое выражение SQL-запроса?
Аноним 07/01/18 Вск 00:02:15 #647 №1116657 
>>1116651
>это просто устоявшееся название переменной
Да хуй его знает, как там было в девяностые.

Ты физически не можешь воспользоваться PDО? Строчек столько же, возможности — шире.
Просто прочти например http://phpfaq.ru/pdo (просто прочти, 15 минут!).

>правильно указано, чтобы использовалось свое выражение
Определи свою цель.
Аноним 07/01/18 Вск 00:10:39 #648 №1116666 
Дайте ответ на задачку про палиндром, а то у меня уже горит от собственной тупости :с http://sandbox.onlinephpfunctions.com/code/c195b5bf5bc43b103d927dd9064010e7c7301e4c
Аноним 07/01/18 Вск 00:19:50 #649 №1116671 
>>1116666
Не читал что там в условии, но первое что приходит на ум: вырезать все не-буквы, пересобрать строку, начиная с конца и сравнить с первой. Одинаковые — палиндром. (Наверно есть и лучше решение).
Аноним 07/01/18 Вск 00:31:51 #650 №1116679 
>>1116666
берешь массив и начинаешь сравнивать элементы у одного индекс i у второго ленгтх-и
Аноним 07/01/18 Вск 00:53:27 #651 №1116693 
>>1116666
>>1116679
Вот такой вариант. А можно ссылку на задачу?
http://sandbox.onlinephpfunctions.com/code/10a83b5d7f2989965990706ed950cfd1f1c8ba10
Аноним 07/01/18 Вск 01:55:27 #652 №1116722 
изображение.png
>>1116693
Вот такая задача. Что делает тройное равно?
Аноним 07/01/18 Вск 01:59:38 #653 №1116724 
druz.jpg
>>1116666
Квадриплу отвечает Александр Друзь (музыка вноса черного ящика):
Ошибка 1:
Для работы с русскими символами нужно использовать кодировку utf-8.
Ты обращаешься к символу строки $text2[$i], что даст тебе 1 байт из этой строки (PHP работает со строкой, как с последовательностью байт, чем она и является), но в кодировке utf-8 символ кодируется 2-мя байтами. Чтобы получить n-ный символ из utf-8 строки:
mb_substr($str, $n, 1)
Аноним 07/01/18 Вск 02:05:24 #654 №1116728 
>>1116722
А, тут подразумевается совершенно другое решение, ну и пох. === это строгое сравнение:
$a === $b (Тождественно равно) TRUE если $a равно $b и имеет тот же тип.
Аноним 07/01/18 Вск 06:27:16 #655 №1116760 
>>1116657
Так-с.

Я попробовал написать альтернативную версию своего кода с POD.

https://ideone.com/ZKeXeW

На строке с SQL-запросом все ломается.
Я проверил, сам POD на серваке подключен.
Аноним 07/01/18 Вск 06:34:28 #656 №1116763 
14315507179530[1].png
>>1116760
Аноним 07/01/18 Вск 06:36:46 #657 №1116764 
>>1116760
Хорош жопой читать.
http://phpfaq.ru/pdo#like
https://github.com/TheSidSpears/testhub/ Аноним 07/01/18 Вск 07:00:07 #658 №1116765 
>>1114247

> Создаётся командами типа make:controller. Поудаляю
Только сначала лучше разобраться, почему - может, есть какая-то выгода.

> Подсмотрел у knpuniverse. Без подчеркивания - это страница, с подчеркиванием - какой-то элемент: форма, модуль, и т.п. По-моему удобно. Да и в библиотеках такое встречал (вроде в EasyAdmin)

Ок, дело вкуса, хотя мне не очень нравится.

>> "{{ path('tests', {'tag': tag.name}) }}"
>> Вот это мне не нравится. Разве не лучше было бы написать getTestsByTagUrl(tag)? Так мы собираем код генерации URL в одном месте, а не размазываем по шаблонам, получаем тайп-хинты, можем делать дополнительные проверки. Можем как-то централизованно влиять на генерацию URL.
> Че-то я не понял, о чем ты

Чтобы вывести ссылку, ты пишешь в шаблоне {{ path(...) }} . Вместо этого можно сделать класс UrlGenerator, в нем методы вроде getTestsByTagUrl(Tag $tag): string. И использовать их. Выгоды:

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

>> По переменным окружения - не стоит ли добавить им уникальный префикс вроде TH_..., чтобы они были гарантированно уникальными?
> И тут тоже не понял, о каких переменных ты говоришь
Переменные окружения в env.dist - больше их вроде нигде нету.

> А вот в routing.yaml у меня стоит strict_requirements: ~ и я не знаю, что означает тильда

https://stackoverflow.com/questions/8667766/what-does-mean-in-the-yml-configuration-file-in-symfony-2
http://yaml.org/type/null.html

> Но в принципе, я не понимаю, что плохого в присваивании внутри if
По моему, плохо то, что смешивается 2 действия в одной строке: создание переменной и проверка условия. Если ты быстро просматриваешь код и ищешь, где задается переменная, то ты скорее всего будешь искать строку вроде $x = ..., а на if сразу можно не обратить внимания, понадобится чуть больше времени. Удобнее, когда одна строка содержит одно действие и понятно, что строка, начинающаяся с if, не меняет ничего, а только проверяет какое-то условие.

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

>> Что-то выглядит как костыль. Значение в форму в контроллере прописать нельзя?
> Я долго искал, как это реализовать. В итоге нашел вариант переопределить поле: $form->add('search', null, ['data' => $searchString]);
> Но меня ждал облом: You cannot add children to a submitted form
> Как переопределить аттрибут поля, а не всё поле целиком, я найти не смог. Но что-то мне подсказывает, что такая возможность должна быть

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

Форма там состоит из дерева объектов, реализующих FormInterface ( https://github.com/symfony/form/blob/master/FormInterface.php ). Один объект FormInterface может представлять либо отдельное поле, либо представлять форму (или просто группу полей) и содержать в себе коллекцию дочерних объектов FormInterface.

В коде можно увидеть, что FormInterface реализует ArrayAccess (описан в мануале), а также содержит метод get($name). Таким образом, имея форму, мы можем получить ее поле с помощью $form->get('field') либо $form['field'].

Имея FormInterface, представляющий поле, мы можем получить или задать его значение с помощью методов setData/getData/getNormData/getViewData. Чем они отличаются, можно найти в документации или коде.

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

Ну и в данном случае, у тебя там в контроллере ( https://github.com/TheSidSpears/test_hub/blob/master/src/Controller/TestController.php ) есть вызов $form->handleRequest($request); который, скорее всего, принимает данные из $request->query и переносит их в поля формы. Так что код, меняющий атрибут value в шаблоне, вообще не требуется.

> В итоге нашел вариант переопределить поле: $form->add
Это не переопределение, а добавление еще одного поля.

> А для того, чтобы в миграциях автоматически проставлялась верная кодировка, мне пришлось добавить doctrine.dbal.default_table_options.charset: utf8mb4 и doctrine.dbal.default_table_options.collate: utf8mb4_unicode_ci, не смотря на то, что уже стоит doctrine.dbal.charset: utf8mb4

Ну, utf8 - это неполноценный урезанный вариант UTF-8, и смысла особого ее использовать нет, если только ты не желаешь сэкономить место в индексах. Если доктрина ее плохо поддерживает, то либо ты не разобрался в ней (надо разобраться), либо это баг в доктрине (надо зарепортить или посмотреть, может уже зарепортили). Либо в DoctrineBundle (который подключает Доктрину к Симфони).

У тебя в конфиге mysql (my.ini) по умолчанию какая кодировка стоит? utf8 или utf8mb4? И какая кодировка стоит у базы данных? Может в этом проблема?

Если есть возможность, глянь код Doctrine/DoctrineBundle и посмотри, как там определяется кодировка.

> У меня короче не получилось

Ну, там не требуется вставлять имя класса, можно писать

SELECT t FROM AppBundle:Test t
ORDER BY ...

По моему, тут получается меньше стрелок, скобок, кавычек и за счет этого код выходит читабельнее. Разве нет? Может это конечно, только мне так кажется, но мне читать DQL проще чем парсить все эти скобки и кавычки, особенно, когда там идут джойны. Тут например https://github.com/TheSidSpears/test_hub/blob/master/src/Repository/TestRepository.php#L45 DQL мне кажется был бы более читабельный, чем собирать в уме запрос по кусочкам.

По коду.

Не хватает README с кратким описанием проекта, как его установить, как запускать тесты и тд.
https://github.com/TheSidSpears/testhub/ Аноним 07/01/18 Вск 07:00:55 #659 №1116766 
>>1114247

По поводу тестов https://github.com/TheSidSpears/test_hub/blob/master/tests/Entity/TestEntityTest.php

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

Тесты обычно пишутся на основе требований, ТЗ. Ты тестируешь класс Entity\Test - я вижу, что ты сделал несколько методов-сценариев, но, мне кажется, лучше было бы составить список требований (которым должен соответствовать класс) и писать по методу на требование. Тогда по результатам прогона теста сразу видно, какие требования не выполняются.

Подумаем, какие требования мы предъявим к классу Entity\Test? Я не буду писать требования вроде "объект теста должен запоминать присвоенное тесту название", так как это спорная вещь, эффективно ли тестировать простые геттеры/сеттеры.

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

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

Далее, можно добавить еще такие требования:

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

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

Вот как может выглядеть самый простой тест для требования "можно добавить тег":

public function testCanAddTagsForTest()
{
$test = new Test;
$tag1 = new Tag;
$test->addTag($tag1);
}

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

$test->addTag($tag1);
$tags = $test->getTags();
$this->assertTrue($tags->contains($tag1));

Конечно, тут в классе почти нет никакой логики, и по сути мы занимаемся тестированием геттеров/сеттеров. То есть пишем много тестов, и почти ничего не тестируем. Надо бы настроить проведение тестов репозиториев и тестов контроллеров (либо дергать контроллеры напрямую, либо через отправку HTTP запросов на сервер, первое конечно проще и сойдет для начала, но не позволит проверять JS функционал).

У Симфони есть куцая статья https://symfony.com/doc/current/testing/database.html и первый вариант (mock entity manager) я не советую делать, это будут очень некачественные и хрупкие тесты.

Еще замечания по тестам:

> $this->assertNull($test->getName());
Стоит ли это тестировать? Ты по сути тестируешь требование "у нового теста name должно быть null", но что, если мы завтра поменяем его на '' или 'Новый тест'? Стоит ли закладывать такое требование, что название теста по умолчанию должно равняться null?

> $this->assertNull($test->getId());
Тоже непонятен смысл делать такое требование. Ведь мы можем в теории перейти на генерацию id на стороне PHP при создании объекта. Это никак не должно сломать код, зачем тогда в тесте запрещать это? Ты скорее всего ведь не хотел ставить такое требование, а просто не очень понял, как писать тесты?

> $this->assertNull($test->getFailedAttempts());
Наверно значение по умолчанию должно быть 0?

> $this->assertInstanceOf(ArrayCollection::class, $test->getQuestions());
Вот здесь уже ошибка. Так как при загрузке из БД доктрина инжектит туда PersistentCollection, и тайп-хинтить тут надо интерфейс Collection (не помню неймспейс).

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

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

> $this->assertCount(0, $test->getQuestions());
А вот это можно оставить.

> Set number of failed attempts for instantly created item
> public function setFailedAttempts($failedAttempts)
Вот такого лучше избегать. Увеличивать число попыток в тесте лучше тем же способом, каким это будет делать приложение, а не делать костыли там, где без них легко обойтись.

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

> $test->setSuccessAttempts($num1 + 20);
В тестах не стоит делать сложные вычисления, стоит их максимально упрощать. То есть была 1 попытка, мы добавили еще одну, стало две (без переменных). Так и читать тест проще, и тебе не придется дублировать код из тестируемого класса (при этом есть риск сделать одну и ту же ошибку, например, неправильно написать формулу в обоих случаях).

https://github.com/TheSidSpears/test_hub/blob/master/src/Repository/TestRepository.php
Вот тут я уже вижу логику, ее было бы хорошо протестировать.

Если ты используешь PHP7, ставь тайп хинты на возвращаемые значения функций.

> public function findByTag(Tag $tag){
Вообще, Доктрина генерирует методы finxByXXX, findOneByXXX, они тут не подошли бы?

> findByNameOrTagInclusions
Не лучше ли search или searchByKeyword или как-то так?

Я тут еще хотел посоветовать использовать faker в fixtures, но погуглил, и увидел, что он там уже используется (через alice), интересно. не знал про такую штуку. Ну прекрасно, если вдруг не знаком с ним, изучи faker, пригодится.

https://github.com/TheSidSpears/test_hub/blob/master/templates/base.html.twig#L22
> {% if isMainRoute is defined and isMainRoute == true %}

Вот это мне не нравится. У тебя переменная может быть передана, а может не быть. Как писать надежный код в такой ситуации?

https://github.com/TheSidSpears/test_hub/blob/master/templates/tests/by_tag_list.html.twig
Проверь, соответствует ли имя шаблона гайдлайнам Симфони (я сам не помню).

https://github.com/TheSidSpears/test_hub/blob/master/templates/tests/list.html.twig#L34
Это костыли, нужна нормальная функция-хелпер для склонения чисел, а еще лучше сразу использовать синтаксис для переводимых (локализумых) строк, так как в разных языках правила выбора формы слов разные.

> $em = $this->getDoctrine()->getManager();
> $tests = $em->getRepository(Test::class)
Если это у тебя часто встречается в контроллерах, стоит добавить метод для получения репозитория напрямую. Либо использовать DI для контроллеров (больше писанины).

> public function tagList(Request $request, PaginatorInterface $paginator)
Почему пагинатор передается в аргументы метода контроллера? Это такой DI?

Хорошо бы предусмотреть выдачу 404 для слишком больших номеров страниц, начиная со 2.

> $searchString = $form->getData()['text'];
лучше $form->get('text')->getData()

> if ($form->isSubmitted() && $form->isValid()) {
> $searchString = $form->getData()['text'];
> } else {
> $searchString = $request->query->get('text');
> }
А зачем else?


> } else {
> //todo customize error pages
> throw $this->createNotFoundException('There is nothing to search');
лучше выводить просьбу ввести ключевое слово

https://github.com/TheSidSpears/test_hub/blob/master/src/Controller/TagController.php
тут findAll не приводит к выборке всех записей из БД?
Аноним 07/01/18 Вск 07:01:23 #660 №1116767 
>>1114124

Я думаю, не все хотят проверку обновлений по умолчанию, так как она может замедлять работу программы. Потому там и предусмотрена команда self-update. В автоматизированных скриптах, которые используются для запуска тестов (например для Travis CI) эту команду просто вписывают в скрипт, чтобы тестирование всегда проходило на новейшей версии.

>>1113910

Использовать просто preg_match, оно ищет только первое совпадение с регуляркой, а не все. Также можно посмотреть мануал по preg_match_all, там есть опции.

>>1113902

У тебя там куча ошибок, например, круглые скобки не сбалансированы:

> $result = mysql_query($str_sql_query, $link))

Также, не подставляй переменные в SQL запрос, будет SQL инъекция: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md

>>1113811

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

>>1113736

На другой странице есть какие-то CSS правила, влияющие на раскладку элементов. Или какие-то HTML элементы.

>>1116760

Плейсхолдер :x вставляет не просто переданное значение, а экранирует в нем спецсимволы и добавляет кавычки вокруг него. Соответственно, надо писать LIKE :x.
Аноним 07/01/18 Вск 07:04:14 #661 №1116768 
>>1116760

Также, обрати внимание, что execute не возвращает результат выполнения запроса, его надо извлекать из объекта PDOStatement ($stmt), используя его методы fetch.... Они описаны в мануале.
Аноним 07/01/18 Вск 07:07:05 #662 №1116769 
>>1116764
>>1116763
Справедливо.
На самом деле, я там ещё одинарные кавычки поставил до и после плейсхолда.

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

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

В общем, я запилил своего монстра https://ideone.com/dUHfz5 и теперь хотел бы уточнить несколько вещей:

1.Я правильно сделал запрос с LIKE и двумя переменными?
2.Почему не выводится значения?
Аноним 07/01/18 Вск 07:10:25 #663 №1116770 
>>1116767
>>1116768
Ох, прости, ОП, не заметил твоего ответа, пока писал свой.

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

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

Аноним 07/01/18 Вск 07:24:15 #664 №1116773 
>>1116769
Я в коде на ideon сделал ошибку.

Там так должно было быть написано:

foreach ($aza as $desk){
$desk = $stmt->fetchColumn();
var_dump($desk);
}

Хоть этот вариант и так, и так не работает и выводит только bool(false) .
аываыв 07/01/18 Вск 08:18:04 #665 №1116775 
А assert только для тестирования. Или нормально его использовать в проекте?
Аноним 07/01/18 Вск 11:49:56 #666 №1116816 
>>1116724
http://sandbox.onlinephpfunctions.com/code/fd831e19928cf02fb83c390a4338668efd3c1116
Все равно не работает :(
Очевидно, что я обосрался где-то в цикле, но я не могу понять где.
Аноним 07/01/18 Вск 14:43:05 #667 №1116879 
>>1116773
Сори, я не могу с тобой, пусть ОП тебе отвечает. Только время потратил на тебя. Чтобы браться за пдо, нужно представлять хотя бы минимально, как с PHP работать, ты там такую чушь пишешь — это не незнание пдо, это незнание принципов работы языка вообще.
Аноним 07/01/18 Вск 16:02:38 #668 №1116899 
>>1116816
Ты вообще читал, что я тебе написал? Ошибка все еще на месте
>mb_substr($str, $n, 1)
>вместо $str[$n]
Аноним 07/01/18 Вск 16:02:44 #669 №1116900 
image.png
>>1116450
>В случае аякс запроса - конечно, редирект делать нет смысла, и надо отдавать ответ (правильный логин/пароль или нет). Обычно ответ отдается в формате JSON. Что касается авторизационной куки, есть 2 варианта - сервер может передавать ее с ответом как куку (в заголовке Set-Cookie) либо же в JSON-ответе, а клиент уже сам создает ее.

В случае с Silex мне нужно пилить собственный authentication provider, что бы получать ответ с ошибками или подтверждениями login/logout? Сейчас использую "form_login". В описании настроек есть success_handler и LogoutSuccessHandler. Но подключить LogoutSuccessHandler, не получается.
В доках по Symfony написано "adding a success_handler key and pointing it to a service id of a class that implements LogoutSuccessHandlerInterface".

Добавил в конфиг, в раздел 'logout' (пикрил)
'success_handler' => function () use ($app) {
return new CustomLogoutSuccessHandler();
}
Но продолжает использоваться DefaultLogoutSuccessHandler

Еще заметил, что названия настроек (key) фаервола немного отличаются, например в Symfony путь логаута в настройках "path" a в Silex "logout_path". Может быть в этом дело?

>Если ты хочешь делать полноценное REST API
Я делаю SPA приложение https://github.com/codedokode/pasta/blob/master/js/spa.md
Думаю разобраться в начале с обычной аутенфикацией с сессией и куками... А потом все остальное.

Аноним 07/01/18 Вск 17:01:37 #670 №1116919 
>>1116879
Справедливости ради, сам я не лез в PDO, ибо чувствовал, что мне и обычные запросы составлять сложно.

Зато, тебе будет урок. Ну и я кое-что новое узнал.
Аноним 07/01/18 Вск 17:06:23 #671 №1116922 
>>1116899
Я попробовал заменить русский палиндром на английский и мой код заработал. Я неправильно указал кодировку? Ну и цикл у меня в этот раз правильный, надеюсь?
http://sandbox.onlinephpfunctions.com/code/d68bff5b96bf3a3d5c606713c2ad4fa774254370
Аноним 07/01/18 Вск 17:42:50 #672 №1116942 
>>1116900

сделал так и CustomLogoutSuccessHandler заработал:
$app['security.authentication.logout_handler.admin'] = function () {
return new CustomLogoutSuccessHandler();
};


Судя по исходнику SecurityServiceProvider в Silex по другому не получится назначить logout_handler?
https://github.com/silexphp/Silex-Providers/blob/d9b9e4f6bdd72af745444b4d71e59a55e5e10dbd/SecurityServiceProvider.php#L558
Аноним 07/01/18 Вск 18:18:18 #673 №1116958 
Анончики, родимые, посоветуйте хорошую книгу по HTML5 минимум от 2016 года. Чтобы научиться с нуля. Я решил начать с htmlbook, но там статьи от 2010 года по HTML. Хотелось бы учиться по актуальному материалу. Видеокурсы уже есть, но я текстовый формат лучше воспринимаю гораздо.
Аноним 07/01/18 Вск 18:22:17 #674 №1116963 
>>1116958
HTMLAcademy
Аноним 07/01/18 Вск 18:28:59 #675 №1116966 
>>1116919
Я советую тебе пока отложить базы данных, попрактиковаться на базовых уроках, а когда дойдешь возвращаться сразу на PDО, пропустив mysql и mysqli, потому что они сами по себе отстают.
Аноним 07/01/18 Вск 18:34:16 #676 №1116969 
>>1116963
Это не смешно.
Аноним 07/01/18 Вск 19:23:03 #677 №1116990 
>>1116922
Основной алгоритм ты сделал верно. Осталось только причесать: например использовать "флаг" чтобы убрать выводы на каждом символе. И правильно брать символы из utf-8 строки:
http://sandbox.onlinephpfunctions.com/code/635504ff0951c21f68a07d1a47bf17bbe16c1602
Аноним 07/01/18 Вск 19:28:11 #678 №1116995 
1494791689365.jpg
>>1116990
Окей, спасибо!
Аноним 07/01/18 Вск 20:43:53 #679 №1117028 
>>1116966
Ну тут такое дело, что а)это было задание от руководителя я не погромист, просто "стремящийся" из саппорта б)я уже выполнил задачу за время прошедшее с моего последнего поста.
Но выполнил её с myqsl.

Так-то я продолжу содомизировать вторую версию кода с PDO. Сейчас попытаюсь приделать вывод исключения для своего запроса, чтобы понять, где проблема.
Аноним 07/01/18 Вск 21:00:51 #680 №1117031 
А можете какую-нибудь книгу по php посоветовать новичку, который только вкатывается?
Аноним 07/01/18 Вск 21:02:27 #681 №1117032 
>>1117031
Книга ОП-а - самое то. Начинай с неё.
Аноним 07/01/18 Вск 21:20:34 #682 №1117038 
15108421799880.jpg
я чот туплю. у меня на сайте есть страница с формой, допустим form.php и ее action это result.php. когда я ее отправляю, мне нужно, чтобы в result.php были в кач-ве request headers определенные заголовки, которые я передам с этой страницы.

как это сделать? я добавляю header($this->setCustomHeaderBlahBlah()) в result.php, но он получается показывается как хедер ОТВЕТА, response header. а это полное говно. как-то возможно с формой передать заголовки?
Аноним 07/01/18 Вск 21:29:42 #683 №1117041 
>>1116339
Спасибо, друг, про шаблоны уже читаю.
Смотрел этот урок https://youtu.be/xihMCwARRpk и хотел чуть отойти от его идеи, и что бы не создавать на html руками каждый блок "@название категории [новейшее]", то хотел сделать генерацию этих блоков прям из БД циклом.
Аноним 07/01/18 Вск 21:37:26 #684 №1117043 
>>1117038
upd почитал, понял что без js невозможно это сделать. буду ajax-запрос слать кверями и там передавать нужные хедеры
Аноним 07/01/18 Вск 22:07:53 #685 №1117049 
Capture.JPG
>>1117041
Обосрался чот.
Аноним 07/01/18 Вск 22:21:22 #686 №1117050 
>>1117031
Я сам только начинаю, но путем прочитывая кучи обсуждений на торрентах, нашел книгу, которую все считают лучшей: Мэтт Зандстра - PHP. Объекты, шаблоны и методики программирования
Аноним 07/01/18 Вск 23:10:47 #687 №1117059 
1.png
Парни, а есть более удобный способ, дабы обратиться именно к значению, а не к индексу?

Просто мне кажется, использование этой "прокси-переменной" $а2, это лишнее нагромождение. Стопудова есть способ вывести значение удобней чем так, но я пока не додумался до этого. Так чё?
Аноним 07/01/18 Вск 23:11:03 #688 №1117060 
>>1117049
ох, пиздец.
Аноним 07/01/18 Вск 23:13:58 #689 №1117063 
1.png
>>1117059
Забейте, вопрос отменяется, до меня дошло.
Аноним 07/01/18 Вск 23:15:07 #690 №1117064 
>>1117041
>>1116339
Сегодня опять взялся на php, в общем, запилил таки свою генерацию, надо было в запросе к бд во внешнем цикле указать id
> "SELECT * FROM `articles` WHERE `categorie_id` = " . $new['id'] ." ORDER BY `id` DESC LIMIT 4"

>>1117049
Да, у него там мешанина в коде несется по полной, нет ооп итд, но за это говно поясняет вполне доступно.
Аноним 07/01/18 Вск 23:15:52 #691 №1117065 
>>1117049
"от профессионала" - от скромности не умрет. говнокод периода пхп4. это бывает, когда 10 лет говнякаешь лэндосы на фрилансе
Аноним 07/01/18 Вск 23:17:42 #692 №1117067 
>>1117049
ну и как бэ привет sql-инъекция. (сорян, что все в разных постах - не могу контролировать эмоции).
Аноним 07/01/18 Вск 23:21:29 #693 №1117069 
>>1117059
Шта? echo $word[array_rand($word)];
Пиши код так, чтобы с ходу было понятно, что он делает.
Аноним 07/01/18 Вск 23:24:34 #694 №1117072 
>>1117069
Хуясе ты господь, я уж и не думал что можно ещё кароче.
Аноним 07/01/18 Вск 23:47:28 #695 №1117075 
Я задачу про студентов таки сделал https://github.com/moabit/student-list. ОП, лучей добра, если посмотришь. Комменты и файл ридми на днях допилю. Алсо, это моя первая попытка что-то покодить кроме задачек, так что сорри, если там совсем ужас.
Аноним 07/01/18 Вск 23:49:45 #696 №1117076 
>>1117075
Пофиксил линк: https://github.com/moabit/student-list
Аноним 08/01/18 Пнд 00:52:59 #697 №1117094 
Сап, двач.

А как вы преобразуете закодированные base64 строки, для функций base64_decode и quoted_printable_decode нужно сперва убрать =?utf-8?B? и =?UTF-8?Q? вместе с ?= в конце строки, написал свою функцию конечно, но стало интересно это все так делают?
Аноним 08/01/18 Пнд 01:17:32 #698 №1117102 
>>1117067
>>1117049
> (1:22:50) "Защиту я здесь обеспечивать не буду, по этому просто знайте, что этот код не безопасен. Но для тестов пойдет."
Аноним 08/01/18 Пнд 04:05:46 #699 №1117128 
Просветите, почему стили срабатывают через раз? Я в файле стилей написал, допустим цвет шрифта. Он работает. Потом я цвет захотел изменить, но он не меняет, хотя я написал правильно и всё сохранил.
Аноним 08/01/18 Пнд 04:06:31 #700 №1117129 
>>1117128
Ну или через десяток перезагрузок срабатывает.
Аноним 08/01/18 Пнд 05:23:17 #701 №1117138 
Кто пишет тесты, почитайте https://m.habrahabr.ru/company/yandex/blog/346186/ - там многое относится и к PHP.

>>1117128

Ты не написал, где это делаешь? У себя локально, на хостинге? Какие правила кеширования прописаны в веб-сервере?

Попробуй очистить кеш в браузере или включить опцию не использовать кеш в инструментах разработчика (Ctrl + Shift + I, вкладка Network).

>>1117094

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

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

>>1117049

Всем, кто не понял, где уязвимость в коде, читать урок https://github.com/codedokode/pasta/blob/master/security/sql-injection.md

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

>>1117038

Только через AJAX.
Аноним 08/01/18 Пнд 05:24:22 #702 №1117139 
>>1117028

Исключения специально выводить не надо, если ты работаешь локально, то включи display_errors = On в php.ini, чтобы они выводились на экран, если на продакшен-сервере, то выводить на экран ничего не нужно, а нужно найти логи ошибок PHP или Апача и посмотреть там.

>>1116922

$text2[$i] берет $i-й байт строки, а не i-й символ, урок https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

Используй mb_substr.

>>1116900

> Я делаю SPA приложение
Ну удачи. Пока никто его не сделал.

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

> мне нужно пилить собственный authentication provider, что бы получать ответ с ошибками или подтверждениями login/logout?
Скорее всего. Тот, что form, не заточен на работу с аякс-запросами, а только на обычные формы.

По поводу аякса. Я тут кое-что нашел, можно это посмотреть:

- https://symfony.com/blog/new-in-symfony-3-3-json-authentication
- http://www.webtipblog.com/adding-an-ajax-login-form-to-a-symfony-project/
- http://symfony.com/doc/current/security/custom_authentication_provider.html (тут создание своего провайдера)

> Судя по исходнику SecurityServiceProvider в Silex по другому не получится назначить logout_handler?
Видимо, да. Он там ставит свой хендлер по умолчанию, и ты можешь его переопределить с помощью настройки security.authentication.logout_handler.admin. Только писать ее логичнее не где-то отдельно, а передавать как второй параметр в $app->register().

> В доках по Symfony написано "adding a success_handler key and pointing it to a service id of a class that implements LogoutSuccessHandlerInterface".
Это доки к чему? Если это https://symfony.com/doc/current/reference/configuration/security.html то это дока по Symfony SecurityBundle, то есть бандлу от Симфони. Который скорее всего является оберкой над Symfony Security Component.

Бандлы - это части фреймворка Симфони, они не подходя к Силекс и документация к ним тоже. Они интегрируют Компонент в контейнер, обеспечивают его настройку через конфиги и тд. Компоненты Симфони - это независимые библиотеки, которые можно использовать отдельно от Симфони. Я думаю, Силекс использует именно Security Component: https://symfony.com/doc/current/components/security.html (причем у меня ощущение, что часть документации там относится все равно к бандлу, а не к компоненту).

Код тут https://github.com/symfony/security

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

> Еще заметил, что названия настроек (key) фаервола немного отличаются, например в Symfony путь логаута в настройках "path" a в Silex "logout_path". Может быть в этом дело?
Это скорее всего из-за того что в Симфони это настройка бандла, а в Силексе это настройка провайдера. И они оказались разные.
Аноним 08/01/18 Пнд 05:25:21 #703 №1117140 
>>1116775

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

Что же касается assert из phpunit, то они вряд ли подходят для чего-то, кроме тестов.

>>1116770

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

О PDO пишут, открой например:

- https://habrahabr.ru/post/137664/
- http://phptherightway.ru/#Базы_данных

Прочитай phptherightway и сравни с тем, что расскаызвают в твоем учебнике.

>>1116769

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

> $first = "%$first%";
> foreach ($first as $id => $x)
Как это по твоему должно работать? Ты перебираешь по очереди все буквы (байты, если говорить строго) из строки "%$first%" и для каждой буквы выполняешь SQL запрос?

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

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

Аноним 08/01/18 Пнд 05:38:28 #704 №1117142 
>>1117138
>Какие правила кеширования прописаны в веб-сервере?
Никакие, я только вкатиться пытаюсь. XXAMP включил первые две строки.

Поясните за базы данных в php. Mysqli, pdo и прочие. Есть какая-то наиболее годная или всё они нормальны?
Аноним 08/01/18 Пнд 05:42:12 #705 №1117143 
>>1117142

Тогда можно открыть средства разработчика в браузере, вкладку Network и отключить там где-то кеширование (а заодно проверить, какие заголовки отдает сервер). Или чистить кеш браузера руками.

mysqli и PDO это не БД и не СУБД, а библиотеки-клиенты для соединения с сервером СУБД. Я бы посоветовал PDO.
Аноним 08/01/18 Пнд 09:36:40 #706 №1117180 
>>1117139

>Там почему-то информация о залогиненном пользователе хранится в контейнере
Ты имеешь ввиду service container ?
https://symfony.com/doc/3.4/service_container.html

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

>По поводу аякса. Я тут кое-что нашел, можно это посмотреть:
- https://symfony.com/blog/new-in-symfony-3-3-json-authentication
- http://www.webtipblog.com/adding-an-ajax-login-form-to-a-symfony-project/
- http://symfony.com/doc/current/security/custom_authentication_provider.html (тут создание своего провайдера)
спасибо, я прочитал,
по первой статье symfony-3-3-json-authentication - нужно дополнить стандартный SecurityServiceProvider в Silex, чтобы он поддерживал этот механизм аутенфикации, если я правильно понял.
Во второй статье как раз используют login_form и добавляют свой AuthenticationSuccessHandler, то что я думал сделать.
По третьей статье - пишут что это hard, и есть ссылка на статью "How to Create a Custom Authentication System with Guard", по счастливой случайности есть подобный рецепт именно для Silex. Для меня сложность заключается, в том что на данный момент я не до конца разобрался как работает Аутенфикация в Symfony, и в чем разница между Authenticator и Authentication Provider
https://silex.symfony.com/doc/2.0/cookbook/guard_authentication.html

>Бандлы - это части фреймворка Симфони, они не подходя к Силекс
>Я думаю, Силекс использует именно Security Component:
Век учись - век учись.

>Соответственно надо смотреть код/доки по провайдеру Силекса и по компоненту, а не по бандлам от Симфони. И из этого делать вывод, как там что настраивается.
Коварно, учитывая что в доках Silex Security ссылка именно на бандл, а не на компонент.
Аноним 08/01/18 Пнд 12:07:19 #707 №1117243 
>>1117102
>просто знайте
Всегда знал, что программирование — это просто. Удивляюсь, что у него столько времени ушло на объяснения, можно было проще сделать.
Аноним 08/01/18 Пнд 12:21:49 #708 №1117247 
>>1117049
А ты чего ожидал от видоса "Учим PHP за час?", что он тебе про mysqli расскажет, ооп добавит и ещё шаблончиков подкинет?
Аноним 08/01/18 Пнд 12:50:22 #709 №1117258 
>>1117138
>Только через AJAX.
а как через ajax сделать редирект на ту страницу, на которую идет запрос? т.е. как имитировать отправку нормальной формы?

я вот с jquery написал такое: https://ideone.com/yKWdnb
но проблема в том, что видимо с т.з. браузера этот редирект не имеет отношения к первоначальной функции и поэтому там этих хедеров нет.
Аноним 08/01/18 Пнд 13:17:56 #710 №1117278 
>>1117258
Форма же из браузера отправляется, а у всех браузерных запросов есть хедеры. Зачем джаваскрипт? Непонимат. В result.php разбираешь хедеры так же как в form.php (если ты там это делаешь)

Запрос к форм
от форм будет запрос к резулт
2 запроса! Зачем джаваскрипт.
Аноним 08/01/18 Пнд 13:22:34 #711 №1117279 
Здравствуй вебач, поясни пожалуйча на пальцах за эту хуету
>$result->data_seek
Орайли хуесос, так лампово поясняет по началу, а потом резко бросает бомжа о реальность заставляя гуглить
Аноним 08/01/18 Пнд 13:23:42 #712 №1117280 
>>1117279
ой, я обосрался. Просто за
>data_seek
Аноним 08/01/18 Пнд 13:25:47 #713 №1117281 
Помогите плес, не могу никак сообразить, как это можно реализовать.
Есть задача
>На картинке — часть программы, создающая философское настроение. Принцип работы таков: есть 5 наборов слов, из которых случайно выбираются слова, образуя такую структуру:

> слово1 слово2 слово3
> слово1 слово2 слово3
> Я слово4 слово5
Я ее сделал, но есть еще доп условие, с которым я справиться не могу
>можно упростить программу, сделав что-то вроде шаблона для генерации стиха на основе массива. В каждый элемент массива мы кладем массив вариантов слова или строки, из которого надо сделать выбор: [$word1, $word2, $word3, ["\n"], ...]. Мы добавляем массив с "\n", чтобы в нужном месте вывелся перевод строки. Остается только пройти по массиву циклом и сгенерировать стих..
Cделал двухмерный массив, а как сделать так, чтобы он рандомно из него извлекал значения и выводил, я понять не могу.
https://ideone.com/0VoXhM Сам текст программы, пробовал через foreach реализовать, но нихуя не работает.
Аноним 08/01/18 Пнд 13:31:54 #714 №1117283 
>>1117281
А зачем ты тупо ворд1 вывел?
Аноним 08/01/18 Пнд 13:39:00 #715 №1117287 
СЛОЖНА
Аноним 08/01/18 Пнд 14:03:52 #716 №1117302 
>>1117278
как их разобрать - это понятно. также понятно, как сделать response headers. проблема в том, что мне нужны кастомные заголовки запросов (request headers). они отсылаются КЛИЕНТОМ, т.е. в данном случае браузером.

если ты их можешь сделать без js, то подскажи, пожалуйста, как.
Аноним 08/01/18 Пнд 14:05:47 #717 №1117303 
>>1117279
>>$result->data_seek
в смысле, на пальцах? ресулт - это объект какого-то класса, а дата_сик - это судя по всему его поле (либо, если ты пропустил скобочки в конце, метод). или что тебе объяснить?
Аноним 08/01/18 Пнд 14:14:55 #718 №1117308 
>>1117303
...
for ($j = 0 ; $j < $rows ; ++$j)
{

echo 'name: ' . $result->fetch_assoc()['name'] . '<br>';
$result->data_seek($j);
echo 'profession: ' . $result->fetch_assoc()['profession'] . '<br>';
$result->data_seek($j);
echo 'date: ' . $result->fetch_assoc()['date'] . '<br>';
$result->data_seek($j);
echo 'id: ' . $result->fetch_assoc()['id'] . '<br>';
$result->data_seek($j);
}
...
Если я уберу $result->data_seek($j); то мне выведет только 1 список данных.
Дата сик проверяет на наличие или чего? Хуйня какаято, без пояснений без нихуя на грит тебе код и краткое описание, и ни слова функциях mysqli
Аноним 08/01/18 Пнд 14:35:16 #719 №1117319 
>>1117281
Нужно проходиться по всему массиву слов $words и брать случайное значение из каждого элемента массива $wordsN.
Аноним 08/01/18 Пнд 14:52:56 #720 №1117324 
>>1117308
https://secure.php.net/manual/ru/mysqli-result.data-seek.php
вбил бы в гугол хоть.

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

у ОПа есть урок по пдо.
Аноним 08/01/18 Пнд 14:58:02 #721 №1117325 
>>1117308
Это вызов метода data_seek() класса mysqli_result

https://secure.php.net/manual/ru/mysqli-result.data-seek.php
https://secure.php.net/manual/ru/class.mysqli-result.php

Он >Перемещает указатель результата на выбранную строку

Т.е. например, если у тебя в результате 10 строк, то data_seek(5) переместит указатель на 6 строку (отсчёт, судя по всему, идёт с 0), и при выполнении fetch_assoc() вернётся эта строка, а не весь массив результатов
Аноним 08/01/18 Пнд 14:58:41 #722 №1117327 
>>1117324
Ааа понел, просто я невнимательный хуесос и вообще некоторые вещи до меня доходят с диким лагом - нужно только отвлечься немного.
В процессе гугления так же нашел инфу по которой будто переучиться с мускли на пдо на раз два можно - очень схожи типа. И да, сегодня пдо а завтра какая другая хуйня, и если я не прав то дай аналог орейли
Аноним 08/01/18 Пнд 15:05:10 #723 №1117328 
>>1117302
>кастомные
Тогда нельзя.
Аноним 08/01/18 Пнд 15:08:04 #724 №1117333 
>>1117139
>Пока никто его не сделал
Звучит как вызов! Впрочем, я жалкая посредственность, так что тоже не смогу.
Аноним 08/01/18 Пнд 15:09:36 #725 №1117334 
>>1117333
А я тоже начал, но с фронтенда.
Аноним 08/01/18 Пнд 15:10:16 #726 №1117335 
>>1117327
>сегодня пдо а завтра какая другая хуйня
так можно про вообще все сказать. но пока другой хуйни даже на горизонте нет. учить пару дней, а использовать будешь несколько лет (и даже когда появится другая хуйня, не захочешь на нее переходить)

нормальных КНИГ по пхп пока не написано. тут кто-то рекомендовал Зандстру, но она написана в 2011, а пхп - это не си, с 2011 года все сильно поменалось, в т.ч. используемые практики. то, что считалось нормальным в 2011, сейчас считается говнокодом, увы. не говоря уже о том, что в 2011 актуальной версией была 5.3

я считаю, нужно: читать книги по джаве (герберт шилдт, java complete reference, чистый код роберта мартина), мануал по пхп - он у нас охуенный (в отличие от других языков), учебник и пасту ОПа, проходить хорошие курсы (profit).
Аноним 08/01/18 Пнд 15:16:56 #727 №1117339 
>>1117138
>Если это для разбора письма, то не надо делать это руками, а надо взять расширение или библиотеку для разбора писем. Погугли.
>А в твоем примере - в письме ведь могут быть и другие варианты кодирования, ты их учел?
Да, для чтения заголовка письма, ну 2 варианта только предусмотрел, один для заголовка, второй для названия файла вот. Погуглю, благодарю.
Аноним 08/01/18 Пнд 15:21:53 #728 №1117341 
>>1117335
ОПу спасибо - годно сделал, по нему пхп учил
Я ленивый, информацию мне нужно подавать структурированно, как у ОПа и орейли
Аноним 08/01/18 Пнд 15:27:00 #729 №1117347 
Я может в шары долблюсь, но почему оно не работает? https://ideone.com/ZBReXD , что ему в 7 строчке не нравится?
Аноним 08/01/18 Пнд 15:29:44 #730 №1117349 
>>1117347
Читай ошибку и ищи проблему на пятой строке
да, долбишься
Аноним 08/01/18 Пнд 15:31:57 #731 №1117352 
>>1117349 Да, пасиба забыл совсем. Но почему пишет что ошибка в 7 строке? Если ошибка блять в 5? Да, я идиот
Аноним 08/01/18 Пнд 15:34:53 #732 №1117353 
>>1117352
Ну верни все в зад и переведи её в гугле, подумой
Аноним 08/01/18 Пнд 15:37:13 #733 №1117354 
>>1117353
Разобрался, спасибо, анончик
Аноним 08/01/18 Пнд 15:51:18 #734 №1117358 
>>1117283
Да фишка в том, что он из word1 должен тоже рандомно выводить слово, а он не выводит. Я просто не пойму, какой функцией мне вообще это реализовать надо, через foreach?
>>1117319
Там же по задаче, вначале должно быть слово из первого подмассива, потом из второго, потом из третьего, во второй строке все повторяться должно.
Аноним 08/01/18 Пнд 15:54:48 #735 №1117360 
>>1117358
Добавлю
Просто я как думаю, через mt_rand()запилить генератор случайных чисел, чтобы он мне под каждый подмассив случайный индекс давал в их диапазоне, и потом как то вывести общий результат.
Аноним 08/01/18 Пнд 19:09:55 #736 №1117435 
>>1117358
>Я просто не пойму, какой функцией мне вообще это реализовать надо, через foreach?
Да, через foreach.

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

Проходишься с его помощью по массиву $words и из каждого его элемента $wordsN берешь случайное значение.

Как обращаться к элементам перебираемого массива, надеюсь, знаешь?

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

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

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

https://secure.php.net/manual/ru/ref.array.php


Эти функции ты уже должен пройти:
https://php.net/manual/ru/function.count.php
https://php.net/manual/ru/function.array-rand.php

Аноним 08/01/18 Пнд 19:12:20 #737 №1117436 
Эта каптча гугла... С каждым годом становиться всё хуже. Почему её так любят везде добавлять?
Аноним 08/01/18 Пнд 19:22:23 #738 №1117439 
>>1117243
Ты чет горишь и придираешься к словам, которые по какой то причине были вырваны из контекста. Будь няшей, а не злюкой :3
Аноним 08/01/18 Пнд 19:24:11 #739 №1117441 
>>1117436
Хз че вы так бугуртите, мне ее даже проходить не нужно, я тупо обновляю страницу, быстро вставляю текст с картинкой и отправляю.
Аноним 08/01/18 Пнд 20:35:52 #740 №1117470 
4chan1220201177706.png
ФутабаЧенел-скрин.JPG
Всем добрый день. Долго думал над тем, какой тестовый проект придумать, чтоб затронуть многие аспекты разработки, надумав создать свою борду на 2 доски. Хочется писать на на нативном просто для того, чтоб полностью все повторить/изучить, хотя тут я сомневаюсь, поэтому вопрос: писать все с 0 на нативке (чтобы, повторяюсь, попрактиковаться, понять особенности языка и тд.), использовать фреймворк или написать свой движок?
Аноним 08/01/18 Пнд 20:38:07 #741 №1117471 
>>1117436
по-моему, заебатая капча. я в соновном даже галочку не жму, оно само валидируется там.

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

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

обрати внимание на фразу про хорошие курсы - в них все предельно структурировано.

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

>>1117360
для работы с массивами нужно использовать функции работы с массивами (array_rand в твоем случае).
Аноним 08/01/18 Пнд 20:41:03 #742 №1117476 
СУКА.PNG
Ребята, ВНЕЗАПНО после года работы стал тупить mysql в купе с PHP 5.6 на локальном проекте с переустановленным на днях XAMPP (после переустановки винды случайно скачал версию с пхп7 и маялся с багом апача 2 месяца (от нагрузки вылетал), поставил обратно 5.6).

Получаю ошибку Maximum execution time of 30 seconds exceeded на mysqli::query.
Код:
Рабочий:
$db_data = $db->query(запрос);
while ($data = $db_data->fetch_assoc()) {}

Не рабочий:
while ($data = $db->query(запрос)->fetch_assoc()) {}

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

Че за проклятье-то блять? На всякий случай boot файл приложил.
Аноним 08/01/18 Пнд 20:43:52 #743 №1117477 
>>1117470
идея хорошая, но надо учитывать, что без нужного опыта проект в реальности оказывается в несколько раз сложнее, чем кажется, когда придумываешь его. попробуй начать с проектирования БД, нарисовать на листочке таблицы со связями.

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

алсо, чем "с 0 на нативке" отличается от "написать свой движок"?
Аноним 08/01/18 Пнд 20:50:12 #744 №1117480 
>>1117476
>while ($data = $db_data->fetch_assoc())
костыльненько.

ты хочешь реализовать method chaining, но для этого нужно, чтобы $db->query() возвращал сам себя: https://habrahabr.ru/post/170019/
Аноним 08/01/18 Пнд 20:51:33 #745 №1117481 
>>1117477
раз ты сказал, то ничем, просто читал не особо улавливаю разницу между, например, движком и фреймворком, почитал об этом на форумах. движок - по типу CMS, как мне понимается. Буду благодарен, если объяснишь более доходчиво.

>это и получится свой учебный микрофреймворк

У меня есть некоторые наработки, потому что хотел написать свой микрофреймворк, хотя кроме самописного роутера, некотрых пакетов симфони там и нет ничего, лол.
Аноним 08/01/18 Пнд 20:59:40 #746 №1117484 
АБУ ЗАЕБАЛ С ТВОЕЙ "КАПЧЕЙ" КОТОРОЙ НЕТ ХУЙ ПОСТ ОТПРАВИШЬ СОБАКА

>>1117480
>костыльненько.
в файлах на 3 строки и так сойдет.
>method chaining
что это?
>https://habrahabr.ru/post/170019/
спасибоза линк. я хоть понял наконец-то, зачем нужны интерфейсы.
Аноним 08/01/18 Пнд 22:16:22 #747 №1117516 
Есть ли смысл учить сразу препроцессор (sass или less), чтобы быстрее верстку освоить?
Аноним 08/01/18 Пнд 22:21:02 #748 №1117519 
>>1117481
движок - это типа готовая болванка, которую ты средствами ее интерфейса настраиваешь под свои нужды. это необязательно cms, может быть движок для вики, форума и пр. предполагается, что ты не должен быть программистом, чтобы поднимать сайты на cms.

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

>>1117484
>я хоть понял наконец-то, зачем нужны интерфейсы
на здоровье. после года работы пора бы
Аноним 08/01/18 Пнд 22:54:55 #749 №1117545 
>>1117516
Программер 15+ лет, ненавижу вкатывальщиков, PHP -- единственный пост, в котором я отвечаю по-настоящему.

Да, имеет, bootstrap/sass + gulp.
Аноним 08/01/18 Пнд 22:56:12 #750 №1117547 
>>1117545
олсо в следующей версии CSS обещают многие фишки из сегодняшних препроцессоров, но пока их норм не сделоли, это неважно.
Антикризисные меры Аноним 08/01/18 Пнд 23:22:41 #751 №1117573 
ОП, посмотри, пожалуйста, задачу про Вектор с антикризисными мерами.

https://3v4l.org/NneQd
Аноним 09/01/18 Втр 00:45:17 #752 №1117599 
>>1117545
ну и C/C++ ещё, на котором, собственно, РНР и написан, как и большинство других языков
Аноним 09/01/18 Втр 00:46:15 #753 №1117600 
>>1117599
да какое "большинство", практически все
Аноним 09/01/18 Втр 01:03:55 #754 №1117601 
>>1117545
>>1117599
>>1117600
как бы в чём кайф PHP,

это фреймворк на C++, который сохраняет синтаксис Cpp, с лучшими решениями от той же Java (тайпхинт, анонимные функции, asserts и т.д.).

До сих пор, это,
1) язык, который уверенно держит 80++% рынка веба,
2) стал в несколько раз быстрее с вресии 7.0
3) в общем смысле приятен и быстр в разработке. Качественная разработка на РНР до сих пор впечатляет по скорости.

Это не имеет никакого отношения ко вкатывальщикам <5лет опыта, но, в целом, высркоквалифицированное программирование на PHP -- это круто.
Аноним 09/01/18 Втр 01:06:07 #755 №1117603 
>>1117601
сорри за опечатки, я пьян, но иначе я бы это не написал вообще.
Аноним 09/01/18 Втр 01:17:16 #756 №1117607 
>>1117603
https://www.youtube.com/watch?v=ZD1QrIe--_Y
Аноним 09/01/18 Втр 01:20:48 #757 №1117608 
Сап, есть вопрос как организовать позиционирование изображение над изображением?
Суть такова. Допустим есть карта. Есть например изображение которое нужно разместить на карте и запомнить это место. Затем выводить его при каждой загрузке изображения. Как это сделать ума не приложу. Ну тоесть координаты в пикселях наверное можно хранить в бд. И брать их оттуда, но вот как в CSS это всё организовать?
Аноним 09/01/18 Втр 01:22:28 #758 №1117609 
>>1117608
а карта какая? на чём работает? яндекс/гугл карта, или что-то самодельное?
Аноним 09/01/18 Втр 01:26:07 #759 №1117611 
>>1117609
карта - это просто jpg изображение.
Аноним 09/01/18 Втр 01:29:33 #760 №1117612 
>>1117611
тогда просто поверх позиционируй свою пижню,
https://www.w3schools.com/cssref/pr_pos_z-index.asp
https://www.w3schools.com/css/css_positioning.asp
Аноним 09/01/18 Втр 01:30:28 #761 №1117613 
>>1117611
>>1117612
ну и https://www.youtube.com/watch?v=X3ik_8QjM3U
Аноним 09/01/18 Втр 01:31:19 #762 №1117614 
>>1117612
Спасибо
Аноним 09/01/18 Втр 01:33:15 #763 №1117615 
>>1117614
велкам, чувак, PHP-тред -- единственное место, где тебе по-доброму подскажут, а не насмеются и пошлют нахуй
Аноним 09/01/18 Втр 01:42:51 #764 №1117619 
>>1117615
ну и C/C++ ещё >>1117599
Аноним 09/01/18 Втр 01:57:43 #765 №1117622 
large.jpg
>>1117619
>>1117601
если хотите прям просветлиться, качайте исходник PHP, написанный на православном C++, и изучайте, что такое "язык PHP" http://php.net/downloads.php
Аноним 09/01/18 Втр 02:05:27 #766 №1117627 
>>1117622
ну и вообще, вы, дурацкие вкатывальщики, должны понять, что все (ново)(модные) C#, Java, PHP, Perl, Node.js, R, Go -- всё это написано на С++/C http://lurkmore.to/Pure_C , что, как бы, без вариантов.
Аноним 09/01/18 Втр 02:10:32 #767 №1117629 
>>1117627
"пистон" туда же, забыл упомянуть. Всё написано на C/С++.
Аноним 09/01/18 Втр 02:24:22 #768 №1117633 
>>1117627
>>1117629
и собственно почему мы допускаем существование C++ фреймворка PHP -- потому что это кайфный, быстрый, эффективный и понятный фреймворк для глобальных проектов, как Facebook, Vk, Wikipedia и миллионов любых других.
Аноним 09/01/18 Втр 03:01:37 #769 №1117636 
>>1117633
*веб-проектов

альтернатив нет
Аноним 09/01/18 Втр 05:01:12 #770 №1117652 
>>1117545
>PHP -- единственный пост
> --
Линуксойд?
Аноним 09/01/18 Втр 05:57:40 #771 №1117658 
image.png
>>1117471
>по-моему, заебатая капча. я в соновном даже галочку не жму, оно само валидируется там.
>
>правда херово, что на телефоне постоянно заставляют угадывать витрины магазинов и прочее говно. а с десктопа все ок.
Конченная каптча. Угадывать витрины это вообще моё самое любимое. И ждать по несколько секунд пока новые картинки появиться. Обожаю.

Вообще, самая крутая капча, которую я видел, за всё время, это на доброчане. Настоящие слова читать и печатать быстрей, потому что мы читаем не каждый слог отдельно а всё слово целиком, и печатать тоже проще, потому что руки уже привыкли.
Накрутить на неё каких-нибудь фильтров типо шума и глитчей всяких, чтобы роботам было тяжело разгадать и норм будет.
Аноним 09/01/18 Втр 09:04:48 #772 №1117673 
>>1117652
ну в том числе, но без фанатизма
Аноним 09/01/18 Втр 10:27:41 #773 №1117687 
Screenshot from 2018-01-09 10-17-54.png
>>1114247
Привет. Видел твое резюме на хх. Отпиши мне на мыльце, расскажу о вакансии.
Аноним 09/01/18 Втр 10:53:49 #774 №1117693 
Немного не по теме треда, но вопрос такой:

Как сделать регистронезависимый поиск по БД? Т.е. чтобы независимо от того, какая ошибка с регистром была совершена при запросе, он завершился удачно.
Аноним 09/01/18 Втр 10:59:32 #775 №1117697 
>>1117693
https://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html
Аноним 09/01/18 Втр 11:12:41 #776 №1117701 
>>1117697
А если я делаю поиск через переменную?

Выражение такого типа:
SELECT * FROM pet WHERE name REGEXP '^$x';

не работает.

М.б. в PDO есть какая-то фича специально для этого?
Аноним 09/01/18 Втр 11:41:42 #777 №1117705 
>>1117701
>SELECT FROM pet WHERE name REGEXP '^$x';
>не работает.
Я полагаю, потому что символ $, это метасимвол регулярного выражения, а не обозначение переменной

https://dev.mysql.com/doc/refman/5.5/en/regexp.html#regexp-syntax
>$ Match the end of a string.

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

https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like

Более того, в твоём запросе есть уязвимость для SQL инъекции

Чтобы её не было нужно использовать плейсхолдеры

https://secure.php.net/manual/ru/pdo.prepared-statements.php

SELECT FROM pet WHERE name LIKE :search
Аноним 09/01/18 Втр 12:21:25 #778 №1117710 
Почему в конструктор исключения 3 параметром передается предыдущее исключение, и даже есть метод getPrevious(), но нет свойства $previous в котором оно хранится?

http://php.net/manual/ru/class.exception.php#exception.props.file
Аноним 09/01/18 Втр 15:50:20 #779 №1117776 
Вот сейчас будет очень глупый вопрос.
Например у меня страница обрабатывает GET запрос с двумя переменными, например x и y.
Так же на этой странице у меня есть ссылки с разными значениями этих x и y, что-то вроде <a href="index.php?x=x1">x1 и href="index.php?y=y1">y1 и их много с разными значениями
Мне нужно чтобы запоминалось состояние этих переменных. То есть например я первый раз захожу на страницу, гет поля пустые = ставятся значения по умолчанию, если я нажму на ссылку х5 например, то что-то произойдет, потом я нажму на y6 например, то тоже что-то произойдет, но моя х переменная сбросится. Если вручную прописывать в юрл ?x=5&y=6 то всё работает. Я что-то вообще запутался, помогите аноны.
Аноним 09/01/18 Втр 16:33:59 #780 №1117792 
>>1117776
Добавляй динамически полный href каждой ссылке.

<a href="?x=5&y=6&unset=x">x активна (нажми чтобы инактивировать)</a>
<a href="?x=5&y=6&unset=y">y активна (нажми чтобы инактивировать)</a>
<a href="?x=5&y=6&z=1488">z не активна</a>

или

<a href="?y=6&z=1488">x активна (нажми чтобы инактивировать)</a>
<a href="?x=5&z=1488">y активна (нажми чтобы инактивировать)</a>
<a href="?x=5&y=6">z активна (нажми чтобы инактивировать)</a>
<a href="?x=5&y=6&z=1488&q=101010">q не активна (нажми чтобы активировать)</a>

Ну ты понел.
Аноним 09/01/18 Втр 17:11:06 #781 №1117814 
>>1117710
>Почему в конструктор исключения 3 параметром передается предыдущее исключение, и даже есть метод getPrevious(), но нет свойства $previous в котором оно хранится?

Вот что накопал:

https://github.com/php/php-src/blob/master/Zend/zend_exceptions.c#L371

https://github.com/php/php-src/blob/master/Zend/zend_exceptions.c#L641

ОП, я правильно понимаю, что это зашито намертво? Это. Охуенно.
Аноним 09/01/18 Втр 17:19:09 #782 №1117822 
headinthecloudsbywhitediamondsltd-d4ua83m.jpg
Как же хочется знать си.
Аноним 09/01/18 Втр 18:10:23 #783 №1117845 
>>1117435
В том то и дело, я не понимаю, как я должен это случайное значение брать?
Аноним 09/01/18 Втр 18:11:45 #784 №1117846 
>>1117845
Ой туплю, то есть знаю, но как мне надо рандомно к нему обратиться я хз.
Аноним 09/01/18 Втр 18:23:53 #785 №1117857 
>>1117814
>>1117822
да, что-то не понятно, нужно заглянуть в соседний тред, чтобы разобраться.
https://github.com/pmaprog/codedokode-html Аноним 09/01/18 Втр 18:36:59 #786 №1117863 
>>1117102

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

>>1112937
>>1113592

Было бы удобнее конечно делать примеры на jsfiddle или codepen, а то надо файлы скачивать и в браузере открывать.

1) все ок
2)

> font-family: "Trebuchet MS";
В конце списка шрифтов всегда нужно ставить один из стандартных serif, sans-serif итд ( http://www.wisdomweb.ru/CSS/font.php )

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

3) ок, верно

4)

> .wrapper div:not(:first-child)
:not поддерживается только в новых браузерах, а для старых лучше было бы сделать 2 правила, для всех дивов + правило для :first-child.

5)

> margin: 0 -3px -4px -3px;
Вертикальные маргины можно не указывать, так как у inline-элементов они ни на что не влияют.

6) В списке шрифтов в конец надо добавить стандартный шрифт.

7)

> <input type="edit">
такого типа вроде нет, нужно выбрать другой: https://developer.mozilla.org/ru/docs/Web/HTML/Element/Input

8) На первый взгляд неплохо, но если примечаний много, они накладываются друг на друга: https://codepen.io/anon/pen/PEEePd

Надо бы добавить clear или найти другое решение.

9)

Если текста много, он заезжает под картинку снизу, это надо убрать: https://codepen.io/anon/pen/RxxyGy

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

10) Пока картинка не загрузилась (и неизвестны ее размеры), верстка выглядит криво. Попробуй поставить в HTML в теге img ссылку на несуществующую картинку (http://example.com/invalid.png) и посмотри, как выглядит верстка. Это надо исправить, верстка должна смотреться хорошо в любой момент, в том числе в процессе загрузки.

Можно попробовать задать какие-то мин. размеры для figure или улучшить позиционирование figcaption.

> em[data-ref="1"]::before {
> left: 64px;
Это не годится, не надо вручную подбирать отступ под каждую сноску, надо сделать для них выравнивание вправо (подсказка: можно сделать сноску фикс. ширины и внутри нее выровнять текст вправо, также можно в абс. поз. использовать не left, а отрицательные right + margin-right, чтобы прижать картинку правым краем к левому полю).

> figcaption .subtitle
Чтобы расположить подзаголовок под заголовком, достаточно дать ему display: block.

11)

> user-scalable=no
> maximum-scale=1.0, minimum-scale=1.0
Это плохая идея. Эта строка запрещает масштабирование на мобильных устройствах, и это неудобно. Почему я не могу изменить масштаб?

Я бы советовал избегать использовать в CSS-селекторах теги span и div. Это теги общего назначения, и может завтра кто-то добавит в верстку еще один спан, и на него автоматически применятся твои стили. Неудобно. Лучше указать CSS-класс или использовать не тег общего назначения.

Кнопки сделаны хорошо, но не работает навигация с помощью клавиатуры - скорее всего из-за того, что input скрыт с помощью display none, если скрыть его другим способом (задвинуть за край экрана, сделать нулнвых размеров, спрятать в блоке с overflow, засунуть под label с помощью z-index, сделать 100% прозрачным), то наверно клавиатурная навигация заработает.

12) Недостаток использования id в том, что нам нужно следить, чтобы они были уникальны, когда на странице несколько блоков табов (особенно, если код не пишется вручную, а как-то генерируется). Но это еще ладно. А вот то, что ты в CSS прописываешь id, не позволяет нам использовать более 4 вкладок на странице.

Нужно, чтобы:

а) можно было поставить 2 блока с вкладками на странице
б) можно было вложить блок с вкладками в тело вкладки в другом блоке

Лучше было бы использовать для связи заголовка и тела вкладки CSS-классы или data-атрибуты и написать правила так, чтобы они могли бы повторяться в разных блоках вкладок.

Что касается связи input и label, наверно, там придется оставить связь через id, если только у тебя нет идей получше.

Этот пункт задачи должен научить тебя применять CSS-правила точечно только к нужным элементам и избегать конфликтов.

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

Но вообще, твоя работа производит хорошее впечатление и у тебя верно переданы цвета и шрифты, думаю, что у тебя верстка хорошо получается.
https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2 Аноним 09/01/18 Втр 18:37:57 #787 №1117864 
>>1113256

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

>>1113346

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2

> Почему мне тогда просто не поставить try/catch на роутер, а если кто то захочет обрабатывать какую либо ошибку, напишет себе личный try/catch на тот метод, который хочет?
Можно так, но можно просто поставить обработчик всех необработанных исключений через set_exception_handler.

> я думал у меня только index.php в публичном доступе
Я думаю, что нет. Веб-сервер по умолчанию отдаст любые файлы из публичной папки, например, дампы, бекапы, конфиг, файлы .git и и тд. Потому и надо выделить в проекте публичную папку, где лежит только то, что мы готовы отдать наружу.

У тебя там есть какие-то запреты в htaccess, но я например не вижу исключения для index.php, возможно, что они не работают или работают не так, как задумано. Это в любом случае ненадежный метод, так как достаточно убрать htaccess или еще как-то накосячить с настройкой сервера и защита отключится. Я помню, в фейсбуке был баг - они какое-то время вместо выполнения скрипта index.php отдавали его пользователям как файл - если поискать, в сети есть эти утекшие кусочки кода фейсбука.

>>> const REG_FORM_SEX_MAN = "Мужской";
>> Эту константу уместнее поместить в студента, а не в проверяльщик формы.
> Почему?
Потому, что пол - это свойство студента, а не формы. Вот мы удалим форму, но студент и пол останется. А константа для него?

>>Папку лучше назвать не Student, а Entity или Model.
> почему?
Потому, что если ты будешь развивать проект, у тебя появятся новые сущности (например, Занятия, Факультеты и тд) и ты ведь не будешь для каждой свою папку делать. В случае с Entity их можно будет в ту же папку класть.

>>Этот класс не очень-то и нужен, тебе ведь никто не запрещает просто создать PDO через new.
> вообще я украл это. ну и как я понимаю, он для того что бы данные для пдо из ини файла брать.
Получается, он не очень-то и нужен. Этот класс делают люди, не знакомые с DI. Подход с сингтонами и статическими методами описан у меня в уроке про DI https://github.com/codedokode/pasta/blob/master/arch/di.md

> не понимаю. я вроде делаю большинство того что там написано
Если делать DI, то должно быть так:

class UsersTableGateway {
public function __construct (Db $db) { ... }
}

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

>>Здесь проблема в том, что ты возвращаешь "неполноценные" объекты Student, у которых не заполнена часть полей. Это усложняет код, так как в нем где-то гуляют полностью заполненные объекты, а где-то нет и различить их невозможно. >Получив такой объект, ты не знаешь - у студента пустое название группы или оно просто не загружено. Если ты хочешь вернуть только 4 поля, надо использовать массив или отдельный объект. Но лучше бы вернуть полноценных студентов.
> В смысле гулять. Он же используется только в профайле и потом уничтожается. А возвращаться полноценых с хешомпароля, логином и тд не опасней?

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

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

function doSomething(Student $s)
{

Как ему угадать, какие поля заполнены, а какие нет у объекта $s? Никак, он будет думать, что там полноценный объект.

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

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

> header('location: profile');
Этот относительный URL, который будет вести на разные страницы в зависимости от того, с какого URL делается редирект. Лучше написать /profile чтобы все было однозначно.

>>Контроллеры profile и reg наверно можно объединить?
> но они же разные
По моему так регистрация и редактирования профиля очень похожие вещи, и там и там мы заполняем свойства студента и сохраняем их в БД.

> Я сначала подключая headers, и потом к нему только тело. Это нормально?
Ну можно так оставить, но по моему так логичнее делать один вызов render. Пусть вью сам решает, какая на той или иной странице шапка.

> Нормально ли создавать их и вызывать функцию doExecute (что я тоже кстати подсмотрел), когда это можно все в конструктор запихать.
Конструктор должен только инициализировать и подгогтавливать объект к работе, а не делать саму работу. Так что нет, неправильно. Что касается doExecute, лучше было бы назвать его просто execute.

Также, если у тебя контроллер обязан иметь метод execute, то логично сделать интерфейс для контроллера, зафиксировать в нем наличие этого метода и требовать от всех контроллеров реализовать этот интерфейс. Урок про интерфейсы: https://github.com/codedokode/pasta/blob/master/php/interfaces.md

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

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

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

> А еще я запушил новые файлы и папки а старые так же остались и получилась каша. Как скрыть старые?
Удалить у себя файлы, закоммитить удаление, запушить на гитхаб. Эти удаленные файлы все равно останутся в истории репозитории.
Аноним 09/01/18 Втр 18:38:43 #788 №1117865 
>>1117710

Встроенные в PHP классы вроде Exception могут быть написаны на Си, и в этом случае они могут не соблюдать общие правила. То есть это свойство там, конечно, есть, но оно скрыто и недоступно из PHP кода. Наверно, чтобы не было соблазна туда лезть, чтобы использовали getPrevious().

>>1117776

Я вижу тут варианты:

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

>>1117180

>>Там почему-то информация о залогиненном пользователе хранится в контейнере
> Ты имеешь ввиду service container ?
Да. В нем, как следует из названия, хранятся сервисы, а также параметры конфигурации. То есть не меняющиеся между запросами значения. Не знаю, почему в Симфони решили туда класть Request, User и прочее (request они уже заменили на request_stack).

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

Плюс, это делает код менее надежным. Если сервис использует request или user, как он будет работать при вызове из командной строки? Или там например есть роутер, который разбирает URL и сохраняет результаты разбора в атрибуты request. Получается, что у нас в один момент времени в контейнере лежит request без атрибутов, а потом с атрибутами.

По моему, user/request/session должны создаваться в начале цикла обработки запроса, передаваться куда-нибудь в контроллер и пусть он дальше распоряжается ими как хочет. А так, это получаются те же глобальные переменные.

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

> по первой статье symfony-3-3-json-authentication - нужно дополнить стандартный SecurityServiceProvider в Silex, чтобы он поддерживал этот механизм аутенфикации, если я правильно понял.
Можешь предложить разработчикам Silex свою помощью в этом ;)

> Во второй статье как раз используют login_form и добавляют свой AuthenticationSuccessHandler, то что я думал сделать.
Да, это хороший вариант, просто возвращать свой response нужного типа после проверки. Я думаю, это проще всего.

> Для меня сложность заключается, в том что на данный момент я не до конца разобрался как работает Аутенфикация в Symfony, и в чем разница между Authenticator и Authentication Provider
Я бы советовал разобраться, если есть время. Начать именно с компонента Security, посмотреть код, может, нарисовать диаграмму классов, понять, кто за что отвечает. Может, ты лучше начнешь понимать устройство Симфони, ну и может какие паттерны полезные увидишь в коде.

> Коварно, учитывая что в доках Silex Security ссылка именно на бандл, а не на компонент.
Да, это такая проблема Симфони, что там может быть документация немного перепутана. Но зная отличие между компонентами и бандлами, я думаю, ты разберешься. Опять же, ты можешь просто сравнить код Security Bundle и Security Component и увидеть за что каждый отвечает.

>>1117324

нет, урока по PDO у меня нет, но есть статья на Хабре.

>>1117333

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

>>1117436

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

>>1117814

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

> zend_declare_property_null(zend_ce_exception, "previous", sizeof("previous")-1, ZEND_ACC_PRIVATE);

Видимо, оно не описано в документации. Если посмотреть, там вообще приватные поля не описаны, только протектед. Если тебе это кажется неправильным, можно (на англ) создать баг в багтрекере по поводу документации и предложить описать приватные поля. Если они согласятся, то зайти на edit.php.net и отредактировать англ. и рус. версии документации.
Аноним 09/01/18 Втр 18:39:40 #789 №1117866 
Аноны, я скоро создам новый тред, кому я не ответил в этом или предыдущем треде, напомните о себе
Аноним 09/01/18 Втр 20:52:25 #790 №1117920 
Есть приложение на пхп5, которое на свежей убунте с апачем, пхп7.1 и mysql выдаёт кучу символов и строки кода. Майпхпадмин работает нормально, эхо пхпинфо тоже работает нормально. Как включить поддержку старого пхп? Или проблема в другом? Пхп не учил, вообще далёк от Айти.
Аноним 09/01/18 Втр 22:26:12 #791 №1117951 
Как заставить хром показывать ошибку интерпретатора вместо HTTP ERROR 500 ?
Аноним 09/01/18 Втр 22:48:50 #792 №1117960 
>>1117920
охуенно ты конечно проблему описал. переключиться на другую версию можно командами

sudo a2dismod php7.1
sudo a2enmod php5 (подставь точный аргумент)

>>1117951
включить еррор_репортинг и дисплей_еррорс
Аноним 09/01/18 Втр 22:51:56 #793 №1117963 
>>1117951
у тебя судя по вопросу нет понимания, что вообще происходит. хром - это клиент, вместо него может быть что угодно. ошибка интерпретатора тебе и так показывается, нужно выводить отладочную информацию (см. в предыдущем посте ). http error 500 - это http статус, он идет в кач-ве заголовка ответа. ты можешь при желании любой контент выдавать с любым статусом.
Аноним 09/01/18 Втр 23:17:16 #794 №1117974 
>>1117866
>>1117076
Напомню про своих студентов.
Аноним 09/01/18 Втр 23:32:11 #795 №1117983 
>>1117963
Ну так в консоли браузера тоже HTTP ERROR 500 и больше ничего.

>>1117960
> включить еррор_репортинг и дисплей_еррорс
В программе имеется в виду? Я что то такое включал, не помогало.

Я просто смотрел ролики всякие на ютубе, там у ребят браузер выводил ошибки интерпритатора как то.
Аноним 10/01/18 Срд 01:10:46 #796 №1118021 
>>1117983
ini_set("display_errors", On);
error_reporting(-1);
В начале скрипта.
Могут быть проблемы с показом ошибок из вложенных файлов. Надежнее добавить:
display_errors = On
error_reporting = E_ALL
В php.ini и перезапустить сервер. Как узнать где php.ini:
<?php
phpinfo();

В начале будет список загружаемых ini файлов.
Аноним 10/01/18 Срд 01:41:38 #797 №1118029 
>>1118021
ini_set("display_errors", 'On');
чет кавычки отвалились
Аноним 10/01/18 Срд 05:32:16 #798 №1118047 
>>1117687
У- успешен!
Аноним 10/01/18 Срд 06:51:53 #799 №1118051 
>>1116766
Спасибо! Уже исправляю и выставляю на проверку https://github.com/TheSidSpears/testhub/
Аноним 10/01/18 Срд 07:43:03 #800 №1118055 
image.png
Переношу роуты из аннотаций в yaml. Почему-то для классов Request и Tag ничего не требуется, но вот PaginatorInterface нужно описать в роутере (наверное, потому что интерфейс). В документации подобных проимеров не нашел, пытался всунуть с помощью requirements и defaults, но не вышло. Как в роутере прописать, что требуется объект такого-то класса?
Аноним 10/01/18 Срд 08:03:52 #801 №1118056 
Это снова я, почему меня не выводится случайного слова из первого подмассива?
https://ideone.com/SQwBre
Аноним 10/01/18 Срд 08:04:28 #802 №1118057 
>>1118056
Ой бля, в глаза ебусь.
Аноним 10/01/18 Срд 08:05:15 #803 №1118058 
>>1118057
Хотя все равно не выводит, хоть я и функцию исправил.
https://ideone.com/SQwBre
Аноним 10/01/18 Срд 08:35:41 #804 №1118062 
Доброе утро пхпач, это снова я =(99

Почему этот цикл заместо того чтобы выводить $rows количество раз один и тот же результат оно перебирает всю таблицу? id 1 balabla id2 balbla id3 blabla Как это работает?

for ($j = 0 ; $j < $rows ; ++$j)
{
$row = $result->fetch_array(MYSQLI_ASSOC);
echo 'name: ' . $row['name'] . '<br>';
echo 'profession: ' . $row['profession'] . '<br>';
echo 'date: ' . $row['date'] . '<br>';
echo 'id: ' . $row['id'] . '<br><br>';
}
Аноним 10/01/18 Срд 08:39:12 #805 №1118063 
Подобосрался
for ($j = 0 ; $j < $rows ; ++$j)
{
$row = $result->fetch_array(MYSQLI_ASSOC);
echo 'name: ' . $row['name'] . '<br>';
echo 'profession: ' . $row['profession'] . '<br>';
echo 'date: ' . $row['date'] . '<br>';
echo 'id: ' . $row['id'] . '<br><br>';
}
Аноним 10/01/18 Срд 08:44:21 #806 №1118065 
>>1118021
Спасибо
Аноним 10/01/18 Срд 08:53:20 #807 №1118066 
>>1118062
А, разобрался
Аноним 10/01/18 Срд 09:57:48 #808 №1118072 
Такой вопрос, при выводе информации, через
echo, можно ли сделать так, чтобы ключ массива задавался через переменную?
Аноним 10/01/18 Срд 10:11:50 #809 №1118076 
Пытаюсь вывести информацию из подмассива в котором 4 элемента, чому у меня выходит пустая строка? Помогите плесс.
$rand_keys = array_rand($words['word1'], 4);
echo $words['word'][$rand_keys[0]] . "\n";
Аноним 10/01/18 Срд 10:13:32 #810 №1118078 
>>1117865
>Можешь утешать себя, что ты помогаешь разработке самодвижущихся автомобилей Гуглом (я думаю, что мы тут размечаем картинки, на которых потом обучают и тренируют нейросети для распознавания образов). Гугл умно это придумал, как найти бесплатных размечальщиков данных.
Я слышал об этом, но я не могу понять тогда, каптча узнает что картинки не правильные? Значит кто-то уже сказал ей об этом, поэтому нет смысла, размечать картинки.
Аноним 10/01/18 Срд 10:20:30 #811 №1118080 
>>1117845
>>1117846
$a = array(array(..., ..., ...), array(...), array(...));

foreach ($a as $k => $v) {
...

$w = $a[$k][$r];
}


Ещё есть функция array_rand()

$w = array_rand($a[$k]);
Аноним 10/01/18 Срд 10:25:22 #812 №1118081 
>>1118078
Или робот уже сам отобрал картинки и калибрует их точность, проверяя есть неправильные распознавания, отмечаемые большинства пользователями.
Аноним 10/01/18 Срд 10:29:04 #813 №1118082 
>>1118080
Так я тут >>1118076 и пытаюсь через нее реализовать, но мне пустое значение выводит.
Походу слишком туп для этого.

Аноним 10/01/18 Срд 10:30:29 #814 №1118085 
>>1118080
В любом случае спасибо тебе анончик.
Аноним 10/01/18 Срд 12:22:10 #815 №1118117 
Анон, есть два нуб-вопроса про массивы и циклы.

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

foreach ($z as $v=>$f)

и

foreach ($z as $f)

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

2.Если я собираюсь перебрать значения взятые из БД, мне стоит юзать foreach или while? Или тут тупо "что удобнее, то и бери"?
Потому-что если есть такой выбор:
while ($row = $stmt->fetch())
{
echo $row['name'] . "\n";
}

ИЛИ

foreach($stmt as $row);{
echo "<p>". $row['id']."|".$row['name'];
}

то мне foreach больше нравится.
Аноним 10/01/18 Срд 12:25:11 #816 №1118122 
>>1118117
Ну я там к fetch параметры не передал, но это такая постмодернистическая пост-ирония, а не демонстрация моей криворукости и распиздяйства.
Аноним 10/01/18 Срд 12:46:08 #817 №1118135 
>>1118055
может просто делать тайп-хинт по классу?
Аноним 10/01/18 Срд 13:20:28 #818 №1118145 
>>1118117
>>1118122
Во втором фетча вообще нет.
Аноним 10/01/18 Срд 13:44:28 #819 №1118151 
>>1118145
Не, я знаю, что в foreach его и не должно быть.
Аноним 10/01/18 Срд 14:07:40 #820 №1118154 
Подскажите, хорошая ли идея взять за стандарт JSONAPI для обмена сообщениями между клиентом и api , в частности сделать php класс Error со свойствами как в Error Object согласно стандарту ( http://jsonapi.org/format/#error-objects ), и создавать по такому на каждую ошибку валидации поля формы? И для всех остальных ошибок, например аутенфикации. Для привязки валидационной ошибки соответствующему полю формы в Error Object нужно указывать имя поля, походит ли source/parameter?

Аноним 10/01/18 Срд 14:12:00 #821 №1118155 
>>1117705
Анон, я правильно понимаю, что сам по себе регистронезависимый запрос будет проще сделать в PDO из-за использование плейсхолдов в запроса, вместо переменных напрямую?
Аноним 10/01/18 Срд 14:45:24 #822 №1118169 
Я таки сделал задачу массива костылями, хехехе.
Аноним 10/01/18 Срд 14:47:52 #823 №1118170 
Сейчас начал разбирать верстку. Такой нубский вопрос: с помощью чего можно измерять все эти пиксели, проценты прямо на экране? То есть я пытаюсь верстать разные макеты, указываю размеры в css, но с помощью чего можно получившийся результат проверить. Может есть расширения какие-то или в инспекторе можно где-то это найти.
Аноним 10/01/18 Срд 15:08:27 #824 №1118184 
>>1118169
Молодец, покажи
Аноним 10/01/18 Срд 15:09:54 #825 №1118187 
>>1118170
Pixel perfect
Аноним 10/01/18 Срд 15:20:10 #826 №1118197 
>>1118184
Да уже как дома буду.
Аноним 10/01/18 Срд 15:34:27 #827 №1118201 
Всё ещё не могу разобраться с работой сайта.
Ubuntu, apache, php, mysql. Есть сайт, который лежит в папке, весь на пхп. Вчера вообще не работал, но разобравшись добавил его базу данных, дал доступ и почти всё работает.
Теперь вместо кучи ошибок высвечивает одну:
Error: [Template [menu/before.tpl] not found!], [no number specified]
Сам файл лежит в /var/www/x/tpls/default/menu/, т.е. врод на месте, и всё что в нём написано это <ul>. Как решить? В каком направлении гуглить?
Аноним 10/01/18 Срд 15:34:54 #828 №1118202 
Двач-помогач!

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

foreach ($sline as $s=>$a){
$linkcity[] =$a;
}

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

$linkcity = array_values($sline);

Но че-то в результат нихрена не то выходит.

Где моя ошибка?
Аноним 10/01/18 Срд 15:51:27 #829 №1118213 
>>1118151
Ебать ты наркоман!
Аноним 10/01/18 Срд 17:10:03 #830 №1118247 
1d63fc5f1ebf82e6a19723ff5ccc3b2c.png
>>1118184
Ну вот просто лютый говнокод, но зато работает.
https://ideone.com/vl4GYE
Аноним 10/01/18 Срд 18:43:01 #831 №1118286 
>>1118202
>
не то это что?

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

в таком случае пишут так:
$linkcity = [];
foreach ($sline as $a) {
// логика
$linkcity[] =$a;
}
то есть определяют массив в начале.

array_values же используют исключительно для переиндексации.

что значит "не то"? сделай var_dump($sline) и посмотри, что там.
Аноним 10/01/18 Срд 18:44:58 #832 №1118287 
>>1118247
сто раз же уже писали, вместо for, count и rand используйте foreach и array_rand
Аноним 10/01/18 Срд 21:55:12 #833 №1118400 
объясните мне, где ошибка, несколько дней не могу решить задачку про афон в кредит я конечно не останавливался и шел дальше и там всё было максимальо просто, но вот именно циклы вообще не получаются, задачу про депозит кое-как решил
https://ideone.com/TGcqYH
Аноним 10/01/18 Срд 23:16:24 #834 №1118453 
>>1118400
break убери и исправь очепятку в 21 строчке.
Аноним 11/01/18 Чтв 00:01:40 #835 №1118475 
>>1118076
>>1118082
Не знаю, у меня всё получилось

https://ideone.com/IO0Stu

Смотри что за ошибка у тебя и сдампь переменные с помощью var_dump(...)

>>1118247
Не правильно

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

Строку можно складывать с помощью оператора .=

$s = 'Hello';
$s .= ' World';

http://php.net/manual/ru/language.operators.string.php



https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2 Аноним 11/01/18 Чтв 02:11:46 #836 №1118527 
>>1113346

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

> https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/composer.json
Имена неймспейсов желательно писать с большой буквы, хотя в PSR-4, такого требования вроде нет.

> https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/dump.sql
Ключевые слова языка SQL принято писать заглавными: http://www.sqlstyle.guide/ru/#зарезервированные-слова

id обычно идет первым в списке полей.

> passwordhash
> second_name
Слова надо разделять единообразно.

> the_group
Лучше просто добавить кавычки `group` (это в MySQL так, в стандарте SQL используется "group", ссылку на стандарт дать не могу, так как он стоит денег: http://modern-sql.com/standard , в общем доступе есть черновики стандарта 2011).

> token text null
Тут нужно бы добавить комменатрий и указать тип поля поменьше.

> $routeWithoutGETParam = $this->delGETParametersFromRoute($routes);
Используй лучше parse_url

> 'studlist\\controllers\\'.$routeWithoutGETParam[1].'Controller
На линуксе имена файлов чувствительны к регистру.

> https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/controllers/TableController.php#L14

> private $title = '';
> private $db;
> private $searchData;
А зачем сохранять эти данные в поля класса? Не лучше ли просто сделать их локальными переменными?

> https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/model/Student/Student.php
> public $parameters = array('login' => '', 'email' => ''

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

> public function setStudentParametersFromForm()
Модель в MVC не должна обращаться к параметрам HTTP запроса в $_POST. Также, посмотри, как странно выглядит код в контроллере:

> $this->student->setStudentParametersFromForm();
В метод ничего не передается, он откуда-то сам берет данные.

> $this->parameters[$name] = trim(htmlspecialchars($_POST[$name], ENT_QUOTES));
Зачем тут использован htmlspecialchars? Его используют при вставке текстовых данных в HTML код. Но здесь, в модели, мы еще не знаем, как будут использованы данные, будут ли они когда-нибудь вставляться в HTML-код. Зачем тогда использовать htmlspecialchars?

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

> https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/model/UsersTableGateway/UsersTableGateway.php#L42
> return $stmt->fetch(\PDO::FETCH_ASSOC)["passwordhash"];
Есть метод в PDOSTatement для получения единственного значения.

> if ($stmt->fetch(\PDO::FETCH_ASSOC)["COUNT(*)"])
То же самое.

> public function getStudentsForTable($orderByLimitOffset)
Здесь передается массив. Но нигде не описано, что это за массив, какие в нем могут быть аргументы. Лучше либо сделать отдельные аргументы, либо передавать объект.

> $stmt = $this->db->prepare("SELECT name, second_name, the_group, points
> ORDER BY $orderBy
Здесь значения вставляются напрямую в запрос без проверки - возможна SQL инъекциия.

> return $stmt->fetchAll(\PDO::FETCH_CLASS, 'studlist\model\Student\Student');
Эта команда не поместит значения из БД в массив $parameters внутри объекта.

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/model/UsersTableGateway/UsersTableGateway.php#L107
Что это за странный способ обработки исключений? С каких пор модель делает куда-то редиректы?

> ПОЧЕМУ ЕСЛИ Я ДЕЛАЮ БИНД orderBy ТО сортировка не работает?
Потому, что значения плейсхолдеров вставляются в запрос в кавычках, вроде 'name', и получается фиксированная строка (по которой идет сортирвка), а не название колонки.

> https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/model/Verification/Verification.php#L53
> public function VerificationFormsStudent
Имена функций принято начинать с глагола, сделайЧтоТо().

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/model/Verification/Verification.php#L138
> static public function verificationLogined(UsersTableGateway $db): bool
Лучше внедрить объект $db в валидатор с помощью DI, через конструктор.

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

И непонятно, зачем ты там обрабатываешь значения кук с помощью htmlspecialchars. Это ни от чего не защищает.

Я бы советовал тебе сделать задачку про экранирование отсюда https://github.com/codedokode/pasta/blob/master/soft/web-server.md#Экранирование чтобы лучше разобраться с разными видами экранирования данных.

> https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/model/Pager.php
Здесь, по моему, не очень удачно спроектирован обьъект. Там есть публичное поле, которое заполняет метод setPager(). Но, когда у тебя есть этот объект в переменной, ты не знаешь, был ли ранее вызван метод или нет, и не понимаешь, есть ли нужные данные в поле или нет. Это не позволяет писать надежный код.

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

Что-то у тебя слабовато знание ООП. Ты не решал задачу про Гостиницу или про Продюсерское Агентство? Они есть в треде. Я бы советовал отвлечься и решить их.

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/model/StudentsBox.php
Не очень понятно, зачем вообще нужен этот класс? Что моделирует объект этого класса, какую сущность?

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/model/ViewRender.php
Тут явное нарушение принципа единой ответственности (каждый класс решает свою задачу, имеет свою зону ответственности) - класс отвечает и за вывод view, и за расчет пагинации, хотя это никак не связанные между собой задачи.

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

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/controllers/TableController.php#L98
Непонятно, почему контроллер вывода списка студентов отвечает за разлогинивание или залогинивание.

> if ($_GET['orderBy'] != ('points' || 'the_group' || 'name' || 'second_name')) {
Это так не работает. Оператор || - это оператор, который возвращает true или false. http://php.net/manual/ru/language.operators.logical.php

Получается в итоге выражение вроде

if ($_GET[...] == true)

И это явно не то, что нужно. Тебе наверно подойдет in_array.

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/controllers/ErrorController.php
для страницы ошибки нужно выдавать отличный от 200 код HTTP: https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP

Если ты не знаком с HTTP, прочти мой урок по нему: https://github.com/codedokode/pasta/blob/master/network/http.md

Для залогинивания/разлогинивания пользователей желательно сделать отдельный класс.

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/view/login.phtml
Не надо использовать echo, лучше использовать <?= ?>

https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/view/profile.phtml
не вижу здесь защиту от XSS.

эти 2 файла очень похожи:

- https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/view/profile.phtml
- https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/view/reg.phtml

не лучше ли сделать из них один?

> https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2/blob/master/view/table.phtml
Для формирования ссылок для сортировки или пагинации лучше сделать специальную функцию, а не делать это прямо в шаблоне. Также, символ & в HTML коде надо вписывать как & amp;

Аноним 11/01/18 Чтв 04:37:07 #837 №1118548 
>>1118400

> if (($credit + $percent
на процент надо умножать, а не складывать.

> if (($credit + $percent + $tax) < $max)
> $max = $credit * $percent + $tax;
Этот if можно заменить на функцию min() или max(), сможешь? Надо сделать так:

выплата за этот месяц = наименьшему из (сколько осталось долга, сколько может заплатить школьник)

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

>>1118202

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

>>1118247

Тут много однообразного кода. Давай я тебе дам подсказку:

// варианты первого слова
$words1 = ['...', '...', '...'];
// варианты второго слова
$words2 - [..., ..., ...];

// массив, содержащий массивы слов
$allWords = [$words1, $words2, ...];

// Идем по массиву массивов слов и на каждом шаге выбираем 1 слово
foreach ($allWords as $variants) {
var_dump($variants);
}

>>1118201

Скорее всего, он ищет файл не в той папке. С помощью var_dump выведи текущую папку (getcwd()) и путь к шаблону, который он пытается подключить.
Аноним 11/01/18 Чтв 04:37:48 #838 №1118549 
>>1118170

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

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

>>1118155

Подстановка переменных напрямую в запрос создает риск SQL инъекции. Подстановка через плейсхолдеры предотвращает уязвимость. Урок https://github.com/codedokode/pasta/blob/master/security/sql-injection.md

>>1118154

При отдаче ошибок очень важно разделять виды ошибок:

- есть ошибки, которые можно показать пользователю (вы ввели 5 символов, но пароль должен содержать не менее 8)
- есть детали, которые нельзя показывать пользователю, из соображений безопасности, и потому, что он их не поймет: "Не удалось подсоединиться к БД по адресу 10.0.0.1 с логином user и паролем 123456". Вместо таких ошибок нужно отдавать общее сообщение вроде "Произошла ошибка на сервере".

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

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

> в частности сделать php класс Error со свойствами как в Error Object ... и создавать по такому на каждую ошибку валидации поля формы?
Вообще, тут есть варианты - можно сделать класс специально для JSONAPI, а можно сделать класс для ошибок валидатора и настроить для него маппинг в JSON-объект. С одной стороны, если валидатор отдает объект, завязанный на JSON, то он превращается из валидатора общего назначения в валидатор специально для API на JSON, с другой стороны, если делать отдельно класс ошибки валидатора и отдельно класс ошибки для JSON, получается лишняя писанина.

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

> Для привязки валидационной ошибки соответствующему полю формы в Error Object нужно указывать имя поля, походит ли source/parameter?
parameter это имя параметра из query string. Если у тебя API и ты отправляешь данные формы JSON то логичнее использовать source/pointer и указать им на элемент в отправленных на сервер данных.

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

Также, при отображении ошибки надо предусмотреть ситуацию, когда в source не указано поле или указано невидимое/несуществующее поле и все равно вывести сообщение.
Аноним 11/01/18 Чтв 04:38:23 #839 №1118550 
>>1118117

Ты пишешь foreach ($x as $k => $v) только если тебе нужен ключ $k. Если он не нужен, не пиши его. Это облечает чтение кода, не надо смотреть, как используется переменная $k.

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

> Если я собираюсь перебрать значения взятые из БД, мне стоит юзать foreach или while?
Лучше использовать fetchAll(). Не надо в одном месте кода получать значения из БД и тут же их выводить, почитай про шаблоны: https://github.com/codedokode/pasta/blob/master/php/templates.md

>>1118078

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

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

>>1118076

У тебя по моему опечатка. В первой строке ты берешь 4 случайных ключа из массива $words['word1'], но во второй строке пытаешься взять элемент из другого массива $words['word'] (без цифры 1).

Также, если в массиве меньше 4 элементов, то взять 4 случайных ключа не получится.

>>1118072

да:

$days = ['Понедельник', 'Вторник'];
$number = 0;
echo $days[$number];

>>1118062

Метод fetch_array возвращает текущую строку результата, и передвигает "курсор" (указатель на текущую строку в результате) на следующую строку.
Аноним 11/01/18 Чтв 04:39:01 #840 №1118551 
>>1118058

> $rand_keys = array_rand($words['word1'], 1);
Читай мануал http://php.net/manual/ru/function.array-rand.php

Если ты указал, что тебе нужен 1 ключ, то array_rand вернет не массив с 1 элементом, а сам ключ.

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

>>1118055

Увы, тут наверно надо лезть в код Симфони (может быть HttpKernel?), чтобы понять, почему. За создание и вызов контроллера отвечает HttpKernel в компоненте http-kernel. Напомню, что компонент - это независимая от Симфони библиотека, и в Симфони настройки для этого компонента (в том числе аргументы для сервисов) задаются в бандле https://github.com/symfony/framework-bundle

- https://symfony.com/doc/current/components/http_kernel.html
- https://github.com/symfony/http-kernel/blob/master/HttpKernel.php#L132
- https://github.com/symfony/http-kernel/blob/master/Controller/ControllerResolver.php#L33
- https://github.com/symfony/http-kernel/blob/master/Controller/ArgumentResolver.php

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

- https://github.com/symfony/framework-bundle/blob/master/Resources/config/services.xml#L21

Здесь мы видим отсылку к сервису argument_resolver. Поищем его определение и код:

- https://github.com/symfony/framework-bundle/search?utf8=%E2%9C%93&q=argument_resolver&type=
- https://github.com/symfony/framework-bundle/blob/8089ce7d84e6fd96531b0b2fab20977b7b7b968e/Resources/config/web.xml#L24
- https://github.com/symfony/http-kernel/blob/master/Controller/ArgumentResolver.php

Вторым аргументом в конструкторе указано

> iterable $argumentValueResolvers = array()

Но в описании сервиса там нет значений, лишь строка

> <argument /> <!-- argument value resolvers -->

А ниже мы видим странные сервисы:

> <service id="argument_resolver.request_attribute
> <service id="argument_resolver.request"
....

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

https://github.com/symfony/framework-bundle/blob/8089ce7d84e6fd96531b0b2fab20977b7b7b968e/FrameworkBundle.php

> $container->addCompilerPass(new RegisterControllerArgumentLocatorsPass());
> $container->addCompilerPass(new ControllerArgumentValueResolverPass());

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

https://github.com/symfony/http-kernel/blob/master/DependencyInjection/ControllerArgumentValueResolverPass.php

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

Второй класс, влияющий на ход сборки контейнера - это https://github.com/symfony/http-kernel/blob/master/DependencyInjection/RegisterControllerArgumentLocatorsPass.php

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

Это тяжело поначалу, но поможет тебе всерьез разобраться в Симфони.
Аноним 11/01/18 Чтв 04:39:37 #841 №1118552 
>>1117693

Тут надо учитывать такие особенности.

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

- https://dev.mysql.com/doc/refman/5.7/en/charset-general.html (англ)
- http://gahcep.github.io/blog/2013/01/05/mysql-utf8/
- http://itif.ru/kodirovka-mysql-kak-izbezhat-oshibok/

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

Выясни, какой collation используется для колонки в твоей таблице. Для этого есть ( https://stackoverflow.com/questions/7617412/discover-collation-of-a-mysql-column ) запрос вроде
SHOW TABLE STATUS ... и SHOW FULL COLUMNS ...

Казалось бы, то же относится и к регуляркам. Но не тут-то было:

- https://dev.mysql.com/doc/refman/5.7/en/regexp.html (англ)

> The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.

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

- https://bugs.mysql.com/bug.php?id=30241
- https://bugs.mysql.com/bug.php?id=63439

Как видно, там рекомендуют поставить UDF (расширение) к mysql для поддержки юникода в регулярках. Ну или, как альтернатива, можно использовать другую СУБД.

Мой урок про кодировки (не в mysql, а вообще, что это такое): https://github.com/codedokode/pasta/blob/master/cs/strings.md

>>1117573

> public function changeRank
Традиционно такие функции называют setRank (функция-сеттер).

> if ($this->isBoss == TRUE){
Можно просто if ($this->isBoss), if как раз проверяет выражение на равенство true/false.

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

> public function getWorker(int $number): AbstractWorker
Мне не нравится эта функция. Чтобы получить работника, нам надо где-то взять его номер, а где? Я не вижу в классе работника функции получения номера. Как ей вообще пользоваться?

> public function deleteWorker(int $number): void
Та же проблема.

> public function sortWorkers(): void
непонятно назначение этой функции. Вот я смотрю только на класс Departament, не вижу остальной код, и мне даже в голову не приходит, зачем она нужна. И по какому критерию сортирует работников. По алфавиту?

> class Company
...
> $cloneOfDepartment = new Department($department->getName());
> foreach ($department->getWorkers() as $worker) {
> $cloneOfDepartment->addWorker(clone $worker);

Нарушение зон ответственности: почему класс Company заботится о клонировании содержимого департамента? Будет проблема, что при вызове

clone $company

работники клонируются, а при вызове

clone $department

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

> throw new Exception("Введено ошибочное название профессии");
В сообщение об ошибке стоит добавить, какое именно название было указано.

> class AnticrisisService
> public function cutEngineers(Company $basicCompany): void
Этот метод делает слишком много:

- клонирует Компанию
- применяет меры
- выводит отчет

Это неправильно. Что, если мы хотим применить 2 антикризисные меры, а только потом вывести отчет? Что, если мы не хотим создавать копию Компании?

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

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

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

> if (get_class($worker) == Engineer::class
Может, лучше использовать instanceof?

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

Могу похвалить за расстановку тайп-хинтов, с ними код смотрится хорошо. До антикризисных мер все выглядит очень аккуратно.
Аноним 11/01/18 Чтв 05:25:36 #842 №1118560 
Этот тред закрыт

Переходите в новый тред >>1118555 (OP)

Если я кому-то не ответил, напомните о себе в новом треде.
Аноним 11/01/18 Чтв 06:41:41 #843 №1118565 
>>1118287
Я не смог применить эти функции, у меня с ними не работает и я так до конца и не понял, каким образом их использовать.
>>1118475
>Ты каждый раз заполняешь строку в ручную, а нужно делать это программно, чтобы программа работала с заведомо неизвестным количеством массивов и элементов
Ну эту проблему я тоже не смог решить, до оепратора точка не додумался.
>>1118548
>// Идем по массиву массивов слов и на каждом шаге выбираем 1 слово
foreach ($allWords as $variants) {
var_dump($variants);
}
Но как он будет случайные слова подбирать? Он же их просто перебирает.
Аноним 11/01/18 Чтв 17:52:00 #844 №1118768 
"Занятных дней долины края
Занятных глаз долины края
Я обретаю начертанья"

Как в этой задачке про строки выдавать разные слова для первых двух строк, чтоб не так дико звучало? Спасибо.
Аноним 18/01/18 Чтв 04:56:50 #845 №1121563 
>>1118768

Тред уже закрыт, но можно например сделать отдельные массивы слов для первой строки.
Аноним 18/01/18 Чтв 14:39:47 #846 №1121688 
Крч, есть сайт и надо, чтобы он выглядел как архив, кидаю файл через программу на C#, а она идёт туда и пишет дату, название и его можно открыть (тхт файлы)
Часть на шарпе я то напишу, но вот с пхп не знаю, что делать ;d
Аноним 18/01/18 Чтв 14:40:07 #847 №1121689 
отправка ftp
Аноним 23/01/18 Втр 10:04:26 #848 №1124746 
Сап анон. Ситуация такова: есть opencart, есть pdf файл который можно будет скачивать с сайта, есть папка download, с которой скачиваются другие файлы(zip и docx). После того как я залил в папку download pdf файл, с сайта он ни в какую не хочет скачиваться. В чем дело? В какую сторону смотреть? Самый сахар в том, что другие файлы скачиваются как нехуй делать
Гуглом пользоваться умею, там все советы по загрузке файла со страницы товара.
Аноним 23/01/18 Втр 18:36:30 #849 №1125030 
image.jpeg
>>1121688
Дебил, это решается простым листингом файлов средствами веб-сервера. Пикрилейтед как раз то, что тебе нужно.
Аноним 23/01/18 Втр 18:38:16 #850 №1125032 
>>1124746
А что с пдф то происходит? Он в браузере открывается или что? Пиздец ты формулируешь мысль, аж кровь из глаз.
Аноним 01/02/18 Чтв 21:17:01 #851 №1130334 
bandicam 2018-02-01 21-14-15-976.jpg
>>1109863 (OP)
Установил я apache после теста сервера выбилась такая хуйня что делать?
Аноним 01/02/18 Чтв 23:34:39 #852 №1130418 
>>1130334
Выкладывай httpd.conf. Ты неправильно задал имя папки ServerRoot. Апач же тебе написал, где ты проебался.
Аноним 11/02/18 Вск 00:28:16 #853 №1136338 
14315507179530[1].png
>>1130334
Аноним 11/02/18 Вск 00:29:22 #854 №1136339 
>>1121688
>>1125030
PHP тут не нужен
google://enable directory listing Apache web server
Аноним 11/02/18 Вск 09:54:18 #855 №1136439 
>>1136339
Ты чо сын шлюхи меня в суе поминаешь?! Я же русским языком тому петуху написал, что ему нужно и ты собака сутулая мне же пишешь тоже самое. Ты охуел что ли выродок?
Аноним 13/02/18 Втр 23:10:42 #856 №1138459 
>>1136439
а ты по-дурацки написал хах
comments powered by Disqus

Отзывы и предложения