Добро пожаловать в наш уютный тредик. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.
Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).
Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).
Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП отвечает даже на самые нубские вопросы. ОП заходит где-то раз в день-два, не жди его, решай задачки дальше.
У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.
Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.
Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.
Вот небольшой туториал по тому как начать использовать PHP на сервере для отдачи странички в браузер: https://php.net/manual/ru/tutorial.php Увы, уроков плавно подводящих к тому, как сделать задачи выше, пока нет, так что если что, задавай вопросы.
Решения задач лучше показать мне, особенно на ООП,так как сам ты вряд ли увидишь все ошибки. Пости свой код на гитхаб и вкидывай ссылку в тред по мере решения. Я прокомментирую и укажу на ошибки.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
Нужен ли ООП, фреймворки, 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) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Прочти: Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.
Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.
Вообще, в 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 пробела)
Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:
Итак, ты зашел в тред и решил помочь какому-то анону, дав ему совет или подсказку. Спасибо! Но прочти сначала эти напоминания, чтобы твоя помощь действительно была полезной.
Будь доброжелателен
Не годится: «Ты мануал хоть раз в жизни открывал, обезьяна?» Не годится: «В гугле забанили?» Не годится: «Твой код плохой» Хорошо: «Вот, как можно улучшить этот код: ...» Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»
Не придирайся к знанию английского языка.
Объясняй
Не очень хорошо: «сделай как в этом коде» Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)» Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»
Не проповедуй
Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.
Не придирайся к знанию английского языка, анон пишет как умеет.
Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
>>613285 Оп исправил почти все твои замечания http://integer64.github.io/site-layout/ Задача 10: >>Почему width 100%? Гугль дал такое решение для адаптивности картинок Задача 11: >>перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом. Реализовал, добавил для checkbox на :focus бордер тень,что бы было видно. Задача 12: Переделал, совсем без id у меня не получилось, надо было как то input с label связать. Может быть есть другое решение. Связал вкладки и контент вкладок через data-атрибуты. Хотелось бы в CSS полноценные регулярные выражения, тогда решение было бы более эстетичное. Возник вопрос по поводу длинны названия вкладки: три раза прочитал, так и не понял что требуется, разжуй пожалуйста, для самых глупеньких вроде меня.
Как посчитать хеш файла (ну, чтобы установить подлинность или сравнить два файла)? Тупо md5(file_get_contents(файл))? Будет ли такая проверка однозначно устанавливать идентичность файлов при совпадении их хэшей? Алсо, если файлов много - случаются пиздец тормоза, а скрипт все-таки не бесконечно работать может.
Кто-нибудь обьяснит мне без троллинга, щюточек и петросянства, круг применения регулярок? Я понимаю мэйл проверить или грамматику, но ведь это по большому счёту очень узкий круг. Ну тоесть я например написал проверку форм для регистрации. А потом пишу ещё 99.9% кода для всего остального. Стоит ли заморачиваться с этим так, как вы в 2 прошлых тредах заморачивались?
Однако скрипт проверки на ошибки (пока совсем топорный вариант, но хоть на что-то похоже): https://ideone.com/vSnFKo Далее попробую с помощью функций вывести кусок текста с ошибкой, а не с помощью регулярок.
>>619815 Сюка, аж в голос!... Действительно же, блиять... Но, кстати, нет: там нам надо будет искать именно отсутствие пробела и отсутствие букв перед "а" или "но". Иначе придётся делать регулярки с другими символами (конца предложения, например) или полагаться на ту регулярку, которая просто ищет отсутствие пробела после знака препинания. Это не по заветам ОПа.
>>619902 > без троллинга, щюточек и петросянства Извини, но нет. Например, стоп-слова для чата, форума или просто блога (матюки убирать либо заменять их словами "розочка" и т.п., ну ты понял). Унификация данных для платёжных систем (когда номер карты вводят с дефисами или без, а биллинг требует какого-то стандарта в передаче данных) или чтобы просто удобнее хранить его в БД. Проверка на вредоносные скрипты или спам, возможно, - регулярка не позволяет ввести <script> или http (я пока не знаю, именно ли регулярки надо использовать в этом случае). Короче, применений много может быть. И не такие они и сложные, кстати, проблемы у того же меня больше с массивами и циклами.
>>619907 В прошлый раз сначала перекатились, а потом ОП там отвечал.
>>619929 >...маете?А в это... - Пропущен пробел перед союзом "а". >...учает,а также... - Пропущен пробел перед союзом "а". И в то же время: >...маете?А в эт... - Пропущен пробел после знака препинания. >...учает,а такж... - Пропущен пробел после знака препинания. Короче, что-то не то у меня в регулярке опять. А ведь только что сказал, что не так и сложно...
>>619930 Аа, я торможу, это вторая регулярка с поиском отсутствия пробелов после знаков препинания находит то же самое, что нашла первая. Надо просто исключение добавить в регулярку с поиском пробелов.
Решил перекатиться на вашу парашу. Что спрашивают на собеседованиях? Хочу за мидла сразу сойти. Хотя знаний толком нет, но действие происходит в мухосрани, там небось все такие.
>>620005 А зарплату тебе будут платить за то что ты собеседование прошел? Ты же понимаешь, что тебе нужно будет выполнять какие-то задачи, а если не сможешь, то пойдешь нахуй. Как ты без знаний будешь работать?
Здравствуйте. Суть такова: Есть куча текстовых файлов, в каждом из них на каждой новой строке есть запись вида "имя:значение". Вопрос: Как сделать так, чтобы открыть каждый файл, найти значение по имени, а затем по всем составить таблицу?
Почему ОП в своих заданиях по html/css говорит, что нельзя использовать селектор ? В итоге постоянно нужно убирать эти ебучие отступы чуть ли ни в каждом элементе. С чего вдруг плохо написать в начале файла: { margin: 0; padding:0; } И самому спокойно выставлять нужныее отступы где они нужны.
>>620121 Ну вот я например делал его 6 задание. И мне пришлось обнулять внутрнний отступ у <ul>, внешние отступы у <p> и внешние отступы у <h1>. Не легче было просто прописать вначале файла чтобы у всех элементов был нулевой отступ и самому делать их такими как мне надо, а не такими как задумано браузером?
>>620127 Если я буду верстать страницу с четко нарисованного psd макета с конкретными размерами, то очевидно все отступы я буду брать оттуда, а не пользоваться предустановленными
>>620078 Вроде, сделал, что мне надо. Только теперь надо в цикл пустить (имена файлов от 1 до 50) создание ячеек таблицы. А выходит только первый файл. ЧЯДНТ? [CODE]<?php for ($i = 1; $i <= 50; $i++) {
В чём суть механизма работы с различными API соцсетей или платёжных систем? POST-запросом через cURL отправить данные на какой-то урл с идентификационным токеном, а далее обрабоать полученный ответ-правильно я себе всё представляю?
Посоветуйте нормальных сообщест для помощи нубам в изучении Пи-Ейч-Пи. Вкудахте вообще тухло, стаковерфло? где ещё Петушиную свою конфу в телеграмме не предлагать, там филиал би, причем самой мерзкой его стороны.
>>620211 >стаковерфло Да, единственно адекватное и где могут реально помочь. Русскую версию не читал, но осуждаю.
Можешь ещё toster.ru попробовать, но там большая часть вопросов уровня "как вкатиться в 30 лет" и "по какой книжке учить джаву, чтобы заработать мильён", почти как pr в общем лол.
>>620214 Ну помимо тут. >>620216 Я че то смотрел там, на разных форумах - как же бесит, когда задает нуб вопрос, а ему тупо ссылки на мануал. Ну прямо багет на таких. Ну попробую на стак, с инргишем только не важно.
Сделал 8-е задачу ОПа по html/css - https://jsfiddle.net/7u2q9Lme/ Но получилось только с использованием margin у <p> по-другому вообще никак. Почему ОП написал, что нужно ее делать без margin для абзацев? Какое тогда еще может быть решение?
Как правильно делать на CSS на коммерческих сайтах, картиночки справой стороны или снизу у которых текст, типа 15 лет на рынке, самая лучшая методика, профессиональные кадры и т.д., такое кажется тизерами называется, такие есть и в шаблоне ОПа, там где андроид нарисован и другие картиночки. Так вот, как их правильно делать, просто как отдельными картинками и рядом текст? Или как фоновое изображение в дивах? Стоит ли делать из них специальный текст, текст из иконок?
>>620295 Задачу про Айфон в кредит уже сделал? Вот вводишь решение в функцию, как у ОПа в учебнике, а потом просто для каждого банка подставляешь их переменные в вывод функции (разные проценты в месяц, разные цифры для обслуживания кредита и т.п.). Но сначала надо дождаться ответа ОПа насчёт задачи про калькулятор кредита на Айфон. Я что-то не помню, чтобы кто-то показывал его недавно, я бы не пропустил, потому что выМучил этот калькулятор наизусть пару недель назад.
Потому что в браузере много предустановленных отступов и полей: в списках, таблицах, итд. Если их все убрать, то текст со стандартными тегами будет идти сплошной стеной.
Да и быдлокодисто как-то получается. Там, где тебе надо, там и убирай.
> Если я буду верстать страницу с четко нарисованного psd макета с конкретными размерами, то очевидно все отступы я буду брать оттуда
- сколько я не видел примеров верстки с css ресетом, никто все отступы не восстаналивал - глупо наверно сбросить отступы чтобы потом восстановить их назад на куче тегов - дизайнер не может на макете угадать что на страницу добавят через текстовый редактор администраторы - завтра появится какой-нибудь новый тег, и ты для него сбросишь отступы и не вернешь назад. - послезавтра твой коллега захочет что-то добавить на страницу и будет неприятно удивлен тем что отступов нету
Потому логика тут такая: большинство сайтов динамические, тексты на них правятся редактором, значит все теги которые могут быть в них использованы должны нормально отображаться. Значит не надо отключать отступы, делать везде одинаковый размер шрифта и тд.
> И мне пришлось обнулять внутрнний отступ у <ul>, внешние отступы у <p> и внешние отступы у <h1>.
Надо обнулять не у всех тегов ul, а только у тех которые нужны. Так как иначе твой стиль будет влиять на ul в тексте который добавит администратор и на ul которые в будущем добавит твой коллега-верстальщик.
Надо избегать таких вещей. пиши стили так, чтобы они влияли только на твои теги, помни что твоя верстка может быть будет дорабатываться, может быть ее подключат на какую-то другую страницу и тд и надо чтобы было минимум конфликтов с другими блоками на странице.
Один из способов добвиться этого - использовать БЭМ нотацию:
<ul class="menu__list"> <li>Пункт</li>
.menu__list { padding: 0; }
.menu__list > li { ... }
Вот такой стиль позволяет вставить меню в любое место страницы и не влияет на остальные элементы. Получается меню - независимый блок и это облегчает поддержку такой верстки.
В общем, старайся делать все независимыми блоками, особенно когда дойдешь до большого макета.
>>620339 >В гомо банке будем платить 12 месяцев >В мягком банке платим 12 месяцев >В клубничном банке платим 11 месяцев Хм, ты совсем не понял условия! Там надо посчитать, сколько именно денег выплатит анон во всех трёх банках, а у тебя там месяцы. Там надо получать общую выплату - попробуй её получить для всех трёх банков.
>>620339 Если поставить 1000 вместо 39999, то выдаёт, что выплачивать надо 2 месяца - значит, абсолютно неверно считает, там выплата всего 2030 рублей должна быть в один месяц.
А я как то решал задачу про банкомат. ОП меня надоумил решать её в двух вариациях, с рекурсией и без. Сколько я тогда ночей провёл, сколько, как вспомню пиздец. Всегда нервный ходил. С тех пор на эту задачу даже смотреть не могу лол
>>620380 У меня те же чувства вызывает задача на поиск путей. До сих пор с ужасом вспоминаю и по ночам просыпаюсь в холодном поту. Уже наверное больше года прошло.
>>620366 >В мягком банке платим 60260.891466803 рублей Нет, бро, считает неверно. Там должно получиться 61270 с копейками. У тебя отсутствует, получается, прибавка к оставшейся небольшой не выплаченной сумме 3% от остатка (там вроде 264 рубля должно быть) и 1000 за обслуживание кредита. Также у тебя там точка с запятой стоят за фигурными скобками. Также отсутствует часть в условии - else, там надо её поместить, иначе не по правилам. Хм, вроде бы алгоритм там у тебя выстроен верно, всё проходит правильно, но вот считает в итоге неверно, как я пояснил. Сам чё-то туплю, куда девается 1000р и 3% от остатка, всё же должно быть в итоге.
>>620380 >>620381 То сладостное чувство, когда уже на калькуляторе Айфона ходил нервный и ворочался во сне, а сейчас по-прежнему не доволен решённой задачей на поиск ошибок в тексте
>>620420 >>620431 Перепроверил всё, не могу понять, почему считает неверно. Можешь скинуть правильное решение какое-нибудь? Оче сложно найти ошибку в том, что так долго выстраивал
>>620440 Бро, сам сейчас сижу и разбираюсь, куда у тебя девается 1000р и 3% от остатка. Тем более, что считает верно на небольшой сумме. Всё-таки скину свой вариант, потому что ты же всё там выстраиваешь верно, прошел несколько раз по твоему коду. Вместе сейчас попробуем найти, где там ошибка. Вот мой вариант: http://ideone.com/7FJfGm
>>620445 Тот случай, когда совсем уж непонятно, чому неправильно. Думаю, и анончику это на пользу пойдёт.
>>620451 >>620457 Благодарю, анон, нашёл ошибку, расписав свою программу по месяцам по мягкому банку и сравнив с твоим.
11 месяц спустя: долг = 4138.1720657184 руб, выплачено всего 55000 руб. 12 месяц спустя: долг = 262.31722768997 руб, выплачено всего 60000 руб. 13 месяц спустя: долг = 0 руб, выплачено всего 61270.186744521 руб.
у меня же 12 месяц пропускался засчёт того, что я уводил при сумме меньшей, чем 5000 в if {} и там добивал всю сумму. Сейчас буду думать, как исправить
>>620463 >у меня же 12 месяц пропускался засчёт того, что я уводил при сумме меньшей, чем 5000 в if {} и там добивал всю сумму. Вот в том-то и дело, что это правильный алгоритм: при сумме меньшей или равной 5000 нужно просто выплачивать общий долг и вот эту сумму. Но эта "меньшая сумма" должна перед этим пройти прибавление 3% и 1000 за сервис. Вроде у тебя так и было. Где ошибка - не пойму, хоть ты тресни.
>>620470 Нет, у меня было раньше if ($summa < $payback), т.е. я уводил в сторону сразу при сумме 5000, без добавления 3% и 1000 за сервис. Я исправил на ($summa * $percent + $comission < $payback) и заработало.
>>620473 Вот сейчас форкнул так, как я делал, алгоритм же один, - всё заработало. http://ideone.com/o4iw1M Чёрт знает, почему прежде не получалось. ОП не одобрит оформление кода, там не по правилам же }; и отсутствие else {}.
>>620485 > по поводу else, для чего он в моём случае? В задании не было сказано, что его обязательно использовать. Это у меня ОПобоязнь, стремление сделать всё максимально по-ОПовски грамотно. Иногда вот так может заносить.
>>620486 Поддвачну. Это надо в шапку добавить. Намного меньше тупых вопросов будет, если люди внемлют этому совету. Половина вопросов в этом треде решается простым дампом. Надо бы использовать это как универсальный ответ на любой вопрос вида "анончики чому у меня не работает код?", как в видеорелейтед https://www.youtube.com/watch?v=t2F1rFmyQmY
Можешь почитать, если хочешь, но он у них очень базовый и скорее годится для ознакомления. Ну если ты считаешь что этого курса достаточно, ты ведь без проблем решишь наши задачи, правда?
Ничего не могу понять в оптимизации сокла запроса посредство индексов. Какие-то они ключи комбинируют при создании таблицы, а потом делают запрос посредством AND и измеряют миллисекунды запроса, наркоманство какое-то.
Надоели тупые вопросы шкальников, давайте создадим какой-нибудь тред для продвинутого уровня, а этот оставим под маркером "тред для beginners, задачки и тупые вопросы приветствуются". Надоело разгребать тонны вопросов про регулярки, чтобы почитать про серьезные проекты.
Вообще оптимизация - сложная тема, надо понимать как устроена БД, как хранятся данные, как выполняется запрос. Приготовься искать и читать дополнительную литературу если хочешь разобраться.
Почитай также про бинарный поиск и двоичные деревья - это связанные темы.
>>619971 Чем это лучше моего варианта? >Будет ли такая проверка однозначно устанавливать идентичность файлов при совпадении их хэшей? Алсо, если файлов много - случаются пиздец тормоза, а скрипт все-таки не бесконечно работать может.
Смотрите, что пришло в голову с задачей на проверку ошибок да-да, я снова выхожу на связь снова Берём функцию preg_split, подставляем в неё регулярки для разбивания текста на куски до ошибки и после ошибки. Далее с помощью функции mb_substr от конца первого куска отсчитываем десять символов назад и десять символов вперёд, также отсчитываем десять символов от начала второго куска. Соединяем куски просто при выводе в echo и внутрь вставляем ту ошибку из массива ошибок, которая всему этому соответствует. Звучит вроде вполне правдоподобно и вполне реализуемо. Как там на деле будет - посмотрим.
https://ideone.com/tWeZNj Задачка на проверку ошибок в тексте. Подскажите, пожалуйста, какие косяки? ideone, почему-то упорно отказывается подавать что-либо на stdout, поэтому вот тот же скрипт на tutorialspoint: http://goo.gl/v2sfaa
>>620756 Как я понял, Ideone не позволяет массивы вставлять более современным способом, как array[], только как array(). Пока не удалось запустить твоё решение, пробую поменять. >>620757 В принципе, да, можно и так, действительно. Я сделал до этого вот так: https://ideone.com/vSnFKo Но это неправильно, надо функциями это всё собирать, а не регулярками. Или я уже поехал, возможно.
Вот, попробовал поменять: https://ideone.com/sF0l6w Работает неправильно, какой-то сумбур на выходе. Но это, возможно, из-за того, что я там всё не соединил должным образом.
>>620756 Ещё и в самих регулярках у тебя там сумбур, бро. Букву "Ё" надо дополнительно указывать, потому что utf её не воспринимает при перечислении "а-я". Перед союзами "а" и "но" надо искать отсутствие пробела. Там может быть текст типа "...пришёл домой.А жена-то и говорит..." И регулярка должна находить эту ошибку не как отсутствие пробела после точки, а отсутствие пробела перед союзом. Это всё ОП говорил.
>>620764 >нет ui в конце регулярок Да, забыл. Cкрипт почему-то без u них работает.
>Букву "Ё" надо дополнительно указывать, потому что utf её не воспринимает при перечислении "а-я". Да, об этом ОП писал, я забыл.
>Перед союзами "а" и "но" надо искать отсутствие пробела. Так ищет же их скрипт, в массиве третья регулярка с конца: после не запятой идёт пробел \s. Можешь проверить: http://goo.gl/4HcE0W
>пришёл домой.А жена-то и За это первая регулярка в массиве отвечает: "После точки, запятой, двоеточия, точки с запятой, восклицательного и вопросительного знаков нужно ставить пробел."
>>620777 Я там не понимаю, как запустить. Тогда жди ОПа. Вроде показывает ошибки в большом тексте и прежний вариант, вот тут я проверял же: >>620765 Но работает правильно только с большим текстом, вот посмотри сейчас на текст с одной ошибкой и парой слов. ОП обычно так и проверяет, так что инфа соточка, что он бы не одобрил. >За это первая регулярка в массиве отвечает: "После точки, запятой, двоеточия, точки с запятой, восклицательного и вопросительного знаков нужно ставить пробел." Я так сделал с самого начала, а ОП не одобрил. Вообще так и говорилось в условии, как ты сделал. Это я могу уже ехать и путать. Я всё это двадцать раз переписывал, потому что с нуля изучаю, могу уже всё путать. А у тебя, кстати, какая-то база есть - это чувствуется. Что-то уже изучал?
>>620847 >Я там не понимаю, как запустить. Просто выбирай Execute. http://goo.gl/QiuyPF Вроде причесал ещё немного регулярки, жду ОПа. Спасибо за внимание, анон!
>Что-то уже изучал? Да ничего особо, лабы делаю по плюсам одногруппникам, с PHP так вообще плохо знаком. Ну разве что sed ковырял немного.
>ОП советовал делать так, как везде работает. Я просто не подумал, что где-то может быть по-другому (в регулярках, различные реализации которых бесчисленны!). Думал, что вот у меня в линуксе проблем с кодировкой нет, значит у всех нет.
>>620903 А для чего ты указываешь в массиве неправильные варианты? Это я про "позвать Люду". Насколько я понимаю, мой вариант компактнее и правильнее(зачем это делать через массив, если можно в одну строчку уместить? Мой вариант полностью рабочий, просто громоздкий. Но это согласен, пусть тот, кто разбирается выскажется.
>>620912 >А для чего ты указываешь в массиве неправильные варианты? Для проверки правильности работы регулярок. Взглянул на регулярку, появились сомнения - добавил парочку элементов массив, проверил сразу несколько вариантов. Вместо того, чтобы строку каждый раз менять для отдельного варианта. Ну а вообще удобнее для таких целей использовать сервисы вроде https://regex101.com/
Пиздец, как не зайдешь на какую-нибудь биржу фриланса везде нужно знать кучу движков чтобы хоть что-то выполнять. Мне кажется даже одну cms надо задрачивать кучу времени чтобы чувствовать себя в ней уверено, а надо знать хотя бы 3-4 штуки. Охуеть вообще.
Если я не делаю imageDestroy, а вместо него делаю unset() - что случается? Когда будет очищена память и как чистить, если точно не уверен, является ли переменная ресурсом изображения или нет, а ее надо обнулить? Через @ как-то не хочется.
блядь, ёбаный в рот, как делать задачу на проверку ошибок? Тем более она даётся раньше, чем preg_match_all, то есть получается делать надо без него? Как, сука, как?!
>>621137 посмотрел по треду, кто как решает, кто через двойные массивы(массивы в массиве), кто через foreach, но этого не было в уроках ОПа! Точнее, было только упоминание
>>621137 >>621152 Да, ОП и сам говорил, что урок по регуляркам нуждается в переработке. Пости сюда свой вариант, будем тебе помогать, хотя я не уверен, что ОП и мой вариант одобрит.
>>621167 Я даже не знаю, как взяться за него. Пооткрывал все решения из треда, сейчас сижу и разбираю ваш код, пытаясь понять, как это работает. Но сам бы не дошёл до всех этих двойных массивов, т.к. учил только по ОПу и такого пока не встречал. Думаю пропущу после разбора этой задачи регулярки, т.к. чувствую пробелы в знаниях
>>620899 ОП где-то выкладывал кучу номеров,которые должны правильно проверяться, найду потом не с телефона. Там сразу вижу, что нет учёта +7 в начале. >>620903 Да, но нужно больше номеров с пробелами и даже вот такого типа: +7 - ( 910 ) - 56 - 56 - 56 -1.
>>621170 Не-не - даже не думай! Задача больше на массивы и цыклы, я гарантирую, сношался с ней с 31 декабря до вчерашнего дня, всех затралил в треде. Зато поймёшь принципы и многое уяснишь.
>>621170 У ОПа это всё есть, надо просто ВСЕ его примеры переводить в Идеоне и там смотреть, когда только изучаешь. Не надо галопом по Европам, я базарю.
В итоге очень понравилось решение анона сверху, но сам бы до него никогда не додумался. Разобрал его и понял (вроде бы), как что работает, в целом стырил у него только идею, но, как уже говорил, сам бы не дошёл, тк больно мудрёно.
>>621211 Да, согласен, что больше контекста нужно, заново заливать не буду, всё равно решение не моё.
Твоё через массив в массиве? Ты молодец, раз сам дошёл, но у того очень уж изящно вышло. Тешу себя мыслью, что я пока только первую неделю занимаюсь (до этого программирование в глаза не видел) и всё ещё впереди.
Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек!
Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).
> Когда будет очищена память и как чистить, если точно не уверен, является ли переменная ресурсом изображения или нет Если у тебя всего 2 варианта: либо в переменной картинка либо null то проверить можно так:
if ($image) { ... удаляем картинку $image = null; // обнуляем переменную чтобы второй раз не удалить }
Если у тебя что-то более сложное то программу надо переделывать. В одной переменной не должны храниться значения разных типов.
Там на сайте надо писать бекслеш один раз. Мы пишем 2 раза так как мы пишем регулярку внутри строки, а по правилам PHP чтобы вставить в строку бекслеш его надо писать 2 раза:
echo "\\"; -> \ echo "\"; -> ошибка
То есть ты пишешь \\( а движок регулярки получает просто \(
Можно попробовать писать один бекслеш, но гарантировать что все будет работать, я не могу.
Ой, правильная ссылка здесь: https://regex101.com/r/qF7vT8/3 (я забыл флаг g добавить). Я протестировал - если ввести правильную регулярку, то все правильные номера выделяются цветом.
Очень удобно на этом сайте тестировать - там все само обновляется по мере набора текста.
Без флага u русские буквы будут работать некорректно, причем там все так хитро что ты можешь даже не сразу это заметить и замучаешься искать в чем причина. Всегда ставь этот флаг если ты используешь utf-8.
Если нужны подробности, то суть в том что в utf-8 русские буквы состоят из 2 идущих подряд байт, а движок регулярок по умолчанию думает что 1 байт = 1 символ и он воспринимает русскую букву как 2 независимых символа.
То есть ты пишешь аб (это кодируется байтами D0 B0 D0 B1), а движок регулярок видит 4 отдельных символа c кодами D0, B0, D0, B1. Так как в тексте «аб» кодируется так же, то это сработает. Но не сработает например если в тексте идет АБ так как оно кодируется как D0 90 D0 91.
А теперь представь что ты пишешь a?. Это значит, может быть русская буква a, может не быть. А что видит движок регулярок?
D0 B0 ?
То есть он видит «идет символ с кодом D0, за ним может быть или не может быть символ B0». В utf-8 не бывает просто байта с кодом D0, за ним всегда что-то идет, и это выражение сработает только если в тексте есть буква a с кодом D0 B0. Очевидно что тут будет ошибка и выражение «a?» будет интерпретироваться как «a», то есть знак вопроса не сработает.
Представь, сколько надо времени чтобы понять почему не работает знак вопроса в на первый взгляд правильной регулярке.
> [а-Я] Так не надо писать. В юникоде (посмотри сам: http://unicode-table.com/ru/blocks/cyrillic/) большие буквы идут раньше маленьких, отсюда ошибка: ты указал невозможный диапазон символов. Также, буква ё находится там не после е, а вообще отдельно от алфавита.
Надо писать
[а-яА-ЯёЁ]
> "Предложение должно начинаться с большой буквы.", У тебя там в регулярке флаг i - игнорировать регистр.
> Перед союзами «а» и «но» нужно ставить запятую там ошибка что после но должен идти пробел. А может идти например какой-то знак.
> \sздел\S А что если «Зделал» идет в самом начале текста?
> Ideone не позволяет массивы вставлять более современным способом, как array[], только как array().
Позволяет: $a = [1, 2,3 ];
> 0 => array > 1 => array Можно не писать тут индексы, PHP сам их поставит.
Твои регулярки не сработают если например слово «сдесь» стоит в самом начале текста.
> здела сработает на правильное слово «разделать медведя»
> Пропущен пробел перед союзом \"а\"." Надо проверять пропущенную запятую а не пробел
> [^\\s(а|но)] Это значит любой символ, кроме пробельного, скобок, букв а, н, о, вертикальной черты. В квадр. скобках многие символы теряют свое значение.
> for ($i=0; $i < $possibleErrorsCount; $i++) { Лучше foreach
- preg_match_all находим все места с ошибками - функцией типа mb_strpos http://php.net/manual/ru/function.mb-strpos.php по найденной фразе находим ее позицию в тексте (подвох: фраза может встретиться несколько раз) - имея позицию, можем взять кусок текста например на 10-15 символов раньше
Также, preg_match_all умеет сообщать позицию найденного текста в байтах с помощью флага PREG_DELIM_CAPTURE, но там получится сложный 3-мерный массив.
У тебя очень странная модель. Почему-то объект Employee представляет не одного работника, как можно подумать из названия, а любое их число. Это усложняет программу: представь например что нам надо взять и повысить ранг одному работнику из группы. Логичнее было бы сделать 1 объект = 1 работник. А если хочется их группировать, сделать объект ГруппаРаботников.
Причем что интересно, зарплату он считает с учетом числа людей, а потребление кофе - без.
Также, давай попробуем проверить всегда ли твои объекты сообщают актуальную и точную информацию (как известно, методы и функции всегда должны возвращать точный актаульный результат). Создадим работника, и позже повысим его до босса:
$ivan = new Manager(1, 1, false); echo "Зарплата Ивана: {$ivan->getSalary()}\n"; $ivan->leader = true; echo "Зарплата Ивана после повышения: {$ivan->getSalary()}\n";
Если все верно то зарплата Ивана должна повыситься. А что? Поле leader публичное, значит автор кода разрешил менять его снаружи, если бы он был против, он бы сделал его private или protected.
У тебя она почему-то не повышается.
Также, проверь, если понизить босса до простого работника, или поменять ранг, правильно ли считается потребление кофе, написание отчетов, зарплата.
> class EmployeeList { Логичнее было сделать объект Департамент.
Также, держи дополнительное задание:
### Антикризисные меры
Задание: напиши программу для учета расходов и результатов работы всего дружного коллектива компании «Вектор».
Пока ты решал задачу по выводу отчета о сотрудниках и департаментах, разразился мировой экономический кризис. Доходы компании начали снижаться, и совет директоров поставил перед руководством задачу принять меры. Менеджеры 3-го ранга, блестящие выпускники топовых экономических вузов столицы, быстро смогли разработать три альтернативных антикризисных решения:
1. Сократить в каждом департаменте 40% (округляя в большую сторону) инженеров, преимущественно самого низкого ранга. Если инженер является боссом, вместо него надо уволить другого инженера, не босса.
2. Увеличить в целях стимуляции умственной деятельности базовую ставку аналитика с 800 до 1100 тугриков, а количество выпиваемого им кофе с 50 до 75 литров. В тех департаментах, где руководитель не является аналитиком, заменить его на аналитика самого высшего ранга из этого департамента (а бывшего руководителя вернуть к обычной работе)
3. В каждом департаменте повысить 50% (округляя в большую сторону) менеджеров 1-го и 2-го ранга на один ранг с целью расширить их полномочия.
Совет директоров в затруднении: какой путь выбрать? Помоги им с этим, распечатав прогноз по потреблению и расходам (аналогичный тому что требуется в задаче) после принятия каждой из мер.
Как посчитать хеш файла (ну, чтобы установить подлинность или сравнить два файла)? Тупо md5(file_get_contents(файл))? Будет ли такая проверка однозначно устанавливать идентичность файлов при совпадении их хэшей? Алсо, если файлов много - случаются пиздец тормоза, а скрипт все-таки не бесконечно работать может. Выше писали про специальные функции для хеша именно файла. Чем это отличается от моего варианта? >>621357 >Не используй собачку. Отловить вроде можно через свой обработчик ошибок. Как без нее-то? Если варнинги и нотисы выводятся. Например if ($test = @imagecreatefromjpeg...) else ... всё равно выплюнет варнинг без собачки, если условие не выполняется. Поэтому я ее давлю, но хочу где-то запомнить. >свой обработчик ошибок Эм, чо?
> Тупо md5(file_get_contents(файл))? md5_file наверно лучше
> Будет ли такая проверка однозначно устанавливать идентичность файлов при совпадении их хэшей? да
> Алсо, если файлов много - случаются пиздец тормоза, а скрипт все-таки не бесконечно работать может. Нельзя посчитать хеш без чтения всего файла в память. Впрочем тут есть способы ускорить проверку - например если длина файла не совпадает то дальше можно не сравнивать. Или можно сравнивать блоками по N байт и останавливаеться если не совпали.
> Как без нее-то? Если варнинги и нотисы выводятся. Проверять что перед тобой JPEG файл прежде чем вызывать imagecreatefromjpeg
>>621436 Я имею ввиду, сама проверка через хеши - она однозначна и для любых сравнений подходит? Нет там коллизий каких-нибудь хитрых или еще чего? >Например функцией getimagesize. Ну это я итак делаю. >Впрочем тут есть способы ускорить проверку - например если длина файла не совпадает А если файлов десятки тысяч? По идее, сначала посчитать хэши (зато один раз) будет быстрее, нет?
Не знал, куда податься - по этому решил сюда. Поставил апач на свой линуксокомп и вроде всё работает. На локалхосте показывается страница. Но php файл в папке var/www не видится. Апач перезапускал.
>>613285 Оп исправил почти все твои замечания http://integer64.github.io/site-layout/ Задача 10: >>Почему width 100%? Гугль дал такое решение для адаптивности картинок Задача 11: >>перемещаться с клавиатуры, клавишами Tab, Shift + Tab, стрелками, пробелом. Реализовал, добавил для checkbox на :focus бордер тень,что бы было видно. Задача 12: Переделал, совсем без id у меня не получилось, надо было как то input с label связать. Может быть есть другое решение. Связал вкладки и контент вкладок через data-атрибуты. Хотелось бы в CSS полноценные регулярные выражения, тогда решение было бы более эстетичное. Возник вопрос по поводу длинны названия вкладки: три раза прочитал, так и не понял что требуется, разжуй пожалуйста, для самых глупеньких вроде меня.
И как выкладывать решение задач по MySQL? В каком виде?
Анончики, вот пост нашел в предыдущем треде, который меня радует: >>616970
Анон учился-учился в нашем треде и нашел работу в итоге. Молодец, что. Заметьте, что анон выбрал сложный путь изучения: не примитивные пиратские видеокурсы по написанию процедурной лапши с устаревшими функциями, а наш тред, ООП, композер, вот все это. Соответсвенно и на работе Symfony и Doctrine, не ерунда какая-то.
Берите пример. Еще впереди несколько дней праздников, хороший повод добить ту задачу про студентов которую вы никак не можете доделать.
Есть но вероятность коллизии очень маленькая, скорее тебе на голову микрометеорит упадет и тебя перестанет беспокоить эта проблема. Ведь хеш имеет длину 256 бит и 2 в 256 степени вариантов разных хешей. Это во много раз больше чем число всех файлов на планете.
> А если файлов десятки тысяч? По идее, сначала посчитать хэши (зато один раз) будет быстрее, нет?
Да, это хорошая идея. если ты делаешь ютуб то конечно надо хранить в базе посчитанные хеши, зачем их заново считать?
> как выкладывать решение задач по MySQL? Если SQLfiddle работает то лучше всего на него. Если нет - делай SQL дамп (CREATE TABLE + INSERT + SELECT) и загружай на любой pastebin или ideone.
То есть нужен код на языке SQL, создающий таблицы, вставляющий в них что-нибудь и делающий нужный запрос.
> Возник вопрос по поводу длинны названия вкладки: три раза прочитал, так и не понял что требуется, разжуй пожалуйста, для самых глупеньких вроде меня. Наверно имеется в виду что там может быть длинная фраза или слово в заголовке вкладки. Верстка должна не ломаться от этого, и разрешается ради этого сделать на уровне CSS какое-то разумное ограничение на размеры заголовка, например обрезать если он длиннее определенной величины.
> Хотелось бы в CSS полноценные регулярные выражения, тогда решение было бы более эстетичное. Сайты будут грузить процессор сильнее тогда. Не хотеть. И кстати там уже есть селекторы для поиска по атрибуту вроде
>>621473 >Я бы убрал core, и вместо одной папки models сделал разные папки для разных классов: для валидатров, сущностей, хелперов, классов работы с БД.
Если я не ответил вам или не проверил что-то, пишите в этом треде. Если старый тред утонул и вы не увидели решение, попросите ОПа достать из архива, напомните что за задача была.
>>621513 >Нельзя в заголовках исплоьзовать что-то кроме ASCII (то есть латинницы). Убери это поле. Без этого поля файл сохраняется с айди. >Интересные у тебя геттеры. Зачем это ты исключение выбрасываешь? Я не против, просто хочу понять заечм. Твой же совет выше по треду, что каждый метод должен либо отдавать значение, либо выбрасывать исключение. >Это должно быть в другом классе. Ну токен это же свойство файла. Алсо, куда тогда девать все эти методы? Создать хелпер и туда отправлять все не нашедшие себе места методы?
> Без этого поля файл сохраняется с айди. В ссылке на скачивание должно быть имя файла в конце. Покажи какая у тебя ссылка.
> Ну токен это же свойство файла. Это да, но он не обязан их генерировать, он их только хранит.
> Алсо, куда тогда девать все эти методы? Создать хелпер и туда отправлять все не нашедшие себе места методы? Сделать файловый хелпер, который будет отвечать за валидацию, загрузку файлов, токены, генерацию путей. он может зависеть от маппера для работы с БД.
>>621525 >В ссылке на скачивание должно быть имя файла в конце. Покажи какая у тебя ссылка. Хм, в самом деле скачивает по имени файла в конце. Хотя может дело было в том, что браузер как-то запоминал прежнее имя, под которым я скачивал файл, потому-что я тестировал разные имена файлов, и для уже скачанных файлов изменения кода не оказывали никакого влияния, они продолжали скачиваться с тем именем, которое было при первой загрузке.
Я хотел заметить, что у ОПа в задачках вообще не рассказывается ни про апач ни про то, как запускать программы через винду (не идеон). Очень напрягает то, что позанимавшись по его мануалам около двух недель понимаешь, что на самом деле не знаешь даже элементарных основ
Привет, нужен совет: есть массив $_GET, где может быть как 2 так и 50 элементов, нужно сделать определения всех элементов в переменные. Пример: test.ru/putin?hui=1&president=da&coolman=super нужно, чтобы было что-то isset($_GET['hui']) $hui = $_GET['hui'] else $hui = ''; И так все остальные, проблема как раз таки, что количество может быть разное и в дальнейшем расширяться
>>621590 http://codepad.org/nm9jPcpd Как написать проверку мне понятно, а куда и под каким оператором засунуть - нет. Пробовал с if не получилось, хотя проверка ошибок не выдала, просто все наебнулось в конце.
Зачем ты в конструкторе пишешь return? Конструктор не может ничего вернуть, на то он и конструктор.Его задача - заполнить поля в объекте начальными значениями.
Можно гуглить, можно даже тут просить подсказки и обсуждать. Цель чтобы ты получил нужные знания тем или иным путем и писал код. Вот только код надо писать все равно самому - не копипасть готовые куски, иначе не научишься.
> [0-9\\(?\\)?-? ?] Это значит: «любой из символов: цифра, скобка, минус, знак вопроса, пробел». Ну и повторяется 10 раз. Ну то есть например это может быть 6 цифр и 4 знака, или 7 цифр и 3 знака и тд.
В квадратных скобках вопрос просто обозначает знак вопроса. Квадратные скобки значат «один из указанных тут символов».
По твоему вопросу - попробуй написать регулярку, которая ищет ровно одну скобку, минус или пробел. затем дополни чтобы она искала не один, а любое число таких символов. Ну а после этого напиши регулярку, которая ищет ровно 1 цифру и любое число указанных выше символов. И после этого сделай чтобы это повторялось ровно 10 раз.
При запуске http://student/front/index падает с ошибкой: Fatal error: Class 'FrontController.php' not found in /home/sloker/public_html/student/app/Router.php on line 28 Но я же подключил файл и вызвал существующий класс. Не могу понять откуда ошибка.
В правильном направлении я делаю роутер и паттерн FrontController?
>>621380 >Позволяет: $a = [1, 2,3 ]; > 0 => array > 1 => array >Можно не писать тут индексы, PHP сам их поставит. Да, действительно, Идеоне позволяет - я после этого проверил. >Твои регулярки не сработают если например слово «сдесь» стоит в самом начале текста. >> здела >сработает на правильное слово «разделать медведя» Чёрт, действительно, уже понял, как надо исправить: поставить обязательный пробел перед словом. >> Пропущен пробел перед союзом \"а\"." >Надо проверять пропущенную запятую а не пробел Чёрт, я попутал, что именно нужно, это да. >> [^\\s(а|но)] >Это значит любой символ, кроме пробельного, скобок, букв а, н, о, вертикальной черты. В квадр. скобках многие символы теряют свое значение. Спасибо, поправлю и запомню, это не проблема. >> for ($i=0; $i < $possibleErrorsCount; $i++) { >Лучше foreach Да, сейчас заглянул впервые на страницу "Повторим?", там как раз говорится, что в массивах элементы неправильно перебирать с помощью for, лучше foreach. >>621383 Спасибо, сохраню такой алгоритм, попробую применить, когда снова всё буду прорешивать. Спасибо за ответы и помощь!
>>621220 Да, то решение со вложенными массивами моё. Я занимаюсь месяц где-то, конечно же, всё впереди. Сейчас как-то сразу начинаю представлять, как будет многое работать и что будет получаться на выходе, но ошибок и непонятного для меня всё равно ещё очень много даже в пройденных уроках. >Очень напрягает то, что позанимавшись по его мануалам около двух недель понимаешь, что на самом деле не знаешь даже элементарных основ Просто надо каждый код ОПа вставлять в IDE, манипулировать и изменять его, а не просто пробегать глазами и думать, что уяснил его работу. Да и о многом речь начинает идти уже в самом конце, до этого ещё дойти надо.
>>621547 >Очень напрягает то, что позанимавшись по его мануалам около двух недель понимаешь, что на самом деле не знаешь даже элементарных основ Просто надо каждый код ОПа вставлять в IDE, манипулировать и изменять его, а не просто пробегать глазами и думать, что уяснил его работу. Да и о многом речь начинает идти уже в самом конце, до этого ещё дойти надо.
>>621684 Блять вайл для пидарасов, это все знают, хотя я смею предположить что ты полный отбитый наглухо далбаёб, поэтому прошу тебя проследовать нахуй.
>>621728 До этого что-то изучал, что ли? Или это ты шёл по решениям анонов? Это не ТруЪ - использовать чужие решения, выдавая или принимая их за свои. Надо пердолиться сутками самостоятельно. Так приходит понимание.
Переписал файлообменник почти с нуля. Заменил смарти на твиг, подключил jquery, сверстал на бутстрапе. Отрефакторил как мог, но чувствую что все равно код можно улучшить. Например с подключением аякса появилась куча веток типа if (isAjax) {...}. Некрасиво, но не знаю что с этим делать. https://github.com/nsdvw/file-sharing
Вопросы. 1. Можно ли как-то использовать подготовленные выражения с sql оператором IN (...)? Мне нужно найти пользователей с id перечисленными в массиве. Нашел несколько советов из гугла (либо лепить запрос руками и байндить поштучно, либо использовать трюк с mysql функциями типа find_in_set) http://stackoverflow.com/questions/1586587/pdo-binding-values-for-mysql-in-statement/1586650#1586650 Использую второй вариант с функцией, но мало ли, вдруг у этого подхода есть недостатки (например при смене субд придется ходить и переписывать все запросы).
2. Что делать с импортированием классов? Если писать use для каждого, то это займет половину строк скрипта. Если не импортировать, а писать полный неймспейс, получаются длинные строки. Пока делаю так: импортирую только те классы, упоминание которых встречается более 1 раза. Но это же не по программерски, делать через раз без четкой системы. Может есть какой-нибудь стандарт? В php7 вроде пытались что-то с этим сделать, но вышло не очень, там всего лишь группировка по корневому неймспейсу.
3. Хотел пожаловаться на бутстрап. Оп тут проповедует семантичненькую верстку с минимумом тегов и четким разделением ответственности между css и html, а они там намешали вложенных дивов с десятками классов, пустые теги для создания иконок например, ссылки которые на самом деле кнопки и кнопки которые ссылки, ну и вообще черт знает что. Но выглядит шикарно, ничего не скажешь. А, в пагинаторе еще почему-то переход по заблокированной ссылке "Next" все равно происходит. То есть они конечно сделали ее серенькой, и даже ховер с зачеркнутой ручкой, только вот при клике переход происходит (на эту же страницу, тупо перезагрузка). Это так и задумано по каким-то левым соображениям (типа юзер может обидеться, почему в свободной стране ему запрещают перейти по ссылке и подать в суд?), или это не додумано, и я должен сам повесить на нее preventDefault? Еще какая-то фигня с модальными окнами: если повесить триггер не на кнопку, как показано в доках, а на ссылке, то модальное окошко будет грузить именно то, что расположено по этой ссылке. Мне вообще-то нужно было, чтобы при отключенном js пользователь мог спокойно перейти по ссылке на форму редактирования, расположенную на другой странице. Наверное придется изобретать трюк: сделать и ссылку, и кнопку, кнопка скрыта по умолчанию, а js меняет их местами, то есть делает ссылку скрытой, а кнопку отображает.
4. Нужна ли пагинация на аяксе? Мы ведь фактически запрашиваем большую часть страницы? Если надо сделаю (хотя задолбался и неохота), просто не вижу особого смысла. Одно дело, когда нужно получить одну строчку, другое дело обновляется 90% страницы.
5. У слима вроде есть свои методы для работы с сессией и куками, но у меня они используются в своих классах, это что, передавать весь объект приложения чтобы сделать $app->setCookie? Почему нельзя сделать родное setcookie?
6. Статические методы в твиге как использовать? Я насоздавал себе статических хелперов, которые отдают пути к файлам например, а в твиге оказывается их теперь не так просто использовать. Подключил функцию вида return call_user_func_array("{$class}::{$method}", $args), но вызов в представлении получается громоздкий, тем более приходится писать полное пространство имен в имени класса.
7. Урок по исключениям читал. Но не понял, как практически использовать. Да-да, в тех местах, где "что-то может случиться", ставим try{}catch(){} и в кетче а) пишем в лог (писать свой логгер? не хотет, возьму готовый), б) выводим заглушку для пользователя, форбидден для робота. Я не понимаю, в каких местах "может что-то случиться"? Подключение к базе, ага. Это при создании объекта pdo, или он ленивый и поключится только в момент execute? Все exec/execute завернуть в try/catch? Дальше, там у меня работа с файлами (создание превью например, может еще что, не помню). Господи, это мне весь код придется перечитывать и думать, где там может произойти ошибка.
8. Еще там у меня пара косяков в jquery, но скорее всего мне нужно просто отдохнуть. Например, передо мной встала задача создать дерево элементов на лету, типа $("<div><p>test</p></div>"), а затем к вложенному p применить addClass("test"). Если создавать эти элементы из строки, то все работает. Но я беру контент из шаблона <s cript type="text/template" id="template">разметка</s cript>, $($("#template").html()) вот это не работает. Впрочем в этом не уверен, нужно перепроверить. В прошлый раз я полчаса мучился с addClass(".test"), точку по привычке поставил. Так что может и зедсь моя ошибка.
Еще мне нужно в списке комментариев поставить обработчик на каждый из комментариев (на ссылку #reply). Естественно, это нужно делать на родителе. Прикол в том, что внутри этого родительского элемента лежит еще и форма отправки комментария. Так что мой preventDefault, рассчитанный на то чтобы грохнуть ссылку, убьет и сабмит формы. Форму не охота вытаскивать из дерева комментариев, она должна открываться под тем комментарием, на который юзер отвечает. А, блин, наверное придется делать через абсолютное позиционирование.
У слима есть встроенный логгер. >The Slim application’s log object will write log messages to slim.errors whenever an Exception is caught or the log object is manually invoked.
$app = new \Slim\Slim([ 'slim.errors' => fopen('../error.log', 'a') ]); Продолжает писать в stderr, то есть в системный лог и в браузер, а я хочу перенаправить в error.log
Посмотрите на облочка на этих двух сайтах: http://aqua.dreamtown.ua http://dreamtown.ua Они как бы по определённому закону реагируют на действия мышки вблизи, как называет такой эффект?
>Если хочешь что-то попроще - сделай клон ютуба. видео надо будет перекодировать с помощью очереди задач, сделать регистрацию, загрузку, просмотр, лайканье, дислайканье и комментирование видео. Тоже может быть.
По поводу исключений, пробежался по коду, я так понимаю нужно обработать места где работа с базой или файлами. Для начала ловить PDOException в месте инициализации соединения. На php.net написано что-то странное http://php.net/manual/ru/pdo.error-handling.php >Метод PDO::__construct() будет всегда бросать исключение PDOException, если соединение оборвалось Как понимать "оборвалось"? Исключение будет брошено не только в момент создания соединения, но и в любой другой момент, если произошел разрыв? При чем тут тогда конструктор? Это наверное срабатывает деструктор, если соединение теряется, а не конструктор. Но кажется суть в том, что исключение будет брошено не только при отсутствии соединения в момент инициализации, но и в любой другой момент. То есть мне не нужно его ловить на селектах например? Достаточно только new PDO обернуть в try/catch?
Методы, сохраняющие что-то в базу (регистрация пользователя и зазгрузка файла, добавление комментария), наверное нужно отслеживать на исключение, связанное с нарушением внешнего или уникального ключа.
Функция move_uploaded_file вроде ничего сама не бросает. Но выдает какое-то предупреждение > ...если файл не может быть перемещён по каким-либо причинам, никаких действий не предпринимается и move_uploaded_file() возвращает FALSE. Кроме того, отображается предупреждение. Notice я так понял? А ошибки подавляются, если я оборачиваю в try/catch, или они живут своей жизнью, и пишутся как обычно в стандартный лог? Ну короче тут надо бросить исключение. Непонятно правда что писать в message. Couldn't upload file :( Как-то вообще можно узнать причину, по которой не сработал move_uploaded_file? Скорее всего просто нет прав на запись, но все же.
Еще там есть генерация превью. В случае, если превью не существует, будет попытка его сгенерировать. Если и оригинального файла нет в папке upload, тогда нужно бросить исключение. Можно конечно просто поставить еще одну ветку в условии, типа если и оригинального файла нет, ну и ладно, будет пустое место с альт-текстом вместо картинки. Но наверное это нехорошо, и лучше отслеживать такое, чтобы прочитал админ и настучал разработчикам. У меня как раз только что произошла эта ошибка, когда клонировал свой репозиторий в другую папку ради теста установки. Все работает, а страница просмотра файла падает c exception 'ErrorException' with message 'imagecreatefromjpeg(upload/4_374491.jpg.txt): failed to open stream: No such file or directory' Запись в старой базе есть (мне лень было заливать новую), а файла ей соответствующего нет. Только мне кажется тут в отличие от других случаев не нужно отдавать 503 и грустную страницу unavailable, не хватает всего лишь картинки. Так что в catch только записать в лог в этом случае.
По поводу логов я так и не понял, как писать в свой лог при помощи стандартного слимовского логгера. Вроде никак. Зато есть другой логгер от разработчиков https://github.com/codeguy/Slim-Logger Вот тут у меня получилось записать свое сообщение, это мне нравится.
Тэкс-тэкс, что тут у нас? Ещё одно топорное и неказистое решение от гуманитария? Ну наконец-то! https://ideone.com/XYyTBQ - даже Идеоне говорит, как XYyёво быть TоBQй. Задача на проверку и исправление ошибок. Все замечания ОПа вроде бы учёл.
>>622055 Вот переделал, спасибо за напоминание: https://ideone.com/hZQ6Gk Также добавил условие для текста, в котором нет ошибок. Вопрос: как прерывать выполнение всего скрипта, когда переменная соответствует определённому условию? У меня исправление ошибок идёт отдельным циклом с foreach, он запускается и тогда, когда в предыдущем срабатывает else { echo "Ошибок не найдено."; break;} И получается, что ошибок не найдено, а текст исправляется. Как скрипт остановить в этом случае?
>>622092 Сразу в голову гуманитарию приходит муть с ещё одной проверкой текста в этом последнем цикле всеми регулярками сразу, в соответствии с которой текст либо меняется, либо не меняется. Но пока гоню от себя первую пришедшую мысль, подожду советов.
Добрый день, после полугода работы в местной конторе у меня развилась стойкая неприязнь к верстке особенно на сайтах где по тз есть адаптивность. Как не скатиться в быдловерстальщики, а продолжить путь бэкенд программиста? На данный момент знаком с несколькими CMS, sql слабоват, но для уровня работы с cms пока-что хватало, js на таком уровне чтобы пользовать jquery/ajax. Так вот, в какую сторону дальше смотреть?
>>622132 Тоже такое ощущение, если по началу я делал по проекту в месяц, и сильно нервничал по поводу того, что я не успеваю что-то, на выходных иногда работал и допоздна засиживался. Сейчас же уже какой-то похуизм выработался когда висит по 3-4 сайта на мне и дедлайн близко - всё равно стараюсь не сидеть дольше положенного, и голову не забиваю этим. Хотя иногда бывают интересные задачи, но в основном чувствую что скатывается в рутину, и всё больше дают сайтов под верстку+настройку функционала по мелочи. Грусть.
>>622151 сша - говно, у вована(vovanjapan - видеоблогер рассказывающий о японии) есть запись с русским ученым который жил в японии а потом переехал в сша, тот говорит что в сша в общем примерно как в россии, но не такая разруха. >боюсь пхп-макаке о таком и мечтать нельзя PHP-developer'у можно как раз таки, вон Шамов(тоже блог о японии) вообще сисадмином работает, а это имхо уровень ниже, если сравнивать с грамотным разработчиком.
>>622093 Ну вот то, что и пришло тогда в голову: https://ideone.com/b7y9Pf К ОПобоязни добавилась ещё и говнокодобоязнь, хотя тут всё изначально связано.
Как такого избежать, чтобы не лепить дополнительную проверку регуляркой для прерывания скрипта в середине?
>>619873 (OP) ОП, проверь еще одну, а я пока задачку про кратчайший путь исправлю. http://ideone.com/vJPg7z Надеюсь ты закроешь глаза на то, что я не сделал оформление таблицей, уж очень лень
Ечть ли где почитать коммерческое применение паттернов? Теория и сферические примеры это все заебись, но данный момент у меня нет задач, где я осознанно мог применить что-то сложнее Синглтона. А в сети вместо реальных кейсов использования паттернов в работе нет. Уже возникло ощущение, что это идея фикс, о которой говорят только на хабре и спрашиввют на собеседованиях, чтобы потешить чсв, а по факту все говнодят. Ни разу не встретил и не читал такого: "На работе у нас возникла такая то задача, мы применили такие то паттерны, и это принесло профиты."
Какие перспективы пхп-программиста? Можно ли выбиться в люди, переехать заграницу (в будущем?) или это чистый макакинг за 40 к в месяц без будущего и надежд?
Если ты подключаешь jquery, обрати внимание что у нас в ОП посте есть задачи на нее.
> Можно ли как-то использовать подготовленные выражения с sql оператором IN (...)? Плейсхолдеров для массивов в PDO нет. Бери библиотеку где они есть (может doctrine dbal? не уверен) или пиши свою функцию для этого. Можешь поискать библиотеки-обертки для PDO, сравнить, написать тут про то какая удобнее.
> 2. Что делать с импортированием классов? Я думаю проще всего писать use. У меня в sublime плагин какой-то есть, PHP helper или PHP companion, он сам вставляет use при нажатии F5 на имени класса.
На практике больше 10-15 импортов у тебя не будет. Если больше то возникают вопросы, а зачем тебе в одном файле столько классов.
> а они там намешали вложенных дивов с десятками классов, пустые теги для создания иконок например, ссылки которые на самом деле кнопки и кнопки которые ссылки, ну и вообще черт знает что. Это да, но во-первых, он распространен и его надо знать, во-вторых, хорошо подходит для всяких админок, в-третьих, возможно без этих тегов не сделать то, что требуется.
> почему-то переход по заблокированной ссылке "Next" все равно происходит Потому что в HTML нельзя запретить ссылку (инпуты - пожалуйста, а ссылку нет). Надо просто не выводить там тег a или выводить span. Яваскрипт тут не требуется.
> Еще какая-то фигня с модальными окнами: если повесить триггер не на кнопку, как показано в доках, а на ссылке, то модальное окошко будет грузить именно то, что расположено по этой ссылке. Почитай документацию или исходный код плагина. Может есть опция или можно что-то дописать.
> Мне вообще-то нужно было, чтобы при отключенном js пользователь мог спокойно перейти по ссылке на форму редактирования, расположенную на другой странице. Правильная мысль. И я надеюсь что и обычная и аяксовая форма у тебя обрабатывается одним кодом. И ты также сделал HTML5 валидацию.
> Наверное придется изобретать трюк: сделать и ссылку, и кнопку, кнопка скрыта по умолчанию, а js меняет их местами, то есть делает ссылку скрытой, а кнопку отображает. Для начала изучи код плагина.
> 4. Нужна ли пагинация на аяксе? Мне кажется, нет. Ладно если бы это была какая-то часто используемая функция, но в общем случае нет смысла это делать.
> Если надо сделаю (хотя задолбался и неохота) Это можно как-то автоматизировать, типа ты указываешь на ссылке свойство data-update="some-id" и он обновляет этот id на странице (а при открытии в новой вкладке или отсутсвии JS открывается обычная страница). И так можно «аяксизировать» любу. ссылку. Гитхаб по моему так делает, и есть готовые плагины, но в них надо разбираться а не вешать бездумно.
Если делаешь аякс-ссылки - проверяй что меню правой кнопки на ссылке полноценно работает.
> 5. У слима вроде есть свои методы для работы с сессией и куками, но у меня они используются в своих классах, это что, передавать весь объект приложения чтобы сделать $app->setCookie? Там есть 2 объекта для чтения и записи кук, по моему $app->request->cookies, $app->response->cookies - можно передавать только нужный.
> Почему нельзя сделать родное setcookie? Потому что плагины или расширения делающие что-то с куками, не увидят их. Ну и вообще, если в фреймворке есть способ, то надо использовать его.
> 6. Статические методы в твиге как использовать? Можно создать функцию в твиге:
Кстати, ОП, пока ты здесь, хотелось бы спросить насчет: >>621513 >Загрузку файла наверно надо вынести в отдельные методы
Я ведь уже делал загрузку файла в методе класса файла, ты сказал, что этот код должен быть в контроллере, а не в модели. Так в какие методы её выносить? Хелпер это ведь тоже модель.
> 7. Урок по исключениям читал. Но не понял, как практически использовать. При исключении выбрасываешь throw. Если тебе надо ловить это исключение - делаешь свой класс и ловишь его, но в 99% случаев это не требуется. В 99% случаев catch у тебя один на всю программу. Вот еще паста:
-------------
Как надо обрабатывать исключения (и как делает Слим по умолчанию):
- записать информацию в лог - показать пользователю заглушку - на заглушке выставить HTTP 503 код ответа для роботов - на компьютере разработчика (при display_errors = 1 или debug=true) показать подробности и стектрейс
Если как в плохих учебниках сделать catch + echo то:
- в лог ничего не фиксируется, ты не узнаешь об ошибках - пользователь видит непонятную белиберду на английском - отдается код 200
Как будет если просто не ловить исключение:
- информация пишется в лог (ок) - на компьютере разработчика выводятся подробности (ок) - пользователь видит белую страницу (не ок) - отдается код 200 (не ок)
--------------------
То есть либо не делай catch либо сделай один-единственный catch в охватывающий все приложение и выводящий заглушку.
В Слиме делать catch не надо так как там такой catch уже есть (а еще слим преобразует все варинги и нотисы в исключение за что ему отдельное спасибо). Ты можешь переопределить вид страницы-заглушки, но тогда и логгирование ложится на тебя.
Задавай вопросы еще если что.
> Это при создании объекта pdo, или он ленивый и поключится только в момент execute? Не знаю, проверь создав объект, сделав sleep, посмотри в базе процессы через SHOW fuLL PROCESSLIST, есть соединение или нет. Или программой WireShark если ты под виндой.
> Я не понимаю, в каких местах "может что-то случиться"? Хочешь прочитать конфиг, а его нет. Или ждешь что на вход функции придет число больше нуля, а пришло меньше нуля. Или отпарвляешь запрос к АПИ, а приходит в ответ код HTTP 500.
> Все exec/execute завернуть в try/catch Исключения придумывались как раз для того чтобы этого не требовалось.
> Дальше, там у меня работа с файлами (создание превью например, может еще что, не помню). Господи, это мне весь код придется перечитывать и думать, где там может произойти ошибка. Слим по умолчанию превращает варнинги и нотисы в исключения. Но код перечитать возможно стоит.
> $($("#template").html()) вот это не работает. В Посмотри что выведет $('#tpl').html(). Возможно, надо взять html(), преобразовать как тебе надо и вставить на страницу через $('.div').html(html);
jQuery по моему воспринимает строку как hTML только если она начинается с < (иначе он считает ее селектором).
Я тебе не советую полагаться вообще на это автоопределение типа, это не надежно. Там есть готовая функция именно для HTML, http://api.jquery.com/jquery.parsehtml/
> Еще мне нужно в списке комментариев поставить обработчик на каждый из комментариев (на ссылку #reply). Естественно, это нужно делать на родителе. $.on по моему
> Прикол в том, что внутри этого родительского элемента лежит еще и форма отправки комментария. Так что мой preventDefault, рассчитанный на то чтобы грохнуть ссылку, убьет и сабмит формы. Надо указать правильный селектор в $.on
> А, блин, наверное придется делать через абсолютное позиционирование. не стоит. Стоит внимательно изучить возможности jquery по установке обработчиков. Также, если есть время и желание, можешь взять наши задачи на DOM и решить их с использованием jQuery.
> Использую второй вариант с функцией, но мало ли, вдруг у этого подхода есть недостатки (например при смене субд придется ходить и переписывать все запросы). Это костыль какой-то, лучше бы через IN.
Код особо не смотрел пока, вот что бросается:
https://github.com/nsdvw/file-sharing/blob/master/web/js/comment-ajax.js#L4 > var errorBox = $("#commentForm .text-danger"); Мне не очень нравится селетктор. Там написано: «блоки с ошибкой в форме комментариев». Но что если верстальщик поменяет стиль например с text-danger на text-info? ЧТо если он добавит позже еще такой блок в форму? Это явно хрупкий код, меняя верстку ты ломаешь работу JS скрипта.
Я могу придумать такие способы решения:
- использование префикса js- для классов/id которые нужны не в верстке, а в скрипте. Вроде так делают на гитхабе- глянь-ка код страницы. - использование data атрибутов - использование более явного названия класса: #commentForm form-error-message
В общем подумай над поддерживаемостью твоего кода.
Также, если не используешь HTML5 валидацию то подумай над ее добавлением (если это не конфликтует с твоим кодом конечно). Ее использовать может быть проще чем писать это в JS коде, и править потом этот код тоже проще. Также подумай над тем что клиентская и серверная валидация дублируют друг друга (но решение можешь пока не искать - в твоем приложении это вряд ли реализуешь без сложного фреймворка).
> var formData = new FormData(form); В HTML4-браузерах нет FormData, а preventDefault ты уже вызвал. В них форма не будет работать даже в обычном режиме.
> var replyID = form.querySelector(".replyID").value; Не стоит смешивать поиск через jQuery и DOM. Также, элементы формы удобнее всего искать по имени, name, а не по классу.
> window.location.pathname.split("/").pop() Это надо сделать функцией, и я кстати не понимаю, зачем это. Если это id файла то его надо передавать в яваскрипт явно, а не вытаскивать такими вот хаками. Что если мы разместим форму на странице с другим URL? Все сломается.
Все входные переменные надо передавать явно из PHP через тег скрипт на странице и json_encode:
var fileId = {{ fileId | json_encode | raw }};
Предлагаю тебе самому подумать почему и зачем тут json_encode и raw.
> $(function () { Возможно лучше использовать явную инициализацию, вызывая функцию инициализации из тела страницы. По моему так лучше, и видно где функция инициализации, и запускается только то что нужно на странице.
Форму или кнопки отправки надо блокировать на время отправки запроса.
Также, тут явно некоторые вещи можно вынести в функции, а не писать весь JS сплошной стеной.
также, у тебя в JS коде нет приема ошибок от сервера. как серверу сообщить об ошибке?
Также, мне не нравится что по коду много раз разбросан селектор "#commentForm. Лучше наверно получить этот объект один раз в начале кода.
Не уверен, нужен ли шаблон комментария в JS коде. Тут нет дублирования серверного шаблона? И если уж делать шаблон, то делать его как шаблон, а не вот так:
> function refreshCaptcha() { > $("#captcha-img").attr("src", "/image/captcha_generator.php"); > } Обновление картинки может занять много времени. При этом пользователь будет видеть старую картинку и может попытаться ее разгадать. подумай как этого избежать. Также, надо очищать поле с кодом. также, нужна кнопка явного обновления капчи.
>>622314 http://www.php.su/mysql/?fields TINYTEXT - Максимальная длина 255 символов TEXT - Максимальная длина 65535 символов (64 Кб) MEDIUMTEXT - Максимальная длина 16 777 215 символов LONGTEXT - Максимальная длина 4 294 967 295 символов
ОП, я обновил код немного. Посмотри на роутер. И я создал сущность. А еще я подумал, если у меня нужно работать с одной моделью почему бы и не использовать только один контроллер? Можно так и правильно ли так?
Надо смотреть английскую версию. > Note: > PDO::__construct() will always throw a PDOException if the connection fails regardless of which PDO::ATTR_ERRMODE is currently set. Uncaught Exceptions are fatal.
Тут имеется в виду что при ошибке установки соединения исключение бросается всегда. Что будет при разрыве уже установленного соединения в других режимах я не знаю, но мы используем только ERRMODE_EXCEPTION так что у нас будет в любом случае исключение. И это хорошо.
> Это наверное срабатывает деструктор, если соединение теряется, а не конструктор. Нет, деструктор это при удалении объекта сборщиком мусора или счетчиком ссылок.
> То есть мне не нужно его ловить на селектах например? Исключения для того и придуманы чтобы не проверять результаты вызова функций и ничего не оборачивать.
> Достаточно только new PDO обернуть в try/catch? Такой try/catch поймает только ошибки при создании объекта. Но тебе это не надо.
> Методы, сохраняющие что-то в базу (регистрация пользователя и зазгрузка файла, добавление комментария), наверное нужно отслеживать на исключение, связанное с нарушением внешнего или уникального ключа. не надо делать запросы, которые могут нарушить внешний ключ. А если сделал то значит в программе ошибка и надо ее исправить. Ловить этот случай не надо.
> Функция move_uploaded_file вроде ничего сама не бросает. Но выдает какое-то предупреждение Слим преобразует PHP предупреждения в исключения, по моему вот в такие: http://php.net/manual/ru/class.errorexception.php
> А ошибки подавляются, если я оборачиваю в try/catch, или они живут своей жизнью, и пишутся как обычно в стандартный лог? По умолчанию ошибки и try/catch вобще никак не связаны. Но Слим преобразует ошибки в исключения. Но ты не должен пытаться их ловить, так как они говорят об ошибке в коде программы и что надо ее исправить.
Вообще ловить исключения надо очень редко. И обычно их ловят только для того, чтобы что-то отменить или освододить и выкинуть исключение дальше. ну например, откатить выполнявшуюся транзацию. Вот пример кода, функция. которая выполняет переданный код внутри транзакции: https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Connection.php#L1086
Там исключение ловится, транзакция откатывается и исключение бросается дальше. То есть они не останавливают его распространение, ничего с ним не делают, они просто используют catch чтобы узнать об ошибке в коде и отменить транзакцию.
Но если ты не пишешь библиотеку, то скорее всего тебе вообще ловить ничего нигде не надо.
> Непонятно правда что писать в message. Couldn't upload file :( Как-то вообще можно узнать причину, по которой не сработал move_uploaded_file? Скорее всего просто нет прав на запись, но все же. Вообще через http://php.net/manual/ru/function.error-get-last.php но в данном случае Слим сам создаст ислючение из варнинга и запишет в него причину.
> Можно конечно просто поставить еще одну ветку в условии, типа если и оригинального файла нет, ну и ладно, будет пустое место с альт-текстом вместо картинки. Правильно наверно исключение, а разработчик пусть разбирается куда делся файл. Или пусть удалит его и из базы.
> По поводу логов я так и не понял, как писать в свой лог при помощи стандартного слимовского логгера. Код/документацию смотрел?
>>622095 Шта? С логикой проблем у меня нет. Мои проблемы в том, что на информатике у нас не преподавали языки, у меня абсолютно нет опыта в таком. Когда ты знаешь, что нужно сделать, но не вполне понимаешь, как это нужно сделать, - это не с логикой проблемы.
Допустим есть класс для работы с imap (класс 1). Заросы выполнять буду через класс для работы с сокетами (класс 2). Чтобы не прописывать в классе 1 методы класса 2 я решил что можно передать эти методы как параметры в конструкторе а дальше дергать их когда нужно. Как это реализовать?
Дали дамп базы, а там encoding ебанутый. Что делать? Вся кириллица в иероглифах. Эта база использовалась с какой-то самопальной CMS, которая таки отоброжала русский текст нормально. Я в php профан, но вангую что есть какая то функция init_i18_new_kirilica_mb_init(true) которую нужно вызывать в начале скрипта, и все будет ок.
Хз, но set_charset("utf8") после коннекта с бд, iconv("что-то", "UTF-8", $str), mb_convert_encoding($str, "UTF-8", "что-то"). Дамп развернуть и в phpMyAdmin сменить кодировку.
>>622400 Для собственного проекта. Ровно год назад появлялся в этом треде, спрашивал у ОПа советов мудрых, как быть. ОП посоветовал изучать РНР, нанимать на фрилансе людей для сложных моментов. Я внял только частично: решил полностью заказать на фрилансе весь проект, а вместо изучения просто расписывал ТЗ для создания проекта. В итоге фрилансеры не справились с задачами (либо затягивали, либо откровенно обманывали), надоело это терпеть, решил всё изучить самостоятельно. Теперь думаю изучить учебник ОПа, всё далее из ОП-поста, затем фреймворк Yii2, а потом заказывать отдельные элементы и системы для проекта, самостоятельно их интегрировать в него. Такие вот дела. Это уже сталь принципиальным, потому что потрачено много времени, какие-то деньги, многие оказались втянуты в него, имеются большие перспективы.
>>622518 Один фрилансер мне месяц канифолил мозги с модулем для регистрации - туда надо было интегрировать пять самых популярных социальных сетей, а также выбор группы пользователей при регистрации, к которой регистрирующийся себя относит, по желанию ввод личных данных сразу (номера телефона, имя-фамилии). В итоге сделал простую интеграцию модуля от uLogin, попытался сдать в таком виде... А ты ответственен ли, анончик?
>>622520 Зря выбрал PHP туда ли ты зашел, питушок, поведают мне, но ничего личного, пацаны. Бери питон, там средний исполнитель в разы адекватнее. Плати по часам и с трекером. Очень часто бывает, что исполнитель лажает с определением сроков и ему становится понятно, что проще кинуть тебя, чем доделывать; плюс при фикседе есть мотивация сделать тяп-ляп и сдать говно. Будь готов, что названный срок будет проебан в 3 раза при оценке твоего бюджета и рейта, фактическую оплату делай раз в две недели-месяц, работа должна вестись в виде ежедневных коммитов в репозиторий, который ты можешь чекать - чтобы не слушать "бля, я все сделал, но в провайдера попала молния и я не могу выложить" с последующим сливом через неделю. И все, неадекватов ты быстро отсеешь. Но и самому придется попотеть, контролируя процесс.
Сап друзья, помоги совладать с вашей этой PHP и её средой интерпретации. Собсна суть такова, есть одна кодировка и она не даёт мне спать уже сотни часов, а именно КАЗАХСКАЯ. Я не могу использовать более менее вменяемую кодировку для правильного отображения работая с файловой системой, сами попробуйте. Допустим есть файл ғғғғғғғғғғғғ.hui мне нужно его записать в директорию или, например, что в принципе не важно считать имя этого файла, я получаю полную лабуду вида Т“Т“Т“Т“Т“Т“Т“Т“Т“Т“Т“Т“.hui
использовал при этом такие функции как scandir и iconv
>>622530 Спасибо, братишка, толковые советы. Питон советовали многие, да, но я как-то два года назад уже пробовал читать книгу по РНР, поэтому решил и продолжить. К тому же, часть уже реализована, в которой надо разбираться и которую надо улучшать, а там всё на РНР+JS. >Но и самому придется попотеть, контролируя процесс. Я уже втянулся, мне это нравится.
>>622404 Хотел бы попробовать как-то зарабатывать на фрилансе вначале, но никак не могу решиться попробовать. Кстати, тут говорят о какой-то работе, нужно что то кому то? Может дадите мне попробовать?
>>622146 Само собой уровень России и Японии даже сравнивать нельзя, как и России и США и других подобных стран. Однако, айтишники сейчас практически по всему миру на одинаковом уровне, заработки если смотреть по ППС сравнимы. Ну что касательно других специальностей, то конечно всё совсем иначе. Мимокрокодил
>>622579 А, понял, я думал нужен какой-то сайт, который будет делать что то с информацией полученной из сайта вебархива. Я не умею в дизайн, могу только немного в вёрстку и само собой ПХП. Где можно посмотреть информацию о твоём сайте?
Ты правильно решил. Если ты сам не разбираешься в каких-то технических вещах то не можешь эффективно управлять фрилансерами. Чтобы работать с фрилансерами надо либо самому быть специалистом, либо иметь лояльного специалиста который будет ими управлять. Иначе тебе навешают лапши на уши. Потому да, тебе стоит наверно научиться самому делать приложения. Проходи быстрее учебник и берись за студентов и файлообменник. Можешь его попробовать сразу на Юи делать, хотя конечно для маленького проекта Слим лучше бы подошел.
Его проблема в том что он не может правильно оценить квалификацию фрилансера и предлагаемые решения. Например он может не знать что задача решается готовым модулем и согласится на написание велосипеда.
Какая ОС? Если винда то с каким языком? Если казахский то какие у вас кодировки используются? 1251 (кириллица) как у нас или что-то свое?
Под виндой в функции работы с файлами в PHP надо передавать данные в виндовой кодировке. Если ты используешь utf-8 то имена файлов для функций PHP надо перекодировать в виндокодировку. И соответственно если ты читаешь список файлов с диска то надо перекодировать обратно.
Под линуксом и маком файловые функции работают обычно в utf-8, ничего делать не требуется.
Решал тут задачу и для меня всё выглядит нормально, но $newAmount не высчитывается больше одного раза, поэтому прошу помочь. Айдион http://ideone.com/h1bjyG
>>622298 >поискать библиотеки-обертки для PDO, сравнить Я не могу сравнивать, из-за отсутствия опыта непонятно на что ориентироваться, по каким критериям сравнивать. Могу искать только под конкретную задачу. Ну вот например тут понадобилось подставлять массивы в запросы с условием IN.
Я так понимаю доктрина это королева orm, как симфони среди фреймворков, и любой ее компонент мощный самостоятельный пакет. Попробуем поискать чего-нибудь помельче.
>Потому что в HTML нельзя запретить ссылку (инпуты - пожалуйста, а ссылку нет). Надо просто не выводить там тег a или выводить span. Вложенный спан помог. Вообще выбросить ненужный вложенный тег нельзя, ломается селектор https://github.com/twbs/bootstrap/blob/master/dist/css/bootstrap.css#L4724 Можно конечно сверху прописать свое правило, чтобы избавиться от вложенного тега, но смысл захламлять css ради чистки html. Ну и вообще раз используем фреймворк, то придется мириться с его недостатками.
Может есть более кошерный фреймворк, кроме бутстрапа? Чтобы была нормальная структура html и не было этой мешанины типа class class-another class-abc class-class-class И еще чтобы была встроенная валидация форм и можно было грабить корованы.
>>622298 >Можно создать функцию в твиге для вызова статических методов Я так и сделал function ($class, $method, array $args) { return call_user_func_array("{$class}::{$method}", $args); }
Но получается каша в представлении <a class="btn btn-success" href="{{callStaticMethod( '\\FileSharing\\Helper\\ViewHelper', 'getDownLoadUrl', [file.id, file.name])}}" id="downloadLink">download </a>
Тоже поддерживает множество условий типа whereIn('id', [1,2,3]); Более сложный код (сложный в плане кол-ва классов и методов), чем у индусов из aura, которые просто квотят элементы массива, но реально используют плейсхолдеры.
Итого: 1. Заквотить в цикле элементы массива, как у aura или 2. Юзать Slim-PDO с плейсхолдерами-вопросиками?
>>622298 > Еще какая-то фигня с модальными окнами: если повесить триггер не на кнопку, как показано в доках, а на ссылке, то модальное окошко будет грузить именно то, что расположено по этой ссылке. > Почитай документацию или исходный код плагина. Может есть опция или можно что-то дописать. Ну да, он вроде воспринимает наличие атрибута href как включение опции remote, то есть будет игнорироваться data-target и контент браться по ссылке. http://getbootstrap.com/javascript/#modals-options Как отключить эту парашу не написано.
Короче я тогда уберу все эти дата-атрибуты с ссылки и вызову modal('trigger') при попытке перехода $("#modal-trigger").on("click", function (event) { event.preventDefault(); $("#modalForms").modal('toggle'); });
>>622592 Есть же конфа в Телеграме, бывали конфы в Скайпе, в ВК. Вот анончик оставил e-mail выше - вот так и знакомимся.
>>622638 Да, всё верно, братишка, столкнулся с подобным как раз. Мне ещё, наоборот, пытаются подсунуть готовые решения по цене написанных с нуля. Вот как с тем модулем регистрации. А то, что там нет ничего из ТЗ, кроме собственно связи профиля в соцсети с личным кабинетом, - не беспокоит. Натолкнулся на многое за этот год на фрилансах. >>622640 Связывался с фрилансерами, которые имели кучу положительных отзывов и рейты около 1к рублей за час, были зарегистрированы и по 10 лет, - всё равно. Поэтому иногда так и хочется сказать сомневающимся анончикам, что фриланс - это совсем не так страшно, когда ты исполнитель, но не хочется плодить безответственных фрилансеров.
>>622646 Неверно то, что у тебя переменная с общей суммой не меняется. Думаю, одно это должно помочь. >>622647 Сначала написал ответ, а потом прочитал твое сообщение...
>>622332 >>622857 Ну перестань ты уже тред засирать, ОП не вернётся быстрее от этого. Это вообще редкость, что кто-то готов тратить своё время на то, чтобы так часто проверять чьи-то левые хеловорды.
На локальном сервере всё работает Заливаю на хостинг и... Fatal error: Call to a member function real_query() on a non-object in Ну что за фигня такая то?
>>622879 Значит ты в эту функцию пытаешься передать не объект, а она ждет объект. Перед функцией сдампь переменную которая в неё идет. Посмотришь, видимо у тебя ошибка раньше. Ну и если все работает на локалхосте, то мб проблема в настройке mysql на серве.
Аноны, какие перспективы у изучающего пхп? Есть хоть призрачные шансы в будущем свалить из великой? Я взялся за программинг помимо прочего по этой причине, и по причине того, что я гуманитарий взялся за более простой для вхождения пхп. Какие перспективы? Только честно
> FluentPDO приглянулась. Хочу сразу предупредить. Вот такая штука
$fpdo->from('user')->where('id', array(1,2,3));
Это не улучшенная форма написания запросов. Это так назваемый Query Builder, для построения запроса по частям и он используется там где вид запроса может меняться, например могут добавляться блоки WHERE в зависимости от каких-то условий.
Если запрос всегда одинаков то использовать QB нет никакого смысла- язык SQL выразительнее и короче. по крайней мере мне удобнее писать SQL запрос, чем все эти стрелки и скобочки.
Если хочешь, можешь использовать, дело твое. Но если он не позволяет обычные запросы писать то по моему это не удобно.
Для массива наверно нет смысла генерировать 100500 плейсхолдеров и передавать 100500 значений - проще на стороне PHP заквотить все и вставить в запрос. Я конечно не знаю точно, но подозреваю что иначе можно упереться в какой-нибудь лимит на число плейсхолдеров если элементов в массиве много.
Итак, ОП. Посмотри мой роутер. Я создал новую сущность. А еще я подумал, если у меня нужно работать с одной моделью почему бы и не использовать только один контроллер? Можно так и правильно ли так?
>>623029 Одногруппник рассказывает, что в конторе, в которой он работает, есть версталы и дизайнеры. Но PHP-программисту нужно уметь натягивать ГОТОВУЮ вёрстку.
>>623029 Если ты из Мухосрани, то ты обречен. Работодатель захочет одну мартышку, которая будет делать все. Возможно будешь переставлять винду в том числе.
ОП, дело вот какое. Я начал гуглить про TableDataGateway и, как ты сам понимаешь, я попал в документацию Zend. Начал читать изучать и увидел много непонятных классов. Хоть там и расписано их предназначение, но я ничего не понял.
Смотри вот есть класс TableDataGateway, в нем есть метод initialize. Я правильно понимаю, что прямо в этом классе происходит подключение к бд? А я думал, что нужно его в автолоадер засунуть. А где он тогда вызывается? Почему не подключаться к бд сразу в конструкторе? В конструкторе я вижу только, что передается имя таблицы, адаптер (кстати опять непонятно, что за адаптер) и еще что-то.
Итак, я так понимаю, что в TableDataGateway я должен реализовать примитивные методы update, insert, where, select, которые будут применимы для всех моделей, а уже работая с каждой моделью, она должна будет наследовать этот класс и использовать эти методы?
Далее я повстречал классы ServiceManager, ServiceLocator, они как-то все вместе взаимодействуют. Только я понять не могу как. Еще адаптер.
Вообщем объясни мне, ОП, как это все работает? Я хочу применить это в студентах и понять как оно устроено.
Также прочти мою логику, как я пока думаю, как правильно сделать. Создаю класс TableDataGateway, там создаю все эти "примитивные методы". Рядом с ним создаю класс UserDataGateway, который наследует TableDataGateway и там уже пишу методы вроде add, delete, edit и т.д. В самой модели Student в конструкторе будет создаваться объект класса UserDataGateway с аргументом "students" (имя таблицы). Там будут использоваться такие же методы add, update, edit и т.д., которые будут вызывать аналогичные методы класса UserDataGateway. Контроллер опять же будет иметь методы action_add, action_edit, в каждом из которых будет создавать экземпляр класса Student и вызывать аналогичный метод модели. Но пугает меня то, что во всех трех классах будут одинаковые методы, которые по цепочке будут вызывать другу друга до обращения в базу. Правильно ли это?
ОП, я по поводу своего шопа по которому ты мне много чего написал здесь - http://pastebin.ru/mzp3Ex5d Начал с разработки нормальной БД, почитал про нормализацию, связи. Пришел к такому варианту как на пикче, вот еще в текстовом варианте - http://ideone.com/JmbBSV
>>623260 Переименуй первичные ключи в просто "id", не надо везде ставить "category_id", так называются внешние ключи (т.е. когда данные лежат в другой таблице).
Ппц, за 10 часов работы получилось сделать 1 BTC = 32к рублей, хотя я даже не джун. Челу нужно было написать алгоритм для новой версии одного биткоин-клиента. Я ради интереса нашел этот клиент на гитхабе, оказалось, что он написан на питоне. Ну и я тупо переписал все на пхп. Конечно, без пердолинга не обошлось, но все равно збс. А вы говорите про 15к в месяц.
>>623321 >ENUM стоит сделать латинницей и без пробелов. В кириллицу переводить в самом коде? Не будет ли это лишним захламленим кода? Это же надо будет через какой-нибудь switch перегонять или ifelse
>>623319 >Нет, TDG это просто класс где собраны функции работы с таблицей. В ZF просто по совему это сделано. Никаких where или update делать не требуется.
Это ОП написал? А то больно скудно, ничего не понятно.
>>623318 Раз на раз не приходится же. Везение играет роль, постоянный мониторинг заказов, адекватные цены. Наверняка там куча петушков нарисовалась с ценниками от 100к рублей или около того. С почином, бро, это мотивация для многих в этом треде.
Не совсем понятно про Data Mapper. Допустим у меня есть 2 сущности в БД. Для каждой из них я должен создать класс-модель этой сущности, свойства которой будут полями, которые есть в БД для этой таблицы, верно? И еще должны быть классы, которые уже непосредственно работают с БД, типа select, update и т.д. причем опять же для каждого объекта/сущности свой такой класс в котором должны быть описаны все возможны методы для взаимодействия с БД?
>>623358 Не еби себе мозг. Есть такие ORM, как doctrine и propel. Или есть такие фреймворки как Yii, со встроенной орм. У них есть документация и туториалы. Берешь и решаешь свои задачи за их счет, стараясь не раздувать классы моделей кучей похожих методов. Но лучше конечно перед этим выкинуть сраное похапэ
>>622318 >соединение создается при создании pdo объекта или при выполнении первого запроса? >Не знаю, проверь Проверил, подключается при создании pdo.
>либо не делай catch либо сделай один-единственный catch в охватывающий все приложение и выводящий заглушку Теперь понял. Обернуть в try/catch только $app->run, если нужно (обычно не нужно). Слим сам преобразует ошибки в исключения (через set_error_handler), сам выдает заглушку (некрасивую), сам пишет в лог (стандартный). Можно переопределить страницу ошибки, чтобы показать страницу с обезьянкой-ремонтником, но тогда придется переписывать сообщение в лог. У меня получилось так https://github.com/nsdvw/file-sharing/blob/master/web/index.php#L55
>>622298 > надеюсь что и обычная и аяксовая форма у тебя обрабатывается одним кодом. И ты также сделал HTML5 валидацию. Одним и тем же кодом, но получилась лапша из ифов и скобок, жду советов по рефакторингу. Про html5 валидацию слышу второй раз в жизни. Ты имеешь ввиду эти атрибуты типа required и pattern? Во-первых, это поддерживается не во всех браузерах, http://caniuse.com/#feat=form-validation во-вторых мне просто не нравится внешний вид этих попапов. Их можно как-то переопределить, или изменить текст сообщения?
>>623458 Кстати, на вопрос разрабам Yii, будет ли стоковая интеграция Doctrine и Yii - они ответили - "НЭТ НЭ БУДЕТ". Свою ORM они писать не хотят, видимо сложна. Поэтому Yii так и останется на уровне "стильно, модно, молодежно".
https://github.com/MindiMakridi/filehosting ох чую не понравится тебе, ОП, то, что я сотворил с превьюшками. Вообще чем больше исправлений я делаю, тем более уродливый становится код.
/Pr/ограммач, помоги Извиняюсь за столь сраный скрин, на машине не было ината. Как реализовывать пикрелейтед? Через SELECT? Если да, то как? Было бы круто, если бы анон написал код и пояснил что и почему Хотя, что и почему я наверное сам пойму, но пока что я не знаю за что схватиться
>>623338 На bitcointalk.org. Читал сначала про биток в целом, потом пошел на этот форум, случайно увидел заказ. Оказалось, что за 8 месяцев никто так и не смог ему сделать, аж 8500$ запросили (он пендос). О реверс-инджиниринге алгоритма из оригинального клиента никто походу не додумался, пхп-шники же. Ну я и рискнул. Причем изначально стояла награда 0.5 BTC, а я блефанул и повысил до 1-го. Скиллы средние. В данном случае понадобились только синтаксис питона, пхп и phpstorm с pycharm'ом, благо до этого на питоне кодил. Алсо, говнокод там был просто ппц. По сравнению с ним, народ из этого треда - сеньоры.
Кто разбирается, посмотрите мое тестовое на ошибки плз. Алсо, нужно ли его было покрывать юнит тестами и правильно ли проставлены индексы в бд? https://github.com/toppestkek/Test
И тут такой я с опечаточником: http://ideone.com/phKzaH Немного ВЗБОДРИЛО, когда стал проверять всякие разные госзаказы на официальном сайте зосзакупок.
Ещё читаю книгу Савельевой о РНР - как же тёте далеко до нашего ОПа. Там курс лекций, вроде более-менее доступно излагается, дочитаю.
>>623350 ага, мотивация, пока я безуспешно делаю тестовые задания на днище вакансии по 20 т.рублей в месяц, читать такие вот истории в ваших говноконфах про шлюх, работающих тимлидами за 90к, которые "ну я толком ни жиес ни пхп ни знаю)) ну на рабипитоне и шотот там накалякать магу))" - пригорает пиздец.
Сделал сам: строка if($foundAnimals["Dog"]) { превратилась в if (isset($foundAnimals["Dog"]) && $foundAnimals["Dog"]) { потому что при создании игры мы можем отказаться от собак в отличии от кошек и мышей
> Не стоило canIMove переделывать ради array_filter. Аргументы функции выбираются из логики, тут логично чтобы аргументами были (x, y), то есть даем координаты и получаем ответ. Для совместимости с array_filter можно либо сделать метод в Animal, либо использовать анонимную функцию (так даже наверно лучше): Не могу понять как передать два аргумента в array_filter, если в документации единственный пример двух параметров анонимной функции - это передача ключа + значения.
> Тут можно избавиться от аргумента foundAnimals - можно передавать его в функцию подсчета через use (если бы исплоьзовалась анонимная функция). Можно впрочем и не избавляться, логика тут есть, что лучший ход зависит от расположения других животных. Хотя мне кажется, без него будет красивее. Как я должен описать там анонимную функцию?Если я по твоему раннему совету передаю два разных метода countPoints, т.к. алгоритм подсчета очков различается.
> if (!count($foundAnimals["Cat"])) { > throw new Exception("Ошибка. Должна быть как минимум одна кошка."); > Вот тут я все же не уверен что это правильно. Можно было бы в отстутсиве кошки оценивать ходы по другим факторам, вроде близости к углам. Хотя в твоей ситуации функция не будет вызвана если нет кошки, но так было бы надежнее. Но почему это нужно сделать. Это уже ошибка будет, если мы попали в тот метод без кошек. Зачем считать углы тогда? Если ты имел ввиду, что это будет свободный ход когда мы не видим мышок, то он уже описан в методе freeMove, и по правилам задачи мышка ходим наобум, без обдумывания.
Алсо насчет правил. > Также, для мышки надо рассматривать вариант «стоять на месте». Иногда стоять на месте может быть выгоднее чем сделать шаг навстречу кошке. Например когда мышка в углу и к ней с 2 сторон приближаются кошки. В учебнике написано, что мышка будет стоять на месте только если ей некуда ходить. Я это понял как ситуацию когда рядом клетки все заняты. Имеет ли она право в остальных случаях стоять на месте, если это выгодный ход?
> //Если обнаружили новый тип животных - добавляем его как ключ > if (!array_key_exists($animalType = get_class($animal), $foundAnimals)) { > ...переделать алгоритм чтобы он проверял есть ли в массиве такой ключ, перед тем как его использовать. А array_key_exists разве не это выполняет?
В общем я слоупочу с советами по анонимным функциям. Я скопипастил их с метода canIMoveTo (все еще с одним параметров вместо двух x,y), они копия друг друга. Правильно ли делать такой копипаст, когда раньше мы просто передавали ссылку на метод в array_filter?
Помните, как-то говорили о сайтах для портфолио на фрилансе? Помимо каких-нибудь магазинов и блогов вот такая чушь вызывает интерес, если хорошо оформлена: http://howmuchdoyoucost.xyz/ Я базарю.
Пиздос, написал в старом треде, и удивляюсь, почему никто не пишет.
Охуенная шапка, чаю авторам. Привет, анонимус, будет многобукв, очень надеюсь на помощь, потому что не знаю куда мне еще обратиться!
Я буду прям и краток, не вдаваясь в детали: уже несколько лет имеется магазин розничной торговли. ВНЕЗАПНО захотелось автоматизировать некоторые процессы, потому что заебало писать всё на листках, и вообще работать вручную, а именно: - вести учет товара на складе (поступления, продажи) - автоматизировать выдачу договоров купли и пары других отчетов.
Я очень долго хотел (да и щас подумываю) реализовывать это в MS Access, однако внезапно вспомнил, что у меня есть говносайтик на ололо-CMS с бесплатным шаблоном (но который очень даже неплох - делал его давно, без знаний каких то ЯП, хотя и наебался со всякими css-ами, ну не суть).
И я подумал, что было бы неплохо сделать ИНТЕРНЕТ-МАГАЗИН вместо нынешнего "сайта-визитки-каталога".
Очевидно, что я лентяй и вообще тугодум, ввиду чего яро стал гуглить какие нынче CMS актуальны, какие из них наиболее подойдут для интернет-магазина. Какой, кстати самый менее ресурсотребовательный? Ололо-дешевый-хостинг.
В общем, анонимус, я тут подумал, и в своих фантазиях набросал такую схему: Ставлю CMS для интернет-магазина, пополняю его, тем самым у меня решается проблема складского учета товара в наличии. А затем, при помощи PHP (который я так яро настроен изучить) - взять и к той же CMS прикрутить функционал выдачи договоров и прочих отчетов для курьера/грузчика и тд. Насколько моя идея охуительна и реально ли такое реализовать одному?
И вообще, анонимус, что ты думаешь по поводу моей уёбищной ситуации?
В идеале, конечно же - было бы неплохо изучить MYSQL, создать базу (таблички) и написать самому какую нибудь "веб-морду" по управлению этой базой: то есть реализовать учет склада, отчеты и прочие махинации.
А потом залить эту базу на хостинг и создать уже самописный сайт, который будет обрщаться к моей охуительной базе и будет брать оттуда информацию о товарах, которые есть в наличии.
Пиздец, анон, сам не понимаю, чего хочу, прошу помочь с принятием решения. Алсо - как долго нужно учить PHP?
> Не могу понять как передать два аргумента в array_filter, если в документации единственный пример двух параметров анонимной функции - это передача ключа + значения.
$x = array_filter($x, function ($y) { // вызываем любую функцию с любым числом параметров });
> Имеет ли она право в остальных случаях стоять на месте, если это выгодный ход? Имеет. Все животные имеют право стоять на месте. Разве что кроме собаки.
>>623334 TDG - класс, с функциями, которые оборачивают твой говнокод для работы с базой. По сути самая простая абстракция и инкапсулирование построенных запросов. По сути тот же говнокод, только рассованый по коробкам.
>>623645 Смотря что нужно ему. Если он хочет нечто хорошее и качественное, то CMS его не устроит. Я бы всем таким людям советовал для начала найти прошаренного человека, который может консультировать по таким вопросам, честно и без купюр, а уже потом окунаться в омут веб-разработки.
Как настроить базу данных во всплывающих окошках phtstorm? Я пытался наобум настроить и после run получал что-то в духе java.sql.SQLException: Unknown database 'Test'. Мимо смотритель курсов специалиста.
Раньше писал всё на чистом ПХП, для учёбы и для себя конечно писал, отлично помнил все эти классы и подключения к базе данных. Последние месяца 3-4 больше занимаюсь вёрсткой, Вордпрессом, яваскриптом и другими подобными вещами. Сейчас возникла надобность написать небольшое приложение на чистом ПХП, с базами данных. Начал это делать и осознал, что я почти всё забыл и даже сходу не могу написать функции которые работают с базой данных и выполнить все необходимые операции. Конечно, завтра я уже всё сделаю, потрачу несколько часов, посмотрю в свой старый код и норм. Но у меня возник вопрос, когда работаешь веб-программистом, насколько часто используешь например функции ПДО? Всё же делается на КМСах или Фреймворках, где это всё уже автоматически сделано, выходит всё это знать необходимо, потому что это базовые знания, но они очень и очень редко нужны?
>>623029 Недавно тоже думал над этим вопросом, но потом взял и выучил вёрстку, до уровня верстания с ПСД макетов, таких как в задании ОПа и немного посложнее. Потрать пару недель, получили этот скил и тебя это уже не будет волновать.
>>623778 рекомендую не заебывается. Все что в Pstorm связано с интеграцией к твоим софтинам обернется тебе дикими лагами. Конечно если у тебя топовая машинка для разработки тыщ за 60, то можешь попробовать. Да и интерфейс с шторме и так перегружен и напичкано туда всего чего можно. Пробовал интегрировать xdebug в Шторм - оказалось для него нужен запущенный xdebug, которые следить за выполнением ВСЕХ скриптов от начала до конца. Можно конечно, ставить трейсы самому, но тогда весь смысл интеграци и - ставить точки остановы и чекать переменные - отпадает. А при полном трейсе производительность дико низкая.
Вообщем суть в том, что при использовании Phpstorm для разработки больших проектов в которых >10.000 файлов все фишки интеграции и дебага дико нагружают локальный сервер.
>>623778 И да, mysql ставится отдельно, так как это отдельная программа. И вообще привыкай к тому, что разработка на PHP это разработка с помощью опенсорс платформы - то есть тут нихуя нет юзерфрендли, когда все за тебя поставили. Софт стафишь отдельно и отдельно его интегрируешь. Но если ты линуксобог - тут чуть чуть полегче. Загуглил команду - скопировал в консоль - поставился LAMP, например. Загуглил команду - установил Webmin, итд...
>>623784 На самом деле в программировании нужно тоже найти свою нишу.
Человек, который, например работает в SensioLabs и занимается разработкой фреймворка и человек, который собирает сайты на Symfony - это 2 совершенно разных специалиста. Потратив нек. количество времени на пердолинг можно перетечь из одной в другую. Понятное дело, что функции PDO первый специалист должно знать намного лучше, чем второй, потому что второму они просто не понадобятся для повседневной работы. А все что не повседневно - то гуглится.
Как мне хорошо понять, что такое ООП, парадигмы и т.д.? И где я могу на доступном уровне получить не языковые, а обще-программисткие знания? Как я понимаю, нужно читать что-то из книг в первых трех колонках гайда ОП-пика закрепленного треда /pr/?
бля, господа, посмотрите на этот раздел, на эту зловонную клоаку, состоящую из спермотоксиозных школьников, жалких детей с явно не сформировавшейся личностью, откровенных жирных уродов, анимедаунов, гомосеков и прочих имбецилов. Как же мне стало противно программирование, после пары лет, проведенных здесь. Эти грязные животные, эти оборованные чавкающие плебеи, которым впору жрать из одного корыта со свиньями, эти животные, не могущие связать и двух слов, что-то нечленораздельно мекающие, не могущие ни в литературный русский, ни в английский, ни вообще в какой-либо язык, и вот с их богомерзкого изобильного стола мне приходится подбирать какие-то крохи? Эти тупые безмозглые животные, заучившие пару циклов со скобочками, научившиеся складывать циферки и по слогам, с переводчиком, водить пальцем по документации, вот эти вот животные не просто смеют мнить себя какими-то творцами, нееет, они натурально зарабатывают дохрена и даже кичатся каким-то там "техническим складом ума", техническим образованием. И вот с этими животными мне приходится конкурировать, и эти вот мекающие бессвязные звуки овцы уезжают заграницу и рубят бабло на своих "технических" знаниях, вся суть которых сводится к зубрежке формул и складыванию циферок с калькулятором. Пелена спала с моих глаз. Кодинг - это мерзко, это грязно, это тупо, это ремесленно, это просто обслуживающие чернорабочие, смазывающие шестеренки Интернета, чья задача разносить мысль, реальную человеческую Мысль, которая никогда не зародится в ограниченных черепушках кодеросантехников. Единственное, что меня возмущают, что эти бекающие животные реально получают бабло за свое ковыряние отверткой в иде. Это просто несправедливо, этот тупой скот должен знать свое место, единственная причина, по которой он так заносится - так это бедственное положение рашкинской экономики, где у всех, особенно у литераторов и мыслителей, нет применения, поэтому байтосантекхники прикармливаются у индусов и мнят о себе не весть что. Вот вам мой смачный "гуманитарный" харчок в немытую харю, мерзкие грязные животные, чье место по их свинской природе - в хлеву.
>>622641 >>622641 Шиндовс, пробовал что на 7, что на 10, одно и тоже дерьмо. Кодировка 1251 для казахского текста. >надо передавать данные в виндовой кодировке. Как их туда передать в виндовой кодировке? iconv? Если да, то это не вариант, так как iconv не может сконвертировать правильно.
У меня к сожалению жесткие рамки, нужно работать под Win.
Такой вопрос. Из бд извлекается массив. Допустим. $arr { [a] = 1, = 2, [c] = 3, } Проблема в том, что например ключа [d] в массиве может и не быть, но при дальнейшей работе скрипта возможно потребуется обращение по этому ключу.
Например:
$a = $arr['a']; $b = $arr['b']; $c = $arr['c']; $d = $arr['d'];\\ ключа d как бы и нет, но как бы и похуй, если $d при этом станет равным = "" То есть все работает как нужно.
Интересует, правильно ли так делать? Или нужно обязательно проверять наличие ключа в массиве , вроде isset( $arr[ 'd' ] ) перед тем как обратиться по этому ключу?
То есть я могу просто написать первый вариант, или мне обязательно нужно делать что-то похожее на второе? Интересует правильность во всех аспектах: хороший тон, скорость работы(?) и пр.
Как такое возможно? «Из БД извлекается массив ... ключ может и не быть». Не может такого быть. Все колонки что ты запрашиваешь из БД, возвращаются. Ты что-то делаешь неправильно.
Всем, сап. js-у и php я пока только учусь, но на работе поставили задачу, и времени на пошаговое изучение пока нет. Поэтому хочу обратиться к вам, авось поможете. Есть функция на js, которая передает параметры, по средствам - XmlHttpRequest, из сформированной ранее на php таблицы, для sql запроса на сервер. Далее на сервере формируется xls - документ(с помощью PHPExcel). Дак вот, если просто сохранить этот документ, на сервере, то проблем нет, но мне нужно его вывести в новом окне брузера или хотя бы предложить пользователю его сохранить. Сейчас у меня предаются параметры, формируется документ, и присылается ответ с сервера (responseText), но как мне этот ответ обработать, чтобы получить ссылку на скачивание документа, я хз.
>>623913 Что не так-то? Есть страница настроек с полями ввода. Каждое поле значение поля -> элемент в массиве который сохраняется в БД. Если пользователь не ввел значение в какое-то поле, то в массиве элемент будет отсутствовать. Но потом, по этому элементу возможно будет обращение. И речь вообще, как ты понимаешь не об этом. Тут про то нужно ли городить такие выражения $d = isset($arr['d']) ? $arr['d'] : '' если можно обойтись $d = $arr['d']. Ведь результат будет тот же? При условии что $arr['d'] вообще не существует. То есть ключа d со значение в массиве нет!
Не пойму в чем смысл внедрения зависимостей? Вот например внедряю я в конструктор объект PDO
public function __construct(PDO $pdo){ $this->db = $pdo; }
Но в чем сакральный смысл? Я так понимаю это должно помочь в будущем легко менять PDO на какой-то другой сервис, но мне ведь все-равно нужно будет лезть и менять передаваемое в конструктор значение.
Это связано с разделением обязанностей и принципом единой ответственности, то есть каждый класс должен заниматься своим делом.
То есть в твоем случае например нам не приходится в класс засовывать установку соединения с БД, настройку разных параметров - это не его задача.
И если не передавать PDO через конструктор, а сделать по-другому, как ты добьешься, чтобы несколько классов использовали одно соединение с базой, а не каждый свое?
Ну и как бонус, код получается лучше, надежнее, понятнее, гибче в использовании, проще в тестировании.
Стоит ли бороться с Нотайсами? Например у меня функция возвращает массив каких-то данных, но этих данных может и не быть, тогда возвращается неопределенная переменная и появляется Notice. Не обращать на это внимание или всегда определять переменную, типа типа такого $result = array(); а уже дальше даже если данных не будет, то просто вернется этот пустой массив.
>>623996 В битриксе, например, портянка нотайсов такая, что их можно только минут за 5 все прочесть, снизу вверх. Однако же деньги делают. Но если хочешь считаться "элитой" программирования и собираешься писать какой-то топчик, то нотайсов быть не должно. Не знаю, например, щас в Друпале есть нотайсы или нет.
Я пока пробежался и ответил на вопросы, из-за которых аноны не могут что-то решать дальше, задачки я чуть позже гляну, начну с самых старых. Вроде до 8-го января все проверено, так что терпимо.
Надо писать так, чтобы нотисов не было. Сам подумай, как можно писать надежный код. когда элементы в массиве могут быть, а могут не быть? Получается и код тогда может работать, а может и не работать, так? Не надо так.
> всегда определять переменную, типа типа такого $result = array(); а уже дальше даже если данных не будет, то просто вернется этот пустой массив. Неверно. Функция всегда должна возвращать данные в одном и том же виде. Единственное исключение - можно еще возвращать null если например не удалось найти запись в БД. То есть либо массив строго определенного формата + null, либо объект (что лучше) + null, либо строка + null. Как-то так.
Да. с битрикса не берите пример. Помните что они программистам 20 000 р в месяц платят, будете писать с нотисами и на массивах, будете получать столько же.
>>623850 ОП, помоги хоть ты, работа стоит, все интернеты облазил, это абсолютно не типовая задача. >>622533 Если очень коротко и не хочешь перечитывать то смотри:
Стоит задача сканировать директории на наличие файлов и создавать новые файлы (ғғғғғғғғғғғғ.hui) с казахскими буквами. Но у меня это не выходит, я уже всё прошерстил в интернете, но ничего валидного не нашел. Как справиться? В какую сторону копать? ОС Win 7/10 жестко предопределена. Также для наводки: использовал функции для работы с файловой системой и собственно iconv. Но он не справляется с кодировкой файловой системы.
>>624066 Да тут кода и не надо в принципе то, мне нужно добиться работоспособности от функций scandir или, блин, хотя бы fopen. Вот так делаю: var_dump(scandir("C:\\ASED\\")); fopen(iconv("UTF-8","WINDOWS-1251","C:\\ASED\\ғғғғғғғғғғғғ"),"w"); fopen(iconv("UTF-8","cp1251","C:\\ASED\\ғғғғғғғғғғғғ"),"w"); fopen(iconv("WINDOWS-1251","UTF-8","C:\\ASED\\ғғғғғғғғғғғғ"),"w"); fopen("C:\\ASED\\ғғғғғғғғғғғғ","w");
ОП, сколько можно зарабатывать с помощью пыхи, если я допустим, не гений-математик, а обычныйкун? Как ты думаешь, насколько переспективный данный язык, сильно ли соснёт начинающий через 5-6 лет или всётаки сможет прокормить кота и себя?
>>624083 Для PHP лучше шторма еще ничего не придумали. Может у кого-то другой опыт, но я пробовал такие альтернативы:
Sublime Atom Eclipse
Для меня главная задача IDE
1) Автокомплит функций, классов, методов, переменных. 2) Удобное управление вкладками. 3) Максимальная поддержка синтаксисов из коробки (кроме основных нужны XML, JSON, YML, Twig) 4) Функционал сниппетов 5) С недавнего времени еще использую встроеный bash-терминал.
Sublime и Atom Чтобы реализовать в них весь вышеперечисленный функционал (кроме вкладок) нужно наставить опен-сорс костылей. Пробовал и даже хотел привыкнуть, но не получилось. В Атоме нашел более менее сносный плагин для автокомплита. Но все равно он отстой по сравнению с тем, что есть в шторме.
В Eclipse автокомплит есть, но тормозит точно так же как и в Шторме при наличии в проекте Хуилиона файлов, потому решил что менять IDE нет смысла.
Для начала, если ты работаешь с большим проектом попробуй исключать из проекта те папки, которые не нужно индексировать (папки с кешем, папки с картинками) Если у тебя реально проблемы с производительностью и тормозит только лишь на включении IDE, советую попробовать Atom, потому что Java-поделки со своей индексацией файлов все равно жрут одинаково. Там не будешь охуенного автокомплита, но работать в нем можно норм.
NetBeans не ставил, так как смысла нет, такая же тормозная Java поделка, как и Storm.
Сейчас я работают так: проект от корневой доменной папки веду в Phpstorm, если нужно открыть какие-то конфиги, за пределами проекта - открываю в Sublime. Алсо в шторме есть проблема с тем, что он не может открывать большие текстовые файлы. Их я тоже открываю в Sublime.
>>624110 > Ну хуй знает, что по твоим словам не очень скоро, для некоторых 3 года это не очень скоро, а для некоторых 2 десятка. Ну и сравнения тоже какие то мутные, социальную сеть сравнивать со скриптовым языком.
>>624115 >Ну и сравнения тоже какие то мутные, социальную сеть сравнивать со скриптовым языком. Без разницы. Потому что задачи в итоге у всех сводятся к одному - зарабатывание денег и ЧСВ. Я говорю о том, что если у чего-то или у кого-то есть большая "аудитория", то бишь комьюнити, то при сегодняшних тенденциях это что-то будет актуально еще очень долго.
Значит придется перекодировать ручками - писать свои функции для перекодирования туда и обратно.
Перекодировать из 1251k в utf-8 просто: разбиваешь строку на символы по 1 байту, проходишься и перекодируешь. Коды 0-127 идут без изменений, а для 128-255 надо сделать массив где слева стоит код, справа коды или символ в utf-8. Символы можно скопировать из статьи про cp1251. советую показать код для проверки ну и самому потестировать на всех возможных символах.
Этот же массив с помощью array_flip переворачивается и используется для обратного раскодирования.
Обратное перекодирование делается так: разбиваем utf-8 строку на символы с помощью preg_split. В цикле обходим каждый символ:
- символы с кодами 0-127 остаются без изменений - символы которые есть в массиве, заменяем на код из него - остальные символы: выдаем ошибку или делаем еще что-то.
Помни такие особенности:
- в cp1251k всего 256 символов, в юникоде десятки тысяч. Значит надо решить что делать когда встречается тсутсвующий в 1251k символ - в cp1251k 1 символ это 1 байт. В utf-8 символ может кодироваться либо 1 байтом от 0 до 127 либо несколькими из диапазона 128-255
Если ты можешь жить без автокомплита, рекомендую саблайм- он очень быстрый, запускается где-то за секунду-две, причем все что ты печатаешь сохраняется даже если комп зависнет или отключится.
Из плагинов: emmet для верстки, php companion для работы с неймспейсами, docblockr для комментариев.
За 5 лет при желании можно выучить еще несколько языков. Я бы не боялся того что с PHP что-то случится, веб вряд ли вымрет в среднесрочной перспективе, а поменять язык нетрудно.
Наподключал всякого говна типа bootstrap, jquery, jplayer и handlebars, страница теперь грузится 7 секунд. Процессор правда слабый (AMD E1-6010), но все же. Я вижу дырку в 2.5 секунды, с чего бы это?
>>624192 Если тебе интересно развертывание апача как таковое, то можно и попердолиться, еще можно посмотреть в сторону nginx. В php так или иначе есть веб сервер встроенный и вроде как сторонние ИДЕхи поддерживают его.
По js все поправил, непонятно только это: >var fileId = {{ fileId | json_encode | raw }}; >Предлагаю тебе самому подумать почему и зачем тут json_encode и raw. Зачем тут json_encode и raw? Сам думать пробовал, не помогло. Ну в кавычки обернет строку json_encode, а raw предотвратит экранирование этих кавычек. Зачем мне там кавычки?
Я бы еще понял, если бы передавались какие-то сомнительные данные из базы, полученные от пользователя, например логин или текст сообщения, где может содержаться csrf код. Но я передаю суррогатный id. Ну ладно, видимо это чисто ради систематичности: мы же экранируем в твиге все что нужно и не нужно, значит и здесь так же.
>>623876 Здесь кто-нибудь вообще может по делу ответить. Понимаю, вопрос нубский, но весь тред и состоит из таких вопросов, причем намного глупее. Вы че, совсем охуели?
>>624032 >Надо писать так, чтобы нотисов не было. Сам подумай, как можно писать надежный код. когда элементы в массиве могут быть, а могут не быть? Получается и код тогда может работать, а может и не работать, так? Не надо так. Поехавший, ты с реальными приложениями вообще работал. Или только кукарекать можешь? Допустим есть страница пользователя настроек с 1000 текстовыми инпутами. Пользователь допустим заполняет 2 из 1000 инпутов и нажимает сохранить. Формируется массив соответственно из всего из двух элементов, по принципу: ключ - id ипута, значение - value инпута. Этот массив сохраняется в БД. Но потом при извлечении данных из БД возможно придется пройтись по всем элементам, ведь неизвестно сколько инпутов заполнил пользователь.
Если пользователь заполнил всего 2 инпута, то, по твоему, в БД я буду заполнять эти два элемента, и еще 998 элементов ключей с пустыми значениями? А таких пользователей тоже несколько тысяч, со своей страницей настроек? И все это хранить в БД?
>>623876 Я конечно сам нуб,но попробую помочь. Будем рассуждать логически. Если ты попытаешься обратиться по ключу которого нету в массиве ,то приложение вылетит. Значит надо либо через исключение обрабатывать вызов, либо назначать дефолтное значение.
>>624325 >>624330 ни в коем случае нотисов не должно быть, если вы уважаете себя и код.
если на на пальцах, то 1й случай быстрый но не факт что елемент в массиве будет существовать, будет как раз нотис потому правильней 2й вариант.
насчет массивов вы ошиблись, как раз если в массиве елемента не будет это не критично, хотя не хорошо, но если в обьекте это уже может быть критично. как вы собираетесь проверять существование переменной в обьекте - очень неудобно, и обьекты больше жрут памяти и медленней обрабатываются. Имхо я за массивы - минимум расходов максимум полезности, все легко проверить isset(ar[d]) и т.д.
Человек, с которым мы договорились о переделке сайта дня 3 назад в этом треде, только что отписался на почту тебе, по поводу этого задания. Скинул ссылку на сайт, который выложил на бесплатный хостинг.
function calc_sum_func($order_id){ $order = new Class_Order($order_id); .................................................. return $order->yoba_eto_ti($ya); }
>>624632 Смысл в том, все вычисления по пересчете суммы заказа я хочу вынести в отдельную функцию calc_sum_func(), чтобы можно было вызывать ее из других частей программы, просто передавая Id заказа. Но опять же получается, что в основной функции some_func() я создаю экземпляр , и создаю еще один в calc_sum_func() ?
Конечно, все расчеты можно сделать в some_func() и обойтись одним экземпляром заказа, но теряется гибкость.
>>624126 >>624128 Привет ОП, вчера попробовал твой метод, но суть в том, что функции ord и chr работают исключительно в рамках таблицы ASCII соответственно их невозможно применить для воспроизведения символов казахской кодировки.
ord - Returns the ASCII value of the first character of string. chr - Returns a one-character string containing the character specified by ascii.
>разбиваешь строку на символы по 1 байту, проходишься и перекодируешь
не совсем понял, каким методом можно так разбить её? И куда в итоге девать эти байты? Если ord и chr, то гляди выше.
Нашел целый список кодировок казахского языка в iconv и все их пробовал переконвертировать через UTF-8, но исходных символов так и не удалось добиться. Вот список который я пробовал.
Для представления: iconv("UTF-8", "{Кодировка из списка например CP154}", "Ғ");
Всегда получалась лабуда вроде Ѓ или Є, но не как не Ғ.
Я так понимаю совместимости в данном случае ожидать невозможно, ибо CP1251-k отстутвует в PHP.
Может быть есть способ определения "сырого потока" данных для дальнейшего воспроизведения? Ну чтобы передать винде списки кодов символов, а она их уже отобразила как надо?
>>624656 Спасибо. И еще вопрос, я правильно понимаю, что $order в функции calc_sum_func() виден только внутри этой функции? Как собственно и любая другая переменная?
>Да и по логике у объекта ордер должен быть метод пересчета стоимости который должен вызываться автоматически при добавлении/удалении товара.
Все верно, но задача стоит в написании что-то в виде плагина, который сможет сделать кастомный расчет, без изменения уже имеющегося класса.
Нотисы, варнинги информируют программистов и администраторов о том, что с приложением что-то не так и нужно вмешательство. А теперь подумай: если у тебя при нормальной работе тоже идут нотисы, то как ты поймешь: есть ошибки в коде или нет? лог становится завален мусором и бесполезен.
То что ты написал - это кривой код, если ты не можешь сделать чтобы он работал без нотисов. Если ты не знаешь как сделать, запости код, может сообразительный анон что-нибудь подскажет, тут таких много.
> ты с реальными приложениями вообще работал Я самоучитель по PHP6 прочитал недавно.
Нехорошо конечно. Надо посмотреть, может можно сразу объект в функцию и передавать.
Алсо названия функций у тебя кошмарные, зачем сокращать и зачем писать func?
> я хочу вынести в отдельную функцию calc_sum_func(), чтобы можно было вызывать ее из других частей программы, просто передавая Id заказа. Можно сделать функцию, работающую только с объектом. Если где-то есть i то можно по нему получить объект и передать в функцию. хотя я вообще не понимаю, зачем тебе глобальные функции в ООП коде, лучше бы сделать Сервис Работы с Заказами и в нем нужные методы.
Неправда. Они работают с байтами, и возвращают код первого байта строки либо создают строку из 1 байта. Работают с любыми значениями байт от 0 до 255.
> не совсем понял, каким методом можно так разбить её? str_split например. Или цикл от 0 до strlen - 1, на каждом шаге берешь i-й байт строки через $string{$i}
В PHP строка это просто массив байт. Каждый байт имеет значение от 0 до 255. В 8-битных кодировках 1 символ кодируется ровно 1 байтом (и возможно до 256 разных символов), в utf-8 - 1 символ = от 1 до 6 байтов.
Чтобы получить i-й байт строки числом, пишешь ord($str{$i}). Чтобы создать строку из нескольких байт, пишешь либо chr(123) . chr(234) либо "\xa0\xc0".
Чтобы разбить utf-8 строку на массив символов (а там символы могут состоять из нескольких байт) нужен хак с preg_split.
> Может быть есть способ определения "сырого потока" данных для дальнейшего воспроизведения? Нет, надо написать 2 функции перекодирования из cp1251k в utf-8 и обратно. Начинай писать, я могу проверить. Если что-то еще непонятно - уточняй.
>>624720 Хех, я понял что мне можно по коду из ord вычислить символ и перекодировать его отобразив непосредственно на HTML странице или внутри файла текстом, это да, без проблем. Но мне нужно записать этот файл обратно же с именем из этих символов.
Я не очень понял, при чем тут отображение? Тебе надо функцию, получает на вход строку в одной кодировке, на выходе выдает строку в другой. Зачем что-то выводить?
Ты разбиваешь входную строку на символы (в зависимости от кодировки) и перекодируешь их посимвольно. И результат сохраняешь в другую строку.
>>624733 Сводя всё конкретнее, мне нужно чтобы была возможность НЕ считывать из файла, а записывать файлы с именем ҒҒҒҒҒҒҒҒ. Именно меня интересует возможность присвоения имени ҒҒҒҒҒ к файлу в винде.
>>624733 ОП, если это ты, скажи, у тебя получилось под виндой создать файл с именем ҒҒҒҒҒ? Если да, то я не буду спорить с тобой, а постараюсь вникнуть в твой текст.
>>624759 Они не помогут, поверь мне, я пропердолился с этим уже больше двух дней. Поставь виртуалочку на досуге, и затесть работу этого говна. По идее же, должен работать такой код: $file = chr(210); fopen("C:\\ASED\\$file","w"); Так как судя по функции ord("Ғ"); - это 210. Но нет, нихера.
>>624763 Это вообще не работает. Тем более что 16-чной адресации не существует в cp1251k если я не ошибась конечно.
Есть мнение что файловая система NTFS использует кодировку символов UTF-16, но я пробовал опять таки делать конвертацию из UTF-8 в UTF-16 и тоже крякозябры.
> как судя по функции ord("Ғ"); - это 210. Неверно. 210 это первый из 2 байт которыми эта буква кодируется в utf-8. А тебе надо передать в chr код этой буквы в cp1251-k. Судя по википедии, это 0x81 в 16-чной или 129 в десятичной.
> Поставь виртуалочку Нет.
> Тем более что 16-чной адресации не существует в cp1251k если я не ошибась конечно. Ты ошибаешься. 16-чные числа это просто другая форма записи чисел. Одно и то же число можно записывать в разных системах счисления, и оно выглядит в них по разному, но число это одно и то же.
> Есть мнение что файловая система NTFS использует А я смотрел исходники PHP. В Windows есть 2 набора функций6 одни принимают данные в utf-16, другие в 8-битной кодировке (которая заивсит от языка винды и называется у майкрософт ANSI кодировка). PHP использует 8-битные функции.
Пальцаны, делаю тестовое задание на php, до этого не учил его. В общем нужно сделать срипт, который принимает данные через get запрос, решает задачку и выводит ответ на страницу.
Срипт нужно расположить на сервере, чтобы к нему можно было обратиться по url.
Я справился со всем, кроме последнего. Где мне сервер найти? Можно как-то со своего компуктера запустить этот мини сайт?
Написал недавно один человек, с которым я работал по фрилансу, но не по веб-программированию, спрашивает смогу ли я написать скрипт который будет делать из ссылок РСС в стиле XML 2.0, то есть граббит определённые сайты тайтлы и дескрипшены и формирует из них РСС ленту я так понял. Я что то подобное делал, парсить у меня вроде бы получается, вот только немного не помню, что значит сформировать РСС? То есть задача спарсить определённые данные с разных сайтов в определённый формат и подключить это к какому-то рсс-каналу, где оно будет всё автоматически гонять? То есть мая задача только спарсить в правильном формате и закинуть на определённый сервис или дать в плагин, а саму рассылку он уже сделает сам?
Допустим у меня есть класс родитель от которого наследуется много контроллеров. Стоит ли в этом классе сразу создать в конструкторе экземпляры объектов, которые потом будут использоваться в дочерних классах? Или в каждом классе отдельно создавать экземпляры конкретно тех объектов, которые в нем будут использоваться?
>>610656 >>612606 >https://github.com/someApprentice - у тебя какие-нибудь вопросы к ОПу или анонам есть? Или мы все разобрали? Да, есть. Все это время я прострировал потому что не как не понять как выглядит простая регистрация на ООП. Спасибо что вспомнил про меня. Помимо этого, я, все же, пытался понять свою ошибку и пытался как-то переделать код. Сейчас я еще раз перечитаю пасты, подумаю и после попытаюсь сформулировать правильные вопросы.
Пацаны, вот у меня есть кнопка сенд, она собирает данные с текстбоксов потом что-то там делается и выводятся новые данные на той же странице. При этом после нажатия на кнопку сенд данные в текстбоксах пропадают, как сделать, чтобы они оставались?
По 10-й задаче: надпись [2, 3, 4] слева надо сделать серой. Насчет картинки - меня беспокоит что из-за width 100% картинка может в каких-то условиях увеличиться. Нельзя ли сделать через max-width: 100%? В остальном, все ок.
По 11-й задаче: нет рамки при фокусировании верхнего переключателя с клавиатуры (тот что на радиокнопках) - почему?
Вместо label.button лучше писать просто .button в CSS коде, так как имени класса достаточно чтобы идентифицировать элемент.
Не уверен, хорошая ли идея использовать span, не лучше ли взять какой-нибудь другой тег, но что-то у меня идей нет что бы тут подошло, так что пусть остается как сделано. Кроме проблемы с фокусом, других замечаний нет. Хорошие переключатели, может тебе самому когда-нибудь пригодятся.
> $creditBalance x $percent) + $servicePayment Это повторяется там 3 раза, подумай как избавиться от повтора и упростить код. Если не знаешь как, можешь попросить подсказку.
> $test_preg_split = array(); Эту строчку можно не писать, она ничего не делает полезного. Саму переменную надо назвать осмысленнее, например $sentences
> for ($i = 0; $i < $index-1; $i++) { Тут лучше использовать foreach. Также, по моему из-за $i < $index-1; ты пропускаешь последнее предложение.
> ( ?)+ Тут можно использовать звездочку вместо вопроса и плюса
у тебя удивитеьные способности видеть скрытый смысл даже в идентификаторах.
Советы:
> '/\\,/' => ', ', > '/\\;/' => '; ', > '/\\!/' => '! ', Эти выражения можно объединить в одно, а при замене использовать $1 .. $9 для обозначения знака препинания. Более того, получившееся выражение можно засунуть в первый массив с регулярками для поиска ошибок.
> '/жы/ui' => 'жи', > '/шы/ui' => 'ши', Тоже можно объединить.
> '/ а /u' => ', а ', > '/ а, /u' => ', а, ', > '/ а \\-/u' => ', а \\-', > '/ но /u' => ', но ', > '/ но, /u' => ', но, ', Тоже можно объединить
> "/.{3,5}координально.{3,5}/ui", Не выводит сообщение об ошибке если слово стоит в самом начале текста: https://ideone.com/jdUhTn
> [^а-яё]здела Здесь наверно лучше использовать \\b которое значит «граница слова» и ищет место, где с одной строны строит \\w (буква, цифра, подчеркивание), а с другой - не \\w.
> [а-яёa-z]\\sа Здесь лучше разрешить использовать больше 1 пробела, для обозначения того что в начале идет буква, можно испоьзовать \\w (любые буквы, цифры, подчеркивание)
> ... ТОчка значит «любой символ». Чтобы искать многтточие, надо писать \\.\\.\\. Имей в виду, что в юникоде есть многоточие одним символом: …
Я думаю, там лучше использовать \\b чтобы сказать что справа от слова «но» не должно быть букв или цифр.
> "/.{3,5}[а-яёa-z]\\sа(\\s?|,|...| \\-).{3,5}/u", > "/.{3,5}[а-яёa-z]\\sно(\\s?|,|...| \\-).{3,5}/u", Можно объединить вместе
> [^\\s] То же самое что \\S
> [,\\.!\\?:;][^\\s] Это может сработать на многоточие .. или 2 воскл знака: !!. Надо вместо ^\\s написать «любая буква»
> for ($i=0; $i < $possibleErrorsCount; $i++) Тут удобнее исплоьзовать foreach
> if (preg_match_all($possibleErrors[$i]['pattern'], $text, $matches)) { if можно не использтовать для preg_match_all, если она ничего не найдет то массив будет пустой и цикл не выполнится ни разу.
> foreach ($cleanMatches as $key => $value) $value надо переименовать. $key не надо писать если ты его не используешь.
Длинные комментарии надо писать над строчкой, а не справа.
В общем, попробуй улучшить код теперь. Пока не все идеально.
> 0 => array ( > 1 => array Не надо писать тут 0, 1, PHP сам их пронумерует.
Ну и все замечания выше надо исправить, регулярки объединить, исправить, упростить итд.
> И получается, что ошибок не найдено, а текст исправляется. > Как скрипт остановить в этом случае? Можно проверять количество найденных ошибок через if и не исправлять если их ноль.
Вектор, паттерны, задача про ошибкиАноним13/01/16 Срд 23:43:25#516№625135
> $bigRegexp = "/координально|сдесь| Не, это не лучшая идея, у тебя уже получается на каждую ошибку аж 3 регулярки (общая, для поиска и для исправления), раскиданных по программе. Это уже перебор. Очень неудобно будет их добавлять или исправлять в 3 местах сразу.
Для проверки есть ли ошибки можно завести переменную и в нее суммировать число найденных ошибок каждой регуляркой. А еще можно регулярки для исправления поместить в ощий массив регулярок и применять только если есть ошибка данного типа.
Увы, модель предметной области пока сделана неправильно. Ну например у тебя все засунуто в один класс, и мы не можем добавить новую профессию не правя код. Пока это не ООП, а код который притворяетя что он ООП. Ну и с твоим кодом будет сложно сделать вот это дополнительное задание (оно проверяет насколько твой код гибок и насколько удобно его изменять под требования заказчика):
----------------
### Антикризисные меры
Задание: напиши программу для учета расходов и результатов работы всего дружного коллектива компании «Вектор».
Пока ты решал задачу по выводу отчета о сотрудниках и департаментах, разразился мировой экономический кризис. Доходы компании начали снижаться, и совет директоров поставил перед руководством задачу принять меры. Менеджеры 3-го ранга, блестящие выпускники топовых экономических вузов столицы, быстро смогли разработать три альтернативных антикризисных решения:
1. Сократить в каждом департаменте 40% (округляя в большую сторону) инженеров, преимущественно самого низкого ранга. Если инженер является боссом, вместо него надо уволить другого инженера, не босса.
2. Увеличить в целях стимуляции умственной деятельности базовую ставку аналитика с 800 до 1100 тугриков, а количество выпиваемого им кофе с 50 до 75 литров. В тех департаментах, где руководитель не является аналитиком, заменить его на аналитика самого высшего ранга из этого департамента (а бывшего руководителя вернуть к обычной работе)
3. В каждом департаменте повысить 50% (округляя в большую сторону) менеджеров 1-го и 2-го ранга на один ранг с целью расширить их полномочия.
Совет директоров в затруднении: какой путь выбрать? Помоги им с этим, распечатав прогноз по потреблению и расходам (аналогичный тому что требуется в задаче) после принятия каждой из мер.
----------------
Теперь давай посмотрим, как тут сделать классы правильно.
----------------
Когда ты решаешь задачу на ООП, ты должен ответить на вопросы:
— какие есть сущности, для которых мы сделаем классы? (Сотрудник и Департамент, может быть еще Компания?) — какие у них есть свойства (у Сотрудника есть ранг, базовая ставка, профессия, является ли боссом). Потребление кофе или зарплата не являются свойствами так как они вычисляются из других свойств и хранить их не надо. — что мы хотим от них получить (какие у них должны быть методы). Например мы хотим узнать сколько сотрудник заработал или сколько он пьет кофе. От департамента мы наверно хотим получить сколько всего выпито кофе и заплачено денег. — как сущности связаны? Очевидно, Сотрудник работает в каком-то Департаменте.
Также, сразу скажу еще один совет: гораздо удобнее сделать не один класс Сотрудник, а 4 класса: Инженер, Менеджер, и т.д. Тогда мы можем легко менять например правила расчет зарплаты или кофе для каждой профессии. Естественно, копипастить одинаковый код в 4 класса не надо — создай базовый абстрактный класс Сотрудник и унаследуй от него 4 класса-профессии. Правда в этом случае мы не можем поменять профессию сотрудника.
Также, ты должен для всех полей и методов расставить модификаторы доступа (pubic, private, protected - они определяют, откуда можно обращаться к полю или методу). Ты должен подумать логически и для каждого поля/метода определить: это часть кода, которая относится к внутренней логике класса и не должна быть доступна снаружи, или же это часть кода, которая должна быть доступна. Ну к примеру, в Департаменте метод посчитатьОбщиеЗатратыНаЗарплату() должен быть публичным - для этого мы и пишем класс, чтобы считать затраты.
В общем, чем меньше публичных свойств и методов, тем лучше. Ведь когда другой разработчик или ты сам захочет использовать класс, он будет смотреть только на публичные элементы, и чем их меньше, тем проще разобраться как класс работает. Но не стоит закрывать вообще все: надо думать, является ли метод частью вунтренней логики класса или он предназначен для выдачи полезной информации.
Когда ты проектируешь класс, ты можешь представить себе что ты делаешь некую коробочку, из которой торчат переключатели и провода. Публичные свойства и методы - это то, что ты разрешаешь использовать другим программистам. Приватное - это то, что скрыто внутри коробки и что они трогать не должны.
----------------
Вот что надо сделать:
- заменить один класс на несколько, чтобы каждый соответствовал одной сущности - убрать из классов все что к ним не относится. Например разбор строки с должностью и уровнем надо убрать. Также, посмотреть и избавиться от лишних массивов. - проставить правильно private/public - сделать еще и вторую часть задания
> Ни разу не встретил и не читал такого: "На работе у нас возникла такая то задача, мы применили такие то паттерны, и это принесло профиты." А ты слышал такое?
- мы применили if и это принесло профиты - мы применили цикл и массив и это принесло профиты
Вряд ли кто-то будет хвастаться что он знает основы языка? Паттерны это те же основы только в плане архитектуры. Они используются например в общении между программистами: «там в проекте есть FrontController, мы можем наш код в него дописать» или «давайте тут не будем заморачиваться, а используем Single table Inheritance».
А наши задачки на HTML прошел? Может стоит глянуть? А так, я бы советовал учить JS/DOm/jQuery, верстальщик без яваскрипта маловостребован, тем более в кризис. В Оп посте есть задачки и ссылки на учебник learn.javascript.ru .
Поищи команду SET NAMES в дампе, если ее нет, то надо определить кодировку дампа и поставить эту команду. Также, посмотри какая кодировка стоит, если есть, в CREATE TABLE. Лучше всего использовать utf8 (в mysql она пишется без дефиса). Если кодировка не указана в CREATE TABEL то она берется из кодировки базы или настроек mysql в конфиге.
Неправильно советуешь. iconv не нужен если все правильно настроено. В коде надо использовать utf-8, при соединении с БД делать set_charset или SET NAMES utf8
> Лучше напишу свою функцию/метод, где запрос будет слепливаться в цикле и там же привязать параметры. Можно но удобнее конечно когда это библиотека делает
> доктрина это королева orm, Да, стоит рано или поздно с ней знакомиться. Лучше пока ничего нету.
> Может есть более кошерный фреймворк, кроме бутстрапа? Я не знаю. Бутстрап вроде самый известный.
> Чтобы была нормальная структура html и не было этой мешанины типа class class-another class-abc class-class-class Это нормально.
Можешь сделать и так, и так, можешь сделать функцию для заквочивания массивов, можешь подключить квери билдер. Но не стоит генерировать тысячи плейсхолдеров для каждого элемента массива.
Если вы что-то написали до 10 января и я вас пропустил, то напомните о себе. Если после - подождите еще, решайте пока задачки, читайте учебники, не тратьте зря время.
> Выполнил кубики Неплохо, но с даблами там по другому, там ничья если у обоих выпали даблы независимо от числа очков.
> циклы Там ошибки, смотри внизу на ideone:
> PHP Notice: Undefined variable: paymentAfterAll in /home/si1YgK/prog.php on line 12 > PHP Notice: Undefined variable: month in /home/si1YgK/prog.php on line 20 Обращаешься к несуществующей на тот момент переменной.
> if ($totalCredit <= $paymentAfterAll Это явно непраивльно так как переменная справа еще не существует.
Спасибо, ОП, ты лучший. Буду перерабатывать коды на все задачи, что ты мне поправил, но заново грузить не буду, чтобы не нагружать тебя. Учту все замечания в следующих задачах.
А ты пройди наши задачки из Оп поста по этим темам - этого будет достаточно. Конечно нужны, ведь тебе надо будет работать с чужой версткой и важно не разломать ее и не писать код которй потом будет тяжело поддерживать.
Вроде бы разобрался. Один вопрос, у меня init написан процедурно, не возникнет ли у меня проблем, если, например, в этом же коде, я захочу написать его как класс? Я помню что так можно делать, просто не понимаю почему сейчас лучше процедурно. Это потому что так удобней делать внедрение зависимостей? Я бы классом сделал и внедрял её статически __construct(PDO Init::$pdo).
Оп, поясни пару вещей: нахуй все это надо и хули за все это будет? 1) Все эти мвц, паттерны, алгоритмы - зачем это все? Попытался написать код в стиле дезигн паттернс, он разросся и расплодил сущностей, а реальное изменение его все равно потребует перепила половины файла. Да и вообще, ооп в пхп - к чему это? К чему все эти симфони и прочие фреймворки, если все равно пишутся бесконечные админки, круды и проверка форм? Куда расти и зачем? Чтоб смотрите как могу? Ведь все равно, я так понимаю, хайлоад на пхп не пишут, каких-то хардкорных вычислений не делают и уж тем более не рисуют красивой картинки или каких-то распределенных систем, например. Так зачем все это? 2) А что в итоге? Вот подучился я. Приехал в ДС. На какую зарплату рассчитывать стажеру? А после пары лет? А к тридцатнику? А дальше куда деваться? Хэдхантерам и прочим фрилансим.ру не доверяю, хочу твоего мнения.
И вопрос не по теме: где искать таких няш, как ты, по другим языкам - с++, шарп, питон, етц. Ну, наставничество и вот это все. Не в рашке, надо понимать, лол?
> Все эти мвц, паттерны, алгоритмы - зачем это все? Циклы, переменные, функции - зачем это все? Это основы без которых ничего не сделать.
> он разросся и расплодил сущностей, а реальное изменение его все равно потребует перепила половины файла. Зато не половину приложения. Ну и я не видел твой код, может он на самом деле не ООП, а процедурщина с классами.
> К чему все эти симфони и прочие фреймворки, если все равно пишутся бесконечные админки, круды и проверка форм? Ну так с ООП и ORM формы и круды делать проще и быстрее. Это же ад, делать без готовых библиотек форму с валидацией и работой с БД.
> хайлоад на пхп не пишут, фейсбук, википедия не хайлоад?
> На какую зарплату рассчитывать стажеру? С этим на hh.ru или в wrk
> по другим языкам Не знаю. Но я думаю если ты хорошо изучил PHP то с другимии языками ты и сам наверно справишься.
>>625344 Ты разве ОП? Циклы, переменные и функции - это основы. А фабрики абстрактных адаптеров - это ебанина. Чего писать-то, те же скрипты на 300 строчек. Почему не хочешь ответить на вопрос о зп? Сколько сам получаешь, например? А аноны, которые тут к успеху пришли? Друзья, знакомые?
>>625344 >или в wrk Там ничего толкового не будет точно, дам одни долбоёбы-версталы да сис. админы сидят у которые ждут полной автоматизации в настройке и развертывании сети, чтобы остаться безработными.
> Почему не хочешь ответить на вопрос о зп? Потому что не хочу. Мне не нравится когда людей оценивают исключительно по этой цифре. Сам никогда не интересуюсь кто сколько зарабатывает.
Тогда тебе лучше ориентироваться на тренеров по дзюдо, владельцев нефтяных компаний и получателей господрядов - такому мастерству как у них, в нашем треде точно не научат.
>>625360 Хех. Ну в принципе да, если так подумать ЗП не показатель в некоторых случаях. >>625361 В первую очередь надо выбирать занятие кодингом не судя по тому сколько получает кодер, а по заинтересованности в кодинге как таковому непосредственно.
>>625345 >Почему не хочешь ответить на вопрос о зп? Сколько сам получаешь, например? А аноны, которые тут к успеху пришли? Друзья, знакомые? ОП успешный человек! У него, очевидно, пассивный доход или уже накопленные капиталы раз у него есть время и на нас! А ведь он отвечает почти каждый день, и это длиться уже не первый год. Ты представляешь насколько ОП поразителен? говорите что он не компетентен? Я после его уроков диву даюсь какой у меня красивый и простой код. Я лично после его уроков за год-полгода устроился в веб-конторку с первого раза, просто оставив ссылку на свой гитхаб в резюме, и продолжаю идти к успеху который, как я хотел бы, не уступил успеху ОПа.
>>625365 Допустим, дальше что? >>625363 Гениальный вопрос с учетом заголовка треда. >>625368 Он охуенен, базара нет. Вопроса про зарплаты в отрасли это не снимает.
>>625371 >Допустим, дальше что? Когда ты это допустишь, тебя уже ебать не будет соклько ты получаешь, ты будешь получать удовольствие от кодинга в первую очередь. >Гениальный вопрос с учетом заголовка треда. Ну ОП еще тут развел верстку и JS тред. Только меня не одного наверное это дико напрягает, когда вёрстко-макаки его вопросами забрасывают. >Он охуенен, базара нет. Вопроса про зарплаты в отрасли это не снимает. Значит ты еще не определился для себя охуенен или нет, раз тебя волнует размер его хуя.
>>625378 Такс, такс, с такими нервишками ты много денег не заработаешь. >>625381 Ну просто тред именуется PHP Тред, а не вебдев. Вёрстка по сути же не имеет отношение к программированию, больше, наверное творческий процесс. Ну знаешь, типа черчения и математики.
>>625386 Больше подходит определение - кодовая разметка, ибо сводится всё к конкретному позиционированию объектов. Так или иначе всё гораздо примитивнее как по мне. Не в обиду сказано.
только почему-то многие верстальщики и php-разработчики даже эту «примитивную» технологию освоить не смогли и верстают наугад переставляя свойства. Быдлокодеры, в общем.
>>625405 >php-разработчики Примитивнее относительно даже скриптовых языков я имел в виду. Но говноедом PHPшника так или иначе нельзя назвать, если он верстает на похуй.
>>625384 >>>625378 >Такс, такс, с такими нервишками ты много денег не заработаешь. Да какой-то поехавший чсв в вкатился в тред что-то требует от нас. Его интеллигентно посылают нахуй, а он питушится от того что тут его величесивупетуху никто ничего не должен. Таким как он здесь не рады, мы тут обсуждаем кошек-мышек и аниме!
Есть ли какие-нибудь книги в которых рассматривается архитектура? Когда начинаю писать что-то крупнее сайта визитки все превращается в какую-то ебучую кашу. Что читать чтобы научиться писать красивый, понятный, структурированный и соответствующий принципам ООП код? Где на гитхабе можно посмотреть интересную реализацию того же MVC?
>>625368 Два горячих чаю налил с разбега и по хардкору! ОП - это мощь и глыба, плюс хороший человек. У меня именно с такими, как наш ОП, ассоциируется практически всё то лучшее, что есть на анонимных имиджбордах: бескорыстная помощь, братство, освещение новых горизонтов, непредвзятая оценка.
И я ничего не имею ни против опа, ни против его малолетних поклонников. Просто это выглядит смешно, вот и все. И флуда слишком много в треде, поэтому призываю всех хоть чуть-чуть думать перед тем как писать. Желательно чтобы тред состоял из полезной инфы, то есть вопросов и ответов, а не чата как сейчас.
>>625440 Да в чем неприемлемо-то? И для кого? Это двач, детка. Вежливо спросил, какие в среднем с зарплатами у проггеров на php разного уровня. Начались какие-то предъявы, нравоучения и оскорбления.
>>625491 Тебе не менее вежливо предложили посмотреть на hh.ru. Тут был анон из ДС с зп 120к у джуна, есть знакомый с зп 150к опять же в ДС, но там питон и он админ. Хз, чё тебе надо, возьми да сам посмотри.
Нет никаких полезных книг, это не история и не география, чтобы научиться по книжке. Учиться нужно по документации и постоянно практиковать, то есть писать код и пытаться его улучшить. В любой нормальной конторе ведущий программист делает ревью кода стажеров и джуниоров. Сделай задания из шапки на сайт регистрации студентов и файлообменник, выложи сюда, оп напишет замечания. Когда исправишь понимание кода станет значительно лучше. Затем нужно устроиться в контору где поставлена командная работа. Потом можешь попробовать читать Фаулера и Мартина.
>>625536 Серьезно. Не путай стажера с джуниором. Не путай веб-студии, которые занимаются версткой и cms, с крупными программистскими конторами. Не занимайся щит-постингом на дваче, пиши код.
>>625538 120 у джуна это как-то слишком прохладно, постоянно вижу вакансии в ДС с зараплатой что-то около 120 но это для сеньоров и мидлов, у джунов дай бог 60к.
>>619873 (OP) ОП, привет. Я снова проклятые регекспы принёс, посмотри, пожалуйста: http://ideone.com/Z2veAt Задача про опечаточников, вместе с заменой, по сути первая часть задачи там же содержится. Ты в прошлый раз мне посоветовал замену проводить через strtr() и бить строку на слова, что я и сделал (хоть и перестал чувствовать себя регексп-ниндзя). И со всеми праздниками тебя! Спасибо, что тратишь своё время.
>>625375 Я уже практически не пишу в этом треде, смотря на все это безумие, когда задачки школьников на дивы и регулярки комментируют огромными пастами, а мои мини-приложения тонут в потоках задачек и флуда без внимания. Рак, геи, аниме, задачки, школьники, верстка убили этот тред.
>>625791 Отличное решение, а у меня фуфло какое-то с кучей регулярок и без функций, при этом без замены кириллицы в латинских словах: >>623605 Заменить-то, пожалуй, не сложно, но только я бы снова лепил отдельную регулярку для этого... А у тебя не понял, как так функция checkText() работает и всё передаёт без return? Я сделал клавишу Shift вчера, там только столкнулся с тем, что return возвращает единожды, поэтому надо собирать то, что происходило в цикле через array_push в пустой массив, выводить его return'ом. Снова вижу, что ни хрена не понимаю.
Я что-то не разберусь никак с нормальной заменой регулярок с помощью $1, $2 и так далее - какая-то каша на выходе, приходится несколько разных регулярок делать для такого, ОП уже отругал. Вот это подтянуть надо.
>>625959 Чёртов двощ, с трудом понял, троллишь ты или нет. Спасибо, если нет. У тебя даже компактнее как-то это всё, хотя способ выделения опечаток [] и правда выглядит топорно. У меня, как видишь, для обратной замены ещё один массив с буквами, и ещё один регексп, только наоборот, так что... А checkText() у меня ничего и не передаёт, она выводит словом из массива, и всё. Про клавишу Shift только тебя не понял. Насчёт $1 и скобок, я где-то прочитал годную статью, но не смог её найти сейчас. В мануале есть, посмотри пример с подмасками: http://php.net/manual/ru/function.preg-replace.php . Суть в том, что ты ставишь скобки в регэкспе, и можешь потом в preg_replace() в $replacement к ним обращаться, по номеру скобки, в том порядке, в котором они у тебя стоят, начиная с $1 ($0 это всё выражение вроде). Очень прикольно! Мне пришлось понять, когда Grammar Nazi делал, хотя чем дальше в лес, тем больше дров, хочется уже с ними закончить и ООП всякое пройти. Жду ОПа вот.
>>625982 Ноуп, даже и не думал троллить. >У тебя даже компактнее как-то это всё, хотя способ выделения опечаток [] и правда выглядит топорно. Да, надо бы сделать как раз через массив с переворачиванием регулярок с кириллицы на латиницу и наоборот и через '$1[$2]', как у тебя это реализовано. Так намного компактнее всё выходит. >А checkText() у меня ничего и не передаёт, она выводит словом из массива, и всё. Я вот как раз не знал, что там может быть просто echo, думал, что только return там работает. Думал, что иначе нельзя сделать какой-то результат доступным вне функции. >Насчёт $1 и скобок, я где-то прочитал годную статью, но не смог её найти сейчас. В мануале есть, посмотри пример с подмасками: http://php.net/manual/ru/function.preg-replace.php . Суть в том, что ты ставишь скобки в регэкспе, и можешь потом в preg_replace() в $replacement к ним обращаться, по номеру скобки, в том порядке, в котором они у тебя стоят, начиная с $1 ($0 это всё выражение вроде). Очень прикольно! Спасибо, бро, сейчас читаю. Вроде же всё понятно, действительно, всё даже и совсем не сложно. А я почему-то их у ОПа на сайте попробовал, как-то толком не пошло - я и забыл про них. У меня и Grammar Nazi написан с кучей регулярок, за что ОП и отругал. Перепишу всё теперь. >чем дальше в лес, тем больше дров, хочется уже с ними закончить и ООП всякое пройти Я хочу потом ещё кучу всяких задачек пройти и весь учебник ОПа полностью без подсказок и возвращения к уже решённым задачам - хочу набить руку на этом, чтобы уже не задумываться о том, как там массив с помощью foreach разложить на ключи и значения и такого типа. На разные функции хочу какие-нибудь задачки потом порешать, а то совсем неуверенно себя чувствую.
Ох щи, до чего же просто управляться с $n в preg_replace... Вот так: что-то пропустишь или не придашь чему-либо должного значения, а потом лепишь кучу лишнего кода и выдаёшь топорные решения... Спасибо анончику и ОПу, всё-всё переделаю теперь, где лепил лишние регулярки, вместо того чтобы просто использовать $n. Также узнал (здесь звучит смех), что достаточно просто подставить в preg_replace массив из регулярок и массив из замен, чтобы всё работало так же, как работает при цикле с foreach и сложным массивом из массивов с регулярками и заменами... Функция, оказывается, сама обходит всё значения в массиве, подставляя их в $pattern и (из другого массива) в $replacement. Откровения уровня... короче, очень невысокого уровня.
>>626019 >Также узнал (здесь звучит смех), что достаточно просто подставить в preg_replace массив из регулярок и массив из замен Я тебе это еще месяц назад втолковывал.
Действительно, как я и предполагал изначально дело заключается в том, что PHP использует устаревший виндовый API , который работает только с ASCII или ANSI. Соответственно невозможно было никаким образом записать имя в файловую систему с любым Юникод символом под Виндой. Решение я нагуглил на стэк оверфлоу, чел написал класс для работы с winAPI, похоже, что напрямую через COM(ОП поправь если не так).
>>626022 У меня стремление всё усложнять же. Наверное, пару недель назад, когда я возился с задачей на проверку и исправление ошибок и всех терроризировал ею? Я просто как раз начал всё изучать числа 12-15 декабря, месяц назад, когда впервые открыл сайт ОПа.
http://ideone.com/1HTJJ2 Объясните, пожалуйста, аутисту, почему с русским Аргентина манит негра и вообще с чем-то русским работать не хочет, хоть и mb_internal_encoding('utf-8'); присутствует.
>>626031 Сделай что-то типа соцсети для универа. Преподы регистрируются, студентота. Могут выбирать факультет, курс, выкладывать файлы (фотографии, аудио- и текстовые файлы в разных форматах), переписываться друг с другом, подписываться на новости друг друга, ставить лайки и дислайки.
Как при помощи ПХП или какими-нибудь другими методами, определить движок сайта? Есть определённый форум, на нём есть блоги, надо узнать какая система используется для блогов.
>>626185 На каком-нибудь Moodle, наверное? Ну, тут у анона была годная идея в одном из тредов: сервис по уборке города. Суть токова: анон проходит по городу и видит кучку грязи. Он фотает сию кучу, заходит на сайт, постит фотку и указывает место расположения (либо оно автоматически берётся из его данных). Далее анон-дворник берёт заказ - выставляет какую-нибудь плашку "в работе", быстро убирает кучку в этом городе, фотографирует и загружает готовый вариант. За это другие аноны скидываются ему на пивасик либо лайкают и т.п. Что-то уровня стартапа, а может даже выше.
Вот моя клавиша Shift: http://ideone.com/WQK7H4 С каждой задачей немного яснеет в этой голове. Всё яснее и яснее, что правильно я пошёл 15 лет назад учиться на филологический факультет. В этот раз регулярки подставляются в preg_replace не через foreach, а просто так. При этом возникает вопрос: можно ли как-то избежать дублирования... - пока писал вопрос, понял, что можно сделать одну большую регулярку с | и разными знаками, сейчас исправлю.
>>626226 Например, можно развивать вширь. Сделать Бюро находок - для каждого города. Вещи, документы, животные. Фотографировать разрушенные участки дорог, зданий, опасно висящие сосульки и т.п., чтобы можно было обратиться в ЖЭУ для устранения или коллективного обращения, сбора подписей. Если бы такая система была у самих ЖЭУ, то уже сейчас, скорее всего, многие проблемы решались бы намного оперативнее. Сейчас в группах по городам в соцсетях такое бывает - жалуются, сообщают о пропаже или находке вещей или животных. А тут такой анончик со своим проектом. Это что-то уровня Росямы, но только во всех сферах.
>>626230 Да в том-то и дело, что уже есть Росяма, а пожертвования какие-то, это совсем другое, нищая страна, какое куда кто чего платить будет, лол. >Фотографировать разрушенные участки дорог, зданий, опасно висящие сосульки и т.п., чтобы можно было обратиться в ЖЭУ для устранения или коллективного обращения, сбора подписей. У нас даже фотографирование хуево стоящих машин не работает. Алсо, есть всякие активные-сердитые гражданины уже давно. От нонейм хуя никому такая система не нужна абсолютно. Алсоалсо, у дворников нет телефонов с камерами, лол. Все эти пропажи-находки итак есть, они не работают, никто туда не ходит, местечковые форумы все сплошняком мёртвые.
>>626226 Вот какой момент ещё: есть такой сайт vsezverushki.ru, на нём только по одной Москве можно отдать в дар или продать любое животное. Посещаемость в районе 2к человек, что не особо и много. Внимание, вопрос: во сколько такой сайт оценивается на известной бирже сайтов Telderi.ru? Внимание, ответ: в 3 миллиона рублей. Доход от размещения объявления на главной странице, месячный доход - выше 120 тысяч рублей. И это только Москва, а есть ведь и другие города. А у вас всё ещё нет идей для собственных проектов.
>>626233 Чтобы не быть голословным про зверюшек: http://www.telderi.ru/ru/viewsite/198901 Человеку давали больше миллиона рублей за него, но он же не дурак, чтобы продавать за годовую окупаемость.
>>626235 Активный гражданин, сердитый гражданин, всякие прочие собянинские прожекты и начинания путиноидов. >И чтобы на всю Россию по городам. Паблосы вк. Кто сейчас пойдет на сторонние сервисы и как вообще узнает про них? >>626233 Но есть же авито и ирр.ру, чем этот лучше? И вконтакт тоже есть.
>>626245 Активный гражданин и т.п. - это не то, что я имею в виду. Там какие-то предложения по улучшению и тому подобное. Нужен простой и удобный сайт для всякого такого - всего, что цепляет внимание сознательного гражданина. >чем этот лучше? Наверное, ничем. Про него знают разные крупные заводчики, питомники и прочие люди с деньгами (один какой-нибудь котёнок с родословной стоит от 15к рублей - самый дешёвый). Поэтому для них 200р за рекламу питомника или зверька в день на главной странице сайта - мелочи, окупающиеся с лихвой. Но я тебе и говорю, что в соцсетях многое есть, что как раз даёт пищу для размышлений.
>>626245 И да - в соцсетях всё смывает ещё получше, чем в /b, ну ты понял. Сейчас есть новость, а через пять минут потонула среди кучи других, очень неудобно. А тут разделение по толковым группам, всё на виду и понятно. Я просто так это говорю, не пытаюсь что-то доказать. Просто мне кажется, что это вполне хорошая идея для приложения сил как для диплома, так и для последующей работы. Но поступай как знаешь, конечно.
>>626182 Ух ты, не совсем начинающий в треде? Калькулятор Айфона считает верно, но там много повторов, ОП не одобрит. $creditBalance = ( $creditBalance * $percent ) + $servicePayment - $monthlyPayment; - вот это повторяется, можно от этого избавиться. В расчёте вклада анончика 10к под 10% недочёт - в первый год анону 16 лет, хотя он клал в 16, а прошёл уже год. Так, мелочь, остальное верно считает, однако дождись ОПа, он даёт делает отличные замечания.
>>626247 Про прибыльность вообще речи не шло, если затраты небольшие, то даже на самоокупаемость похер. Но так да - какую-то оригинальную идею хочу, которую анону самому лень реализовывать, а я возьму в качестве дипломной работы. >>626249 >Но я тебе и говорю, что в соцсетях многое есть, что как раз даёт пищу для размышлений. Не очень понял. Вытащить из соц-сетей идею в качестве отдельного проекта? Троллейбус из хлеба какой-то. >>626251 Спасибо, подумаю.
>>626257 >Вытащить из соц-сетей идею в качестве отдельного проекта? Соцсеть - это показатель интересов, проблем и желаний людей же. У людей проблемы - часто теряют вещи, видят разор или неустройство, хотят как-то повлиять на это, попивая чай у себя на кухне. В соцсетях, как и на имиджборждах, можно орать, сколько душе угодно - почти никто не услышит, пока журналисты не сделают репортаж, например. А тут сайт, который собирает всё в себя, каким-то образом формирует инициативные группы либо привлекает непосредственных исполнителей за какие-либо профиты (не обязательно, денежные). Например, меня вот лично сейчас раздражает, что дорожка у дома с обратной стороны не расчищена от снега. Идти ругаться в ЖЭУ мне не хочется, напишу-ка я на сайте, что вот такое есть, готов заплатить 100р анону-школьнику, если уберёт. На счету резервируются деньги, кто-нибудь выполняет, ну ты понял. Это можно в любую сферу растянуть же. Сломалась дверь в квартире, нужно поклеить обои, вынести строительный мусор и тому подобное - различные услуги - создаёшь заявку, находятся исполнители. Привязка к региону, резервирование денег на самом сайте, чтобы исполнитель был уверен. Короче, фриланс, но связанный с реальной работой или услугами. Я не в курсе, есть ли именно такое на Авито? Чтобы не искать заявку, а создавать? Так или иначе - идея имеет право на жизнь, как считаешь?
> А еще я подумал, если у меня нужно работать с одной моделью почему бы и не использовать только один контроллер Ты случайно не думаешь ли что число моделей = числу контроллеров? Если так то ты плохо понял зачем они нужны. Контроллер = раздел сайта или страница, модель = сущность в БД. между ними не обязательно должно быть соотношение 1 к 1.
TDG это просто класс где собраны методы работы с таблицей в БД. Он не обязан выглядеть как в зенде. У меня в уроке про паттерны работы с БД есть более простой пример, без всяких initialize.
> Смотри вот есть класс TableDataGateway, в нем есть метод initialize. Я правильно понимаю, что прямо в этом классе происходит подключение к бд? Нет, это нелогично. Логичнее передать готовый объект PDO в конструктор. В зенде сделано по-другому - там базовый класс получает объект для работы с БД через какой-то статический метод. Но тебе делать так не стоит. Вот урок по теме: https://gist.github.com/codedokode/e1d31a31b37d5f635057
> Почему не подключаться к бд сразу в конструкторе? Потому что это не задача класса TDG, подключаться к базе.
> Итак, я так понимаю, что в TableDataGateway я должен реализовать примитивные методы update, insert, where, select, которые будут применимы для всех моделей, а уже работая с каждой моделью, она должна будет наследовать этот класс и использовать эти методы? Нет не обязана. Наследование впрочем имеет смысл, так как эти классы однотипные и логично им иметь общего предка. Но делать методы типа insert ты не обязан.
> Вообщем объясни мне, ОП, как это все работает? Я хочу применить это в студентах и понять как оно устроено. Тогда тебе придется самому читать код и документацию. И если что-то непонятно, задавать конкретные вопросы.
ServiceLocator/Manager это классы для создания объектов и передачи им нужных зависимостей, они мельком упомянуты в моем уроке про Dependency Injection.
> Создаю класс TableDataGateway, там создаю все эти "примитивные методы". Это не обязательно.
> В самой модели Student в конструкторе будет создаваться объект класса UserDataGateway с аргументом "students" (имя таблицы). Не вижу логики. Student это объект представляющий информацию об одном студенте. зачем в нем должно быть что-то внутри для работы с базой данных? (это вопрос к тебе) Студент вполне может существовать и без нее. И второй вопрос, а если у тебя 10 объектов-студентов, ты внутри них создашь 10 объектов TDG?
Ты пытаешься смешать все в кучу, это не ООП подход. В ООП каждый класс занимается своим делом. Класс Student отдельно, классы TDG отдельно.
> Там будут использоваться такие же методы add, update, edit и т.д., которые будут вызывать аналогичные методы класса UserDataGateway Это нелогично, зачем каждый метод дублировать в 2 классах?
> Контроллер опять же будет иметь методы action_add, action_edit, в каждом из которых будет создавать экземпляр класса Student и вызывать аналогичный метод модели. Методы контроллера не обязаны соответствовать методам модели.
> Но пугает меня то, что во всех трех классах будут одинаковые методы, которые по цепочке будут вызывать другу друга до обращения в базу. Правильно ли это? Неправильно. У тебя культ карго - ты пытаешься сделать так же как сделано в других фреймворках, при этом не понимая почему там сделано именно так. Надо разобраться.
В общем неплохо. ENUM надо сделать латинницей. Учти также что при такой схеме нельзя никогда удалять товары если они связаны хоть с одним заказом (вроде у тебя так и сделано), значит надо сделать в них флаг показывающий виден товар на сайте или нет.
> Для каждой из них я должен создать класс-модель этой сущности, свойства которой будут полями, которые есть в БД для этой таблицы, верно? Да
> И еще должны быть классы, которые уже непосредственно работают с БД, типа select, update и т.д. причем опять же для каждого объекта/сущности свой такой класс в котором должны быть описаны все возможны методы для взаимодействия с БД? Да, все методы которые тебе нужны. Те что не нужны можно не делать.
Ты пишешь глупости, анон пока только изучает работу с Бд и хочет разобраться как это вообще делается. А потом и за доктрину возьмется. И кстати чем хорош пропел если есть доктрина? И чем твой совет поможет если анон хочет разобраться в паттернах работы с БД а не получить готовое решение?
> $app->error(function (\Exception $e) use ($app) { > $app->log->info($e); А почему уровень логгирования такой низкий (info)? Типа неважная информация? И я не уверен что надо использовать логгер Слима, не лучше ли писать в стандартный лог ошибок PHP?
> Про html5 валидацию слышу второй раз в жизни. Ты имеешь ввиду эти атрибуты типа required и pattern? Да
> Во-первых, это поддерживается не во всех браузерах, Да, но это ведь не мешает пользователю работать с формой? Просто об ошибке он узнает позже, при отправке формы.
Ну и ты в любом случае должен уметь ими пользоваться, так что давай-ка изучай пока есть время.
> ajaxResponse($app->response, $uploadForm->getFile()->id); Глобальные функции, нехорошо-то как. можно сделать это статическим или обычнм методом где-нибудь? Можешь кстати посмотреть, нельзя ли расширить слимовский $app->response и всунуть туда свой класс с поддержкой аякса?
> $uploadForm = new Form\UploadForm($app->request, $_FILES, $author_id); Нужно ли форме ид автора? Может тогда лучше не id а полноценный обьъект передавать?
> $fileUploadService->upload($uploadForm) Вот надо ли завязывать загрузку файла на форму? Нельзя ли отвязать эти классы, то есть сделать чтобы сервис загрузки ничего не знал о форме? И чтобы например можно было загрузить просто файл с диска, не из формы? Или это усложнит все?
> $loginForm = new Form\LoginForm($app->request); > if ($app->loginManager->validateLoginForm($loginForm)) { Опять же, нельзя ли сделать чтобы LoginManager ничего не знал о форме? И вообще ничего не знал ни про HTML, ни про HTTP? Мне кажется это лишние знания. Нехорошо, привязывать внутренний сервис к интерфейсу пользователя. Так мы в LoginManager половину приложения затащим. Он должен только проверять данные ему имя и пароль, а про формы он знать ничего не должен. Пусть уж лучше форма знает о нем, если без этого никак.
Ну и подумай сам: форм логина и способов входа в теории может быть несколько. Ты будешь для каждой методы в LoginManager добавлять?
> https://github.com/nsdvw/file-sharing/blob/master/app/Form/UploadForm.php#L66 > private function setFile() Вот это мне кажется надо бы перенести в файловый сервис, создание объекта на основе файла на диске. Это ведь может не только в форме загрузки пригодиться. а например если ты хочещь с диска загрузить файл.
> class AbstractMapper implements TransactionableInterface Вот это интересный код, но я не уверен что правильно добавлять транзакции во все мапперы. Создается впечатление что это какие-то независимые транзакции, и непонятно в каком классе надо начинать транзакцию если ты хочешь что-то сделать в нескольких мапперах.
>>626302 Всё уже создано, до нас. Впервые о нём узнал. Неудобный сайт, правда, но всё на нём есть. Не регистрировался, не вижу города, кроме Москвы и Санкт-Петербурга.
ОП, здравствуй, если доберёшься - проверь, пожалуйста: 1) http://ideone.com/ivV3tG - про клавишу "Shift"; 2) http://ideone.com/gXSbfE - про Йоду. Тут я не сохранял знаки препинания внутри предложений, решил, что так подразумевалось (глянул в примере, что их нет). А так вроде бы получилось всё. Спасибо!
>>626220 Я не ОП, но могу сказать, что из-за обилия комментариев читать просто невозможно. Я пишу комменты обычно сбоку, а не между строк, и вообще рекомендуют переменные и функции называть так, чтобы они сами за себя говорили, а комменты - если происходит особая, уличная магия какая-нибудь, неясная без подсказки. вообще я не программист, можно меня не слушать
>>626339 >Я не ОП, но могу сказать, что из-за обилия комментариев читать просто невозможно. Кому как. Я это делаю как раз для облегчения понимания кода. Я писал комменты сбоку, но ОП сказал, что лучше сверху, когда со слешами и звёздочками, я сделал так. Можно слешами сбоку, так удобнее смотреть на сам код. Наверное, лучше так буду делать всё-таки, действительно. >вообще рекомендуют переменные и функции называть так, чтобы они сами за себя говорили Стараюсь так и называть. >комменты - если происходит особая, уличная магия какая-нибудь, неясная без подсказки У меня комменты - это разбитый на части алгоритм написания скрипта. Я обычно сначала пишу алгоритм, а потом пишу скрипт. Я тоже не программист, поэтому всё пока коряво получается. Спасибо, что посмотрел.
>>626334 Какое хорошее решение. Всякие preg_replace_callback применяешь прямо вот так впервые? Так-то несложно вроде, но я бы вообще не додумался до такого. Я пока оперирую только разложением до простейших шагов: отрезать часть строки, отрезать начальные буквы, поменять регистр у начальных букв, приклеить к предложениям и т.п. Что-то изящное пока неподвластно. >>626340 Там у меня вроде всё нормально с этим.
>>626347 >ОП сказал, что лучше сверху Ну да, наверное и правда кому как. И алгоритм пока в голове не держится сам, наверное, лучше оформить письменно. >прямо вот так впервые Ну нет, про preg_replace_callback() ОП подсказал, когда я граммарнаци делал (вообще долго с ней ковырялся). Теперь если что-то неочевидное надо сделать, ею пользуюсь, не знаю, хорошо это или нет. Вообще признаюсь, опыт у меня кое-какой есть, потому и быстрее всё выходит.
Если я делаю сайт используя MVC и допустим на разных страницах мне может приходить один и тот же GET или POST запрос (например авторизация, может быть на любой странице сайта), то есть в какой-то определенный контроллер я запихнуть обработку не могу. Где тогда лучше обрабатывать этот запрос?
>>626380 Не должно быть такого. Форма авторизации должна обрабатываться действием авторизации <form action="/login" method="post"> При успешной валидации редирект обратно на ту страницу, с которой был запрос. Если форма не прошла валидацию, подставить сообщение об ошибке и введенные пользователем данные в поля на странице авторизации. https://github.com/codedokode/pasta/blob/master/forms.md
SELECT name, comment, date, INET_NTOA(ip_address) FROM comments
Почему твиг проходится по массиву и не вытаскивает айпишник? все вытаскивает, а айпи нет. ip_address в массиве есть, вардампом проверено. Не могу даже пхп код в шаблонизатор засунуть.
{% for item in data %} <tr> <td>{{ item.name }}</td> <td>{{ item.comment }}</td> <td>{{ item.date }}</td> <td>{{ ite.ip_address }}</td> </tr> {% endfor %}
>>626031 Сделай экстремистский сайт, где вскрываются многомиллионные кражи из бюджета, попилы, дебильные указы чинушей, приводящие к разорению предприятий и страны, типа южного потока, заброшенные НЗП, военные преступления пидорах в чечне и украине. Посадят конечно, но зато какой проект.
Весело хуярю html-теги через echo "<tag>";. Для разработки вообще никакого бугурта. В исходном коде все выведенное таким образом выглядит как одна очень длинная строка, что затрудняет отладку. Как сделать такие теги форматированными?
Не работает bindValue в PDO. Совсем никак. Потратил часа два в гугле, так и не нашел в чем проблема. http://pastebin.com/kyyA8VQ9 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: :x' in /usr/share/nginx/html/student-list/app/Model/Model_StudentDataGateway.php:24 Stack trace: #0 /usr/share/nginx/html/student-list/app/Model/Model_StudentDataGateway.php(24): PDOStatement->bindValue(':x', 'Testvar', 2) #1 /usr/share/nginx/html/student-list/app/Controller/Controller_Form.php(34): Model_StudentDataGateway->add_student(Object(Model_Student)) #2 /usr/share/nginx/html/student-list/form.php(13): Controller_Form->process_post_request(Array) #3 {main} thrown in /usr/share/nginx/html/student-list/app/Model/Model_StudentDataGateway.php on line 24
>>619873 (OP) Ну что, опунь, я уже какое-то время учусь по твоим урокам, в кодинг уже какое-то время могу, но не в РНР, так что по мелочи не хотел тебя дёргать, но вот настала пора поинтересоваться, насколько грамотно с точки зрения эстетики, так сказать, написан код: http://ideone.com/n9iSCv То есть, работает он отлично, но вот насколько принято писать вот так, не знаю.
>>626662 Банк 1: после месячного взноса она уменьшается до -971.61787934484. Зачем ты банку переплачиваешь? Остался должен 10 рублей. Плати 10 рублей, а не тысячу.
Пропустил одну задачу, но вернулся и сделал. http://ideone.com/Yjs5K9 Вопрос в том, стоит ли переделать её с использованием switch'а? Или пускай так и остается?
>>626692 ты не правильно понял. Они не обязательны для существования конструкции в целом. Т.е. if достаточно. Но для компактной записи и вообще для торжества здравого смысла их надо использовать. Ну и плюс в задачах посложней без этого никуда
>>626662 Там у тебя в некоторых местах просто отнимается сумма, которую анон платит в месяц, не прибавляются проценты почему-то. Например, осталось выплатить 41000, а в другой месяц осталось выплатить 36000, такого типа. Хотя в функции первой есть умножение на проценты, вот это всё. Подход вообще не верен: там нужна переменная для общих выплат, а её не заметил у тебя. В минус не должно уходить: если после умножения на проценты и прибавления платы за обслуживание счёта остаётся меньше месячной выплаты - необходимо просто выплатить оставшуюся часть. Также для обхода массива нужно использовать foreach, а не for, ОП пишет об этом на странице "Повторим?".
Как подключится к imap серверу imap.yandex.ru? Нужно использование ssl. ssl://imap.yandex.ru не работает. Интересует именно socket_extension. fsockopen,stream_функции я знаю, но интересует именно то о чем выше писал.
Как в jquery избавиться от "очереди" событий? Например если сделать много кликов по элементу, то сработают все один за другим. https://jsfiddle.net/3qz5n02q/
Йода говорит: ideone.com/ipQ2yB >PHP Notice: Undefined offset: 1 in /home/U8hptw/prog.php on line 12 >PHP Notice: Undefined offset: 1 in /home/U8hptw/prog.php on line 13 Сейчас не соображу, в чём там дело. Тешу себя мыслью, что соображу завтра. Вроде бы всё у меня там работает и выглядит простым, как табуретка. Гибкости не хватает мне, в следующий раз попробую совладать с call_back функцией, что ли, позавидовал простому и краткому решению братишки выше.
>>627265 >>627266 Так и не разобрался, почему там вылезала ошибка. Наверное, передавать из одной функции в другую массив и там из неё сразу доставать значение ($array[n]) не считается правильным. Также ОП говорит, что вообще неправильно массив раскладывать через for. Сделал разложение массивов в обеих функциях через foreach - всё теперь без ошибки.
>>627357 Не политоты ради. Просто столкнулся с тем, что эту поделку в Photoshop'е считают реальностью - на полном серьёзе.
>>627384 Оригинал не находится в поиске по картинкам, когда ищешь по какой-нибудь фразе, вылезают только различные варианты подделки.
Задача про "лиличку". Нихуя не понимаю, в подсказке идёт "разбить текст по символу \n", но сам текст дан в таком формате, что там нет \n и по нему нельзя разбить. Разбить по \n можно только в случае, если он прописан в самой строке. А там просто энтером отбито. Перепробовал все варианты. Так что же, вручную менять само стихотворение и добавлять \n?
https://gist.github.com/codedokode/420c8c12a1edae25f0ec >Пайп (вертикальная черта) позволяет перенаправить выход одной программы на вход другой. Программа ls выводит список файлов в каталоге. Программа head -10 читает строки с клавиатуры и выводит только первые 10 из них. Вот, как можно вывести имена первых 10 файлов: > >ls | head -10 >Пайп (вертикальная черта) позволяет перенаправить выход одной программы на вход другой. А что за Пайп? Может кто-нибудь объяснить на примере как это работает? Я что смогу брать данные, например, из браузера и делать с ними что захочу в другой программе? Как это работает? Я не понимаю. А причем тут ls и head?
>>625456 Я, например, даже когда научусь всему буду продолжать иногда заходить в клуб любителей php и помогать анонам, если буду знать как. Подозреваю, что здесь много таких же как я.
>>627581 >Я, например, даже когда научусь А как ты поймешь, что научился? Когда наступает этот сокровенный момент? Тебе приходит письмо из хогвартса или что?
>>627584 Бывает открываешь код анона и становится смешно, и ты сразу понимаешь как правильно сделать. Вот это уже показатель того, что ты можешь поправить анона и дать ему совет.
Друзья, а вы уже обсуждали квантовый компьютер от гугла и наса? https://www.youtube.com/watch?v=CMdHDHEuOUE Это же такие перспективы! Такие как __мгновенная__ передача информации на n ≤ ∞
>>627597 Задачу на студентов, а ты? Пока ОПа нету, сижу читаю про линукс и верстку - настроение просто отличное от того, что я это понимаю и занимаюсь этим. Программирование это жизнь, это сила, это победа человеческого разума над законами природы!
>>627607 У меня есть роутер, у тебя нет. В этом задании он не обязателен, просто мне интересно еще и роутер пилить. И все приложение у меня с него как раз и начинается, я так понял это паттерн FrontController. Хотя не уверен. Жду ответа ОПа и дизайн пилю пока для списка и формы.
Я в общем-то уже знаю как по-быстрому сделать эту задачу. Но я постоянно ковыряюсь, потому что хочу сделать не быстро, а правильно.
>>627608 >Я в общем-то уже знаю как по-быстрому сделать эту задачу. Но я постоянно ковыряюсь, потому что хочу сделать не быстро, а правильно. Я тоже уже примерно представляю как она делается, думаю сделаю быстро - мне главное понять принцип работы а дальше нужно просто выразить это в коде.
>>627628 >У тебя есть LoginController.php, то есть ты будешь делать форму входа? По заданию вроде просто после регистрации сохранять в куках юзера. Почему бы и нет?
>>627760 Скоро дойдёшь, значит, и сам. Надо локальный сервер установить, базы данных, всё это запустить, архив сайта с Гитхаба распаковать, запустить index.php, создать соединение с БД. Либо сразу установить Денвер, там всё необходимое уже есть.
>>627809 А мне всегда интересно, изучал ли человек программирование прежде, когда припекает от лёгкости решения задач у многих. Сам я бьюсь над задачами уровня клавиши Shift или речи Йоды по нескольку часов. Благодаря постоянному чтению учебника ОПа, сразу по стилю решения задачи многое становится понятно об общих познаниях человека. Жаль, что некоторые задорно проходят первые задачки, а потом пропадают. Куда делся, спрашивается, Олег, где Onyx, которые вроде отлично шли с самого начала.
>>627816 >Олег, где Onyx Потише, братишка, в этой ситуации, ты на АИБ сидишь или в убтном чятике? Какие Олег, какой Оникс? Оглянись вокруг, мы вдвоём. Ты да я
Ебать я тупой стал, 25 лет ума нет, как можно было эту задач легко решить? я сделал через эпические костыли, но решение должно быть на поверхности. http://ideone.com/ahVN35
> explode("\r\n", $text); Лучше разбивать по символу перевода строки \n (Enter как раз вставляет в текст \n или \r\n в зависимости от настроек редактора и способа перевода строк)
На ideone скорее всего перевод строки вставляется как просто \n а не \r\n отсюда и баги.
Скачивание phpstorm (что я не могу сделать, это надо много времени) вряд ли поможет.
Делаю тут задачу про список студентов, сделал все кроме поиска, не могу понять как реализовать поиск с джоинами в базе. В документе написано >ля поиска по всем колонкам можно применить оператор LIKE к соединенным через пробел значениям столбцов. Что это значит? Как их соединить? Или может забить хуй и сделать поиск через OR?
>>627996 Попробовал сделать так SELECT * FROM student_list JOIN(SELECT id, name || surname concatenated FROM student_list) T ON T.Id = student_list.id WHERE t.concatenated LIKE :pattern_bind ORDER BY student_list.id ASC LIMIT 15 OFFSET :offset_bind ищет только по первому параметру после id (в моем случае это name)
>>627925 Бро, задача решена неверно. 1. В итоге переменная $paymentTotal должна быть 61270 со многими копейками. 2. Функция intval не нужна, без неё можно обойтись, лучше посчитать со всеми копейками. 3. $creditBalance = ( $creditBalance * $percent ) + $servicePayment - $monthlyPayment; - повторяется в разных местах, а это значит, что может быть вынесено за пределы if с else. 4. Всегда первым делом надо к остатку прибавлять процент и 1000 за обслуживание кредита, после этого проверять, меньше или больше сумма $monthlyPayment.
>>627999 Можно создать поле с ключами, куда заносятся через пробел значения остальных полей, например "Ваня Ерохин А56 Москва 1990 муж", и делать поиск по ней. Это как вариант, ОП может не одобрить. А есть ещё составные индексы.
Как сделать лайки, как вконтакте? Чтобы по айпи запоминался проставленный лай и второй раз с того же айпи его не поставить. Понимаю только как сделать его динамическим через json, а вот как с одного айпи только сделать?
>>628007 Наверное, $_SERVER['REMOTE_ADDR'], при этом сохранять инфу об айпи и лайкнувшем, а дальше условия, чтобы не повторялся или айпи, или сам лайкнувший, если он залогинен.
>>628109 Я долго размышлял над этой проблемой и решил, что понадобится как минимум три таблицы. Первая это сами публикации или что там у тебя лайкают, второе - таблица айпишников и третье - таблица лайков.
>>628115 >>628112 А как же таблица с инфой о залогиненных? Ещё желательна фича: лайк присваивается человеку, если он лайкнул незалогиненным, а потом в этой же сессии залогинился.
>>628097 >>628115 Я тут попробовал с Дримвивером и Денвером - нещадно жрёт ресурсы ноутбука, не хотет. Я пока на Идеоне, хотя там не особо удобно всё становится, когда код разрастается.
Квантовые компьютеры не позволяют передавать информацию быстрее других средств связи. Более того, пока они больше существуют в реальности чем в теории.
Для тех кто не знает - там примерно такая идея: вместо обычных битов которые принимают значение либо 0 либо 1, мы используем кубиты которые могут быть одновременно в 2 состояниях.Например 8 обычных битов могут быть в одной из 256 комбинаций, а вот 8 кубитов могут быть в этих 256 комбинациях одновременно. И соответственно мы можем делать какие-то операции надо ними всеми одновременно. Условно говоря, если есть задача найти пароль, хеш от которого равен x, то обычный компьютер может лишь перебирать пароли по одному, проверяя не имеет ли он нужный хеш. А квантовый может перебирать все возможные пароли одновременно, вычисляя все их хеши одновременно. По крайней мере это я так понимаю.
Ну это пока больше в теории существует. В реальности чтобы манипулировать кубитами нужны большие сложные установки, вакуум, температуры в районе абсолютного нуля (-273 градуса), кубитов там от силы несколько, чуть что все это сложное состояние разрушается. И ни одного пароля пока на квантовом компьютере не взломано.
Преимущества и недостатки способов попробй понять сам. Полнотекстовый поиск может и не подойдет так как он рассчитан на поиск по целым словам а не по кускам слов.
использование JOIN тут бессмысленное - все эти поля ты можешь получить без него. Советую порешать наши задачки на SQL из оп поста чтобы разобраться в джойнах получше.
О, интересно, а я и не подумал что можно смотреть число форков. Там идеон еще раньше показывал последние программы на определенный язык - и наших было довольно много.
>>628000 короче та же задача но уже с функциями http://ideone.com/WCiRRb почему то не работает сложение int и float в строке f ($dolg<$deposite){ $pereplata=$pereplata + $dolg; break; }
чтобы прибавить остаток к выплате и закончить выполнения цикла, в предыдущий разя я делал через фукнцию intval тоесть таким образом из флоат в инт перевел.
>>628187 а епта понял свою ошибку, исправил http://ideone.com/WCiRRb , но бля какие то цифры странные мне кажется программа работает некорректно, потому что не выполняется последний шаг, ведь если остается допустим 3000 рублей заплатить, мы же ее не выплачиваем в этот месяц, а ждем следущего, и платим с коммисией вся хуйня
>>628187>>628193 Бро, опять же неправильно считает, я же говорю, какая там цифра в том банке должна получиться: 61270 с копейками. Там как раз для проверки второй банк точно такие же параметры имеет, как в задаче на кредит за Айфон. Не пойму, для чего так усложнять с float, с этой плавающей точкой? Там же абсолютно простой алгоритм: 1. Имеем сумму кредита. 2. Умножаем её на 0.0n (сразу прибавляем таким образом процент к сумме кредита) и прибавляем комиссию за обслуживание кредита. 3. Проверяем, получившаяся сумма больше или меньше 5000, которые может выплачивать Анончик в месяц. 4. В соответствии с результатом проверки или продолжаем цикл выплат, или выплачиваем имеющуюся сумму (не забывай, что она у нас уже должна быть умножена на процент и к ней должна быть уже прибавлена комиссия за обслуживание кредита). Всё. Ещё замечание: лучше переводить названия переменных, а не писать транслитом. Я не ОП, он пояснит теперь не скоро, наверное, я вообще недавно начал изучать РНР и возился с задачей на кредит Айфона несколько дней, зато потом сократил до нескольких строк её, изучил нормально работу циклов на ней. С плавающими точками пока не работал и, честно говоря, не совсем понимаю, для чего она там.
Надо сделать одну работу с API Гугл Аналитикс, для этого подключаю вот эту библиотеку https://github.com/google/google-api-php-client#installation но не могу подключить, если скачиваю полный пакет и подключаю его таким образом: require_once 'google-api-php-client/src/Google/autoload.php'; Получается такая ошибка: Fatal error: Uncaught exception 'Exception' with message 'This library must be installed via composer or by downloading the full package. See the instructions at https://github.com/google/google-api-php-client#installation.' in C:\OpenServer\domains\zorge\otc\google-api-php-client-master\src\Google\autoload.php:14 Stack trace: #0 C:\OpenServer\domains\zorge\otc\index.php(2): require_once() #1 {main} thrown in C:\OpenServer\domains\zorge\otc\google-api-php-client-master\src\Google\autoload.php on line 14
ОП, делаю твои задачи на ЖС, застрял на роботе на шестой задаче. Почему мое решение неправильное? Я не так понял условия? https://jsfiddle.net/kkpjnqc1/2/
>>628282 а все теперь точно исправил получилось 56423.563121625 61268.718210807 51029.365496746, короче спасибо за помощь, пиздец я долбоеб, ЗАТО АЙТИ ВЫШКА ЕСТЬ.
>>628267 Лучше сам попробуй разобраться, это стоит того, я гарантирую. >>628282 Бро, я не пойму обозначения у переменных. Почему месячная выплата называется $deposit? Сейчас с телефона, тогда чуть позже. >for($dolg;$dolg>=0;$month++) Вот тут уже не вполне верно всё, там лучше из количества месяцев исходить, а не из общей суммы, потому что она не известна. Месяцы нам тоже не известны, но можно поставить хоть 100 - не суть важно.
>>628286 Много лишнего кода, ОП не одобряет такое. Там можно повторяющиеся части вынести из if и else. А с привязкой цикла к $dolg > 0 - шикарная идея! А я и не понял сразу. Теперь пропала зависимость от непонятного и с потолка взятого числа 20 месяцев. Отличная находка, поздравляю себя, кому ещё это интересно ОП вроде тоже говорил об ограничении цикла годами жизни, или я что-то путаю. Тоже не подсказал такого почему-то.
>>628393 Вышка в постсовке настолько обесценилась, что всем похуй если скиллы есть. А вот для перевоза жопы в золотой миллиард, нужен диплом приличного места.
Я что то не понимаю, хочу использовать composer, делаю всё как здесь http://open-server.ru/docs/#rabota-s-composer Ввожу в командной строке путь к проекты C:\OpenServer\domains\mysite\>composer init мне пишет """"""" не является внутренней или внешней командной и т.д.
Задача была такая: сделать несколько виджетов со списком элементов с иконками. Размер, пропорции, цвет фона иконок зависят от дизайна. Значит нужен класс для генерации картинок. Для работы с изображениями используется библиотека, не известно какая. Значит код должен быть универсальным, чтобы можно было подключить любую библиотеку и реализовать под нее адаптер.
>>628328 ну по сути в моем коде нет двух абсолютно повторяющихся строк, но твой чутка покороче да.
изучал МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ И АДМИНИСТРИРОВАНИЕ ИНФОРМАЦИОННЫХ СИСТЕМ. на первом курсе даже хуярили одновременно задачи на бейсике и на паскале. ЧТО БЫ КОД ЛУЧШИ ПОНЯТЬ. потом всякие с++, с#, ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ, ДАЖЕ ЛИСП был ебать ИСКУСТВЕННЫЙ ИНТЕЛЕКТ. ну все по чуть чуть, тонны матана, геометрии, УРАВНЕНИЯ МАТ ФИЗИКИ, ну в итоге нихуя ни кто ни чего не научился, из 50 человек, человек 5 работают в айти, в том числе и я, эникейщик в хелп деске, получаю 30, рядом сидят 1с получающие по 70-80, меня жопа в клочьях, решил перекатвыаться в кодинг. пока с натягом если честно.
>>628558 Там одни и те же вычисления два раза повторяются, это имел в виду. РНР вроде верный выбор в этом случае, потом должно быть проще перекидываться на другие языки. Сам надеюсь, что мне потом будет проще изучить уже JS для фронт-энда.
Регулярные выражение 1 задача, проверка номер телефона, не смог найти как сделать допущение о том что (скобка, пробел, минус) могут присутствовать а могут и быть в строке, поэтому сделал через такие эпические костыли. http://ideone.com/6tiLc8
Пытаюсь поставить через composer библиотеку с АПИ гугл аналитикс https://github.com/google/google-api-php-client, делаю всё как в документации, мне выводит следующую ошибку: your requirements could not be resolved to an installable set of packages Это значит в моём композере чего-то не хватает? Каких-то настроек?
>>628709 http://ideone.com/S7ja4y - не воспринимает номер. >([ ]|[-]|[(]) Подумай, как можно упростить это выражение. Квадратные скобки - это "один из указанных символов в любой последовательности". Также нет ни одного пробела, а они могут там быть.
Вот паста ОПа, как минимум, все эти номера должно проверять верно: ----------
Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек!
Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).
>>628709 >как сделать допущение о том что (скобка, пробел, минус) могут присутствовать а могут и быть в строке Для этого есть один из символов на скриншоте. Почаще смотри на эту страницу в учебнике ОПа во время решения задач.
Анон, если ты юзал Vagrant, чем он лучше обычного VirtualBox'a с установленой руками ОС и веб сервером например nginx php-fpm? Есть какие-то профиты для сингл разработчика или нинужно?
Это на замена виртуалбоксу. Это система конфигурирования виртуалбокса. Там в конфиге можно прописать все нужные настройки виртуальной машины + установить какие-то программы (еслиречь о линуксе).
То есть сценарий использования такой: старший разработчик или администратор делает вагрант-скрипт, новичок ставит себе вагрант, запускает скрипт и получает настроенную виртуальную машину с линуксом и установленным в нее софтом (ну например mysql + дамп залитый в него) и начинает работать над проектом, не тратя время на настройку окружения, скачивание чего то итд.
Альтернатива - распространять образ жесткого диска для вирт машины, но это менее удобно: образ тяжелый, ты не можешь в нем что-то поменять итд.
>>626817 http://pastebin.com/ufnVLanq ОП, в дополнение к этому еще бы хотел задать вопрос. Я как понимаю форма будет в action иметь значение "/". Значит мой роутер должен понимать гет у меня или пост и вызывать соответствующий контроллер и метод?
Вообще я хочу переписать свой роутер и сделать как у фреймворков. Где нибудь в index.php прописать все роуты моего приложения:
> Я как понимаю форма будет в action иметь значение "/". Почему? Обычно ПОСТ обработчик формы располагается по тому же URL что и ГЕТ, например /register. Ты читал урок про формы?
> Значит мой роутер должен понимать гет у меня или пост и вызывать соответствующий контроллер и метод? теоретически роутер может при гет/пост вызывать разные методы. Но я бы не советовал это делать так как это усложняет понимание кода.
> Где нибудь в index.php прописать все роуты моего приложения: Попробуй, почему нет. Почитай также на досуге про роутинг в сифмони и посмотри как он конфигурируется через yml
> Или мне это нафиг не нужно и я все усложняю? можно попробоавть если хочешь.
>>628757 Я не он, но пользуюсь вагрантом поверх виртуалбокса. Сильно упрощает жизнь. Он может почти моментально поднимать машины из скрипта. После того, как вырубили свет и у меня приказал долго жить мой няшный дебиан я перешел на вагрант.
> Я все равно не понимаю. Вот есть у меня в контроллере addAction, он создает модель студента и запускает ее метод add, а там вызывается метод класса работы с БД тот же add? Или как? Мне не нравится это дублирование. И я не знаю других способов. Давай вот на этом моменте подробнее остановимся.
Неверно.
- у тебя скорее будет не метод addAction, а метод вроде registerAction. При ГЕТ запросе он выводит форму, при ПОСТ обрабатывает (читал урок про формы? задай вопросы если непонятно)
> он создает модель студента и запускает ее метод add неверно. У модели студента нет такого метода, она лишь хранит информацию о студенте. Перечитай урок про паттерны работы с БД, задай вопросы.
> а там вызывается метод класса работы с БД тот же add? Он вызывается из контроллера:
$studentGateway->insert($student);
> Мне не нравится это дублирование. Интуиция тебя не подвела, это действительно неправильно.
> А еще про 404 ошибку, думаю надо отдельный файл шаблона создать, и чтобы роутер вызывал метод indexAction в контроллере с аргументом '404' например. Верно? Можно так, можно просто сделать где-то метод вывода 404. Контроллер вряд ли получится назвать цифрами.
https://github.com/fxsloker/Student/tree/master/vendor - папку вендор надо убрать из репозитория и добавить в гитигнор, зачем она? В репозитории должен быть в первую очередь твой код а не сторонний. Скачивающий запустит композер инсталл.
mysql воспринимает числа как номер элемента и это ведет к трудноотлаживаемым багам.
> Если вы вставляете число в столбец ENUM, это число воспринимается как индекс, и в таблицу записывается соответствующее этому индексу значение перечисления. (Однако, это не будет работать с LOAD DATA, который воспринимает все входящие данные как строки.) Не рекомендуется сохранять числа в перечислении, т.к. это может привести к излишней путаннице.
> CREATE TABLE IF NOT EXISTS чуть надежнее делать DROP + CREATE или только CREATE так ка кв базе может быть не та таблица что надо.
> FrontController это тот же роутер что ли? Он вызывает нужный контроллер и экшен. Значит мой роутер уже FrontController? примерно так. Фронт контроллер это когда все запросы проходят через этот самый фронт контроллер, а он уже запускает конкретный контроллер действия. Так что у тебя фронт контроллером является Router (не совсем точно названный)
В режиме отладки полезно на странице 404 писать причину ошибки чтобы упростить себе же жизнь. Это не обязательно делать. ТАкже надо сделать отлов непойманных исключений и вывод страницы-заглушки со всеми нужными ХТТП заголовками.
>>628800 Лол, салага. Там же пару ерундовин прописать в ОПовском коде, какие советы-критика? Всё там у тебя верно, конечно же. Я когда эти задачки начал в середине декабря решать, был уверен, что дойду до ООП к Новому году. Сейчас думаю, дойти бы до ООП к началу-середине марта.
>>628803 Просто до этого мне приходилось подумать над всякими там кредитными калькуляторами, а так да, очень просто когда-нибудь я дойду до ооп... когда-нибудь
>>627974 >Перенаправить и вывод, и ошибки в файл можно так: >команда 2>&1 > file.txt >и вывод, и ошибки >& В моем представлении символ > означает перенаправление, а символ & - логическое "и", пробел, опять же повторяюсь, в моем представлении, должен быть "разделителем" не знаю правильно назвать.
>>627974 >Перенаправить и вывод, и ошибки в файл можно так: >команда 2>&1 > file.txt >и вывод, и ошибки >& В моем представлении символ > означает перенаправление, а символ & - логическое "и", пробел, опять же повторяюсь, в моем представлении, должен быть "разделителем" не знаю правильно назвать. Следовательно, часть выражения 2>&1 мне кажется совершенно не связанной кучемалой. Получается: 2перенаправитьИ1 перенаправить в файл.тхт По моему, 2перенаправить и 1перенаправить в файл.тхт или 2и1 перенаправить в файл.тхт 2> & 1> file.txt как-то логичней записть представляется представляется.
>Вообще, синтаксис такой по историческим причинам, написаны миллионы скриптов и никто их уже не переделает. Понимаю что исходя из этого мой вопрос становиться дурацким, но мне так не понятно и так кажется странным это.
> 2>&1 значит перенаправить данные, из потока №2 (поток ошибок stderr) в поток №1 (поток вывода stdout) А зачем тут тогда &? И почему первый раз мы не отделяем пробелами символ перенаправления, а второй разделяем? Не понимаю.
$app['session']->set($itemid, array('ip' => $ip_address, 'likes' => 0)); Короче в сессии в силексе каждому лайку по уникальному айди создается значение айпи и кол-во лайков. Может быть либо 1 либо 0, т.к. больше одного нельзя ставить.Я так понимаю, что при лайкании с каждого нового айпишника значение айпи и лайк будет заново переписываться для айдишки лайка? Получается без таблиц не обойтись?
Вы в курсе, что старый тред на 800 постов ещё посещаем ньюфагами и там даже пишут что-то? Да и в этом скоро 900 ростов. Пилите новый тред и суммоньте опа, а то он редко заходит
>>628775 С почином! Один маленький шажок для человечества, но зато какой огромный шаг для анона! Точнее, наоборот. Рекомендуется со строчной буквы писать if, а также слитно писать elseif. А так всё правильно.
В данном случае он является признаком того что справа от > указано не имя файла, а номер потока. Если написать 2>1 то это значило бы "перенаправить поток ошибок в файл с именем 1"
> как-то логичней записть представляется представляется. я думаю это субъективно. Тем более мы не знаем, может в то время когда появился синтаксис он был скопирован с какой-то другой программы и всем казался привычным.
> И почему первый раз мы не отделяем пробелами символ перенаправления не знаю, по моему это ни на что не влияет
Ты по моему плохо понимаешь что такое сессии. Не имеет никакого смысла записывать ip в сессию так как она у каждого пользователя своя. Тебе надо бы вернуться и подучить эту тему.
Касательно вопроса, твоя задача разбивается на 2 независимые части:
- что считать идентификатором пользователя? (id залогиненного? ip? токен в куке?) - тут есть несколько вариантов, у каждого свои особенности. Если ты не понимаешь какие то вернись и изучи как работают куки, как делается авторизаци
- как запрещать повторное голосование. Ну тут все просто - надо в БД сохранять факт что пользователь с данным ид проголосовал за данную запись и не позволять голосовать второй раз
Вернись и изучи теорию про куки, сессию и авторизацию. Без этих знаний ты ничего нормально сделать не сможешь. Если у тебя есть вопросы, можешь задавать.
>>629048 идентификатор - это идентификатор записи в бд, к которой ставятся лайки. каждому пользователю в сессию свой айпи записываестя. у пользователя нет идентификатора, в глаза долбишься мразь тупая. ой все нахуй иди.
Вброшу сюда, а потом в новый тред. https://github.com/foobar1643/student-list Сделал вот задачу из ОП-поста на список студентов, реализовал все что нужно было, код все равно получился говном (но работает). Подскажите что переделать, что сделано не так.
Поддержки mysql нет потому что мне лень было её ставить на сервер. Взял вместо неё postgresql, хотя в теории если поменять одну строчку в конфиге, то всё должно заработать и с mysql (дамп базы очевидно не подойдет).
постгрес можно использовать, никакой проблемы в этом нет. Насчет поля поиска, лучше было бы написать подсказку более конкретно, например "введите часть имени, фамилии, номера группы"
Сосач, помоги, пожалуйста. Есть скрипт парсера youtube. В инпут вбиваем ключевые слова, на выходе получаем файл data.txt со списком спаршенных видео по ключам. Проблема в том, что скрипт добавляет несколько видео по кейворду, а нужно, чтобы добавлял только 1 видео. В PHP не шарю, поэтому прошу помощь здесь. Код парсера: <?php //error_reporting(); @ini_set('max_execution_time', 0); echo "<title>Парсер YouTube V2.1 (с) by Gogres</title>"; echo "<form method = \"POST\" >"; echo "Кейворды (по одному на строку): медвед креветка <br><br>"; echo "<textarea name=\"keys\" cols=\"70\" rows=\"10\"></textarea><br>"; echo "<input name=\"page\" size=5 type=\"text\" value=\"1\"> :Количество страниц<br>"; echo "<input type=\"submit\" value=\"Click & Parse\">"; echo "</form>";
$data=fopen('data.txt','a'); if ($_POST['page']) $pages=$_POST['page']; else $pages=1; if ($_POST['keys']){ $filename=$_POST['filename']; $papkaname=$_POST['papkaname']; $keys=split("\n", $_POST['keys']);
foreach ($keys as $k=>$key){ $key=trim($key); $reskey=$key; $key=urlencode($key); $key=str_replace("%20", "+", $key);
Насколько сильно надо знать Гит и Гитхаб? Если научился создавать, добавлять, клонировать репозитарий через командную строку, этого достаточно? Я слышал что целые книги по Гиту выходят, нужно ли знать все эти подробности?
>>629169 Git - система контроля версий, GitHub - сайт, который работает на основе этой системы контроля версий. Так же существуют и другие системы контроля версий (Apache Subversion, Mercurial), но это уже другая история.
У гитхаба есть серия интерактивных уроков которые помогут понять новичку как это работает. https://try.github.io/
Почтото в старый ни кто перекат не кинул? Спасибо доброанону, который написал где новый тред.
PHP-ны. Скажите, как реализовать следующую задачу:(Пожалуйста, подробно, в вебе я вообще ни разу ничего не делал) 1)Создать страницу, на которой есть возможность просмотра видео. 2)На этой странице есть возможность залить видео. После заливки видео обрабатывается(обрезается на половину(тут по подробней распишите, пожалуйста, если можете)). Не знаю куда заливать, посоветовали бесплатное амазноновское хранилище. После заливки идет запись в БД о том, куда залито обработанное видео и есть возможность на странице воспроизвести это видео. Добра вам сразу!
>>619873 (OP) Анончики, помогайте, я застрял в бесконечном мысленном цикле и не могу выбраться. Задачка на проверку грамматики: http://ideone.com/VRhfc0 Почему при проверке в массив выводится только первая ошибка? После долгих размышлений я решил, что само регулярное выражение задано неправильно и вариант с "или-или" в данном случае - неверный выбор. Но если так, то получается, выражение можно заточить лишь под проверку конкретного предложения? Ткните пальцем в страницу из руководства, дайте подсказку, что угодно, я совсем запутался.
>>629302 Там про preg_match_all дальше говорится, же после Граммар Наци. Сам помню, как тыкался с имеющейся до этого информацией, а потом просто прочитал дальше на странице всё.
>>629286 А почему вывод ошибок не сделал нормальный, чего var_dump-то всего лишь? Если нужна подсказка для этого, то сделай вот так: раскладываешь циклом с foreach массив с ошибками на ключи и значения, другим циклом с foreach раскладываешь значения так же на ключи и значения - там же в массиве $mistakes у нас массивы в массивах. Далее просто выводишь в echo последние значения вложенных массивов. Если не получится сразу, то подсмотри: http://ideone.com/T4ewwV Но лучше сам пробуй сделать, конечно.
Добавление функций в твиг можно сделать без переменных:
$twig->addFunction(new Twig_SimpleFunction(...);
или можно вынести конфигурирование твига в метод класса, допустим, TwigHelper::initTwig(...). Хотя я не уверен, может лучше в index это оставить, давай пока оставим. Ну и помни что кроме экспортирования функций по одной есть еще вариант просто отказаться от статических методов и передать объект в твиг.
> $pathToFile = $app->filesHelper->getPathToFile($id . $file->getFileName()); что за ерунда? Почему для функции getPathTofile надо делать какие-то манипуляции? Это ведь верный путь к ошибкам, легко забыть склеить или что-то передать. Плюс ты ухудшаешь код, вынося знание о том как получается путь к файлу из функции и размазывая его по всему коду.
Надо либо функцию принимабщую объект File (не ошибешься) либо по отдельности id и filename. либо обе функции сразу.
Более того, вместо того чтобы передавать 4 переменных вроде pathToFile, relPathToThumb проще тут передать filesHelper в твиг.
> $app->get("/files/:id" > $app->post("/files/:id", Эти 2 функции содержат много общего кода и отвечают примерно за одну и ту же страницу, логично их объединить в одну. Также, читал ли ты урок по работе с формами? После успешной обработки формы надо делать редирект (можно на ту же страницу) чтобы при нажатии кнопки обновить запрос не отправлялся. Перечитай урок про формы и проверь соответствует ли твой код написанному там алгоритму.
> $fileName = $app->filesMapper->fetchFileName($id); > $fileName = $fileName['filename']; почему бы не возвращать сразу filename, а не массив?
> exit; в слиме есть $app->stop(), он в отличие от exit корректно вызывает все нужные обработчики завершения скрипта в слиме.
>>629396 >незачем передавать комментарий отдельной переменной Это комментарий для модального окна, он может отличаться от того, что в объекте, например, когда пользователь введет невалидный коммент, он будет там отображаться.
Дали какую то выгрузку. Логики с первого взгляда не вижу никакой. Сказали заебаш интеграцию с 1с на сайте, а я в душе не ебу что эти люди понимают под интеграцией. Предоставить выгрузку в формате CommerceML отказались.
Не прошу ничего делать за меня, а прошу - подкиньте ключевых слов для поиска (интеграция с 1с не предлагать).
Можно ли написать скрипт массовой рассылки сообщений в контакте? Вообще написать и используя АПИ контакта, чтобы можно было рассылать например всем участникам определённой группы (админом которой не являешься)
>>629547 Считает неправильно. Ориентир для Софтобанка - 61270 с копейками. Значит, у тебя и кредит за Айфон рассчитывался неправильно. >$creditSum = ($creditSum / 100 * (100 + $percent)) + $servicePay - $payout Забавно, можно проще всё представить. Ошибка заключается у тебя в том, что ты не обновляешь сумму кредита перед всеми условиями с if и else. >>629605 Ошибка в написании переменной вот тут: if (($anonDice1 == $anondice2) && ($compDice1 == $compDice2)) Отыщи сам, надо это тренировать тоже. Подсказка: $anondice2 - должно быть $anonDice2 И эта же ошибка в другой строке, номер 16. >>629619 Потому что тут переменные в одном месте названы без ошибок, а в 16 строке по-прежнему ошибка. >>629624 Тебе спасибо, я так повторяю пройденный материал.
>>629547 Также в самой функции обозначь переменную $paymentTotal, иначе будет вылезать ошибка. Вот твой исправленный калькулятор - но ни в коем случае не открывай, пока сам не попытаешься сделать: http://ideone.com/jaYrBg Вот алгоритм: 1. Имеем сумму кредита. 2. Прибавляем к ней нужный процент и прибавляем комиссию за обслуживание кредита. 3. Проверяем, получившаяся сумма больше или меньше 5000, которые может выплачивать Анончик в месяц. 4. В соответствии с результатом проверки или продолжаем цикл выплат, или выплачиваем имеющуюся сумму и обрываем цикл (не забывай, что она у нас уже должна быть умножена на процент и к ней должна быть уже прибавлена комиссия за обслуживание кредита). Всё.
>>629650 >уже должна быть умножена на процент То есть к ней должен быть прибавлен процент. Я делал не в скобках, как ты, а через умножение суммы кредита на 0.0n - так всё экономится.
>>629637 Спасибо, добрый человек. Нашёл ошибку без спойлера, как только ты сказал "надо это тренировать тоже". После основной работы учусь, внимание уже не такое. Буду иметь в виду)
Привет. Короче, у меня депресузха походу начинается. Думал на этих каникулах в колледже буду вкалывать - изучать пхп и потихоньку пилить диплом. Диплом должен делаться с базой, которую нам должен был скинуть препод. Я думал что пхначну делать как он скинет базу. Получилось, что базу он так и не скинул, до конца каникул осталось +-10 дней. Так на каникулах я почти ничего не учил, немного по мелочи пхп и mysql. Еще я расчитывал кстроитьсч на практику, то место куда мне нашли родители, сказали мол там будем погромирование и всё такое, оказалось что там пограммирования нет впринципе. Я понимаю, что каникулы и собственно свободные дни почти проёбаны, а я почти ничего и не делал, диплом даже и не начинал. Для диплома надо как минимум знания php. Вижу тут у вас есть свои уроки, они норм повышают уровень? Или сразу в какую-то книгу вникать? Помогите пожалуйста. Сейчас почти утро, я сейчас лягу спать и буду вкалывать весь день как проснусь. Мне нужны ваши советы по этому поводу, что дрочить чтоб повышать уровень php. Спасибо, не бросьте в беде.
>>629663 Нет, считает неверно. Должно получиться 61270 и много знаков после запятой. У тебя в последний раз когда $creditBalance участвует в выражении с $paymentTotal - от него уже отнята месячная плата. Вот тут: if ($creditBalance < 5000) { $paymentTotal += $creditBalance; А нужно просто выплачивать чистый $creditBalance на тот момент.
>>629668 Учебник ОПа отлично поможет в освоении синтаксиса, вообще всех основ. Если постоянно работать, то за месяц основы усвоишь, вплоть до БД. Но писать код придется постоянно.
>>629700 >if ($creditBalance < 500) Странный ориентир. ОП проверял, подставляя в сумму кредита 1000 - должно выйти 2030 рублей. А с твоим ориентиром - не факт.
Привет. Карочи мне нужен скрипт. Если кому не трудно, то помогите позязя. Есть страница /redirect.php, есть ссылки на неё вида /redirect.php?id=1 (2,3,4,5 итд). Нужно редиректить трафик на разные url, в зависимости от значения параметра id (т.е. если id=1 то редирект на url1, если id=2 то на url2 итд). С меня как и всегда огромное спасибо.
>>629732 Хм, нет, бро: http://ideone.com/SvK7TK - если подставить 1000 в кредитбаланс. Введи дополнительную переменную для суммы кредита, когда она увеличена на проценты и с прибавленной комиссией за кредит. С ней именно оперируй, когда надо просто её и выплатить. Просто каждый раз перед if проверяй, не стала ли чистая сумма кредитбаланса со своими 3 процентами и 1000 комиссии меньше 5000 возможной выплаты анончика. Если стала - сразу выплачиваешь только её и прекращаешь цикл. Попробуй так базарю, еще захочешь, поцене 38 рублей
>>629736 >Просто каждый раз перед if Просто каждый раз в if, опечатался. За пределами условий в этом цикле получай сумму кредитбаланса со своими 3 процентами и 1000 комиссии, ну а дальше подставляй её в условия, хоть в if, хоть в else.
Почему в интерфейсе смешан русский и английский? Выбери один язык (либо сделай поддержку переключения языков, если тебе интересно, я подскажу куда копать).
https://github.com/MindiMakridi/filehosting/blob/master/models/helpers/FilesHelper.php#L39 > return md5($salt1 . $cypher . $salt2); Эта функция не добавляет ничего к токену, а лишь увеличивает его объем. На входе мы имеем комбинацию из 20 символов (20 ^ 36 вариантов, гугл говорит что это 6.87194767 × 10^46). На выходе получаем 128-битный хеш, 2^128 вариантов (2^128 = 3.40282367 × 10^38). То есть ты уменьшаешь число возможных вариантов, снижаешь стойкость ключа (хотя 2^128 тоже много), да еще и увеличиваешь длину (md5 генерирует 32 символа на выходе). Объясни-ка, с какой целью это делается?
Если сузить экран (или открыть сайт в режиме эмуляции мобильного устройства) то меню переносится на вторую строчку и смотрится как-то криво (строчки близко друг к другу, меня вываливается из своей области).
Надо бы сделать адаптивную версию, например для устройств меньше 800 по ширине. Протестировать можно в отладчике браузера, нажав иконку с смартфоном или на реальном устройстве, если оно у тебя есть. Размеры экранов: http://mydevice.io/devices/
Примеры адаптивной верстки можно нагуглить. Также, в адаптивной версии возможно стоит похимичить с размерами картинок портфолио, чтобы они занимали по ширине весь экран без полей, но не увеличивай растровые картинки.
В HTML коде нет метатега, переключающего режимы совместимости ИЕ.
Фраза digital & branding выделена у тебя ариалом, а на макете - курсивным шрифтом.
В бледно-сером блоке с 4 колонками Consectetur у тебя нет паддинга снизу, а на макете есть.
Над надписью Our Featured Works маргин у тебя намного меньше макета.
На кнопках ALL GRAPHIC ... правильный ли размер шрифта и паддинги? Что-то они у меня пикселя на 4 выше чем на макете.
Маргин под портфолио у тебя намного меньше чем на макете. зато над Get in Touch больше чем надо.
На html, body не задан основной стиль и размер шрифта (в данном случае как мне кажется, основной это шрифт которым написано Vestibulum id ligula porta euismod semper...).
> font-family: "Lato-Black" > font-family: "Lato-Regular" Неправильно подключен шрифт. Это одно семейство - Lato, просто с разеым весом и начертанием.
> <i class="logo-icon"></i><span class="logo-text">ebpaint неудачно получилось, поисковик не проиндексирует настоящее название компании. Также, я думаю тут проще лого целиком сделать картинкой чем подключать шрифт ради нескольких букв.
> <i class="service-block-icon icon-android"></i> Лишний тег, не несущий никакого смысла. Иконку можно сделать просто фоном на псевдоэлементе ::before
> data-all="All" Не очень понятен смысл атрибута, ведь по кнопке All мы показываем все?
> data-id="Graphic" А как работу отнести в несколько категорий? Сделай-ка лучше атрибут чтобы там через пробел или другой символ перечислялись категории (но я не знаю есть ли в ксс поддержка для разделителей кроме пробела. По моему еще дефис поддерживается).
> <span class="phone" Сделай-ка телефон ссылкой с протоколом tel: чтобы она была кликабельна и звонибельна. А адрес - ссылкой на любой картографический сервис (например open street map, яндекс карты, гугл карты).
Спрайты соц иконок вроде бы в PNG8, а не в PNG24 - почему?
Насчет эффекта при наведении на картинки портфолио - ты используешь изменение opacity, но я его уже кучу раз видел, так неинтересно, нельзя ли сделать тут немного другой эффект? Например картинки выводятся чуть более темными пока на них не наведена мышь (и по моему это реально сделать даже без ксс фильтров). Или при наведении снизу плавно выезжает название работы (его можно хранить в атрибуте, чтобы не создавать новых тегов в разметке). Подумай, можно ли тут что-то такое сделать. Может можно как-то CSS3 фильтры применить: http://habrahabr.ru/post/144852/
> if ($bills[5000] > 0) { > if ($bills[1000] > 0) { > if ($bills[500] > 0) { Во-первых это копипаста, а копипаста - зло. Во-вторых, из-за этого очень сложно поменять номиналы купюр не переделывая половину кода. Надо избавиться от этих недостатков, например использовать цикл.
> if ($bills[5000] >= floor($amount / 5000)) { > $count5000 = floor($amount / 5000); > } else { > $count5000 = $bills[5000]; > } Это короче и удобнее записать через min/max
> echo "\n\nWe are temporarily unable to give you amount of money you asked. Ты выводишь это уже после того как вывел вариант выдачи, нехорошо. Если сумму выдать нельзя, не надо выводить вариант выдачи.
Сам алгоритм (так называемый жадный алгоритм) верный и годится для указанных в задаче номиналов купюр.
https://github.com/toppestkek/Test/blob/master/data.js#L2 > function Formdata Название похоже на объект FormData из DOM, это верный путь к ошибкам и опечаткам. Надо назвать по-другому, также, функции надо называть начиная с глагола: сделайЧтоТо.
> div.inne rHTML = ''; > div.inne rHTML += 'Заполните поле "Пароль. Пароль должен быть длиннее 6 символов."'; Лучше сделать чтобы функция возвращала результат проверки, а уже другая функция его выводила.
> data.age.value.match(/^[-\+]?\d+/ Почему разрешен отрицательный возраст? И почему разрешено вводить мусор после цифр?
> $regexpSegment = array ( > '/A/u' => '[А]', > '/a/u' => '[а]', > '/B/u' => '[В]', > '/C/u' => '[С]', многовато копипасты. Попробуй-ка сделать эту замену одним выражением.
> $regexpSegmentClean = array ( > '/\\[А\\]/u' => 'А', > '/\\[а\\]/u' => 'а', > '/\\[В\\]/u' => 'В', Это что-то неправильное. Зачем удалять ранее поставленные скобки? И как ты отличишь скобки в тексте от поставленных тобой?
Также, задача решена пока неверно. Твоя задача реагирует на любые английские буквы, а надо только на английские буквы внутри русских слов, то есть на ситуации когда в одном слове есть буквы из 2 алфавитов.
> строка if($foundAnimals["Dog"]) { превратилась в if (isset($foundAnimals["Dog"]) && $foundAnimals["Dog"]) if (!empty(...))
> abstract protected function setSymbol($symbol); По моему это неправильно. Вот как надо понимать это надпись? Я читаю ее так: "если ты наследуешь мой класс ты обязан сделать метод который принимает на вход иконку животного, то есть позволяет ее поменять". А должно быть так: "если ты наследуешь мой класс то обязан ответить какая иконка у твоего животного". То есть должен быть метод getSymbol() возвращающий иконку животного в данный момент. А поле protected $symbol; можно выпилить вообще.
Юзерфрендли это понятие относительное. НЕдавно ставил некий софт на чистую винду и очень жалел что это не линукс где можно кучу программ поставить одной командой в консоли, а тут надо как обезьяна лазать по всяким сайтам, скачивать инсталляторы и тд.
Задачи на вектор и кошки-мышки решил? Из учебьника в Оп посте? Они помогут с основами, а дальше читай про SOLID, изучай фреймворки и смотри как в них все сделано. Была какая-то большая книга про ООП но я ее название забыл.
Я как минимум вижу проблемы со шрифтами так как ты выбрал один формат woff который поддкрживают не все браузеры. Надо больше форматов, включая форматы для ИЕ и Сафари. На fontsquirrel есть хороший конвертер.
Если у тебя нет времени на изучение то мы тебе вряд ли поможем. Мы можем лишь направить в нужную сторону или ответить на вопрос.
> как мне этот ответ обработать, чтобы получить ссылку на скачивание документа Надо присылать с сервера ссылку, а на клиенте выводить ее в нужном виде.
> нужно ли городить такие выражения $d = isset($arr['d']) ? $arr['d'] : '' если можно обойтись $d = $arr['d'] Нельзя, будет ошибка обращения к несуществуюшему элементу. Тут лучше сделать функцию которая проверяет наличие элемента в массиве.
Так трудно сказать. Может браузер пережевывает яваскрипт и рисует страницу, а может что-то еще виновато. Может например он какие-то данные на диск сохраняет, а тот медленный или занят. Хорошо бы в Хроме запустить внутренний инструмент для трассировки ( chrome://tracing/ ) и попробовать разобраться в результатах.
Вообще конечно дырка огромная, подозрительно. Можешь еще глянуть диспетчером задач, кто и сколько ест процессора в процессе загрузки. Если Хром ест 100% во время паузы - значит проблема именно в обработке скачанных данных.
Также можешь выложить это на какой-нибудь хостинг - я или аноны скажут тебе сколько у них времени грузится.
json является подмножеством яваскрипта. То есть любой джейсон это корректное выражение на яваскрипте. Значит какие бы данные мы не передавали, они не сломают скрипт, не будут исполнены как код. Так можно передавать и массивы, и любые строки.
А что насчет raw? Это отмена автоматического экранирования (применения функции htmlspecialchars) к выводимым данным. По стандартам ХТМЛ в теге скрипт и стайл данные интерпретируются как записаны, то есть например амперсанд пишется как амперсанд, а не & amp ; Потому требуется отменить автоэкранирование. Правда, в этом случае в данных не должно быть последовательности </скрипт, но джейсон_энкоде экранирует все слеши в виде \/ и потому защищает нас и от этого, от закрытия блока скрипт.
Заметь что это относится только к тегу скрипт/стайл. Данные в атрибутах тегов, например в онклик, надо экранировать через htmlspecialchars.
> Я бы еще понял, если бы передавались какие-то сомнительные данные из базы, полученные от пользователя, например логин или текст сообщения, где может содержаться csrf код. Проще везде исплоьзовать один способ чем думать, надежные у нас данные или нет.
> Ну ладно, видимо это чисто ради систематичности: мы же экранируем в твиге все что нужно и не нужно, значит и здесь так же. И хорошо, подстрахуемся на случай изменений в коде. Сегодня у нас айди из базы, а завтра он может от пользователя будет приходить.
> if (!Object.create) { Лучше вместо этого сделать свою функцию, а в ней вызывать либо Object create, либо замену. А ты понимаешь как работает функция-замена?
> if (arguments instanceof NetworkElement) { > this._elements.push(arguments); А если нет то что? Проигнорируем ошибку и притворимся что все верно? Почитай про принцип fail fast.
> if (this._elements instanceof Generator) { Нехорошо это, закладывать в программу ограничение что только наследники Generator генерируют ток. Лучше просто сделать метод в элементе сети который возвращает 0 для не генерирующих сущностей. Или сделать метод отвечающий на вопрос, генерирует ли этот элеимент энергию. То же и с потребителями.
И как в твоей программе например сделать элемент который днем генерирует, а ночью потребляет ток?
> if (powerExcess === 0) { > break; > powerExcess -= lines.getPowerAccumulated(); А мы в минус тут не уйдем?
> PowerLine.prototype.countDailyProfit = function(powerExcess) { > this._powerAccumulated = this._powerCapacity; Вот это хорошая мина замедленного действия. Из названия метода можно подумать, что он просто что-то считает, а он еще и меняет внутреннее состояние объекта. И вообще это поле _powerAccumulated оно плохое, так как оно никак не привязано ко времени, например оно само не сбросится на следующий день. Да и линия передачи не копит энергию, она ее передает - тут явно несоотвествие модели и реального объекта. Это поле надо выпилить.
Можно но лучше бы создание каких-то сервисов вообще вынести из контроллеров. Если это большой проект то стоит использовать DI Container, например от Симфони. Если маленький - можно сделать самописный ServiceLocator.
Есть книги "Совершенный код", есть книга Фаулера "Шаблоны проектирования корпоративных приложений", также можно посмотреть фреймворки вроде Симфони. В вебе придумыать архитектуру незачем, в большинстве случаев есть готовое решение или принцип решения.
> function checkText($text, $patternRus, $patternEng){ $patternRus, $patternEng никогда не меняются, лучше внести их внутрь функции и убрать из скобок. То же самое с $replacementRus, $replacementEng
Лушче бы если checkText ничего не выводил а только возвращал результат.
> $array = explode (" ", $text); array -> words
> if (preg_match('/^([а-яё.,;?!]+)([a-z]+)/ui' По моему непрвильная проверка на язык слова, надо провеять только язык первой найденной буквы. То есть что-то вроде ^(русская буква).
1) начни с презентации http://lib.custis.ru/WebAppCaching (при желании можно нагуглить и запись выступления). Вообще кеширование это попытка снизить нагрузку на систему ценой расхода памяти.
2) Вот так было бы неплохо для начала (информация о запросе, время, стектрейс):
[12-01-2015 12:00:00] GET /some/page IP: 10.10.10.x. User-Agent: googlebot/1.2 Exception: the hell broke out Stack: #1 SomeClass::someMethod(123, "test") at file.php:12 #2 someFunction() at index.php:13
> Я хочу потом ещё кучу всяких задачек пройти и весь учебник ОПа полностью без подсказок Зачем учебник? Ты всегда можешь попросить дополнительную задачу на какую-нибудь тему, ОП придумает.
>$newAmount = ( $amountM = $percent ); Это 2 отдельных команды, надо писать в 2 строки.
Считает верно.
> или вот так > $newAmount = ( $amountM $percent ); > $amountM = $newAmount; Почему бы сразу в amountM и не класть результат? И кстати что значит M? Неудачное название.
> function makeFirstLetterUppercase($text, $regexpCut, $bigRegexp, $bigReplacement) Тут $regexpCut, $bigRegexp, $bigReplacement явно не аргументы, а постоянные значения, значит они не дложны быть в скобках, а просто внутри функции определены.
> [\\.!?\\.\\.\\.] Что это значит? От того что ты точку вписал 4 раза ничего не меняется. Кваждратные скобки значт "любой из символов"
Название переменной это существительное, а не глагол $cutTheText -> $sentences findTheFirstLetters -> firstLetter upTheFirstLetters -> firstLetter или head (голова) countAllTheLetters -> letterCount cutTheLittleFirstLetters -> tail (хвост) theRightSentence -> correctSentence implodeOnlyRightSentences -> text, result
Голова и хвост - традиционные названия для таких вещей.
> as $keys => $sentence Если не исплоьзуешь keys то не надо ее писать
> $findTheFirstLetters = mb_substr($sentence, 0, 1); замену первой буквы на большую в строке стоит вынести в отдельную функцию, а то у тебя большая простыня кода получается
> mb_substr($sentence, 1, $countAllTheLetters); Можно просто mb_substr($sentence, 1), глянь мануал по этой функции
> mb_strlen($text, "UTF-8"); кодировку не надо указывать если ты задал mb_internal_encoding
> (\\.|!|\\?|\\.\\.\\.) Тут проще написать "один или более идущих подряд любых знаков препинания". Также непонятно зачем для запятой сделана отдельная регулярка.
Это решение пока что не годится и требует доработки.
> про клавишу "Shift"; > '/([а-яёa-z]+)\\s([.,;:!?])\\s([а-яёa-z]+)/ui' Сложновато, я думаю лучше записать просто "знак препинания, за которым идет буква"
> [.]\\s|\\A А где гарантия что там ровно 1 пробел?
В остальном верно.
> 2) про Йоду.
> $yodaText = []; лишняя строка
В общем, верно.
> Тут я не сохранял знаки препинания внутри предложений, решил, что так подразумевалось (глянул в примере, что их нет). Да, можно не сохранять
Лучше не делать эхо прямо в функции, а возвращать из нее результат. Надо писать общую сумму выплат по кредиту. В минус уходить не надо. Вместо фор лучше использовать форыч.
Для аяксовых форм - блокировать кнопку отправки свойством disabled на время обработки. В твоем случае надо просто при втором клике отменять текущую анимацию, у джейквери есть метод для этого, забыл название.
Это работает только с консольными командами, выводящими данные в виде текста. ДА, можно брать результат и делать с ним что хочешь. В этом и сила командной строки.
На идеоне неудобно писать больше 20 строк. В ОП посте есть уроки по установке апача и пхп, и поставь себе редактор или ИДЕ. Саблайм текст и нотепад++ оба очень легкие и работают даже на слабом железе.
> var fn = [].shift.apply(arguments); arguments это не настоящий массив и не переменная, а псевдопеременная. Не стоит ее менять, только читай из нее. fn лучше указать в скобках.
Ошибки у тебя есть. Например если в arguments много аргуменитов, а в args мало (названия кстати не очень удачные, лучше inner/outer наверно) то лиишние аргументы из arguments должны идти в конец списка, а у тебя не идут:
Ответы на посты с 18 по 20 января будут здесь сегодня или завтра. ответы на посты по 17 января идут выше. Если вас пропустили - напомните о себе в новом треде.
И так, нужна помощь, я не знаю в какой раздел программирования идти, но мой вопрос связан с сайтами. К делу: Есть один сайт, как пример прbведу этот https://csgofast.com/. Я хочу его рипнуть и поставить к себе на хост с одной целью, но мне нужно что бы с этого сайта https://csgofast.com/ парсилась инфа "топ игроков, история" и т.п, ко мне на сайт, точнее на мой рип/шаблон. Молю о помощи
Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).
Предыдущий тред был тут:
Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).
Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП отвечает даже на самые нубские вопросы. ОП заходит где-то раз в день-два, не жди его, решай задачки дальше.
У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.
Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.
Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.
- Простая, но полезная задача сделать список студентов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование
- Если ты все решил, переходи к Symfony 2/Doctrine 2
Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:
https://gist.github.com/codedokode/10774100
https://gist.github.com/codedokode/7054af4a03865c4cc863
Может тебе понадобится пользоваться командной строкой, вот гайд https://gist.github.com/codedokode/10539568
Вот небольшой туториал по тому как начать использовать PHP на сервере для отдачи странички в браузер: https://php.net/manual/ru/tutorial.php Увы, уроков плавно подводящих к тому, как сделать задачи выше, пока нет, так что если что, задавай вопросы.
Решения задач лучше показать мне, особенно на ООП,так как сам ты вряд ли увидишь все ошибки. Пости свой код на гитхаб и вкидывай ссылку в тред по мере решения. Я прокомментирую и укажу на ошибки.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
- HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- 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) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.