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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
33 Кб, 500x500
157 Кб, 1024x683
194 Кб, 1024x768
364 Кб, 1920x1080
Чат изучающих PHP 71 #664784 В конец треда | Веб
Добро пожаловать в наш уютный чатик. Тут мы не флудим, а изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.

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

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

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

Предыдущий тред был тут: >>649329 (OP) (больше 1000 постов!)

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

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

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

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

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

- Для начала установи Апач + PHP (советы ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2

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

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

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

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

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

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

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

Что почитать

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

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

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

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

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

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

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

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

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

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

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

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

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

Объясняй

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

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

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

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
56 Кб, 500x644
435 Кб, 600x900
93 Кб, 561x800
Прочти внимательно #2 #664785
Код тут нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

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

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

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

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

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

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

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

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

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

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

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

Объясняй

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

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

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

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
#3 #664787
В прошлом треде >>649329 (OP) я все поверил, всем дал ответы. Зайдите и поищите ответы в конце треда. Если я вас пропустил или не ответил - напишите тут.

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

По поводу https://github.com/foobar1643/student-list - ты еще переделваешь код или все уже исправил?
>>665607>>674055
#4 #664799
>>664704
Всё, разобрался. Спасибо
#5 #664825
Но при чем тут Сендзёгахара?
#6 #664839
>>662476
Благодарю за ответ.

>А почему ты один репозиторий используешь для 2 проектов?


Думал, что так будет удобнее. Ошибался. Пока оставлю как есть.

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


Типа такого: require_once(__DIR__ . '../src/init.php') ?

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


Поясни, пожалуйста. isset($_GET['registered']) недостаточно?

> А почему так много статических методов?


У меня в хелперах нет полей, так что не увидел резона делать нестатические методы. В UrlHelper есть смысл параметры ($sort, $dir и прочее) сделать членами класса и передавать в конструктор? Видимо да, т.к. это улучшит читаемость кода вьюхи А в TokenHelper - $token?

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


Не очень понял, как это можно сделать.
Что-то типа такого:
$myCookie = $_COOKIE;
unset($_COOKIE);
// используем функции хелперов, которые работают с $myCookie
$_COOKIE = $myCookie;

>> public static function fromRow($row)


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


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

>> $characters[rand(0, $charactersLength - 1)];


> Квадратные скобки не будут работать если мы добавим нелатинские символы, например кириллицу.


Я понимаю, но зачем нам здесь поддержка кириллицы?
#6 #664839
>>662476
Благодарю за ответ.

>А почему ты один репозиторий используешь для 2 проектов?


Думал, что так будет удобнее. Ошибался. Пока оставлю как есть.

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


Типа такого: require_once(__DIR__ . '../src/init.php') ?

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


Поясни, пожалуйста. isset($_GET['registered']) недостаточно?

> А почему так много статических методов?


У меня в хелперах нет полей, так что не увидел резона делать нестатические методы. В UrlHelper есть смысл параметры ($sort, $dir и прочее) сделать членами класса и передавать в конструктор? Видимо да, т.к. это улучшит читаемость кода вьюхи А в TokenHelper - $token?

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


Не очень понял, как это можно сделать.
Что-то типа такого:
$myCookie = $_COOKIE;
unset($_COOKIE);
// используем функции хелперов, которые работают с $myCookie
$_COOKIE = $myCookie;

>> public static function fromRow($row)


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


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

>> $characters[rand(0, $charactersLength - 1)];


> Квадратные скобки не будут работать если мы добавим нелатинские символы, например кириллицу.


Я понимаю, но зачем нам здесь поддержка кириллицы?
>>664847>>668789
JS Integer64 #7 #664843
>>664854
#8 #664847
>>664839

>$myCookie = $_COOKIE;


>unset($_COOKIE);


>// используем функции хелперов, которые работают с $myCookie


>$_COOKIE = $myCookie;


Что-то я фигню написал.
#9 #664854
>>664843
Желательно учитывать требования стандарта:

>If comparefn is not undefined, it should be a function that accepts two arguments x and y and returns a negative value if x < y, zero if x = y, or a positive value if x > y.


http://www.ecma-international.org/ecma-262/6.0/index.html#sec-array.prototype.sort
>>664858
JS Integer64 #10 #664858
>>672684
#12 #664890
Серьезный вопрос к ОПу или крутым версталам. Есть ли какая-то продуманная стратегия назначения всех размеров? Особенно в ем-ах. Ну например я читал про одну идею назначить html {font-size:10px;} а уже от него брать все производные в ем, например
h1 {font-size:2em;} // получится 20рх
h2 {font-size:1.6em;} // 16рх и т. д.
Правда геморрой в том что размер шрифта наследуется и на третьем-четвертом уровне вложенности будет далеко не так наглядно все вычислять, но там можно и rem применить.
А вот как быть с размерами блоков, отступов, паддингов? Смутно себе представляю как вычислить размер паддинга в процентах или ем.
Сейчас буквально везде вижу в тестовых заданиях mobile-first или 'все должно быть адаптивно'.
>>664896
#13 #664896
>>664890

Исходя из логики. Если ты делаешь элемент, высота которого зависит от размера шрифта - используй em, если от пикселей - то пиксели.

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

Паддинг на кнопке может зависеть от шрифта на ней.

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

Много лет назад процентные размеры шрифта имели смысл, так как в ИЕ6 при увеличении масштаба менялся размер шрифта на body или html, и если размер бы указывался в пикселях, то текст не увеличивался. Но это было очень давно, у современных браузеров такой проблемы нет (но верстальщики придумали верстать в процентах от размера окна и функция масштабирования снова сломалась).

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

> можно и rem применить.


Я плохо представляю когда нужен rem . Наверно для страниц где можно менять размер шрифта программно? Все равно не очень понимаю.

> Сейчас буквально везде вижу в тестовых заданиях mobile-first или 'все должно быть адаптивно'.


Это тут вообще не при чем.
27 Кб, 891x832
#14 #665126
Оп написал, что в список студентов не тащить кучу плагинов бутстрапа. Тот, кто делал список студентов с версткой на бутстрапе или сам Оп, подскажите, что не нести в проект? Очевидно все что с яваскриптом, верно?
http://bootstrap-3.ru/customize.php
#15 #665163
Хочу хранить уникальные объекты в коллекции. Для этого есть паттерн?
>>668806
32 Кб, 449x416
#16 #665184
Sup php'ач. Последнее время нужда заставила установить Xdebug 3 часа ебли с настройками (сперва по сетке на Ubuntu + phpstorm, потом переехал на локальную машину Openserver+ PHPstorm). Так вот, в ПХПсторме в консоли Debugger'а пишет: Waiting for incoming connection with IDE key "PHPSTORM". В инете единственное что пишут - что в пхп ини то же самое должно быть и у меня сейчас там: xdebug.idekey = "PHPSTORM"
, пробовал уже разные комбинации, и другие слова-цифры, и без кавычек в пхп.ини . В общем тест выдает что всё ок (пикрелейтед), но входящих коннектов в phpstorm нету и соответственно на брейкпоинтах не происходят остановки
#17 #665212
>>665184

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

Так же не забудь в php.ini включить отладку. И перезапустить Апач.
#18 #665213
>>665184
Так что за вопрос-то?
>>665230
#19 #665216
>>665184

> что в пхп ини то же самое


А ты тот файл который нужно редактируешь? Настройки видны в phpinfo() ?
>>665230
#20 #665230
>>665216
Тот, до этого я менял другие настройки (порта сменил с 9000 на 9005 так как ругалось на то, что он занят в Шторме) после этого ошибка с занятым портом пропала и появилось ожидание коннекта с ключом
>>665213
Как побороть проблему чтобы шторм увидел входящий коннект от дебагера.

>Ты php скрипт в браузере или консоли запускаешь? В обоих случаях надо передать параметр который включит отладку.


Ставлю брейкпоинты в скрипте, перезапускаю страницу в браузере
>>665232>>665445
#21 #665232
>>665230
Страницу нужно открывать из Шторма. Он дабавит GET параметр в адресс, что бы дебагер видел что пора конектится.
>>665246
#22 #665239
>>664772
Спасибо, ОП, большое за комментарии по кошкам-мышкам. Очень дельные замечания, сейчас сижу правлю код свой.

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


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

Вообще, я уже студентов тихонько подбиваю с разных сторон, сейчас про PDO читаю. Думаю за них взяться на днях, кошки-мышки и антикризисные меры сообразно твоим комментариям исправлю, но навряд ли стану загружать снова(ошибки понял, лишний раз мучить тебя смысла мало), если только вопросы появятся новые. Теперь уже студентов жди, опушка!
>>665453
#23 #665246
>>665232
Эммм, если у меня цмска и мне нужно отследить определенный скрипт на определенной странице каким образом мне запустить из IDE'шки определенную страницу. Нет, я точно видел в нетбинсе работу дебаггера в таком виде: установка брейкпоинтов по скрипту, отдельный запуск браузера, в браузере открывается нужная страница - срабатывают брейкпоинты и в самом нетбинсе отображается отладочная инфа. Если запускать скрипт в браузер из иде'шки это пиздец
>>665260>>665453
#24 #665248
Также добавлю:
>>664772

> endswitch;


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


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

> $move1 = new Movement($this->y, $this->x);


> $move2 = new Movement($this->y + 1, $this->x);


...

> $move6 = new Movement($this->y + 1, $this->


>Копипаста, убирай


много ломал голову, как от копипасты-перечисления ходов избавиться ещё когда решал задачу, но не придумал. Подкинь совет?
>>665453
#25 #665260
>>665246
Расширение для браузера.
The easiest Xdebug для Firefox например. Но опять же, все должно быть нормально настроено.
>>665276
#26 #665276
>>665260
Запустил в браузере через Закладки полученные на сайте шторме (/marklets) страница перезагрузилась, в шторме всё равно висит та же надпись что нет входящих подключений с таким то ключом
>>665291
309 Кб, 3840x1080
#27 #665291
>>665276
Ну вот xdebug на гостевой убунте сконфигурированный. Можно запускать дебаг из броузера (расширение ставит куку), можно из IDE (добавляется переменная в GET). Х.з. чем тебе еще помочь.
#28 #665302
Ньюфаг репортинг ин. Застопорился на решении третьей задачи отсюда http://archive-ipq-co.narod.ru/l1/arrays.html
Верно ли я понял что мне в $random мне нужно использовать mt_rand (1,6) ?
И ещё я немного не вьехал как достать вариант с выпавшим числом из массива.
Пытался зделать так http://codepad.org/taLdglSx но получил fatal error: Function name must be a string
>>665304>>665307
#29 #665304
>>665302
$answers[]. Квадратные скобки для массивов бро
>>665311
#30 #665307
>>665302
И еще нумерация в массиве начинается с 0.
т.е. пятый элемент это $answers[4]
>>665308>>665311
#31 #665308
>>665307
Хотя у тебя там ключи руками прописаны, так что все нормально. Мой косяк, не глянул.
#32 #665309
>>665291

>192.168.56.1 - это на отдельном сервере или на локалхосте? мне на localhost ругалось, поставил просто http://fashion и вроде тест прошел норм

>>665319
#33 #665311
>>665304
>>665307
Спасибо, поправил, но теперь получаю вот что
http://codepad.org/5zzzeHW6
>>665319
#34 #665319
>>665309
Это хост. ВиртуалБокс создает виртуальный сетевой интерфейс. Виндовс в нем 192.168.56.1. Убунта с виртуалки коннектится к 192.168.56.1.

>>665311
Убери ' ' вокруг $random
>>665320
#35 #665320
>>665319
Благодарю, бро, всё заработало. Значит вокруг переменной не нужны кавычки?
>>665327
#36 #665327
>>665320
php парсит то, что внутри " " и не парсит то что внутри ' '.
$answers["$random"] и $answers[$random] сработает. А $aswers['$random'] нет.
В первых двух случаях он поставит значение переменной и будет искать собственно это значение. В третьем будет искать в массиве ключ строку '$random'.
>>672684
#37 #665335
ОП слышал про Laravel Homestead?
Думаю годная штука, которая подойдет новичкам и любителям видны для запуска своих приложений без ебли и без денверов
На словах ты Лев Толстой #38 #665338
Кароче решил вашу задачку, ловите мой драндулет:
http://codepad.org/pKoJDIJP
#39 #665341
>>665338
Нет, там в echo должно быть:

> слово1 слово2 слово3


> слово1 слово2 слово3


> Я слово4 слово5


А не так, как у тебя.
Чтобы добиться верного решения, можно пропустить всё через цикл.
Первые два раза выводится строка "слово1 слово2 слово3", а во время третьего прохождения цикла выводится строка "Я слово4 слово5" и цикл обрывается.
>>665347
#40 #665342
>>665338

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


Потому что один раз становится переменная определённой, а потом ты её выводишь в эхо.
Чтобы этого не было, надо изменять переменную перед каждым выводом, как я выше написал про цикл.
#41 #665347
>>665341
у меня так и идёт
word1 2 3
1 2 3
я 4 5.
я делал циклы и рандом все равно оставался одним и тем же.
>>665353
#42 #665353
>>665347
У тебя идёт:
echo "$randomText1 $randomText2 $randomText3\n";
echo "$randomText4 $randomText5 $randomText6\n";
echo "Я $randomText7 $randomText8.\n";
А желательно всё-таки вот так:
echo "$randomText1 $randomText2 $randomText3\n";
echo "$randomText1 $randomText2 $randomText3\n";
echo "Я $randomText4 $randomText5.\n";
Но так-то задача на строки, вывод их из массивов, так что вполне можно и твоё решение посчитать правильным. Но ты подожди ОПа, что он тебе скажет.
А, хотя, нет: он как раз скажет что-нибудь про копипасту, там же её у тебя много.
>>665358
#43 #665358
>>665353
он скажет все переделывай. ведь нельзя было делать такие штуки
1 => 'блабла',
А я не додумал как по другому отдельные слова вытаскивать. Могу через count пронумеровать и зарандомить число, но мне слово же нужно. хотя, если как нибудь word1[....].
>>665360>>672684
#44 #665360
>>665358
Цикл жи есть.
Я объяснил же в первом сообщении этот момент.
Цикл с $i, делает три круга. В первом и втором круге изменяются randomText1 $randomText2 $randomText3 и выводится echo "$randomText1 $randomText2 $randomText3\n";. А в третьем круге выводится echo "Я $randomText4 $randomText5.\n"; (а изменяться они могли и раньше, допустим).
#45 #665368
Анон, которому был необходим средне PHP со знанием мультикурл, я написал на почту тебе, тебе ещё надо?
143 Кб, 1252x1026
#46 #665373
>>665126
Алсо, вопрос по бутстрапу. Разбираюсь с макетами, почему вместо результата выше, у меня получается то, что ниже. Колонки длиннее чем должны, не вкладываются друг в друга и переносятся на новую строку.
>>665478>>665832
#47 #665381
http://ideone.com/Zlpjoc
Посоны, как собрать кусочки воедино? Никак не могу вдуплить.
>>665407
#48 #665407
>>665417
#49 #665417
>>665407
Спасибо. На стаковерфлоу мне ещё вот так посоветовали https://ideone.com/i38mbX
#50 #665420
Решил написать свою борду на PHP. Ну, традиционная история.
Где лучше хранить тексты постов? Нормально хранить в базе данных, или можно хранить в текстовых файлах?
Что будет, когда к текстовому файлу будут обращаться несколько посетителей одновременно?
>>665423>>665478
#51 #665423
>>665420
В вузе рассказывали, что когда несколько пользователей обращаются к базе данных, то всё будет в порядке.
#52 #665445
>>665230

Ты порт и в IDE и в php поменял? В phpinfo этот порт виден? С настройками явно что-то не то, кем может быть занят этот порт? Запости конфиг относящийся к xdebug из phpifno(), а также настройки ИДЕ (если там есть что-то кроме того что выше на скриншоте).

И посмотри эту страницу, https://xdebug.org/docs/remote
>>665497
#53 #665446
Привет, пхпач, не бей. Мне надоело бездельничать и я решил выучить хтмл/ксс/пхп. Уже скачал денвер и сделал базу данных. Как я понимаю, мне лучше начать с html. Посоветуйте литературы для чайников, по которой сами учились.
Моя цель - написать простенький сайт за 3 месяца. Верстка, связь с БД, etc.
>>665449>>666038
#54 #665449
>>665446
Тебе нужно следовать пути в ОП-посте описанном. При должном усердии извояешь свой файлообменник ты.
>>665502
#55 #665453
>>665239

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

>>665246

Там надо либо GET параметр приписывать либо куку ставить. Расширения к браузеру делают именно это. Почитай документацию по xdebug чтобы понимать как это работает.

>>665248

> ок, понял, но о каких шаблонах говоришь и почему?


http://www.phpinfo.su/articles/practice/shablony_v_php.html

> как от копипасты-перечисления ходов избавиться


циклами

>>665291

Лучше показывать настройки из phpinfo(), чтобы он вывел текущие. Вот почему у тебя стоит порт 9000 если ты в IDE его поменял?
>>665461
#56 #665461
>>665453

>Вот почему у тебя стоит порт 9000 если ты в IDE его поменял?


Что куда поменял? Я не анон с проблемой. У меня все работает.
#57 #665468
Ребят , в 19 поздно уже пытаться что-то учить?:D
>>665471
#58 #665471
#59 #665473
>>665335

> Думаю годная штука


Почему ты так думаешь? какие ты видишь преимущества и недостатки?

Вот что я вижу:

- образ виртуальной машины тяжелее чем Апач с PHP, ему надо больше диска, ОЗУ, процессора
- там могут быть чужие настройки. Например вместо легкого дебиан какая-нибудь тормозная убунта с кучей сервисов. Вместо нормального редактора какой-нибудь вим. А у меня например есть виртуальная машина где все привычно
- там может быть высокое потребление памяти По идее для PHP хватило бы 192 Мб, но там в образе куча сервисов и вряд ли он в эту цифру уложится. Ну и в любом случае напрямую PHP будет работать быстрее чем с виртуализацией
- для вагранта надо ставить руби в систему. Где гарантия что он не попрописвает себя всюду и не будет с чем-нибудь конфликтовать? Да и тащить огромный интерпретатор как-то нелогично по моему.
- без виртуалки PHP напрямую читает файлы с диска. В случае виртуалки приходится испоьзовать какие-нибудь общие папки которые работают медленнее
- куча лишего хлама: зачем мне редис, постгрес и какой-то непонятный beanstalkd. что это вообще такое?
- странные перенаправления портов - это зачем? Почему нельзя 80 использовать например?
- как я понимаю образ там read-only, и установить новый пакет через apt-get install не выйдет?

А посмотрим, как подают авторы этот образ? Легко развернуть? Ну не знаю, с одной стороны можно поставить апач + php + mysql и настроить их, а с другой ставить виртуалбокс, руби, вагрант, образ, и настраивать все в нем. Не сказал бы что это легче.

Ну и если нужен линукс, лучше установить в виртуалку дебиан. Хоть устанавливать дебиан научишься.

Ну то есть у использования вагранта наверно где-то есть преимущества. Хотелось бы про них услышать, а пока у тебя только личное мнение что это "годная штука".
>>665482>>668273
#60 #665475
>>665335

Ну и начинающим вредны сборки. Хоть раз в жизни Апач или дебиан стоит установить самостоятельно.
#61 #665478
>>665373

Открой инспектор в Хроме (Ctrl + SHift + I) и посмотри какие стили применены к элеиенту. Про dev tools много статей в интернете.

>>665420

В реляционной БД вроде mysql. На текстовых файлах ничего нормально работать не будет.
#62 #665482
>>665473

>и установить новый пакет через apt-get install не выйдет?


Как раз таки выйдет. Вообще, как по мне, ключевое удобство Vagrant'а - это песочница (можно откатываться, юзая снапшоты в virtualbox) + последующий беспроблемный деплой на VPS. Зачем это новичку - вообще без понятия. Я не поддерживаю >>665335-анона. Homestad - так вообще уже готовый box с полностью настроенным под работу линуксом. Это плохо для новичков - слишком высокий уровень абстракции; возникнет незначительная легко устраняемая проблема, а новичёк с ней не справится по причине отсутствия элементарных знаний в более низкоуровневых вещах.
>>665484
#63 #665484
>>665482

> новичёк


Бля, не пинайте.
98 Кб, 618x617
73 Кб, 493x378
35 Кб, 982x397
18 Кб, 809x267
#64 #665497
>>665445
Вот мои настройки текущие
>>665498>>665568
40 Кб, 771x353
97 Кб, 857x634
#65 #665498
>>665497
и остача
>>665568
#66 #665502
>>665449
Абу йода-спик ввел в пхп-треде?
>>665517
#67 #665517
>>665502
Я пропустил слово и мне лень было педалить backspace. А дальше уже стилистические требования.
#68 #665568
>>665497
>>665498
Встроенный сервер php настраивается на 8000 порту, тащемта.
>>665618
#69 #665607
>>664787
Я все замечания исправил, просто там еще несколько багов с отображением поисковых результатов нашел и исправил, из-за этого имя коммита такое странное получилось.
>>676031
#70 #665618
>>665568
Ну 9015 тоже свободен был, разве сыграет такую большую роль?
#71 #665637
Почему
$i = 015;
echo $i;

Выдаёт 13?

https://ideone.com/60JSl5
>>665640
#73 #665709
Знаком с PHP, OOP, MVC. Решил освоить yii2, начал искать инфу и понял, что хоть и инфы много, но что-то успехов нет. Начал читать документацию, и понял, что там не очень доходчиво объясняется. Анон, как вкатиться в свой первый фреймворк ?
#74 #665713
>>665709
Попробуй сделать какую-нибудь задачу из ОП-поста с использованием Yii. Тех же студентов или файлообменник.
>>665724
#75 #665714
>>665709
Курсы на ютабе посмотри, так проще вкатишься.
#76 #665724
>>665713
С ООП знаком, такие слова, как абстрактный класс или интерфейс не вызывают у меня страха. Но я открываю директорию yii и охуеваю о того, сколько всяких методов, что пока для меня остаются загадкой.
>>665807
#77 #665807
>>665724
Все херня. Учи классические алгоритмы. А всякую лабуду типа обсерверов, абстрактных строителей и мостов нагонишь по мере надобности, когда к этому придешь.
#78 #665832
>>665373
С этим разобрался. Спаны со старой версии бутстрапа. Вопрос >>665126 в силе.
#79 #665850
Привет.
Может кто рассказать как правильно юзать printf?
Есть кусок кода >
https://ideone.com/w0LcUw

При попытки вывести его с помощью этого >
https://ideone.com/b7UIkt

Получаю ошибку yntax error, unexpected T_STRING.
Так вот..Как правильно пихать html код в printf что бы все работало?
>>665953
#80 #665938
>>662476

>> if (FormHelper::isFormSent()) {


>> else if ($_SERVER['REQUEST_METHOD'] == "GET") {


>А что если ни одно из условий не сработает?


Отдастся пустая страница с кодом 200. Это плохо?
>>666238
#81 #665953
>>665850

>Как правильно пихать html код в printf


Никак. Если очень хочется, то нужно разобраться с кавычками Лучше делать как написано здесь http://www.phpinfo.su/articles/practice/shablony_v_php.html
>>665964
#82 #665964
>>665953
Уже разобрался , но , спасибо
#83 #666009
ОП, спасибо за все ответы в прошлом треде.
Если я не отвечаю, то это не значит, что я не читаю твои подробные ответы и разборы или не стараюсь исправиться.
Просто чаще всего нечем ответить, настолько всё разобрано.

Аноним
#84 #666028
ОП, спасибо тебе за курс. Вот, я попытался решить задачек.
То, что, что легко:
W1. https://ideone.com/r93YE8
W2. https://ideone.com/8BIRn7
W3. https://ideone.com/yqbFo1
W4.1 https://ideone.com/Yikc7R
W4.2 https://ideone.com/gipbSX
Надо было напрячь мозг:
W5.1 https://ideone.com/MwfLmz
W5.2 https://ideone.com/cVgjxu
W5.3 https://ideone.com/iFv71d
W5.4 https://ideone.com/jMJLFM
W5.5 https://ideone.com/kVp3j3
W5.6 https://ideone.com/QcFU0m
W5.7 https://ideone.com/Eh48abC
>>666043>>672687
#85 #666035
В каком возрасте вы начали учить пхп?
>>666043
#86 #666038
>>665446
Бамп
>>666043
#87 #666043
>>666028
Лёгкие вроде бы все правильно решены.
Задача W5.1 решена неверно, там должно быть 61270 с копейками. Это непростая задача, многие на ней подолгу сидят.
Задача W5.2 решена неверно, там должно получиться 1060 тысяч в последний год и он должен быть 50-ым по счёту. Если я не путаю сейчас.
W5.6 решена неверно, там у тебя функция mt_rand(1, count($letters)) выдаёт слоги из массива с 1 по 16, тогда как должна выдавать слоги с 0 по 15. Автоматически нумерация в массиве идёт с 0, а count($letters) считает, начиная с 1. В итоге у тебя нулевой слог никогда не появится и будет ошибка, когда выпадет 16-ый слог.
W5.7 - там ничего нет.

>>666035
В возрасте тридцати одного года.

>>666038
Ab-w.net, с него начинал учить HTML, CSS, там же учился устанавливать Wordpress.
>>666238>>666755
#88 #666128
>>666148>>672687
#89 #666148
>>666128
$creditSum - $payout < 0 преобразуем в $creditSum < $payout. Убирается лишнее действие.

$creditSum <= 0 должно быть == 0. Если у тебя возникает ситуация, что баланс кредита меньше нуля, значит алгоритм работает неверно и Ванька переплачивает банку.
Так вроде все отлично.
#90 #666238
>>665938

Да. Думаю надо сделать так:

- либо метод = POST и мы принимаем данные формы
- во всех остальных случаях выдаем страницу для GET

Я как минимум HEAD могу вспомнить который ведет себя как GET но прибивает скрипт при попытке выдать текст.

>>666043

Да, там странная строка:

> if ($sum > 1000000) {


> $y++;


Зачем дополнительно плюсовать? Также, $y лучше назвать нормально и поставить вместо $i в шапку цикла.
#91 #666249
Пользуясь случаем напомню: В прошлом треде >>649329 (OP) (OP) я все поверил, всем дал ответы. Зайдите и поищите ответы в конце треда. Если я вас пропустил или не ответил - напишите тут.
44 Кб, 722x482
#92 #666303
Анон, на работе, бывает, появляется свободное время, хотел бы обмазаться каким-нибудь видеокурсом для начинающих. Хотелось бы руками что-нибудь делать, но такой возможности нет. Что посоветуешь? На трекерах, тытрубе и в интернетах дохуя всего, даже не знаю, что попробовать, может, анон чего порикаминдует?
>>666310>>666336
#93 #666310
>>666314
#94 #666314
>>666310
Спасибо.
Он хороший, стоящий? А то у меня основная проблема - сомнения.
>>666320
#95 #666320
>>666314
Ну это выбор анона можно сказать. Хотя практически все видеокурсы длинное нудное скакание по верхам. Иначе они просто не будут продаваться.
#96 #666336
>>666303
Не забывай и про то, что без написания кода ничего не выйдет. Тут толковый учебник (вроде ОПовского) намного больше тебе даст, чем простое смотрение на то, как кто-то разбирает или пишет код.
>>666338
#97 #666338
>>666336
Это само собой разумеется. Была бы на работе пека, на которой можно кот пейсать, этим бы и занимался. А так рабочая машина сейчас в ФЗС за ДМЗ и пиздец. Разве что браузер есть, но я не хочу жабаскрипт.
>>666343
#98 #666343
>>666338
Можно писать на http://ideone.com - хоть с планшета, был бы Инет и браузер.
>>666344>>666346
#99 #666344
>>666485
#100 #666346
>>666343
Инета нет, в том и дело. Есть вайфай и планшет, но я заебусь же там набирать кот.
>>666381>>666394
#101 #666371
Как перестать прокрастинировать? Сажусь заниматься, и всегда делаю не то, что нужно. То на ютубе зависну, то на дваче. Как взять себя в кулак?
#102 #666373
>>666371
Иди в перезвоним тред или куда-нибудь в /b/. Тут задачи решают.
#103 #666380
>>666371
Никак.
#104 #666381
>>666346
Понятно. Ну тогда не пиши код. Занимайся чем-нибудь другим.
#105 #666389
>>666371
Настойчивость. Усидчивость.
В последнее время с какого-то хуя стало популярным слово "мотивация".
- Мне чтобы учиться/работать/дрочить хуй нужна мотивация, - пиздят на каждом шагу. Какого хуя вообще? Вы хоть знаете, что такое мотивация? Что под постоянной мотивацией ваши межушные нервные узлы свернулись бы в трубочку?
Если за тобой в лесу бежит медведь, а ты убегаешь, вращая глазами и бросаясь в него собственным говном - вот это мотивация. Если вычислили по IP, где ты живешь, и идут ебать твою мамку, а ты, пытаясь предотвратить неизбежное, превращаешь свой подъезд в храм тиpeча и смазываешь входную дверь свиным эякулянтом - это твоя ёбаная мотивация. Она есть, а через минуту медведь сгорел в машине, мамку выебали, и её больше нет. И что дальше будешь делать? Мотивация, блядь. На этом говне далеко не уедешь. Все делается при помощи упорства и настойчивости, которые должны стать качествами твоей личности, анон, а не при помощи мотивации.
>>666406>>666591
#106 #666394
>>666346
Купи клавиатуру к планшету.
Я поначалу просто так набирал код на Идеоне в планшете.
Если есть возможность и желание - купи недорогой нетбук, установи на него Апач и РНР, так пиши.
Сервер даже и на планшет можно установить, ОП как-то приводил пример, какие-то приложения для Андроида.
>>666395
#107 #666395
>>666394
Годная мысль. Наверное, так и сделаю.
#108 #666397
Хороший тред, люблю вас
Ушел учить.
#109 #666406
>>666389
Неа, страх и мотивация - это разные вещи. Это как кнут и пряник. Просто разумный человек понимает, что программирование, как и любая другая работа - это просто инструмент. А какая цель? Как правило, у нормального человека цель - хорошо провести время. Программирование иногда помогает в этом, но чаще всё-таки нет. Это зависит от индивидуальных предпочтений, и от того, сколько человеку надо денег. Я бы сказал, мотивация - это связь между чем-то неосвоенным и целью, без которой непонятно, нафига оно тебе надо.
#110 #666470
У меня проблемы с математикой, анон. И вот вчера внезапно решил освоить php, а тут фраза "Возвращает абсолютное значение (abs(-5) => 5)"
как понимать эти вещи? Сильно будет мешать в будущем незнание? В общем, я в ступоре
#111 #666473
>>666470
Абсолютное значение это просто положительное число, что тут можно не понимать?
>>666478>>672687
#112 #666476
>>666470
Абсолютное значение - это модуль числа.
Представляй модуль числа как расстояние от нуля до числа на числовой прямой. У расстояния знака нет, так что это просто положительное число.
Модуль 5 равен 5. Модуль -5 равен 5.

> |5| = 5


> |-5| = 5


> abs(5) == 5


> abs(-5) == 5


Как-то так.
>>666478
#113 #666478
>>666476
>>666473
спасибо, друзья. Догнал
#114 #666479
>>666470

>Сильно будет мешать в будущем незнание


На уровне 9 классов математику знать весьма желательно, т.к. это будет мешать не только в PHP.
>>672687
#115 #666485
>>666344
Интересная штука, жалко, платно там всё после тестового периода.
>>667010
#116 #666493
Думаю, не написать ли генератор рифм? Будет ли это плюсом, если при устройстве на работу, или это слишком примитивно? Я так понял суть генератора рифм в том, что надо сравнивать окончания введённого слова со словами которые хранятся например в файле и выводить эти слова. Сделать так, чтобы ещё учитывать и ударения наверное нельзя? Точнее можно, но для этого надо проставить правильное ударение всем словам что есть в файле (а их более 100К) вряд ли, кто-то будет таким заниматься.
#117 #666499
>>666493

>Будет ли это плюсом, если при устройстве на работу


Песенником-балалаечником на средневековую ярмарку, если только
>>666500
#118 #666500
>>666499
Тамадой еще можно
#119 #666504
>>666493

>Будет ли это плюсом, если при устройстве на работу


Плюсом при устройстве на работу будет если сможешь перевернуть бинарное дерево, или написать квиксорт.
#120 #666505
>>666493
Вполне годная задумка.
Любой хороший собственный проект на Гитхабе или на своём домене будет характеризовать твои способности только положительно.
#121 #666530
>>666493
Ты хочешь написать генератор рифм или генератор стихов?
#122 #666549
Я говно, я не понимаю ничего в разработке на php.
>>666551
#123 #666551
>>666552
#124 #666552
>>666551
Что?
#125 #666562
>>664784 (OP)
Приветствую. Задачка лишь косвенно связана с PHP. Но тем не менее.
Есть объект(помещение) с двумя свойствами: мин. площадь(building_area_min) и макс. площадь(building_area_max)

Пользователь вводит начальную($s_from) и конечную площадь($s_to)
Формируется запрос на вывод помещений по этим двум полям.

Общий запрос:
$args['meta_query'][] = array(
'relation' => 'OR',
array(
'key' => 'building_area_min',
'value' => array($s_from, $s_to ),
'type' => 'NUMERIC',
'compare'=> 'BETWEEN'
),
array(
'key' => 'building_area_max',
'value' => array($s_from, $s_to ),
'type' => 'NUMERIC',
'compare'=> 'BETWEEN'
),
array(
'relation' => 'AND',
array(
'key' => 'building_area_min',
'value' => $s_from,
'type' => 'NUMERIC',
'compare'=> '<='
),
array(
'key' => 'building_area_max',
'value' => $s_to,
'type' => 'NUMERIC',
'compare'=> '>='
)
)

);
Допустим пользователь вводит ($s_from=20) и конечную площадь($s_to=100)

Должны отображаться
1) помещение от 22 до 80
срабатывает
array(
'key' => 'building_area_min',
'value' => array($s_from, $s_to ),
'type' => 'NUMERIC',
'compare'=> 'BETWEEN'
),
2) помещение от 50 до 120
срабатывает
array(
'key' => 'building_area_max',
'value' => array($s_from, $s_to ),
'type' => 'NUMERIC',
'compare'=> 'BETWEEN'
),
3) помещение от 5 до 120
срабатывает
array(
'relation' => 'AND',
array(
'key' => 'building_area_min',
'value' => $s_from,
'type' => 'NUMERIC',
'compare'=> '<='
),
array(
'key' => 'building_area_max',
'value' => $s_to,
'type' => 'NUMERIC',
'compare'=> '>='
)
)
Все работает как надо, но последний вложенный запрос создает дикие тормоза.
Может есть какой-то другой способ сделать выборку пересекающихся массивов ? В sql не особо понимаю.
#125 #666562
>>664784 (OP)
Приветствую. Задачка лишь косвенно связана с PHP. Но тем не менее.
Есть объект(помещение) с двумя свойствами: мин. площадь(building_area_min) и макс. площадь(building_area_max)

Пользователь вводит начальную($s_from) и конечную площадь($s_to)
Формируется запрос на вывод помещений по этим двум полям.

Общий запрос:
$args['meta_query'][] = array(
'relation' => 'OR',
array(
'key' => 'building_area_min',
'value' => array($s_from, $s_to ),
'type' => 'NUMERIC',
'compare'=> 'BETWEEN'
),
array(
'key' => 'building_area_max',
'value' => array($s_from, $s_to ),
'type' => 'NUMERIC',
'compare'=> 'BETWEEN'
),
array(
'relation' => 'AND',
array(
'key' => 'building_area_min',
'value' => $s_from,
'type' => 'NUMERIC',
'compare'=> '<='
),
array(
'key' => 'building_area_max',
'value' => $s_to,
'type' => 'NUMERIC',
'compare'=> '>='
)
)

);
Допустим пользователь вводит ($s_from=20) и конечную площадь($s_to=100)

Должны отображаться
1) помещение от 22 до 80
срабатывает
array(
'key' => 'building_area_min',
'value' => array($s_from, $s_to ),
'type' => 'NUMERIC',
'compare'=> 'BETWEEN'
),
2) помещение от 50 до 120
срабатывает
array(
'key' => 'building_area_max',
'value' => array($s_from, $s_to ),
'type' => 'NUMERIC',
'compare'=> 'BETWEEN'
),
3) помещение от 5 до 120
срабатывает
array(
'relation' => 'AND',
array(
'key' => 'building_area_min',
'value' => $s_from,
'type' => 'NUMERIC',
'compare'=> '<='
),
array(
'key' => 'building_area_max',
'value' => $s_to,
'type' => 'NUMERIC',
'compare'=> '>='
)
)
Все работает как надо, но последний вложенный запрос создает дикие тормоза.
Может есть какой-то другой способ сделать выборку пересекающихся массивов ? В sql не особо понимаю.
>>666567>>672688
#126 #666567
>>666562
Со вторым случаем ошибся, сработает тоже первое условие. Для второго случая найдется помещение допустим от 20 до 50
>>666568
#127 #666568
>>666567

>от 20 до 50


от 19 до 50
#128 #666573
>>665291
Спасибо за идею, сегодня поставил на виртуалку убунту сервер, настроил, установил xdebug, настроил phpstorm и всё заработало, проблемы были только с айпишниками но в итоге спустя 5 часов ебли всё заработало, я счастлив!
#129 #666576
Объясните смысл инкапсуляции:
1. мы объявляем переменную класса protected $x;
2. мы делаем два метода, если хотим работать с этим $x из других классов - сеттер и геттер. Геттер - просто даёт переменную, сеттер даёт возможность установить новую.
Как же мы защитили её в таком случае? Ведь сеттер-геттер это же полный контроль над переменной, не?
#130 #666584
>>666576
Ты можешь в геттере и сеттере производить любую валидацию.
Кстати, для твоей ситуации достаточно private.

Например

private $age;
private $no_u_cant;

public function get_age() {

if (!$this->no_u_cant)
return $age;

}

public function set_age($age) {

if ($age >= 18 && $age <= 99 && !$this->no_u_cant)
$this->age = $age;

}
>>666599>>672689
#131 #666588
>>666576
Представь ситуацию что тебе в большом приложении дали задачу сделать какую-нибудь верификацию объекта которы используется по всему приложению. Ты будешь открывать кучу файлов и по пол часа разбираться как именно и где именно используется твой объект. При инкапсуляции верификацию можно сделать в сеттере, отредактировав при этом один файл.
>>666599
#132 #666591
>>666389
Этому два чая.
Сам лишь только недавно это понял.
#133 #666599
>>666588
>>666584
логично, не думал про ИФ-ы в функциях. Так да, теперь понимаю.
>>666619
#134 #666619
>>666599
И не только ифы.
Можно еще переопределить __set() и __get() и возвращать значения в ответ на любой рандомный член класса, которого у тебя даже нет, допустим.

Самый простой пример.

class GetSet {

private $storage = array();

public function __get($index) {

if (array_key_exists($index, $this->storage))
return $this->storage[$index];
else
return false;

}

public function __set($index, $value) {

$this->storage[$index] = $value;

}

}

$obj = new GetSet();

$obj->lalka = 'dicks';
echo $obj->lalka; // dicks
#134 #666619
>>666599
И не только ифы.
Можно еще переопределить __set() и __get() и возвращать значения в ответ на любой рандомный член класса, которого у тебя даже нет, допустим.

Самый простой пример.

class GetSet {

private $storage = array();

public function __get($index) {

if (array_key_exists($index, $this->storage))
return $this->storage[$index];
else
return false;

}

public function __set($index, $value) {

$this->storage[$index] = $value;

}

}

$obj = new GetSet();

$obj->lalka = 'dicks';
echo $obj->lalka; // dicks
#135 #666625
Я понял. Фраза "black mesa" составлена из букв разных раскладок. Вот ОП-хитрюга такая.
>>672689
#136 #666636
>>666619
Объясни-ка, пожалуйста, что ты в примере сделал.
>>666655
#137 #666655
>>666636
Описал объект, определил геттер и сеттер для всего объекта.
Это значит, что любое обращение к непубличному свойству объекта (даже если оного не существует) улетит в функцию __set(), где мы уже решаем, что делать.
В примере мы складываем всё в массив $storage и вынимаем оттуда же.

Пример синтетический, поэтому пусть так, например:

class NewsItem {

private $newsTitle;
private $newsRawText;

public function __construct($newsTitle, $newsRawText) {

$this->newsTitle = $newsTitle;
$this->newsRawText = $newsRawText;

}

public function __get($property) {

switch ($property) {

case 'title':
return $this->newsTitle;
break;

case 'text':
return strip_tags($this->newsRawText);
break;

}

}

}

$someNews = new NewsItem('Битард повесился в прямом эфире', '<b>На месте дежурит бригада <i>траллей</i> из /b/</b>');

echo $someNews->text; // На месте дежурит бригада траллей из /b/ (тегов нет)
#137 #666655
>>666636
Описал объект, определил геттер и сеттер для всего объекта.
Это значит, что любое обращение к непубличному свойству объекта (даже если оного не существует) улетит в функцию __set(), где мы уже решаем, что делать.
В примере мы складываем всё в массив $storage и вынимаем оттуда же.

Пример синтетический, поэтому пусть так, например:

class NewsItem {

private $newsTitle;
private $newsRawText;

public function __construct($newsTitle, $newsRawText) {

$this->newsTitle = $newsTitle;
$this->newsRawText = $newsRawText;

}

public function __get($property) {

switch ($property) {

case 'title':
return $this->newsTitle;
break;

case 'text':
return strip_tags($this->newsRawText);
break;

}

}

}

$someNews = new NewsItem('Битард повесился в прямом эфире', '<b>На месте дежурит бригада <i>траллей</i> из /b/</b>');

echo $someNews->text; // На месте дежурит бригада траллей из /b/ (тегов нет)
#138 #666658
Мимо проходил.
Я вообще не занимаюсь этой вашей пыхой, но хочу сказать следующее для ньюфагов - пыха нужна всегда и везде,так что не ссыте вкатываться.
мимо-ява-адепт
>>666691
#139 #666670
>>666655

>$someNews = new NewsItem('Битард повесился в прямом эфире', '<b>На месте дежурит бригада <i>траллей</i> из /b/</b>');


>echo $someNews->text; // На месте дежурит бригада траллей из /b/ (тегов нет)



>$obj->lalka = 'dicks';


>echo $obj->lalka; // dicks



но ведь эти выражения в любом случае, не зависимо от всего твоего кода, будут выводиться так, как показано. Я чего-то упускаю?
>>666681>>666693
#140 #666681
>>666670
насчёт echo $someNews->text проебался, да, но пример с диком - он всегда и будет диком же, и без __set() с __get(0
>>666693
#141 #666688
>>666655
А почему у тебя вернулся case 'text'? Почему не case 'title'?
>>666693
#142 #666691
>>666658
Как будто ява не везде нужна. 80% энтерпрайза на ней написано. Хотя порог вхождения там выше конечно.
>>666696
#143 #666693
>>666670>>666681

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

>>666688
Слушай, ну серьезно. Тебе для начала надо выучить синтаксис языка.
>>666701
sage #144 #666696
>>666691
Это да, порог действительно выше.
По работе приходится часто общаться с пыхокодерами, и уяснил что готовы брать ребят даже без знания фреймворков.
Простите, я не знаю как отклеить сажу. Ёбаная вакаба
>>666701>>666704
#145 #666701
>>666693
кажется, я начал понимать твой пример, спасибо.

>>666696

>Простите, я не знаю как отклеить сажу.


и ещё погромист называется
>>666703
33 Кб, 565x365
sage #146 #666703
>>666701
Если сажа решила подружиться с постом - разве я должен им мешать?
#147 #666704
>>666696
База у любых программистов должна быть, я считаю. Это первым делом оценки сложности алгоритмов, линейная алгебра, основы анализа и т.д.

У многих начинающих просто отсутствуют эти базовые знания, хотя они умеют формочки на симфони делать.
>>666724
sage #148 #666713
#149 #666724
>>666704
Слыш я в погромисты пошел потому что у меня с матешей плохо
>>666733
#150 #666733
>>666724
Тебя на работу ни один уважающий себя работодатель не возьмет. Пока не выучишь математику хотя бы до уровня первого курса ВУЗа будешь работать в шарагах за 15к\мес.
#151 #666744
>>666733
Да беда в том, что я это уже осознаю, лол.
У меня вообще больно тугой ум, очень трудно все дается.
Искренне хуею с постоянных репортов уровня "я выучил HTML+CSS+JS+PHP за 6 месяцев, че дальше".
Я уже 7 лет PHP-макака, и до сих пор быдлокожу за еду. Сложные алгоритмы повергают мозг в ступор.
>>666756>>672690
#152 #666752
Как свардампить локальную переменную функции?
global $var не помогает.
>>666754>>666758
#153 #666754
>>666752
Очевидно же, дампь внутри функции, а потом вызывай её.
>>666759
#154 #666755
>>666043
Спасибо большое. Вот, исправил ошибки:
W5.1 https://ideone.com/94782z
W5.2 https://ideone.com/MCoNPH
W5.6 https://ideone.com/qhdVJ8
W5.7 https://ideone.com/Eh48ab
Вот, еще порешал.
W5.8 https://ideone.com/WNN6jp
W5.9 https://ideone.com/QNB4l9
>>672690>>675605
#155 #666756
>>666733
Я могу в матешу первого курса медвуза, достаточно? Проходили матрицы, теорию вероятности и прочие задачки.
>>666744
Ты это я в течение будущих семи лет.
>>666761>>666773
#156 #666758
>>666752
Конечно, переменная из функции видна только в функции.
Вардампь внутри функции.

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

function doSomething($regularArg1, $arg2, &$ref) {

// че-то происходит

$ref = твоя_переменная;

}

var_dump($ref);
>>666762
#157 #666759
>>666754
Лол, и правда ведь.
#158 #666761
>>666756
Лол, я даже не знаю алгебры уровня 9 класса.
После дискриминанта и системы уравнений я просто пинал хуи вплоть до выпускного.
>>666763
#159 #666762
>>666758
Спасибо за костыль, браток.
#160 #666763
>>666761

>Лол, я даже не знаю алгебры уровня 9 класса.


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


Я вообще учился в школле с гуманитарным уклоном и проебывал матешу как только мог. Так что ты хоть что-то знаешь. А я могу только в первый курс мед. вуза.
>>666765>>666767
#161 #666765
>>666763

>школле


Школе. Ебаный немецкий.
#162 #666767
>>666763
Матрица и тервер куда круче a^2 - 4bc, или как там дискриминант решается.
>>666779
Числа прописью #163 #666771
Посмотрите как вам?

https://ideone.com/aK0ryI
>>666828>>672691
#164 #666772
>>666504
А зачем это для разработчика ПХП?
>>666775
#165 #666773
>>666756
В алгоритмы можешь? Оценку сложности алгоритмов, оценку времени исполнения, потребления памяти и прочее?
#166 #666775
>>666772
Язык программирования лишь средство, ты должен в принципе уметь в алгоритмы.
>>666782
#167 #666779
>>666767
БЭ В КВАДРАТЕ МИНУС ЧЕТЫРЕ АЦЭ
Выучил эту формулу наизусть, идя в школу на контрошу по алгебре. Хоть я и не помню, что она означает, но саму формулу помню, хек.
>>672690
#168 #666782
>>666775
Книг computer science достаточно будет?
Взаимопомощь Malikov #169 #666797
Нюфаги, го сюда. Будем делиться опытом, помогать с лабами, выискивать баги.
>>666799
Kirill #170 #666799
>>666797
Вкатился. Как тут зарегистрироваться?
>>666802
Взаимопомощь Malikov #171 #666800
https://telegram.me/joinchat/AFkjiQbZ-ih1sNDznEmoxQ

Нюфаги, го сюда. Будем делиться опытом, помогать с лабами, выискивать баги.
#173 #666828
>>666771
Грязно.

Почему inclineWord возвращает такую парашу?

> $result = " (".$number.") ".$result;



> declensionMillion


11 миллион? 12 миллиона?

> declensionThousands


11 тысяча? 12 тысячи?

Тебе не кажется, что делаешь однородные действия?
Что число можно разбивать в цикле бесконечно?
Что можно написать код, работающий на числе любой длины, входящего в конфиг вида:
$largeNumbersNames = array(array('тысяча', 'тысячи', 'тысяч'), array('миллион', 'миллиона', 'миллионов'), array('триллион', 'триллиона', 'триллионов'), array('квадриллион', 'квадриллиона', 'квадриллионов'), ...);
Причем при изменении конфига (удалении названия степени, добавления) код должен работать.
>>666965
#174 #666855
trim() работает с мультибайтовыми кодировками?
>>666860>>672691
#175 #666860
>>666855
Работает.
У меня другой вопрос.
Работает ли trim() в массиве?
foreach($textArr as $key => $value){
trim($value);
}
>>666870>>672691
#176 #666870
>>666860
Конечно работает, $value же обычная строка.
>>666920
#177 #666920
>>666870
https://ideone.com/AJaH1S
Почему у меня не работает?
#178 #666944
>>666920
https://ideone.com/2FX1ou
Вот так попробуй.
>>666983
#179 #666965
>>666828
Благодарю за критику.
Да не могу я в универсальность, делаю всё в лоб, да еще и через жопу. Про такой вариант $largeNumbersNames даже и не подумал.

Походу хуже моего говнокода уже быть не может.
#180 #666983
>>666944
Ну и что? Она все равно не обрезает проблелы.
https://ideone.com/AJaH1S
#181 #666989
>>666983

>пробелы

#182 #666994
>>666920
Ну ты даешь.
Что ты вардампить собрался, если после ретурна функция прекращает работу?

https://ideone.com/Yc0sGK
#183 #666996
>>666983
Пробелы сначала надо удалить с помощью preg_replace(). Ставишь регулярки, которые удаляют лишние пробелы и запятые, заменяя их на один пробел.
#184 #667001
>>666983
А вот тебе с удалением пробелов.

https://ideone.com/P9PgzE
>>667009>>672692
#185 #667007
Ко всем относится - регулярные выражения сами по себе очень мощный инструмент.
Если вы сначала че-то там режете по регулярке, а потом еще что-то перебираете и проверяете - вы что-то делаете направильно.

А конкретно этот кадр вдобавок не понимает, что в foreach значения передаются не по ссылке. И что надо их присвоить. Вот так:

foreach ($array as $var => $val) {

$array[$var] = trim($val);

}
#186 #667009
>>667001
Мы тут учимся вообще-то, а не просим решить за нас задачи!
Не делай так больше!
Тем более, что ни черта непонятно в твоем коде
>>667014
#187 #667010
>>666485

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

Вот например тут https://c9.io/pricing/webide (взял первого попавшегося провайдера услуг) есть план free - единственный недостаток в нем это ограничение по памяти (1GB RAM, 5 GB HDD) и публичность всех выкладвааемых файлов. Для учебы - хватит.

Проверял в Хромиуме, выпущенном в этом, 2016 году, на ноутбуке с core2duo.

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

PHP есть, версии 5.5 (увы): https://docs.c9.io/docs/supported-languages (обещают подсветку синтаксиса и отладчик). Есть полноценная (линуксовая) консоль без прав рута.

PHP7 доступен, но параллельно с его установкой придется поучиться консольной магии: https://community.c9.io/t/how-to-upgrade-to-php7/1379

MySQL версии 5.5.44-0ubuntu0.14.04.1, пользователь root без пароля.

Редактор примитивный, слабее Sublime, но может кому-то его возможностей хватит.

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

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

Логи выводятся в вкладке Апача - удобно!

Ну, проектов у меня под рукой полно - взял первый попавшийся гитхаб ( https://github.com/V3N0m21/StudentList ) и не стал его устанавливать так как там нет папки public и инструкций по установке. Позор автору.

Вместо него взял https://github.com/V3N0m21/Uppu4

В ридми кстати не написано что надо править конфиг.

Композер есть (не то чтобы это было проблемой, но удобно).

Вот приложение: https://venom21-students-codedokode-1.c9users.io/

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

Аноны, может кто-нибудь проверит на себе эту ИДЕ?

Правда, помните что это веб-приложение и вам нужен современный браузер и свободная память (я бы рассчитывал на 400-800 Мб только под вкладку с IDE, это не мерял, а интуитивно посчитал. Померял - вроде пишет 150 Мб, но я редактор почти не использовал, толкьо консоль).

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

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

Вот команды которые пришлось сделать для установки приложения:

------

13 git clone 'https://github.com/V3N0m21/Uppu4' uppu
14 cd uppu
15 composer install
16 mysql -uroot -e 'CREATE DATABASE uppu CHARSET=utf8'
17 mysql -uroot -e < Uppu4.sql
18 mysql -uroot < Uppu4.sql

# наконец-то!
19 mysql -uroot uppu < Uppu4.sql
20 nano app/config.ini

# поменять документ рут в апаче
21 sudo nane /etc/apache2/sites-available/001-cloud9.conf
22 sudo nano /etc/apache2/sites-available/001-cloud9.conf

# поправить кривокод
23 nano app/bootstrap.php
24 mkdir public/upload
25 chmod 0777 public/upload
26 # почему папки нет в репозитории?
27 mkdir upload/resize
28 mkdir public/upload/resize
29 chmod 0777 public/upload/resize/

---------

В общем, в плане скорости работы облачная ИДЕ сильно зависит от браузера и процессора и проигрывает саблайму. Редактор слабый. В плане удобства - очень удобно, все уже установлено, настроено и "just works". Считайте что cloud9 это как хостинг, только бесплатно и без рекламы и почти все настроено.

Я советую тем, кто хочет опубликовать свое учебное приложение, попробовать. И тем кто не хочет - тоже попробуйте, очень интересная штука. Ну сами подумайте, насклоько ОПу удобнее когда ему дают не только ссылку на код, но и на работающее приложение. И другие анончики смогут протестировать ваше приложение. Сделайте файлообменник, выложите ссылку в /b - вам мигом найдут все баги и уязвимости.
#187 #667010
>>666485

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

Вот например тут https://c9.io/pricing/webide (взял первого попавшегося провайдера услуг) есть план free - единственный недостаток в нем это ограничение по памяти (1GB RAM, 5 GB HDD) и публичность всех выкладвааемых файлов. Для учебы - хватит.

Проверял в Хромиуме, выпущенном в этом, 2016 году, на ноутбуке с core2duo.

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

PHP есть, версии 5.5 (увы): https://docs.c9.io/docs/supported-languages (обещают подсветку синтаксиса и отладчик). Есть полноценная (линуксовая) консоль без прав рута.

PHP7 доступен, но параллельно с его установкой придется поучиться консольной магии: https://community.c9.io/t/how-to-upgrade-to-php7/1379

MySQL версии 5.5.44-0ubuntu0.14.04.1, пользователь root без пароля.

Редактор примитивный, слабее Sublime, но может кому-то его возможностей хватит.

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

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

Логи выводятся в вкладке Апача - удобно!

Ну, проектов у меня под рукой полно - взял первый попавшийся гитхаб ( https://github.com/V3N0m21/StudentList ) и не стал его устанавливать так как там нет папки public и инструкций по установке. Позор автору.

Вместо него взял https://github.com/V3N0m21/Uppu4

В ридми кстати не написано что надо править конфиг.

Композер есть (не то чтобы это было проблемой, но удобно).

Вот приложение: https://venom21-students-codedokode-1.c9users.io/

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

Аноны, может кто-нибудь проверит на себе эту ИДЕ?

Правда, помните что это веб-приложение и вам нужен современный браузер и свободная память (я бы рассчитывал на 400-800 Мб только под вкладку с IDE, это не мерял, а интуитивно посчитал. Померял - вроде пишет 150 Мб, но я редактор почти не использовал, толкьо консоль).

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

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

Вот команды которые пришлось сделать для установки приложения:

------

13 git clone 'https://github.com/V3N0m21/Uppu4' uppu
14 cd uppu
15 composer install
16 mysql -uroot -e 'CREATE DATABASE uppu CHARSET=utf8'
17 mysql -uroot -e < Uppu4.sql
18 mysql -uroot < Uppu4.sql

# наконец-то!
19 mysql -uroot uppu < Uppu4.sql
20 nano app/config.ini

# поменять документ рут в апаче
21 sudo nane /etc/apache2/sites-available/001-cloud9.conf
22 sudo nano /etc/apache2/sites-available/001-cloud9.conf

# поправить кривокод
23 nano app/bootstrap.php
24 mkdir public/upload
25 chmod 0777 public/upload
26 # почему папки нет в репозитории?
27 mkdir upload/resize
28 mkdir public/upload/resize
29 chmod 0777 public/upload/resize/

---------

В общем, в плане скорости работы облачная ИДЕ сильно зависит от браузера и процессора и проигрывает саблайму. Редактор слабый. В плане удобства - очень удобно, все уже установлено, настроено и "just works". Считайте что cloud9 это как хостинг, только бесплатно и без рекламы и почти все настроено.

Я советую тем, кто хочет опубликовать свое учебное приложение, попробовать. И тем кто не хочет - тоже попробуйте, очень интересная штука. Ну сами подумайте, насклоько ОПу удобнее когда ему дают не только ссылку на код, но и на работающее приложение. И другие анончики смогут протестировать ваше приложение. Сделайте файлообменник, выложите ссылку в /b - вам мигом найдут все баги и уязвимости.
#188 #667014
>>667009
Вот тебе задание - разберись.

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

Хоят вру - сервер работает не постоянно, а только пока открыта вкладка с IDE в браузере.

ну да ладно, кто хочет посмотреть файлообменник венома - сделайте аккаунт, склонируйте мой проект https://ide.c9.io/codedokode/venom21-students и запускайте сколько влезет.

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

Алсо, если кто-то может зайти с андроида/айпада - отпишитесь, как работает, не тормозит ли. 150 Мб памяти вроде для планшета приемлемо, а вот справится ли АРМ процессор - не знаю.
>>667025>>672693
#190 #667025
>>667019

Алсо, файлы не скачиваются так как автор кода V3N0m21 не предусморел отдачу средствами PHP при отсутствии расширения, а ставить его мне лень.
#191 #667030
Что такое колбэк функция простыми словами и как она работает?
>>667031
#192 #667031
>>667030
Функция, предназначенная для вызова для другой функцией.

callback дословно - обратный звонок.
>>667059
#193 #667034
Обратный вызов точнее.
#194 #667038
>>664784 (OP)
>>666920
Завёл твой код, всё работает. Проблема не в коде
#195 #667042
/((?:^|[.?!])\)?)\s*\b(.)/ - как понять эту регулярку?
Там ведь даже скобка не закрыта, а всё работает.

>>667010
Интересно, схоронил.
>>667053
#196 #667045
Какие плюсы перехода на php7?
>>672692
#197 #667053
>>667042
Это скобка - литерал. Она заэкранирована, видишь?

Эта штука матчит ситуацию:
начало строки или .!? - (^|[.?!]), символы ?: говорят, что эту группировку не надо сохранять в памяти;
дальше закрывающая скобка (которой может не быть) - \)?
дальше пробельные символы (которых может не быть) - \s*
дальше граница слова, дальше первый символ слова.
>>667066
#198 #667059
>>667031

>callback дословно - обратный звонок.


И какой смысл вкладывается во фразу "обратный вызов"? Она ничего не говорит интуиции. Зачем придумали эту фразу вместо "лямбда"?
>>667064
#199 #667064
>>667059
Коллбэк не обязательно должен быть лямбдой (анонимной функцией).

Код из примера можно записать так:

function myStrtoupper($matches) {

return $matches[1] . ' ' . mb_strtoupper($matches[2]);

}

echo preg_replace_callback('#((?:^|[.?!])\)?)\s*\b(.)#su', 'myStrtoupper', $challengeText);
>>667069>>667072
#200 #667066
>>667053
Спасибо, но я ни хера не понял, я туп.
Где можно так надрочицца в регулярных выражениях?
>>667088>>672692
#201 #667069
>>667064
И что такое обратный вызов? Почему он обратный?
>>667075>>667088
#202 #667072
>>667064
Долго php учишь? Что знаешь, кроме него?
>>667088
#203 #667075
>>667069

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

Вот пример:

$files = ['file.txt', 'file.jpg'];
$images = array_filter($files, function ($file) {
return preg_match('/\.(jpg|png)$/u', $file);
});

Здесь мы передаем коллбек в функцию фильтрации массива. Она вызывает ее для каждого файла и решает оставить его в массиве или нет. Таким образом, управление передается то функции array_filter, то обратно нашему коду.
>>667082>>667088
#204 #667082
>>667075
Почему он обратный?
>>667083
#205 #667083
>>667082

Потому что функция array_filter делает обратные вызовы назад в наш код.
>>667087>>667089
#206 #667087
>>667083
Вот ведь сука какая. Обратные вызовы она делает, блять..
Простите
#207 #667088
>>667066
Практика.
Напиши, например, граббер сообщений с сосача с помощью регэкспов.
Тебе сейчас скажут, что нельзя парсить html регулярками, но все так делают. И еще смеются над теми, у кого DOM-парсеры падают на невалидном html.

>>667069
Ну вот функция preg_replace_callback передает в твою функцию свои находки. Ты их обрабатываешь и возвращаешь preg_replace_callback.

>>667072
Я выше отмечался, я веб-макака без алгебры со стажем 7 лет.
Знаю JS.

>>667075
Модификатор u лишний. Здесь он не имеет значения.
Алсо, есть более элегантное решение

return in_array(pathinfo($file, PATHINFO_EXTENSION), array('jpg', 'png'));
>>667091>>672692
#208 #667089
>>667083
#define обратные вызовы
#209 #667091
>>667088

>Ну вот функция preg_replace_callback передает в твою функцию свои находки. Ты их обрабатываешь и возвращаешь preg_replace_callback.


Так почему такие вызовы называются обратными?
>>667098
#210 #667098
>>667091
Если ты передаешь одну функцию для исполнения как параметр для другой функции, такая функция называется callback.

Она тебе звонит обратно. В эту функцию.
Аналогия с реальным миром - ты оставляешь просьбу перезвонить по такому-то номеру.
Ты оставляешь функции просьбу вызвать такую функцию.
По-английски call - звонить и вызывать.
>>667115
#211 #667115
>>667098

>Она тебе звонит обратно. В эту функцию


Ну так это стандартная процедура вызовов функций, когда после выполнения со стека снимается адрес возврата. Зачем давать этому процессу название, которое применимо только когда вызов похож на использование лямбд?
>>667118>>667128
#212 #667118
>>667115
Она звонит тебе не после выполнения, а во время выполнения, понимаешь?
>>667123
#213 #667120
Кроме того, callback-функция в стеке будет выше вызвавшей ее функции.
Адрес возврата у тебя будет находиться в стеке ниже исполняемой функции.

Ты неправильно понимаешь, что такое callback. Значит, тебе это пока не нужно.
>>667132
#214 #667123
>>667118

>звонит


В смысле просто использует функциональный контекст вызывающей процедуры, и этому дали глупое название?
>>667126>>667132
#215 #667126
>>667123
Я вопросов твоих не понимаю. Этот приём должен был остаться безымянным?
#216 #667128
>>667115
потому что названия придумывали гуманитарии. им понятия "перезвонить", "фабрика", "наблюдатель" и прочие абстрактные бобы понятней.
>>672693
#217 #667132
>>667123

Что значит "использует функциональный контекст "? Нет, неверно, она вызвает функцию которую ты ей дал.

>>667120

Вы зря переходите к стекам. Стек - это всего лишь одна из возможных реализаций такой вещи, никто вам не гарантировал что интерпретатор PHP будет его использовать (например оптимизирующий компилятор может заменить вызов функции переходом или заинлайнить ее). Да и я не понимаю, какой смысл обсуждать реализацию когда нам важна общая идея как это работает.
>>667135
#218 #667135
>>667132

>Что значит "использует функциональный контекст "?


Переданные аргументы и локальные переменные вызвавшей функции.
>>667140
#219 #667140
>>667135

>Переданные аргументы


Это не функциональный контекст.

>локальные переменные вызвавшей функции


Какие? Из нативного C-кода?
Это не javascript, в PHP у функции только свой скоп.
#220 #667148
Походу, обратный вызов это как несущественное состояние в цепи Маркова или канонический подъем в задачах алгебраических кривых. Программистишки не могут объяснить, какой интуитивный посыл несут эти определения и просто кукарекают баззвордами.
>>667153
#221 #667153
>>667148

Тебе объяснили. Однако ты пытаешься (вяло и безрезультатно) раздуть тут пустую дискуссию ни о чем. Это пхп тред, функциональные языки можно обсудить в других тредах, прокрути до 4-5 страницы и обсуждай.
#222 #667188
Как лучше делать: писать трудночитаемый, но компактный код или все расписывать, чтобы все поняли?
>>667348>>672693
Аноним #223 #667236
Сап всем, решил обмазаться и сразу же попал в просак. Не знаю почему, но сегодня у меня появилось желание заняться чем-нибудь интересным. Наткнулся на этот тред и заинтересовало. В общем решил попробовать. Завис на третей задачи W5.2(циклы), нихуя не понял. Как-то всё достаточно резко переменилось, до этого решалось легко. Собственно вопрос, к погромистам, как решить её? И что повторить чтобы не возникало проблем с этой темой? Потому что у меня такое ощущение, будто я вообще ничего не усвоил за предыдущие темы.
>>667238
test test #224 #667237
................00000000000
..............00,,,,,,,0,,,,,,00
.............0,,,,,,,,,0,,,,,,,,,0
............0,,,,,,,,,,0,,,,,,,,,,0
...........0,,,,,,,,,,,0,,,,,,,,,,,0
...........0,,,,,,,,,,,,,,,,,,,,,,,,0
...........0,,,,,,,,,,,,,,,,,,,,,,,,0
...........0,,,,,,,,,,,,,,,,,,,,,,,,0
............0,,,,,,,,,,,,,,,,,,,,,0
.............000000000000000
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.........000,,,,,,,,,,,,,,,,,,,,,,000
.......00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,00
......0,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
.....0,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
....0,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
...0,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
...0,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
...0,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
....0,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
.....0,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,0
test test #224 #667237
................00000000000
..............00,,,,,,,0,,,,,,00
.............0,,,,,,,,,0,,,,,,,,,0
............0,,,,,,,,,,0,,,,,,,,,,0
...........0,,,,,,,,,,,0,,,,,,,,,,,0
...........0,,,,,,,,,,,,,,,,,,,,,,,,0
...........0,,,,,,,,,,,,,,,,,,,,,,,,0
...........0,,,,,,,,,,,,,,,,,,,,,,,,0
............0,,,,,,,,,,,,,,,,,,,,,0
.............000000000000000
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.............0,,,,,,,,,,,,,,,,,,,0
.........000,,,,,,,,,,,,,,,,,,,,,,000
.......00,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,00
......0,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
.....0,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
....0,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
...0,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
...0,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
...0,,,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
....0,,,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,,0
.....0,,,,,,,,,,,,,,,,,0,,,,,,,,,,,,,,,0
#225 #667238
>>667236

Про айфон в кредит? На ней все спотыкаются.

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

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

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

Также, ты читал замечания под задачей?

> Подсказка: мало кому удается решить эту задачу с первого раза. Попробуй сделать так: для начала, поменяй сумму кредита на 4000, так как он выплачивается за 2 месяца и его легко посчитать вручную (всего выплачено 6123). Также, добавь в цикл if, выводящий значения всех переменных и попробуй понять, правильно ли они считаются. Разобравшись с этой суммой, можешь поставить назад число 40000.

>>667241
Аноним #226 #667241
>>667238
Спасибо анончик, сейчас попробую.
IDE в браузере #227 #667242
Аноны, напомню что есть интересная облачная IDE - PHP, Апач, MySQL,отладка - все уже настроено и установлено, код можно править и запускать прямо в браузере или брать с гитхаба, бесплатно, мой обзор: >>667010

Зайдите, попробуйте, кому интересно.
>>667247
#228 #667247
>>667242
Твоя IDE? Я уже зарегистрировался.
>>672693
#229 #667269
В общем, я дописал программу "пиши правильно".
Но мне кажется, что я тут велосипедов нагородил.
Оцените, в общем.
https://ideone.com/AJaH1S
>>674035
#230 #667284
Сап.
Есть дефолтный загрузчик изображений на сервер.
При попытки загрузить изображение с именем:
CuteLittleGirl проблем не возникает , но если написать на русском языке , он сохраняет его с таким именем: сиваятян , при этом , в бд отправляется нормальное имя тобишь КрасиваяТян.jpg , да конечно я понимаю что проблема в кодировке , но , как ее решить?..

https://ideone.com/3aFoEt
#231 #667290
>>667284

И еще , не подскажите как можно вытащить уже измененное mt_rand имя, что бы я мог его потом запихнуть в БД? ><
Вот код:
https://ideone.com/AJJ62O
>>667299
#232 #667299
>>667290
разобрался с генерацией случайного имени.
#233 #667348
>>667188
Если ты пишешь по стандартам, твой код будет понятен в любом случае.
http://getjump.me/ru-php-the-right-way/
https://github.com/getjump/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md
https://github.com/getjump/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md

>>667284

>copy($_FILES['uploadfile']['tmp_name'], $uploadfile)


Нельзя так, используй move_uploaded_file(). Эта функция проверяет, действительно ли этот файл загружен через POST.

>он сохраняет его с таким именем: сиваятян


Дело происходит под Windows? Придется конвертить имя из utf-8 в win-1251.
$winFilename = iconv('utf-8', 'windows-1251', $filename);
>>667349
#234 #667349
>>667348
Спасибо , но , опять уже со всем успел разобраться :D
#235 #667361
Палиндром
не могу понять как это сделать
"проходим от края до середины посимвольно"
http://ideone.com/bpHlPB
>>667369>>674035
Сумма #236 #667362
Оп, проверь задачу из прошлого треда, пожалуйста.

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



Не понял этот момент. То есть вместо функции inclineWord сделать тоже самое в функции smallNumberToText?

ОП, проверь, пожалуйста. Может на 3й раз получится.

http://ideone.com/f2IIDk
>>674036
#237 #667369
>>667361
Я бы решил это так, например.

http://ideone.com/cey5pI
>>667372>>674037
#238 #667372
>>667369
ну это все конечно круто,но мне бы понять как это работает все
>>667374
#239 #667374
>>667372
Починил твой пример, разбирайся.

http://ideone.com/sNrb6L
>>674037
#240 #667400
Помогайте снова, я тот анон с дебаггером, начальном скрипте норм дебажит, но вот когда программа выполняется по 10ку скриптов, и я где то в глубине ставлю брейкпоинты - оно их просто не видит, но в файле конфига или индекса нормально стопается.
>>667518
#241 #667432
Сорян за оффтоп, не бейте ногами.
Подбираю второй монитор для веб-макакинга.
Первый: 20" квадрат, 1400 х 1050.
Кандидаты во второй:
22" 1980 х 1020
22" 1680 x 1050
20" 1600 x 900
19" 1366 x 768
Больше 22 ставить негде. Зрение так себе, боюсь что фулл хд буду рассматривать через лупу. И ваще как у вас все устроено где на каком мониторе иде, браузер, все дела?
#242 #667436
>>667432

>22" 1920 х 1080


конечно же
#243 #667437
>>667432
FullHD и шрифты большие ставь и всё.
То что какие-то какеры себе ставят 9pt это их личная проблема, тебе нужно не весь код сразу видеть, а строк 30-40, больше мозгом всё равно не объять.
#244 #667449
>>667432

> 1400 х 1050.


А что это за странное разрешение? Оно родное? Если нет то пиксели будут размытые, вредно для зрения.
>>667454
#245 #667452
>>667432
У меня тоже зрение говно, 23 дюйма, 1920 на 1080.
В браузерах и иде шрифт увеличенный.
#246 #667454
>>667449
Родное, довольное редкое.
#247 #667466
>>667432
Взял себе DELL 24" 1920х1200, вроде норм
120 Кб, 3840x1080
#248 #667518
>>667400
Дебажишь через расширение? С кукой он должен все видеть в пределах домена.

>>667432
Квадрат 17 1280 на 1024 в треде. Ну я сначала взял 22 TN. Потом поменял на 22 ips. Потом на 24. Теперь 2 по 24, я бы и 3-й взял, но цены в моих пердях и в долларах повырастали. Весь этот путь я прошел за месяц.
>>667636
#249 #667552
Пожалуй, лучший из тредов
Относительно недавно я сделал все задания из шапки (по моему был сайт на народе) но по какой то причине забросил этот чудо язык кажется я ебался с настройками лампа, ксампа и вообще заебался с этими линуксами

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

Моя цель - написать элементарный сайт и пердолить его. ПРОСТО ДЛЯ ДУШИ. Мне все таки 20 ёбаных лет, а я не умею в пхп и БД. Это меня крайне унижает. Анон, поставь на путь истиный.
>>667574>>674038
#250 #667554
мда
sage #251 #667574
>>667552

Мне 23 года, у меня диплом программиста, я не умею в ПХП и БД. Обнимемся?
>>667576>>667632
#252 #667576
>>667574
Ну го учить, хули! Я думаю ты знаешь что нибудь другое
>>667670
#253 #667632
>>667574
Мне 23, у меня диплом экономиста, и я только начинаю учить Пхп, чтобы перекатиться в пограминг
#254 #667636
>>667518
Покажи пожалуйста все свои настройки в PHPstorm связанные с дебаггом и если не сложно в виртуалке как ты сетевое соединение настраивал (я через мост сделал и на убунте поднял вебмин) Я вот счас ребутнул машину, всё запустил с нуля, и теперь у меня даже в первом скрипте шторм не видит дебаггер
>>667648>>667834
#255 #667648
>>667636
в файле пхп.ини пропиши путь к дебаггеру и всё, в шторме не надо настраивать, оно само найдёт
>>667661
#256 #667661
>>667648
[xdebug]
zend_extension="/usr/lib/php5/20121212/xdebug.so"
xdebug.default_enable = On
xdebug.var_display_max_depth=6
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9005
xdebug.remote_handler=dbgp
xdebug.idekey=PHPSTORM
xdebug.remote_mode = req
xdebug.remote_autostart=1
xdebug.remote_log=/tmp/xdebug.log
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/var/www/debugger/"
xdebug.profiler_output_name = "callgrind.%u.%H_%R"
xdebug.show_local_vars=1
xdebug.overload_var_dump=1
xdebug.max_nesting_level = 200
Вот настройки пхп.ини
меня смущает строчка xdebug.remote_host=127.0.0.1
что именно здесь должно быть?
>>667666>>667772
#257 #667666
>>667661
почему ссылка на файл .so? Хдебаг идёт как .dll
#258 #667670
>>667576
Я думаю, он знает такое, что ему твоя пыха обоссаная нахуй не нужна.
54 Кб, 1457x470
#259 #667671
>>667696
#260 #667696
>>667671
откуда это?
>>667739>>667775
#261 #667739
>>667775
#262 #667772
>>667661
Должен быть ip по которому твоя убунта видит виндовс.
>>667666
Потому что dll это виндовс библиотека.
#263 #667775
>>667696
>>667739
Webmin на ubuntu
#264 #667834
>>667636
Дык выше уже все что где то менял выложил. У убунты нужно 2 сетевых интерфейса что бы ты к ней мог приткнуться и она к тебе. Паста от ОПа:
Алсо, если ты ставишь линукс в виртуалке в Oracle Virtual Box, то наткнешься на проблемку: линукс может лезть в интернет, а ты к нему подсоединиться не можешь. Это по той причине, что Vbox подсоединяет сетевую карту твоей виртуалки к NAT. Чтобы в нее коннектиться, надо будет добавить вторую сетевую карту, выставить ей примерно такие настройки как на пикрелейтед (обрати внимание на слово host-only network).

Ну и потом в самом дебиане перенастроить эту карточку, естественно, сама она себя не настроит. Вот что надо дописать в /etc/network/interfaces:

auto eth1

iface eth1 inet static

address 192.168.56.2

netmask 255.255.255.0

gateway 192.168.56.1

metric 100

Ну надеюсь ты понимаешь, что тут указан Ip-адрес и шлюз.

После этого, перезапусти сеть через sudo service networking restart

Если все ок, то ты сможешь пинговать виртуалку с хоста через ping 192.168.56.2 .Если не ок — читай записи в /var/log/messages

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

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

Работать через консоль виртуалки неудобно, так что включи ssh и коннекться через программу вроде putty. По ssh можно также передавать файлы (например программой WinSCP) так что все это тебе пригодится.

Проблемы? Смотри логи командой tail -30 /var/log/messages (понядобятся права админа).
#264 #667834
>>667636
Дык выше уже все что где то менял выложил. У убунты нужно 2 сетевых интерфейса что бы ты к ней мог приткнуться и она к тебе. Паста от ОПа:
Алсо, если ты ставишь линукс в виртуалке в Oracle Virtual Box, то наткнешься на проблемку: линукс может лезть в интернет, а ты к нему подсоединиться не можешь. Это по той причине, что Vbox подсоединяет сетевую карту твоей виртуалки к NAT. Чтобы в нее коннектиться, надо будет добавить вторую сетевую карту, выставить ей примерно такие настройки как на пикрелейтед (обрати внимание на слово host-only network).

Ну и потом в самом дебиане перенастроить эту карточку, естественно, сама она себя не настроит. Вот что надо дописать в /etc/network/interfaces:

auto eth1

iface eth1 inet static

address 192.168.56.2

netmask 255.255.255.0

gateway 192.168.56.1

metric 100

Ну надеюсь ты понимаешь, что тут указан Ip-адрес и шлюз.

После этого, перезапусти сеть через sudo service networking restart

Если все ок, то ты сможешь пинговать виртуалку с хоста через ping 192.168.56.2 .Если не ок — читай записи в /var/log/messages

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

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

Работать через консоль виртуалки неудобно, так что включи ssh и коннекться через программу вроде putty. По ssh можно также передавать файлы (например программой WinSCP) так что все это тебе пригодится.

Проблемы? Смотри логи командой tail -30 /var/log/messages (понядобятся права админа).
>>667864
#265 #667864
>>667834
Всем спасибо кто помогал, в общем всё работало ещё вчера, я не учел что у меня vqmod на сайте, и брейкпоинты в оригинальных файлах не влияли на работу сайта, он просто работал с закешированных файлов.
#266 #667871
Проблемы со стилями для принтера, делаю отдельный файл css и пишу там следующее:

@media print {

Копирую сюда весь css код

}

При этом ничего не выравнивается по центру, когда выводишь документ на печать, выравнивается только если проставить вручную все выравнивания в самом HTML, но это само собой долго и неудобно.
>>674038
#267 #667876
Пишу
<?foreach($arr as $key=>$val) {?>
<tr>
<td><?=$key?></td>
<td><?=$val?></td>
</tr>
<?}?>
Выдает Undefined variable val и key. Что за дела?
>>667883
#268 #667883
>>667876
Всё понял. Короткая запись <? не работает.
>>667886>>667888
#269 #667886
>>667883
Попробуй так.
<?foreach($arr as $key=>$val) {
<tr>
<td><?=$key?></td>
<td><?=$val?></td>
</tr>
}?>
>>667887
#270 #667887
>>667886
<?foreach($arr as $key=>$val) {
<tr>
<td>$key</td>
<td>$val</td>
</tr>
}?>

А лучше так.
#271 #667888
>>667883
Так ты сначала определи сами переменные-то, лалка.
>>667890
#272 #667890
>>667888
Так они определены в foreach
>>667892
#273 #667892
>>667890
А ты сам массив $arr разве определил?
Откуда они у тебя возьмутся, из воздуха?
Или ты не весь код показал.
>>667893>>667894
#274 #667893
>>667892
Я мимопроходил вообще.
#275 #667894
>>667892
Это кусок кода, $arr определен ранее.
>>667896
#276 #667896
>>667894
Вот такое что-то тебе нужно было: http://ideone.com/wigFKJ ?
Или что? Я просто не работал с HTML в PHP пока, стало интересно.
>>667899
#277 #667899
>>667896
Спасибо, но я уже написал, что разобрался.
>>667902
#278 #667902
>>667899
А для чего это было нужно, что-то в задаче ОПа?
>>667912
#279 #667912
>>667902
Нет. Решал задачу на расчет набора монет для суммы сдачи, используя mvc.
>>674039
525 Кб, 750x548
#280 #667916
Карач, все ваши калбэки превращаются в банальный call eax. Шах и мат, абстрактные долбоебы. Следующими для унижения будут замыкания и комбинаторы
#281 #667921
>>667916
А почему на фоне не члены и членики, большие и маленькие?
152 Кб, 724x539
#282 #667977
#283 #667991
>>667916
Кто-то очень не любит php и репостит вам из ньюфаг-треда.
159 Кб, 1024x768
#284 #668089
Короче, делаю манячат, как мне отображать нормально сообщения с тегами типа <div> <script> и тд? Я сделал автозамену на спецсимволы, но думаю что есть какой то более простой вариант, например прописать что то в css или завернуть текст сообщения в какой нибудь текст. Так как сделать?
>>668091>>668115
#285 #668091
>>668089

>завернуть текст сообщения в какой нибудь тег

#286 #668115
>>668089
В PHP есть функция htmlspecialchars.

И почитай урок про XSS.

https://github.com/codedokode/pasta/blob/master/security/xss.md
58 Кб, 990x619
#287 #668116
Подмогни немножечко :)
как сделать так, чтобы депозит перевалил за лям?
>>668122
#288 #668117
ссылку потерял
https://ideone.com/klAllR
>>674039
#289 #668122
>>668116
Поставь $deposit *= 1.1 в тело цикла.
После каждой итерации проверяется условие в цикле, поэтому как только становится больше миллиона - всё обрывается, не срабатывает echo.
#290 #668254
>>667916

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

Алсо чтобы увидеть ассемблерный листинг скопилированной функции, незачем запускать отладчик. Можно попросить компилятор сгенерировать ассесблер. Иди мануалы читай, а не демонстрируй свое невежество.
#291 #668273
>>665473
Ну главным плюсом считал скорость развертывания, имхо подразумевая то что на винде вообще не удобно работать.
Установить что либо на него можно.
Вагрант ставится из экзешника и ни с чем не конфликтует.

Хотя возможно из за того в нем уже все настроено, новичок упустит большой пласт знаний по настройке и пердолинге, но он обычно юзает всякие денверы, что то же не лучше
>>674039
#292 #668284
Вечер в хату, помогите с задачей про айфоны. Я только начал осваиваться в погромирование. Но вроде туповат. Я не совсем пойму условие задания. Мне нужно, чтобы в конце этой задачи не было отрицательного значения? Но тогда у меня остаётся долг в банке и я не пойму что писать в теле цикла.
>>668285
#293 #668285
>>668284
Запости что уже осилил.
>>668287
#294 #668287
>>668296
#295 #668296
>>668287
Алгоритм. Считаем сколько сейчас васян должен банку.

Если васян должен больше чем 5000 то платим 5000. Иначе платим сколько нужно.

Проверяем. Кредит баланс = 0 ? тогда выходим из цикла.

Обрати внимание: сначала считаем долг за текущий месяц. А потом платим сколько нужно/можем. А не в одну строчку как в исходном алгоритме.
>>668308
#296 #668308
>>668296
Спасибо, я решил её. Не знаю, такое решение принимается? Или это не верно?
http://ideone.com/P8593d
>>668311
#297 #668311
>>668308
Не принимается.
Если, конечно, ты не захотел профинансировать банк лишними тремя тысячами.
>>668312
#298 #668312
>>668311
Вроде исправилсяили всё же нет?
http://ideone.com/P8593d
>>668642>>674039
#299 #668331
Когда я читаю этот тред, у меня чаще всего появляется ощущение вроде BOMBANOOLO, потому что я понимаю, насколько я мало знаю и насколько я тупой в принципе. Но когда читаю ньюфагов, я понимаю, что я уже далеко продвинулся. Но все же нагоняет уныние то, что эти ньюфаги после пары задачек сливаются, а я так и остаюсь самым последним.
#300 #668372
Не получается сделать отладку в NetBeans. Вроде настройку xdebug сделал, phpinfo его показывает. При запуске отладки в строке адреса к адресу добавляется ?XDEBUG_SESSION_START=netbeans-xdebug. Пишет
Object not found!

The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.
В чём может быть дело?
>>668375>>668383
#301 #668375
>>668372
Да ты заебал со своей отладкой! Хуярь как есть, блять!
>>674039
#302 #668376
>>668331
Держи нас в курсе.
>>668434
#303 #668383
>>668372

Проверь URL в адресной строке браузера - он скорее всего неправильный.
#304 #668434
>>668376
Для человека достаточно важно формулировать свои проблемы в словах, а также быть услышанным, пусть это и мимокрокодилы в интернете.
#305 #668446
Не спал сутки. Помогите, пожалуйста, с говнокодом.
Почему в этом http://ideone.com/xpUiVh случае в форыче строка склеивается как положено, а тут http://ideone.com/xpUiVh она дублирует сама себя, и получается 3 строки, вместо одной? Код один и тот же ведь. Ну как мне кажется.
>>668447>>668582
#306 #668447
>>668446
Вот тут https://ideone.com/bCxecz дублирует.
cамофикс
>>668582
#307 #668477
По тестированию есть уроки или самому искать надо?
>>668577
#308 #668497
#309 #668498
Знатоки вордпресса есть? Мне нужно добавить несколько фильтров (add_filter, изменение заголовков, метатегов и контента) только на конкретной странице. Или зная ID страницы, или когда срабатывает шорткод. Так вот, есть ли варианты это сделать, не запуская сам фильтр и не проверяя ID внутри него?

К примеру, грубо говоря
function edit_the_title($title){
If (get_the_ID()=="69"){
return $title." Edited title";
}
return $title;
}
add_filter('wp_head','edit_the_title');

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

If (get_the_ID()=="69"){
add_filter('wp_head','edit_the_title');
}
И тому подобное не работает, я полагаю что станица еще не успевает получить ID на момент обработки основного уровня плагина. Вообще не могу найти в гугле примеров работы add_filter внутри других функций и хуков.
>>668666>>674040
#310 #668530
>>668331
я это ты, братюня, ты это я
#311 #668547
Анон, поясни, нахуя кодить сайты если уже полно CMS и конструкторов? Не кажется ли тебе, что это умирающая тема уже?
#312 #668555
А кто сказал, что мы сайты кодим? Мы веб-приложения пилим.
>>668557
#313 #668557
>>668555
Какие ты веб приложение на пыхе пилишь? На жсе можно расширение браузерное сделать, игру, да что угодно. А на пыхе только сайтики.
>>668560
#314 #668560
>>668557
Веб-приложения, где нужна связка php+mysql.
>>668564
#315 #668564
>>668560
Пример веб-приложения приведешь?
>>668568
#316 #668568
>>668564
Яндекс.толока.
#317 #668577
>>668477

Есть такое https://gist.github.com/codedokode/a455bde7d0748c0a351a

>>668547

Изучай CMS и конструкторы. Но они ориентированы на тех кто хочет делать сайты через админку мышкой или слегка доработать существующий код.
#318 #668582
>>668446
>>668447
Умоляю, помогите мне.
>>668597
#319 #668597
>>668582
Так у тебя var_dump внутри foreach, вот он на каждой итерации тебе и показывает содержимое строки.
https://ideone.com/8unvtR
>>668599>>668605
#320 #668599
>>668597
Ещё у тебя $yoda не инициализирован был.
https://ideone.com/nSzDeW
>>668605
#321 #668605
>>668599
>>668597
Пиздец, мозги совсем атрофировались за ночь. Спасибо огромное. Пойду спать.
#322 #668613
Чего-то веб оказывается сложнааа. И сервера какие-то, и апачи, и мускулы, и фронт надо знать. Я даже не знаю за что браться прямо сейчас. Я нуфаг, хочу вкатиться в программирование. Скажите за что браться сейчас и посоветуйте лит-ру где хотя бы будут объяснять что это за серверы и как вообще сам веб работает.
>>668620>>668666
#323 #668620
>>668613
Чтобы не отбить желание кодить можешь пока писать на http://ideone.com/ и делать задачки из оп-поста.
>>668628
#324 #668628
>>668620

Или в онлайн-IDE с уже настроенным Апачом, MySQL и PHP, про которую я писал выше: >>667010
#325 #668642
>>668312
Нет, там должна сумма выплат быть 61270.
Конкретно в этом твоём варианте вот что неверно: когда $creditBalance у тебя становится меньше $monthlyPayment, то у тебя следует вот это выражение: $creditBalance = ( $creditBalance х $percent ) + $servicePayment - $monthlyPayment;. И в какой-то момент это уходит в минус, от чего дальше всё идёт неверно.
Подсказка: попробуй ввести отдельную переменную для подсчёта $creditBalance = ( $creditBalance х $percent ) + $servicePayment, ведь именно когда этот момент становится меньше $monthlyPayment, нам и надо просто его выплатить и приплюсовать к $paymentTotal.

>>668331
Не всё сразу, бро.
Я вот уже третий месяц постепенно иду.
Есть братишки, которые одну за одной решали задачи, а потом слились на подступе к ООП.
У меня так-то тоже ПРИГОРАЕТ постоянно. Смотрю на "Кошки-мышки", "Сапёра" на JS, на "Вектор" - просто ПОЛЫХАЕТ, потому что пока ни черта не могу понять. Вот со следующей недели к ООП подступаю, только начал читать Зандстру и ОПа.
#326 #668666
>>668498
Вордпресс не станет больше тупить из-за одного-единственного if.

>>668547
Без базара, братиш.
Разрабатывай сайты на CMS, греби бабло лопатой.

>>668613
Купи себе хостинг за 12 рублей в месяц и забудь про все это. http://host-food.ru
>>668956
#327 #668669
>>668547
Есть сайты, а есть веб-приложения
Сайты наполняются текстом и jquery при помощи мышки, веб-приложения — нет

Все зависит от задач
#328 #668723
Правильно я понимаю, что в задаче "Числа прописью" нельзя обработать число больше PHP_INT_MAX?
Если я большое число буду обрабатывать как строку т.е. для разбиения использовать substr, а уже выделенные сотни, тысячные обрабатывать как числа это нормально или так делают только быдлокодеры?
#329 #668730
>>668723
Лучше использовать вот такие конструкции:
if ($number >= 999 || $number <= 999999) {
}
if ($number > 999999 || $number <= 999999999) {
}
Это всё облегчит нахождение чисел для переработки "троек" (сотен, сотен тысяч и сотен миллионов).
>>668733>>668743
#330 #668733
>>668730
Ой, то есть в первом варианте:
if ($number > 999 || $number <= 999999) {
}
А до этого нужен вариант:
if ($number <= 999) {
}
Там будет просто сама функция, которая раскладывает минимальное число, тройное.
>>668743
#331 #668743
>>668733
>>668730
А если я хочу обрабатывать числа больше 999999999?
На моём комплюхтере с шиндовс echo PHP_INT_MAX выдаёт 2147483647 все что больше преобразуются в float.
>>669149
#332 #668751
>>668723

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

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

http://php.net/manual/ru/book.gmp.php
http://php.net/manual/ru/book.bc.php
#333 #668753
>>668723

Тип float нельзя использовать для денег так как он имеет ограниченную точность http://php.net/manual/ru/language.types.float.php

(около 16 знаков)
#334 #668757
сап, не могу настроить апач 2.2 в опенсервере.

http://pastebin.com/z2JZFxxz конфиг апача. В настройках в опенсервере слушает все ip, в hosts алиасы на оба(127.0.0.1 и 192.168.1.8) ведут на localhost. С локального компа могу зайти на сайт только через локалхост, тогда как по обоим ип выдает ошибку пикрил
>>668758>>668808
10 Кб, 822x276
#335 #668758
>>668757
отвалился
#336 #668768
>>668723
Конверти в строку, используй substr.
(Здесь можно, цифры занимают 1 байт.)

Проверить, что на вход тебе пришли сугубо цифры, можно при помощи ctype_digit(string $string);
#337 #668779
>>668723
Ты задания с регулярками пропускаешь априори?
>>668832
#338 #668789
>>664839

> Типа такого: require_once(__DIR__ . '../src/init.php') ?


Да

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


> Поясни, пожалуйста. isset($_GET['registered']) недостаточно?



Речь по $msg. Она у тебя создается внутри 2 ифов выше этой строки:
https://github.com/disbeliever/php_training/blob/master/students/src/ControllerStudent.php#L23

Следовательно если ифы не сработают, переменная не будет существовать.

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

> В UrlHelper есть смысл параметры ($sort, $dir и прочее) сделать членами класса и передавать в конструктор?


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

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


> Не очень понял, как это можно сделать.


В данном случае надо просто убрать обращения к этой куке (токену) из других мест кода если они там есть.

> unset($_COOKIE);


// используем функции хелперов, которые работают с $myCookie

> $_COOKIE = $myCookie;


Это вообще что-то странное, зачем уничтожать стандартный массив PHP?

>>> public static function fromRow($row)


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


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


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

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

> Я понимаю, но зачем нам здесь поддержка кириллицы?


Поддержка не нужна, но проще везде поступать единообразно и использовать mb-функции. Давай посмотрим с другой стороны. А какая выгода использовать здесь strlen? Чтобы сложнее было понять правильный код или нет?

strlen это не функция подсчета числа символов. Это функция подсчета числа байт, а в твоем коде очевидно считается число символов - следовательно ее использование тут не очень логично.
#338 #668789
>>664839

> Типа такого: require_once(__DIR__ . '../src/init.php') ?


Да

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


> Поясни, пожалуйста. isset($_GET['registered']) недостаточно?



Речь по $msg. Она у тебя создается внутри 2 ифов выше этой строки:
https://github.com/disbeliever/php_training/blob/master/students/src/ControllerStudent.php#L23

Следовательно если ифы не сработают, переменная не будет существовать.

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

> В UrlHelper есть смысл параметры ($sort, $dir и прочее) сделать членами класса и передавать в конструктор?


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

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


> Не очень понял, как это можно сделать.


В данном случае надо просто убрать обращения к этой куке (токену) из других мест кода если они там есть.

> unset($_COOKIE);


// используем функции хелперов, которые работают с $myCookie

> $_COOKIE = $myCookie;


Это вообще что-то странное, зачем уничтожать стандартный массив PHP?

>>> public static function fromRow($row)


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


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


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

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

> Я понимаю, но зачем нам здесь поддержка кириллицы?


Поддержка не нужна, но проще везде поступать единообразно и использовать mb-функции. Давай посмотрим с другой стороны. А какая выгода использовать здесь strlen? Чтобы сложнее было понять правильный код или нет?

strlen это не функция подсчета числа символов. Это функция подсчета числа байт, а в твоем коде очевидно считается число символов - следовательно ее использование тут не очень логично.
>>669712
#339 #668802
>>664870

> https://ideone.com/lqLSPc


Все верно

> https://ideone.com/ccwxQH


Тут тоже все правильно.

> https://ideone.com/ZuRDo8



> echo $string = "Я {$wor


Присваивание (=) и echo это 2 отдельных команды и они должны быть на 2 отдельных строках. Но в данном случае вообще непонятно зачем тут переменная и что мешает сразу вывести строку.

в остальном верно

> https://ideone.com/7g3WwD


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

>>665126

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

Вообще я думаю, тебе не понадобится большинство фич.
#340 #668806
>>665163

В PHP для этого есть SplObjectStorage.
#341 #668808
>>668757

Я не разбираюсь в опенсервере, так как он накручивает там что-то свое для конфигурирования Апача.
>>668810
#342 #668810
>>668808
Ну, напрямую я не мог конфиги править, после перезапуска он их стирал. Нужно править только через настройки самого опенсервера, но а сами параметры доступа вроде верны. Я везде поставил Allow All, в чем проблема?
>>668831
#343 #668831
>>668810

Обычно в Апаче в блоке VirtualHost указывается основное имя и алиасы, для которых применим данный блок, и иногда IP (но это не требуется указывать)

https://httpd.apache.org/docs/2.4/ru/mod/core.html#virtualhost

Соответственно если он иногда работает а иногда нет, что-то не так настроено. Надо смотреть какой там конфиш и сравнивать с докуентацией.

Не понимаю какая выгода мучаться с настройками опенсервера и разбираться что он делает с конфигами когда можно не ставить сборки, а ставить чистый Апач который работает как описано в документации.
#344 #668832
>>668779
Нет, всё сделал. Только причем тут эти задачи? Разбивать регулярками? Так суть вопроса не в том, как разбивать, а можно ли с числом в данной задаче работать на этапе разбиения как с строкой.
>>668847>>674040
36 Кб, 500x475
#345 #668844
>>664784 (OP)
http://ideone.com/jwSIEZ
Ничего не понимаю. В туториале команда ucfirst, кажется, не упоминалась, но почему она не работает? Если вставляю простую строку - делает первую букву заглавной, если строка из массива - игнорирует.
>>674040
#346 #668847
>>668832
Да ни при чем. Просто я думал, что я тут один такой тупой сижу и не могу решить задачу с регуляркой, а вы все их тупо пропускаете.
#347 #668848
Хочу сделать сайт-визитку. Мне для этого cms какую брать или самому писать?
>>668855
#348 #668855
>>668848
Wordpress/drupal/joomla
#349 #668884
Не пойму, в слиме нельзя что-ли заголовки через header указывать, только через $app->response()->header?
>>674040
#350 #668894
Надо написать счётчик для вордпресс, есть определённая кнопка на записях одной категории, по которой вызывается определённое действие (без перезагрузки страницы и без аякса, обыкновенный яваскрипт), мне надо подсчитать сколько раз нажималась эта кнопка на каждой записи. Судя по всему, следует использовать аякс. Первое что приходит в голову это использовать шорткод (в котором будет скрипт счётчика), но в таком случае шорткод надо будет проставлять на каждой записи, а это я думаю не очень удобно, хотя на каждой записи уже есть шорткоды, которые подключают скрипт. Как можно сделать так, чтобы шорткод или функцию можно было бы подключить только для этой категории записи? Данные счётчика мне надо хранить в формате:

id - название страницы - количество нажатий

Стоит ли создавать для этого новую таблицу в вордпресс или постараться как-то обойтись существующими?
>>668956>>669426
#351 #668943
Есть два стула
$a = -12;
$b = 1;
$c = 1;
$discr=$b$b-4$a$c;

$dva_a = $a
2;
$x1=(-$b+sqrt($discr))/$dva_a; //ответ -0.25(правильный)

$x1=(-$b+sqrt($discr))/$a * 2; //ответ -1(неправильно)

ЧЯДНТ?
#352 #668949
>>668943

> $dva_a = $a 2;


$dva_a = $a*2;

быстрофикс
#353 #668952
>>668943
там должно быть /($a2) а не /$a2 это разные выражения
#354 #668956
>>668666

>Вордпресс не станет больше тупить из-за одного-единственного if.


Бля, точняк, протер глаза - это у меня ORDER BY RAND() в таблицах по несколько десятков тыщ записей отжирает время.

>>668894
Шорткод со скриптом счетчика - так себе решение, лучше подключи JS файл со скриптом (через wp_enqueue_script() или как его там), который будет смотреть, та ли категория у страницы (я давно не делал ничего с JS на WP, но кажется там есть JS объект какой-то с информацией о посте) и навешивать действия на твои кнопки со счетчиком.
Хранить данные лучше в таблице вордпресса - кажется, wp_postmeta тебе должна подойти идейно.
>>669426
#355 #669015
<div class="main">
.main{
Background: url(images/1.jpg);
Height: 300px;
Weight: 100%;
Background-size: cover ;
}
</div>
Не получается вставить фон в css.
Далее вставляю его в html
<link rel="stylesheet" type="text/css" href="style3.css">
Что я делаю не так?
>>669018>>669426
#356 #669018
>>669015
Background-image, а не background
>>669054
Нуфаг #357 #669029
Сап, как посоветуете начать изучать PHР?
>>669034
#358 #669034
>>669029
Шапка для кого написана?
#359 #669054
>>669018
Изменил.

Все равно фон не менятся, где еще может быть ошибка?
>>669098>>669107
#360 #669055
сап, аноны! я прочел несколько книг по пхп от орайли и теперь решил сесть и попробовать написать какое-нибудь тестовое задание шоб опыта набраться. сделал задание на базу студентов от опа, но больше ничего не лезет в голову. накидайте мне средних заданий, чтобы реально можно было попрактиковаться
>>669065
#361 #669065
>>669055
Файлообменник смотри, это следующая задача от ОПа. Так же можешь попробовать написать свою борду или блог, но это уже посложнее будет.
>>669069
#362 #669069
>>669065
кстати, интересно, неужели все треды в борде хранятся в бд? или есть какой-нибудь механизм автоочищения таблиц? как думаете?
>>669071
#363 #669071
>>669069
Конечно есть механизм автоочищения. То же самое происходит и с файлами в этих тредах, если тред тонет, то все картинки которые были туда загружены будут доступны на сервере какое-то время (в /b/ это обычно пару часов, за тематику не знаю).
#364 #669098
>>669054
Ты уверен, что путь правильно прописал? Судя по картинке, у тебя в папке с файлом .css есть папка, где лежит искомый фон, так?
>>669099>>669103
#365 #669099
>>669098
Ой, судя по коду, то есть.
#366 #669103
>>669098
Не-а, фон (картинка) в другом месте. В этом фейл?
>>669141>>669161
#367 #669107
>>669054
Открой код страницы в хроме (я надеюсь у тебя хром) выбери body в колонке стилей справа смотри на ссылку со стилем, где прописан background-image и пройди по ссылке.
>>669109
#368 #669109
>>669107
По изображению? не переходит
>>669115
#369 #669115
>>669109
Почему не переходит? Полную ссылку в студию и местоположение картинки относительно корня сайта.
Числа прописью #370 #669120
Посмотрите доработанный вариант. Нормально?

http://ideone.com/gckE38
>>669950>>674041
#371 #669141
>>669103
Ну вообще-то, да. Гугли пути в css.
>>669157>>669161
#372 #669149
>>668743
Да хоть 9999999999999999999999999999999.
Просто соответствующее количество if'ов для этого будет нужно.
Ты же будешь в строку переводить, а не математически.
Про математически анон тебе подсказал уже.
>>674042
#373 #669157
>>669141
Все равно не выходит, перенес в папку css со стилями, в папку images.
>>669158
#374 #669158
>>669157
Алсо, тут вроде бы тоже все чисто
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" type="text/css" href="style3.css">
<meta charset="utf-8"/>
>>669426
#375 #669161
>>669103
>>669141
https://github.com/codedokode/pasta/blob/master/network/urls.md

У ОПа есть урок про абсолютные и относительные ссылки, рекомендую почитать.
#376 #669198
Лол.

Решал задачку по генератору имён. Ну скопировал код, а про название ф-ции что берёт рандомный индекс массива и не увидел. Решил всё способом, когда был
$random = rand(count($letters)-count($letters),count($letters));
>>669208>>669426
#377 #669208
>>669198
Де код?
>>669221
#378 #669210
Чувак, который решал проблему про пути в css, решил уже?
Проверьте задачки #379 #669219
http://ideone.com/gvUha4 -5.3(оценки)
http://ideone.com/P526Ry -5.4(рост)
http://ideone.com/6F7GME -5.5(ответ на вопрос)
http://ideone.com/gU18qG -5.6(генератор имени)
>>669221>>674042
#380 #669221
>>669208
Вот - >>669219.
Только там небольшая ошибка с этим способом была и я всё же поставил нормальную ф-цию.
#381 #669271
Поясните за задание "Шифровка" http://archive-ipq-co.narod.ru/l1/strings.html

Что-то не пойму, в чём стоит задача - нужно допилить для всех букв шифрующие символы или как?
>>669272
#382 #669272
>>669271

>Что-то не пойму, в чём стоит задача - нужно допилить для всех букв шифрующие символы или как?


Да.
#383 #669382
Почаны, только начал.
Как в echo складывать две переменные?
echo "$a+$b" выводит 1+1, а не 2. Нужно создавать третью переменную для результата?
>>669384>>674042
#384 #669384
>>669385
#385 #669385
>>669384
Оу, извиняюсь
Спасибо
#386 #669426
>>668894
>>668956

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

если (категория == нужной категории):
<скрипт>запуститьСчетчик()</скрипт>
endif

>>668943

/ $a * 2 значит поделить на a и умножить на 2, надо скобки ставить

>>668956

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


Да, если надо только хранить число нажатий и не надо хранить каждое нажатие отдельно

>>669015

<div class="main">
.main{
Это вообще что? Смесь CSS и HTML в одном файле?

>>669158

Залей свой HTMl и CSS код на jsfiddle.net

>>669198

> count($letters)-count($letters)


Это такой хитрый способ записать число 0?

Алсо, используй mt_rand - она надежнее и случайнее. Алсо тут ошибка, в массиве нет элемента с индексом равным count(...)
#386 #669426
>>668894
>>668956

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

если (категория == нужной категории):
<скрипт>запуститьСчетчик()</скрипт>
endif

>>668943

/ $a * 2 значит поделить на a и умножить на 2, надо скобки ставить

>>668956

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


Да, если надо только хранить число нажатий и не надо хранить каждое нажатие отдельно

>>669015

<div class="main">
.main{
Это вообще что? Смесь CSS и HTML в одном файле?

>>669158

Залей свой HTMl и CSS код на jsfiddle.net

>>669198

> count($letters)-count($letters)


Это такой хитрый способ записать число 0?

Алсо, используй mt_rand - она надежнее и случайнее. Алсо тут ошибка, в массиве нет элемента с индексом равным count(...)
#387 #669451
я идиот и нихуя не понимаю
<div class="form-group required">
<label class="control-label" for="input-payment-lastname"><?php echo $entry_lastname; ?></label>
<input type="text" name="lastname" value="<?php echo $lastname; ?>" placeholder="<?php echo $entry_lastname; ?>" id="input-payment-lastname" class="form-control" />
</div>

есть форма, как отправить в ластнейм готовое значени и скрыть элемент формы удалить? json жалуется
>>669457
#388 #669457
>>669451

Изучить HTML, в частности скрытые поля форм. Если ты не знаешь HTML то надо читать учебники, а не копипастить куски кода из интернета.
>>669460
#389 #669460
>>669457
спс за совет, сделал костыль гореть мне в аду
#390 #669532
хелп
Есть скрипт входа на сайт с сессиями , все вроде бы ОК , но , при попытки извлечь из БД что-то кроме поля username я получаю..нихуя. просто пустое поле , можете пожалуйста ткнуть на ошибку? Там немного , всего 5 файлов.
https://dropmefiles.com/p7XUK
>>674043
#391 #669712
>>668789

>Это нелогично. Конструктор для тех параметров которые обязательны для создания объекта. С какой это стати нам нужно указывать сортировку чтобы создать класс генерации URL?


ОК. У нас есть класс, в котором нет данных, и методы которого зависят только от своих аргументов. Почему я не могу сделать эти методы статическими?
#392 #669731
Никак не пойму как писать грамотно тесты. Ну вот допустим у программа считает сумму двух чисел и реализован паттерн мвц. То есть у меня есть класс модели в котором содержится метод sum($a, $b), класс контроллера который передает пользовательские данные из представления в модель и класс представления, который подключает шаблоны страниц, выводит данные которые были получены из модели. Если речь идет о модульном тестировании, то мне нужно тестировать все методы всех классов, а не только метод суммы в котором содержится основная логика приложения? А как их можно тестировать?
>>669735>>674043
#393 #669735
>>669731
У тебя модель active record? Ну хуево тебе значит.
Если выделить слой сервисов то будет намного проще и тестить и мокать.
В правильных контроллерах логики быть не может поэтому и тестить там нечего.
Хотя конечно можно написать интеграционные тесты чтобы проверить те же роуты и что все заводится в продакшен-конфигурации.
>>674043
#394 #669741
Посоны, нужно выбрать 20 случайных уникальных строк из таблицы размером около 30 000 строк. Сейчас у меня тупо
SELECT `ID`, `NAME`, `CITY` FROM `TABLE` ORDER BY RAND() LIMIT 20
ID- авто инкремент праймери ки.
Поковырял это чуть-чуть, понял что это дохуя медленный запрос.
В качестве промежуточного варианта решил следующее:
1. Отдельным запросом узнать минимальный и максимальный ID
2. Нагенерить с mt_rand 20 случайных чисел между мин и макс ID
3. SELECT `ID`, `NAME`, `CITY` FROM `TABLE` WHERE `ID` IN ($random_range_string)

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

Короче, это разумный подход? Или существует какой-нибудь простой чудо-запрос, который сделает все красиво без этой еботы?
>>669743>>669744
#395 #669743
>>669741

Сделать индексированную колонку с цифрами от 1 до N и выбирать по условие x > R LIMIT y
#396 #669744
>>669741
Написать хранимку которая будет дергать N раз

SELECT FROM table WHERE key >= FLOOR(RAND()MAX(id)) LIMIT 1
>>674043
#397 #669753
Ребятки, такая ситуация: допустим, я хочу начать разрабатывать некую йобу. Но создание гуёв хочу отложить на потом.
Вопрос: есть инструменты, которые помогут мне в тестировании функционала без пользовательского интерфейса?
#398 #669756
>>669753
Десктопную на пхп? Мсье знает толк.
Во-первых оформляешь свою либу в пакет, пишешь юнит-тесты.
Потом можешь написать CLI как отдельный проект из которого дергаешь либу.
Потом делаешь свою гуйню, опять подтягиваешь либу, ибо нехуй держать яйца в одной корзине.
>>669760
#399 #669760
>>669756

>Десктопную на пхп?


Нет, это будет веб-приложение. Гуями я назвал html-шаблоны и js, и там тоже будет потом достаточно работы. Не хочу распыляться, хочу сначала сервер сделать, потом клиент.
>>669774
#400 #669774
>>669760
Т.е. SPA но сервер на пхп?
Но зачем если есть более приспособленные под это языки?
Ну в любом случае начинать надо со спецификаций, см. BDD или TDD что тебе больше вкатит.
>>669927
#401 #669927
>>669774

>Т.е. SPA но сервер на пхп?


Да, наверное SPA. Гуи буду пилить на этом: https://www.sencha.com/products/extjs/

>Но зачем если есть более приспособленные под это языки?


Потому что я изучаю пхп.
#402 #669935
>>660204
Снова вбрасываю исправленную версию Grammar Nazi
вот из этого поста >>653722
Поправил некоторые моменты, как вывести только часть строки с ошибкой я так и не уловил.
http://ideone.com/SHG6hF
#403 #669940
>>669935
Всё плохо.
Ты собери свой текст, сделай его без абзацев - увидишь, что именно там плохо.
http://ideone.com/yAVftj
Объясняли же ведь уже этот момент тебе.
И да, надо выводить не с помощью var_damp, а с помощью переменной. Для этого надо доставать из массива $match соответствующие значения (ошибки, которые туда набиваются).
Хелп #404 #669943
Как научиться понимать чужой код? Может есть какие-нибудь книги или практические советы?
>>669946
#405 #669944
>>669935

>как вывести только часть строки с ошибкой я так и не уловил.


Надо захватывать соседние слова, только и всего.
Регулярка вида: "слово, пробел есть или нет, ошибка, пробел есть или нет, слово".
Ты не понял, как найти слово? Там же объясняется это несколько раз: [а-яё] - а дальше знак, который при следующем пробеле оборвёт это вырезание. В итоге регулярка захватит только соседнее слово.
#406 #669946
>>669943
С опытом должно прийти.
Пока проверяй все задачи анонов, которые сам уже решал, пытайся исправить и помочь.
Числа прописью #407 #669950
>>669120
Что-то все игнорируют. Все неправильно что ли?

http://ideone.com/gckE38
#408 #670012
>>669950
Мне лень проверять.
#409 #670017
>>669950
Я ещё прежде работу проверял, всё переводило правильно. Толкового посоветовать ничего не могу.
Жди ОПа и его разбора.
#410 #670144
Задачи из раздела "Функции".
http://ideone.com/fVLFtB
>>670161>>676227
#411 #670161
>>670144
1. В функцию можно подставлять непосредственное значение переменной: countMoney($creditSum,7777, $percent, 0, 0, $payout); - все те переменные, которые одинаковые, вставляются переменными. А те, которые отличаются, - вставляются числами.
2. В СофтоБанке должно получиться 61270 с копейками - как в задаче про Айфон. Здесь ошибка в расчётах. В последнем банке должно получиться 53 тысячи с чем-то. Ну это и естественно, что ошибки будут, раз контрольный средний банк считает неверно.
3. $creditSum х $percent / 100 + $comission - повторяется несколько раз. Лучше заведи отдельную переменную для этого.
4. $payment = $i х $payout; - неожиданное выражение, впервые в этих задачах встречаю такое. Вроде бы всё нормально в этом случае. Обычно просто плюсуют $payout к $payment.
>>670226
#412 #670193
Парни, накидайте мотивации. Я вот делаю-делаю задания, я желания нету никакого. Хоть умом я понимаю, что программирование для такого как я - это выгодный путь. Я просто не знаю для чего я всё это делаю? Что я смогу дальше, для чего мне эти задания, для чего вообще нужен пхп, как я потом деньги буду зарабатывать? Оп этого всего не объясняет.
Вот например - на гитаре когда учился, то я точно знал, что щас задрачу эту мелодию, а потом покажу друзьям/семье и они меня похвалят. Тут же, непонятно. Можете расписать, примерно, что будет происходить с моей жизнью, через месяц-три-полгода етц, если я продолжу обучение? В планах php->html,css->js->mysql.
Заставлю то я себя в любом случае, но если вы меня поддержите, то будет легче :3
#413 #670215
Проясните за gulp, bower, grunt, вы пользуетесь этой дичью?
>>676227
314 Кб, 1600x754
#414 #670219
>>670193

>Можете расписать, примерно, что будет происходить с моей жизнью, через месяц-три-полгода етц, если я продолжу обучение


Ты инфантил и надеешься, что программирование преобразит твою жалкую жизнь. Но это не так, и ты просто будешь сосать хуй, не понимая, что происходит.
>>670237
#415 #670226
>>670161
Спасибо. Исправил расчет, а 3-й пункт не получилось, к сожалению.
http://ideone.com/bxYnHn
>>670333>>676229
#416 #670237
>>670219
да хули ее преображать? она и так прекрасна. Просто скоро придется деньги зарабатывать, а я не хочу утром вставать и идти выполнять приказы левых людей. Просто пример приведи.
Гитара: первую неделю пытаешься попасть пальцами в струны, постоянно сбиваешься с ритма, не можешь играть больше получаса изза болей в пальцах; месяц - умеешь играть одну песню, сыграл ее уже - 1000 раз, но все равно стесняешься показать людям, пытаешься что-то напевать при игре; 3месяца - умеешь играть несколько песен, готов тренироваться днями на пролет, горланишь на всю хату пока никого нету дома, аноны с сосача обоссали за кривой вокал; пол года - играешь 10+ песен, ни слушаешь никаких советов и уверен в том, что сам все знаешь, аноны пару раз похвалили пение, показал пацанам со двора - разцеловали; год - начинаешь изучать супер сложные композиции сам незная зачем ИТД.
Вот так нельзя?
143 Кб, 850x505
#417 #670254
>>670237

>Вот так нельзя?


Один раз можно.
Извэни тора гой но йА не готов засирать своим нытьём ещё и этот тред.
>>670261
#418 #670261
>>670254
чат же все таки
#419 #670312
Пытаюсь в древовидные комментарии. Не могу найти или придумать такое решение, в котором можно было бы обойтись без вывода хтмл кода прямо в функции(методе).
>>670317>>670853
#420 #670317
>>670325
#421 #670320
>>670193
Научившись всему из гайдов в оп посте ты сможешь устроиться джуниором за почти нихуя в неприхотливую веб контору. Потусовавшись там с годик сможешь перекатиться во фриланс и работать из старбакса, попивая тыквенный латте и бугуртя на индусов.
>>670347>>670853
#422 #670325
>>670317
Нет. Пробежался по статье, там написано как хранить древовидные структуры в бд, у меня по сути в таком же виде организована таблица (кроме глубины). Мне нужно именно отображение этих данных.
#423 #670328
>>670237
Всё можно. Сначала разберись во всех задачах ОПа, никуда не торопись, помогай новичкам, которые появляются и пропадают. Месяца за 3-4 натренируешься в задачах до высокого уровня, сможешь не глядя их решать, будешь читать чужой код и предчувствовать даже по описанию задачи, в чём человек ошибся.
Дальше - переходишь дальше.
Всё возможно, если изучаешь для удовольствия.
Ты же гитарой зарабатывать не собирался, наверное.
>>670427
#424 #670333
>>670226
Хм, в какой-то момент у тебя $creditSum уходит в минус.
Например, в какой-то момент $creditSum становится равен 260 рублей. Тут же происходит следующее: $creditSum = $creditSum х $percent / 100 + $comission - $payout;. Это всё становится отрицательным значением.
А далее у тебя if ($creditSum х $percent / 100 + $comission < 5000), то есть эта отрицательная $creditSum в этом условии даёт положительное и нужное число.
Это не вполне верно. Поэтому и не получится выделить отдельную переменную выражению $creditSum х $percent / 100 + $comission.
ОП не будет доволен, он всё это видит насквозь.
Расчёты не должны нырять в минус в этой задаче.
>>670334>>673485
#425 #670334
>>670333
*равен 260-ти рублям
#426 #670347
>>670320
Это твой личный опыт или влажные мечты?
>>670351
#427 #670351
>>670347
Человек попросил накидать мотивации, ему и накидали.
какая разница правда это или нет, главное замотивировать
#428 #670361
Допустим, есть чат. Нужно реализовать сохранение его логов для пользователей в виде картинки, как это сделать?
>>670853
#429 #670364
>>670193
Если начнешь хуярить, то через 4-8 месяцев найдешь работу (если ты не из пердей каких-нибудь).
Если не найдешь, значит плохо хуярил.
#430 #670366
>>670193
Сколько тебе лет?
>>670432
#431 #670409
>>665709

>Знаком с OOP


Бери тогда Symfony. Без проблем должно зайти, коли не врешь.
#432 #670422
>>666504

>перевернуть бинарное дерево


Это же совсем не трудно.
>>670462
#433 #670427
>>670328
Ты просто опыта набрался или книжки какие-то читал?
#434 #670432
>>670366
20, а что?
>>670457
#435 #670457
>>670432
Короче, просто хуярь, и будет тебе счастье.
Отныне день, когда ты не напишешь ни строчки кода, не прочитаешь ни одной статьи про теме, будет прожит для тебя зря.
Уделять обучению надо не менее четырех часов в день.
Помни: главное - хуярить. Ты же не работаешь, верно? Значит времени и возможностей до хера.
>>670466
#436 #670462
>>670422
Многие в этом треде даже не знают что это такое.
>>670472
#437 #670466
>>670457
ок, спс.
>>670475
#438 #670467
Всем доброго вечера!
Проверьте задачку на правильные мобильные номера, пожалуста.
https://ideone.com/8fJqR0
>>670503>>670855
#439 #670472
>>670462
Многие в этом тебе много чего не знают. Новички же совсем.
Зато многие претенденты на позицию джуна знают.
>>670476
#440 #670475
>>670466

>ок, спс.


Правильно писать: "Ок, спс, ушел хуярить".
>>670652
#441 #670476
>>670472

>Многие в этом тебе


Многие в этом треде
#442 #670503
>>670467
Вот это несколько раз скопировано: "\ ?".
Попробуй использовать квадратные скобки, которые означают "любой указанные символ в любом порядке", а также кое-какой символ после них - чтобы дать понять, что скобок, минусов и пробелов там может быть неограниченное количество.
>>670514
#443 #670514
>>670503
Сделал.
>>670527>>670533
#444 #670527
>>670514
https://ideone.com/2c6hDp - такого номера нет у ОПа (первый в правильных), но он вполне реален. Сможешь ли ты совладать с ним, не разрушив правильности проверки других номеров?
>>670575
#445 #670533
>>670514
Также к чему обратные слэши ставишь перед любым символом в квадратных скобках? Они там не выполняют свои функции, меняют своё значение. Символ пробела надо указывать символом.
>>670575
#446 #670575
>>670533
>>670527
Сделал, правда с квардратными скобками не работало чомусь, вида: ([ (-]+)?
>>670603
#447 #670603
>>670575
А теперь смотри, какие интересные номера у тебя верные.

https://ideone.com/mgkIba
>>670655
#448 #670652
>>670475
Воистину так, сука мля, ебаныврот.
#449 #670655
>>670603
Согласен, но если мы принимаем что

>'8 ( 495 ) 1 - 2 - 3 - 4 - 5 - 6 - 7'


правильный, то почему

>'8 911 415 (16) (13)'


нет? Да и я на подсказку ОПа ориентировался

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


Но тем не менее я пофиксил(старая ссылка - актуальна) и сразу в догонку то-же только с заменой проверь, пожалуйста.
https://ideone.com/AG9xvk
#450 #670686
>>670655
И ещё про замену слова "дурак"
https://ideone.com/jh6Jiq
>>670734>>676229
#451 #670725
>>670655
Одно пофиксил, другое сломал.
У тебя там два некорректных номера прошло проверку.

Вот мое решение, а то я сам не решал еще.
http://ideone.com/b2tQKa

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

Алсо, кто сможет прочитать мою регулярку - тот герой.
>>670728>>670855
#452 #670728
>>670725

>+7-(812)-567-55-67 неверный кафир


>+7-(812)1234567 неверный кафир


С какого такого перепугу? Это верные номера.
>>670734>>676229
#453 #670734
>>670686
Забыл четвертую букву к.
Не экранируй пробелы.

Алсо, вместо пробела можно использовать символьный класс \s - любой пробельный символ (почти любой).
Алсо-2. Здесь тебе не нужна группировка в скобках - [дД] идентично (д|Д) для одного символа. Но здесь уже обязательно надо поставить модификатор u - utf-8.
Алсо-3. Если ты группируешь что-то в скобках, но запоминать результат тебе не нужно - пиши так: (?:раз|два). ?: - не делать ссылку, не запоминать эту группировку.

>>670728
А для меня - нет.
#454 #670740
>>670734

>А для меня - нет.


Пааапрошу пояснить.
ОП как раз и предлагал эти номера как правильные.
>>670746
#455 #670746
>>670740
Это я их туда добавил. У ОПа в тестах их не было.

Энивей, базара нет - http://ideone.com/7xEGiD
>>676229
#456 #670751
>>666493
>>666493
мне кажется, лучше будет не просто сравнивать окончания, а учитывать транскрипции и исключения
ударения конечно маст хэв
#457 #670781
>>670734

>4ая к


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

>Алсо-3


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

Например, /<(div|span)>.*?</\1>/ найдет только <div></div> или <span></span>, но не <div></span>. \1 - ссылка на первую сохраненную группу.

Если тебе не надо ничего сохранять - ты ставишь ?: после скобки. Так экономится память, а также не засирается итоговый массив с результатами, например.
>>670788>>670860
#459 #670788
>>670784
Спасибо
#460 #670793
Так.
Посоны, каким-то блядь расчудесным образом надо вникнуть в jquery и научиться хуярить в бутстрапе за месяц.
Есть где-нибудь такая хуйня, чтоб я прочитал и охуел от пиздатости материала?
>>670794>>670860
#461 #670794
>>670793
На codeacademy пробани для начала, вдруг охуеешь. Не от пиздатости, так от чего другого.
>>670816>>670860
#462 #670796
Зашёл в список сообщений в контакте, посмотрел его разметку, а он таблицей сделан, это нормально?
>>670860
Malikov #463 #670816
>>670794
Да, нормально. Учитывая гомоеблю с разной поддержкой стандарта в разных браузерах
#464 #670853
>>670237

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

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


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

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

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

>>670312

Метод в классе TableGateway возвращает отсортированный массив комментариев. Шаблон приходится по ним циклом и выводит.

Вообще тут есть 2 варианта прелставления:

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

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

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

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

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

Есть некое дерево. Реализуй это дерево средствами ООП. Узел дерева должен быть представлен объектом, поддерживающим такие методы:

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

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

Бытовая техника (5)
....утюги
....пылесосы
....телевизоры (3)
........LCD телевизоры

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

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

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

>>670320

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

>>670361

Сохранить логи и вывести на картинку с помощью какой-нибудь графической библиотеки.
#464 #670853
>>670237

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

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


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

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

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

>>670312

Метод в классе TableGateway возвращает отсортированный массив комментариев. Шаблон приходится по ним циклом и выводит.

Вообще тут есть 2 варианта прелставления:

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

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

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

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

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

Есть некое дерево. Реализуй это дерево средствами ООП. Узел дерева должен быть представлен объектом, поддерживающим такие методы:

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

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

Бытовая техника (5)
....утюги
....пылесосы
....телевизоры (3)
........LCD телевизоры

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

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

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

>>670320

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

>>670361

Сохранить логи и вывести на картинку с помощью какой-нибудь графической библиотеки.
>>671003
#465 #670855
>>666504

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

>>670467

Посмотри что пишет твоя программа:

> + 849512345678


Это неправильный номер - тут 12 цифр

> - 8 911 415 (16) (13)


А это правильный.

Надо исправить ошибки в регулярке. Сейчас там у тебя она состоит из 2 частей (в первой 3-4 цифры, во второй 6-7). Это неправильно так как ты не можешь гарантировать что после 8 будет ровно 10 цифр - у тебя их может быть от 9 до 11.

>>670655

> 8 911 415 (16) (13)


Это правильный номер.

>>670725

> Алсо, кто сможет прочитать мою регулярку - тот герой.


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

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

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

Потому твой вариант регулярки - не годится.

Код в checkPhoneNumberIRL в общем годится после улучшения оформеления кода. str_replace я бы заменил на preg_match ради краткости, и вынес бы ее на отдельную строку.

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

(крестик или галочка показывающие правильно ли определен ответ) (номер) (текст результата проверки)

Тогда бросив взгляд на левый край можно увидеть все ли ок.
#465 #670855
>>666504

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

>>670467

Посмотри что пишет твоя программа:

> + 849512345678


Это неправильный номер - тут 12 цифр

> - 8 911 415 (16) (13)


А это правильный.

Надо исправить ошибки в регулярке. Сейчас там у тебя она состоит из 2 частей (в первой 3-4 цифры, во второй 6-7). Это неправильно так как ты не можешь гарантировать что после 8 будет ровно 10 цифр - у тебя их может быть от 9 до 11.

>>670655

> 8 911 415 (16) (13)


Это правильный номер.

>>670725

> Алсо, кто сможет прочитать мою регулярку - тот герой.


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

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

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

Потому твой вариант регулярки - не годится.

Код в checkPhoneNumberIRL в общем годится после улучшения оформеления кода. str_replace я бы заменил на preg_match ради краткости, и вынес бы ее на отдельную строку.

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

(крестик или галочка показывающие правильно ли определен ответ) (номер) (текст результата проверки)

Тогда бросив взгляд на левый край можно увидеть все ли ок.
>>670948
#466 #670860
>>670734

Модификатор u надо ставить всегда (конечно еще лучше было бы если PHP это делал сам - в PHP6 это должно было быть, но не осилили). А то потом люди приходят в тред и спрашивают почему у них регулярка не работает.

>>666493

Там ударения надо знать и учитывать произношение: например чёлен-волн или "и горний ангелов полет, и гад земных подземный ход" (я мог пару слов перепутать конечно, вряд ли в оригинале было земных и подземных рядом). У Маяковского по моему есть рифма "блюда" - "буду". А если брать более поздние произведения - там еще более сложные рифмы могут быть. Также, в стихах по моему допускается переставлять ударение ради рифмы. Если тут есть гуманитарий-куны, они наверно лучше знают.

>>670784

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


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

>>670793

Бутстрап какое отношение имеет к jQuery? Это разные вещи. Алсо, то что тебе нужно выучить это JS/DOM, HTMl/CSS. В ОП посте есть задачи, но за месяц ты вряд ли справишься. Но это потому что верстка и яваскрипт не такие простые вещи как некоторым кажется.

>>670794

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

>>670796

Возможно разработчики вконтакте не очень сильны в верстке. Возможно, там есть практические соображения - display: table и многие вещи из CSS2.1 и CSS3 не работают IE6, 7, 8, а они долгое время поддерживались.

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

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

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

Ну и помни что таблицы очень плохо дружат с адаптивностью. Таблицу из 3 колонок нельзя превратить в высокую тонкую ленту.
#466 #670860
>>670734

Модификатор u надо ставить всегда (конечно еще лучше было бы если PHP это делал сам - в PHP6 это должно было быть, но не осилили). А то потом люди приходят в тред и спрашивают почему у них регулярка не работает.

>>666493

Там ударения надо знать и учитывать произношение: например чёлен-волн или "и горний ангелов полет, и гад земных подземный ход" (я мог пару слов перепутать конечно, вряд ли в оригинале было земных и подземных рядом). У Маяковского по моему есть рифма "блюда" - "буду". А если брать более поздние произведения - там еще более сложные рифмы могут быть. Также, в стихах по моему допускается переставлять ударение ради рифмы. Если тут есть гуманитарий-куны, они наверно лучше знают.

>>670784

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


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

>>670793

Бутстрап какое отношение имеет к jQuery? Это разные вещи. Алсо, то что тебе нужно выучить это JS/DOM, HTMl/CSS. В ОП посте есть задачи, но за месяц ты вряд ли справишься. Но это потому что верстка и яваскрипт не такие простые вещи как некоторым кажется.

>>670794

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

>>670796

Возможно разработчики вконтакте не очень сильны в верстке. Возможно, там есть практические соображения - display: table и многие вещи из CSS2.1 и CSS3 не работают IE6, 7, 8, а они долгое время поддерживались.

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

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

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

Ну и помни что таблицы очень плохо дружат с адаптивностью. Таблицу из 3 колонок нельзя превратить в высокую тонкую ленту.
>>670937>>670948
#467 #670937
>>670860

> Бутстрап какое отношение имеет к jQuery? Это разные вещи.


Библиотека js и фреймворк разные вещи? Серьёзно? Не ожидал.

> Алсо, то что тебе нужно выучить это JS/DOM, HTMl/CSS.


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

Пока что думаю пройти курсы кодакадеми js, jqeury, потом с помощью аллаха связывать всю эту хуйню пока что где-нибудь в иде, далее уже конкретно изучать бутстрап, чтоб иметь общее представление и оттуда уже комплексно углубляться в less, js и дрочить ксс сколько успею.
>>676229
#468 #670945
ОП, как работают днс-записи для случая: домен куплен у оффициального селлера, перенаправлен на сторонний днс, а оттуда уже на нужный сайт? На офф-селлере NS запись, на стороннем - А?
Зачем нужна CNAME запись, если итак дохуя способов редиректа?
>>670964
59 Кб, 826x1300
#469 #670948
>>670855

>твою регулярку не разобрать


Не разобрать регулярку e-mail из RFC.
Есть волшебный модификатор /x, который позволит записать это весьма удобно и понятно.
Например, так:
http://ideone.com/7xEGiD

>str_replace я бы заменил на preg_match


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

>>670860

>Модификатор u надо ставить всегда


Григорий Остер, вам пора залогиниться.
Пикрелейтед, специально для вас.

Совет: если вы понимаете, что вы делаете (только если понимаете), - не используйте модификатор u. Грубо говоря, он нужен лишь тогда, когда:
- в символьном классе вы используете не-ASCII символы,
- когда вам важно заматчить именно символ, который выходит за рамки ASCII.
Проще говоря, в выражении типа #<title>(.+?)</title># модификатор u не нужен. Вам не важны символы внутри title, вам важен сам текст, набор байтов.
А вот в выражении #<title>[^>]+</title>#u модификатор нужен, так как [^>] может наткнуться на байт, который является частью другого символа, но сам по себе равен >.

Нововкатившийся, если тебе непонятно, что тут написано - забей. Это немного запутанная магия.
#470 #670963
Зачем было делать, чтоб надо было try\catch прописывать в PDO, почему исключения нельзя переделать по умолчанию чтоб включались? Намного красивей код стал бы, нет, хотим лепить эти {} } { { { }
>>670974
#471 #670964
>>670945

> домен куплен у оффициального селлера, перенаправлен на сторонний днс, а оттуда уже на нужный сайт? На офф-селлере NS запись, на стороннем - А?


Да. "Покупка домена" если я не путаю, значит что ты получаешь право указать NS для него. Покупка домена не подразумевает DNS-хостинг, хотя реселлеры могут предлагать такую услугу.

> Зачем нужна CNAME запись


Погугли:

> https://en.wikipedia.org/wiki/CNAME_record


> A Canonical Name record (abbreviated as CNAME record) is a type of resource record in the Domain Name System (DNS) used to specify that a domain name is an alias for another domain, the "canonical" domain. All information, including subdomains, IP addresses, etc., are defined by the canonical domain.



> This can prove convenient when running multiple services (like an FTP server and a webserver; each running on different ports) from a single IP address. One can, for example, point ftp.example.com and www.example.com to the DNS A record for example.com, which in turn points to the IP-address. Then, if the IP-address ever changes, one only has to record the change in one place within the network: in the DNS A record.



> CNAME records must always point to another domain name, never directly to an IP-address.



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

> если итак дохуя способов редиректа?


Интернет не ограничивается протоколом HTTP, а в других протоколах редиректов нет. Правда, можно прописать дляобоих доменов один и тот же IP.

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

Ну и такие вещи лучше проверять на практике. Бери линукс и утилиту dig (если нет то поищи онлайн утилиты), и делай например такой запрос:

....
продолжение поста: http://pastebin.ru/gLpkVrdP

И еще про точку в конце адреса. Она значит что имя домена окончательное. Без нее в случае неудачи клиент будет приписывать к нему "суффикс DNS" который задается в настройках сетевого интерфейса. То есть если в настройках прописан домен example.com и ты пытаешься разрешить имя server то сначала он будет искать домен server., а при неудаче - server.example.com.

Точка позволяет отключить этот механизм.
#471 #670964
>>670945

> домен куплен у оффициального селлера, перенаправлен на сторонний днс, а оттуда уже на нужный сайт? На офф-селлере NS запись, на стороннем - А?


Да. "Покупка домена" если я не путаю, значит что ты получаешь право указать NS для него. Покупка домена не подразумевает DNS-хостинг, хотя реселлеры могут предлагать такую услугу.

> Зачем нужна CNAME запись


Погугли:

> https://en.wikipedia.org/wiki/CNAME_record


> A Canonical Name record (abbreviated as CNAME record) is a type of resource record in the Domain Name System (DNS) used to specify that a domain name is an alias for another domain, the "canonical" domain. All information, including subdomains, IP addresses, etc., are defined by the canonical domain.



> This can prove convenient when running multiple services (like an FTP server and a webserver; each running on different ports) from a single IP address. One can, for example, point ftp.example.com and www.example.com to the DNS A record for example.com, which in turn points to the IP-address. Then, if the IP-address ever changes, one only has to record the change in one place within the network: in the DNS A record.



> CNAME records must always point to another domain name, never directly to an IP-address.



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

> если итак дохуя способов редиректа?


Интернет не ограничивается протоколом HTTP, а в других протоколах редиректов нет. Правда, можно прописать дляобоих доменов один и тот же IP.

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

Ну и такие вещи лучше проверять на практике. Бери линукс и утилиту dig (если нет то поищи онлайн утилиты), и делай например такой запрос:

....
продолжение поста: http://pastebin.ru/gLpkVrdP

И еще про точку в конце адреса. Она значит что имя домена окончательное. Без нее в случае неудачи клиент будет приписывать к нему "суффикс DNS" который задается в настройках сетевого интерфейса. То есть если в настройках прописан домен example.com и ты пытаешься разрешить имя server то сначала он будет искать домен server., а при неудаче - server.example.com.

Точка позволяет отключить этот механизм.
#472 #670972
где можно почитать про exception? У ОПа есть где-нибудь инфа про это?
>>670988
#473 #670974
>>670948

> PCRE всегда медленнее любой строковой функции.


как насчет пруфов? как работает pcre внутри?

> Пикрелейтед, специально для вас.


разница с/без u = 20 микросекунд против 14? То есть ради 6 микросекунд ты предлагаешь исплоьзовать не-юникодный режим в котором сам черт ногу сломит и с которым разработчик будет тратить часы на поиски ответа "почему регулярка странно работает"? А вредные советы даю я?

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

Что касается 206 микросекунд при добавлении флага i - я думаю, такую проблему надо решать оптимизацией этого случая в pcre. А не превращением кода в нечитаемое месиво из скобочек.

А как насчет такого выражения:

/кот+собака/

Оно сработает без модификатора u? А такое:

/кот\b/

А как насчет такого?

/кот/i

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

> Есть волшебный модификатор /x, который позволит записать это весьма удобно и понятно.


> Например, так:


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

> (?(1)


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

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

Ну и я регулярки и посложнее видел: https://habrahabr.ru/post/171667/

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

>>670963

Их и не надо писать. Их пишут только неграмотные авторы не понимающие как работают исключения. Исключения автоматически сами вылетают наверх. Они как раз и придуманы чтобы не надо было результат каждой функции проверять на ошибку.
#473 #670974
>>670948

> PCRE всегда медленнее любой строковой функции.


как насчет пруфов? как работает pcre внутри?

> Пикрелейтед, специально для вас.


разница с/без u = 20 микросекунд против 14? То есть ради 6 микросекунд ты предлагаешь исплоьзовать не-юникодный режим в котором сам черт ногу сломит и с которым разработчик будет тратить часы на поиски ответа "почему регулярка странно работает"? А вредные советы даю я?

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

Что касается 206 микросекунд при добавлении флага i - я думаю, такую проблему надо решать оптимизацией этого случая в pcre. А не превращением кода в нечитаемое месиво из скобочек.

А как насчет такого выражения:

/кот+собака/

Оно сработает без модификатора u? А такое:

/кот\b/

А как насчет такого?

/кот/i

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

> Есть волшебный модификатор /x, который позволит записать это весьма удобно и понятно.


> Например, так:


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

> (?(1)


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

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

Ну и я регулярки и посложнее видел: https://habrahabr.ru/post/171667/

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

>>670963

Их и не надо писать. Их пишут только неграмотные авторы не понимающие как работают исключения. Исключения автоматически сами вылетают наверх. Они как раз и придуманы чтобы не надо было результат каждой функции проверять на ошибку.
>>671000>>671177
#474 #670978
>>670948

Насчет замены str_replace на регулярку - я исходил из того что она будет компактнее и позволяет писать более сложное выражение. Разумеется, это не обязательно, и str_replace тут тоже годится. Насчет производительности - не уверен так как не помню как именно работает pcre, а лезть в документацию лень.
#476 #670995
>>670988
tusend tak
28 Кб, 529x807
#477 #671000
>>670974

>как насчет пруфов?


Пикрелейтед.
preg_replace в 5,5 раз медленнее str_replace.

>как работает pcre внутри?


Например, хотя бы парсит шаблон, чего не делает str_replace.

>разница с/без u = 20 микросекунд против 14? То есть ради 6 микросекунд


В программировании нет микросекунд, есть производительность, возрастающая или падающая в разы. Если производительность падает в 1,5 раза, это значит, тебе нужно 4 сервера, а не 3. На те же объемы работы.
Действительно, мне стоит почитать про экономику и менеджмент.

> /кот+собака/


> /кот\b/


> /кот/i


Не сработает ни одно.

>Твои советы это закладывание мин в код, ждущих новичка.


>новичка


>если вы понимаете, что вы делаете (только если понимаете), - не используйте модификатор u



Тем не менее, новичку это тоже полезно узнать. В школе никто не учит, что зыбиться и зиждиться - глаголы первого спряжения, однако, узнать об этом как минимум интересно, думаю, ты со мной согласишься.
Я не призываю ньюфага использовать столь хардкорные оптимизации. Просто неплохо бы знать - u может в разы замедлить регулярное выражение, что и есть ответ на твой вопрос, почему же php не ставит этот модификатор автоматически.
>>671029
#478 #671003
>>670853
http://ideone.com/iX1g2y сделал дерево с каталогом
>>671027
#479 #671010
>>670948

>А вот в выражении #<title>[^>]+</title>#u модификатор нужен, так как [^>] может наткнуться на байт, который является частью другого символа, но сам по себе равен >.



Кстати, я обосрался, в чем спешу признаться. utf-8 устроен так, что у любого байта не-ASCII символа старший бит - 1. У ASCII - 0.
Приведенная мной ситуация невозможна.
#480 #671027
>>671003

>public function getNextSibling(){


>$parent = $this->parentNode;


>$previous = NULL;


>foreach ($parent->getChildNodes() as $child) {



>getPreviousSibling



Что будет, если $this->parentNode = null?

> public function __construct($nodeName,$parent = NULL){


> $this->nodeName = $nodeName;


> $this->parentNode = $parent;


> }



> public function moveNode($parent){


> $this->parentNode->removeChild($this->nodeName);


> $this->parentNode = $parent;


> $this->parentNode->addChild($this);


> }



Не кажется ли тебе, что назнание родителя - неотъемлемое действие для метода addChild?
Не кажется ли тебе, что свойство parent в конструкторе - лишнее, а его должен задавать родитель в методе addChild?
>>671031
#481 #671029
>>671000

> Если производительность падает в 1,5 раза, это значит, тебе нужно 4 сервера, а не 3. На те же объемы работы.


Только если основная функция твоего приложения это обработка текста регуляркой.

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


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

Ну и если подумать, в большинстве случаев нам нужны не только ascii. Мы ведь не в США живем.
>>671037
#482 #671031
>>671027

У него parent сделан опциональным, его можно не указывать, но мне тоже больше нравится идея разделить создание узла и прикрепление его к родителю.
>>671038
#483 #671037
>>671029

>Потому что для человека строка это цепочка символов, а не байт


А для программиста это должны быть байты.

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


Это извечная борьба высокоуровневости с низкоуровневостью.
Хочешь меньше думать? Готовься выложить больше процессорного времени и памяти.

Я согласен с тем, что для такого простого языка, как PHP, мудрености с модификаторами - это лишнее. Но в то же время, не давай PHP спуститься на уровень ниже, это был бы громоздкий фреймворк для лоу-лоада (имплаинг, что php может в хайлоад).
>>676230
#484 #671038
>>671031
Так ведь когда мы создаем объект, он так и так не имеет родителя.
Корректно добавлять объекту родителя лишь через метод addChild родителя.
>>671042
#485 #671040
Алсо, меня смущает, что addChild происходит по объекту, а removeChild - по его имени. Все ООП по пизде.
>>671042
#486 #671042
>>671038
http://ideone.com/01vujw исправил
>>671040
Согласен, глупо получилось.
>>671059
#487 #671059
>>671042

А нужно ли имя? Если делать абстрактное дерево то оно должно быть просто абстрактным деревом, от которого наследуется уже например класс "дерево категорий"

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

> public function addChild(TreeElement $child){


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

> public function removeChild($node){


> if($child == $node){



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

> public function setChildNodes($newNodes){


Не выставляются корректные значения parent для старых и новых детей

> public function isDescendant($node){


> if($node->findDescendant($this->nodeName)){


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

> public function getNextSibling(){


> $parent = $this->parentNode;


А если там null?

> for($i = 0; $i<count($parent->getChildNodes()); $i++){


> if($n===$i){


> $newArray[] = $this;


Сложновато.А нельзя ли использовать array_splice? Аналогично, в удалении можно использовать array_search.

> public function moveNode($parent){


> $this->parentNode->removeChild($this->nodeName);


А если parentNode = NULL?

> public function displayAsCatalog(){


Это не должно быть в классе дерева. Дерево лишь хранит информацию, а не выводит.
#487 #671059
>>671042

А нужно ли имя? Если делать абстрактное дерево то оно должно быть просто абстрактным деревом, от которого наследуется уже например класс "дерево категорий"

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

> public function addChild(TreeElement $child){


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

> public function removeChild($node){


> if($child == $node){



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

> public function setChildNodes($newNodes){


Не выставляются корректные значения parent для старых и новых детей

> public function isDescendant($node){


> if($node->findDescendant($this->nodeName)){


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

> public function getNextSibling(){


> $parent = $this->parentNode;


А если там null?

> for($i = 0; $i<count($parent->getChildNodes()); $i++){


> if($n===$i){


> $newArray[] = $this;


Сложновато.А нельзя ли использовать array_splice? Аналогично, в удалении можно использовать array_search.

> public function moveNode($parent){


> $this->parentNode->removeChild($this->nodeName);


А если parentNode = NULL?

> public function displayAsCatalog(){


Это не должно быть в классе дерева. Дерево лишь хранит информацию, а не выводит.
>>671079
#488 #671079
>>671059

>Не выставляются корректные значения parent для старых и новых детей


Не понял. Свойства у детей не меняются, они только меняют свой порядок в массиве.

>Сложновато.А нельзя ли использовать array_splice?


Хотел сначала так сделать, но потом перестал понимать что вообще происходит и переписал без него. В пхп не хватает джаваскриптовского сплайса, чтобы просто засунуть нужный элемент в середину массива.
>>671096
#489 #671096
>>671079

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

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


Вообще-то есть. Надо разобраться в этой функции, почитай мануал.
>>671223
#490 #671100
какой же благородный дон станет писать на досуге на Scala или Clojure? Ведь всякие Scala, Clojure, F#, OCaml и прочие эрзацы нормальных языков програмирования нужны благородным донам только для того, чтобы использовать их работе, где им приходится считаться с мещанскими вкусами остальных работяг-програмистов. поэтому на досуге благородный дон будет пописывать на Хаскелле, Агде или Эпиграмме, и почитывать алгебраическую топологию или теорию категорий. А на Scala и Clojure на досуге пишут только некоторые представители люмпен-пролетариата, котрые подсмотрели это занятие за благородными донами на работе, и думают, что ритуальное копирование поведения благородного класса делает их самих благороднее.
#491 #671133
Решая задачки из ОП-поста, можно придти к мысли, что mysql с её слоупочными table locks и transactional safety и с её возможностью масштабирования только при помощи анальных расширителей не очень-то, собственно, и нужна в большинстве задач.
>>676230
#492 #671135
Когда делал задачку про генерируемый стишок, не смог придумать ничего, кроме как этого нагромождения лишнего кода. Но я чувствую, что тут можно проще и быстрее все сделать.
http://ideone.com/Nt2kce
#493 #671151
self this parent
Чем они отличаются и когда что применяется?
>>671173>>676230
#494 #671153
>>671135
Можно использовать одну переменную, а не 8.
>>671162
#495 #671162
>>671153
Ага, переменные можно вообще не инициализировать, а объявлять непосредственно по ходу кода, но за такую хуйню тебе твои коллеги голову оторвут.
#496 #671163
>>671135
Копипаста много.
И должно быть так:

> слово1 слово2 слово3


> слово1 слово2 слово3


> Я слово4 слово5


А не так, как у тебя - под каждое слово своя переменная..
Чтобы добиться верного решения, можно пропустить всё через цикл.
Первые два раза выводится строка "слово1 слово2 слово3", а во время третьего прохождения цикла выводится строка "Я слово4 слово5" и цикл обрывается.
Цикл с $i, делает три круга. В первом и втором круге изменяются randomText1, $randomText2, $randomText3 и выводится echo "$randomText1 $randomText2 $randomText3\n";. А в третьем круге выводится echo "Я $randomText4 $randomText5.\n"; (а изменяться они могли и раньше, допустим).
#497 #671173
>>671151
$this указывает на текущий объект, а self на текущий класс.
#498 #671177
>>670974

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


У ОПа приведены две ссылки на изучение PDO - официальный мануал и статья на хабре. В обоих сказано, что необходимо писать всегда трай-кеч.
>>676232
#499 #671204
Что-то вдруг стало жалко времени, потраченного на выполнение заданий на HTML и CSS.
Почти две недели постепенно делаю задачи ОПа, осталось две штуки, а ещё вот отсюда: https://dash.generalassemb.ly - сделал три больших урока (все эти шаблоны и робота на CSS+jQuery, который чому-то не заработал).
Так-то интересно, вникаю, но как-то жалко времени именно на это, чувствую, что не так это всё важно лично для меня.
Скорее бы уже к ООП перейти, шаловливые ручонки трясутся и так и чешутся.
>>676232
#500 #671223
>>671096
http://ideone.com/8lr92l теперь нормально?
>>676232
19 Кб, 529x249
#501 #671341
Посмотрите, вот я запилил задачку йода-спик.
https://ideone.com/qTl9u2
ОП хотел, чтобы я запилил функцию, которая будет висеть в коде отдельно. Я понимаю, что в каком-то более серьезном коде нужно будет такие часто используемые функции выводить в одну отдельную, но в такой чисто академической задачке не считается ли моветоном мой метод решения? Или все же нужно именно с пеленок себя приучать к такому стилю?
>>671344>>676235
#502 #671344
>>671341
Имею ввиду функцию, которая делает первую букву большой, заглавной.
#503 #671348
Я вот не пойму, в materialized path чтобы добавить запись в таблицу, мне придется делать еще один запрос просто для того, чтобы узнать номер пути последней записи? Я ведь не могу использовать авто инкремент для строки.
#504 #671351

>в этом задании нельзя использовать свойство overflow и position


Да едрить же твою мать...........
>>671354
#505 #671354
>>671351
display: inline-block - сразу нахожу ответ, стоит только гряяяязно выругаться.
>>676235
#506 #671356
>>671348

>materialized path


Сколько времени ты потратил, что перенести огромную смердящую кучу наваленных друг на друга небольших пакетиков с говном из mysql на mongodb?
21 Кб, 632x158
#507 #671364
Анон, я может что - то пропустил, но зачем эти скобки
>>671369>>671388
#508 #671369
>>671364
Ccылка на переменную (как и сама переменная) не читается в двойных кавычках. Чтобы ее прочитал эхо, переменную нужно взять в фигурные скобки.
>>671375
7 Кб, 303x90
3 Кб, 136x48
#509 #671375
>>671387
#510 #671387
>>671375
Ой, что-то я попутал. Естественно, в одинарных кавычках не читаются переменные. Просто некоторые люди любят писать в одинарных, и для этого придумали фигурные скобки в эхе.
>>671389>>671405
#511 #671388
>>671364
Здесь они не обязательны.
Вот здесь есть про разные варианты подстановки переменных в строки:
http://php.net/manual/ru/language.types.string.php#language.types.string.parsing
>>671389
#512 #671389
>>671387
>>671388
Понял, спасибо
#513 #671402
Аноны, серьезный вопрос. Как думаете, в пыху когда-нибудь завезут поддержку юникода? Так, примерно, можете почувствовать?
>>676235
#514 #671405
>>671387
Нет. В одинарных не происходит подстановки переменных (и escape-последовательности выводятся как есть)

php > $a = "test";
php > echo '$a';
$a
php > echo '{$a}';
{$a}
>>671414
#515 #671414
>>671405
Ну тогда я понятия не имею.
#516 #671431
Такой вопрос по Mysql (список студентов). У меня есть уникальное поле (unique) email. Когда студент редактирует свои существующие уже в базе данные(имя, фамилия, номер группы, баллы etc), я через оператор UPDATE пытаюсь их занести в базу данных вместо старой записи, но если он не редактирует свой емэйл, а только имя, фамилию, например - ничего не происходит, потому что данный емэйл существует, я так понял. Что делать?
#517 #671569
>>669753
Ребятки, бамп.
>>671573
#518 #671573
>>671569
Тебе вроде бы уже ответили, нет? Десктоп на пыхе писать - долбоебизм, имхо.
>>671579>>671685
#519 #671579
>>671573
Может он других не знает, а написать что-то очень хочется.
>>671587
#520 #671587
>>671579
Если тебе что-то очень хочется написать, то учи что-нибудь другое. У тебя времени нет что-то новое учить? Или ты просто неосилятор?
#521 #671685
>>671573

>Десктоп на пыхе писать - долбоебизм


А почему, знаешь?
>>671686
#522 #671686
>>671685
Потому что нет интерпретатора.
>>671707
#523 #671707
>>671686
Чому не запилят? Такой распространённый язык - и нет интерпретатора.
#524 #671736
>>671431
Тебе же сказали в прошлом треде - вбей несколько известных значений и интерполируй линией.
>>671881
#525 #671881
>>671736

Путаешь меня с другим аноном. Не я тут один решаю список студентов. Можешь подробней объяснить?
>>671883
#526 #671883
>>671881
Алсо я конечно могу покопаться в том треде, но боюсь заспойлерю себе многие моменты из правильного решения.
#527 #671886
>>671431

При проверке надо исключать редактируемого студента из числа записей по которым идет поиск.
#528 #671887
>>671431

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


У тебя не выводятся причины ошибок? Тогда тебе надо разобраться с этим.
#529 #672137
Анончик выручай, решил, что пришло время изучить YII2 (до этого вообще не имел дело с подобными фреймворками) Читаю книгу Разработка веб-приложений в Yii 2 Марка Сафронова. Не понимаю почему там предлагают вместо создания приложений первым делом идет тестирование. В общем нужен совет. С чего начать. Книгу-то добью, но вкрадывается сомнение что пойму не многое
>>672147
#530 #672143
Добрый день, может не совсем по теме треда но всё же, я знаю тут есть шарящие люди: есть 3 поля с автокомплитом, суть в том, что при автокомплите мне запрос возвращает помимо лейбла (текста который выводится в поле после выбора) ещё и уникальный код этого лейбла, который я использую в инпуте с автокомплитом который под ним. Так вот, насколько я понял отключить браузерный автокомплит уже нельзя, это делается только в настройках браузера и повлиять я на него не могу: поверх моего автокомплита вылезает автокомплит юзера с его вариантами, так вот соответственно если юзер не выбрал из моих вариантов, а выбрал свой - айдшишник лейбла соответственно не появился и в автокомплите снизу я уже его использовать не могу то же самое случается и когда юзвер вводит весь текст города руками и соответственно при поиске улицы я уже не могу использовать айдишник города, а только текст. Как выходить из такой ситуации и есть ли какой то алгоритм построений автокомплитов, или если кто-то делал решения такого - поделитесь опытом. Алсо, извините за неровный почек и скудный слог.
>>672180>>672183
#531 #672147
>>672137
https://www.youtube.com/watch?v=R-yQux1S63w
Вроде даже новичкам понятно.
Фоном послушай, специально не трать время.
Для начала должно быть нормально.
#532 #672180
>>672143

Отключить можно - гугли атрибут autocomplete. А что если юзер не будет ничего выбирать, а руками введет вариант? Ты бы мог просто использовать не кривую самоделку, а специально написанный виджет вроде chosen или select2. Если
#533 #672183
>>672143

Не дописал. То что тебе нужно - не инпут с автокомплитом (как у тебя), а селект с фильтром. Выкинь свою кривую поделку и прикрути нормальный виджет.
>>672314
#534 #672314
>>672183
Спасибо, я предложил заказчку перепилить всё в селекты с фильтрацией но сказали что и так норм и нет объективных причин якобы, хотя я вижу что селект бы решил объективно все частные моменты для которых я изобретал и ещё буду изобретать велосипеды.
>>672319>>672322
#535 #672319
>>672314

как костыль можно попробовать сделать дополнительные проверки вроде того, что если юзер ввел текст и покинул инпут не выбрав вариант то искать этот текст в имеющемся списке - но это может работать не очень надежно. Ну и тогда надо сделать индикацию, того что город успешно выбран или что такого города в базе нет.
>>672359
#536 #672322
>>672314

Главная проблема которая у тебя сейчас - как я понимаю, отствие обратной связи, то есть пользователь не видит скрытое поле с id, и не понимает реальное состояние программы - какой город там выбран. И то что написанный в инпуте текст может отличаться от выбранного города в скрытом поле.
>>672359
#537 #672359
>>672322
>>672319
Главная проблема в том, что события типа отображение двух других инпутов с автокомплитом которые скрыты по умолчанию, привязаны к автокомплиту: при селекте показывает следующее окно, записывает в сессию выбор и тл, просто тупой юзвер может ввести руками до конца и сидеть тупить, или ввести с ошибками - если не будет лень допишу потом валидацию поля при нажатии enter/tab и отображении следующего поля,
>>672360
#538 #672360
>>672359

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


значит это была не лучшая идея

> просто тупой юзвер может ввести руками до конца и сидеть тупить


Это не пользователь тупой, а программист тупой

> потом валидацию поля при нажатии enter/tab


Там есть событие потери фокуса. Лучше изучить теорию прежде чем браться за практику.
Алфавит по кругу #539 #672465
Прочел все подсказки ОПа, но я вместо уроков геометрии ходил с почонами в комплюхтерный клуб за углом. Подскажите где я обосралсяна лекции https://ideone.com/2vEntq .
>>676235
#540 #672467
>>671348
Бамп вопросу. Я вот-вот напишу самый уродливый велосипед в своей жизни, если не узнаю ответ.
>>672471
#541 #672471
>>671348
>>672467

Не можешь, да, придется делать. Хорошо бы еще и блокировки на нужные строки сделать чтобы невозможно было из 2 параллельных потоков создать запись с одним и тем же path
#542 #672519
Анончики привет. Вкатывается мамкин прохрамист из шаражки , второкурсник. В этом семестре первый раз буду писать курсач. Все выбрали преподов, у которых полегче. А я выбрал которые дает задание приближенные к реалиям. Так вот, он спросил чего я хочу. И сказал, что хочу веб-приложение (т.к. копал в эту сторону и написал, что-то вроде задачи про студентов с ОП-поста), он сказал, что принеси покажи, что у тебя есть. Я принес, показал. И он сказал, что бы я сделал такое же, только на джаве... А я просто не знаю в какую сторону копать. Помоги, анончик.
>>676235
#543 #672559
bump
>>672561
12 Кб, 151x200
#544 #672561
>>672559

>543


>bump

>>672567
76 Кб, 544x766
#545 #672564
ОП нас покинул и больше не проверяет задачки.
>>672566
#546 #672566
>>672564
У ОПа пинг иногда и 5 дней может быть.
#547 #672567
>>672561
пох, а друг тут бамплимит в косарь.
75 Кб, 618x545
#548 #672671
>>664784 (OP)
slack, jabber, skype конфа изучающих есть какая нибудь?

на канале пхп в 2chpr.slack.com тухло
>>672679
#549 #672679
>>672671
Нет, мы нормальные люди а не пидорасы какие-нибудь.
Ответы за 24 февраля #550 #672684
>>664858

В общем верно, но если ввести число больше чем число городов, вылетает с ошибкой Uncaught TypeError: Cannot read property 'country' of undefined

>>665327

> $answers["$random"]


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

>>665338

> почему random лишь один раз рандомит и остаётся таким навсегда,


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

> {$randomText1 = $word1[$randomWord1];


Скобка тут лишняя. Она ничего не делает, значит ее тут не должно быть.

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

1 => ...,
....,
....

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

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

>>665358

> ведь нельзя было делать такие штуки


> 1 => 'блабла',



Делать-то можно, но наверно проще не указывть индексы, а использовать автоматически проставленные с нуля.
Ответы за 24 февраля #550 #672684
>>664858

В общем верно, но если ввести число больше чем число городов, вылетает с ошибкой Uncaught TypeError: Cannot read property 'country' of undefined

>>665327

> $answers["$random"]


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

>>665338

> почему random лишь один раз рандомит и остаётся таким навсегда,


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

> {$randomText1 = $word1[$randomWord1];


Скобка тут лишняя. Она ничего не делает, значит ее тут не должно быть.

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

1 => ...,
....,
....

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

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

>>665358

> ведь нельзя было делать такие штуки


> 1 => 'блабла',



Делать-то можно, но наверно проще не указывть индексы, а использовать автоматически проставленные с нуля.
Ответы за 24-25 февраля #551 #672687
>>666028

> W1. https://ideone.com/r93YE8


Верно

> W2. https://ideone.com/8BIRn7


Верно

> W3. https://ideone.com/yqbFo1


правильно

> W4.1 https://ideone.com/Yikc7R


Не учтен случай когда число очков одинаковое, а числа на кубиках разные, должна быть ничья: https://ideone.com/N9JmkW

> W4.2 https://ideone.com/gipbSX


Тут все верно

> W5.1 https://ideone.com/MwfLmz


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

> W5.2 https://ideone.com/cVgjxu


Ответ вроде будет 49 лет, а не 50. Также, зачем там второй раз $y++? Также, зачем делать переменную $y если у нас уже есть счетчик в цикле $i?

> if ($sum > 1000000) {


А если ровно миллион?

> W5.3 https://ideone.com/iFv71d


Верно

> W5.4 https://ideone.com/jMJLFM


тут тоже верно

> W5.5 https://ideone.com/kVp3j3


Правильно

> W5.6 https://ideone.com/QcFU0m


> $random = mt_rand(1, count($letters));


> $randomText = $letters[$random];


Ошибка, в массиве индексы начинаются с нуля, а не единицы

> W5.7 https://ideone.com/Eh48abC


Ссылка не открывается

>>666128

> if ($creditSum < $payout) {


Это кстати можно заменить на min/max

А так, верно

>>666473

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

>>666479

Он прав, возьмешь кредит и не сможешь понять сколько ты переплатишь.
Ответы за 24-25 февраля #551 #672687
>>666028

> W1. https://ideone.com/r93YE8


Верно

> W2. https://ideone.com/8BIRn7


Верно

> W3. https://ideone.com/yqbFo1


правильно

> W4.1 https://ideone.com/Yikc7R


Не учтен случай когда число очков одинаковое, а числа на кубиках разные, должна быть ничья: https://ideone.com/N9JmkW

> W4.2 https://ideone.com/gipbSX


Тут все верно

> W5.1 https://ideone.com/MwfLmz


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

> W5.2 https://ideone.com/cVgjxu


Ответ вроде будет 49 лет, а не 50. Также, зачем там второй раз $y++? Также, зачем делать переменную $y если у нас уже есть счетчик в цикле $i?

> if ($sum > 1000000) {


А если ровно миллион?

> W5.3 https://ideone.com/iFv71d


Верно

> W5.4 https://ideone.com/jMJLFM


тут тоже верно

> W5.5 https://ideone.com/kVp3j3


Правильно

> W5.6 https://ideone.com/QcFU0m


> $random = mt_rand(1, count($letters));


> $randomText = $letters[$random];


Ошибка, в массиве индексы начинаются с нуля, а не единицы

> W5.7 https://ideone.com/Eh48abC


Ссылка не открывается

>>666128

> if ($creditSum < $payout) {


Это кстати можно заменить на min/max

А так, верно

>>666473

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

>>666479

Он прав, возьмешь кредит и не сможешь понять сколько ты переплатишь.
Ответы за 24-25 февраля #552 #672688
>>666562

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

> В sql не особо понимаю.


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

И еще. Это не имеет отношения к сути вопроса, но вот этот вот код - это ад, и от него надо избавляться. Почитай что ли про Query Builder, посмотри фреймворки Юи 2 и Симфони 2. Увы, в нашей сфере многие не хотят учиться, а хотят сразу бежать что-то делать при том, что у них нет достаточноых знаний. Алсо, набор условий для поиска надо делать не массивом, а объектом-моделью.

> Общий запрос:


> $args['meta_query'][] = array(


> 'relation' => 'OR',


> array(


> 'key' => 'building_area_min',



>>666576

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

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

Ну и паста:

----

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

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

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

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

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

----
Ответы за 24-25 февраля #552 #672688
>>666562

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

> В sql не особо понимаю.


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

И еще. Это не имеет отношения к сути вопроса, но вот этот вот код - это ад, и от него надо избавляться. Почитай что ли про Query Builder, посмотри фреймворки Юи 2 и Симфони 2. Увы, в нашей сфере многие не хотят учиться, а хотят сразу бежать что-то делать при том, что у них нет достаточноых знаний. Алсо, набор условий для поиска надо делать не массивом, а объектом-моделью.

> Общий запрос:


> $args['meta_query'][] = array(


> 'relation' => 'OR',


> array(


> 'key' => 'building_area_min',



>>666576

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

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

Ну и паста:

----

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

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

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

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

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

----
Ответы за 24-25 февраля #553 #672689
>>666584

У тебя в коде тоже есть ошибки, смотри:

> if (!$this->no_u_cant)


> return $age;


А если нельзя, то что вернется? В чем смысл функции которая иногда вернет правильный результат, а иногда неправильный? Это получился неудачный пример. Лучше было бы сделать пример, где у нас сначала было поле $age и метод getAge() { return $this->age; }, а после мы решили вместо хранения возраста сделать поле $birthday и вычислять возраст из текущей даты и дня рождения. Благодаря инкапсуляции нам было достаточно лишь один класс, не трогая весь остальной код. А что если бы инкапсуляции не было? То-то.

> public function set_age($age) {


> if ($age >= 18 && $age <= 99 && !$this->no_u_cant)


> $this->age = $age;


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

>>666619

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

>>666625

Вряд ли бы я стал так специально делать. Может опечатался.

>>666655

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

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

Я тут подумал и так и не смог вспомнить нормальные примеры с методами get/set. Может в каких-то очень абстрактных штуках, когда мы не знаем заранее какие поля у нас будут в объекте- ну например в базовом классе формы, от которого наследуются конкретные классы, мы можем сделать с помощью get доступными элементы формы:

$form = new LoginForm;
$form->login->setValue('Ivan');
....

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

То есть они нужны только для создания абстракций, когда мы заранее не знаем список полей. В обычном коде они почти никогда не нужны.
Ответы за 24-25 февраля #553 #672689
>>666584

У тебя в коде тоже есть ошибки, смотри:

> if (!$this->no_u_cant)


> return $age;


А если нельзя, то что вернется? В чем смысл функции которая иногда вернет правильный результат, а иногда неправильный? Это получился неудачный пример. Лучше было бы сделать пример, где у нас сначала было поле $age и метод getAge() { return $this->age; }, а после мы решили вместо хранения возраста сделать поле $birthday и вычислять возраст из текущей даты и дня рождения. Благодаря инкапсуляции нам было достаточно лишь один класс, не трогая весь остальной код. А что если бы инкапсуляции не было? То-то.

> public function set_age($age) {


> if ($age >= 18 && $age <= 99 && !$this->no_u_cant)


> $this->age = $age;


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

>>666619

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

>>666625

Вряд ли бы я стал так специально делать. Может опечатался.

>>666655

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

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

Я тут подумал и так и не смог вспомнить нормальные примеры с методами get/set. Может в каких-то очень абстрактных штуках, когда мы не знаем заранее какие поля у нас будут в объекте- ну например в базовом классе формы, от которого наследуются конкретные классы, мы можем сделать с помощью get доступными элементы формы:

$form = new LoginForm;
$form->login->setValue('Ivan');
....

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

То есть они нужны только для создания абстракций, когда мы заранее не знаем список полей. В обычном коде они почти никогда не нужны.
Ответы за 25 февраля #554 #672690
>>666733

Неправда.

>>666744

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

>>666755

> W5.1 https://ideone.com/94782z


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

> W5.2 https://ideone.com/MCoNPH


> if ($sum > 1000000) {


А если равно? Алсо можно перенести условие в шапку цикла.

> W5.6 https://ideone.com/qhdVJ8


> $random = mt_rand(1, $massiveCount);


Неверно, нумерация с нуля начинается а не с единицы

> W5.7 https://ideone.com/Eh48ab


Хорошо сделано

> W5.8 https://ideone.com/WNN6jp


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

> W5.9 https://ideone.com/QNB4l9


> $length--;


Название неудачное. Если это длина строки, почему она уменьшается? Ну попробуй сам это прости: "уменьшить длину на один". Можно вообще убрать переменную и выислять позицию из значения $i

> if ($palindrome = false) {


Ты перепутал = и ==. У тебя всегда будет срабатывать else.

>>666779

Вот видишь какая у нас хорошая в стране система образования!
Ответы за 25 февраля #554 #672690
>>666733

Неправда.

>>666744

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

>>666755

> W5.1 https://ideone.com/94782z


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

> W5.2 https://ideone.com/MCoNPH


> if ($sum > 1000000) {


А если равно? Алсо можно перенести условие в шапку цикла.

> W5.6 https://ideone.com/qhdVJ8


> $random = mt_rand(1, $massiveCount);


Неверно, нумерация с нуля начинается а не с единицы

> W5.7 https://ideone.com/Eh48ab


Хорошо сделано

> W5.8 https://ideone.com/WNN6jp


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

> W5.9 https://ideone.com/QNB4l9


> $length--;


Название неудачное. Если это длина строки, почему она уменьшается? Ну попробуй сам это прости: "уменьшить длину на один". Можно вообще убрать переменную и выислять позицию из значения $i

> if ($palindrome = false) {


Ты перепутал = и ==. У тебя всегда будет срабатывать else.

>>666779

Вот видишь какая у нас хорошая в стране система образования!
>>672697
Ответы за 25 февраля #555 #672691
>>666771

> function inclineWord($number) {


> function declensionMillion($millions) {


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

echo declense(4, '%d кот', '%d кота', 'аж %d котов', 'ни одного кота')

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

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

> if($number%100 <= 20){


Это условие проще переписать как "если число заканчивается на 11-19 то вернуть нужную форму слова"

> if(isset($spelling[$number])){


А стоит ли это выносить как особый случай?

> fmod(floor($number/1000), 1000);


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

> trim(preg_replace('/\s{2,}/u',


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

>>666855

Да, при условии что это utf-8 (то есть только с ней, а не с UTF-16 например).

>>666860

Ты никуда не сохранил результат функции trim. Она не меняет переданную ей переменную.
Ответы за 25 февраля #555 #672691
>>666771

> function inclineWord($number) {


> function declensionMillion($millions) {


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

echo declense(4, '%d кот', '%d кота', 'аж %d котов', 'ни одного кота')

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

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

> if($number%100 <= 20){


Это условие проще переписать как "если число заканчивается на 11-19 то вернуть нужную форму слова"

> if(isset($spelling[$number])){


А стоит ли это выносить как особый случай?

> fmod(floor($number/1000), 1000);


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

> trim(preg_replace('/\s{2,}/u',


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

>>666855

Да, при условии что это utf-8 (то есть только с ней, а не с UTF-16 например).

>>666860

Ты никуда не сохранил результат функции trim. Она не меняет переданную ей переменную.
>>677738
Ответы за 25 февраля #556 #672692
>>667001

> \b(.)


Короче будет написать \w

> \)?


А что за странное условие? Разве можно предложение с точкой на конце в скобки прятать?

> echo preg_replace_callback('#((?:^|[.?!])\)?)\s*\b(.)#su', function ($matches) {


Тут хватило бы preg_replace с $1 и $2

>>667066

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

>>667045

Гугли что нового - там много интересного.

>>667088

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


> но все так делают


А если все с крыши прыгать будут - ты тоже прыгнешь?

> И еще смеются над теми, у кого DOM-парсеры падают на невалидном html.


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

>>667088

> Модификатор u лишний. Здесь он не имеет значения.


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

> Алсо, есть более элегантное решение


> return in_array(pathinfo($file, PATHINFO_EXTENSION), array('jpg', 'png'));


Согласен, так наверно даже лучше, но ради этой функции надо было лезть в мануал, чтобы вспомнить название константы. Алсо строка длинная, я бы разбил на 2 действия.
Ответы за 25 февраля #556 #672692
>>667001

> \b(.)


Короче будет написать \w

> \)?


А что за странное условие? Разве можно предложение с точкой на конце в скобки прятать?

> echo preg_replace_callback('#((?:^|[.?!])\)?)\s*\b(.)#su', function ($matches) {


Тут хватило бы preg_replace с $1 и $2

>>667066

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

>>667045

Гугли что нового - там много интересного.

>>667088

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


> но все так делают


А если все с крыши прыгать будут - ты тоже прыгнешь?

> И еще смеются над теми, у кого DOM-парсеры падают на невалидном html.


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

>>667088

> Модификатор u лишний. Здесь он не имеет значения.


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

> Алсо, есть более элегантное решение


> return in_array(pathinfo($file, PATHINFO_EXTENSION), array('jpg', 'png'));


Согласен, так наверно даже лучше, но ради этой функции надо было лезть в мануал, чтобы вспомнить название константы. Алсо строка длинная, я бы разбил на 2 действия.
Ответы за 25 февраля + немного пропиарим Cloud IDE #557 #672693
>>667128

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

>>667188

Погугли "самодокументируемый код". Это код который понятен даже без комментариев: хорошие имена функций и переменных, аккуратное оформление, никаких подвохов и неожиданных вещей вроде пропущенного флага u у регулярки.

Cloud IDE

Пропиарю хороший проект еще раз: бесплатная IDE в браузере >>667010 - не требует установки, просто регистрируешься и получаешь уже настроенную систему с линуксом, PHP, Апачом, MySQL. Никаких SSH, все работает из коробки включая HTTPS. У меня вот тут есть ссылка - можете туда зайти, там уже настроен и развернут проект файлообменника >>667019

>>667247

Нет, ко мне никакого отношения, я просто зашел и удивлся до чего прогресс дошел.
#558 #672697
>>672690
Почему неправда? Ты же писал выше что без знания "теории" будут возникать проблемы, как у того анона с древовидными комментариями.
>>672701
#559 #672701
>>672697

Знание алгоритмов и структур данных, хотя бы минимальное - полезно. Вузовская "математика" (линейный анализ и прочая ерунда) мало где нужна, разве что немного геометрии в 3D графике. Ну и может еще нахождение минимумов/максимумов, но это уже в машинном обучении наверно нужно.
>>672705
#560 #672705
>>672701
Ну все равно я замечал что люди без знаний алгоритмов затрудняются решить задачи на собеседованиях, из-за этого им часто не перезванивают.
>>672712
#561 #672712
>>672705

Смотря какие задачи.
#562 #672854
Друзья, кто может пояснить за разделение php и html, если проект в силу того, что он совсем небольшой, не требует никаких шаблонизаторов. Я просто тот еще говнокодер и делаю так — есть один .php файл с классом, в котором описаны все методы, и в этих методах есть вывод по типу echo "код html", и есть index.php, где каркас html, всякие условия/проверки на php и вызов этих самых методов. Но мне стыдно за свой код, потому что кажется, что так он получается слишком грязным и непонятным. Как делать правильно и чистенько?
#563 #672865
>>672854
Делай по шаблону на каждую страницу. Потом в контроллере эти шаблоны подключай через include.

>index.php


$a = 1;
$b = 2;
include("index.html");

>index.html


a is: <?= $a ?><br> <!-- Выведет 1 -->
b is: <?= $b ?><br> <!-- Выведет 2 -->

Если не хочешь строить таких велосипедов в приложениях покрупнее, посмотри на шаблонизатор Twig, он небольшой, бесплатный и позволяет удобно создавать простые и не очень простые шаблоны.
>>672895
#565 #672876
>>672895
#566 #672895
>>672865
>>672873
>>672876
Спасибо, почитаю!
#567 #672943
>>672945>>673006
#568 #672945
>>672943
Неправильно считает, должно быть 61270 с копейками.
#569 #673006
>>672943
Конкретно в этом твоём варианте вот что неверно: когда $creditBalance у тебя становится меньше $monthlyPayment, то у тебя следует вот это выражение: $creditBalance = ( $creditBalance х $percent ) + $servicePayment - $monthlyPayment;. И в какой-то момент это уходит в минус, от чего дальше всё идёт неверно.
Подсказка: попробуй ввести отдельную переменную для подсчёта $creditBalance = ( $creditBalance х $percent ) + $servicePayment, ведь именно когда этот момент становится меньше $monthlyPayment, нам и надо просто его выплатить и приплюсовать к $paymentTotal.
>>674708
Стата вакансий и цен от ХХ #570 #673109
Собрал инфу с hh по кол-ву вакансий и указанных зп.
Почему в вакансиях PHP зп указана в 58%, а в других вакансиях строго < 50% ? Что бы это могло значить?
Может быть рынок перенасыщен спецами PHP? Или наоборот?

Алсо кресты sosnooley.

Ruby Найдено 190 вакансий

Указана 72
от 80 000 руб. 60
от 115 000 руб. 34
от 155 000 руб. 12
от 195 000 руб. 5
от 230 000 руб. 4

Php Найдено 1 314 вакансий

Указана 762
от 45 000 руб. 641
от 75 000 руб. 418
от 105 000 руб. 192
от 140 000 руб. 96
от 170 000 руб. 54

Java Найдено 1 393 вакансии

Указана 353
от 65 000 руб. 303
от 130 000 руб. 145
от 195 000 руб. 70
от 260 000 руб. 39
от 325 000 руб. 19

Javascript Найдено 497 вакансий

Указана 206
от 55 000 руб. 181
от 100 000 руб. 119
от 145 000 руб. 34
от 185 000 руб. 17
от 230 000 руб. 12

Python Найдено 362 вакансии

Указана 109
от 85 000 руб. 76
от 140 000 руб. 37
от 190 000 руб. 27
от 245 000 руб. 21
от 300 000 руб. 20

C# Найдено 684 вакансии

Указана 279
от 30 000 руб. 277
от 65 000 руб. 218
от 95 000 руб. 128
от 130 000 руб. 58
от 160 000 руб. 21

.net Найдена 1 021 вакансия

Указана 388
от 45 000 руб. 361
от 80 000 руб. 306
от 120 000 руб. 206
от 155 000 руб. 53
от 195 000 руб. 18

c++ Найдено 729 вакансий

Указана 331
от 70 000 руб. 269
от 140 000 руб. 151
от 205 000 руб. 113
от 270 000 руб. 27
от 340 000 руб. 25
Стата вакансий и цен от ХХ #570 #673109
Собрал инфу с hh по кол-ву вакансий и указанных зп.
Почему в вакансиях PHP зп указана в 58%, а в других вакансиях строго < 50% ? Что бы это могло значить?
Может быть рынок перенасыщен спецами PHP? Или наоборот?

Алсо кресты sosnooley.

Ruby Найдено 190 вакансий

Указана 72
от 80 000 руб. 60
от 115 000 руб. 34
от 155 000 руб. 12
от 195 000 руб. 5
от 230 000 руб. 4

Php Найдено 1 314 вакансий

Указана 762
от 45 000 руб. 641
от 75 000 руб. 418
от 105 000 руб. 192
от 140 000 руб. 96
от 170 000 руб. 54

Java Найдено 1 393 вакансии

Указана 353
от 65 000 руб. 303
от 130 000 руб. 145
от 195 000 руб. 70
от 260 000 руб. 39
от 325 000 руб. 19

Javascript Найдено 497 вакансий

Указана 206
от 55 000 руб. 181
от 100 000 руб. 119
от 145 000 руб. 34
от 185 000 руб. 17
от 230 000 руб. 12

Python Найдено 362 вакансии

Указана 109
от 85 000 руб. 76
от 140 000 руб. 37
от 190 000 руб. 27
от 245 000 руб. 21
от 300 000 руб. 20

C# Найдено 684 вакансии

Указана 279
от 30 000 руб. 277
от 65 000 руб. 218
от 95 000 руб. 128
от 130 000 руб. 58
от 160 000 руб. 21

.net Найдена 1 021 вакансия

Указана 388
от 45 000 руб. 361
от 80 000 руб. 306
от 120 000 руб. 206
от 155 000 руб. 53
от 195 000 руб. 18

c++ Найдено 729 вакансий

Указана 331
от 70 000 руб. 269
от 140 000 руб. 151
от 205 000 руб. 113
от 270 000 руб. 27
от 340 000 руб. 25
#571 #673113
>>673109

>Может быть рынок перенасыщен спецами PHP?


Спецов PHP как раз не хватает, как и в других областях. На PHP много джуниоров или просто девелоперов-макак, из-за того что пхп как продукт доступнее и порог вхождения в него ниже чем в джаву или кресты.
>>673123
#572 #673123
>>673113

Чем отличается "спец" от "макаки"? Есть ли жесткие критерии? А что если таких критериев просто не существует, как и прослойки спецов среди php-программистов, а работодатели сами не знают чего хотят?
>>673198
#573 #673190
>>673109
Чому Пистон столь ценен?
Он же вроде как проще РНР?
Обычно его советуют новичкам.
>>673198
#574 #673196
>>673109

А ты еще посмотри для интереса, что именно за вакансии на Питон (к примеру) с макс. з/п

http://hh.ru/search/vacancy?text=python&clusters=true&enable_snippets=true&salary=310000&only_with_salary=true&from=cluster_compensation

http://hh.ru/vacancy/16016299?query=python

> Big Data Engineer/ Python&Hadoop (Tokyo, Japan)


> Experience with at least three of the following technologies: Hadoop, Hive, Pig, Zookeeper, Cassandra, Spark, Kafka


> Good understanding of software and hardware performance as well as familiarity with the Linux kernel


> Java programming experience


Это не совсем Питон вакансия

http://hh.ru/vacancy/15969455?query=python

> от 1 500 до 5 000 USD


> In an interesting project (New application for an active lifestyle) required Engineering Manager.


> Ruby-on-rails is the most important skill,


> Exceptional coding skills in two or more general purpose programming languages including but not limited to: Java, C/C++, C#, Objective C, Python, JavaScript, .Net skills in Go, Swift - interest and ability to learn other coding languages as needed


Это не Питон вакансия. Причем диапазон з/п подозрительно широкий.

http://hh.ru/vacancy/16162999?query=python

> Java&Python Software Engineer


> Strong mathematical background;


> Expertise in Machine Learning;


> Advanced knowledge of Java.


Это не совсем ПИтон вакансия

Далее

> C++ & Scala Software Engineer (Apache Mesos project)


> от 250 000 руб.



> C/C++ developer


> 2 000-5 000 USD


(вакансия продублирована 14 раз)

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

> Алсо кресты sosnooley.


Только в списке высокооплачиваемых вакансий на Питоне 14 вакансий Си++ программиста.

И что с рынком случилось? До кризиса вроде з/п в 300к для программистов не было даже у аутсорсеров.
#574 #673196
>>673109

А ты еще посмотри для интереса, что именно за вакансии на Питон (к примеру) с макс. з/п

http://hh.ru/search/vacancy?text=python&clusters=true&enable_snippets=true&salary=310000&only_with_salary=true&from=cluster_compensation

http://hh.ru/vacancy/16016299?query=python

> Big Data Engineer/ Python&Hadoop (Tokyo, Japan)


> Experience with at least three of the following technologies: Hadoop, Hive, Pig, Zookeeper, Cassandra, Spark, Kafka


> Good understanding of software and hardware performance as well as familiarity with the Linux kernel


> Java programming experience


Это не совсем Питон вакансия

http://hh.ru/vacancy/15969455?query=python

> от 1 500 до 5 000 USD


> In an interesting project (New application for an active lifestyle) required Engineering Manager.


> Ruby-on-rails is the most important skill,


> Exceptional coding skills in two or more general purpose programming languages including but not limited to: Java, C/C++, C#, Objective C, Python, JavaScript, .Net skills in Go, Swift - interest and ability to learn other coding languages as needed


Это не Питон вакансия. Причем диапазон з/п подозрительно широкий.

http://hh.ru/vacancy/16162999?query=python

> Java&Python Software Engineer


> Strong mathematical background;


> Expertise in Machine Learning;


> Advanced knowledge of Java.


Это не совсем ПИтон вакансия

Далее

> C++ & Scala Software Engineer (Apache Mesos project)


> от 250 000 руб.



> C/C++ developer


> 2 000-5 000 USD


(вакансия продублирована 14 раз)

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

> Алсо кресты sosnooley.


Только в списке высокооплачиваемых вакансий на Питоне 14 вакансий Си++ программиста.

И что с рынком случилось? До кризиса вроде з/п в 300к для программистов не было даже у аутсорсеров.
>>673199
#575 #673198
>>673123

Ты описания вакансий не пробовал читать?

>>673190

Потому что данные собраны неправильно - высокооплачиваемые вакансии найднные по слову Питон - это не Питон разработчики. Он там как вспомогательный язык.
#576 #673199
>>673196

>Kafka


Хоть что-то знакомое.
#577 #673220
<script>if('673179' != '673179') {if($.cookie('makabadmin')) {$('a[name=673179]').html('673179')} }</script>
lol

Алсо, попалось интересное задание на апворке, не хотите совместно сделать? Короче делаются скриншоты с гугл мапс, а потом сортиурются по категориям.
>>673227
#578 #673227
>>673220

А что в нем интересного? Слили на апворк то с чем сами возиться не хотят.
Я снова выхожу на связь #579 #673237
Доделываю макет на HTML+CSS из задач ОПа.
Согласен с той заменой последовательности уроков, когда ОП вперёд пустил ООП, а HTML+CSS поместил после.
Потому что ужасно жалко потраченного на это всё времени, что ты будешь делать. Понимаю, что потом что-то в шаблонах править будет удобнее, потому что понимание многого пришло. При этом многое, чувствую, там не вполне верно решил.
Макет отличный, мне нравится, потом сам смогу сверстать подобную landing page для своего проекта, это неплохо.
Но сколь далече уже продвинулись те, кто не стал решать бонусные задачи, кто не стал решать вот эти задачи на HTML+CSS.
Жалко времени, душа требует ООП уже, БД и фреймворков.
Постараюсь держать вас в курсе.
>>678130
#580 #673263
аноны, дошел до сессий и кук, наткнулся на такое "javasсript:document.write(document.сооkiе);" что после ввода в адресную строку должно показать все куки с сайта. В силу своей рукожопости я несколько раз загуглил это ибо обработчик джаваскрипта не хотел подхватывать код после копипасты, потом я стер "javascript" перед "javasсript:document.write(document.сооkiе);" и написал обратно, тогда я увидел куки с вк, но они отличались от описания кук на самом сайте вк , но после проведения подобной процедуры на другой странице вк я получаю "undefined". Что произошло?
>>673286
#581 #673286
>>673263
зашел в консоль ctrl+shift+j, там выполнил код. Не понятно, почему в первый раз у меня из строки выполнилось, а потом перестало. Алсо, котаны, кто по специалисту учил джаваскрипт. Саму контору эту тут не очень любят, но мб кто-нибудь даст рецензию на их работу? Сам курс пхп у них просматриваю, ставя скорость видео х1,5, а то это же пиздец 4 часа аутировать и пытаться все запомнить
>>673296
#582 #673287
Робин Никсон - Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 3-е изд - 2015
Норм книга для новичка?
Хочу перейти к мускулю как-нибудь плавно.
>>673294>>678130
#583 #673294
>>673287
Не очень. Старьё.
>>673297
#584 #673296
>>673286
Какой смысл в таких курсах без обратной связи?
Сужу по учебнику ОПа и новичкам, который на 2-3 элементарной задаче начинают спотыкаться.
>>673301
#585 #673297
>>673294

>2015 год


>старьё


В плане подхода, методов и прочего?
#586 #673301
>>673296
Не знаю, как тебе, но там есть неплохие истории от самого автора. Вроде как первых байтов в кодировки УТФ-8, которые только в пхп не работаю и прочих историй. ты взлольнешь, но мне страшно вообще что-то писать, а простота и юмор автора расслабляют и страх уходит
>>673304>>678130
#587 #673304
>>673301

>мне страшно вообще что-то писать


Ты - это я.
Мне иногда не по себе от того, что я уже достаточно далеко продвинулся, а иногда смотрю на чужие решения предыдущих задач - и не могу ничего понять. Потом разбираюсь, конечно, когда всматриваюсь или изменяю код.
Надеюсь, с опытом пройдёт, когда багаж знаний пополнится. Как с задачами про Айфон, Айпад и многими другими: сначала рвал и метал, а сейчас не глядя могу записать решение.
>>673312
670184 причин бросить айти #588 #673310
Язык Вакансии РезюмеВак/Рез

Ruby 190 6638 2,86
Php 1314 1491820,88
Java 1393 756901,84
Javascript497 952350,52
Front-end1654 1230113,44
Python 362 24 0741,50 //анон сказал, что данные не корректы
C# 684 62 1471,10
.net 1 021 128 5020,79
c++ 729 124 259 0,58

678028 резюме - 7844 вакансий = 670184 причин бросить айти
#589 #673312
>>673304
Это патологическое неосиляторство, которое наблюдается у 95%двощеров в той или иной степени. В сфере погромистов есть отдельное название ХЕЛЛОУВОРЛДЩИКИ Вкатился в ваш ламповый чат под ником NEOSEELYATOR228 Странно, почему тут не неймфажат. Наверняка меня обоссут мамкины ононимы
24 Кб, 805x311
670184 причин бросить айти #590 #673314
>>673310
Пофиксил

678028 резюме - 7844 вакансий = 670184 причин бросить айти
#591 #673317
>>673314

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


>причины бросать айти

>>673398
#592 #673329
Пхпач-помогач. У меня в таблице хранятся значения, они могут быть с двойными и одинарными кавычками, при этом мне нужно сделать валидацию - идет запрос есть ли такая запись в базе: в тексте запроса у меня после real_escape_string - "почтомат "приватбанк" " и соответственно не находит, как можно решить проблему?
>>673337
#593 #673337
>>673329
вставляет вместо двойных кавычек &quot ;
>>673352>>678131
#594 #673352
>>673337
сделал htmlspecialchars_decode, результат есть, но я думаю это неправильно
>>678131
#595 #673355
Посоны, подскажите.
Почему не меняется переменная currentPosition?
Как её вывести из области видимости функции?
Перепробовал через return и так далее, но почему-то не прокатило.
Читал в учебнике, что должно работать так:
a = 1
function go() {
a = 6
}

go()
alert(a) // => 6

но бля, почему не работает?

http://ideone.com/6S1BI7
>>673401>>678131
15 Кб, 1371x130
33 Кб, 1349x256
9 Кб, 1351x122
16 Кб, 632x166
NEOSEELYATOR228 #596 #673379
Гайс, вк что-то поменял? Вот мои кукис, вот то(4-я пикча), что по мнению вк должно у меня быть. ЧЯДНТ?
>>678131
#598 #673398
>>673317
ты меня раскусил
#599 #673401
>>673355
Используй всё-таки возврат значения:

function getCurrentPosition() {
var currentPosition;
// тут твой код
return currentPosition;
}

var currentPosition = getCurrentPosition();
console.log(currentPosition);

Так не работает?
#600 #673402
>>673384
Всё отлично, но W5.1 решена неправильно:

>if ($creditBalance < 0)


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

>$creditBalance = 0;


А вот тут надо просто отнимать от $creditBalance оставшуюся выплату. Имей в виду, что $creditBalance к этому моменту уже должен быть помножен на процент и с прибавленной комиссией за кредит.
>>673407>>673906
#601 #673403
Пыханы, есть вопрос.
Сам буду студентом 4 курса, предлагает мне местная контора перекатиться в РНР, хотя я сам занимаюсь явой.
Стоит ли бежать учить этот ваш РНР, при условии что живу в мухосранске 100к, и при этом везде нужны пхпшники, а заводить трактор в ДС я поку не буду?
>>678132
214 Кб, 850x1212
#602 #673407
>>673402

>W5.1 решена неправильно


Готов с тобой поспорить.

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


Ты неправ. И смотри почему: школьник пришёл в последний месяц отдавать 5000р. Он их отдал банку. Банк смотрит на купюру и даёт школьнику сдачу.
>>673450>>678132
#603 #673450
>>673407
Это самая изощрённая отмазка, чтобы не переделывать задачу, из тех, что бывали! Браво!
>>673456
#604 #673456
>>673450
Зачем переделывать то, что и так правильно?
>>673458
#605 #673458
>>673456
То, что правильно переделывать не надо. У тебя неправильно.
>>673467
#606 #673467
>>673458
Предоставь пример, когда программа работает неправильно.
>>673488
#607 #673485
>>670333
Так ведь там есть условие, если оставшаяся сумма кредита следующего месяца меньше 5000. Прости, если я чего-то не понимаю и за задержку с ответом.
#608 #673488
>>673467
У тебя $creditBalance в последнем действии механически приводится к нулю, что тоже можно посчитать дурным тоном.
Вот ОП приедет, он тебе всё скажет. Хотя к этому времени ты уже уйдёшь дальше и не захочешь возвращаться к этой задаче.
Так или иначе, ты сейчас заложил мину в своё обучение программированию, которая однажды сработает.
>>673491
#609 #673491
>>673488
То есть предоставить контрпример ты не можешь.
>>673500
#610 #673500
>>673491
Что сделать, я недопонял?
Изменить твой код, чтобы выдало ошибку?
>>673520
#611 #673504
Ты с двумя людьми говоришь, кстати.
>>673506
#612 #673506
>>673504
С одним. Я по ошибке сказал, что в коде ошибка. На самом деле ничего такого я там не увидел. Я подумал там действительно в минус уходит долг и так и остаётся до следующего месяца: распространенная ошибка для этой задачи, но тут такого нет.
>>673600
#613 #673517
Посоны, нужен учебник по PHP. Чтоб с задачами блять в конце каждой главы например. Чтоб я не просто прочел, гы прикольно, а делал согласно навыкам, которые я получил в процессе чтения конкретной главы.
>>673519
#614 #673519
>>673526
#615 #673520
>>673500

>Что сделать, я недопонял?


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

Из постановки задачи есть ограничения на начальные условия:
$creditBalance > 0
$monthlyPayment > 0
$rate > 1
$servicePayment >= 0
$payed total = 0

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

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


Не понимаю, о какой мине идёт речь. Выражайся яснее, пожалуйста.
>>673532>>673600
#616 #673526
>>673519
дай бог здоровья
#617 #673532
>>673520

>$payed total


$payedTotal
селффикс
Виртуалхосты, хтассесы, хостсы, ксамп, вертриго...Я ЗАЕБАЛСЯ #618 #673542
Анон, я чего-то, кажется, напердолил, кажется, сильно. Создал три папки, в каждой сайт. В одной из папок вместе с сайтом лежит его .htaccess, который рулит всякой хуйней.
Для каждого сайта запись в hosts и виртуалхост в хттпд.конф.
Пытаюсь зайти на один сайт - заходит нормально (на него же заходит при попытке зайти просто на 127.0.0.1, а не по имени)
Пытаюсь зайти на другие - хтассес этого первого сайта перехватывает запросы и отправляет меня нахуй.
Удаляю этот файл хтассесс, пытаюсь зайти на эти вот другие сайты - нот фаунд (даже при попытке открыть конкретную html страницу, хотя она-то уж точно "фаунд"). Все это пытаюсь пердолить на сборочке вертриго сервер. До этого говно вертелось на ксампе, там не было никаких хтассесов и вирт хостов и все работало (например, 127.0.0.1/макаба - заходило на www/макаба/индекс.пхп). Что я сделал не так, где перепердолил, как исправить и можно ли, на будущее, как-то попроще? А то я уже заебался - удалять хтассесы при переходе с реального сервера на локалхост, иметь две разные версии хтассесов, записывать каждый новый проект в хостс и httpd.conf... Можно все это попроще как-то? Инбифо, написать скрипт Сорян за сумбурность, уже руки трясутся.
#619 #673558
>>673542
Ах да, при всем при этом, например, 127.0.0.1/phpmyadmin вполне себе работает, а вот сайты - нихуя. И раз уж я такой мудак, посоветуй, мб, годную книжку (рашн) по админству, ну, все эти хттпд.конфы, хтассесы, май.ини, настройки-настроечки...
>>675220>>678133
#620 #673600
>>673520
Судя по всему, ты что-то изучал и раньше.
Но если ты сейчас взялся за изучение РНР, то, скорее всего, прежде не всё у тебя было гладко в программировании. Либо в нём ты не продвинулся далеко, раз сейчас начал с лёгких задач из учебника ОПа.
Ничего личного, просто обозначаю своё вИдение ситуации.
Ты не задавался вопросом, почему именно всё не было гладко?

>Если на перечисленных выше начальных условиях программа выдаёт правильный ответ - она работает правильно.


Вот именно, что уверенность в этом закладывает мины в твоё обучение программированию. Представь, что реальная программа по расчёту кредита в реальном банке сделает допущение, что банк в какой-то момент оказывается должен что-то заёмщику, - думаешь, кто-то на такое согласится?
У нас есть чёткая формулировка задачи: прибавлять к сумме кредита процент и комиссию, отнимать месячную выплату и прибавлять результат к общим выплатам. Когда сумма кредита с прибавленными процентами и комиссией становится меньше месячной выплаты - выплачиваем её и заканчиваем цикл выплат.
Из недочётов в твоём решении:
1. $creditBalance в последнем условии механически приводится к нулю, желательно по-иному всё сделать. И без излишнего копирования.
2. Не выводится в конце "С меня хватит!". Таково было условие.
3. Нельзя будет в любой момент работы скрипта утверждать, что все переменные можно с одинаковым успехом вывести в echo. Например, попробуй сделать вывод реального $creditBalance до прибавления процентов и комиссии - не будет верного решения в этой ситуации, в какой-то момент будет отрицательное число в суме кредита, это нонсенс.
Можно жутким говнокодом решить эту задачу, с кучей копирования и прочим - и программа тоже работала бы правильно. Только не к такому надо стремиться.

>>673506
Ну ты и есть второй.
Долг уходит в минус, а потом отрицательное число умножается на положительное число, а к этому прибавляется ещё одно положительное число (умножается на 1.03 с прибавлением процентов к долгу и затем прибавляется 1000 комиссии). Это неправильный подход.
#620 #673600
>>673520
Судя по всему, ты что-то изучал и раньше.
Но если ты сейчас взялся за изучение РНР, то, скорее всего, прежде не всё у тебя было гладко в программировании. Либо в нём ты не продвинулся далеко, раз сейчас начал с лёгких задач из учебника ОПа.
Ничего личного, просто обозначаю своё вИдение ситуации.
Ты не задавался вопросом, почему именно всё не было гладко?

>Если на перечисленных выше начальных условиях программа выдаёт правильный ответ - она работает правильно.


Вот именно, что уверенность в этом закладывает мины в твоё обучение программированию. Представь, что реальная программа по расчёту кредита в реальном банке сделает допущение, что банк в какой-то момент оказывается должен что-то заёмщику, - думаешь, кто-то на такое согласится?
У нас есть чёткая формулировка задачи: прибавлять к сумме кредита процент и комиссию, отнимать месячную выплату и прибавлять результат к общим выплатам. Когда сумма кредита с прибавленными процентами и комиссией становится меньше месячной выплаты - выплачиваем её и заканчиваем цикл выплат.
Из недочётов в твоём решении:
1. $creditBalance в последнем условии механически приводится к нулю, желательно по-иному всё сделать. И без излишнего копирования.
2. Не выводится в конце "С меня хватит!". Таково было условие.
3. Нельзя будет в любой момент работы скрипта утверждать, что все переменные можно с одинаковым успехом вывести в echo. Например, попробуй сделать вывод реального $creditBalance до прибавления процентов и комиссии - не будет верного решения в этой ситуации, в какой-то момент будет отрицательное число в суме кредита, это нонсенс.
Можно жутким говнокодом решить эту задачу, с кучей копирования и прочим - и программа тоже работала бы правильно. Только не к такому надо стремиться.

>>673506
Ну ты и есть второй.
Долг уходит в минус, а потом отрицательное число умножается на положительное число, а к этому прибавляется ещё одно положительное число (умножается на 1.03 с прибавлением процентов к долгу и затем прибавляется 1000 комиссии). Это неправильный подход.
#621 #673606
>>673600
* в сумме кредита
#622 #673616
>>673600

>потом отрицательное число умножается на положительное число, а к этому прибавляется ещё одно положительное число (умножается на 1.03 с прибавлением процентов к долгу и затем прибавляется 1000 комиссии).


Нет, у тебя там другое.
У тебя в какой-то момент Анон платит больше, чем должен, банк становится должен Анону:
$payedTotal += $monthlyPayment; Если вывести в этом месте $payedTotal, то там будет тысяч 65.
А далее уже отрицательный $creditBalance отнимается от этих 65 заплаченных Аноном тысяч, получается верная цифра.
Вот это всё лишнее и вообще представляет собой нонсенс. Неверный подход.
>>673633
771 Кб, 800x1131
#623 #673633
Новая партия.
W5.3 - http://ideone.com/jWpMfH
W5.4 - https://ideone.com/hZNNWf
W5.5 - https://ideone.com/kwBJKl НИКОГДА

>>673600

>Судя по всему, ты что-то изучал и раньше.


Математику и физику изучал и продолжаю изучать. Захотелось научиться программировать в вебе. Всё-таки в России не самые лучшие времена, а в случае чего хочу, чтобы на хлеб с маслом хватало. Уезжать не хочу.

>в какой-то момент


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

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


Про black box ни разу не слышал?

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


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

>>673616

>Вот это всё лишнее и вообще представляет собой нонсенс. Неверный подход.


Ну охуеть теперь.
>>673644>>678133
#624 #673644
>>673633

>Отрицательный баланс там виртуальный и нужен для удобства расчёта и чтения кода.


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

>Про black box ни разу не слышал?


Слышал, конечно, сам практикую.
Но и довольно часто встречались фрилансеры с таким же, как у тебя, упорством в оправдании своего желания работать меньше, не переделывать детали в соответствии с элементарным ТЗ - и прочее. Всегда не особо приятные ощущения от такого.
>>673650
#625 #673650
>>673644

>в любой момент


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

>с элементарным ТЗ


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

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


Краткость - сестра таланта.
>>673663
#626 #673657
Хочу попрактиковаться в написании плагинов для вордпресс, пока только повторяю чужие плагины, слегка их изменяя, хочу написать полностью свой, но не могу придумать, что он должен делать. Может кто подскажет?
>>678133
#627 #673663
>>673650
Важно не только "что", но и "как".

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


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

>Краткость - сестра таланта.


Тот самый случай, когда с точки зрения грамматики или культуры речи всё абсолютно правильно. А впечатление производит не самое приятное, согласен. Вот так и в твоём варианте той задачи: за вроде бы правильным решением скрывается нечто такое, чего допускать ни в коем случае нельзя.
>>673665>>673666
#628 #673665
>>673663
Да там нет ничего неправильного, нету такой ситуации после которой функция вернет ложный результат.
>>673678
#629 #673666
>>673663

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


Что конкретно? Мне уже надоело это хождение вокруг и около.

>вроде бы правильным решением


Дай определение правильного решения. Мы с тобой говорим на разных языках, походу.
>>673678
#630 #673678
>>673665
>>673666
Так надо стремиться к универсальности. Чтобы не было таких отмазок и условий: когда месяц закрывается, то переменная правильная, а когда он ещё не закрылся, то она становится неправильной. Несмотря на то, что конкретно в этом решении этого и не произойдёт.
Стремиться-то надо к правильному пути, когда переменные в любой момент не противоречат логике и реальности.

>Что конкретно? Мне уже надоело это хождение вокруг и около.


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

>Дай определение правильного решения.


Ну вот, например:

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


Это самой прямой и логичный алгоритм решения задачи.
>>673681>>673685
#631 #673679
*самый прямой
#632 #673681
>>673678
По твоему определению получается, что все решения, которые отличаюстя от твоего - неверные. Извини, но тут уж ты неправ.
>>673697>>673906
#633 #673685
>>673678
Да ты поехавший какой-то. Вот тебе задача: написать функцию, которая переворачивает строку. Ты берешь аргумент-строку разбиваешь на массив символов, делаешь array_reverse и склеиваешь обратно в строку и возвращаешь. Задача решена. И тут я такой "НЕ УНИВИРСАЛЬНА, А ВОТ НА ЭТОЙ СТРОЧКЕ ПЕРЕМЕННАЯ СТАНОВИТСЯ МАССИВОМ А ДООЛЖНА БЫТЬ ВСЕГДА СТРОКОЙ ТУТ ОНА ПРАВИЛЬНАЯ А ЗДЕСЬ НИПРАВИЛЬНАЯ", хотя по факту нужно смотреть лишь результат функции, то, что она возвращает, а какие метаморфозы она претерпевает на пути к этому результату не так важно.
#634 #673687
>>673685
Вот этого двачую.
#635 #673697
>>673681
Чому? Все решения, в которых логика выплат сохраняется, - правильные. А когда в какой-то момент анон выплачивает банку ~65к, а потом банк ему возвращает около 4к, - не вполне правильные. Мне кажется это естественным.
>>673685

>Да ты поехавший какой-то.


Yep, и уже довольно давно.

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


Если логике не противоречит - всё нормально.
Есть обязательные шаги, а есть такие, которые неверны либо не обязательны.
Представь, что кассир или менеджер в банке ручками всё рассчитывает для Анона. Логика в этом случае обязательно будет нормальной, а не такой, при которой менеджер скажет или укажет что-то такое: "Вот тут проценты и коммиссия на каждый месяц и твои выплаты. А вот тут в последний месяц ты нам платишь свои прежние 5к рублей, банк становится должен тебе, а потом отдаёт тебе часть долга". Это-то и неверно.
Послушаем, что скажет ОП через пару дней.
>>673704>>673715
#636 #673704
>>673697

>Все решения, в которых логика выплат сохраняется


Смоделируй мне большие(миллиарды) частицы из первых принципов. Ой, а ты не можешь.
>>673711>>673722
#637 #673711
>>673704

>большие количества частиц


Фикс.
#638 #673715
>>673697
Да этот поехавший про сдачу не слышал.
>>673722>>673912
#639 #673722
>>673704
Хочу оставить свой отзыв о фрилансере под ником >>673704
>>673704 обещал сделать работу в срок и по ТЗ, сдал всё довольно быстро, но результат, мягко говоря, не соответствовал ожиданиям.
Что неприятно поразило: не хотел признавать свою неправоту, пытался оправдать свою работу, которая не выдерживает никакой критики.
Работали по Безопасной сделке, в итоге по решению арбитража мне вернули сумму полностью.
Но есть и положительные стороны у >>673704: берётся за работу с воодушевлением, делает всё достаточно быстро, код на выходе вполне аккуратный.
В общем, если вам нужны какие-то несложные вещи типа натягивания шаблона на вротперс или поправить вёрстку, то >>673704 вполне подойдёт. Только перед началом работы убедитесь, что он понял важные пункты из ТЗ.
Если же нужно чёткое следование логике и техническому заданию, то не советую вам связываться с ним. Потратите только зря деньги, нервы и силы, а в результате получите не то, на что рассчитывали.
Работайте с ним только по Безопасной сделке на коротких сроках, если не найдёте других вариантов.
Для себя я выводы сделал: работать с >>673704 больше не буду.
Почти копипаст с одной биржи фриланса

>>673715
Тогда там надо предусмотреть такие переменные, а пока там такого нет.
35 Кб, 199x200
#640 #673724
>>673729
#641 #673726
>>673722
Я не твой работник, поехавший.
>>673729
#642 #673728
>>673722
Мань, я не фрилансер, а ты не работодатель. Ты просто идёшь нахуй.
>>673729
#643 #673729
>>673724
"Почти" там только номер поста, поставленный на место ника.

>>673726
Как так? А кому я только что оставил отрицательный отзыв?
Ситуация узнаваемая, вполне.

>>673728
Бугурт приобретает отчётливые очертания.
>>673734
#644 #673734
>>673729

>Как так? А кому я только что оставил отрицательный отзыв?


Анониму, который учится программировать и не собирается делать вещи так, как хочешь ты, но так, как правильно. Не выдержав критики этого анонима, ты придумал какие-то отношения фрилансер-работодатель, коих между вами нет, для перехода в другую плоскость спора, где ты уже был прав.
Но он не фрилансер. А ты не работодатель.
>>673746
#645 #673746
>>673734
Да вы, батенька, ещё более поехавший, чем я, если всё это всерьёз.

>не собирается делать вещи так, как хочешь ты, но так, как правильно.


ОП рассудит, я гарантирую, подскажет, как правильнее.

>Но он не фрилансер. А ты не работодатель.


Просто знакомая ситуация, характерная для фриланса. Когда исполнитель находит кучу нелепых отмазок, чтобы просто от него отстали и приняли работу. Специально для подобных случаев есть БС и арбитраж.
>>673912
#646 #673765
>>669753
Ребятки, двойной(!) бамп.
#647 #673769
В моем городе ДС-2 главная плеяда программирования ИТМО устраивает различные курсы погроммистов, в которых изучают различные языки с упором на трудоустройство. Также есть курс html/css/js/php/sql в одном флаконе за три месяца или полгода по-моему, не помню. Хочу пойти после того, как решу задачки из ОП-поста, все правильно сделаю?
>>673785
1347 Кб, 866x2934
#648 #673785
>>673769
Для разнообразия можно.
#650 #673793
>>673791
Шикарное решение, респект.
>>673795
#651 #673795
>>673793
Это ещё не всё сделано, кстати.
#652 #673799
>>673791
Хорошая задумка с количеством слогов.
#653 #673827
Ананасы, дайте подсказку тупому анонимусу, что делать дальше.
Числа прописью:
https://ideone.com/UMDGcw
>>676330>>678133
116 Кб, 850x565
#654 #673843
>>673791
http://ideone.com/sR4Qhz
Немного допиленная версия.
Не впилил правило с маленькой っ, как-нибудь потом доделаю.
>>673942
#655 #673862
Можно как-то передавать между php файлами значения переменных по типу POST, не хуяря их в куках/сессии/адресной строке? Например, результат работы одного файла возвращается в другой.
>>673905>>678134
#656 #673873
Аночик выручай. Задали написать курсач. Веб приложение с использование МВС на джавке. Есть опыт такого рода только на пыхе. Я как понимаю надо копать в сторону сервелетов и jsp. Но инфы очень мало, посоветуйте литературу,пожалуйста.
>>678134
#657 #673879
>>673542
Да, вот еще что: скажем, на http://сайт заходит (это пака www/сайт), а вот на http://localhost/сайт - нет. Или так и должно быть?
>>675220
#658 #673905
>>673862
//main.php
$a = include('kek.php');
echo "Hello, {$a}!"; //output: Hello, Yoba!

//kek.php
/.../
return 'Yoba';
>>673941>>673946
#659 #673906
>>673384
>>673402

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

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

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

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

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

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

Кстати, если использовать min/max, то задача решается без использования if, решение получается простое и короткое.

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

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

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

>>673681

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

>>673685

> Ты берешь аргумент-строку разбиваешь на массив символов, делаешь array_reverse и склеиваешь обратно в строку и возвращаешь.


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

>>673722

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

Я в принципе настаивать на той или иной точке зрения не буду. Я привел свои аргументы по поводу решения, а возражать или нет, исправлять или нет, или это уже личное дело анона. Мы тут только даем советы, а воспользуются ими или нет, это уже не наше дело.
#659 #673906
>>673384
>>673402

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

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

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

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

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

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

Кстати, если использовать min/max, то задача решается без использования if, решение получается простое и короткое.

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

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

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

>>673681

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

>>673685

> Ты берешь аргумент-строку разбиваешь на массив символов, делаешь array_reverse и склеиваешь обратно в строку и возвращаешь.


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

>>673722

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

Я в принципе настаивать на той или иной точке зрения не буду. Я привел свои аргументы по поводу решения, а возражать или нет, исправлять или нет, или это уже личное дело анона. Мы тут только даем советы, а воспользуются ими или нет, это уже не наше дело.
>>673940
#660 #673912
>>673715

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

>>673746

Фриланс наверно не лучший ориентир. Там много профессионализма присутствует с обоих сторон. Не особо советую в этом участвовать.

>>669753

Это называется юнит-тесты. Почитай урок https://gist.github.com/codedokode/a455bde7d0748c0a351a

Преимущество юнит-тестов в том, что их можно использовать многократно. Вот сделал ты год назад какой-то класс, предоставляющий какието полезные методы, написал тесты для этих методов - и эти тесты защищают полезный функционал. Если ты при правке кода что-то сломаешь, тесты тебе скажут хотя может к тому времени ты уже сам забудешь что такой функионал был.
703 Кб, 600x800
#661 #673940
>>673906
Спасибо за пояснения.

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


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

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


А я не менял алгоритм. Немного подумал и написал то, что написал.

>если использовать min/max


Что-то типа такого? http://ideone.com/rfef0Q

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


Извиняюсь.
>>673944
#662 #673941
>>673905
А если массив хочу вернуть?
>>673943>>673946
#663 #673942
>>673791

> $letters = array(


>1=>'а',


>2=>'и',


>3=>'у',


Не стоит проставлять нумерацию вручную - неудобно будет править список (и неудобно проверять что у тебя все номера стоят правильно). Достаточно поставить только первый индекс

1 => '...',
'...',
'...'

А еще можно вообще не ставить индексы - PHP их сам расставит начиная с нуля.

>>673843

Тот же совет про индексы.

> правило с маленькой っ


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

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

И ゞ тоже не после каждого символа логично ставить.

Вот это вот не очень хорошая идея:

> ($random >= 46)&&($random <= 101))


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

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

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

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

// сокуон разрешен только если текущий символ начинется с согласной
$isSokuonAllowed = !in_array($character, $specialCharacters);
$isDuplicatorAllowed = ....;

Это облегчит написание условий:

if ($isSokuonAllowed && $random < $sokuonProbability) {
$text .= $sokuon;
}

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

В общем, давай, подумай сам, как сделать код более простым, чтобы правила было легко читать и легко менять.
#663 #673942
>>673791

> $letters = array(


>1=>'а',


>2=>'и',


>3=>'у',


Не стоит проставлять нумерацию вручную - неудобно будет править список (и неудобно проверять что у тебя все номера стоят правильно). Достаточно поставить только первый индекс

1 => '...',
'...',
'...'

А еще можно вообще не ставить индексы - PHP их сам расставит начиная с нуля.

>>673843

Тот же совет про индексы.

> правило с маленькой っ


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

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

И ゞ тоже не после каждого символа логично ставить.

Вот это вот не очень хорошая идея:

> ($random >= 46)&&($random <= 101))


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

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

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

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

// сокуон разрешен только если текущий символ начинется с согласной
$isSokuonAllowed = !in_array($character, $specialCharacters);
$isDuplicatorAllowed = ....;

Это облегчит написание условий:

if ($isSokuonAllowed && $random < $sokuonProbability) {
$text .= $sokuon;
}

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

В общем, давай, подумай сам, как сделать код более простым, чтобы правила было легко читать и легко менять.
>>673949>>673950
#664 #673943
>>673941
Не знаю как в PHP, но обычно возвращается указатель на первый элемент массива.
>>673946>>673947
#665 #673944
>>673940

> Что-то типа такого? http://ideone.com/rfef0Q


Да. Использование min тут имеет то преимущество что код чуть компактнее получается и мы обходимся без ветвлений.
#666 #673945
Как сделать, чтобы функция могла юзать переменные всякие там, массивы и прочее из другой функции (из мейна)? А то вот делаю войдовую функцию по рисовке тайлов из массива, хочу её отдельно вынести чтоб использовать когда хочу как собстна функцию, а там чтоб нарисовать что-то нужно делать команду окнонейм.draw(спрайт), которая работает только в мейне (потому что там определено окно, спрайт, вот это всё).
>>673992
#667 #673946
>>673943
>>673941
>>673905
Бля, не, нихуя не то. Наоборот, файл завершает работу и передает некоторую инфу в другой, вызывая его (или переадресуя), а не наоборот, тот первый подключает второй.
>>673948>>678134
#668 #673947
>>673943

В PHP переменные могут хранить массивы. Если ты хочешь намекнуть на Си то там такое решение - большая проблема, так как в 99% случаев нам нужен не указатель на массив в памяти, а еще и длина (чтобы избежать переполнения). Удивительно, что хотя проблема с переполнениями буфера известна уже 30 лет, программисты на Си все езе их допускают. Это происходит из-за нежелания борьбы с проблемой системно - например, используя определенные правила или абстракции.
#669 #673948
>>673946

Хватит изобретать велосипеды. Тебе нужны функции.
>>673965
#670 #673949
>>673942

>Тот же совет про индексы.


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

За советы по программе с хираганой - большое спасибо, допилю.
>>673952
#671 #673950
>>673942

> // сокуон разрешен только если текущий символ начинется с согласной


> $isSokuonAllowed = !in_array($character, $specialCharacters);


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

if ($random > 46)

читается хуже- надо лезть в список и пытаться понять что хотел сказать автор.
#672 #673952
>>673949

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

То есть простановку индексов все же лучше оставить компьютеру - у него это получается лучше.
>>673953
#673 #673953
>>673952
А вот что подскажи - как объединить несколько массивов в один?
>>673960>>673981
#674 #673960
>>673953
Создаешь текстовый файл и записываешь туда двумерный массив, тебе необходимо поменять минимальный и максимальный элемент в этом массиве В ФАЙЛЕ!
#675 #673965
>>673948
Нет же!
Файл, например, обрабатывает данные формы, после чего редиректит на главную админки с определенным месседжем и статусом.
#676 #673966
>>673965
Тащемта, месседж можно выполнить с помощью обычного аллерта.
>>673968>>678134
#677 #673968
>>673966
Опять же, если инициатор - главная - да. Смотри
Форма использует обработчик.пхп. По завершению своей работы обработчик.пхп должен редиректить на главная.пхп и передавать последней некоторые параметры.
#678 #673981
>>673953

array_merge - вроде же было в уроке про массивы? Если нет, информация есть в мануале.

>>673965

Почитай про MVC. Как сделать обработку формы - давно уже известно. Тебе надо не изобретать велосипеды, а изучить накопленный опыт.
>>673983
#679 #673983
>>673981

Хотя я подумал, если ты сейчас пойдешь гуглить про MVC, то наверняка найдешь не то или запутаешься. По хорошему тут надо изучить какой-нибудь фреймворк вроде Юи 2 или Симфони 2, или например решать нашу задачу про студентов, в общем быстро это не объяснить.
>>674268
#680 #673992
>>673945

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

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


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

> а там чтоб нарисовать что-то нужно делать команду окнонейм.draw(спрайт), которая работает только в мейне (потому что там определено окно, спрайт, вот это всё).


При чем тут "окно нейм"? Какой это язык? По моему твое окнонейм - это обычный объект, который можно передавать.
#681 #674002
Объясните где взять sphinx.api.php? Нагуглил только установку дополнения для PHP через PECL, но там нужно еще и оригинальный сфинкс с исходников собрать, а я этого не очень хочу.
>>674003>>678135
#682 #674003
>>674002
Извиняюсь, нашел папку api в бинарниках для win32. И почему нельзя было сделать ссылку на api отдельно для других ОС?
>>678135
Ответы 27 февраля #683 #674035
>>667269

> mb_strtoupper(mb_substr(trim($value),0,1)) . mb_substr(trim($value),1)


Вот эту сложную конструкцию стоит вынести в отдельную функцию.

> foreach($text as $key => $value){


value лучше переменовать в sentence, а text хранящий массив - в sentences

> \\s*?


Квантификаторы нельзя применят друг к другу напрямую. Квантификатор можно писать только после символа или круглых/квадратных скобок. Нельзя написать a+? - можно писать (a+)? но это довольно бессмысленно (какой смысл задавать число повторений дважды?) и проще заменить на звездочку. Знак вопроса после звездочки управляет жадностью звездочки (мануал http://php.net/manual/ru/regexp.reference.repetition.php ) и это вряд ли то, что ты имел в виду.

Вместо var_dump надо возвращаеть результат с помощью return и далее выводить его через echo.

>>667284

Если речь о Windows - в функции работы с файлами в нем надо передавать имена в win1251.

>>667361

Берем 1-й символ с начала и с конца и сравнвиаем. Не равны - не палиндром. Равны - продолжаем сравнение.
Берем 2-й символ с начала и с конца и сравниваем. Не равны - не палиндром. Равны - продолжаем сравнение.
....

В твоем коде ты всегда берешь только первый и последний символ. А номер символа дложен меняться на каждом шаге цикла.
Ответы 26-27 февраля #684 #674036
>>667362

> function inclineWord($key, $word) {


Неудачно спроектирована функция. Вот я допустим хочу ее использовать - что такое key? что такое word? Почему word хранит число, хотя переводится как "слово"? Ну и ты зачем-то заложил в нее список слов, лучше убрать его из функции и передавать формы слова снаружи. Эту функцию надо переписать целиком.

Вот пример хорошей функции:

echo declense(4, '%d кот', '%d кота', 'аж %d котов', 'ни одного кота');

> function parts($number) {


Имя функции должно начинаться с глагола, сделатьЧтоТо, напримр splitToParts

> $score = mb_strlen($number);


> $thousand = mb_substr($number, -6, 3);


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

> function smallNumberToText($number) {


> if ($number == 0) {


> echo "На вашем счету ноль рублей\n";


> exit;


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

> if (mb_strlen($discharge) == 3) {


Используй математические методы

В функции smallNumberToText слишком глубокая вложенность кода. Вот я вижу 5 уровней вложенности: foreach -> if ($discharge > 0) -> else -> for. Как минимум ту можно избавиться от одного уровня, переделав if ($discharge > 0). Когда у тебя весь код заключен в один if - это плохо и надо переворачивать такой иф.

> .$spelling[mb_substr($discharge, 0, 1) * 100];


слишком сложное выражение в скобках - выноси в переменную с понятным именем.

> $regexp = array('/один тысяча/', '/два тысячи/', '/ ноль/', '/^[ ]/');


> $replacements = array('одна тысяча', 'две тысячи', '', '');


Это костыли. Надо изначально выбирать правильную форму слова.

В общем, убирай все mb_strlen и mb_substr.

>if ($number % 1000 == 000) {
000 это то же самое что просто 0. Подумай в чем разница между 0, "0", 000, "000".
Ответы 26-27 февраля #684 #674036
>>667362

> function inclineWord($key, $word) {


Неудачно спроектирована функция. Вот я допустим хочу ее использовать - что такое key? что такое word? Почему word хранит число, хотя переводится как "слово"? Ну и ты зачем-то заложил в нее список слов, лучше убрать его из функции и передавать формы слова снаружи. Эту функцию надо переписать целиком.

Вот пример хорошей функции:

echo declense(4, '%d кот', '%d кота', 'аж %d котов', 'ни одного кота');

> function parts($number) {


Имя функции должно начинаться с глагола, сделатьЧтоТо, напримр splitToParts

> $score = mb_strlen($number);


> $thousand = mb_substr($number, -6, 3);


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

> function smallNumberToText($number) {


> if ($number == 0) {


> echo "На вашем счету ноль рублей\n";


> exit;


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

> if (mb_strlen($discharge) == 3) {


Используй математические методы

В функции smallNumberToText слишком глубокая вложенность кода. Вот я вижу 5 уровней вложенности: foreach -> if ($discharge > 0) -> else -> for. Как минимум ту можно избавиться от одного уровня, переделав if ($discharge > 0). Когда у тебя весь код заключен в один if - это плохо и надо переворачивать такой иф.

> .$spelling[mb_substr($discharge, 0, 1) * 100];


слишком сложное выражение в скобках - выноси в переменную с понятным именем.

> $regexp = array('/один тысяча/', '/два тысячи/', '/ ноль/', '/^[ ]/');


> $replacements = array('одна тысяча', 'две тысячи', '', '');


Это костыли. Надо изначально выбирать правильную форму слова.

В общем, убирай все mb_strlen и mb_substr.

>if ($number % 1000 == 000) {
000 это то же самое что просто 0. Подумай в чем разница между 0, "0", 000, "000".
Ответы 26-27 февраля #685 #674037
>>667369

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

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

> while($symbols > 0) {


> $reversed .= mb_substr($string, --$symbols, 1);


Это закамуфлированный цикл со счетчиком, то есть for. Почему ты пытаешься его замаскировать?

> $reversed .= mb_substr($string, --$symbols, 1);


Это 2 отдельных действия и должно писаться так:

$reversed .= mb_substr($string, $symbols, 1);
$symbols--;

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

Перевернуть строку проще, разбив ее на массив символов ($letters = preg_split("//u", $text, null, PREG_SPLIT_NO_EMPTY);)

> return mb_substr($text, 0, ceil($textLength / 2)) == reverseString(mb_substr($text, floor($textLength / 2)));


Не очень понятно зачем эти странные манипуляции с делением на 2? Что тебе мешает перевернуть строку целиком? И что еще хуже, почему там стоит ceil и float? Не лучше ли справа писать то же число что и слева, только со знаком минус?

>>667374

Он наверно еще функции не изучал.
Ответы 26-27 февраля #685 #674037
>>667369

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

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

> while($symbols > 0) {


> $reversed .= mb_substr($string, --$symbols, 1);


Это закамуфлированный цикл со счетчиком, то есть for. Почему ты пытаешься его замаскировать?

> $reversed .= mb_substr($string, --$symbols, 1);


Это 2 отдельных действия и должно писаться так:

$reversed .= mb_substr($string, $symbols, 1);
$symbols--;

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

Перевернуть строку проще, разбив ее на массив символов ($letters = preg_split("//u", $text, null, PREG_SPLIT_NO_EMPTY);)

> return mb_substr($text, 0, ceil($textLength / 2)) == reverseString(mb_substr($text, floor($textLength / 2)));


Не очень понятно зачем эти странные манипуляции с делением на 2? Что тебе мешает перевернуть строку целиком? И что еще хуже, почему там стоит ceil и float? Не лучше ли справа писать то же число что и слева, только со знаком минус?

>>667374

Он наверно еще функции не изучал.
Ответы 26-27 февраля #686 #674038
>>667552

В ОП посте есть ссылка на задачи по SQL и там же ссылка на туториал для начинающих.

Для отправки запросов к базе из PHP удобно использовать встроенное расширение PDO.

Чтобы писать сайты, мало знать PHP и SQL. Надо еще изучать HTML/CSS (в ОП посте есть задания), архитектуру веб-приложений, работу с формами, MVC (ее изучают например в задаче про студентов). Без этого ты можешь сделать сайт, но код скорее всего будет очень плохим и уродливым - так что для себя можно сделать, но на собеседовании показывать не стоит.

Алсо если тебе хочется побыстрее что-то написать на PHP и запустить в браузере, поставь Апач с PHP (инструкции в Оп посте) и следуй туториалу http://php.net/manual/ru/tutorial.php

Линукс не обязателен - можно запускать Апач и под виндой - но в перспективе линукс освоить все равно придется.

>>667666

Под линуксом динамические библиотеки имеют другое расширение

>>667871

> Копирую сюда весь css код


Зачем копировать? Там нужны только дополняющие правила для печати.

> При этом ничего не выравнивается по центру, когда выводишь документ на печать,


А почему оно должно?
Ответы 26-27 февраля #687 #674039
>>667912

Тогда тебе лучше называть переменные правильно, а не key и value.

>>668117

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

>>668273

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


Спорно. Если тебе не нужна консоль то Апач и PHP вполне нормально работают и тратят меньше ресурсов чем виртуалка + не надо пока разбираться в линуксе.

>>668312

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

Алгоритм должен быть примерно такой:

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

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

>>668375

Кыш
Ответы 26-27 февраля #687 #674039
>>667912

Тогда тебе лучше называть переменные правильно, а не key и value.

>>668117

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

>>668273

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


Спорно. Если тебе не нужна консоль то Апач и PHP вполне нормально работают и тратят меньше ресурсов чем виртуалка + не надо пока разбираться в линуксе.

>>668312

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

Алгоритм должен быть примерно такой:

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

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

>>668375

Кыш
Ответы 27 февраля #688 #674040
>>668498

Число 69 лучше сделать констаной с понятными именем.

>>668832

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

>>668844

ucfirst работает только с некоторыми символами вроде латиннциы. Не рекомендую ее использовать никогда. С utf-8 она несовместима и может ломать символы кириллицы. Советую почитать https://gist.github.com/codedokode/ff99e357e9860ea169b8

>>668884

Лучше использовать стандартные средства фреймворка - тогда например какие-то плагины для работы с заголовками смогут их видеть.
Ответ 27-28 февраля #689 #674041
>>669120
>>669950

> function inclineWord($number, $word1, $word2, $word5) {


> $test = $number%100;


Лучше называть вроде last2digits (2 последние цифры)

> $test = $test%10;


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

> if($test==0 && $number != 0){


Зачем второе условие ? Для нуля тоже используется форма word5

> if(isset($spelling[$number])){


Зачем это условие? Числа вроде 5 или 11 можно обрабатывать в общем порядке.

> if(isset($femaleSpelling[$tens]) && $isFemale == 1){


Чтобы не писать это несколбько раз, можно просто менять массив с написанием, если пол женский то заменять в нем элементы на элементы из femaleSpelling

> $numberStr = $numberStr." ".$femaleSpelling[$units];


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

> $saveNumber = 0;


> $saveNumber = $number;


Первая строка не имеет смысла

> $indexName = 0;


> $indexName = 0;


То же самое

> $word = inclineWord($numericDigit, $largeNumbersNames[$indexName][0], $largeNumbersNames[$indexName][1], $largeNumbersNames[$indexName][2]);


не надо копипастить $largeNumbersNames[$indexName], вынеси в переменную. Также, возможно аругменты стоит записать вертикально.

> if($indexName == 0){


> $word = "(".$saveNumber.") ".$word;


Это можно просто поставить после / перед циклом и иф будет не нужен

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

Коду надо улучшить читабельность - пока читать тяжеловато.
Ответ 27-28 февраля #689 #674041
>>669120
>>669950

> function inclineWord($number, $word1, $word2, $word5) {


> $test = $number%100;


Лучше называть вроде last2digits (2 последние цифры)

> $test = $test%10;


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

> if($test==0 && $number != 0){


Зачем второе условие ? Для нуля тоже используется форма word5

> if(isset($spelling[$number])){


Зачем это условие? Числа вроде 5 или 11 можно обрабатывать в общем порядке.

> if(isset($femaleSpelling[$tens]) && $isFemale == 1){


Чтобы не писать это несколбько раз, можно просто менять массив с написанием, если пол женский то заменять в нем элементы на элементы из femaleSpelling

> $numberStr = $numberStr." ".$femaleSpelling[$units];


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

> $saveNumber = 0;


> $saveNumber = $number;


Первая строка не имеет смысла

> $indexName = 0;


> $indexName = 0;


То же самое

> $word = inclineWord($numericDigit, $largeNumbersNames[$indexName][0], $largeNumbersNames[$indexName][1], $largeNumbersNames[$indexName][2]);


не надо копипастить $largeNumbersNames[$indexName], вынеси в переменную. Также, возможно аругменты стоит записать вертикально.

> if($indexName == 0){


> $word = "(".$saveNumber.") ".$word;


Это можно просто поставить после / перед циклом и иф будет не нужен

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

Коду надо улучшить читабельность - пока читать тяжеловато.
Ответ 27-28 февраля #690 #674042
>>669149

Не советуй вредное, нужны математические методы.

>>669219

> http://ideone.com/gvUha4 -5.3(оценки)


верно

> http://ideone.com/P526Ry -5.4(рост)


Верно

> http://ideone.com/6F7GME -5.5(ответ на вопрос)


Да, правильно.

> http://ideone.com/gU18qG -5.6(генератор имени)


все правильно

>>669382

Попробуй понять разницу:

echo $a+$b; - вычисляет выражение, получается число, оно выводится
echo $a . $b; - числа склеиваются как строки и выводятся
echo "$a+$b"; - в строку подставляются значения a и b но не складываются
echo '$a+$b'; - ничего не вычисляется, строка выводится как есть
Ответ 27-28 февраля #690 #674042
>>669149

Не советуй вредное, нужны математические методы.

>>669219

> http://ideone.com/gvUha4 -5.3(оценки)


верно

> http://ideone.com/P526Ry -5.4(рост)


Верно

> http://ideone.com/6F7GME -5.5(ответ на вопрос)


Да, правильно.

> http://ideone.com/gU18qG -5.6(генератор имени)


все правильно

>>669382

Попробуй понять разницу:

echo $a+$b; - вычисляет выражение, получается число, оно выводится
echo $a . $b; - числа склеиваются как строки и выводятся
echo "$a+$b"; - в строку подставляются значения a и b но не складываются
echo '$a+$b'; - ничего не вычисляется, строка выводится как есть
Ответы 28 февраля #691 #674043
>>669532

Скачивать 5 файлов, распаковывать, изучать код? Что-то лень. Можешь запостить ключевые места кода и выложить например на pastebin, может кто-то глянет, но обещать не могу.

> при попытки извлечь из БД что-то кроме поля username я получаю..нихуя. просто пустое поле


Ну вот и написал бы: как выглядит код отправки запроса, чему равны переменные до его выполнения и после (выведи их через var_dump)

>>669731

> Никак не пойму как писать грамотно тесты.


Читал мой урок? https://gist.github.com/codedokode/a455bde7d0748c0a351a

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


Нет. Ты не обязан тестировать все. В данном случае стоит тестировать юнит-тестами именно модель. Контроллер и вью (вместе с моделью) можно тестировать end-to-end (gui) тестами, то есть посылать HTTP запрос и смотреть ответ на него.

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

- что модель правильно складывает числа?
- что контроллер при получении запроса вызвает правильнй метод модели (довольно сомнительный тест)
- что вью правильно подставляет результат в HTML код (тоже сомнительный)

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

>>669735

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

Интеграционные и юнит-тесты нужны оба, почитай например https://habrahabr.ru/post/168451/ (я советую пролистать весь блог яндекса на хабре - там много интересного по тестированию)

>>669744

Не надо использовать хранимые процедуры. Они неудобны , надо их поддерживать, неудобно отладивать, логгировать и тд.

Ну и твой запрос можно сделать и с клиента, сделав 20 юнионов.
Ответы 28 февраля #691 #674043
>>669532

Скачивать 5 файлов, распаковывать, изучать код? Что-то лень. Можешь запостить ключевые места кода и выложить например на pastebin, может кто-то глянет, но обещать не могу.

> при попытки извлечь из БД что-то кроме поля username я получаю..нихуя. просто пустое поле


Ну вот и написал бы: как выглядит код отправки запроса, чему равны переменные до его выполнения и после (выведи их через var_dump)

>>669731

> Никак не пойму как писать грамотно тесты.


Читал мой урок? https://gist.github.com/codedokode/a455bde7d0748c0a351a

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


Нет. Ты не обязан тестировать все. В данном случае стоит тестировать юнит-тестами именно модель. Контроллер и вью (вместе с моделью) можно тестировать end-to-end (gui) тестами, то есть посылать HTTP запрос и смотреть ответ на него.

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

- что модель правильно складывает числа?
- что контроллер при получении запроса вызвает правильнй метод модели (довольно сомнительный тест)
- что вью правильно подставляет результат в HTML код (тоже сомнительный)

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

>>669735

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

Интеграционные и юнит-тесты нужны оба, почитай например https://habrahabr.ru/post/168451/ (я советую пролистать весь блог яндекса на хабре - там много интересного по тестированию)

>>669744

Не надо использовать хранимые процедуры. Они неудобны , надо их поддерживать, неудобно отладивать, логгировать и тд.

Ну и твой запрос можно сделать и с клиента, сделав 20 юнионов.
#692 #674055
ОП, а список студентов >>664787 посмотришь? Я уже давно все исправил.
>>674241>>676031
93 Кб, 1212x754
#693 #674056
Не могу запустить тесты в netbeans. Сейчас всё сделал как на этом видео https://www.youtube.com/watch?v=R0uh6fr8v-I.
Получаю такой ответ:
Возможно, произошла ошибка. Обратитесь к окну результатов.
В чем проблема?
#694 #674065
>>674056

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

Во-вторых, проверь настройки - указан ли путь к PHP правильно.

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

php c:/tmp/phpunit.phar run
>>674074
#695 #674067
>>674056

Алсо поле object надо переименовать в calculator.
>>674074
#696 #674069
>>674056

Также, у phpunit есть режим, кога он пишет подробно что именно делается. Там добавляется к команде опция вроде -v или --debug, не помню. Ты можешь ее использовать для того чтобы понять что не работает.
>>674074
#697 #674074
>>674065
>>674067
>>674069

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


Это хороший совет. Спасибо.

>Во-вторых, проверь настройки - указан ли путь к PHP правильно


А вот здесь крылась главная проблема.
В общем теперь всё работает за что большое тебе спасибо. Я уже дня два не мог разобраться в чём беда.
>>674085>>674088
#698 #674085
>>674074

Я еще добавлю, что если урок учит именно запускать тесты через IDE то это неправильно. phpunit это консольная программа, и соответственно он рассчитан в первую очередь на запуск в ней, а не в нетбинсе. Так что лучше начинать с ручного запуска тестов, научиться писать phpunit.xml, а когда освоишься, узнать какой кнопкой это делается в IDE.
#699 #674088
>>674074

Вот у меня в уроке про phpunit немного написао: https://gist.github.com/codedokode/a455bde7d0748c0a351a#phpunit

Надо все же знать сам инструмент, а не только кнопку для его запуска из иде.
halp halp #700 #674112
Есть CSV след. содержания:
[code]1;.1;.10;;;К;;;Шайба увеличенная 8 ГОСТ 6958-78
1;.1;.11;;;П;;;"Заклепка резьбовая М8 MFX 23-VG
?№23М08VG1"
1;.2;;;;СБ;;КИУТ1501.01.01.000-01;Стойка
1;.2;.2;.5;;М;;;"Труба 40х40х2 ГОСТ 8639-82
В 10 ГОСТ 13663-86 L=0770 мм"
1;.2;.4;;;К;;;Винт М6х16 ГОСТ 11738-84[/code]
Суть в чём. Когда есть перенос строки в экселе идёт добавление \n в описании как в строке 2(заклепка) и 5(труба). И когда считываю файл через fgetcsv он разбивает описание и переносит на отдельную строку. Обычно это закавычивается. Надо как-то по маске брать то что в кавычках с новой строки например перед /n" тут текст с переносом и кавычками "/n и убирать /n в описание, которое в кавычках. Как сделать? пытался через регулярку но там ругается на маску по каждому поводу.
>>674114>>678135
#701 #674114
>>674112
У меня кровь из глаз пошла от этого говна.
>>674116
#703 #674119
аноны, тут можете помочь с валидацией в yii на строне клиента?
я пытаюсь создать форму с помощью CActiveForm
http://pastebin.com/3TjqMetB
но при вводе в текстовые поля, не происходит никакой валидации. Только срабатывает AfterValidation при загрузке страницы. ЧЯДНТ?
>>678135
#704 #674156
Помогите разобраться, что делает следующий код:

class Template { //класс шаблонизатора
function __construct($file = null) { //функция конструктора
$this->file = $file; //переменная $file в новом классе = null
$this->vars['null'] = ''; //обнуление значения элемента null в массиве $file в новом классе ???
}
function set($name, $value) { //вызываем функцию с аргументами типа $tpl->set('items',$cats);
$this->vars[$name] = is_object($value) ? $value->fetch() : $value; //присваиваем значение $cats элементу items в массиве $vars
}
function fetch($file = null) { // в file передается файл /main.tpl, это html шаблон
if(!$file) $file = $this->file; //если $file false, то присваиваем $file значение $this->file, т.е. null

extract($this->vars); //вот тут, и далее, совершенно не понятно, что происходит
ob_start();
include($file);
$contents = ob_get_contents();
ob_end_clean();
return $contents; //возвращает что-то...
}
}
вызывается вот так $content = $tpl->fetch("./main.tpl");
>>674167
#705 #674167
>>674156

Мануал по extract и по буферизации читал?
#706 #674241
>>674055
Нахуя ты память в цикле выделяешь?
И вообще тут не тужен четырехмерный массив. У тебя что имя и фамилия в целых числах описывается?
Определяешь класс с соответствующими полями, затем суешь его в вектор.
>>674254
#707 #674254
>>674241

В вектор? И что значит память в цикле выделаешь? в PHP нет функций явного выделения памяти.
#708 #674268
>>673983
Да с формами я работать умею. Бля, это вообще не для какого-то годного кода. Мне вот просто нужно из одного php файла передать в другой (инициатором запуска этого второго является первый, он же передает) некоторые данные. Через глобалки, гет и куки/сессии делать не хочу, спрашиваю, можно ли еще как-то?
Наоборот, это для хуйни на сто строк, когда надо что-то затестить по-быстрому или набросать красивую лабу.
>>674299>>678135
#709 #674299
>>674268
$argv ?
Ты хочешь странного
>>674311>>678135
#710 #674301
Нужен скрипт перевода числового количества денег в прописной на яваскрипт. Все что нахожу, переводят только рубли в слова, но не переводят копейки. Например, при вводе значения 460.34 скрипт выводит - четыреста шестьдесят рублей 34 копейки, а мне нужно - четыреста шестьдесят рублей тридцать четыре копейки. Может кто-то видел где-нибудь такой скрипт?
#711 #674308
Объясните, пожалуйста, что такое Твиттер Бутстрап, которым предлагает пользоваться ОП для студентов. Это, как понимаю, просто набор шаблонов(файлов ХТМЛ) для более удобного создания собственного проекта? Т.е., чтобы упростить написание кода вручную, правильно?
#712 #674311
>>674299
Странного? Ну хз. Возможно. А как заюзать $argv? Я же перехожу от выполнения одного файла к выполнению другого (через header(location...)
>>674318
#713 #674312
>>674308

Набор готовых CSS правил + несколько простых JS плагинов (не нужны в задаче).
>>674369
#714 #674314
>>674308

> росто набор шаблонов(файлов ХТМЛ)


нет
#715 #674318
>>674311
Ну тогда только

> гет и куки/сессии


Озвучь, почему ты не хочешь/можешь их использовать?
>>674379
#716 #674358
Как вы боретесь с тем, что всё забывается? Сделал перерыв на неделю вынужденный, возвращаюсь к занятиям - забылсь даже совсем простые вещи
#717 #674369
>>674312
то, что нужно. терпеть не могу CSS и пердолиться с ним.
>>674399
#718 #674372
Возможно тупой вопрос, но будет ли выводить пыхокод прямо в браузер из openserver?
>>674376
#719 #674374
~<?php
require('sql_bd.php');
$query1=$mysqli->query("UPDATE testov SET n1 = REPLACE(n1, '.', '')");
function gogogo() {
$query=$mysqli->query("SELECT DISTINCT n2 FROM testov WHERE n2>0");
while ($row = $query->fetch_assoc()) {
echo $row[0];
}
return false;
}
gogogo();
?>~
Fatal error: Call to a member function query() on a non-object
почему так? если пихну файл с коннектом в функцию то всё заработает?
>>674663
#720 #674376
>>674358
Глаза уже болят? Или лень одолевает?
>>674372
Конечно.
>>674382>>674389
#721 #674379
>>674318

>Озвучь, почему ты не хочешь/можешь их использовать?


Потому что юзер может изменить гет/куки, если даже они зашифрованы, первый засерает адресную строку. А сессии, я так понимаю, создают дохуя лишнюю нагрузку на сервер, если клиентов много, выполнений скриптов много, в сессии хранится много данных...да и ее можно подменить.
>>674673
#722 #674382
>>674376
лень и работа
>>674383>>678137
#723 #674383
>>674382
работа, ессно, донная
#724 #674389
>>674358
Лютейше двачую этот вопрос.
>>674376
Дело не в лени. Сегодня ты пытаешься учить пых, завтра у тебя последний день перед контрольной в вузе, через неделю дедлайн по курсачу на тему лоу-левела, потом ты заебываешься с ява-лабами, а в свободное время балуешься фотошопом, английским и перками в вовке. Ну и бухать не забываешь. Через пару месяцев вернулся - и пиздец, не помнишь, как запрос к базе сформулировать, какие параметры за что отвечают в конфиге, не понимаешь, чего от тебя хочет иксдебаг, если ты честно перегрузил функцию и почему length($arr) выдает ошибку. Каждый раз заново все гуглить...а уж редкая хуета типа трейтов и необходимости заключать в хуевинки регексп, разница в наличии-отсутствии всяких прег-сплитов и прег-тестов... Ебааать
#725 #674390
>>674389
А еще нереально трудно помнить больше 1-2 языков, все в башке мешается, особенно фреймворки, библиотеки и та их часть, которая используется нечасто.
>>675736>>678137
#726 #674399
>>674369
Ещё вопрос по bootstrap имею. Смотрю туториалы на ютубе по нему: так там готовый КСС полностью прописанный, юзай не хочу, никакого пердолинга. Теперь вопрос: версталы опытные на работе только этим и пользуются? В таком случае для чего превозмогать ОП-овский урок по КСС, так, для общего развития?
#727 #674539
>>674358
Новичкам в треде помогаю решить то, что сам уже решил, смотрю на любой вариант решения, переделываю, чтобы заработало.
Думаю, что ОП и по этой причине тоже всем нам помогает, - лишний раз всё освежить в памяти.
#728 #674543
>>674399
Принципы понять.
Хотя сам жалею, что на две недели затормозил с этими задачами.
#729 #674546
>>674399
Ещё у ОПа там годный макет, который надо сверстать из PSD.
#730 #674579
Сижу за пекой 24/7. Всю жизнь сидел за ЭЛТ-монитором, но теперь моя няша сгорела, и пришлось пересесть за ЖК. Сижу уже полгода, начали лопаться сосуды и уставать глаза от этого. Что делать? Бывают ли хорошие ЖК-мониторы, от которых глаза не вытекают?
>>674701>>678138
#731 #674590
киньте пример страниц для задачи с студентами для верстки.
>>674604>>674796
#732 #674604
>>674590
Ну в смысле скрины для примера.
>>674796>>674928
#733 #674663
>>674374
Ты не можешь из функции получить доступ к внешней переменной. Да, должно заработать, но этой плохой путь (у тебя создаётся два соединения).
Пусть знающие аноны меня поправят, но в порядке возрастания кошерности, возможны следующие варианты:
1) глобальные переменные (всё ещё не очень)
2) передача $mysqli в функцию параметром
3) класс для работы с БД

Ну и более современным и универсальным будет использовать PDO.
#734 #674673
>>674379
У тебя то наколеночный код, то хайлоад. Опиши конкретнее свой юз-кейс.
>>674922
122 Кб, 652x588
#735 #674693
Как экспортировать базу? Прописываю команду пикрелейтед, получаю результат пикрелейтед, файла с базой не нахожу.
>>675398
#736 #674698
Подскажите годные скринкасты по верстке сайтов из макетов с нуля. Желательно с использованием sass и БЭМ. Можно на английском Вот вроде понятны все преимущества но когда сам пытаюсь получается тот же самый css и длинные классы вместо каскадности.
>>678138
#737 #674701
>>674579
Ты разделом не ошибся?

У меня глаза текли от нище-ТН и плохого освещения. Переехал на IPS и включил мягкий свет за монитором все прошло.
#738 #674708
>>673006
>>673006
http://ideone.com/Wc7MdY
спасибо, разобрался
>>674806>>678138
31 Кб, 1903x949
#739 #674796
>>674590
>>674604
У ОПа же в условии задачи примерно описано как это должно выглядеть. Вот мое.
>>674937
#740 #674805
>>674308

>elseif ($creditBalance < 0)


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

>echo "{$month} месяц спустя: долг = {$creditBalance} руб, выплачено всего {$paymentTotal} руб. \n";


Это повторяется в двух основных условиях, поэтому может быть вынесено в основной цикл.
>>674806>>674858
#741 #674806
#742 #674852
Привет!
Пытаюсь запилить дефолтненькое добавление в друзья , друзей то отображает если я их вношу в БД , а вот заявки в друзья , или кому я отправил заявку , нет. В чем проблема гайз?
http://ideone.com/aQOxyd
>>674855>>678138
#743 #674855
>>674852
Точнее , даже если я в БД вношу данные о отправке заявки - мне все равно предлагается "отправить" ее. То есть , он просто пропускает это , и это.

echo 'Add or No';
echi 'Otmena zayavki';
#744 #674858
>>674805
Если я выношу его в основной цикл, то у меня после последней оплаты заканчивается цикл и оно не пишет о оплате в 13 месяце. Вынести break чет не получается
>>674879>>678140
#745 #674865
>>678140
#746 #674879
>>674858
Попробуй другое условие поставить в цикл.
Подсказка: обрати внимание на $creditBalance в этой ситуации, ведь цикл должен работать, пока $creditBalance не потратился до конца.
25 Кб, 604x340
#747 #674880
Я недавно задавал похожий вопрос про гит. Теперь про композер и нпм. Допустим я создал папку с проектом и дичайше там устанавливал все подряд пакеты. Пушил на гитхаб, потом под другим логином пулил в другую папку и разворачивал из зависимостей. Ну для теста, понять как это все работает. Достаточно ли просто удолить папки с проектами руками чтобы нигде никакого мусора не осталось? Или лучше через npm uninstall?
Я говорю про локальные пакеты, с глобальными все ясно.
>>675452>>675483
#748 #674922
>>674673
Ну, хз. В админ.пхп есть форма удаления поста с форума, там его номер, причина удаления, возможность забанить автора, этц. Адмит вводит данные, нажимает сабмит. Форму обрабатывает delete.php, который в результате своей работы рапортует об успешном или неуспешном выполнении операции и редиректит обратно на админ.пхп
#749 #674928
>>674604
Что делает добавить и заполнитель ?
#750 #674937
>>674796
Спасибо, а что делает "добавить" и "заполнитель" ?
>>674967
22 Кб, 1903x722
#751 #674967
>>674937
Добавить - добавление \ редактирование информации о себе.
Заполнитель - отключаемая вещь которая заполняет базу данных рандомными данными. Сделал для тестирования, потом решил оставить.
#752 #674972
>>674967
Ага, а если пользователь авторизирован, то поля уже заполнены или все поновой ?
>>674981
#753 #674974
>>674967
И выход это завершение сессии ?
>>674981>>678140
#754 #674981
>>674972
Заполнены, все соответствует условию.
>>674974
Там не сессии а куки. Исходники можешь тут посмотреть https://github.com/foobar1643/student-list
#755 #675014
>>674981
Не хочется готовое решение смотреть. Надо самому все. Можно лишь советы просить.
#756 #675021
>>678140
30 Кб, 1358x652
#757 #675030
>>674981
Сойдет ?
#758 #675034
>>674981
Бугурт у меня. Понятия ведь я не имею как эту ебанину посмотреть.
>>675037
#759 #675037
>>675034
Чет не понял.
>>675081
#760 #675049
>>674967
А как с работой. Пробовал уже на собеседование пойти ?
>>675058
#761 #675058
>>675049
Нет, не пробовал. Я считаю что мне не хватает опыта и знаний, еще мой код плохой и я очень часто делаю глупые архитектурные ошибки. Стараюсь работать над этим, параллельно изучая фреймворки и делая файлообменник.
>>675061
#762 #675061
>>675058
Образование математическое и сколько уже вкатываешься в веб ?
>>675071
#763 #675071
>>675061
Образование у меня 11 классов школы, учусь в ВУЗе на специальности Программное обеспечение систем. Начал заниматься всем этим еще в 15 - 16 лет, тогда я понятия не имел что такое эти ООП и паттерны, просто пробовал писать говнокод по разным туториалам в интернете, параллельно с этим изучая администрирование серверов. В том возрасте это было обычным увлечением, я часто забрасывал на пару месяцев, потом возвращался. Примерно год назад решил стать мамкиным вкатывальщиком в веб и заняться этим серьезно, и вот теперь я здесь.
>>675077
#764 #675077
>>675071
Я тоже на Программной инженерии учусь. Какой курс ? Я думаю, тебе все же стоит попробовать сходить на собеседования. Хуже точно не будет. Окажут - получишь опыт. А возьмут - так оно и к лучшему.
>>675089
#765 #675081
>>675037
Без обид, что назвал ебаниной работу, эт у меня бугурт на то, какой я тупой и ничего не пойму, как там что посмотреть. а посмотреть сука хочется
#766 #675089
>>675077
Второй курс.

>Хуже точно не будет


Я читал истории в соседнем треде про черные списки в некоторых конторах. Это когда тебя один раз не взяли из-за нехватки знаний и после этого добавляют в черный список. Потом все последующие походы к ним на собеседования заканчиваются отказом уже на стадии отправки резюме. Да и с одним маленьким проектом сделанным за три дня как-то неудобно идти будет.
#767 #675093
>>675089
Какой фреймворк пытаешься осилить ?
>>675098
#768 #675097
>>675089
Не удержался и посмотрел.
$student->gender = Student::GENDER_MALE; // Sexism?
Проиграл с этого.
#769 #675098
>>675093
Yii2, так же почти доделал файлообменник на слиме.
#770 #675149
>>675089
Расскажи подробнее о ходе интенсивного обучения за год.
#771 #675175
Аноны-похаперы, хочу задать вам вопрос, ответ на который я обязан знать.
Поможет ли хеллоувордлщику этот http://itcenter.ifmo.ru/razrabotka_web_-_saytov_3 курс? Или 60к на ветер, потому что не буду успевать? Курс 3 месяца длится.
>>675786
#772 #675220
>>673542
>>673558
>>673879
ОП, поясни всю эту хуйню плес.
>>678133>>678142
#773 #675248
Подскажите плес почему так работает http://ideone.com/kvTwv6 ,а так не работает
http://ideone.com/VQjYYn ???
>>675255
#774 #675255
>>675248

>$i >= 2


Условие для работы цикла неверное.
>>675276
#775 #675276
>>675255
Спасибо, теперь все работает
http://ideone.com/VQjYYn
>>678142
#776 #675327
>>675030
Я конечно не дизайнер, но думаю лучше будет хотя бы пол сделать списком с выбором (select).
>>675339>>675399
#777 #675339
>>675327
И хорошо что ты не дизайнер, никогда им не становись пожалуйста.
>>675399
#778 #675398
>>674693

Чтобы сдампить базу надо использовать mysqldump а не mysql

mysqldump -uxxx -pxxx database > file.sql

Если в PATH нет этой команды, то придется написать полный путь перед mysqldump (если ты читал мой урок по командной строке то уже это знаешь).

Дамп это текстовый файл с SQL командами. Загружается дамп с помощью mysql:

mysql -uxxx -pxxx database < file.sql
>>675615
#779 #675399
>>675327

Со списком такая история. Список позволяет экономить место на экране, однако имеет недостатки:

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

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

>>675339

К чему писать такие посты?

>>675030

Форма поиска кривая, высота кнопки и поля ввода не совпадают

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

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

Кнопка "очистить форму" не нужна, мне кажется, не могу представить ситуацию где она полезна. Можно заменить ее ссылкой "вернуться на главную".
#779 #675399
>>675327

Со списком такая история. Список позволяет экономить место на экране, однако имеет недостатки:

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

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

>>675339

К чему писать такие посты?

>>675030

Форма поиска кривая, высота кнопки и поля ввода не совпадают

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

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

Кнопка "очистить форму" не нужна, мне кажется, не могу представить ситуацию где она полезна. Можно заменить ее ссылкой "вернуться на главную".
>>675402>>675430
#780 #675402
>>675399

>К чему писать такие посты?


Для человека не очевидно что 1 раз тыкнуть мышкой проще, чем кликнуть, прочитать список, кликнуть, скролить дальше, но при этом он пытается навязать свою точку зрения другим. Да, уменя бомбит от того, что каждый день мне приходится работать с такими интерфейсами. Выпадающими списками на 1 пункт, галочками на 30 пунктов.
#781 #675403
>>675402

Он ничего не навязывал. Незачем переходить на личности. Ты бы мог дать ссылку на статью по теме или что-то такое.
>>675409
#782 #675409
>>675403
Ты прав, наверное я слишком токсичен.
Ссылку не дам, но гугл в помощь.
Дизайн Для Реального Мира
#783 #675430
>>675399
Спасибо, буду править
#784 #675452
Гайс, вопрос актуален >>674880
>>675483
#785 #675483
>>674880
>>675452

Композер создет файл composer.lock, и ставит пакеты в vendor. Также он устраивает кеш где-то в твоем профиле в ОС, но это мешать не должно.

npm аналогично ставит все в node_modules
>>675519
#786 #675497
>>674922
Простых способов нет.
Если нужна авторизация, то для наколеночных поделок можешь посмотреть в сторону basic/digest аутентификации.
Но вообще от кук/сессий ты никуда не денешься, т.к. в вебе это по сути единственный способ сохранять состояние между запросами.

Поправьте, если я ошибаюсь.
>>678142
#787 #675519
>>675483
Ну то есть можно просто удалить корневую папку FacebookKiller в которой лежат все эти node_modules, package.json, composer.lock, bowerrc, bower.json, .gitignore, .git? И не получить проблем в будущем, если например я заново создам папку с таким же именем.
>>675561
#788 #675561
>>675519

Да. Более того, в случае с композером ты можешь например убрать зависимости из composer.json и сделать команду которая удалит более не нужные зависимсти (наверно, я не проверял).
#789 #675563
>>675402

>Для человека не очевидно что 1 раз тыкнуть мышкой проще, чем кликнуть, прочитать список, кликнуть, скролить дальше


>выбор пола


Oh you!..
#790 #675586
>>673319 (OP)
Господа, что за хрень?
Устанавливал опенкарт на винде, все норм работало, на линуксе 404 ошибку выдает (пхп ламп апаче все есть и работате). Надо какие-то депенденсис в апаче писать?
>>678142
#791 #675605
>>666755
5.9 неправильно же, проверяет только 1ю букву, для примера вставил в твой код набор буков с одинаковыми в начале и конце http://ideone.com/n9xgYF, в результате говорит что полиндром, хотя таким не является
>>675608
#792 #675608
>>678142
203 Кб, 1149x660
#793 #675615
>>675398
Я наверное глупый вопрос задам, но это делается не через MySQL 5.7 Command Line Client, а через mysqldump.exe? У меня проблема с экзешками из папки из пикрелейтед - они все сразу вылетают, вот успел заскринить окно только. Поэтому работал со студентами через комманд клиент только.
>>675618
#794 #675618
>>675615

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

Надо запускать из командной строки.

> это делается не через MySQL 5.7 Command Line Client


Нет, он только для выполнения запросов к базе.
>>675633
#795 #675631
Прислали в кач-ве тествого им на сайт функционал добавить, какой-то кусок цмс который не открывается. ппц, как будто чел просто хочет, чтобы я работу за него сделал.
>>675643
521 Кб, 1788x2268
#796 #675633
>>675618
Спасибо за быстрый ответ, Оп. Раз ты здесь еще хотел спросить. Второй день не могу найти баг. Появляется когда настраиваешь количество записей на странице. Когда их меньше 20 - все ок. Когда 20 - ошибка 500. Когда их больше - не хватает некоторых кусков html или вообще всего, когда их примерно 30 - львиная часть записей отсутствует. С чем это может быть связано? Или ты без полного кода какие-то предположения сделать не сможешь.
>>675652>>675654
#797 #675643
>>675631
Такое бывает, кстати.
Потому что соискателей много, а делать работу надо. Сделаешь хорошо - могут взять. Сделаешь не очень - откажут, поправят код, работа сделана.
Такое делают с SEO-специалистами постоянно. Требуют полный аудит сайта компании или нескольких сайтов, а потом отказывают. А аудиты корректируют и отправляют владельцам сайтов.
>>675655>>675686
#798 #675652
>>675633

Ошибка 500 это обычно ошибка веб-сервера Апача (а не PHP кода). Причины в таких случаях записаны в логе веб-сервер - найди и прочитай.

Обычно у Апача это из-за проблем в URL страницы и в htaccess.

Правда у тебя почему-то эта страница подписана phpstorm. Раз ты используешь не стандартный Апач, а что-то что идет в комплекте с phpstorm то я в нем не разбираюсь и тебе надо читать их документацию - в каикх случахя он выдает ошибки, где логи, что у них за веб-сервер и тд.
#799 #675654
>>675633

Алсо почему ты настраиваешь число записей на странице тут, а не там где задается $recordsPerPage?
Ну и вообще, покажи потом код, там наверно будет много чего можно исправить.
>>675656
#800 #675655
>>675643

Ну у соискателя всегда есть право отказаться делать задание. Да и сомнительный подход - я бы побоялся то что кандидаты присылают, на реальный сайт ставить. Замучаешься потом баги исправлять.
#801 #675656
>>675654
Ну так я для примера чтобы не скринить еще тот кусок где функция вызывается. Так то у меня все как на самой верхней пикче. Покажу, конечно, сейчас доделывать css буду и комментарии писать.
#802 #675658
Объясните мне внятно про сетки. Курсю хтмлакадеми на пару с кодакадеми и на сетках какой-то ступор.
То делай псевдоэлементы с распорками, то просто задавай блокам размеры и маргины, то дисплей: тейбл.
Почему не остановиться на одном способе построения? Я запутался в этой херне, короче.

Или где внятно можно почитать.
>>675728
#803 #675686
>>675643
Так эти куски я опять даже на локалке развернуть не могу, админки нет, структура папок не та, что в опенкарте, не говоря о содержимом, там еще и куски ноды есть, пиздец, я только осваивать эту новую чудную самописную легаси цмс буду месяц.
>>675731>>675732
#804 #675728
>>675658

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

В CSS есть такие способы позиционирования:

- блоки (которые идут вертикально)
- инлайн-блоки
- флоаты
- относ., абсол. и фикс. позиционирование
- display: table для случаев когда надо заставить блоки вести себя как ячейки и строки таблицы

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

> То делай псевдоэлементы с распорками,


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

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


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

Не знаю, что еще можно посоветовать почитать, посмотрри задания на cSS в ОП посте, там есть например ссылка на учебник на сайте softwaremaniacs

И конечно тебе надо больше внимания уделить изучению CSS. Описанные выше способы позиционирования надо знать наизусть, также знать все их особенности.
#805 #675731
>>675686

> я только осваивать эту новую чудную самописную легаси цмс буду месяц.


Может это значит что ты не подходишь на эту вакансию? Если ты развернуть проект не можешь, как ты будешь его поддерживать и правки вносить?
>>675846
#806 #675732
>>675686

Ну и вообще, ты бы мог спросить инструкции по установке.
#807 #675733
Я, кстати, давно уже проходил курс верстки от ОПа, сейчас уже подзабыл и когда верстаю что-нибудь, постоянно использую везде абсолютное позиционирование и мне стыдно.
>>675777
#808 #675736
>>674358
>>674389
>>674390
Вот, люто бампую за себя и братишку, ОП, советуй!
>>675777
#809 #675777
>>675733

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

>>675736

Ежедневная практика.
#810 #675786
>>675175

Поможет, покупай.
#811 #675801
class PostForm {
public login;
public password;

public function __construct($post) {
$this->setLogin(isset($post['login']) ? $post['login'] : '');
$this->setPassword(isset($post['password']) ? $post['password'] : '');
}

...
}

$form = new PostForm($_POST);

С этим всё хорошо?
>>676693>>678143
#812 #675846
>>675731
зачем присылать проект, который невозможно равзернуть? почему сразу на хостинге админку не дать тогда уж?
>>675851
#813 #675851
>>675846

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

>>675870>>675871
#814 #675870
>>675851
+--classes - здесь у меня классы
|
+--functions - здесь скрипты обработчиков для форм
|
+index.php - здесь у меня autoload
Я хочу в скриптах обработчиков в functions использовать классы из classes для которых autoload в index.php. Как мне сделать, чтобы классы были видны во всех папках проекта? Просто если у меня будет много обработчиков, то будет проблематично каждому подключать классы индивидуально.
>>675871>>676028
#815 #675871
>>675870
Это не сюда >>675851
Это просто вопрос.
>>675906
#816 #675906
>>675871
Вынеси автолоад в отдельный файл (bootstrap.php например).
Подключай это файл в начале обработчика.
>>678197
#817 #675921
Короче мне элементы ангуляр кода как в пхп выполнить? это обычная иде, там нет ангуляра, только пхп. убунта, вот устанавливаю ангуляр, а как проверить, что он работает? там запрос должен на сервер роутер идти.
>>676028
#818 #675923
почему умение разворачивать легаси код на локалке не прописывается в условиях и не считается отдельным, заслуживающим уважения скилом?
>>676028
#819 #675940
Не могу найти ошибку, вроде все проверил, но все равно не то заранее спасибо. http://ideone.com/vkznhK ссылка на код
>>675951>>675953
#820 #675951
>>675940
Сначала расскажи, как ты ее искал.

Просто там большими буквами на чистом английском языке написано, в чем причина и даже на какой строке ошибка, не понимаю, как это можно не увидеть.
#822 #675958
>>675953
Спасибо. Прочитав раза три понял в чем ошибка.
#823 #675965
https://ideone.com/cyeyJt

>stdout


>1



Что значит 1? Должен быть null!
>>675985>>676028
34 Кб, 892x626
#825 #675986
Что нужно сделать в пикрилейтед задаче? Допилить шифровочные символы для всех букв алфавита?
#826 #675997
>>675986
Цель этой задачи - закрепить твои знания. Серьёзность подхода к её решению - твой личный выбор.
>>675998
#827 #675998
>>675997
Я уточнил задачу. Она состоит в том, чтобы допилить шифровку всего алфавита?
>>676002
#828 #676002
>>675998
Нет, она состоит в том, чтобы ты немного поработал с массивом.
>>676004
#829 #676004
>>676002

>немного поработал с массивом.


Имеется в виду забить в массив остальной алфавит и его шифр или что?
>>676010
57 Кб, 1074x613
#830 #676006
>>676008
#831 #676008
>>676006
Что такое "нормальный уровень"?
Ссылку на определение этого термина в студию.
#832 #676010
>>676004
Ты меня тралиш?
Задание ты выполнил (если тебя интересует решение), но у тебя возникла мысль доработать свой код. И это хорошо, поэтому если у тебя есть желание, ты можешь пушить этот массив хоть спецсимволами. Цель этой задачи, как и всех остальных, закрепить твои знания.
>>676030
#833 #676012
>>676008
Два чаю. Вот это и создало затруднение, как читал условие.
>>676026>>676030
#834 #676026
>>676008
>>676012
уровень /б
>>676030
#835 #676028
>>675870

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

>>675921

Ангулар это JS фреймворк вообще-то. Ты не можешь выполнить яваскрипт код в PHP (с оговорками).

>>675923

Потому что оно входит в "умение читать и понимать чужой код" и "умение настроить рабочее окружение"

>>675965
Скобки надо ставить

>>675986

Да и расшифровку

>>676008

Подумаем потом над формулировкой. Имеется в виду то, что шифруются не все буквы и часть текста видна.
>>676052
#836 #676030
>>676012
В этой задаче конечно очевидно, что ты догадался правильно. Но при реальной работе с заказчиками обязательно нужно упрямо переспрашивать, что они имели ввиду, потому что на кону деньги и репутация. Чтобы потом не оказалось, что он "не то имел ввиду".

>>676010

>Задание ты выполнил (если тебя интересует решение)


Сам понял что сказал?

>>676026
Нет, ты.
>>676037>>676038
https://github.com/foobar1643/student-list #837 #676031
>>665607
>>674055

> Установите необходимые зависимости используя composer (composer install).


> Сгенерируйте файлы автозагрузки используя composer (composer dump-autoload).


install генерирует файл автозагрузки

> Загрузите файлы приложения в корневой каталог вашего веб-сервера.


Наоборот, надо настроить чтобы корень сервера был в public

Фраза "введите часть имени, фамилии..." не помещается в поле поиска. Плохо что поле поиска исчезает при поиске - нельзя подправить содержимое.

Поиск регистрозависимый - "ива" не находит имя "Иван"

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

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

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

"Форма успешно заполнена" - странный текст, лучше "Вы успешно зарегистрированы"/"Информация обновлена".

Алсо, что за выбор между приезжим и иногородним? Это не одно и то же?

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

> type = pgsql


А твой проект поддерживает другие базы данных? Если нет то этот параметр конфига лишний.

> enableFiller = false


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

мануал в помощь http://php.net/manual/ru/features.commandline.php

https://github.com/foobar1643/student-list/blob/master/public/logout.php
Для логаута должен быть метод где-то в менеджере авторизации. И его стоит вызывать.

> names.txt


На будущее: есть мощная библиотека php faker для генерации чего угодно. В том числе русские имена там есть по моему.

> function runApp($app) {


Тайп хинт бы сюда.

> } catch(PDOException $e) {


> } catch(FatalException $e) {


Почему тут только эти 2 исключения ловятся? Как ты составил список этих исключений, по каким принципам? Что делать с исключениями других классов?

> $c["config"]->getValue('db', 'type') . ":dbname=".


> $c["config"]->getValue('db', 'name') . ";host=".


Не очень хорошо читается. Можно $c["config"] заменить на переменную, и использовать sprintf для подстаноки параметров в строку.

> https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerIndex.php#L27


> if($_GET) {


Этот иф тут лишний по моему и не несет никакой пользы

> $currentPage = $_GET['page'];


Стоит добавить intval - на всякий случай (и min/max чтобы нельзя было указать число меньше 1)

> if(trim($_GET['search']) != "") {


> $linkBuilder->searchPattern = $_GET['search'];


А почему второй раз trim не делаетяс? Почти всегда для данных из форм надо делать trim.

> get_total_students(


> getValue


Что-то нет единообразия в стиле

> https://github.com/foobar1643/student-list/blob/master/templates/index.html#L10


> if(!isset($linkBuilder->searchPattern)):


Разве в обхекте может отсутсвовать поле? Или это такая закамуфлированная проверка на null?

https://github.com/foobar1643/student-list/blob/master/templates/index.html#L33
По идее ссылки надо экранировать через htmlspecialchars, в частности символ & в них

> if($_POST) {


Проверять лучше проверкой REQUEST_METHOD в _SERVER

Вот тут у тебя слишком большая простыня: https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerForm.php

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

> if(!$tokenHelper->checkCsrfToken($_POST['csrf_field'], $_COOKIE['token']))


Эти элементы могут отсутствовать, будет ошибка обращения к несуществующему индексу

https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerIndex.php#L41

> $error = true;


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

> https://github.com/foobar1643/student-list/blob/master/app/Helper/FormHelper.php#L42


> public function getAllowedFields() {


> return ['id',


id разрешено редактировать?

Обновление студента безопаснее делать по-другому. Надо загрузить студента из БД, а потом обновлять его из POST если там присутсвует поле. Тогда в случае если из формы уберут часть полей, ничего не сломается. У тебя в этом случае при редактирвоании отсутствующие поля обнулятся.

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

> $errors = $formHelper->validateStudent($student);


> if($dataGateway->checkEmail($student->email, $student->id) != 0) {


Непонятно почему проверка емайла не входит в функцию валидации

> !isset($error)) {


Что это? переменная может существовать, а может и не существовать?

Также, я не понимаю логику работы с куками auth и token. Работать с ними лучше не напрямую, усложняя код, а вынеся в отдельные методы с понятными именами. Например для csrf можно сделать один класс, для авторизационной куки - другой. Какие в них должны быть методы, подумай сам. Также, подумай над таким вопросом: допустим у тебя будет еще одна таблица, модель и форма ее редактирования. Сколько кода тебе придется скопипастить во второй контроллер? Весь код работы с куками придется многократно дублирвоать - это признак что что-то неудачно спроектировано.

https://github.com/foobar1643/student-list/blob/master/app/Helper/PaginationHelper.php#L23

> for($i = 1; $i < $page; $i++) {


> $offset += $this->recordsPerPage;


Умножение не годится?

https://github.com/foobar1643/student-list/blob/master/app/Helper/LinkHelper.php
Название плохое. Можно подумать это хелпер для любых ссылок, на самом деле только для ссылок на страницу с таблицей.

> в формате #_vnameANUSsit?b>ePUNCTUMc|~Fom


На будущее: для примеров есть специальный домен example.com (и его русская версия испытание.рф по моему)

> [А-ЯЁA-Z]{1}


А зачем {1}?

> Год рождения должен быть не меньше 1900 и не больше 2000.


> не больше 2000.


Ой ли? Менять ведь скоро придется.

> [1][9]


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

https://github.com/foobar1643/student-list/blob/master/app/Model/Student.php
Константы принято ставить в самом начале. Порядок такой: Константы, публичные поля, остальные поля, конструктор, магические методы, публичные методы, остальные.

https://github.com/foobar1643/student-list/blob/master/app/Exception/ExceptionHandler.php
Это не исключение, наверно лучше в другую папку поместить.

https://github.com/foobar1643/student-list/blob/master/app/Exception/FatalException.php
Хотелось бы комментарий чем исключение этого типа отличается от других

> if($names && $surnames) {


> while(($line = fgets($names)) !== false) array_push($names_array["names"], trim($line));


Попробуй сделать это же через file(), array_map(), array_filter() и trim()

Также, вместо функции readNames читающей 2 файла лучше было сделать читающую файл с указанными именем.

.... продолжение ниже ...
https://github.com/foobar1643/student-list #837 #676031
>>665607
>>674055

> Установите необходимые зависимости используя composer (composer install).


> Сгенерируйте файлы автозагрузки используя composer (composer dump-autoload).


install генерирует файл автозагрузки

> Загрузите файлы приложения в корневой каталог вашего веб-сервера.


Наоборот, надо настроить чтобы корень сервера был в public

Фраза "введите часть имени, фамилии..." не помещается в поле поиска. Плохо что поле поиска исчезает при поиске - нельзя подправить содержимое.

Поиск регистрозависимый - "ива" не находит имя "Иван"

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

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

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

"Форма успешно заполнена" - странный текст, лучше "Вы успешно зарегистрированы"/"Информация обновлена".

Алсо, что за выбор между приезжим и иногородним? Это не одно и то же?

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

> type = pgsql


А твой проект поддерживает другие базы данных? Если нет то этот параметр конфига лишний.

> enableFiller = false


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

мануал в помощь http://php.net/manual/ru/features.commandline.php

https://github.com/foobar1643/student-list/blob/master/public/logout.php
Для логаута должен быть метод где-то в менеджере авторизации. И его стоит вызывать.

> names.txt


На будущее: есть мощная библиотека php faker для генерации чего угодно. В том числе русские имена там есть по моему.

> function runApp($app) {


Тайп хинт бы сюда.

> } catch(PDOException $e) {


> } catch(FatalException $e) {


Почему тут только эти 2 исключения ловятся? Как ты составил список этих исключений, по каким принципам? Что делать с исключениями других классов?

> $c["config"]->getValue('db', 'type') . ":dbname=".


> $c["config"]->getValue('db', 'name') . ";host=".


Не очень хорошо читается. Можно $c["config"] заменить на переменную, и использовать sprintf для подстаноки параметров в строку.

> https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerIndex.php#L27


> if($_GET) {


Этот иф тут лишний по моему и не несет никакой пользы

> $currentPage = $_GET['page'];


Стоит добавить intval - на всякий случай (и min/max чтобы нельзя было указать число меньше 1)

> if(trim($_GET['search']) != "") {


> $linkBuilder->searchPattern = $_GET['search'];


А почему второй раз trim не делаетяс? Почти всегда для данных из форм надо делать trim.

> get_total_students(


> getValue


Что-то нет единообразия в стиле

> https://github.com/foobar1643/student-list/blob/master/templates/index.html#L10


> if(!isset($linkBuilder->searchPattern)):


Разве в обхекте может отсутсвовать поле? Или это такая закамуфлированная проверка на null?

https://github.com/foobar1643/student-list/blob/master/templates/index.html#L33
По идее ссылки надо экранировать через htmlspecialchars, в частности символ & в них

> if($_POST) {


Проверять лучше проверкой REQUEST_METHOD в _SERVER

Вот тут у тебя слишком большая простыня: https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerForm.php

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

> if(!$tokenHelper->checkCsrfToken($_POST['csrf_field'], $_COOKIE['token']))


Эти элементы могут отсутствовать, будет ошибка обращения к несуществующему индексу

https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerIndex.php#L41

> $error = true;


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

> https://github.com/foobar1643/student-list/blob/master/app/Helper/FormHelper.php#L42


> public function getAllowedFields() {


> return ['id',


id разрешено редактировать?

Обновление студента безопаснее делать по-другому. Надо загрузить студента из БД, а потом обновлять его из POST если там присутсвует поле. Тогда в случае если из формы уберут часть полей, ничего не сломается. У тебя в этом случае при редактирвоании отсутствующие поля обнулятся.

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

> $errors = $formHelper->validateStudent($student);


> if($dataGateway->checkEmail($student->email, $student->id) != 0) {


Непонятно почему проверка емайла не входит в функцию валидации

> !isset($error)) {


Что это? переменная может существовать, а может и не существовать?

Также, я не понимаю логику работы с куками auth и token. Работать с ними лучше не напрямую, усложняя код, а вынеся в отдельные методы с понятными именами. Например для csrf можно сделать один класс, для авторизационной куки - другой. Какие в них должны быть методы, подумай сам. Также, подумай над таким вопросом: допустим у тебя будет еще одна таблица, модель и форма ее редактирования. Сколько кода тебе придется скопипастить во второй контроллер? Весь код работы с куками придется многократно дублирвоать - это признак что что-то неудачно спроектировано.

https://github.com/foobar1643/student-list/blob/master/app/Helper/PaginationHelper.php#L23

> for($i = 1; $i < $page; $i++) {


> $offset += $this->recordsPerPage;


Умножение не годится?

https://github.com/foobar1643/student-list/blob/master/app/Helper/LinkHelper.php
Название плохое. Можно подумать это хелпер для любых ссылок, на самом деле только для ссылок на страницу с таблицей.

> в формате #_vnameANUSsit?b>ePUNCTUMc|~Fom


На будущее: для примеров есть специальный домен example.com (и его русская версия испытание.рф по моему)

> [А-ЯЁA-Z]{1}


А зачем {1}?

> Год рождения должен быть не меньше 1900 и не больше 2000.


> не больше 2000.


Ой ли? Менять ведь скоро придется.

> [1][9]


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

https://github.com/foobar1643/student-list/blob/master/app/Model/Student.php
Константы принято ставить в самом начале. Порядок такой: Константы, публичные поля, остальные поля, конструктор, магические методы, публичные методы, остальные.

https://github.com/foobar1643/student-list/blob/master/app/Exception/ExceptionHandler.php
Это не исключение, наверно лучше в другую папку поместить.

https://github.com/foobar1643/student-list/blob/master/app/Exception/FatalException.php
Хотелось бы комментарий чем исключение этого типа отличается от других

> if($names && $surnames) {


> while(($line = fgets($names)) !== false) array_push($names_array["names"], trim($line));


Попробуй сделать это же через file(), array_map(), array_filter() и trim()

Также, вместо функции readNames читающей 2 файла лучше было сделать читающую файл с указанными именем.

.... продолжение ниже ...
https://github.com/foobar1643/student-list #838 #676032
.....

> $data["names"][mt_rand(0, count($data["names"])-1)];


Стоило сделать метод выбирающий 1 случайное значение массива

https://github.com/foobar1643/student-list/blob/master/templates/form.html#L21
Не надо в шаблоне лезть в куки, дожна быть переменная $isEdit

> value="<?php if($student->name): ?><?= htmlspecialchars($student->name); ?><?php endif; ?>"


Не нужен if

> if($student->gender == 'male'


Лучше бы константой

> Exception message: <?= $e->getMessage() ?></center>


Лучше через __toString() выводить - деталей больше

И что за тег center? Он устарел много лет назад. Советую пройти уроки по HTML/CSS, ну или если ты их прошел, найти актуальный список тегов. У меня только на английском есть:

https://en.wikipedia.org/wiki/HTML_element
https://www.w3.org/TR/html-markup/elements.html
https://developer.mozilla.org/en-US/docs/Web/HTML/Element

Ну и давай уже доделывать эту задачу и переходить к фреймворкам, изучать twig и что там еще есть.
https://github.com/foobar1643/student-list #838 #676032
.....

> $data["names"][mt_rand(0, count($data["names"])-1)];


Стоило сделать метод выбирающий 1 случайное значение массива

https://github.com/foobar1643/student-list/blob/master/templates/form.html#L21
Не надо в шаблоне лезть в куки, дожна быть переменная $isEdit

> value="<?php if($student->name): ?><?= htmlspecialchars($student->name); ?><?php endif; ?>"


Не нужен if

> if($student->gender == 'male'


Лучше бы константой

> Exception message: <?= $e->getMessage() ?></center>


Лучше через __toString() выводить - деталей больше

И что за тег center? Он устарел много лет назад. Советую пройти уроки по HTML/CSS, ну или если ты их прошел, найти актуальный список тегов. У меня только на английском есть:

https://en.wikipedia.org/wiki/HTML_element
https://www.w3.org/TR/html-markup/elements.html
https://developer.mozilla.org/en-US/docs/Web/HTML/Element

Ну и давай уже доделывать эту задачу и переходить к фреймворкам, изучать twig и что там еще есть.
>>676377
#839 #676036
Подскажите, ошибка в коде? Или я пошел по неправильному пути? Если да, подтолкните в нужное русло http://ideone.com/3yhicB
#840 #676037
>>676030

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


Да я всегда привык переспрашивать, пока на 100% не пойму что от меня хотят. Часто это многих бесит, кто-то считает тупым, но для меня лучше переспросить и знать что от меня нужно а не угадывать.
#841 #676038
>>676030

>Сам понял что сказал?



Ну я жопой читал немношк
#842 #676051
>>676036

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


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

Скобка там пропущена, легко не заметить.
unexpected end of file всегда говорит, что где-то не закрыт блок.
>>676252
#843 #676052
>>676028
Т.е. мне нужно подключать отдельный модуль ангуляра и прописывать пути, да?
>>676060
#844 #676060
>>676052
Нет, тебе нужно либо выучить ангуляр, либо не брать задания с ним.
>>676126>>676145
#845 #676114
>>676036
Если бы разобрался с предыдущей задачей на Айфон, как я тебе подсказывал, то сейчас не было бы этой проблемы.
Нам же тут делать нечего больше, мы поэтому подсказываем, ты так думаешь? Как раз предостерегал от долгой возни с задачей на Айпад, всё это проходили сто раз.
Как раз именно устранение прошлого недочёта тебе сейчас бы помогло.
>>676220>>676252
#846 #676126
>>676060
ну че впадлу сказать что ли? у меня уже залит ангуляр на убунту, у меня этот сраный ангуляр работатет netbeans html, ну нету нету его сраного модуля в нетбинс php я что сдела м уеба?
>>676226
#847 #676145
>>676060
какая же ты тупая высокомерная мразь это просто пиздец. прям каждый раз противно заходить в этот тред и что-то спрашивать. убейся плз
#848 #676205
>>676036
1. $compulsoryPayment = ( $credit х $percent ) + $service; если стоит вне цикла, то к чему приводит, как ты полагаешь? В цикле должно всё обновляться, а этого не происходит.
2. $credit = $credit - $monthly; - а к чему тогда вообще введена дополнительная переменная $compulsoryPayment, если она нигде не принимает дальше участия?
>>676252
#849 #676220
>>676114
Дак я и так переделал с айфоном http://ideone.com/ZMFABV
>>676228>>678143
#850 #676226
>>676126

Перечитай свой вопрос:

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


Ангулар код выполняется в браузере, а не в ИДЕ. И перед тем как браться за него надо очень хорошо изучить JS, DOM. Судя по твоим вопросам ты пока не очень понял что это вообще такое.
Ответы 28 февр #851 #676227
>>669935

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

> [!,;:?.]\\S


Надо допилить чтобы не реагировало на многоточиеи и многовопросие.

> {1,}


Это то же самое что плюс

> (а|но){1,}


Зачем там разрешено повторение? Искать слова вроде "нононо" или "аноано"?

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


А "зделаешь" найдет?

> var_dump($match);


Разберись в формате массива результатов и сделай нормальный вывод циклом (читай мануал по функции). Например "зделал" почему-то 2 раза вывелось.

>>670144

Нету точки с запятой в строке перед break

>>670215

Погугли. Это больше для фронтендщиков.
Ответы 28 февр #851 #676227
>>669935

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

> [!,;:?.]\\S


Надо допилить чтобы не реагировало на многоточиеи и многовопросие.

> {1,}


Это то же самое что плюс

> (а|но){1,}


Зачем там разрешено повторение? Искать слова вроде "нононо" или "аноано"?

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


А "зделаешь" найдет?

> var_dump($match);


Разберись в формате массива результатов и сделай нормальный вывод циклом (читай мануал по функции). Например "зделал" почему-то 2 раза вывелось.

>>670144

Нету точки с запятой в строке перед break

>>670215

Погугли. Это больше для фронтендщиков.
#852 #676228
>>676220
Так-то нормально, конечно.
Тогда посмотри на подсказки выше - у тебя там просто самих по себе ошибок много в задаче про Айпад (просто напутал ты там в самом коде).
Ответы 28 февр #853 #676229
>>670226

> $creditSum x $percent / 100 + $comission


Это аж 3 раза скопировано. Попробуй убрать повторы.

Также, считает неправильно, если поставить суму в 1000 р - должно быть 2030 р во втором банке, а у тебя 2940: http://ideone.com/LRhmsn

>>670686

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

>>670728

Верные - код праивльный, число цифр тоже.

>>670746

> (?:-?\d){5} # и еще пять цифр с опциональными дефисами. кiнец.


А почему пробелы не разрешены? Вроде "8 900 123 45 67"

>>670937

> пройти курсы кодакадеми js, jqeury


Там по моему js очень ознакомительный, надо DOM хорошо изучить прежде чем браться за jquery. У нас есть задачки, но быстро их не пройти.

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


перед ним надо хорошо изучить HTML/CSS

> оттуда уже комплексно углубляться в less


Что там углубляться-то? Это всего лишь надстройка над CSS. И странная идея изучать LESS до CSS.И jquery до js.
Ответы 28 февр #853 #676229
>>670226

> $creditSum x $percent / 100 + $comission


Это аж 3 раза скопировано. Попробуй убрать повторы.

Также, считает неправильно, если поставить суму в 1000 р - должно быть 2030 р во втором банке, а у тебя 2940: http://ideone.com/LRhmsn

>>670686

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

>>670728

Верные - код праивльный, число цифр тоже.

>>670746

> (?:-?\d){5} # и еще пять цифр с опциональными дефисами. кiнец.


А почему пробелы не разрешены? Вроде "8 900 123 45 67"

>>670937

> пройти курсы кодакадеми js, jqeury


Там по моему js очень ознакомительный, надо DOM хорошо изучить прежде чем браться за jquery. У нас есть задачки, но быстро их не пройти.

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


перед ним надо хорошо изучить HTML/CSS

> оттуда уже комплексно углубляться в less


Что там углубляться-то? Это всего лишь надстройка над CSS. И странная идея изучать LESS до CSS.И jquery до js.
Ответы 28-29 февр #854 #676230
>>671037

> Хочешь меньше думать? Готовься выложить больше процессорного времени и памяти.


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

> не давай PHP спуститься на уровень ниже


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

>>671133

Транзакции не нужны? Ты это серьезно?

> слоупочными table locks


Ты ничего не путаешь? Это в nosql продуктах есть collection lock, а в innodb используется MVCC.

>>671135

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

>>671151

В мануал с этим вопросом плиз
Ответы 28-29 февр #855 #676232
>>671177

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

>>671204

Можно делать верстку и PHP параллельно. Да и как не важно? Как ты будешь HTML писать?

>>671223

> public function addChild(TreeElement $child){


> if($this->getRootElement()->findDescendant($child->getNodeName())){


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

> public function addChild(TreeElement $child){


> if($this->getRootElement()->findDescendant($child->getNodeName())){


А что если он в другом дереве? Надо проверять родителя элемента.

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

> public function setChildNodes($newNodes){


Смысл функции непонятен

> setParentNode($node){


Тайп хинт бы сюда

> if($node->isAncestor($this)){


> return true;


return $node->isAncestor(...);

> if($this->parentNode){


> $depth++;


> $depth+= $this->parentNode->getDepth();


if (...) {
return $this->parentNode->getDepth() + 1;
}

> foreach ($children as $key => $child) {


> $element = array_splice($children, $key, 1);


тут указывается номер элемента, а не ключ. У тебя при удалении появляются дырки в индексах и ключ не равен номеру.
Ответы 28-29 февр #855 #676232
>>671177

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

>>671204

Можно делать верстку и PHP параллельно. Да и как не важно? Как ты будешь HTML писать?

>>671223

> public function addChild(TreeElement $child){


> if($this->getRootElement()->findDescendant($child->getNodeName())){


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

> public function addChild(TreeElement $child){


> if($this->getRootElement()->findDescendant($child->getNodeName())){


А что если он в другом дереве? Надо проверять родителя элемента.

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

> public function setChildNodes($newNodes){


Смысл функции непонятен

> setParentNode($node){


Тайп хинт бы сюда

> if($node->isAncestor($this)){


> return true;


return $node->isAncestor(...);

> if($this->parentNode){


> $depth++;


> $depth+= $this->parentNode->getDepth();


if (...) {
return $this->parentNode->getDepth() + 1;
}

> foreach ($children as $key => $child) {


> $element = array_splice($children, $key, 1);


тут указывается номер элемента, а не ключ. У тебя при удалении появляются дырки в индексах и ключ не равен номеру.
Ответы 29 февр #856 #676235
>>671341

> Или все же нужно именно с пеленок себя приучать к такому стилю?


Нужно сразу приучать. Чтобы не писать стену текста, а разделять код на отдельные действия. Сам полдмай, что лучше читается: слово вроде makeLetterUppercase() или длинное сложное выражение?

Переменные названы неудачно:

text -> sentences
value -> sentence

Из-за таких названий код хуже читается.

>>671354

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

>>671402

Не факт. Но работать с utf-8 можно, просто это не делается автоматически.

>>672465

> for ($q = 0; $q < $height; $q++){


Этот цикл тоже можно заменить array_fill

> M_PI/180;


Есть готовые функции deg2rad и наоборот.

Также, цикл выглядит странно:

> foreach ($screen as $screen){


Ты по моему переменную перезаписываешь собой.

> implode(' ', $screen);


У тебя строки получаются очень длинные и переносятся на новую строку.

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

>>672519

Изучи яву
Изучи коллекции в яве
Изучи веб-сервер в яве
Изучи средства работы с БД
Изучи шаблонизатор
Изучи какой-нибудь веб-фреймворк (например play)
Ответы 29 февр #856 #676235
>>671341

> Или все же нужно именно с пеленок себя приучать к такому стилю?


Нужно сразу приучать. Чтобы не писать стену текста, а разделять код на отдельные действия. Сам полдмай, что лучше читается: слово вроде makeLetterUppercase() или длинное сложное выражение?

Переменные названы неудачно:

text -> sentences
value -> sentence

Из-за таких названий код хуже читается.

>>671354

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

>>671402

Не факт. Но работать с utf-8 можно, просто это не делается автоматически.

>>672465

> for ($q = 0; $q < $height; $q++){


Этот цикл тоже можно заменить array_fill

> M_PI/180;


Есть готовые функции deg2rad и наоборот.

Также, цикл выглядит странно:

> foreach ($screen as $screen){


Ты по моему переменную перезаписываешь собой.

> implode(' ', $screen);


У тебя строки получаются очень длинные и переносятся на новую строку.

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

>>672519

Изучи яву
Изучи коллекции в яве
Изучи веб-сервер в яве
Изучи средства работы с БД
Изучи шаблонизатор
Изучи какой-нибудь веб-фреймворк (например play)
>>677941
#857 #676252
>>676205
>>676114
>>676051
Всем спасибо, разобрался http://ideone.com/w0hHSz
>>676388>>678143
#858 #676258
Что делать, если задача ну вообще никак не идет? Числа прописью. Пропустить ее или сидеть над ней и думать? Уже дня 4 сижу.
>>676269
#859 #676269
>>676258
Вбрасывай код или пиши на чем остановился.
>>676330
32 Кб, 323x585
#860 #676290
ОП дает задачи типа "Найти кратчайший маршрут от одной станции метро до другой" или просит написать "Сапер", но ни разу не заикается об NP-полноте. Это так предполагается?
>>676297>>676298
#861 #676297
>>676290
Это тред PHP, а не алгоритмов.
#862 #676298
Решил написать о своем сегодняшнем совокуплении с фреймворком yii. Не знаю зачем, но вы тут такую ахинею пишете, что хуже не будет.

Так вот, задача была такова. Некоторые страницы запрещены для просмотра незарегистрированными пользователями. Для этих целей в yii есть такая штука как "фильтр" accessControl.
http://www.yiiframework.com/doc/guide/1.1/ru/topics.auth#sec-5
Если коротко, то можно выставить при выполнении каждого действия (action) определенную проверку (фильтр доступа), который в качестве конфига берет массив из метода accessRules.

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

Что у нас есть из инструментов? Есть HTTP_REFERER, и есть такая штука как Yii::app()->user->returnUrl с довольно странной реализацией.
Если посмотреть исходники, то окажется, что этот метод возвращает сохраненную в сессию переменную, либо (если сессия умерла) базовый url, тупо адрес главной страницы.
http://www.yiiframework.com/doc/api/1.1/CWebUser#getReturnUrl-detail
Документация у yii мутная и бессвязная, некоторые места вообще вводят в заблуждение:
http://www.yiiframework.com/doc/guide/1.1/ru/topics.auth#sec-6

>Если браузер был перенаправлен на страницу входа и вход удачный, вам может понадобиться перенаправить пользователя к той странице, на которой неудачно прошла авторизация. Как же узнать URL той страницы? Мы можем получить эту информацию из свойства returnUrl


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

Короче, если я напишу в шаблоне страницы логина что-то вроде
if (isset(Yii::app()->user->returnUrl)) { вывести флеш-сообщение с объяснениями причины редиректа }
это не будет работать. returnUrl всегда установлен, как минимум он указывает на главную страницу. Ну и вообще эта фишка задумывалась именно для того чтобы после успешного логина отредиректить пользователя обратно, а не для того чтобы выводить сообщение.

Так как getReturnUrl возвращает по-дефолту адрес главной страницы, можем взять более низкоуровневую вещь, то есть проверить прямо в сессии, есть ли там такая переменная.
Yii::app()->user->getState('__returnUrl'). Если ее там нет, то пользователь сам пришел на страницу логина, и не нужно ему выводить всякие ворнинги.
Проблема в том, что если пользователь сначала запросит запрещенную страницу, его перекинет на логин, он с него уйдет и походит по другим страницам, а потом вернется на страницу логина, ему по-прежнему будет показано сообщение о том, что он когда-то пытался получить доступ к некоей странице.

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

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

>>676290
Тут все самоучки, в наших деревнях таких страшных слов не слыхивали.
Ну и оп пытается подтолкнуть к тому, чтобы люди учились самостоятельно думать, а не заучивать всякие готовые алгоритмы.
#862 #676298
Решил написать о своем сегодняшнем совокуплении с фреймворком yii. Не знаю зачем, но вы тут такую ахинею пишете, что хуже не будет.

Так вот, задача была такова. Некоторые страницы запрещены для просмотра незарегистрированными пользователями. Для этих целей в yii есть такая штука как "фильтр" accessControl.
http://www.yiiframework.com/doc/guide/1.1/ru/topics.auth#sec-5
Если коротко, то можно выставить при выполнении каждого действия (action) определенную проверку (фильтр доступа), который в качестве конфига берет массив из метода accessRules.

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

Что у нас есть из инструментов? Есть HTTP_REFERER, и есть такая штука как Yii::app()->user->returnUrl с довольно странной реализацией.
Если посмотреть исходники, то окажется, что этот метод возвращает сохраненную в сессию переменную, либо (если сессия умерла) базовый url, тупо адрес главной страницы.
http://www.yiiframework.com/doc/api/1.1/CWebUser#getReturnUrl-detail
Документация у yii мутная и бессвязная, некоторые места вообще вводят в заблуждение:
http://www.yiiframework.com/doc/guide/1.1/ru/topics.auth#sec-6

>Если браузер был перенаправлен на страницу входа и вход удачный, вам может понадобиться перенаправить пользователя к той странице, на которой неудачно прошла авторизация. Как же узнать URL той страницы? Мы можем получить эту информацию из свойства returnUrl


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

Короче, если я напишу в шаблоне страницы логина что-то вроде
if (isset(Yii::app()->user->returnUrl)) { вывести флеш-сообщение с объяснениями причины редиректа }
это не будет работать. returnUrl всегда установлен, как минимум он указывает на главную страницу. Ну и вообще эта фишка задумывалась именно для того чтобы после успешного логина отредиректить пользователя обратно, а не для того чтобы выводить сообщение.

Так как getReturnUrl возвращает по-дефолту адрес главной страницы, можем взять более низкоуровневую вещь, то есть проверить прямо в сессии, есть ли там такая переменная.
Yii::app()->user->getState('__returnUrl'). Если ее там нет, то пользователь сам пришел на страницу логина, и не нужно ему выводить всякие ворнинги.
Проблема в том, что если пользователь сначала запросит запрещенную страницу, его перекинет на логин, он с него уйдет и походит по другим страницам, а потом вернется на страницу логина, ему по-прежнему будет показано сообщение о том, что он когда-то пытался получить доступ к некоей странице.

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

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

>>676290
Тут все самоучки, в наших деревнях таких страшных слов не слыхивали.
Ну и оп пытается подтолкнуть к тому, чтобы люди учились самостоятельно думать, а не заучивать всякие готовые алгоритмы.
>>678143
#863 #676330
>>676269
>>673827
Ну вот. Я не знаю, что делать дальше.
>>676336>>676382
#864 #676336
>>676330
Блин.
https://ideone.com/UMDGcw
Подсказочки из ОП-поста какие-то ироничные.
#865 #676377
>>676032
Спасибо за замечания, попытаюсь исправить в ближайшие пару дней. По поводу фреймворков - у меня есть почти готовый файлообменник на слиме и твиге, но работа над ним продвигается медленнее чем я планировал.
>>676381
#866 #676381
>>676377
Держи нас в курсе.
#867 #676382
>>676330
Теперь пиши функцию, которая будет склонять тысячи. Принцип такой же.
Можно было разбить регулярками число на порядки (трех порядков достаточно) и прогнать их через функцию, которая пишет прописью это трехзначное число для каждого порядка, ну и потом через функции, склоняющие миллионы, тысячи и рубли.
Но у тебя интересное решение и оно получится гораздо компактнее, просто подумай немного.
>>676395>>676441
#868 #676388
>>676252

>calculatePayments(39999, 1.02, 0, 5000, 0) + 7777;


Лучше 7777 прибавить к сумме кредита. ОП объяснял это тем, что ведь у Анона нет изначально этих 7777, поэтому он и на них вынужден оформить кредит. В итоге там всё равно самые выгодные условия будут, потому что нет комиссии каждый месяц.
>>676435
#869 #676395
>>676382
И не забывай, что числа 11 - 20 нельзя склонять по последней цифре, так что твою функцию рублей нужно доработать. Это касается и тысяч и миллионов.
>>676399>>676441
#870 #676399
>>676395
10-20
фикс
>>676441
#871 #676402
Застрял на задаче про айпад, нашел тред, а тут она.
Решал по-другому, укажите на ошибку, анончики :3 проверил, переменные в цикле крутятся, а вот лавеха в банке не мутится
http://ideone.com/P4vMiG
>>676411
#872 #676411
>>676402
В этом твоём варианте вот что неверно: когда $creditBalance у тебя становится меньше $monthlyPayment, то у тебя следует вот это выражение: $creditBalance = ( $creditBalance х $percent ) + $servicePayment - $monthlyPayment;. И в какой-то момент это уходит в минус, от чего дальше всё идёт неверно.
Подсказка: попробуй ввести отдельную переменную для подсчёта $creditBalance = ( $creditBalance х $percent ) + $servicePayment, ведь именно когда этот момент становится меньше $monthlyPayment, нам и надо просто его выплатить и приплюсовать к $paymentTotal.
>>676473
#873 #676435
#874 #676441
>>676399
>>676382
>>676395
Спасибо большое, буду думать.
#875 #676473
>>676411
Хм
Вроде $creditBalance * $percent + $commission < $monthlyPayment выполняется, когда $creditBalance < 0, и значения поглядел, без минусов. Покурю и подумаю про новую переменную с утра сижу думаю, как решить эту задачку, лол Спасибо, анон.
>>676479
#876 #676479
>>676473
Нет-нет, у тебя же в теле цикла безо всяких условий стоит $creditBalance = $creditBalance * $percent + $commission - $monthlyPayment;
Это значит, что когда $creditBalance становится, например, 260 рублей, он умножается на проценты, к нему прибавляется комиссия, а потом отнимается 5000 месячной выплаты.
Тут всё уходит в минус.
А дальше срабатывает это условие: if ($creditBalance <= 0) {
break;
}
>>676499
37 Кб, 640x480
#877 #676499
>>676479
Добра тебе :3
#878 #676550
Зачем нужен "use"?
>>676561>>677111
#879 #676561
>>676550
Позволяет использовать определенный неймспейс (или несколько неймспейсов).
Читал урок ОПа про автозагрузку и неймспейсы? Если нет, почитай https://github.com/codedokode/pasta/blob/master/php/autoload.md
#880 #676648
Как искать на гитхабе правильно? Хочу найти там реализацию админ панели для сайта, через которую можно например создавать новости и добавлять на главную страницу на них гиперссылки, как это в новостных сайтах реализуется.
>>678143
#881 #676693
Этот вопрос >>675801 заключается в том, что у меня стоит такая проблема:

Перед тем как значения отправятся в класс формы, значения $_POST пока не существуют, и, соответственно, в контроллере не имеет смысла пока что создавать этот класс. Очевидным решением напрашивается, то что нужно делать проверку перед этим, но этим у меня занимается вспомогательный метод getPost()

{
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
foreach ($_POST as $value) {
$value = is_scalar($value) ? $value : '';
$value = trim($value);
}
}

return $_POST;
}

Стоит ли выносить проверку в класс контроллера?
>>678143
#882 #676800
Хочу обратиться к определенному значению массива в foreach и перезаписать его значением внешнего массива:

$arr = [1 => 1, 2 => 2];
$extra=[1 => "a", 2 => "b"];
foreach($arr as $key => &$value){
\t $arr[1] = $extra[2];
}
Но мой велосипед не работает. Что я делаю не так?
>>676820>>676907
#883 #676820
>>676800

>к определенному значению массива


Как узнать какое определение значения массива?
#884 #676907
>>676800
$arr = [1 => 1, 2 => 2];
$extra=[1 => "a", 2 => "b"];
foreach($arr as $key => &$value){
$arr[1] = $extra[2];
}
var_dump($arr);

array(2) {
[1]=>
string(1) "b"
[2]=>
&int(2)
}
Ну хуй знает.
Я у мамы калькулятор #885 #676924
Посмотрите как вам такой калькулятор

http://ideone.com/ERuDLR
>>682831
#886 #677058
что не так ??
http://ideone.com/hhWMn7
>>677097
#887 #677097
>>677058
$letter2 = mb_substr($a, - $i, -1, 1);
неправильно, попробуй заменить на
$letter2 = mb_substr($a, -($i+1), 1);
#888 #677102
>>677097
Попробуй анус свой заменить, пес. Мы тут помогаем, а не решаем за других.
>>677107
#889 #677105
>>677097
ну эт помогло пасибки
>>677109
#890 #677107
>>677097
>>677102
только почему в скобках ? и в каких случаях мне их использовать ?
>>677109
#891 #677109
>>677097
Ты видишь, пидр, што ты наделал?7
>>677105 >>677107

>только почему в скобках ? и в каких случаях мне их использовать ?

>>677110
#892 #677110
>>677109
бля лучше помогите вместо того что бы ругаться
>>677111>>677126
#893 #677111
>>676550
>>677110
он все правильно говорит, я неправильно сделал что просто ответ написал(
#894 #677113
суууук мне кто-нибудь объяснит

>только почему в скобках ? и в каких случаях мне их использовать ?

#895 #677115
>>677113
ой знак вопроса забыл,вот он - ?
#896 #677126
>>677110
>>677113
Разобрался ли ты с функцией mb_substr?
Почитай у ОПа, какие ей нужны символы для правильной работы, что нам дают отрицательная $i в этой функции или положительная.
Тебе нужно брать по символу с начала строки и с конца.
У тебя это

>$letter1 = mb_substr($a, $i, 1)


>$letter2 = mb_substr($a, -($i+1), 1)


В последнем тебе надо добиться отрицательного значения у $i. Представь, что ты к -1 прибавляешь 1 - что получается? 0 получается.
А теперь вспомни, что нам дают скобки?
Подсказка: сначала производятся действия в скобках, а затем другие в выражении.
Чтобы избежать всех этих скобок, достаточно в начале цикла поставить не $i = 0, а $i равно кое-чему другому, догадайся. Тогда не придётся из нуля делать -1 для первого символа с конца фразы, достаточно будет поставить просто минус перед $i.
>>677130>>677133
#897 #677130
>>677126
окей все было на много проще чем я думал
спасибо
#898 #677133
>>677126
но если заменить $i на "$i равно кое-чему другому" то первую букву будет брать не с того места которое нам надо
>>677134>>677136
#899 #677134
>>677133
первую букву -> $letter1
#900 #677136
>>677133
Попробуй сделать из этого изменённого $i 0.
Чтобы брало с первого символа начала фразы.
>>677138>>677144
#901 #677138
>>677136
Сделать это в самой функции, разумеется.
>>677144
#902 #677144
>>677136
>>677138
тогда это почти ничем не будет отличатся от

>$letter1 = mb_substr($a, $i, 1)


>$letter2 = mb_substr($a, -($i+1), 1)

>>677145
#903 #677145
>>677144
Как ты сделал, покажи?
Всё там намного внятнее должно получиться.
>>677150
#904 #677150
>>677159
#905 #677159
>>677150
Так тут то же самое, только другое сокращено.
Я же советовал немного упростить ориентиры для отрывания символов с начала и конца строки, избавиться от этих скобок и -($q+1).
>>677167
#906 #677167
>>677159
Ну да, в предложенном тобою варианте будет немного понятнее, но смысл останется прежним
>>677171>>677174
#907 #677171
>>677167
Важно делать всё минималистично.
Чего можно избежать - нужно избежать.
#908 #677174
>>677167
Так как ты сделал с той моей подсказкой?
Мне интересно, правильно ли ты меня понял, понял ли принцип работы цикла и функции mb_substr.
>>677176>>677182
#909 #677176
>>677174
Я не тот анон))
#910 #677182
>>677174
наверно эт мне ?
если да то вроде понял
>>677185
#911 #677185
>>677182
Как. Ты. Сделал.
Я слишком многого прошу, что ли?
>>677191>>677193
#912 #677191
>>677185
да я так все и оставил
http://ideone.com/hhWMn7
#913 #677193
>>677185
просто теперь он работает и я доволен
>>677200
#914 #677200
>>677193
Я не уверен чому-то, что ты меня понял.
Ну да ладно, отстаю.
#915 #677225
>>666619
Я один раз синглтон из документации переписал и в ответ на тестовое задание отправил.
Мне сказали что он не правильный и там были переопределен гетер и сеттер, так они подумали что я не знаю про магические методы.
>>682834
Калькулятор-кун! #916 #677257
http://archive-ipq-co.narod.ru/l1/finals.html

Решение Калькулятор-кун! работает не совсем корректно
http://ideone.com/VeXs82
>>682834
#917 #677317
switch, if #918 #677457
Анончики, а есть смысл заменять несколько if на switch? Или кроме написания это ничем не отличается?
>>682834
#919 #677549
Как бороться с ленью? Иногда одолевает чувство что вообще ничего не хочется и хочется повеситься.
#920 #677555
>>677549
Никак.
Оставайся в жопе.
#921 #677574
>>677549
Спать не менее 8 часов в сутки.
127 Кб, 1377x973
#922 #677607
ахаха а бутстрап изобрел
>>677621>>677632
#923 #677621
>>677607
А зачем?
119 Кб, 834x924
#924 #677632
#926 #677665
>>677658
Забавно.
Жаль, проект не взлетел, похоже.
>>677695
#927 #677695
>>677665
Ну они выпустили курс разработки под андроид, а потом что-то затухло всё. Может еще что-то выкатят.
#928 #677719
Сколько будет стоить написать вот такое: http://blankionline.ru/servisy/2760.html ?
>>677723>>677967
#929 #677721
Анончики, объясните кто-нибудь, пожалуйста, что значит %d d строке "echo declense(4, '%d кот', '%d кота', 'аж %d котов', 'ни одного кота')@". И как вообще это работает?
>>677727>>677754
#930 #677723
>>677719
А зачем писать если уже за тебя написали?
Просто спизди это
>>677761
#931 #677727
>>677721
Откуда это?
Это напоминает спецификаторы printf
https://ru.wikipedia.org/wiki/Printf
>>677734
176 Кб, 1014x1044
#932 #677730
Парни, я прошел курс PHP на Codecademy.
Я теперь Джуниор?
>>677732>>677735
#933 #677732
>>677730
Да, можешь устраиваться на работу.
>>677741
130 Кб, 1919x1041
#934 #677733
Посоны, что с моим пхпстормом?
>>677902
#935 #677734
>>677727
ОП написал
>>677738
#936 #677735
>>677730
Нет. Ты теперь один из >>673314
>>677741
#937 #677738
>>677734
Если отсюда >>672691 то да - это спецификаторы по аналогии printf.
%d - заменяется на целое число.
#938 #677739
>>673314
Что это за бред в последнем столбце? Если это вакансии делить на резюме, то это какая-то хуйня.
#939 #677741
>>677732
>>677735
А если серьезно? Где та планка, что вот, ты Джуниор?
#940 #677744
>>677741
когда джуном устроишься на работу тогда им и станешь
#941 #677745
>>677741
Когда ты станешь в себе уверен. Некоторые и без знаний но с высокими амбициями ПРОСТО идут и устраиваются и по ходу дела учатся.
#942 #677754
>>677721

Это плейсхолдер куда подставляется цифра. %d выбран так как он уже используется в функции sprintf.
#943 #677761
>>677723
Нет, я это написал, и хочу узнать, сколько такое может стоить.
>>677781
#944 #677768
Есть у кого-нибудь архивчик тредисов? Я бы почитал.
>>677773>>677785
#945 #677773
>>677768
Что ты там читать собрался, поехавший? Вопросы про решение задачи на кредит?
>>677774
#946 #677774
>>677773
Ты токсичный (
>>677775
#947 #677775
>>677774
Это отчего же у тебя сложилось такое мнение обо мне?
#948 #677781
>>677761
Теперь не сколько, потому что это можно спиздить у тебя.
Тем более это мерзкий вордпрес.
>>677789
#949 #677785
#950 #677789
>>677781
Ты можешь сказать, сколько мне запросить за эту работу? Такое украсть не очень то и просто.
>>677792
#951 #677792
>>677789
Яваскрипт-тред вообще-то где-то там, снаружи.
Код лапшевидный, суматошный, уровня ньюфага. Дизайн хуевый. И проблема в том, что его сердце ты спиздил. http://blankionline.ru/wp-content/themes/Impreza/libs/propis/sum.js

Рублей 200-300 твоя "работа" стоит.
>>677817
#952 #677817
>>677792
Теперь понятно, а в чём сама суматошность кода? Я с яваскрипт если честно не очень, больше по ПХП.
>>677823>>677825
#953 #677823
>>677817
У меня есть подозрение, что основная проблема, это не использование each (сейчас только вспомнил про такую функцию в jQuery), используя её, можно значительно сократить код.
#954 #677825
>>677817
Хреновые названия классов и переменных.
Теги option, которые красиво сверстать труднее, чем кастомные выбиралки на блоках.
Утонувшие отступы в коде.
Цепочки if, когда есть switch.

>jQuery


Учи читый JS, писать на jQuery то же самое, что писать на Бейсике и мнить себя программистом.
>>677831
#955 #677831
>>677825

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


Заказчику нужно было так как сейчас, в смысле без выпадающих списков.

>Учи читый JS, писать на jQuery то же самое, что писать на Бейсике и мнить себя программистом.


Ясно, я на JS вообще редко пишу, я и учил его всего лишь в районе месяца, просто быстро пробежался по самому основному, чтобы разбираться как делать простенькие эффекты, как бы дополнительный скилл для ПХП-пограммиста. Просто подумал, что такое скрипт на ПХП писать нет смысла. Но JS конечно надо подтянуть.
>>677837
#956 #677837
>>677831

>Заказчику нужно было так как сейчас, в смысле без выпадающих списков.


Ну так и верстал бы блоками. Или ты html+css тоже месяц назад узнал?

>я на JS вообще редко пишу


Какая разница? Я бы не хотел обслуживать написанный тобой PHP-код.
#957 #677902
>>677733
Попробуй в правом нижнем углу windows-1251 поменять на UTF-8.
53 Кб, 550x524
#958 #677912
Оп, я разобрался наконец-то с sql дампами, гитхабом и прочими невиданными ранее вещами и прошу тебя посмотреть мой список студентов https://github.com/greenTea242/Student-list. Интересно, сколько раз мне придется его переделывать. Мои кошки мышки ты только на четвертый раз одобрил.

Вопросы до первой проверки не хочется задавать, но все же. В задании написано:

> "Для поиска по всем колонкам можно применить оператор LIKE к соединенным через пробел значениям столбцов".


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

> Другой вариант — искать в нескольких колонках через OR, например name LIKE '%hello%' OR surname LIKE '%hello%'.


Как примерно должен выглядеть запрос из первого варианта?

Еще я не понял как вставить в код класс pager с его методами кроме как для получения свойств. Мой View-Helper::getSortedLink справляется со ссылочной работой. Это неправильно?

Заранее извиняюсь, если что-то не правильно оформил на гитхабе, буду его изучать постепенно. Вот смотрю сейчас страницу своего проекта и там под php комментариями код превращается в сплошной коммент, даже не знаю правильно это или нет.
>>677913
#959 #677913
>>677912
https://github.com/greenTea242/Student-list
быстрофикс влезшей точки в ссылку
>>677944
#960 #677919
Надо получить такую html структуру как я здесь получил https://jsfiddle.net/dq6j13m4/ но мне кажется я неправильно как-то сделал это, не поясните как можно сделать правильно?
>>682834
#961 #677941
>>676235

>Ты по моему переменную перезаписываешь собой.


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

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


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

ОП, чому оно у меня такое кривое?с коэффициентами баловался
https://ideone.com/D3cmbK
>>677968>>677984
#962 #677944
>>677913

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


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

Например SELECT CONCAT(name, ' ', last_name) FROM student_list выдаст результат в одной колонке вида "Имя Фамилия". Если сделаешь то же самое с WHERE и LIKE - получишь поиск.

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


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

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


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

Еще я думаю лучше будет readme оформить в markdown формате, это специальный формат для таких вещей. Подробнее почитать и посмотреть примеры можешь тут:
https://guides.github.com/features/mastering-markdown/
#963 #677966
>>677741
Студентов и файлообменник из ОПовского учебника сделай - на джуниора точно сможешь претендовать.
Хотя на работу им устраиваются и без этого, зависит от самих работодателей и прочего.
#964 #677967
>>677719
Рублей 500 - от силы.
А в качестве пункта в портфолио - очень даже неплохо.
#965 #677968
>>677941
Домножать надо синус и косинус.
>>677970
#966 #677970
>>677968
Домножение синуса и косинуса дает коррекцию по горизонтали и вертикали. Вопрос был в том, что некоторые буквы расположены криво по отношению друг к другу.
>>677984
#967 #677984
>>677970
>>677941
Не посмотрел что кинул по ссылке, вот то что хотел https://ideone.com/WNMkGT
>>682836
Я у мамы калькулятор #968 #677998
Другой вариант калькулятора. Имеет право на жизнь?

https://ideone.com/O4dz3u
>>682836
#969 #678034
>>677741
Это не официальная планка. Где-то сидит человек, например, на позиции мида, в другой компании его в джуны определят, а куда-нибудь может и сеньором-помидором залезть. Джун, мид и прочее - это попугаи, планки, устанавливаемые для того, чтобы решать некоторые организационные моменты в плане делегации ответственности и полномочий, а также оплаты, роста и мотивации работника. Как-то так.
#970 #678118
Посоны, для более-менее приемлемой "правильной" работы с композером и фреймворками (ларавел в моем случае) на живом сайте нужен ВПС с SSH? Есть ли какие-нибудь максимально нищебродские варианты для этого?
Сейчас я ковыряю все это добро на локалке в нетбинсе с заливанием файла по ФТП на обычный shared хостинг при сохранении, и когда приходит время композер апдейтов и прочей многофайловой шняги я запускаю синхронизацию, которая длится хуй знает сколько времени потому что этот уебский ларавел состоит из 5000 файлов.
Это, конечно, большое уебанство, учитывая то, что вожусь я с фреймворками исключительно в образовательных целях, а умение придумывать какие-то дикие костыли мне вряд ли поможет.
>>678127>>678136
#971 #678123
Какая же windows 7 тормозная и как долго грузится, как медленно работает, по крайней мере внутри виртуалки. Буду принципиально на XP сидеть.
>>678148
#972 #678127
>>678118

Ты можешь при синхронизации закачивать не все файлы а только изменившиеся.

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

> с заливанием файла по ФТП на обычный shared хостинг при сохранении


Неправильно, это вообще глупая затея и медленно. Лучше сделать скрипт который будет запускаться вручную, находить и загружать изменившиеся файлы. Может есть для этого программы с интерфейсом, я не знаю, я скрипты пишу.
>>678156
Ответы за 29 февраля - 1 марта #973 #678130
>>673237

Что ты за ерунду пишешь. Вот смотри, веб-приложение фактически состоит из 2 частей: той, что работает на сервере (PHP, SQL) и той что на клиенте (HTML, CSS, JS). Как можно одну из этих частей убрать? Никак, нужны обе. Значит и изучать надо и то и другое.

Также, есть очень нездоровая вещь - так как HTML простой, люди ограничиваются тем что изучают синтаксис по даунским видеоурокам и на этом останавливаются. Они же изучают jQuery не зная толком JS. Хуже того, некоторые неосиляторы на этом останавливаются и называют себя фронтендерами. Я не знаю сколько таких людей сейчас в идустрии, иногда мне кажется что много. Надеюсь в будущем их выставят за дверь - с таким отношением они все равно ничего хорошо не сделают.

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

> жалко потраченного на это всё времени,


Сколько же ты времени потратил на изучение основ CSS? Полгода? год? 2 года? На другие специальности люди в вузах учатся по 4-6 лет, к слову. Справедливо и программистов хотя бы года 2-3 заставить учиться.

> Но сколь далече уже продвинулись те, кто не стал решать бонусные задачи, кто не стал решать вот эти задачи на HTML+CSS.


Как можно продвинуться дальше не зная HTML?

> душа требует ООП уже, БД и фреймворков.


Изучай параллельно.

>>673287

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

>>673301

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

>>673310

Бросай, не мучайся уже.
Ответы за 29 февраля - 1 марта #973 #678130
>>673237

Что ты за ерунду пишешь. Вот смотри, веб-приложение фактически состоит из 2 частей: той, что работает на сервере (PHP, SQL) и той что на клиенте (HTML, CSS, JS). Как можно одну из этих частей убрать? Никак, нужны обе. Значит и изучать надо и то и другое.

Также, есть очень нездоровая вещь - так как HTML простой, люди ограничиваются тем что изучают синтаксис по даунским видеоурокам и на этом останавливаются. Они же изучают jQuery не зная толком JS. Хуже того, некоторые неосиляторы на этом останавливаются и называют себя фронтендерами. Я не знаю сколько таких людей сейчас в идустрии, иногда мне кажется что много. Надеюсь в будущем их выставят за дверь - с таким отношением они все равно ничего хорошо не сделают.

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

> жалко потраченного на это всё времени,


Сколько же ты времени потратил на изучение основ CSS? Полгода? год? 2 года? На другие специальности люди в вузах учатся по 4-6 лет, к слову. Справедливо и программистов хотя бы года 2-3 заставить учиться.

> Но сколь далече уже продвинулись те, кто не стал решать бонусные задачи, кто не стал решать вот эти задачи на HTML+CSS.


Как можно продвинуться дальше не зная HTML?

> душа требует ООП уже, БД и фреймворков.


Изучай параллельно.

>>673287

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

>>673301

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

>>673310

Бросай, не мучайся уже.
>>678230
Ответы за 2 марта #974 #678131
>>673337

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

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

Не читайте их, решайте лучше нашу задачу про студентов.

>>673352

Да, неправильно.

>>673355

Что значит "не работает"?

>>673379

В чем твой вопрос? Что на 4-м скриншоте? Может статья устарела?

>>673384

> W1 - http://ideone.com/PaOLUG


Верно

> W2 - http://ideone.com/sAZs0A


Верно

> W3 - http://ideone.com/7FUXeB


правильно

> W4.1 - http://ideone.com/xN81k7


верно

> W4.2 - http://ideone.com/hDB9f4


Хорошо

> W5.2 - http://ideone.com/b46oYS


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

> W5.1 - http://ideone.com/isOeeQ


Это мы выше проверили
Ответы за 2 марта #974 #678131
>>673337

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

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

Не читайте их, решайте лучше нашу задачу про студентов.

>>673352

Да, неправильно.

>>673355

Что значит "не работает"?

>>673379

В чем твой вопрос? Что на 4-м скриншоте? Может статья устарела?

>>673384

> W1 - http://ideone.com/PaOLUG


Верно

> W2 - http://ideone.com/sAZs0A


Верно

> W3 - http://ideone.com/7FUXeB


правильно

> W4.1 - http://ideone.com/xN81k7


верно

> W4.2 - http://ideone.com/hDB9f4


Хорошо

> W5.2 - http://ideone.com/b46oYS


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

> W5.1 - http://ideone.com/isOeeQ


Это мы выше проверили
Ответы за 2 марта #975 #678132
>>673403

Не знаю

>>673407

Но там ведь нет сдачи. Со сдачей код бы выглядел примерно так:

требуемая плата = ....;
полученная плата = 5000;
сдача = требуемая плата - полученная плата;

>>673542

Ты не настроил правильно виртуальные хосты.

> Для каждого сайта запись в hosts и виртуалхост в хттпд.конф.


Видимо неправильно. Или сервер забыл перезапустить.

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


Такие вещи можно автоматизировать скриптами, например на Баш (если линукс или cygwin) или Питоне, или даже на PHP. Зачем руками файлы копировать?

> Можно все это попроще как-то?


Написать скрипт
>>679042
Ответы за 2 марта #976 #678133
>>673558

Я не знаю никаких книг. Есть оф. документация на англ по апачу- там все описано же

https://httpd.apache.org/docs/2.4/vhosts/index.html
https://httpd.apache.org/docs/2.4/vhosts/examples.html

Алсо ты даже свой httpd.conf не запостил

>>675220

Нужен конфиг Апача

>>673633

> W5.3 - http://ideone.com/jWpMfH


Верно

> W5.4 - https://ideone.com/hZNNWf


Верно

> W5.5 - https://ideone.com/kwBJKl


Все правильно

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

>>673657

лайки для комментариев

>>673827

> function inclineWord($num){


> function inclineThou($thou){


> function inclineMill($mill){


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

> floor($thou%100) <= 11 && floor($thou%100) >= 19 ? $value = " тысяч " : (


> floor($thou%10) == 1 ? $value = " тысяча " : (


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

> function assemblyFunc($num){


> global $units, $from11To19, $tens, $hundreds, $thousands, $millions;


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

Также, название функции должно начинаться с глагола.

> $numericArr = str_split($num, 3);


Число это не строка, надо использовать математические методы (деление на 10, 100 и тд). Ну и у тебя тут будут потенциальные ошибки. Что если число содержит всего 1 цифру? Вот https://ideone.com/s9ZuhK тут твой код дает ошибку обращения к несуществующему элементу массива.

> foreach($numericArr as $key => $triple){


> global $units, $from11To19, $tens, $hundreds, $thousands, $millions;


Зачем ты второй раз тот же самый глобал пишешь? Ты по моему что-то путаешь.

> $numericArrDouble


Очень неудачное название - непонятно что там хранится

> return $partNumStr;


> }return $partNumStr;


Зачем ты 2 раза return написал?

В общем, пока не годится. Ты забыл что копипаста это зло, что код должен легко читаться.
Ответы за 2 марта #976 #678133
>>673558

Я не знаю никаких книг. Есть оф. документация на англ по апачу- там все описано же

https://httpd.apache.org/docs/2.4/vhosts/index.html
https://httpd.apache.org/docs/2.4/vhosts/examples.html

Алсо ты даже свой httpd.conf не запостил

>>675220

Нужен конфиг Апача

>>673633

> W5.3 - http://ideone.com/jWpMfH


Верно

> W5.4 - https://ideone.com/hZNNWf


Верно

> W5.5 - https://ideone.com/kwBJKl


Все правильно

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

>>673657

лайки для комментариев

>>673827

> function inclineWord($num){


> function inclineThou($thou){


> function inclineMill($mill){


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

> floor($thou%100) <= 11 && floor($thou%100) >= 19 ? $value = " тысяч " : (


> floor($thou%10) == 1 ? $value = " тысяча " : (


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

> function assemblyFunc($num){


> global $units, $from11To19, $tens, $hundreds, $thousands, $millions;


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

Также, название функции должно начинаться с глагола.

> $numericArr = str_split($num, 3);


Число это не строка, надо использовать математические методы (деление на 10, 100 и тд). Ну и у тебя тут будут потенциальные ошибки. Что если число содержит всего 1 цифру? Вот https://ideone.com/s9ZuhK тут твой код дает ошибку обращения к несуществующему элементу массива.

> foreach($numericArr as $key => $triple){


> global $units, $from11To19, $tens, $hundreds, $thousands, $millions;


Зачем ты второй раз тот же самый глобал пишешь? Ты по моему что-то путаешь.

> $numericArrDouble


Очень неудачное название - непонятно что там хранится

> return $partNumStr;


> }return $partNumStr;


Зачем ты 2 раза return написал?

В общем, пока не годится. Ты забыл что копипаста это зло, что код должен легко читаться.
Ответы за 2 марта #977 #678134
>>673862

Нет, но в 99% случаев это и не требуется.

>>673873

Лучше наверно в ява или ньюфаг треде спросить.

>>673946

через query string (GET)

>>673965

Код статуса передавай через GET (/?notify=success). Если сообщение зависит от статуса, передавать его не надо, если там дополнительные данные - либо черз GET либо через сессии (гугли реализацию flash messages) но сессии имеют тот недостаток что разделяются между всеми вкладками браузера + при ошибке загрузки страницы и перезагрузке страницы сообщение потеряется. Традиционный способ все же лучше.

>>673966

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


Не надо так, жутко бесит окно блокирующее страницу
Ответы за 3 марта #978 #678135
>>674002

А на оф сайте его не скачать отдельно? В линуксе он скорее всего есть в пакете сфинкса и ставится куда-нибудь в /usr/share

>>674003

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

>>674112

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

Также, можно попробовать опеноффис - может он лучше CSV поддерживает.

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

>>674119

Проверь какой получается HTML код, какие там обработчики ставит Юи - по моему там валидация делается то ли аяксом то ли яваскриптом. Так непонятно в чем проблема.

>>674268

Через строку запроса в URL

>>674299

Это только в командной строке
Ответы за 3 марта #978 #678135
>>674002

А на оф сайте его не скачать отдельно? В линуксе он скорее всего есть в пакете сфинкса и ставится куда-нибудь в /usr/share

>>674003

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

>>674112

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

Также, можно попробовать опеноффис - может он лучше CSV поддерживает.

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

>>674119

Проверь какой получается HTML код, какие там обработчики ставит Юи - по моему там валидация делается то ли аяксом то ли яваскриптом. Так непонятно в чем проблема.

>>674268

Через строку запроса в URL

>>674299

Это только в командной строке
#979 #678136
>>678118

>Есть ли какие-нибудь максимально нищебродские варианты для этого?


Сделать себе локальный сервер. Я не знаю зачем ты заливаешь свои образовательные эксперименты в интернет, но в php есть команда exec которая сможет выполнить любую команду. Таким образом, в теории, можно будет скачать композер через wget и запустить его, но я думаю что такие вещи админы бесплатных хостингов запретили. Конечно, никто тебе не запрещает при синхронизации заливать только те файлы которые изменились.
Ну и для сравнения самый нищебродский вариант на DigitalOcean за пять долларов дает тебе SSH, это если ты смотришь в сторону платных хостингов.
>>678156
Ответ за 3 марта #980 #678137
>>674358

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

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

>>674382

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

>>674389

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

>>674390

Надо писать больше кода

>>674399

Бутстрап это набор готовых элементов. Изучать CSS все равно надо, сначала ты в совершщенстве изучаешь CSS а только потом верстаешь.
Ответ за 3 марта #981 #678138
>>674579

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

Сейчас вспомнил что у меня в университете тоже когда-то глаза от тамошних ЖК мониторов уставали.

> Бывают ли хорошие ЖК-мониторы,


Бывают.

>>674698

> Вот вроде понятны все преимущества но когда сам пытаюсь получается тот же самый css и длинные классы вместо каскадности.


БЭМ вообще то этого и требует. И ничего хорошего в "каскадности" нет, сколько я не видел кода на less - быдлокод где идет каскад вроде .some-class div span div span. Не надо так писать. Изучай БЭМ лучше.

>>674708

> if ($compulsoryPayment > $monthlyPayment) {


> elseif ($compulsoryPayment < $monthlyPayment) {


А что если они равны друг другу? Это не учтено.

> elseif ($creditBalance >= 0) {


Он тут никогда не сработает так как для этого надо чтобы 2 предыдущих условия не выполнялось. Брейк надо делать в ветке где долг маленький.

Алсо, подумай как можно заменить if на функции min/max.

>>674852

> if(mysqli_num_rows($from_query) ==1)


> elseif(mysqli_num_rows($to_query) ==1)



Почему ты решил что там ровно 1 запись?

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

Ты выбрал какой-то плохой учебник - код надо полностью переписывать.
Ответ за 3 марта #981 #678138
>>674579

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

Сейчас вспомнил что у меня в университете тоже когда-то глаза от тамошних ЖК мониторов уставали.

> Бывают ли хорошие ЖК-мониторы,


Бывают.

>>674698

> Вот вроде понятны все преимущества но когда сам пытаюсь получается тот же самый css и длинные классы вместо каскадности.


БЭМ вообще то этого и требует. И ничего хорошего в "каскадности" нет, сколько я не видел кода на less - быдлокод где идет каскад вроде .some-class div span div span. Не надо так писать. Изучай БЭМ лучше.

>>674708

> if ($compulsoryPayment > $monthlyPayment) {


> elseif ($compulsoryPayment < $monthlyPayment) {


А что если они равны друг другу? Это не учтено.

> elseif ($creditBalance >= 0) {


Он тут никогда не сработает так как для этого надо чтобы 2 предыдущих условия не выполнялось. Брейк надо делать в ветке где долг маленький.

Алсо, подумай как можно заменить if на функции min/max.

>>674852

> if(mysqli_num_rows($from_query) ==1)


> elseif(mysqli_num_rows($to_query) ==1)



Почему ты решил что там ровно 1 запись?

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

Ты выбрал какой-то плохой учебник - код надо полностью переписывать.
Ответы за 3-4 марта #982 #678140
>>674858

брейк надо в ту ветку где долг маленький

>>674865

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

>>674922

Гет параметры используй

>>674974

Он просто удаляет авторизационные куки.

>>675021

> http://ideone.com/rciJYx


Все правильно сделал

>>675030

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

>>675089

Обычно через 6-12 месяцев (cooldown) можно повторить попытку. Ну и такой вопрос можно прямо задать компании - напиши что подучился и хочешь снова попробовать, когда можно будет повторить попытку?
Ответы за 3-4 марта #982 #678140
>>674858

брейк надо в ту ветку где долг маленький

>>674865

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

>>674922

Гет параметры используй

>>674974

Он просто удаляет авторизационные куки.

>>675021

> http://ideone.com/rciJYx


Все правильно сделал

>>675030

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

>>675089

Обычно через 6-12 месяцев (cooldown) можно повторить попытку. Ну и такой вопрос можно прямо задать компании - напиши что подучился и хочешь снова попробовать, когда можно будет повторить попытку?
Ответы за 3-4 марта #983 #678142
>>675220

нужен конфиг апача

>>675276

> if ($i == 2) {


> break;


Неправильно сделано. Надо в шапке цикла прописать "продолжать цикл только пока i меньше 2", а так делать не надо.

> for ($i = 1; $i > 0; $i++) {


Какой смысл имеет $i > 0? Продолжать цикл вечно?

>>675402

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

>>675497

Куки нужны для хранения каких-то постоянныех параметров или настроек, тут подходят параметры в query string.

>>675586

Для начала нужно смотреть логи Апача.

>>675608

Можно бы вместо уменьшения length вычислять позицию последней буквы или использовать отрицательные числа.
Ответы за 3-4 марта #983 #678142
>>675220

нужен конфиг апача

>>675276

> if ($i == 2) {


> break;


Неправильно сделано. Надо в шапке цикла прописать "продолжать цикл только пока i меньше 2", а так делать не надо.

> for ($i = 1; $i > 0; $i++) {


Какой смысл имеет $i > 0? Продолжать цикл вечно?

>>675402

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

>>675497

Куки нужны для хранения каких-то постоянныех параметров или настроек, тут подходят параметры в query string.

>>675586

Для начала нужно смотреть логи Апача.

>>675608

Можно бы вместо уменьшения length вычислять позицию последней буквы или использовать отрицательные числа.
>>678163>>679042
Ответы за 4 марта #984 #678143
>>675801

Название странное. Почему PostForm? Если это форма логина - так и называй ее.

>>676220

> if ($compulsoryPayment > $monthlyPayment) {


> elseif ($compulsoryPayment < $monthlyPayment) {


А что если они равны?

Также, подумай как можно объединить похожий код в 2 ветках if, тут поможет функция min или max.

>>676252

> 39999 + 7777,


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

Подумай как убрать повторяющийся код в ветках if

>>676298

Изучал бы уже 2-ю версию.

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


Можно использовать GET парамтетр:

/login?from=/some/page&reason=need_login

> Что у нас есть из инструментов? Есть HTTP_REFERER


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

> и есть такая штука как Yii::app()->user->returnUrl с довольно странной реализацией.


Лучше не использовать тут сессии так как сессия одна на много вкладок.

> Документация у yii мутная и бессвязная,


читай исходники

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


Потмоу надо использовать query string.

В общем, ты там себе голову сломал, а все из-за непоимания того как работает протокол HTTP.

> Решил этот вопрос костылем с реферером.


Это именно что кривой костыль

> То ли у меня не хватает опыта,


Не хватает знания HTTP и того какие в нем есть средства для передачи данных (куки, URL итд). Ну и опыта, да.

>>676648

Не знаю. Может тебе CMS искать?

>>676693

> Перед тем как значения отправятся в класс формы, значения $_POST пока не существуют,


POST существует всегда, только может быть пуст. Использовать его надо если HTTP метод == POST

> foreach ($_POST as $value) {


> $value = is_scalar($value) ? $value : '';


> $value = trim($value);


Это не меняет значения в POST, также ты не должен пытаться их менять. Вообще, тут все неправильно. Ты читал мой урок про работу с формами?
Ответы за 4 марта #984 #678143
>>675801

Название странное. Почему PostForm? Если это форма логина - так и называй ее.

>>676220

> if ($compulsoryPayment > $monthlyPayment) {


> elseif ($compulsoryPayment < $monthlyPayment) {


А что если они равны?

Также, подумай как можно объединить похожий код в 2 ветках if, тут поможет функция min или max.

>>676252

> 39999 + 7777,


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

Подумай как убрать повторяющийся код в ветках if

>>676298

Изучал бы уже 2-ю версию.

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


Можно использовать GET парамтетр:

/login?from=/some/page&reason=need_login

> Что у нас есть из инструментов? Есть HTTP_REFERER


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

> и есть такая штука как Yii::app()->user->returnUrl с довольно странной реализацией.


Лучше не использовать тут сессии так как сессия одна на много вкладок.

> Документация у yii мутная и бессвязная,


читай исходники

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


Потмоу надо использовать query string.

В общем, ты там себе голову сломал, а все из-за непоимания того как работает протокол HTTP.

> Решил этот вопрос костылем с реферером.


Это именно что кривой костыль

> То ли у меня не хватает опыта,


Не хватает знания HTTP и того какие в нем есть средства для передачи данных (куки, URL итд). Ну и опыта, да.

>>676648

Не знаю. Может тебе CMS искать?

>>676693

> Перед тем как значения отправятся в класс формы, значения $_POST пока не существуют,


POST существует всегда, только может быть пуст. Использовать его надо если HTTP метод == POST

> foreach ($_POST as $value) {


> $value = is_scalar($value) ? $value : '';


> $value = trim($value);


Это не меняет значения в POST, также ты не должен пытаться их менять. Вообще, тут все неправильно. Ты читал мой урок про работу с формами?
#985 #678148
>>678123
10 пробовал на виртуалке? 8 шустрее, чем 7, 10 шустрее, чем 8. Видимо, научились оси пилить наконец.
>>678152
#986 #678150
>>673314
>>673310

>бросить айти


И дальше что? Ты, видимо, не в курсе ситуации в других профессиональных сферах - там она намного хуже. Ойтишники просто не представляют себе, насколько они охуели и зажрались.
>>678155
#987 #678152
>>678148

Ей вроде нужна какая-то фича в процессоре, которой у меня то ли нет, то ли в виртуал боксе нет. Она наверно в 32-разрядной системе и не пойдет. А вообще семерка мне понадобилась только ради анализа снятых xperf трейсов.
#988 #678155
>>678150

>там она намного хуже


В том числе и по зарплатам. Особенно по зарплатам. Нигде больше не будут платить ни за хуй собачий. Я безмерно рад тому, что живу во время обезумевшего IT-хайпа, и не знаю, что бы ленивая жирная свинья вроде меня делала, родись она лет на 20 раньше. Наверное, я бы повесился нахуй.
>>678157
#989 #678156
>>678127

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


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

>Я не знаю зачем ты заливаешь свои образовательные эксперименты в интернет


хочу поковырять всякие социальные АПИ, им вроде как обычно нужен адрес до которого они могут достучаться.
#990 #678157
>>678155

А бизнесом нельзя каким-нибудь заниматься? Неужели все дело в айти? Варламов пишет он 3д моделированием первые деньги заработал.
>>678160>>678162
#991 #678160
>>678157
В кремлевской кормушке твой Варламов зарабатывает. А 3д моделирование это чтобы ничего такого не подумали.
#992 #678162
>>678157
Ойти можно рассматривать как бизнес, почему нет? Пока IT-бизнес у нас еще не задавили, хотя поползновения имеются. По крайней мере, ситуация здесь куда лучше, чем в каком-нибудь продуктовом, где к тебе выстроится огромная очередь проверяющих с протянутой рукой.

>Варламов


Не говорит, сколько ему Потупчик перечисляет? Ну и правильно.
>>678175
#993 #678163
>>678142

>Куки нужны для хранения каких-то постоянныех параметров или настроек, тут подходят параметры в query string.


Ему там авторизация нужна, как я понял. Для неё использовать куки.
>>678176
#994 #678168
>>673310
До тех пор пока нам не закроют интернет окончательно, проблем с айти вакансиями не будет. В западных странах полно контор, в которых управляющие мечтают заменить разжиревших местных программистов получающих $100/час на неприхотливых дикарей, для которых и 15/час - заоблачные суммы.
#995 #678175
>>678162

А что делать людям, которым неинтересно программирование или надоело? Хотя это конечно оффтопик.

Алсо на западе та же ерунда, непрограммисты живут довольно бедно, https://vc.ru/p/yelp-fired
>>678183>>678210
#996 #678176
>>678163

Нет, ему надо выводить сообщение почему пользователя перебросило на форму логина. И сохранять обратный адрес для возврата.
>>678439
#997 #678183
>>678175

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


Не знаю.

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


Ну, блджад, это охуеть пример, конечно - Сан-Франциско и СИЛИКОНОВАЯ ДОЛИНА с охуевшими работодателями и риэлторами, дерущими по три шкуры. Работодатели там могут предложить зарплату ниже среднерыночной, т.к. там на каждую вакансию толпа народу, жаждущего работать в ТАКИХ-ТО КОМПАНИЯХ, и это еще касается IT-персонала. Как там жить понаехавшей обслуге типа курицы из статьи по ссылке, я не знаю. Это как понаехать в Москву из мухосрани и жаловаться, что 30 тыщ за работу кассиром в Ашане хватает только на съем халупы в трех километрах от метро - у нас-то это никого почему-то не удивляет.
>>678192
Новый тред #998 #678188
Переходите в новый тред >>678185 (OP)

На посты за 4-6 марта, на которые я пока не ответил, я отвечу тут.

Не пишите здесь больше. Переходите в новый тред.
>>678277
#999 #678190
+--classes - тут у меня родительский класс Class.php
|
|
+--subclass - тут у меня класс наследующий класс /classes/Class.php с именем Subclass
|
|
+index.php - а тут я создаю экземпляр Subclass

Как мне сделать, чтобы всё это автоматически подключалось и не нужно было бы при добавлении новых классов писать бесконечные include
>>678197
#1000 #678192
>>678183

> Это как понаехать в Москву из мухосрани и жаловаться, что 30 тыщ за работу кассиром в Ашане хватает только на съем халупы


Можно не ехать в Москву, аренда жилья дешевле но и зарплаты намного ниже. Думаю и в США так же - в СФ минимальная з/п $12.15, а в других штатах может быть 6-8 в час. Алсо пост в оригинале читать интереснее, и комментарии тоже.

Переходите в новый тред >>678185 (OP)
#1001 #678197
>>678190

В новый тред плиз.

Тебе же выше написали про файл boostrap.php >>675906

АЛсо читай пост про автозагрузку https://github.com/codedokode/pasta/blob/master/php/autoload.md
#1002 #678209
Первая задача по css https://jsfiddle.net/a0a7e51v/ если есть время, можете проверить?
>>682836
#1003 #678210
>>678175

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


На западе врачи и юристы например, получают куда больше программистов, а эта тян могла бы снимать квартиру с кем-то вдвоём и у ней бы не было проблем тогда.
643 Кб, 2560x1600
#1004 #678212
>>664784 (OP)
Упражнение "Клавиша Шифт" в "Повторим?":
http://ideone.com/g82wBb
Что-то мне подсказывает, что есть метод получше.
>>678275>>682838
#1005 #678226
Вторая задача по css https://jsfiddle.net/aeqp2pq5/
>>682838
#1006 #678230
>>678130

>Что ты за ерунду пишешь


Братишка, ОП, согласен со всем, именно поэтому и не пропустил эти уроки на HTML и CSS.
Но я ведь изучаю только для своего проекта, мне кажется, вполне хватило бы и поверхностных знаний для такого.
Однако решаю все эти задачи ещё и просто из-за уважения к тебе - ты плохого не посоветуешь. Также хочу после того, как достигну кондиции, сделать сервис для братишек и себя по твоим урокам, который будет позволять отслеживать овладение предметом. Список с простановкой "галочек" и заполнением общего прогресс-бара изучения, возможность хранить ссылки на Идеоне со своими решёнными задачами, а также твои ответы и разборы задач - чтобы переработать свою задачу, когда захочется вернуться и сделать всё по-человечески. Думаю, вполне будет мне по силам через некоторое время.
Ну и просто есть Bootstrap, есть готовые шаблоны для фреймворков - для моего проекта, ради которого стал всё изучать, этого всего было бы достаточно.
Пока всё доделываю главное задание - шаблон страницы. Всего ушло на это три недели, многими решениями не доволен, кое-какой момент не удалось решить (data-ref в задаче про "непредсказуемость непредсказуема").
Просто пытаюсь оправдаться перед тобой: я жалуюсь, но ведь делаю. Многие, кто не жалуется, - и не делали ничего, просто перешагнули.
>>682838
#1007 #678250
Четвёртое задание по CSS https://jsfiddle.net/j3hsp8bg/
>>678277>>682839
#1008 #678255
Пятая задача https://jsfiddle.net/smpwuf8k/
>>678277>>682839
#1009 #678275
>>678212
$clearedSentence = preg_replace('/[ ]{2,}/', "", $currentSentence);
$noSpaceComas = preg_replace('/[ ],/', ",", $clearedSentence);
$addSpaceComas = preg_replace('/,/', ", ", $noSpaceComas);
$clearSpaces = preg_replace('/[ ][ ]/', " ", $addSpaceComas);
Вот это всё - жуткий быдлокодинг.
Тут надо два массива с регулярками и заменами, всё пропустить через одну функцию preg_replace.
#1010 #678277
#1011 #678285
Задание 6 https://jsfiddle.net/t03a2v4q/ что-то я не смог справиться без вот этого селектора * { } в рекомендациях написано его не использовать, но а как скинуть все стандартные отступы?
>>682839
#1012 #678439
>>678176
Смешались в кучу кони, люди…
Речь вот об этом >>674922
>>682839
#1013 #679042
>>678132
>>678142
ОП, спасибо, читаю кинутые тобой доки, в который раз понимая свое неумение гуглить и важность сначала посмотреть на сайте авторов апача/пыха, а не на васянских.
Только я не совсем понимаю:
1) Есть ли какая-нибудь разница между
<VirtualHost _default_:80> и <VirtualHost :80>
Результат работы какой-то одинаковый у обеих.
2) Если
:80 или _default_:80 указаны НЕ самым первым виртуальным хостом, но по умолчанию (например, по 127.0.0.1 или белому ip) все равно откроется тот виртуальный хост, что прописан первым, а не этот дефолтный. Какой тогда смысл? Перезагружал, три раза.
3) Я хотел попробовать разместить разные сайты на разных портах (один виртуал хост на 80ом, другой на 81ом), но соснул хуйца. Это из-за того, что 81ый порт не слушается апачем или потому, что он закрыт? Как исправить? Можно ли наоборот вообще запретить апачу и мускулу работать с внешней сетью, будучи доступными только для локалки (типа безопасность тестового сервера)?
>>679043
#1014 #679043
>>679042
ПЕРЕСПРОСИЛ В НОВОМ ТРЕДЕ
#1015 #679502
привет анончик, сейчас закончу книгу Кевина Янка по пхп и ворвусь сюда писать файлообменничек.

Пока реквестирую ваше резюме. Обезличьте плз, мне интересны вот какие моменты:
1) Курсы и вебинары всякие вы записываете в резюме?
2) Книги?
3) Как оформляли портфолио проектов своих?

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

Спасибо, анончик

мимо-сеошник/верстальщик-переходящий-в-кодеры
>>679751>>682842
#1016 #679751
>>679502

>кевин янк


Это книга для энтри левела или как?
>>680220>>680264
#1017 #680220
>>679751
да, я прошел кодакадеми и теперь взялся за Кевина. Просто поэтапно поясняют за пхп, ооп и скл и потом на основе знаний заставляют писать свою небольшую цмску. Дальше лежит Мэтт Зандстра.
#1018 #680264
>>679751
единственное, что меня в ней смущает, так это конструкции try-catch. Когда я гуглил про pdo
(http://phpfaq.ru/pdo)
в этой статье такой метод обоссали - использование try-catch.
Их очень дохрена выходит. Вообще какой в них смысл? Ошибка если есть то и так вываливается. В книге аргумент, мол, зайдет юзер, а у тебя кусок кода с паролем-юзером БД вывалится.
>>682842
Новый тред #1019 #680280
Мы 2 дня уже сидим в новом треде >>678185 (OP)

Не пишите тут ничего, пишите в новом треде.

На посты с 4 по 6 марта я напишу тут ответы - может вечером, может завтра, как время будет.
#1020 #680581
Привет.
Джва вопроса:
1. Почему \n не переносит строку? Использую Апач+пхп, т.е. запускаю файлы с программой в броузере.
2. Зачем в еcho переменные пишутся в скобках: echo "Foo {$bar}" ?
>>682842
#1021 #682802
Анончик, а почему ОП ругается из-за занесения в функцию массива, содержащего слова?
>>682832
Ответы 5 февраля - калькулятор #1022 #682831
>>676924

> define( 'UNDEFTOK', '0' );


Лучше испьзовать константы класса. Имена лучше давать полные, например TOKEN_UNDEFINED, чтобы не надо было расшифровывать сокращения

То же касается и переменных, не надо сокращать так: tok, tok_type

> private function isoperator($tok){


> return preg_match_all


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

Слова в имени функции надо разделять: isOperator

Класс спроектирован плохо, это не ООП а просто свалка из функций. Вот смотри, какие есть публичные поля и методы:

class Calculator {
public $parse_string = "";
function __construct($str);
public function get_token();
public function compute();
public function addOrSubtractMembers(&$result);
public function multiplyOrDivide(&$result);
public function processingDegree(&$result);
public function unaryOperation(&$result);
public function processingBrackets(&$result);
public function receiveValueNumber(&$result);
}

Вот теперь попробуй по списку понять какие методы надо вызывать и в каком порядке. Я не понимаю, например.

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

Также, класс называется Калькулятор и можно подумать что он может вычислить несколько выражений. Но тогда почему ему в конструктор (один раз) передается какая-то строка? Если он вычисляет только одно выражение, то как минимум он должен называться по-другому.

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

class Calculator {
public function compute($expression)
}

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

class MathExpression {
public function __construct($expression);
public function compute();
}

Посмотри на эти примеры и сравни со своим кодом.

Более того, тут можно было бы вынести наружу класс, делающий токенизацию и отделить его от парсинга. Например так:

class Tokenizer {
__construct($expression);
public function fetchNextToken();
}

Также по моему опыту, иногда бывают полезными дополнительные методы, например peekToken (посмотреть следующий токен не поглощая его), consumeToken($type) (вызывает ошибку если идущий далее токен не такого типа). Около констант токенов стоит написать комментарии.

У тебя же токенизация и парсинг смешаны в один класс.

У тебя я вижу используется recursive descent. Стоило бы упомнянуть это в комментарии.

> public function unaryOperation(&$result)


Почему аргумент передается по ссылке, а не возвращается через return? Зачем усложнять?

Также, имя функций начинается с глагола.

> private $token_type = 0;


Разве тип токена не константами должен обозначаться? Почему ноль?

> private $token_type = 0;


> $this->tok_type = ENDPARSE;


Название поля написано по-разному.

> echo "Выражение отсутствует";


Почему класс что-то выводит на экран без разрешения?

> echo "Делим на ноль";


> exit(-1);


Для этого есть исключения

> $this->get_token();


> if($this->token == ""){


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

> public function multiplyOrDivide(&$result){


> $temp = 0.0;


>


А правильно что тут начальное значение ноль? А, оно не используется. Но все равно странно смотрится.

В общем, я вижу что с алгоритмом парсинга ты разобрался, а с ООП и оформлением кода пока все плохо. Давай исправим программу.
Ответы 5 февраля - калькулятор #1022 #682831
>>676924

> define( 'UNDEFTOK', '0' );


Лучше испьзовать константы класса. Имена лучше давать полные, например TOKEN_UNDEFINED, чтобы не надо было расшифровывать сокращения

То же касается и переменных, не надо сокращать так: tok, tok_type

> private function isoperator($tok){


> return preg_match_all


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

Слова в имени функции надо разделять: isOperator

Класс спроектирован плохо, это не ООП а просто свалка из функций. Вот смотри, какие есть публичные поля и методы:

class Calculator {
public $parse_string = "";
function __construct($str);
public function get_token();
public function compute();
public function addOrSubtractMembers(&$result);
public function multiplyOrDivide(&$result);
public function processingDegree(&$result);
public function unaryOperation(&$result);
public function processingBrackets(&$result);
public function receiveValueNumber(&$result);
}

Вот теперь попробуй по списку понять какие методы надо вызывать и в каком порядке. Я не понимаю, например.

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

Также, класс называется Калькулятор и можно подумать что он может вычислить несколько выражений. Но тогда почему ему в конструктор (один раз) передается какая-то строка? Если он вычисляет только одно выражение, то как минимум он должен называться по-другому.

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

class Calculator {
public function compute($expression)
}

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

class MathExpression {
public function __construct($expression);
public function compute();
}

Посмотри на эти примеры и сравни со своим кодом.

Более того, тут можно было бы вынести наружу класс, делающий токенизацию и отделить его от парсинга. Например так:

class Tokenizer {
__construct($expression);
public function fetchNextToken();
}

Также по моему опыту, иногда бывают полезными дополнительные методы, например peekToken (посмотреть следующий токен не поглощая его), consumeToken($type) (вызывает ошибку если идущий далее токен не такого типа). Около констант токенов стоит написать комментарии.

У тебя же токенизация и парсинг смешаны в один класс.

У тебя я вижу используется recursive descent. Стоило бы упомнянуть это в комментарии.

> public function unaryOperation(&$result)


Почему аргумент передается по ссылке, а не возвращается через return? Зачем усложнять?

Также, имя функций начинается с глагола.

> private $token_type = 0;


Разве тип токена не константами должен обозначаться? Почему ноль?

> private $token_type = 0;


> $this->tok_type = ENDPARSE;


Название поля написано по-разному.

> echo "Выражение отсутствует";


Почему класс что-то выводит на экран без разрешения?

> echo "Делим на ноль";


> exit(-1);


Для этого есть исключения

> $this->get_token();


> if($this->token == ""){


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

> public function multiplyOrDivide(&$result){


> $temp = 0.0;


>


А правильно что тут начальное значение ноль? А, оно не используется. Но все равно странно смотрится.

В общем, я вижу что с алгоритмом парсинга ты разобрался, а с ООП и оформлением кода пока все плохо. Давай исправим программу.
#1023 #682832
>>682802

Потому что можно сделать универсальную функцию склоняющее любое слово. То есть нет никакой необходимости вообще закладывать конкретные варианты слов в функцию. А те кто закладывают делают функцию менее универсальной и усложняют код непонятно с какой целью. Надо делатьт проще.
Ответы 5 февраля #1024 #682834
>>677113

Потому что у mb_substr 3 аргумента, а не 4.

Скобки тут работают так же как в математике - задают порядок выполнения операций.

>>677225

Брр, синглтоны, я думал мода их писать везде давно уже прошла.

>>677257

Да, ты прав. Знаешь, как исправить? наверно сделать еще проверку что стек не пуст - не поможет так как там минус идет как оператор с 2 аргументами

Также, я заметил еще одну вещь, которую можно улучшить:

> protected $associative = null;


> if (is_null($this->associative)){


> throw new Exception('Associative is empty');


Это проверка, не забыли ли при наследовании класса определить поле. Такие вещи лучше делать через абстрактные методы: abstract function getAssociativity();

> '+' => 'add',


В новом PHP можно исплоьзовать сразу имя класса (и получить проверку интерпретатором что оно правильное):

'+' => AddOperator::class

>>677457

Надо смотреть как читается лучше.

>>677919

Зависит от задач. Можно использовать display: table или float. А вот зачем ты в кучу мешашь флоаты и инлайн-блоки - не очень понятно.
Ответы 5 февраля #1024 #682834
>>677113

Потому что у mb_substr 3 аргумента, а не 4.

Скобки тут работают так же как в математике - задают порядок выполнения операций.

>>677225

Брр, синглтоны, я думал мода их писать везде давно уже прошла.

>>677257

Да, ты прав. Знаешь, как исправить? наверно сделать еще проверку что стек не пуст - не поможет так как там минус идет как оператор с 2 аргументами

Также, я заметил еще одну вещь, которую можно улучшить:

> protected $associative = null;


> if (is_null($this->associative)){


> throw new Exception('Associative is empty');


Это проверка, не забыли ли при наследовании класса определить поле. Такие вещи лучше делать через абстрактные методы: abstract function getAssociativity();

> '+' => 'add',


В новом PHP можно исплоьзовать сразу имя класса (и получить проверку интерпретатором что оно правильное):

'+' => AddOperator::class

>>677457

Надо смотреть как читается лучше.

>>677919

Зависит от задач. Можно использовать display: table или float. А вот зачем ты в кучу мешашь флоаты и инлайн-блоки - не очень понятно.
Ответы 5 марта #1025 #682836
>>677984

centerX/Y лучше бы вычислять из ширины/высоты, а не прописывать руками.

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

Так, в общем, верно решено.

>>677998

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

> global $token, $token_type, $exp_ptr;


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

Использование регулярок по моему неудачная идея. Вот как это проверить? Как гарантировать что оно во всех случаях будет правильно работать?

Если ты уж хочешь использовать регулярки - используй их на полную мощь как описано тут https://habrahabr.ru/post/171667/ .

> /(^-[\d\.]{1,})


Это не увидит унарный минус внутри скобок

> if(preg_match_all("/(\()/u", $stringExpression, $match) != preg_match_all("/(\))/u", $stringExpression, $match))


лучше substr_count

> "/([\/\*\-\+\^\(])(\-[\d\.]{1,})


Это заменяет некорректное выражение вроде --6 на корректное -0-6

В общем, мне кажется подход выбран не очень удачный.

> function convertReversePolishNotation(&$stringExpression){


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

> function compute(&$stringExpression){


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

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

> if($stack->count() == 0){


> $stack->push($token);


> } else {


> if(returnPpiopitet($token) > returnPpiopitet($stack->top())){


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

Функция function convertReversePolishNotation(&$stringExpression) слишком длинная. Надо разбивать на части.

В общем, надо переделывать код.

>>678209

> width: 66%;


> border: 1px black solid;


> margin-left: 34%;


Одно из 2 тут лишнее - либо margin-left либо width. Также, с учетом бордера в сумме получилось на 2 пикс больше чем 100%. Ты учел что блоки автоматически растягивают свою ширину и ее можно не указывать.
Ответы 5 марта #1025 #682836
>>677984

centerX/Y лучше бы вычислять из ширины/высоты, а не прописывать руками.

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

Так, в общем, верно решено.

>>677998

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

> global $token, $token_type, $exp_ptr;


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

Использование регулярок по моему неудачная идея. Вот как это проверить? Как гарантировать что оно во всех случаях будет правильно работать?

Если ты уж хочешь использовать регулярки - используй их на полную мощь как описано тут https://habrahabr.ru/post/171667/ .

> /(^-[\d\.]{1,})


Это не увидит унарный минус внутри скобок

> if(preg_match_all("/(\()/u", $stringExpression, $match) != preg_match_all("/(\))/u", $stringExpression, $match))


лучше substr_count

> "/([\/\*\-\+\^\(])(\-[\d\.]{1,})


Это заменяет некорректное выражение вроде --6 на корректное -0-6

В общем, мне кажется подход выбран не очень удачный.

> function convertReversePolishNotation(&$stringExpression){


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

> function compute(&$stringExpression){


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

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

> if($stack->count() == 0){


> $stack->push($token);


> } else {


> if(returnPpiopitet($token) > returnPpiopitet($stack->top())){


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

Функция function convertReversePolishNotation(&$stringExpression) слишком длинная. Надо разбивать на части.

В общем, надо переделывать код.

>>678209

> width: 66%;


> border: 1px black solid;


> margin-left: 34%;


Одно из 2 тут лишнее - либо margin-left либо width. Также, с учетом бордера в сумме получилось на 2 пикс больше чем 100%. Ты учел что блоки автоматически растягивают свою ширину и ее можно не указывать.
Ответы 5-6 марта #1026 #682838
>>678212

> [ ]


можно писать просто пробел или \\s

> = preg_replace('/[ ]{2,}/', "", $currentSentence);


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

> $noSpaceComas = preg_replace('/[ ],/', ",", $clearedSentence);


> $addSpaceComas = preg_replace('/,/', ", ", $noSpaceComas);


Это надо объединить в одну регулярку, зачем две? Тут достаточно 2 регулярок: первая для исправления пробелов вокруг знаков препинания, вторая для исправления многократных пробелов.

> $clearSpaces = preg_replace('/[ ][ ]/', " ", $addSpaceComas);


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

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

>>678226

> max-height: 600px;


Почему 600? Откуда эта цифра? И зачем это?

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

В общем, задача требует доработки.

>>678230

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


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

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


Да не факт. Бутстрап не заменяет знания КСС и ты это поймешь как только захочешь сделать чуть не так как в примерах.

> кое-какой момент не удалось решить (data-ref в задаче про "непредсказуемость непредсказуема").


Там надо использовать псевдоэлемент и функцию attr. погугли.

Ну и смотри, это ты сейчас думаешь что тебе только для совего проекта, а потом тебя например позовут куда-нибудь в реальнй проект, а ты ксс не знаешь.
Ответы 5-6 марта #1026 #682838
>>678212

> [ ]


можно писать просто пробел или \\s

> = preg_replace('/[ ]{2,}/', "", $currentSentence);


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

> $noSpaceComas = preg_replace('/[ ],/', ",", $clearedSentence);


> $addSpaceComas = preg_replace('/,/', ", ", $noSpaceComas);


Это надо объединить в одну регулярку, зачем две? Тут достаточно 2 регулярок: первая для исправления пробелов вокруг знаков препинания, вторая для исправления многократных пробелов.

> $clearSpaces = preg_replace('/[ ][ ]/', " ", $addSpaceComas);


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

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

>>678226

> max-height: 600px;


Почему 600? Откуда эта цифра? И зачем это?

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

В общем, задача требует доработки.

>>678230

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


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

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


Да не факт. Бутстрап не заменяет знания КСС и ты это поймешь как только захочешь сделать чуть не так как в примерах.

> кое-какой момент не удалось решить (data-ref в задаче про "непредсказуемость непредсказуема").


Там надо использовать псевдоэлемент и функцию attr. погугли.

Ну и смотри, это ты сейчас думаешь что тебе только для совего проекта, а потом тебя например позовут куда-нибудь в реальнй проект, а ты ксс не знаешь.
Ответы #1027 #682839
>>678250

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

Также, цвета хорошо бы сделать как на картинке.

>>678255

> span {


> display: inline-block;


Вообще-то это неправильно. Вот смотри что будет если выделенный текст занимает несколько строк: https://jsfiddle.net/smpwuf8k/1/ - этот текст вырывается в отдельный блок. Изучи как ведет себя свойство display: inline, чем инлайн-элементы отличаются от инлайн блоков - это важно. И конечно читай учебник на сайте softwaremaniacs если ты его еще не читал.

>>678285

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

Отступы между пунктами меню надо сделать больше.

Шрифт не тот - там требушет. Цвет заголовка не тот.

Почему заголовок сделан тегом h3? Почему ты именно его выбрал? Что значит цифра 3 тут?

> div {


> padding: 5px 10px;


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

> <div class="title">


> <h3>ООО АГРОСЕРВИС</h3>


Зачем тут div.title?

Если текста много, он заваливается на меню: https://jsfiddle.net/t03a2v4q/3/

Если в тексте есть цветной див, он проваливается под меню: https://jsfiddle.net/t03a2v4q/4/

Если убрать меню, текст уедет влево.

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

>>678439

Да, я мог перепутать.
Ответы #1027 #682839
>>678250

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

Также, цвета хорошо бы сделать как на картинке.

>>678255

> span {


> display: inline-block;


Вообще-то это неправильно. Вот смотри что будет если выделенный текст занимает несколько строк: https://jsfiddle.net/smpwuf8k/1/ - этот текст вырывается в отдельный блок. Изучи как ведет себя свойство display: inline, чем инлайн-элементы отличаются от инлайн блоков - это важно. И конечно читай учебник на сайте softwaremaniacs если ты его еще не читал.

>>678285

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

Отступы между пунктами меню надо сделать больше.

Шрифт не тот - там требушет. Цвет заголовка не тот.

Почему заголовок сделан тегом h3? Почему ты именно его выбрал? Что значит цифра 3 тут?

> div {


> padding: 5px 10px;


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

> <div class="title">


> <h3>ООО АГРОСЕРВИС</h3>


Зачем тут div.title?

Если текста много, он заваливается на меню: https://jsfiddle.net/t03a2v4q/3/

Если в тексте есть цветной див, он проваливается под меню: https://jsfiddle.net/t03a2v4q/4/

Если убрать меню, текст уедет влево.

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

>>678439

Да, я мог перепутать.
Ответы #1028 #682842
>>679502

1) не пишу. Если курсы серьезные то можно указать.
2) не пишу, бред же.
3) скриншот + краткое пояснение что я делал

>>680264

Тебе надо разобраться в обработке ошибок и исключениях. Как по твоему надо обрабатывать ошибки? Читай урок про исключения, https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

>>680581

### переносы строк и br

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

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

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

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

> Зачем в еcho переменные пишутся в скобках:


мануал http://php.net/manual/ru/language.types.string.php#language.types.string.parsing
Тред закрыт #1029 #682844
Не пишите больше тут, переходите в новый >>678185 (OP)

Если я вас пропустил, напомните о себе в новом треде.
#1030 #689172
Более адекватной шапки и ОПа я не видел, наверное, никогда на дваче за 5 лет. Моё уважение всему, что ты здесь делаешь, это очень и очень здорово.

Не обоссывайте только, решил намазаться веб-кодингом, нашёл видеокурсы Евгения Попова по html и css, сейчас на завершающей главе html, делаю всё за ним, разумеется, пока получается, ибо тут только дурак не справится. Этот Попов вообще норм чел?
И по какому пути следовать при обучении:
1)HTML > CSS > JavaScript (+JQuery) > PHP+MySQL;
2)HTML > CSS > PHP+MySQL > JavaScript (+JQuery);
3)HTML > PHP+MySQL > CSS > JavaScript (+JQuery)?

Сейчас объясню, что мне хочется. Я просто сам по себе пока не получу первый мало-мальски годный результат, не смогу углубиться полностью в изучение. В каком порядке мне лучше изучать всё это, чтобы я как можно быстрее смог заработать первые доллары? Это не значит, что я сразу полезу везде орать, что я у мамы программист, просто после этого я буду уверен, что время трачу не зря и заработать ТОЧНО смогу и буду углублённо изучать каждый элемент.
В общем, в какой последовательности мне это учить для достижения быстрого результата? И в какой лучше с точки зрения рациональности и вашего опыта?
>>689174
#1031 #689174
>>689172
И да, по времени, если можно, проконсультируйте меня, сколько дней уйдёт на обучение по двум моим веткам (быстрой и рекомендованной).
Я просто учусь и подрабатываю немного, хотелось бы рассчитать, могу ли дропнуть работу, чтобы потратить всё время на обучение и уже начать зарабатывать на жрат.
#1032 #689219
Где взять какой-нибудь пак задач, которые похожи на те, которые на сайте в шапке? Хочу научиться пользоваться стандартными функциями как гуру. Спасибо
43 Кб, 400x681
#1033 #689330
>>664784 (OP)
Ребят, как настроить xdebug в open server на phpstrom?
Что бы можно было по людски выделять строчку, и нажимать жучка и видеть в консоли что хрониться в переменной, делать пошаговую отладку?
#1034 #689922
А как вообще в жизни выглядит написание сайта?
1)Берётся WordPress, вставляются туда свои данные, картиночки, ???????, PROFIT!
2)Берётся WordPress, делается основной каркас, затем открывается код, плюётся на индусопись, стирается, пишется руками на пхп.
3)Сразу берётся и пишется руками на пхп?
4)Берётся уже написанный ранее сайт, редактируются css-стили, вставляются новые картиночки, новый сайт готов?
>>689972
#1035 #689972
>>689922
От задач зависит, так делаются сайты - визитки
#1036 #689984
Пограммисты-пограммистушки, поясните за код

http://ideone.com/OWQsMA

Сначала нужно проверять имя, это чек
Затем номер - чек
Затем в номере только цифры - не чек.

Если ввести буквы - выводит что номер превысил 13 символов.

Как бы вы сделали и в чем упущения?
До этого вообще проверки с регулярками не юзал, только на ограничение символов.
181 Кб, 1366x768
#1037 #690611
Подскажи, Двач, я уже охуел искать что не так! Всё установил - нихуя не могу запустить!
#1038 #691859
В чём преимущество пхп? Почему стоит учить его, а не другой?
8 Кб, 201x411
Евгеничка Сырнов #1039 #692495
Вот решил задачу в "Объекты в PHP, часть 2"
Правильно все ли я сделал?Есть замечания?
Код по ссылке.
http://pastebin.com/bFdzVPWW
Заранее спасибо
#1040 #692886
Выручайте, няши, запарололся на самой простой задаче в регулярных выражениях.

http://ideone.com/e.js/wAJYbG
Нужно проверить соответствует ли текст нужному шаблону.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 21 марта 2016 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски