Добро пожаловать в наш уютный тред. Тут мы не флудим, а изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то - делать сайты, кто-то - просто размять мозги и заняться чем-то полезным.Почему PHP? Потому что фейсбук и википедия на нем написаны, и вакансий море, и учить легко. Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (с ним будет удобнее).Предыдущий тред был тут: >>664784 (OP) (почти 1000 постов!)Что самое главное для программиста? Умение аккуратно оформлять код (читай второй пост).Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания. ОП отвечает даже на самые нубские вопросы. ОП заходит где-то раз в 2-3 дня, не жди его, решай задачки дальше.У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.Учебник дает основы языка PHP, но чтобы делать сайты, этого недостаточно. Если ты его прошел, то надо переходить в более серьезным задачкам, которые научат тебя как выдавать страницы в браузер, работе с таблицами в БД, работе с формами, MVC.- Для начала установи Апач + PHP (советы ниже) и читай туториал http://php.net/manual/ru/tutorial.php- Учи HTML/CSS и SQL, хотя бы основы- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217- Еще более сложная и долгая задача на Yii/Yii2: https://gist.github.com/codedokode/8733007- После нее можно изучать автоматизированное тестирование- Если ты все решил, переходи к Symfony 2/Doctrine 2 Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:https://gist.github.com/codedokode/10774100https://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) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Код ведь нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()- Название функции начинается с глагола, в стиле «сделайЧтоТо»- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там- в именах классов используется CamelCase, первая буква большая, «_» может использоваться- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления: PSR-1: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-1-basic-coding-standard.mdPSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/ru/PSR-2-coding-style-guide.md------------------Итак, ты зашел в тред и решил помочь какому-то анону, дав ему совет или подсказку. Спасибо! Но прочти сначала эти напоминания, чтобы твоя помощь действительно была полезной.Будь доброжелателенНе годится: «Ты мануал хоть раз в жизни открывал, обезьяна?»Не годится: «В гугле забанили?»Не годится: «Твой код плохой»Хорошо: «Вот, как можно улучшить этот код: ...»Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»Не придирайся к знанию английского языка. ОбъясняйНе очень хорошо: «сделай как в этом коде»Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)»Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»Не проповедуйМы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.Не придирайся к знанию английского языка, анон пишет как умеет.Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
>>678175>непрограммисты живут довольно бедноЛол.В Америке программисты и админы считаются средними профессиями для всяких индусов и арабов эмигрантов. И платят программистам там довольно среднюю зарплату, которая куда ниже зарплаты врача или адвоката. А в России ты можешь устроиться в бодишоп который работает на зарубежных клиентов и жить как король.
+--classes - тут у меня родительский класс Class.php||+--subclass - тут у меня класс наследующий класс /classes/Class.php с именем Subclass||+index.php - а тут я создаю экземпляр SubclassКак мне сделать, чтобы всё это автоматически подключалось и не нужно было бы при добавлении новых классов писать бесконечные include?
>>678195Почитай про пространства имен и автозагрузку с помощью них.https://github.com/codedokode/pasta/blob/master/php/autoload.md
>>678194> которая куда ниже зарплаты врача или адвокатаТолько не факт что ты попадешь на рыбное место - а оплачивать дорогущее обучение надо. http://www.nytimes.com/2015/04/27/business/dealbook/burdened-with-debt-law-school-graduates-struggle-in-job-market.html?_r=0Вообще это платное обучение выглядит как обман.
>>678201Есть кредиты на обучение, но я не хочу начинать чат уже в начале треда. Погугли если интересно.
>>678192>в СФ минимальная з/п $12.15, а в других штатах может быть 6-8 в часНе, в СФ наоборот экономят вроде. Читал программиста, который уехал туда работать, он пишет, что хочет все равно уйти к яблочникам, хоть там и ЗП меньшую предложили. Тупо хочет в эппле поработать, мечта у человека.>куда ниже зарплаты врача или адвокатаСравнил профессии. Адвокат и врач - это пиздец как долго и дорого, плюс ответственности больше. Еще бы чинушей из правительства привел в пример.
>>678196Примера реализации нет? Не особо понял как в моем случае поступить.
>>678185 (OP)Анон, стоит смотреть курсы, например, линду, Борисова? Они представляют какую-либо ценность в обозримой перспективе?
Как при выполнении такого$test = array();$test[452] = 5;Избежать ошибки?Notice: Undefined offset:Вообще возможно ли динамически добавлять значения в ассоциативный массив?
>>678252Странно. Notice выдаётся только при обращении к неопределённому индексу. Посмотри на какую строку ругается PHP, возможно ошибка в другом месте.
>>678273> при обращении к неопределённому индексуА он и не определен. Я создаю пустой массив и далее хочу его динамически наполнять $test[$key] = $value;
>>678274Криво выразился. Имеется ввиду что-то типа$test = array();echo $test[452]; // тут возникает Notice.То, что делаешь — в PHP абсолютно нормально.
Я и не заметил что новый тред есть, задачи по css:Задание 1 - Задание 1 - Задание 1 -
Нет, это не считается
Я и не заметил что новый тред есть, задачи по css:Задание 1 - https://jsfiddle.net/a0a7e51v/Задание 2 - https://jsfiddle.net/aeqp2pq5/Задание 4 - https://jsfiddle.net/j3hsp8bg/Задание 5 - https://jsfiddle.net/smpwuf8k/Задание 6 - https://jsfiddle.net/t03a2v4q/ что-то я не смог справиться без вот этого селектора * { } в рекомендациях написано его не использовать, но а как скинуть все стандартные отступы?
>>678280Т.е. единственный выход это?error_reporting(E_ALL & ~E_NOTICE);
>>678228Только если ты совсем нуб, который не может ни слова понять из документации (у меня так было год назад).В общем, для новичка представляют, но надо понимать что это самые основы, этого совсем недостаточно чтобы работать.
>>678289Юзать css-ресеты. Они пиздовые по размерам, правда.
>>678295Ну это понятно, что после просмотра видоса не станешь йоба-про.Просто хотел поинтересоваться, потеря это времени или нет. Хотя, в принципе, оказалось, что длина этих курсов не такая и большая, вполне можно за эти выходные все посмотреть. Я думал, что там сотни часов лекций, лол.
>>678291Очевидно - не обращайся к ключам которых нет в массиве. Например нумеруй их последовательно, чтобы там всегда были ключи от 0 до N.
>>678274Наполнять можно, обращаться к несуществующим ключам - это ошибка.
>>678291Нет. Здесь не должно выдаваться предупреждения. Какая версия PHP?
>>678289А зачем их "скидывать"? Ты же наверняка даже не можешь перечислить, на что повлияет такой "сброс".Нужно делать селектор для конкретно тега, который нужен в данном случае.Убрать поля и отступы у body и html? Напиши правилоhtml, body { margin:0; padding: 0}Тяжело?Нужно переопределить отступы у параграфов?Переопредели явноp { margin: 10px; }
>>678289> я не смог справиться без вот этого селектораЗачем тебе сбрасывать все оступы? Чтобы когда ты текст захочешь добавить или список, они шли сплошной стеной без абзацев? Так? Ну ты сам подумай.Тебе не надо сбрасывать все отступы. Только на некоторых элементах, где это требуется для верстки.>>678297ресет инструмент быдловерстальщика. Сейчас это поняли даже на западе, где их и придумали. Я кстати никогда их не использовал и у меня все прекрасно версталось и работало в разных браузерах.
>>678301PHP Version 5.3.13
>>678314Я думаю, что проблема в коде, так что показывай его.Какой редактор/IDE?
>>678143>Изучал бы уже 2-ю версию. Я реалистично настроен, и понимаю, что в 80% случаев придется иметь дело со всякими "легаси"-проектами, написанными с использованием несвежих технологиях.В моей мухосрани все вообще упрямо сидят на первом зенде.Так что ты не прав, знание косяков первого yii думаю очень сильно пригодится. Так конечно было бы здорово учить что хочешь и использовать только любимые инструменты.>Лучше не использовать тут сессии так как сессия одна на много вкладок.Я тоже об этом подумал, когда разбирался с устройством компонента user в yii. Но уж если разработчики yii пошли таким путем, то и мне можно (жираф большой, ему видней).>Это именно что кривой костыльИ не просто костыль, он в итоге еще и не работает.Если пользователь со страницы /a попытается перейти на /b, где его отредиректит на /c, то в экшене для /c в реферере окажется как раз /a, а не /b как мне нужно.Решил другим костыльным способом: на странице /b сохранять ее url в сессию, а на странице /c (логина) уже после рендера удалять эти данные из сессии.$this->render('login'); Yii::app()->user->удалить_из_сессии.Но "твой" способ (че-то я сомневаюсь, что вот прям сейчас это сам изобрел) действительно самый оптимальный. Если не учитывать замусоренность полученного урл.>все из-за непоимания того как работает протокол HTTPКак сказать. Теорию я неплохо знаю, все эти заголовки, методы. Помню пару месяцев назад мы вскрывали эту тему, ты мну даже заставлял формировать post запросы руками. С курлом знаком, с guzzle.Тут скорее тупо не додумался, что можно было нужные данные отправить в виде гет-параметров. Наверняка это какой-нибудь паттерн, которому даже дали глубокомысленное имя. Например алгоритм обработки форм, который мы использовали в задачах на сайт вуза и файлообменник, это оказывается PRG https://ru.wikipedia.org/wiki/Post/Redirect/Get Кстати у способа с гет-параметрами есть недостаток в том, что пользователь может нажать кнопку "назад", его в истории перекинет опять на страницу с сообщением.Ну ладно, хвалю себя за дотошность в этом вопросе.
>>678415> Кстати у способа с гет-параметрами есть недостаток в том, что пользователь может нажать кнопку "назад", его в истории перекинет опять на страницу с сообщением.Я не считаю это чем-то неожиданным, браузер вернул пользователя на ту страницу где он был. Более того, если пользоатель нажмет "назад" еще несколько раз - скорее всего браузер покажет закешированную страницу где он был еще разлогинен (и возможно именно это пользователю и требуется). HTTP изначально ориентировался на "stateless" режим работы, без сохранения состояния, когда содержимое страницы определяется ее URL. С добавлением залогиненности появляется состояние и появляются расхождения с этой моделью.
Если я не совсем понимаю этот алгоритм, то дальше можно и не продолжать изучать PHP?http://brtrg.by/blog/post/97Как к этому алгоритму приделать ограничение числа банкнот.т.е. есть набор банкнот 5р - 10шт 10р - 50шт 100р-1штнадо нам выдать 200рЭтот алгоритм выдаст оптимальный вариант 2х100, он не учитывает количество банкнот и то, что есть не оптимальный вариант 1х100 10х10
>>678431Это банкомат сбербанка.
>>678431>Если я не совсем понимаю этот алгоритм, то дальше можно и не продолжать изучать PHP?Нужно просто разобраться.
>>678176Смешались в кучу кони, люди…Речь вот об этом >>674922
>>678431Можно начать с более простого (но менее эффективного) алгоритма: - перебираем все возможные комбинации купюр (таких комбинаций (b1 + 1) x (b2 + 1) x .. (bN + 1), где b1 .. bN - это запасы купюр разных номиналов )- оставляем из них те которые в сумме дают нужный результатЕсли сделать последовательный перебор, то видно что он будет не очень эффективен, так как он будет перебирать комбинации подряд: 0 0 0 10 0 0 20 0 0 3...0 0 1 0 ...Можно его оптимизировать, определяя начальные значения жадным алгоритмом и уменьшая их то есть примерно в таком порядке:4 ? ? ? 4 6 ? ? 4 6 2 ? - не подходит, недостаточно купюр меньшего номинала3 ? ? ?3 10 ? ?3 10 2 ?3 10 2 1 - подошлоВ случае с алгоритмом из задачи по ссылке. Надо разобраться, можно ли его доработать чтобы не рассматривать невозможные сочетания. В первую очередь тебе конечно надо понять как он вообще работает. Там в задаче функция F возвращает число банкнот нужное для выбачи суммы, вроде того что если F(100) = 5 то это значит что 100 меньше чем 5 банкнотами не выдать. Функция определяется рекуррентно, через саму себя. Нам нужна другая функция, которая возвращает не число, а комбинацию, такого вида: F(100) = { 2 3 0 0 }То есть каким набором купюр выдается эта сумма. Но трюк в том что одну сумму можно выдать разными наборами (в той задаче это значения не имеет так как там нужен только вариант с наименьшим числом купюр, а их число не ограничено). Подойдет ли этот алгоритм к нашей задаче?
>>678440Тебе же ответили: используй гет параметры.
>>678446Ой, я привел плохой пример оптимизированного алгоритма. Там логика такая: для каждого номинала мы сначала берем максимально возможное число, которое бы не превышало требуемую сумму. Если не получается - отходим назад (бектрекинг) и уменьшаем число купюр на 1. И получается такая последовательность: 4 ? ? ? (если взять 5 то будет перебор, потому 4)4 6 ? ? (4 7 дадут слишком много потому 6)4 6 2 ? - не подходит, не хватает купюр меньшего номинала, откатываемся на 1 шаг4 5 12 ? - не подходит, не хватает купюр меньшего номинала, откатываемся на 1 шаг4 4 12 ? - не подходит, не хватает купюр меньшего номинала, откатываемся на 1 шаг....4 0 12 ? - дальше уменьшать 0 некуда, потому отходим на 2 шага и уменьшаем число старших купюр с 4 до 33 ? ? ? 3 10 ? ? 3 10 2 ? 3 10 2 1Тут правда тоже есть не очень эффективный момент, где мы уменьшаем число второго вида купюр на 1, каждый раз натыкаясь на ту же проблему. Это можно исправить, если учитывать общую сумму купюр меньшего номинала.
>>678455То есть логика оптмизированного алгоритма такая: - допустим у нас выбрано несколько купюр более старшего номинала, и нам надо перебрать все варианты более младших купюр. Допустим у нас уже есть комбинация 4 6 ? ? и надо проверить какие возможны комбинации для третьей купюры (выделена).Мы определяем 2 значения: - макс. число купюр этого номинала которое не превысит искомую сумму (max)- минимальное число купюр, которое позволяет добить остаток суммы более маленькими купюрми (min)Допустим у нас получилось min = 2 и max = 10. Значит мы должны проверить все значения от 4 6 10 ?до 4 6 2 ?Если не найдем - значит комбинация 4 6 ? ? не годится и надо отступить на шаг, например к комбинации 4 7 ? ?
>>678447Я не автор вопроса.ОП мне ответил невпопад, вот я и указываю на это.Больше в эту ветку ничего не пишу
>>678447Все впопад, в обоих случаях тут >>678415 и тут >>674922использовать гет-параметры.>Можно как-то передавать между php файлами значения переменных по типу POST, не хуяря их в куках/сессии/адресной строке?Нельзя, надо "хуярить".
Делаю студентов. Хватит ли двух таблицы данных для хранения инфы - первая для ИД + имя + фамилия + личные данные, вторая для ИД + номер группы + кол-во баллов?
>>678774или надо сделать огромное количество таблиц типа: ИД + год рожденияИД + имяИД + фамилияИД + кол-во баллов?
>>678774Объясни по какой логике ты решил так разложить данные? Например, почему номер группы и кол-во баллов в одной таблице?
>>678780Личная информация - одна таблица. Относящееся к учёбе - вторая. Не?
>>678780Так как всё же лучше? Сделать множество таблиц, спарив каждое значение с ИД?
Есть тут те, кто работает с Laravel? Фрилансите\сидите в офисе? Спалите примеры работ?пикрандом для привлечения внимания
>>6787811 сущность = 1 таблица. Также, советую найти время и почитать про нормализацию данных в БД.
>>678793Я много возился с БД(но, видимо, недостаточно), просто начинаю тупить и это дико выводит из себя. Т.е. делать как тут сказал (скажи лишь да/нет, прошу тебя) >>678777 ?
>>678774Разве не достаточно одной таблицы для этого?
Анон помоги. Уже 2 часа бьюсь.Parse error: syntax error, unexpected '$i' (T_VARIABLE) in C:\OpenServer\domains\localhost\models\News.php on line 38
>>678805раз ты делаешь тоже студентов, ответь, а>>678774
>>678811Анончики выше правы - там хватит и одной таблицы. Ты же будешь обращаться к полям по запросам, и вернуть ты можешь лишь, то, что тебе сейчас надо.Кун с пикчей выше твоего поста.
>>678814Т.е. одна огромная таблица ИД + имя + фамилия + номер группы + год рождения.... и т.д.?
>>678815И чо? В чем проблема-то огромной талбицы?
>>678819Да не, я просто уточняю. Читал в инетах, что этого лучше избегать и делать много таблиц спаренных с ключом (id), но если всё ок, то мне же легче
>>678815Да, но допустим тебе надо отобразить имя, фамилию, баллы.Тогда пишем. 'SELECT first_name, second_name, marks FROM students ORDED BY marks DESC'
>>678805Не выкладывай куски скриншотов, выкладывай код (все содержимое файла News.php, не фрагмент) на http://ideone.comи давай ссылку в тред.По тексту ошибки: где-то пропущена точка с запятой, или скобка. По фрагменту кода на рисунке не видно где ошибка, скорее всего выше или ниже.Еще нужно использовать подготовленные выражения http://php.net/manual/ru/pdo.prepare.phpfetch используется для извлечения одной строки, используй fetchAll чтобы получить все записи, без этих странных манипуляций с циклами и ключами массивов.Вместо select x можно (и нужно) указывать имена колонок, тогда не нужно будет их специально выбирать.SELECT x пишут только в документации (ради обобщения) и быдлокодеры (потому что лень писать имена колонок и потому что бездумно копируют из документации).И "новость" это объект, значит и возвращать fetchAll должен массив объектов, а не массив массивов. У тебя же есть класс News?http://php.net/manual/ru/pdostatement.setfetchmode.php>>678815Группа это другая сущность. Группу лучше сделать отдельной таблицей. Но в этом задании наверное можно все занести в одну таблицу.>>678821Это (объединение таблиц, джойны) появится позже, когда кол-во классов будет больше. Например в блоге есть новости, есть пользователи-авторы, у новостей есть комментарии, у комментариев (и статей) лайки. Тогда под каждый класс отдельную таблицу и ссылки через внешний ключ.
>>678831Вы просто бог пхп, скопировал в идеоне код и там после запроса стояла точка, хотя я не мог ее разглядеть, удалил вставил обратно и заработало. А замечания обязательно учту.
Аноны, научите работать с переменными $_GET, $_POST, не могу найти нормально разжёванную инфу в интернетиках. Как ими пользоваться?
Добрый вечер, Аноны. У меня сложилось чувство, что я неправильно понял механизм создания массива с вопросами из первого урока основ ООП. http://archive-ipq-co.narod.ru/l1/pasta.htmlВот мой код: http://ideone.com/UjE2KFДальше к сути.Более конкретно:1) Как я изначально понял, то эта функция добавляет вопрос в массив с вопросами, отсюда я уже ошибся в следующем: а) Массив создаётся в функции и не является глобальным(?). б) Всё можно реализовать более простым образом, но я всё испортил. Да, я знаю про __construct2) Изначально думал, что внутри этой функции есть конструктор, который по вводным данным создаёт несколько вопросов и засовывает их в массив, но потом понял, что выйдет слишком много данных, которые нужно указать в input'е функции. 3) Дальше я увидел, что вопросы прописываются уже в функции, но в примере вопрос №1 и вопрос №2 обозначаются одной переменной $q. Это же для простоты или я тупой?4) Нужно ли указывать ключ при создании такого массива в рамках этой функции или всё можно отдать автоматическому назначению?5) Но тогда какой толк от этой функции, если так собрать все вопросы в массив можно и без самого создания функции. Надеюсь, нестыковки, с которыми я столкнулся, понятны.Я не тролль.
>>678846Иными словами: НАХУЯ СОЗДАВАТЬ ДЛЯ ЭТОГО ФУНКЦИЮ, ЕСЛИ ВСЁ РАВНО ИНПУТ ПУСТУЕТ?
Я в небольшой панике. Как взаимодействует код php и код html? Прошу прощения, если туплю, но ОП нигде ни разу это не описал. Я закончил ООП и приступаю к студентам - но вижу, что не понимаю даже такой банальщины. Есть какой-то особенный урок, я его пропустил? Как совмещать html и php файлы? Что вообще делать. Я в панике
>>678851Читай про паттерн MVC.
>>678866Не в кассу вообще. Его техническая часть интересует, а не архитектура приложений.
>>678869Как раз то, Views получает данные от модели и совмещает их с html-template.
Оп, где хорошо почитать про настройку nginx и php-fpm? Я у себя все настроил по мануалам, как под копирку, но сам так и ничего не понял, хоть и работает. Может у меня там уязвимость за уязвимостью.Далее, ОП, нужна задача по сокетам и написанию демона. Можешь придумать, пожалуйста? Ну и хорошими и добрыми ссылками покидать по этой теме. Я уже гуглил и читал, но вдруг ты знаешь, где понятнее и грамотнее расписана теория.
>>678869так помоги мне, пожалуйста, раз понял, о чём я
>>678851<html><body><?phpyour code?></body></html>
>>678870А модель содержит классы, но это не значит, что нужно советовать гуглить мвц человеку, спрашивающему про ООП.
>>678874Ты задачи на HTML+CSS делал, лалка?
>>678877я их все сделал в январе где-то. Так они же на чистый ХТМЛ были, там ни слова про взаимодействие с php
>>678875Я тут один такой непонимающий? Как вы преодолели тепличные условия учебника, где можно аутировать и решать задачки и выход на студенты, где в пояснениях сыпятся слова типа "используй шаблон", "паттерны", взаимодействие разных файлов php и html+css, фреймворки. Как вы перескочили? У меня какая-то паническая атака начинается
>>678883Я просто гуглил много.
>>678880input там помнишь такое? Button, checkbox и т.п.Вот это позволяет что-то вводить с каким-нибудь результатом.Любую задачу из первых уроков можно перевести в html, на месте основных данных поставить разные input'ы - всё будет работать внутри html.>>678883Да это ерунда, я просто до этого клепал сайтики на чистом html, вставлял туда калькулятор на php, ничего сложного.РНР тем и хорош, что легко вставляется в HTML, всё работает на странице.А JS потом будет динамику отображения создавать.
Парни, я должен был сдать сайт еще 2 месяца. Больше никогда не буду писать сайты, нахуй программирование! Оказывается, писать для себя - это удовольствие, потому что делаешь это, когда есть вдохновение, а писать для других - ебаное мучение.Так вот. Как заставить себя сесть дописать ебаный движок? Уже видеть этот PHP не могу.
*2 месяца назад
>>678885Вот как у анона с переводом чисел в пропись: http://blankionline.ru/servisy/summ-propis.htmlТам тот же скрипт, который мы и должны были написать при решении задачи, но встроен в html-страницу просто, а на месте основных переменных - инпуты для ввода текста.>>678887А что будет, если не сдашь сайт?
>>678892>но встроен в html-страницу простоКАК?
>>678896Дык вот так: >>678875Ты как с луны свалился.Просто так и вставлен, а инпуты и аутпуты отвечают за ввод/вывод.Вот тут посмотри: http://htmlbook.ru/html/outputТолько там на JS код в аутпуте, а ты можешь подключить РНР, вставив ссылку на файл или просто сам код, как подключаешь CSS.
>>678846>>678847Бамп.
>>678896https://jsfiddle.net/q8a7k1nq/ - вот тот пример с хтмлбука.
>>678892>А что будет, если не сдашь сайт?Непочет и неуважение.Меня отрекомендовал друг, поэтому там вообще некрасиво получается.
>>678903Интересно, за 2 года я впервые вижу этот тег. Я обычно ява скриптом писал в дивы или спаны. И кстати нигде этот тег и не встречал. Почему его не используют?
>>678920А как тогда ты делал задачи на HTML/CSS, там в нескольких это всё встречается!Или ты про output?А ты много смотрел сайтов, на которых инфа сразу вот так выдаётся?Обычно он для этого и нужен.Так-то input везде, когда надо и-мейл вводить, ФИО, адрес и прочее, там output и ни к чему.
>>678916Мотивация же, не?
>>678926Я не тот анон, который спрашивал про взаимодействие хтмл и пхп. И да я про output. Ну хз, 2 года работая в студии, я такого тега ниразу не видел. За этот вечер я хоть что-то новое узнал. Спасибо анон.
>>678847Код надо разбивать на функции ради удобочитаемости, чтобы вся программа не шла сплошной стеной. Потому та часть которая создает массив вопросов, вынесена в функцию. >>678840Официальный мануал смотрел? >>678851Мануал http://php.net/manual/ru/tutorial.phphttp://php.net/manual/ru/language.basic-syntax.php>>678920Это тег HTML5, плохо что не знаешь его.
>>678930https://www.w3.org/TR/html-markup/elements.htmlhttps://developer.mozilla.org/en-US/docs/Web/HTML/Elementhttps://w3c.github.io/html/fullindex.html#index-elementsТам еще много тегов вообще-то (ссылки на англ)
>>678937Хорошо, но почему я обычно вижу под формой какой нибудь span с id="test" и ява скрипт, реагирующий на изменение инпута, вместо output Я вижу различие только в тегах. Семантика?
>>678940В IE не работает, наверное, JSом надёжнее.
>>678932Спасибо
Такая ситуация.Допустим, у меня такой код внутри метода:if (!$mysqli->query('INSERT INTO table (something) VALUES ("something")) { throw new Exception('Бля, в снег упал'); }Есть сработает эксепшн, кто будет делать $mysqli->close(), а? Мне снаружи его не видать.
>>678954Зачем close? Mysql вечно не держит соединение. Само отключится.
>>678959Я знаю, что все закрывается после отработки скрипта.Но это некрасиво.
>>678959В комментариях к документации, например, советуют вешать $cnx->close() в __destruct(), иначе память течет.
>>678963Ну понятно, просто опять я о таком в первые слышу. Просто на примере сокет сервера, который ждет подключения клиентов и посылает запросы в базу. Так вот мускуль отсоединяется через какое-то время, даже если скрипт не закончил выполнение, и приходится заново подключаться, что тоже некрасиво.
>>678960Это нормально. У тебя все равно одно соединение на скрипт и при завершении оно закроется. Если бы было много - имело бы смысл заморочиться.>>678963Зависит от ситуации. Совет в общем довольно глупый, так как при автоматической сборке мусора нет гарантий когда будет вызван деструктор. Если тебе надо что-то освобождать лучше делать это явно. >>678969> мускуль отсоединяется через какое-то времяПотому что там есть таймаут. Надо сделать скрипт устойчивым к этому и обрабатывать событие разрыва соединения.
Хочется взять всё и бросить. Я тот анон, что дошёл до студентов и понял, что ничего не понимает. Я вообще в прострации полной, как начать делать, как делать первый шаг? С чего начинать? Не понимаю
>>678872Оп, пока ты тут, ты мне сегодня ответишь или попозже? А то я в ожидании.
>>678978Напиши что-нибудь интересное для себя, без MySQL. Я начал учить PHP еще в эпоху PHP4. Тогда было популярно в небольших проектах использовать текстовые файлы вместо БД. Сейчас это совсем просто, file_get_contents, file_put_contents.
>>678978Не бросай. Разбей задачу на под задачи. Сверстай шаблоны страниц, потом сделай так что бы у тебя просто выводило таблицу с списком по запросу. Потом сделаешь вставку данных с формы.
>>678981Да у меня нет проблемы с mysql особо, у меня главное непонимание - что программа состоит из многих файлов, какие-то .php , какие-то .html и каким-то образом они должны взаимодействовать и вообще. И само условие задачи написано так, что видимо люди, дошедшие до туда уже шарят и в терминах и понимают, я же в полном ступоре.
>>678983Короче, смотри сюда.HTML - это тупо текст с вкраплениями тегов. PHP позволяет интерактивно генерировать теги и текст.PHP - язык программирования, HTML - не язык программирования, а язык разметки текста.PHP исполняется на сервере. А HTML-файлы статичны, они вообще не исполняются. Твои PHP файлы должны использовать HTML-шаблоны как съемную кожу, костюм, обличие для данных.
Ну и файлы подтягивают другие файлы не сами по себе. Для этого, например, используется конструкция include.Ты запросил один любой файл, и, если ему нужно, он подтянет другие файлы. Те, которые ты сам запрограммировал. Можно написать программу хоть в одном файле, хоть вперемешку с HTML.
>>678986в теории я это понимаю (я сделал все задачи ОПовские на html+css в январе ещё, но на практике я в каком-то параличе. со стороны смотрюсь как обиженка какая-то, наверное... Видно, проведу ночь в гуглении всего на свете спасибо, что пытаешься объяснить и подбодрить
>>678990Ну и успокойся.Я в свое время понял парадигму ООП только с третьего-четвертого раза, и то, после долгих-долгих размышлений. В целом между попытками постичь ООП прошел целый год, если не два.Быть тугодумом - норм.
>>678185 (OP)Есть ли для PHP что-то вроде JavaRush, для полных нубов?
>>678993учебник ОПа.
>>678993>JavaRushСпасибо за годноту.
>>678997так себе годнота, да и зачем она тебе? Тут php учим
>>678999>так себе годнотаПо описанию на сайте вроде вообще великолепно. Правда, пока не увидел, платно ли это.>зачем она тебеАндроид жи есть
>>679000там до 10-го уровня бесплатно, потом придётся платить(но не много). Я в своё время тоже прошёл до 10-го, но не срослось и теперь я с вами. Поначалу кажется годно, потом меня не покидало чувство, что автор помешанный и где-то наёбывает своим оптимизмом.
Пытаюсь понемногу что-то делать на фрилансе, часто сталкиваюсь с такими заданиями, как вроде написать парсер. Довольно часто, нужны парсеры которые будут сабмитить формы и запускаться например раз в сутки, спарсить информацию я могу, но по этим функциям у меня возникают вопросы:1. Как сабмитить форму, если её обрабатывает ajax функция, а параметра name у ней само собой нет.2. Как запускать парсер раз в сутки например? Наверняка в этом случае надо использовать cron, но я никак не могу найти описания как с ним работать. Он уже стоит на самом хостинге, как с ним можно взаимодействовать?Вопросы могут показаться нубскими, они такие и есть, но сейчас для меня это самые важные вещи, и я нигде не могу найти на них ответы, может кто может подсказать, если не сложно?
Почему в phpstorm у меня полностью игнорируется то, что между тегами <?php ?> пишу? Ни echo, ни стейтменты типа <?php if(...): > не работают. В чём может быть причина?
>>679018это в HTML файле, забыл добавить. Просто файлы php работают нормально, а когда в HTML код вставляю, как будто не работают
>>679019Потому что сервер не пропускает файлы html через интерпретатор PHP. Если хочешь чтобы код работал, подключай HTML файлы в PHP скрипте через include.
>>679021Хм... А как же ОПовская ссылка http://www.phpinfo.su/articles/practice/shablony_v_php.html, где вовсю вставляют php в html?
>>679023А ты посмотри как потом эти html файлы используют.Кстати, там еще есть специальный формат .phtml, это специально для HTML файлов которые используют PHP код, но я думаю лучше обойтись простым html и загружать его инклюдами.
http://ideone.com/qb5GV3 переделал задачку на айфон с использованием min/maxhttp://ideone.com/NW7mgR тоже переделал по рекомендациям любимых аноновhttp://ideone.com/eGEybu палиндромhttp://ideone.com/uWTryH изменение номера телефона в нужный форматhttp://ideone.com/dD5gD8 поиск и авто замена разных вариаций слова дуракhttp://ideone.com/sW56Qy вывод всех встречающихся емейлов в текстеhttp://ideone.com/ze39mQ Grammar Nazi поиск ошибок в текстеhttp://ideone.com/mamPIM авто замена ошибок найденных в текстеhttp://ideone.com/ap17y2 поиск "неумышленных" опечатокпроверьте, пожалуйста
>>679025хм, спасибо. Сейчас пойду читать в гугл про include.
>>678132>>678142ОП, спасибо, читаю кинутые тобой доки, в который раз понимая свое неумение гуглить и важность сначала посмотреть на сайте авторов апача/пыха, а не на васянских.Только я не совсем понимаю:1) Есть ли какая-нибудь разница между<VirtualHost _default_:80> и <VirtualHost :80>Результат работы какой-то одинаковый у обеих.2) Если :80 или _default_:80 указаны НЕ самым первым виртуальным хостом, но по умолчанию (например, по 127.0.0.1 или белому ip) все равно откроется тот виртуальный хост, что прописан первым, а не этот дефолтный. Какой тогда смысл? Перезагружал, три раза.3) Я хотел попробовать разместить разные сайты на разных портах (один виртуал хост на 80ом, другой на 81ом), но соснул хуйца. Это из-за того, что 81ый порт не слушается апачем или потому, что он закрыт? Как исправить? Можно ли наоборот вообще запретить апачу и мускулу работать с внешней сетью, будучи доступными только для локалки (типа безопасность тестового сервера)?
>>679025если ты ещё тут, анон, то ответь пожалуйста. Я правильно понимаю, что я создаю php файл, и в него путём include включаю html файл и пропускаю(запускаю, инициирую) работу именно .php файла и он в свою очередь показывает и хтмл через этот инклюд? а в самом html файле в тегах <? php> то, что я пропишу будет работать как раз-таки из-за того, что я инициирую файл .php?
>>679044>наоборот вообще запретитьЭто как для отдельного vhost'а, так и для всего сервера глобально.И еще вот: я тестирую и не понимаю, а разница между ServerName и ServerAlias есть какая-нибудь? Попробовал вообще убрать нэйм и вместо него сделать два алиаса - нихуя не поменялось, все как работало, так и работает.
>>679046Да, ты все правильно понял
>>679046Да, так и работает. Все что указано в include будет так же проходить через PHP интерпретатор как и обычные .php файлы, когда в случае с .html файлами сервер просто отдает клиенту обычную страницу с разметкой.
>>679049>>679050Cпасибо.вот оно как, оказывается. И так всегда делается с html страницами, что содержат php скрипты?
>>679053Во всех нормальных шаблонизаторах используется свой синтаксис для создания логики отображения, поэтому если использовать какой-нибудь Twig, то в таком случае html страницы совсем не будут содержать php скриптов.
>>678978Задавай вопросы, что непонятно. >>678872В документации по этим продуктам наверно. Возьми и попробуй найти объяснение каждой опции в твоем конфиге для начала.> нужна задача по сокетам и написанию демонаА ты асинхронщину освоил или начнем с простых вещей? Давай наверно с простых. Речь ведь о berkley sockets, а не вебсокетах? Все равно надо для начала изучить обычные.Напиши скачиватель - программу, которая получает URL на вход и скачивает содержимое URL в этот файл по протоколу HTTP. Для облегчения задачи давай пока не будем разбирать HTTP ответ, а просто сохраним все как есть, с заголовками и возможной кодировкой. Пример использования: php download.php 'http://example.com/' > response.txt[1s] Resolving example.com ... 1.2.3.4[0.2s] Connect to 1.2.3.4:80 [3s] Send request [12s] Downloading data Вывод идет в поток ошибок, чтобы не замусоривать сам файл. Не забудь проверяь успешность записи в файл, чтобы при переполнении диска например вывелась ошибка.Не забудь обрабатывать все возможные ошибки соединения, передачи и записи данных с помощью исключений. Далее, насчет демона. Тут конечно сложнее, плохо представляю где может быть польза от синхронного демона. Ну давай напишем что ли свой мемкеш. Изучи протокол мемкеша и напиши синхронный (то есть обрабатывающий один запрос за раз) демон, который реализует этот протокол. Необходимо поддерживать такие команды: SETADDREPLACEAPPENDPREPENDGETGETSSTAT (минимальный набор данных)FLUSH_ALLVERSIONПроверь что твой демон работает с каким-ниьудь клиентом мемкеша. Поддержка UDP протокола бьудет плюсом. Грамотно оформи свой код, разбив его на классы.Далее можно изучать написание АПИ и протоколов (сериализуемый бинарно протокол, поверх JSON-RPC, поверх HTTP) а также асинхронщину.
>>679044> Есть ли какая-нибудь разница между> <VirtualHost _default_:80> и <VirtualHost :80>> The string _default_, which is an alias for *Написано что default то же самое что звездочка и значит "любой IP кроме определенных в других блоках". Это для фильтрации по IP адресам, например ты можешь сделать один сайт на 127.0.0.1, другой на 127.0.0.2 и тд. Не рекомендую так делать, только запутаешься.> Если :80 или _default_:80 указаны НЕ самым первым виртуальным хостом, но по умолчанию (например, по 127.0.0.1 или белому ip) все равно откроется тот виртуальный хост, что прописан первым, Это фильтрация по IP (на которых слушается порт) а не по именам. Имена задаются директивой ServerName и ServerAlias> Это из-за того, что 81ый порт не слушается апачем или потому, что он закрыт? Как исправить?Надо указать его еще и в Listen> Можно ли наоборот вообще запретить апачу и мускулу работать с внешней сетью, будучи доступными только для локалки (типа безопасность тестового сервера)?Надо слушать порт только на лупбек-интерфейе 127.0.0.1. http://httpd.apache.org/docs/current/bind.html> мускулуЭто надо смотреть my.cnf, там есть аналогичное правило.
>>679047> https://httpd.apache.org/docs/current/vhosts/name-based.html#algТут вроде не написано что есть разница. Тут написано что алиас может содержать зведочку https://httpd.apache.org/docs/current/mod/core.html#serveraliashttps://httpd.apache.org/docs/current/mod/core.html#servernameВот почитай еще это и сам попробуй найти отличия.
>>679069Спасибо, няша! Вроде бы более-менее разобрался, только теперь я не совсем понимаю, >Надо слушать порт только на лупбек-интерфейе 127.0.0.1.а по ссылке так вообще какой-то ужас: 192.0.2.1Это что, это как вообще? Ну, я понимаю, слушать разные порты локалхоста, например 80 и 8000, но как апач может слушать какой-то посторонний для него совершенно ip-адрес?И да, Listen - это же глобальное правило, а если я хочу, чтобы один вхост был доступен из локалки и из сети, а другой только из локалки, например?>>679071И за это спасибо, сейчас буду курить.
>>678872Пасты в помощь- Архитектура серверов https://gist.github.com/codedokode/ffd520440a970c07c1c6- куски диалога про сокеты https://gist.github.com/codedokode/21a432321fe7bc435dabhttp://pastebin.ru/dnO7PZfqhttp://pastebin.ru/KO4E1mB4
>>679077> а если я хочу, чтобы один вхост был доступен из локалкиТогда в виртуалхост пропиши IP локального интерфйеса. >>679077В компьютере несколько сетевых интерфейсов. Они идентифицируютcя по IP, набери ipconfig в виндоуз и увидишь список.Как минимум там будет интерфейс сетевой карты с реальным IP, внутренний лупбек интерфейс с адресами 127.x.x.x. Если у тебя есть например вайфай, у карточки тоже будет свой интерфейс со своим IP. Соотетственно ты указываешь на каком интерфейсе слушать порт (или на всех).http://xgu.ru/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%BE%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81http://citforum.ru/operating_systems/linux/HOWTO/mini/IP-Subnetworking/x51.shtmlhttp://pastebin.ru/KO4E1mB4https://ru.wikipedia.org/wiki/Loopback#.D0.92.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B9_.D1.81.D0.B5.D1.82.D0.B5.D0.B2.D0.BE.D0.B9_.D0.B8.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81Как правило если у компьютера боьше одной сетевой карты, то они имеют разные IP и подключены к разным сетям. Правила маршрутизации на компьютере определяют как выбирается интерфейс для отправки пакетов и разрешена ли пересылка пактов с одной сети в другую (в этом случае узел является маршрутизатором). При маршрутизации узел также может осуществлять трансляцию адресов - NAT. Например, роутер одним интерфейсом находится в сети провайдера, а другим -в домашней сети и натит пакеты из домашней сети в провайдерскую (а тот натит их из своей сети в интернет).
>>679080>Тогда в виртуалхост пропиши IP локального интерфйеса.Куда именно? В сам <>? Если да, то смешение нэйм и ип-бэйсед вызывает какие-то тупняки>у карточки тоже будет свой интерфейс со своим IP. Это которые 192.168.х.х - локальная сеть?По поводу ServerName и ServerAlias, я так понял, второй разрешает юзать ? и *, а первый определяет главное имя, например, для сертификатов HTTPS.
И еще, быть может не по теме, но что за мэйлинг листы? Ирка - понятно, сервер, сообщения и т. д. А как может быть организован форум и поддержка (хотя бы на пальцах) посредством рассылки писем, я не представляю.
>>679086Это древняя форма форумов, работающая поверх электронной почты. https://www.debian.org/MailingLists/index.ru.htmlПодписываешься (отправкой письма) и начинаешь получать все письма из этого списка, можешь отвечать на них (если конечно сервер это позволяет).Также есть похожая система под названием newsgroups. Вот например группы новостей php http://news.php.net/php.general
>>679086Ну то есть основная функция списка рассылки - это пересылка входящих писем всем участинкам. То есть там обычно есть такие функции: - подписка (присылаешь письмо с определенным текстом и тебя добавляют в список)- отписка (аналогично)- пересылка (любой участник направляет письмо в список рассылки и оно пересылается всем)Это как видишь довольно простые алгоритмы, потому списки рассылки были еще до интернет-сайтов. Также почта имеет то преимущество что она накапливается даже если пользователь не в сети, и с ней можно работать оффлайн. Более продвинутые программы делали также дайджесты - вместо пересылки писем всех подряд как-то их группировали и рассылали например дайджест за сутки.Ну и смежная технология - это newsgroups, там есть сервер, хранящий сообщения, клиент может подсоединяться и скачивать их или писать новые. Это все еще было до сайтов, вы, молодежь, наверно и не слышали про это. А ведь интернет существует с 80-х годов (а первый браузер вышел в 1990). Была почта (причем в те времена были еще и так называемые релеи - для передачи почты в закрытые сети или для передачи через нестабильные каналы), был FTP, незащищенный telnet, и куча уже умерших протоколов.
>>679086Ну и вообще раньше у многих людей не было постоянного доступа в сеть. Например, были модемы, которые передавали данные при помощи звука по телефонной сети. Предельная скорость была 56 кбит/с на заре эпохи и это в иделальных условиях, то есть чуть реже чем никогда. У первых модемов вообще было что-то в районе 300 бит/с. Cоединение могло рваться. Сам интернет был дорогущий, с оплатой поминутно, платить надо было и за телефон и провайдеру. Ночью было дешевле.Ну наконец были еще какие-то ограниченные виды интернета, когда тебе давали не прямое соединение с сетью, а доступ в командную строку на линукс-сервере с соединением к интернету (в учебных заведениях например). Какие форумы? Только почта и группы новостей и работали в таких условиях. Соединился, скачал письма, отсоединился, читаешь, пишешь ехидные комментарии (я впрочем никогда модемом не пользовался,хотя один из них есть в моем ноутбуке).
Интересует такой вопрос.1. Делаю задачку про студентов, еще много чего надо сделать, пока что вожусь с бд, а потом хочу подключить куки, htmlspecials и прочее.Так вот, имеется страничка регистрации, там пользователь вводит данные, если все ок, то должна выполнится функция с сохранением в бд и переадресация на страницу с поздравлениями.Вот только в бд почему-то не сохраняет, а только переадресовывает. Почему так? Никаких ошибок не выдает, ничего не пишет, почему, понять не могу.Класс бд: https://github.com/luptidu/students.com/blob/master/components/Database.phpТа самая функция которая ничего не записывает, а должна:https://github.com/luptidu/students.com/blob/master/models/Student.php#L32Это главный вопрос.И еще вопросы в данный момент менее важные:2. Когда использоваться include, а когда include_once, как работает я знаю, но не могу понять в каких ситуациях первая функция может вызвать проблемы? То же самое и c require и require_once. Да и зачем вообще нужна require, если везде можно юзать инклюд? По идее3. Можно ли в свойствах класс модели создать переменную дб и уже юзать ее в функциях и не писать в каждой функции одну и ту же строчку кода? Хотя что-то мне подсказывает, что типо так не делают, потому что даже при использовании функции где не используется бд все равно придется слать запрос к бд, что уменьшает скорость обработки4. Я немного не понимаю суть ООП в плане, почему не сделать все функции статическими и выполнять их без создания обьекта. Можешь привести примеры где нужно будет обязательно создавать обьект и без него никак? Желательно где это обязательно в этой задаче5. Зачем нужно постоянно импортировать бд или создавать вручную если хочешь потестить чей-то сайт? Почему бы не написать просто код который проверяет наличие бд и таблиц и если они отсутствуют, то просто создает их.6. Также почему когда люди выкладывают свой сайт на тест, то выкладывают его без фреймворка и его тоже нужно устанавливать руками? Ведь можно просто скинуть папочку с фреймворком и не париться.
>>679104upd:Разобрался, оказывается забыл скобочку в sql запросе поставить. Все заработало.Но новая проблема и раз уж я здесь, то спрошу.А все остальное заработало, раз уж я здесь, то спрошу.Получил вот такое, почему кириллица так изуродовалась? При создании таблицы указал кодировку utf8_general_ci.Что еще нужно было сделать?
Исправления по списку студентовhttps://github.com/foobar1643/student-list> function runApp($app) {>Тайп хинт бы сюда.Какой тайпхинт? В эту функцию я передаю несколько контроллеров, чтобы удобнее было ловить исключение. Я могу конечно сделать для этих контроллеров интерфейс, а потом сделать тайпхинт на этот интерфейс, но не будет ли это усложнением?>> } catch(PDOException $e) {> } catch(FatalException $e) {>Хотелось бы комментарий чем исключение этого типа отличается от других>Почему тут только эти 2 исключения ловятся? Как ты составил список этих исключений, по каким принципам? Что делать с исключениями других классов?Чтобы не копипастить catch блоки с одинаковым содержимым я сделал для двух исключений один интерфейс FatalException и ловлю его. Других исключений, кроме PDOException там быть не может, но если вдруг они будут, можно будет добавить еще один блок catch. Если можно это как-нибудь по другому сделать, подскажи пожалуйста.>По идее ссылки надо экранировать через htmlspecialchars, в частности символ & в нихВот это тоже не совсем понял, но все равно сделал. Это из-за того что символ & может сломать разметку?
ОП, с тобой все хорошо? Синяков под глазами нету? Как ты справляешься отвечать всем? Искренне, дай б-г тебе здоровья
>>679059ОП, я не понял как скачивать содержимое страницы, file_get_contents? Я имел ввиду запуск сокет сервера (для его работы же нужен демон?) и запуск сокет клиента на ява скрипте. А ты о чем? Про мемкеш тоже не понял, что за команды. Ты наверное переоценил мои возможности, или же мы друг друга не поняли.
На какой версии лучше учиться? 5.6 или новая 7? Есть совсем уж принципиальная разница?
>>679189Лучше 7Принципиальной нету, в 7 есть нововведения, а в 5 есть устаревшие какахи.
Посоны, чому лыжи не едут?SELECT `visits`.timeIn, `visits`.timeOut, `visits`.date, CONCAT_WS(' ',`visits`.date, `visits`.timeIn) AS datetimeIn, CONCAT_WS(' ',`visits`.date, `visits`.timeOut) AS datetimeOut, TIMEDIFF(datetimeIn, datetimeOut) AS DiffDateFROM `visits`WHERE `territory` = '1' AND `date` = '2016-03-07'Ошибка Unknown column 'datetimeIn' in 'field list'Неужели так нельзя?
>>679269Но тот же 7 еще не на всех хостингах есть.
Sup, kotanie! ЕОР, где Р - работа. Нужно перенести сайт с Ворпресса олдовой версии на модекс, вопрос кто с ним работал, сталкивался, лучше ли его юзать или какую современную версию ВП взамен, кто что скажет, может гайды, рекомендации?
>>679289С каждой версией так. Хостеры пиздец слоупоки.
>>679319Да тут дело в том, что все васянские движки сейчас-то бросают кучи заглушаемых DEPRECATED и STRICT, а на 7 версии вообще работать не будут.
Где можно найти хорошее руководство по woocommerce как для разработчика?
Аноны, в примере задачи на ООП есть функции padRight/padLeft etc. Только вот ни в мануале о них ничего, ни в самой задаче. Есть только str_pad, которая работает по другому принципу. В чём подвох?
Складывается такое впечатление, что для того, чтобы заниматься фрилансом, помимо ксс, хтмл, пхп, яваскрипта, джейквери и вордпресс необходимо ещё уметь рисовать дизайн сайта. Но, рисование дизайна сайта это уже не каждому подсилу, да, можно выучить фотошоп и почитать про сочетание цветов, но если нет таланта к такому, то этому сложно научиться. У меня вообще не получается рисовать дизайн сайта, и думаю так будет, сколько бы я не пробовал это делать, потому что просто нет склонности к рисованию и ко всему такому, как быть в этом случае?
>>679425Больше практики, меньше мыслей.
>>679425Хз, как мне кажется, тебе должны предоставить макет сайта. Т.е., сначала должен поработать дизайнер в фотошопе, нарисовать всю хуйню, а тебе прийти файл psd, с которым у тебя уже будет половая жизнь.
>>679425А если нет макета, то, думаю, надо научиться натягивать шаблоны на wordpress.
Как сделать hello world в slim? Установил его композером в папку проекта, делаю как в мануале http://docs.slimframework.com/start/get-started/#hello-world, а он ничего не находит.
https://github.com/MindiMakridi/filehosting добавил комментарии и загрузку перетаскиванием. Не пойму, куда у меня внешний ключ пропал в дампе базы?
>>679425Я просто ползаю по другим сайтам, беру от туда фишечки, подбираю 2-3 основных цвета и от этого прыгаю дальше.
>>679426Это правильно, но у меня не получается рисовать дизайны, да и не хочу я это делать если честно, я хочу заниматься именно веб-программированием, ну и вёрсткой ещё если это нужно, и это более менее получается, но рисование макетов у меня просто не получается.
>>679430Это я уже делал, но когда в задании стоит создать сайт на вордпресс, необходим хороший дизайн
>>679461Что-то ты лишнего там наподключал. Если ты установливал фреймворк через композер, то второй строчки достаточно. Удаляй 3ю и 4ю строки.
>>679483Ну допустим вот так, тоже ничего.
>>679493А почему там $app = new \Slim\App, а не $app = new \Slim\Slim() ?
>>679496Я еще один пример hello world'а нашел, там так было. А если с new \Slim\Slim() такая же проблема.
>>679493Ебать ШГ
>>679498Странно, автозагрузчик не работает почему-то. Попробуй require "/vendor.autoload.php" или require __DIR__."/vendor/autoload.php", хотя вряд ли дело в этом, раз 2я строчка подключается без ошибок
>>679508Немного прояснилось. Там документация на слим2, у меня слим 3.2. Хэлло ворлд для новой версии тут http://www.slimframework.com/docs/. И он опять же не работает, лол. А вообще с какой версией лучше работать? Начал файлообменник из шапки.
>>679515Так ты заходи по адресу /hello/name у тебя же для него только маршрут в коде определен.
>>679519Не получается. 404
>>679522А ты .htaccess файл создавал в корневой директории?
В пхп вообще есть хоть что-то, что помогает работать с хайлоадом и нагруженными сетями?
>>679524Нет. Нужно настраивать его для слима?
>>679526Да. Разве в документации этого нет? http://pastebin.com/0f23wnvq попробуй с таким файлом.
Апач перегрузил, бочку сделал - не получилось.
>>679536Не надо писать index.php просто /file-sharing/hello/anon
>>679539Тоже самое, 404.
>>679541А у тебя корневая директория сайта как называется?
>>679543Если у тебя file-sharing это корневая директория, то зачем ты пишешь её в коде роутера?
>>679543Вообщем попробую 2.x версию поставить, посмотрел у других анонов файлообменники, там 2.x версии. Там и информации на русском больше по ней в рунете.
>>679555Подожди, ответь на вопросы выше. Зачем в роутере $app->get file-sharing? Убери его оттуда и проверь работоспособность.
>>679558Убирал, результат такой же.
Что это за нахуй?Зачем оно мои хэлоуворлды закомментило?
>>679595Картинка отвалилась.
>>679595пых не отработал, очевидно же
>>679599Блин, затупил, да.
>>679596разве <?php не должна идти первой строкой в файле? мимикрок
>>679608Не обязательно.
Поставил slim 2.6 - все тоже самое.
>>679525>php>хайлоадСначала докупаешь новые сервера, а потом пишешь свой интерпретатор в C++, лел.
>>679629Я уже говорил тебе, что не нужно писать index.php?
Не могу я в спецолимпиады. Всё что смог наговнокодить.http://ideone.com/WFlK6JБанкомат все осилили или я тут один такой туповатый?
>>679650Ну писал я так >>679539, и что? >>679541
>>679729Ну кидай скриншот, откуда мне знать. Каждый раз когда я говорю тебе пофиксить что-то, ты трогаешь в коде что-нибудь еще.
>>679357Бамп
>>679629Послушай этого >>679629 анона.Алсо, если у тебя file-sharing корневая директория, то путь должен быть просто localhost:63342/hello/anonЯ вижу, ты для веб-сервера используешь phpstorm. Возможно, проблема с ним (например я не думаю, что он понимает .htaccess)
>>679731
>>679725Есть еще такой вариант http://ideone.com/9sAV08 но он на некоторых вариантах впадает в ступор. Хотя в массиве $minBanknotes путь для решения есть.К примеру если задать$amount = 66;$banknotes = array ( 2 => 3, 5 => 1, 20 => 4, 50 => 1);Если начать поиск ответа с 20 отработает правильно, но как это рассчитать, непонятно
>>678446> не число, а комбинацию, такого вида: > F(100) = { 2 3 0 0 }Поскольку F определяется рекуррентно то уже при числах порядка 50000 уходит ОООЧЕНЬ много времени.В Задаче о размене конкретно прописано http://goo.gl/uOz8AQКаждый предмет может быть выбран любое число раз. Задача выбрать количество предметов каждого типа так, чтобы минимизировать количество взятых предметов.Так что этот алгоритм для решения задачи про банкомат с ограничением банкнот не подходит.
>>679737У меня появилась теория, что мой .htaccess просто не работает. Ведь если я добавлю в него строку This is garbage line будет ошибка 500, так? Ничего не происходит при любых рандомных строках в нем.
>>679822*503
>>679059ОП, я написал.https://ide.c9.io/fxsloker/testРешил сделать в разрекламированной cloude ide в прошлом треде. Вроде права паблик, не знаю откроется ли у тебя. Мне понравилось, работает быстро, да и ты можешь легко протестить мой скрипт, найти баги. Аноны, проверьте тоже, пока ОПа нет, можете ли вы просматривать мой проект?
Jjjjj
>>679868>sign in>анонимная имиджбордаСлышь))
Есть тут те, кто уже добился чего-то на фрилансе? Есть ту те, кому удаётся там хоть сколько-нибудь зарабатывать? Я всё никак не могу понять, как начать там работать, я вроде бы и выучил уже на среднем уровне ПХП, КСС, ДжейКвери и Вордпресс, но постоянно вижу какие-то подводные камни в заданиях, а в большинстве заданий вообще появляются непонятные мне слова, вроде различных продвинутых библиотек и т.д. Неужели всё так сложно? Если это так, то как фрилансом зарабатывает такое большое количество людей? Чисто из количества фрилансеров, я думал что человек со средним интеллектом и способностями к разработке, способен стать более менее нормальным фрилансером, со средним заработком по стране, но видимо я или ошибся или имею показатели интеллекта ниже среднего.
>>679993Залогинься с гитхаба. Тут все равно ОПу гитхаб потом показывают.
>>679059ОП, по поводу мемкеша. Я не совсем понимаю как я с терминала буду взаимодействовать с пхп скриптом. А так я погуглил, даже попользовался мемкешом, интересная вещь. И вообще с чего начать?
>>680024Вернее не так сказал, как я с терминала буду подавать сигналы демону? Я умею пока только в такие ./daemon start|stop etc, использующие стандартный набор функций в библиотеки в линуксе. Мне надо что-то свое на баше писать?
Господа, такой вопрос, точнее, два:1) Как в регекспе вставить "перенос строки", "табуляция" и подобные символы как часть паттерна?2) Если я как-то участвую в чужих проектах на гитхабе, предлагаю патчи, например, создаю тикеты - это все где-то отмечается в статистике и можно будет потом посмотреть или как-то вообще в истории остается? Ну, например, для работодателя. Да и вообще приятно знать, что вот, приложил руку.
>>680034У тебя в профиле вся история твоих контрибов и собственных проектов отображается. Даже статистику ведет по дням.
Есть код на php, что с ним делать?inb4: подтеретьсямимокрок
>>679165Не справляюсь же, потому и очередь. Спасибо тем анонам кто помогает новичкам в очередной раз решить задачу про айфон. >>679274Видимо в TIMEDIFF там нельзя использовать алиасы. Алсо, я не понимаю зачем ты дату и время разбил отдельно (и нарушил принципы нормализации). Без этого было бы проще.>>679357Их надо написать самому. Если ты дошел до последнйе главы это не должно быть проблемой.str_pad не умеет правильно считать символы, она считает байты, потому не годится.>>679425Можно купить тему причем уже с версткой - гугли template monster. Можно даже найти бесплатную. Но их скорее всего придется доделывать, они обычно плохие.Также, можно "скопировать" дизайн с других сайтов. Если не копировать один в один, это не будет нарушением авторского права. Можно заказать у знакомого дизайнера (а он может тебе подкидвыать заказы на программирование). И часто дизайн уже есть. >>679461Зачем ты пишешь require Slim? Во-первых такой папки рядом с index.php там все равно нет (ты бы хоть путь проверил), во вторых композер берет автозагрузку на себя и вручную инклдить слим не надо. Алсо почитай мой урок на гитхабе про автозагрузку и PSR-4 и выучи наизусть. я вижу у тебя тут пробелы. Также можешь найти файл vendor/autoload.php и изучить его внимательно. Пусть это будет тебе домашним заданием, разобраться как он работает.>>679475Тогда купи готовый.>>679493В первом случае запускаеся Слим и выводит 404 так как нет обработчика для главной.Во втором случае надо смотреть что у тебя за веб-срвер и как он настроен. По надписи "phpstorm" я этого понять не могу, узнай какой веб сервер исплоьзуется и как он настроен (в документации на пхпшторм).
>>679525Смотря насколько у тебя хайлоад и какие задачи.>>679555Не советую. Бери лучше новую. Плюс это будет хорошая практика по освоению незнакомого фреймворка. Для начала разберись как работает сервер в phpstorm.>>679822Да, разберись что там за сервер используется.>>679868Ты дал не совсем тот УРЛ - ты дал ссылку на ИДЕ, где требуется логин, а надо дать ссылку вроде https://c9.io/codedokode/foobar1643-student(по ней можно посмотреть описание проекта и файлы но нельзя зайти на сайт)либо, если у тебя сайт, то ссылку вида https://foobar1643-student-codedokode.c9users.io/(она появляется в консоли после того как ты выберешь run with - apache )Если ты даешь вторую ссылку то сайт будет доступен только пока у тебя открыта ИДЕ.Так что твоя ссылка могла бы выглядеть как https://test-fxsloker.c9users.io/Но если у тебя скрипт для командной строки то проще наверно давать ссылку на гитхаб - склонировать с гитхаба на cloud9 это дело одной минуты. > "GET ".$this->host." Там указывается не хост, а только путь - почитай про HTTP. Полный URL указывается только если это прокси.> User-Agent: Mozilla/5.0 Что ж ты скромничаешь, вписал бы имя своего скрипта> or die("Can't open file");В ООП надо использовать исключенияfwrite и fclose тоже могут выдавать ошибки> socket_write($socket, $headers, strlen($headers)Ты думаешь что одного пакета достаточно для отправки запроса - это не обязательно так. socket_write не гарантирует что он отправит все данные за раз.> while($read = socket_read($socket, 1024)) {А что если вернется строка "0"?> catch(Exception $er) {> print(sprintf("Eror gettТы не понимаешь идею исключенийНу и я думаю, лучше сделать запись потоково. Что если в ответ дадут 100 Мб файл? Лучше не писать его в память, а потоково записывать в файл. И я тут подумал, в целях лучшего изучения HTTP давай сделаем вторую версию скачивателя. Пусть она сохраняет в файл только тело ответа. Заголовки пусть выводит в поток ошибок. Она должна поддерживать передачу gzip файлов и transfer-encoding: chunked. Насчет задачи на мемкеш, можно ее упростить, подумай сам, например можно часть команд убрать, хотя мне кажется там не очень и сложно. По поводу вебсокетов. Тут путь изучения такой: устройство интернета, IP, DNS -> TCP/IP, сокеты, порты -> HTTP -> вебсокеты -> { протоколы поверх веб-сокетов вроде WAMP, также почитать про JSON-RPC, асинхронное программирование на PHP } Ты сейчас на шаге "TCP/IP и сокеты".
>>679993А это? http://c9.io/fxsloker/test открывается? Там правда все равно ничего интереного нет.Лучше бы анон конечно кд на гитхаб выложил (кстати с c9 можно пушить и пуллить с гитхаба). >>679997Либо учись либо ищи работу джуниором и набирай опыт.>>680024Чтобы тестировать приложение тебе нужен TCP клиент которым можно соединиться с указанным портом и пересылать данные. Под линуксом: ставь netcat и socat (почитав мануал ты удивишься что она умеет)Эти же программу умеют быть TCP сервером и позволяют тестировать клиенты или даже руками отдать страничку в браузер.Под виндоус такие варианты:telnet example.com 80 - хотя телнет и не является чистым TCP клиетом. но если не передавать спецсимволы то протокол телнета это фактически передача данных как есть. Попроьуй сделать например telnet ya.ru 80 < request.txtСкачать putty/kitty - это SSH клиент но если выбрать режим raw то он просто передает данные как есть. Если тебе нужно тестировать SSL/HTTPS (передау данных с шифрованием), скачай openssl и исплоьзуй командуopenssl s_client -connect ya.ru 443 < request.txt
>>680027О! Ты идешь прямо на грабли и хочешь придумать очередной велосипед.Обвязку которая "демонизирует" твой процесс писать не надо. Пиши обычную программу которая запускается, слушает порт и обрабатывает запросы. А чтобы сделать из нее полноценного демона, используй программу-супервизор. Почитай про: xinetd - самый простой демонизаторsupervisordrunitsystemd (да он для этого годится)Также сделай обзор программ упомянутых тут https://en.wikipedia.org/wiki/Process_supervisionНапиши какая лучше подходит для твоих целей и почему. Также, неплохо бы научиться реагировать на сигналы вроде SIGTERM.Я видел случаи когда люди пытались на PHP написать демона целиком - кривой код с кучей ошибок. Не стоит идти по этому пути. также прочитай тут ответ http://stackoverflow.com/questions/3095566/linux-daemonize/3095624#3095624https://www.digitalocean.com/community/tutorials/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-1-practical-exampleshttps://www.digitalocean.com/community/tutorials/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-2-reference
>>680024Средства взаимодействия программ называются IPChttps://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5Вот основные: - сигналы unix- unix domain сокеты- интернет (IP) сокеты- пайпы- named пайпыОбычно исплоьзуют либо сигналы либо упрвление демоном через unix сокет.
>>6800341) \n или \t http://php.net/manual/ru/regexp.reference.escape.phpТакже \s включает оба этих символа.2) в профиле на гитхабе это есть, например https://github.com/codedokode/
>>679106SET NAMES наверно. Ты при соединении с mysql не указываешь в какой кодировке передаешь данные. > При создании таблицы указал кодировку utf8_general_ci.Это вкакой кодировке они внутри таблицы хранятся. А кодировка соединения это другое дело.
>>680062>SET NAMES $mysqli->set_charset() жи, SET NAMES вручную - DEPRECATED.
>>680091В посте не было написано про mysqli
Хорошее чтение (англ) про слишком "толстые" страницы http://idlewords.com/talks/website_obesity.htm
>>680055ОП, даю ссылку:http://stackoverflow.com/questions/7712256/php-socket-read-only-gets-the-first-byte-of-the-streamТам написано в первом ответе:I would strongly recommend that you don't use the ancient socket_ functions, but instead the fsockopen and fread instead.Почему их не стоит использовать, или может он ошибается?
Подскажите мне, пожалуйста.Есть один игровой сервер, запускается и управляется через собственную консоль.Можно ли с помощью php вбивать в неё команды?Если нет, то на каком языке это можно это реализовать?Алсо еще знаю C# немного.
>>680139Под виндой работает?
>>680143да
>>680146Ну для таких целей в любом случае лучше взять шарп или плюсы. PHP все таки для других целей предназначен.
Голосует несколько людей, победить может только один в день, какую сделать структуру бд? Сделать таблицу с датой и победителем, засунуть в нее человека и сверять по дате голосования, есть ли победитель в течении суток?
>>680177Может сделать отдельную таблицу побед вида : id, date, user_id?
>>680178А как проверять? вот определился победитель в этот день, потом кто-то другой голосует и таскать каждый раз данные из таблицы, проверять временные срок и есть ли в них победители?
>>680200>А как проверять?Что именно? Есть-ли сегодня победитель? Легко SELECT*FROM winners WHERE data = Сегодняшнее число
>>680202спс
привет анончик, сейчас закончу книгу Кевина Янка по пхп и ворвусь сюда писать файлообменничек. Пока реквестирую ваше резюме. Обезличьте плз, мне интересны вот какие моменты:1) Курсы и вебинары всякие вы записываете в резюме?2) Книги?3) Как оформляли портфолио проектов своих?4) Смотрят ли на качество кода этих проектов?А резюме в целом нужно для понимания как программист себя представляет на рынке.Еще дополню этот свой пост предыдущего треда (ну он в шапке /pr висел я в нем и отписывал, кто знал что вечеринка уехала) Про конструкцию try-catch. В книге, что я купил по мусклю и пхп (Кевин Янк - гуглится легко) эти конструкции повсеместно. Так ли уместно их использование? Я к тому, что ошибка так и так вывалится, а в книге аргумент, мол, ошибку нужноперехватывать.Хотя в статьях про pdo этот способ описывают как "прилежно-хомячковый" и так лучше не делать. Спасибо, анончикмимо-сеошник/верстальщик-переходящий-в-кодеры
>>680296Почитай пока мой урок про исключения https://gist.github.com/codedokode/65d43ca5ac95c762bc1aИ паста### Исключения Как надо обрабатывать исключения: - записать информацию в лог- показать пользователю заглушку - на заглушке выставить HTTP 503 код ответа для роботов- на компьютере разработчика (при display_errors = 1) показать подробности и стектрейсЧто будет если использовать catch + echo: - в лог ничего не фиксируется, ты не узнаешь об ошибках- пользователь видит непонятную белиберду на английском- отдается код 200Как будет если просто не ловить исключение: - информация пишется в лог (ок)- на компьютере разработчика выводятся подробности (ок)- пользователь видит белую страницу (не ок)- отдается код 200 (не ок)Почитай также урок https://gist.github.com/codedokode/65d43ca5ac95c762bc1a### Исключения 2Давай начнем с теории. Знаешь ли ты зачем придуманы исключения? Читал ли урок https://gist.github.com/codedokode/65d43ca5ac95c762bc1aЕсли нет, прочитай. До исключений мы должны были после каждой функции писать иф и проверять ее результат, не было ли ошибки. Исключения позволили отказаться от этого. Так как исключение автоматически выходит из вложенных вызовов функций наверх, нам достаточно одного-единственного обработчика исключений на самом верху: try {$app->run();} catch (..) {$app->showErrorPage();}Более того, мы можем и этого не делать, так как пхп сам ловит непойманные исключения, логгирует их, выводит пустую страницу в браузер и завершает скрипт.Ловить исключения где-то еще надо если у нас есть способ обработать их. Ну например мы можем ловить ошибку соединения с удаленным сервером чтобы сделать еще несколько попыток. Очевидно что в этом случае мы ловим не все подряд, а конкретное исключение, отвечающее за ошибку соединения с сервером.
>>679291Noone?
>>680301ну модх вполне гибкая система, на ней можно что угодно построить и без костылей, ну а вордпресс надо допиливать под нужны, если они чуть отходят от стандартного функционала или сразу искать тему с нужными тебе функциями.поэтому исходить здесь тебе следует только от того, с чем тебе удобнее будет работать
>>680055> Ты не понимаешь идею исключенийНу а что не так? Без try catch пишет непойманное исключение.> Ты думаешь что одного пакета достаточно для отправки запроса - это не обязательно так. socket_write не гарантирует что он отправит все данные за раз.Поправил.> Там указывается не хост, а только путь - почитай про HTTP. Полный URL указывается только если это прокси.Поправил.> Что ж ты скромничаешь, вписал бы имя своего скриптаОП, давай разъясняться понятнее, пожалуйста. Я не совсем понимаю.> fwrite и fclose тоже могут выдавать ошибкиПоправил.> Ну и я думаю, лучше сделать запись потоково. Что если в ответ дадут 100 Мб файл? Лучше не писать его в память, а потоково записывать в файл. Где почитать? Я правда сейчас еще погуглю и напишу что-нибудь.
>>680300ух, от половины учебника голова лопается, а тут еще сколько инфы, спасибо ОП, добра
>>680309https://c9.io/fxsloker/test
>>680314Анон. Помоги. Fatal error: Call to a member function fetch() on boolean in C:\OpenServer\domains\localhost\studList\models\Student.php on line 19http://ideone.com/P7CvSt
>>680333Не смотрите, что говнокод страшный, в дальнейшем запрос будет записываться в массив объекты типа student.
>>680333> studetsМожет быть в этом ошибка? Может students?
>>680333Тебе ж английским языком написано - вызываешь метод fetch() у переменной-буля, а не объекта.
>>680342таблица students - проверил
>>680343Как исправить ?
>>680346А у тебя написано studets в $db->query.
>>680347Вызывать метод fetch у объекта, который имеет метод fetch.
>>680356Я все таки считаю у него возвращается попросту FALSE из-за studets вместо students.
>>680358Очевидно, что так и есть.Просто пусть лучше сам в ошибку вчитается и поймет.
Вот практически аналогичный код, но там ошибки нет.http://ideone.com/8msxR4
Посоны. Не могу разобаться с задачей этой.Только не надо код кидать. Алгоритм помогите понять.Я правльно понимаю, что надо сперва введенную сумму разделить по модулю на самый крупный номинал, потом мельче мельче и т.д.?
>>680362этого. не можыд. быт
>>680368Нет, твой алгоритм — ленивый, и не будет работать в некоторых случаях правильно. Решений задачи по всему гуглу миллион, она довольно классическая.
>>680380> ленивыйОй, блядь, жадный. Хотя, доля правды там есть, потому что программисту «лень» пердолиться с графом вариантов выдачи купюр и так далее.
>>680333Если функция работы с базой возвращает false значит произошла какая-то ошибка. Ты не написал что исплоьзуешь? PDO - надо включить режим выброса исключений при ошибкеmysqli - надо проверять результат каждой операции на ошибку как описано в мануалеВ любом случае ты поступил неправильно. Ты не изучил мануал, не прочитал про обработку ошибок, а спешишь писать код. Не включил вывод информации об ошибках и ждешь что аноны телепатически залезут в твой компьютер и поймут причины.Если учебник по которому ты учился не упоминает это - выкинь его и найди что-нибудь получше. Это вещь которую надо изучать в первую очередь.
>>680333Алсо покажи потом код на проверку. Я сразу скажу что тут будут советы по каждой второй строчке, и совет за статические методы.
>>680333И за неправильные названия у классов тоже.
>>680387Я не хочу гуглить. Я хочу понять. Поясни плиз.
>>680397Включил отображение ошибок. Вылетело.Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'students.studets' doesn't exist' in C:\OpenServer\domains\localhost\studList\models\Student.php:15 Stack trace: #0 C:\OpenServer\domains\localhost\studList\models\Student.php(15): PDO->query('SELECT * FROM s...') #1 C:\OpenServer\domains\localhost\studList\controllers\StudentController.php(13): Student::getStudentList() #2 [internal function]: StudentController->actionList() #3 C:\OpenServer\domains\localhost\studList\components\Router.php(101): call_user_func_array(Array, Array) #4 C:\OpenServer\domains\localhost\studList\index.php(37): Router->run() #5 {main} thrown in C:\OpenServer\domains\localhost\studList\models\Student.php on line 15
>>680417Ну тебе же сказали у тебя ошибка в коде. Не studets, а students
>>680421Спасибо анон, ну я и ТУГОЙ. Как так вообще можно.
>>680421сотни нефтей тебе.
<?phperror_reporting(-1);function HomoCredit($creditSum, $payout){$totalPayout =0; for(;;){ $creditSum = ($creditSum1.04)+500; if ($creditSum<=5000) { $totalPayout = $totalPayout + $creditSum; break; } $totalPayout = $totalPayout + $payout; } return $totalPayout;}function Softbank($creditSum, $payout){$totalPayout =0; for(;;){ $creditSum = ($creditSum1.03)+1000; if ($creditSum<=5000) { $totalPayout = $totalPayout + $creditSum; break; } $totalPayout = $totalPayout + $payout; } return $totalPayout;}function StrawberryBank ($creditSum, $payout){$totalPayout =0; for(;;){ $creditSum = ($creditSum*1.02); if ($creditSum<=5000) { $totalPayout = $totalPayout + $creditSum + 7777; break; } $totalPayout = $totalPayout + $payout; } return $totalPayout;}$creditSum = 39999;$payout = 5000;$HomoCreditTotal = HomoCredit($creditSum, $payout);$SoftbankTotal = Softbank($creditSum, $payout);$StrawberryBankTotal = StrawberryBank($creditSum, $payout);echo "1 - {$HomoCreditTotal}";echo "2 - {$SoftbankTotal}";echo "3 - {$StrawberryBankTotal}";ideone и codepad пишут таймаут. нигде ошибки не вижу.(Это если что задача про айфон в кредит и функции)
>>680434http://pastebin.com/LnSxEifw
>>680435Ты ведь не решил задачу на айфон, ту которая с циклами?
>>680380> Решений задачи по всему гуглу миллионНо там один очень существенный момент - количество банкнот не ограниченно.В этом случае да, все просто, методом динамического программирования, хуяк-хуяк два цикла и ответ готов. Подогнать задачу про банкомат к задаче про рюкзак с ограничениями не получается. В задаче про рюкзак больше входных данных, учитывается цена и вес элемента.На пикче алгоритм задачи рюкзака без ограничений (с ограничением отличается одним условием) Кто может пояснить при каких i, j F = 0
>>680439Решил. Подозреваю, что проблема в бесконечном цикле. Но там я так же решал, при выплате выходил из цикла через break
>>680444>Но там я так же решал, при выплате выходил из цикла через breakЯ сомневаюсь что ОП такое одобрил бы.
>>680444Не понимаю. Если ты её решил, ты бы не написал такой код. У тебя там бесконечный цикл, в котором сумма кредита только увеличивается. Это не сработало бы в прошлой задаче, не сработает и здесь. К тому же если бы ты её решил, в этой задаче нужно просто подставить код из предыдущей в тело функции.
>>678185 (OP)А насколько опасно для базы данных давать пользователю возможность форматировать текст, который он вводит в форму с помощью чистого html?
>>680449у меня не осталось кода от той задачи,я не сохраняю его. Сейчас поищу ошибку, спасибо.
>>680451Если используешь PDO и его prepared statements то по идее совсем безопасно. Но если ты даешь возможность пользователю вводить html теги, то тогда открывается другая уязвимость - XSS. Почитай урок ОПа.https://github.com/codedokode/pasta/blob/master/security/xss.md
>>680455>у меня не осталось кода от той задачиЭто не страшно, если ты её решил, ты напишешь этот код заново минут за 10. Я бы хотел посмотреть на решение.
>>680457http://ideone.com/kbwjjUдействительно, забыл отнимать 5к.
>>680458Ну ок, вроде правильно.
>>680460Хотя, конечно, отсутствие тела у цикла меня смущает. Ну это на суд ОПа.
>>680462я просто не знаю что в тело цикла писать, а задумываться мне лень.
>>680456Ладно, я передумал это делать.Стоп, а как можно переслать админскую печеньку на другой сервер? Есть же Same Origin Policy. Стыкался с таким, когда дергал three.js. Там картинки пересылались по XmlHttpRequest
Анончики, сверстал шаблон страницы на бустрапчике, но как дошло дело до подключения ее к проекту пропали стили.
>>680474Это грустно.Сайт на Wordpress? Хотя, это не имеет значения.Посмотри в консоли браузера ошибки доступа к ресурсам, откуда сайт при загрузке запрашивает данные.
>>680476Нет, пытаюсь пилить студентов ручками.
>>680476Not allowed to load local resource: file:///C:/OpenServer/domains/localhost/studList/views/template/css/bootstrap.min.cssNot allowed to load local resource: file:///C:/OpenServer/domains/localhost/studList/views/template/css/style.css
бляя, я не могу выбрать дату по цифре. DAY(date) == '8'не работает, даже приведение к (int) обеих переменных не делает их равными, хотя они оба 8 втф?
>>680480>>file:///C:/OpenServer/domains/localhost/studList/views/template/cssТам есть эта папка вообще?>>Not allowedНу это значит, что твой сервер неправильно настроен и отправляет ошибку 403 not allowed при попытке доступа к папке
>>680480Заменил на localhost/studList/views/template/css/bootstrap.min.cssиlocalhost/studList/views/template/css/bootstrap.min.cssконсоль выдала :Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost/studList/index.php/localhost/studList/views/template/css/bootstrap.min.css".
>>680487стили не отображаются?
>>680485Папка есть. Где читать про настройки htaccess ?
>>680490неа
>>680487Анон выше написал что сервер неправильно настроен, должен отдавать MIME type text/css.В Апаче это кажется опция AddType в .htaccess:AddType text/css .css
>>680494Добавить в htaccessстроку AddType text/css .css
>>680491Если бы здесь использовался Apache, тогда в файле httpd-vhosts.conf можно было бы поставить <Directory "C:/OpenServer/domains/localhost/studList"> AllowOverride All Order Allow,Deny Allow from all Require all granted </Directory>
>>680498Знаю, сейчас будете кидать камнями, но я юзаю openserver
>>680494Мне казалось, что это настроено по умолчанию.Ну и правильно подключать css так:<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
>>680501А OpenServer использует Apache. Ковыряй его конфиги, но лучше было бы чтобы ты поставил апач, пхп и базу данных с нуля и по отдельности, так научишься настраивать и решать проблемы как у тебя сейчас.
>>680506Это повлияет на мое трудоустройство в будущем ?
>>680501Судя по сайту, он использует Apache.
>>680508Проще будеть стать эникеем-одмином-DevOPS
>>680502А как я свои стили подключать буду ?
>>680512Но я не хочу быть админом.
>>680502Мне тоже так казалось, но я недавно видел сервер на nginx который все файлы отдавал как text/html.Ну и у него написано там что>Resource interpreted as Stylesheet but transferred with MIME type text/html
>>680502> Ну и правильно подключать css так:- снижается нажежность сайта- так как ЦДН за бугром, увеличиваетяс время загрузки- информация о посетителях сайта сливается за рубеж Что вообще в этом хорошего? Надо думать своей головй, взвешивать плюсы и минусы а не бездумно копировать советы.ЦДН используют обычно чтобы снизить расходы на трафик. В данном случае такой проблемы нет. Есть проблема разобраться с HTMl, HTTP и настройкой сервера. Нужны советы по этим темам. А не это.
>>680513<link rel="stylesheet" type="text/css" href="epic_stylesheet.css" >
>>680521Не пашет.
>>680515У меня openserver, стоит апач 2.4
Привет.Джва вопроса:1. Почему \n не переносит строку? Использую Апач+пхп, т.е. запускаю файлы с программой в броузере.2. Зачем в еcho переменные пишутся в скобках: echo "Foo {$bar}" ?
>>6805841. Работает только в двойных кавычках.
>>680587использую двойные кавычи (в одинарных команда выводится с текстом, в двойных не выводится, но и на новую строку не переносит)
http://ideone.com/E6tHoB - вектор.Вывод ещё не сделал, но, анон, посмотрите ООП пожалуйста.
>>680314ОП, вообще я тут еще подкрутил кое-что. Теперь поточно записывает, НО сейчас почему-то приходит со всех сайтов один и тот же ответ:> HTTP/1.1 400 Bad Request> Server: nginx> Date: Tue, 08 Mar 2016 16:26:06 GMT> Content-Type: text/html> Content-Length: 166> Connection: close> <html>> <head><title>400 Bad Request</title></head>> <body bgcolor="white">> <center><h1>400 Bad Request</h1></center>> <hr><center>nginx</center>> </body>> </html>Вторая проблема, я там поставил функции memory_get_usage перед чтением и записыванием и после. Память возрастает почему-то все равно. Не могу понять.
>>6805841. Что бы работал перенос, браузеру нужно сказать, что бы от отображал данные как обычный текст. Т.е. обробатывал \n как символ переноса строки. Для этого мы должны послать ему http-заголовок перед отправкой данных:header("Content-Type: text/plain");2. Что бы при парсинге строки обрабатывались сложные выражения их заключают в фигурные скобки.Подробно: http://php.net/manual/en/language.types.string.php#language.types.string.parsing
>>680749А и еще, код какой-то тяжелочитаемый стал. Вроде уже как мог на функции разбил.
>>680749Первый вопрос починил.
>>679084ОП, не бросай меня пожалуйста
>>680036Бамп
>>679084> Если да, то смешение нэйм и ип-бэйсед вызывает какие-то тупнякиСомневаюсь. Скорее ты забыл в listen что-нибудь дописать. Покажи конфиг.
>>680441> В этом случае да, все простоДа и в твоём — тоже. Берешь и динамически отсеиваешь динамическим программированием неподходящие решения, ёпт.
>>680465В этом случае надо делать через while.
Сколько вы в среднем потратили время на студентов?
>>680873Мне кажется, что за всё время их и сделали-то человек 10, от силы.А файлообменник - человек 5.
>>680876я в числе 5
>>680876Такое сложное или просто забрасывают?стремящийся, сейчас стихогенератор пока делаю
>>680876после студентов работу можно искать уже? Не хотелось бы в девках так долго сидеть
>>680881И сложно достаточно для новчика, и синдром хеллоуворльдщика - типа кажется, что можно ебошить уже собственный фейсбук, а по сути только в простых скриптах можешь разбираться.>>680883Можно и до учебника ОПушки.Я хз, после ФО лучше, больше соображения появится.>в девках так долго сидетьСмотря какую работу, ну ты понял.
>>680879Расскажи о себе.Че там по работе, как сам и т.п.
>>680886хуева.
>>680862Как? Какая рекурентная формула будет и какие ограничения?
ТАкой насущный вопрос по верстке. Допустим я использую сетку от бутстрапа. Для всяких колонок очень пригождается. Но есть блоки в которых она кажется оверкилом. Например простенький блок в котором два подблока - менюшка с навигацией и логотип, отжатые влево-вправо. Надо ли их тоже вписывать в div.row и отжимать классами бутсрапа для того чтобы вся вертска была как бы по единым правилам?
Как перенос строки в пхп делать?/n не робит, а <br> в апаче то выводит норм, но в ideone - нет.
>>680908Slash в другую сторону, ёбана
>>680909Та знаю что в другую, так тоже не робит.
Вот скрины - кусок вывода и кусок с кодом вывода.
>>680913В двойных кавычках надо, ёбана
>>680913Вообще надо избегать такого сумбура. В двойных кавычках просто всё это поставь.Чем проще, тем лучше поддерживать такой код.
>>680915>>680914А чем кавычки принципиально между собой отличаются?
Доделал вам за щеку, проверяйте http://ideone.com/lxEU68
>>680916Одинарные выводят переменные как есть, не интерпретируя, а двойные интерпретируют.Или нет, я хз.>>680918Проверил проверяй.Неправильное решение.> слово1 слово2 слово3> слово1 слово2 слово3> Я слово4 слово5- вот так должно быть.Скрипт должен два раза выдать одну строку, а потом один раз другую. Попробуй сделать через цикл.И да, из какой жопы ты вылез со своим нижним подчёркиванием в переменных и кучей ненужных кавычек? Залезь обратно Так не надо делать, юзай camelCase. Так чище и понятнее.
>>680921>Скрипт должен два раза выдать одну строку, а потом один раз другую.Точнее сгенерить два раза рандомную но одну и ту же строку?>И да, из какой жопы ты вылез со своим нижним подчёркиванием в переменных и кучей ненужных кавычек?Ну это да, сейчас отрефакторю.
>>680926>Точнее сгенерить два раза рандомную но одну и ту же строку?Yep. То, что по сути своей не отличается, лучше и делать с меньшей работой кода, компактнее, избегая копипаста.
>>680926>Точнее сгенерить два раза рандомную но одну и ту же строку?Да, строка одна и та же, но значения у неё меняются. Циклом такое сделать можно.
В чём проблема?
Переделал себе за щеку, проверилhttp://ideone.com/cc3lAc
>>680936Табуляцию не поставил, каюсь.
>>680936Всё верно.>array_rand($word5,1)Не обязательно ставить 1, если берёшь только одно рандомное значение.>echo $line3Word1," ", $line3Word2;Так а "Я" почему ты не вставил и как ты его вставишь, чтобы было чистенько?
>>680912лучший способ - PHP_EOL
>>680944Сейчас пофиксю и запощу в тред, запамятовал.
>>680950Запамятовал тебе тоже, проверяй.
>>680950Вот, доделал http://ideone.com/Cs5gwr
>>680959>echo $line1Word1," ", $line1Word2," ", >echo "Я ",$line3Word1," ", $line3Word2;Лучше вот так:>echo "$line1Word1 $line1Word2"; >echo "Я $line3Word1 $line3Word2";Проще, понятнее.
>>680965Наверное да.Ладно, буду делать дальше задачки.Алсо, тут уже спрашивал раза 2, но оба так и не понял, поясните как реализовать сайт с админкой чтобы я в админке писал текст и загружал картинку, а мне на главной странице сайта была гиперссылка (неважно с текстом-заголовком или картинкой) на страницу с этой статьей(которая тоже создается по идее с админки же). Вообще, как на гитхабе искать подобное, чтоб глянуть? А то идей что-то нету. Говорили что через БД надо делать( в треде советовали).
Оп, смотри какую интересную книжку нашёл по пхп, вот одна из глав:http://www.hackingwithphp.com/15/0/0/networksИнтересное заявление, sockets are files, ведь сокеты это всего лишь идентификаторы соединения. Но они и правда вроде такие же как и с файлами.Тут зачем-то яву с пхп мешают, это вообще может быть полезно? http://www.hackingwithphp.com/14/2/0/bringing-java-into-the-mixОго, на пхп можно и флеш генерить.http://www.hackingwithphp.com/11/5/0/creating-flashМне показалось, что там есть не мало интересного подчерпнуть. Что скажешь, ОП?
>>680972>sockets are filesСкорее тогда уж pipes, но никак не files.
Легко найти инфу про <form> и всё про html-сторону вопроса. А вот как привязать эти данные к переменным в пхп и как собственно сделать так, чтоб, нажимая на кнопку, запускался бы скрип (запрос в sql и тп)
>>681010нашёл в мануале всё есть в мануале, запомни, всё смотри и ищи там
http://ideone.com/jhMoE9функция ucfirst не работает с кириллицей?
>>681041гугли mb_ucfirst
>>681043когда пытаюсь обойти как в mb_ucfirst меняет регистр не только у заглавной буквы, вот примерhttp://ideone.com/5jTOnf
Бля, я должен похвастаться.Нужно было чинить строки c html-кодом - типа незакрытых тегов и прочих непотребств. Tidy на хостинг не завезли. Погуглил функции от васянов - даже на stackoverflow полный пиздец на регулярках, для которого тысяча случаев, где оно не работает.И я, за два часа, блядь. Написал парсер html, блядь. На строковых функциях, блядь. И на цикле блядь. Я король. Закрывает все теги. Удаляет любые непотребства.Если кому-то понадобится работать с русскими html-тегами, лол, то функции можно заменить на mb_аналоги. Любой юникод вне названий тегов на работу метода не влияет.http://ideone.com/AZIVW9
>>679033^
>>681048>функции можно заменить на mb_аналогиА, ну да, не получится. Цикл листает строку побайтово.
>>681048Ты про DOM не слышал? Алсо твой код плохо читаемый и идет одной огромной стеной. Как проверить что в нем нет ошибок и уязвимостей? Для начала можно бы проверить на списке конструкций отсюда https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
>>681048Алсо твой код можно было бы сделать более аккуратно в виде машины состояний наверно.
>>681057>DOMОй, а он из коробки, оказывается. Ну и ладно.>Для начала можно бы проверить на списке конструкций отсюдаМой код не проверяет атрибуты, он просто закрывает непарные открытые теги и удаляет непарные закрытые теги.>>681058>машины состоянийА я не знаю, что это, лел.
>>681061Google, state machine
>>681061Тогда получается ты написал парсер который неизвестно безопасен ли (может конечно это и не требуется) и который написан стеной кода даже без комментариев и разбиения на части с 5 уровнями вложенности. Что скажет человек, которому надо будет проверить или доработать этот код? Если ты делаешь рабочую задачу, не надо изобретать велосипед. Если ты делаешь это в учебных целях, надо делать правильно.
>>681043>>681046я понял в чем разница
>>681062Вдуплил, кажется. Все, как у меня сейчас, только ветвление не по булям, а сначала в таблице по булям определяется состояние, и выполняется определенный блок кода.Да, так было бы красивее.>>681064>неизвестно безопасен ли (может конечно это и не требуется)Парсер парсит html не от пользователя. В базе хранятся новости с html-разметкой. Надо выводить краткую аннотацию.>Что скажет человек, которому надо будет проверить или доработать этот код? Он просто использует DOM, кек.
Алсо, я подозреваю, что DOM нехило пожрет память, выплюнув многомерный массив.
Есть у кого ссылка, где подробно рассказано про связь <form> с переменными _GET, _POST и sql запросами?
Мне вчера кто-то говорил, что не обязательно закрыть соединение с mysqli.Я послушал, а на хостинге мой скрипт стал падать с ошибкой Too many connections.Хех.
Алсо, посоветуйте.У меня куплена VPS (FreeBSD) несколько лет назад. Мне как дали ее с PHP 5.2, так там 5.2 и стоит.В сосноли ничего умнее ls не знаю, но по инструкции вбить команды смогу (когда-то даже iconv так умдурился поставить).Так вот. Как накатить 7.0, есть подробный манул, для таких, как я?
>>680904да.контейнер>роувообще я давно не верстал и подзабыл, посмотри какой-нибудь йоба шаблон на бутстраппе через средства разработчика.
>>681010action="?$action"input type="text" value="$value" placeholder="$value"input type="submit" value="$value"можешь формы хоть на лету генерировать
А можно получить как-то ключевые слова новостей на основных новостийных сайтах? И использовать это в скрипте? Что-то вроде основные темы, о которых сейчас сообщают новости? Желательно даже не темы, а ключевые слова, причём такие слова мне надо парсить или получать каждый день.
Правильно я понимаю механизм: все <input> внутри тега <form>, когда form method="post" после нажатия кнопки с type="submit" передают глобальной переменной инфу типа $_POST['name']= написанное в инпуте? Вроде выполнил все шаги, но переменная $_POST - пустой массив. Как вычислить, на каком этапе ошибка? Не могу разобраться
>>681158У тега <input> должен быть указан аттрибут name.http://www.w3schools.com/tags/att_input_name.asp
>>681161я это знаю и всё так и делаю, но $_Post всё равно пустой
>>681158бамп проблеме. Так и не решил её.
>>681158А ты указал куда передаешь то?
>>681158Напиши куда ты передаёшь и как ты получаешь переменную. Скорее всего на этих этапах у тебя ошибка.
>>681102Значит дело в скрипте. Выкладывай, посмотрим.
А идея с конфочкой загнулась?
>>681186Какая идея с конфочкой? Тут разве что кидали ссылки на конфу в слаке, но они никакого отношения к этому треду не имели.
>>681187PHP конфа в телеграме была. Я там был. Там в основном только прон кидали. Я ливнул. Хотелось бы узнать как там всё и куда всё переросло?
Как написать систему сообщений - чат наподобие вк? Пробовал через аякс, но видать нкриворучил и в итоге сообщения хоть и получаю, но отправлять очень муторно.
Оп, глянь очередное тестовое.https://github.com/toppestkek/CodelgniterTest
>>681206Как у тебя всё чистенько то, как всё определено. Нравится.Мимо ньюфаг.
Захотел поверстать. Скачал бесплатный шаблон. Буквально в каждом блоке какие-то бока. Тут логотип на два пикселя правее направляющей. Там иконка поиска куда-то уехала вниз и вправо.Да и вообще непонятно как правильно спозиционировать тот же логотип. Можно сделать ему маржин-топ, можно сделать родителю паддинг-топ, можно позишн: абсолют/релатив. Допустим, я выбрал через маржин-топ. По направляющим видно что надо добиться либо 50рх до нижнего края букв либо 29рх до верхнего. И как же правильнее это сделать, просто margin-top:29px или $logo-font-size:21px; margin-top:50 - $logo-font-size; в SASS?Прозреваю что так каждый блок придется облеплять подобными костылями. Надо ли стремиться к pixel perfect или тут дизайнер налепил говна? И что если мне на собеседовании дадут заверстать подобное?
>>680751спасибо
На сервереrequire('./sql_bd.php');function gogogo() {--быдлофункция с коннектом к базе--}На выходеCall to a member function query() on a non-objectPs всё работало до тех пор пока запилил код в функцию.Pss всё заработает если добавлю коннект в функцииМне что теперь в каждую функцию коннект плодить?
>>681269я всё. понял я мудак.
>>681188Есть другая конфа, инфа в прошлом треде, там лучше и есть Пёс Дергунский.
У кого, как тут с десяти пальцевой печатью и хоткейсами?Вот я только недавно стал задрачивать на клаваорг и думаю в шторме нужно по лучше разобраться. Что почитать по этой теме? И что значит 'программировать мышкой'?
>>681174>>681173код на картинке. "testvalid.php" просто пхп-пустышка, которая содержит эту же страницу(для постинга var_dump переменных).Если method не писать или поставить GET - гет будет прописываться, но POST - ни в какую.
>>681288Очень рекомендую додрачить до конца. Сильно упрощает жизнь.
>>681229Там мой код только в контроллере, вью и модели, если что, это фреймворк.Алсо, определять переменные и работать с классами, методами (приватные, публичные) я научился только после джавы, т.к. там все это необходимо, а в пхп похуй на это.
>>681206>toppestkekСколько уже изучаешь, видел до нового года тебя ещё со студентами вроде?
>>681357Года два наверное.
>>681366Долговато или нормик?А чё там по работе, куда-нибудь пробовал устроиться?
Выше в >>680127 я давал ссылку на хорошую статью про толстые страницы: http://idlewords.com/talks/website_obesity.htmНа хабре выложили перевод: https://habrahabr.ru/post/278655/
>>681325бамп проблеме, первые пять страниц в гугле не помогли
>>681332большая часть моего кодинга, эта вначале копипаст мышкой, какого то шаблона или каркаса, возможно куска написанного до этого, потом приведение мышкой этого в приличный вид и только потом написание нового.Это норма?
>>681378не знаю, я стараюсь писать всё сам
>>681378Десятипальцевый метод лучше для твоего здоровья.
>>681325Покажи код testvalid.phpЧто выдаёт var_dump($_POST); ?
>>681158Не совсем. Почитай про отправку форм методом POST в протоколе HTTP.Думать что данные иф формы магическим образом оказываются в массиве POST неправильно. Там естьт протокол HTTP, и запрос который браузер отправляет на сервер. Разберись как это работает.> Как вычислить, на каком этапе ошибка? Не могу разобратьсяИзучить HTTP, после этого в отладчике браузера Ctrl + Shift + I нп вкладке netwoek посмотреть что именно и куда отправляется.
>>681325надо использовать developer tools
>>681383вот код: <?phpinclude ('page.html');page.html - эта же страница с формой. С $_GET всё работает. var_dump выдаёт array (size=0) empty>>681387щито это?
>>681388гугл: chrome developer tools
>>681394>chrome developer toolsкаким образом мне это поможет с тем, что $_POST остаётся пустой?
На строках if ($this->mysqli instanceof mysqli) { $this->mysqli->close(); }в деструкторе объекта у меня иногда вылетает PHP Warning: mysqli::close(): Couldn't fetch mysqli in blabla.php on line 124Собственно, причина ясна - иногда я закрываю соединение еще до уничтожения объекта.Вопрос: есть ли у mysqli свойство или метод, через который можно чекнуть, поднято ли сейчас соединение? Чтобы не закрывать протухшие коннекты.
>>681396> Думать что данные иф формы магическим образом оказываются в массиве POST неправильно. Там естьт протокол HTTP, и запрос который браузер отправляет на сервер
>>681398>магическим образом оказываются в массиве POSTвот тут сказано, что всё из <form method="post"> оказывается в переменной $_POST http://php.net/manual/ru/tutorial.forms.phpПро протокол - расскажи, я перерыл много страниц гугла, впервые слышу (я полный нубас в этом всём)
>>681279Кинь инвайт
>>681382Чем лучше?Т.е. не трогать мышь вообще и не копипастить?
>>681407как вы заебали, илитки-конфобляди, вас банить надо
>>681341Фу, там ети геттеры сеттеры. Ужос.
>>681409Скорее всего прон опять спамят.
>>678185 (OP)>Пости свой код на гитхаб и вкидывай ссылку в тред по мере решения.Но его же придется скачивать чтобы запустить. Почему тогда архивами нельзя? Просто помню кто-то ругался, что нахуй эти архивы выкачивать. Просто прошу пояснить.
>>681417ОПу удобнее смотреть код на гихабе, при необходимости одной командой склонироать его. Скачать и распаковать архив нельзя одно командой, и просмотреть его не скачивая тоже нельзя.А в чем проблема с гитхабом? Не нравится гитхаб, можно использовать битбакет например.
>>681417То есть если у тебя есть веские аргументы вроде слежки и приватности - можно подумть про альтернативы но если тебе просто лень изучать гит, то нет, это плохая идея. Да и гит не такой сложный, и книга по нему есть на русском.
>>681386Прочитал страницу опа по HTTP. Ответа на свой вопрос не нашёлЕсли ты знаешь проблему, неужели сложно сказать?
>>681420>>681421>Просто прошу пояснить.Я ж ничего не оспариваю, просто хотел узнать в чём преимущество.
>>681422А код ты давал в треде? Просто непонятно что именно не так по твоему вопросу, слишком много будет что не так если не видеть кода.
>>681429вот код>>681325
>>681426меньше надо действий и кликов сделать чтобы код увидеть.
>>681426Плюс видна история изменений
>>681422Как это тебе поможет решать такие проблемы в будущем? И я не телепат, я не знаю что у тебя не так.Я написал выше уже по моему раза 2: открой девелопер тулз и посмотри какой запрос отправляет форма.
>>681431>>681325Ты в классе well ищешь var_dump? Не надо так делать. GET вообще работает когда он в самом начале файла прописывается.
>>681325Вообще, если хочешь украсить и вывести - присваивай переменную и выводи её.
>>681476>Ты в классе well ищешь var_dump? причём тут класс well? я просто вар-дампаю переменную в начале страницы. >открой девелопер тулз отправляет POST запрос
>>681370Да вот мамка пиздюлей дала, походил по днищевакансиям - понял, что ну нахуй. Разослал везде резюме на hh, на топтал. Ща прохожу собеседования, тестовые - вот это вот все. Апворк спамлю. По деньгам пусто.
>>681483А в $_SERVER["REQUEST_METHOD"] что показывает после того как отправил?
>>681483Проси совет@Не следуй полученному совету
>>681483Притом, что так делать не надо. GET не будет работать. Выведи его за пределы класса.
>>681325Var_dump(_$GET)Замечательно. А ничего что ты в GET ничего не передал?
>>681493О чём ты? всё сделал же>>681492>$_SERVER["REQUEST_METHOD"] даёт 'POST' (length=4)>>681495О чём ты вообще говоришь? какого класса? Ты про well? Это css класс, он тут вообще причём? У меня и без него не работает. Да и если на то пошло, я пишу, что GET работает, а POST нет. Ты троллишь?
>>681498Var_dump($_GET["pwd"]);пробуй. И выведи код из css классов.
>>681500>>681501Get - это метод. Берёшь им переменную, в нём будут данные. Не берёшь - будет пустой дамп. Так понятней?
>>681498>>681501я на всякий все прописал, чтоб проверять в чём подвох. CSS классы не при чём, без них то же.>Var_dump($_GET["pwd"]);повторяю, не работает POST. Аналогичная запись с ним ничего не даёт
>>681504>Get - это метод. Берёшь им переменную, в нём будут данные. Не берёшь - будет пустой дамп. Так понятней?Что? Ты хотя бы с мануалом для начала ознакомься, прежде чем такое советовать.$_GET это ассоциативный массив, никак не метод.http://php.net/manual/en/reserved.variables.get.php
>>681505var_dump($_POST['pwd']);нутыпонел
>>681513Сказал же,>Аналогичная запись с ним ничего не даётт.е. nullкороче, я тут полтреда засрал, а ответ так и не получил. Есть тут кто сталкивался? В чём вообще может быть причина?
>>681518Код вроде нормальный, и отправляет POST. Я думаю проблема где-то на сервере, возможно он настроен неправильно.
>>681518Ты сначала левйй код кидаешь, а потом какие-то вопросы задаёшь? Я тебе не ванга, не могу предугадать что ты делал, а что нет.
>>681518Попробуй минимальную форму http://pastebin.com/nGffiewCОтпишись, что выдаёт.
>>681524Попробовал. Сделал test.php include этот же файл: ...\1.html:10:array (size=0) empty...\1.html:11:array (size=0) empty...\1.html:12:array (size=0) empty
>>681527Не надо ничего инклудить.
>>681531а что в test.php писать тогда?
>>681532Код по ссылке.
>>681533Сделал, то же самое. Три empty
>>681536Ты уверен что тоде самое сделал? Назвал файл test.php?Положил его в htdocs?Ввёл в поле данные? Нажал отправить?Скрины где?
>>679104Бамп вопросам, с главным вопросом я разобрался, остальные начиная со второго до сих пор не понимаю
>>681536Запости свой код еще раз (в коде var_dump($_POST ) должен идти до любых других действий) + скриншот подробностей запроса из дев тулз + какой УРЛ в браузере.
>>681540Неплохо бы узнать где он таки тестирует, на локальной машине? На апаче? На сборочке? На сервере?
>>681518Закинь на гитхаб и покажи что там у тебя.
>>681542>>681540Вот подробная пикча. Тестирую на phpstorm
>>681549Зайди на test.php?test=test
>>681549А в PHPstorm ьщжно в свои директории сувать и работает? Просто я привык всё в htdocs держать.Ну вангую что что-то не так именно у PHPstorm.
Продал чёдня товаров на ауке на 110к голды. Понравилось.
>>681559Держи в курсе.
>>681559>>681562Снайпер тредом промахнулся. И разделом.
>>679822Не получается. Прописал AllowOverride All в httpd.conf, все равно не реагирует .htaccess в phpstorm. Проверял строкой This is garbage line в нем, никаких ошибок нет при открытии в браузере.
Что надо знать по пхп чтоб на джуна взяли? Что требуют, спрашивают на собесе?А то в обьявлениях мб наёбывают.
>>681575Спросят"PHP знаешь?"Тут ты должен ответить"Да"И тебя сразу возьмут.
>>681583Анон дело говорит.мимо джун, устроился так в силиконовую долину
>>681583Я так на С++ мидлом устроился.
>>681575гугли 'Что требуют, спрашивают на собеседование пхп'. По таким шаблоном большинство контор собеседует.После файлообменика ОПа вполне можно ходить по собеседованиям.
http://ideone.com/fCGDAX задание "Пиши верно"
>>681557>Ну вангую что что-то не так именно у PHPstorm.Ты был прав, анончик. Нашёл у них целую тему в интернете по этому поводу, где жалуются на эту проблему. Ну и параша, пиздец, кто бы мог подумать. Всё, поставил на шторм апач и теперь всё работает.
>>681603>$text1 = preg_replace("!(\ )+!iu", " ", $text); //Убираем лишние проблемы>$text2 = preg_replace("!(\ )?\,(\ )?!iu", ", ", $text1); //Делаем пробел после запятой>$text3 = preg_replace("!(\ )?\.(\ )?!iu", ". ", $text2); //и после точкиТак не годится, слишком много копипасты.Надо сделать массивы с регулярками и заменами, пропустить через одну функцию preg_replace.
>>681609я не знаю как сделать что бы в одной функции, без лишнего текста, заменяло запятую на запятую с пробелом, а точку на точку с пробелом и так с остальными знаками
>>681609>>681609ок, буду думать
>>681573Ставь апач.
Господа, поясните мне, где и когда нужно использовать верблюжий стиль (переменнаяНейм), а когда змеиный (переменная_нейм)? Можно ли их смешивать? Мне кажется, что логично все функции и методы делать в змеином и поля в бд, а названия классов и переменных в верблюжьем. amiright?
>>681668Почти.http://www.php-fig.org/psr/psr-1/#4-class-constants-properties-and-methods
Суп.Возможно ли найти работу, если слово битрикс у тебя в блеклисте? То есть я автоматом скипал лубую вакансию и оффер, если там это слово встречалось.
>>681647Эм, ну он как бы стоит.
>>681699Не обращай внимания. В любой непонятой ситуации тут советуют это.
>>681700Двачь, меня бросила тян, что делать.Ставь апач.
>>681676Вот интересно, там пишут, что функции и методы должны быть написаны верблюжьим, но в большинстве гайдов по фреймворкам геттеры и сеттеры пишутся андерскопом, как так?
>>681699Хорошо. Тогда давай всё то же самое БЕЗ phpstorm.
>>681573ставь Убунту.
А вот тут кстати написано, что функции можно называть верблюжьим стилем, а такие вещи, как set_ и get_ писать с префиксами, так что нехуй выебываеться, все правильно у меня в коде. http://pro-prof.com/archives/1584
>>681724Никто и не выёбываетсяЗдесь главное — постоянство. Т.е. если выбрал один стиль, то придерживайся его во всём проекте.Но ОП будет тебя дрючить, если не будешь соблюдать PSR
>>681725Послушай, но если я называю функции верблюжьим стилем, я все же не могу себя заставить писать get_ и set_ тоже верблюжьим, это просто режет глаза.
Аноны, может хватит спорить о том в каком стиле прогать и поможете мне?Есть форма, там вводятся данные, отправляются на сервер, этот метод получает данные и должен записать данные в бд.Выполнения кода до этой функции доходит и выполняется дальше, вот только в самый бд где-то происходит ошибка и нихуя не записывается, при том, что все записывалось, а почему перестало работать хуй его знает, метод я не изменял, а работать перестал какого-то хуя, если этот метод выполняется но не записывает в бд, значит ошибка происходит в бд, значит проблема в sql запросе, а может и нет, но она точно находится в этом методе. А в чем собственно проблема блять? подключение к бд работает и проблема уж точно не в этомВот этот пидорский метод:https://github.com/luptidu/students.com/blob/master/models/Student.php#L32-------------------------------------------------------------------И еще вопросы в данный момент менее важные:2. Когда использоваться include, а когда include_once, как работает я знаю, но не могу понять в каких ситуациях первая функция может вызвать проблемы? То же самое и c require и require_once. Да и зачем вообще нужна require, если везде можно юзать инклюд? По идее3. Можно ли в свойствах класс модели создать переменную дб и уже юзать ее в функциях и не писать в каждой функции одну и ту же строчку кода? Хотя что-то мне подсказывает, что типо так не делают, потому что даже при использовании функции где не используется бд все равно придется слать запрос к бд, что уменьшает скорость обработки4. Я немного не понимаю суть ООП в плане, почему не сделать все функции статическими и выполнять их без создания обьекта. Можешь привести примеры где нужно будет обязательно создавать обьект и без него никак? Желательно где это обязательно в этой задаче5. Зачем нужно постоянно импортировать бд или создавать вручную если хочешь потестить чей-то сайт? Почему бы не написать просто код который проверяет наличие бд и таблиц и если они отсутствуют, то просто создает их.6. Также почему когда люди выкладывают свой сайт на тест, то выкладывают его без фреймворка и его тоже нужно устанавливать руками? Ведь можно просто скинуть папочку с фреймворком и не париться.
>>681612В двух массивах должны быть:1. Регулярки.2. Замены.Порядок регулярок и замен в этих массивах должен соответствовать.Далее просто подставляешь в функцию один массив на место регулярок, а другой на место замен - всё пошагово меняется.
ОПчик, что скажешь про Dart (язык от Google на будущую замену JS)?
>>681691Легко
>>6817491. Что php выдаёт? (в браузер или в логи)3. Почитай эту пасту https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md5. Обычно так и делают. Например, пишется скрипт (install.php), который пользователь запускает, забивает некие параметры (реквизиты БД, м.б. что-то ещё) и он сам всё инициализирует. С другой стороны, это может не отменять дампа БД, т.к. ты можешь в скрипте читать SQL-запросы из файлы и выполнять. Ты об этом?
ОП, не бросай меня пожалуйста>>680858Вот, смотриhttp://pastebin.com/N4xNU3jpУдаленно подключаешься по умолчанию к mysite. Норм.По 127.0.0.1 и server подключаешься к главной - окей. А вот дальше - пиздец:По mysite и test подключаешься все равно к главной - wtf?А по localhost - наоборот, к mysite!Пиздец.Я тогда попробовал сделать вот такhttp://pastebin.com/9xSB879hИ теперь вообще все коннекты идут к mysite. Пробовал менять секции с звезда:80 и 127.0.0.1:80 местами - не реагирует.
>>678185 (OP)Няша, скажи пожалуйста: в ближайшее время еще есть смысл вкатываться в PHP в условиях заполонившего все на свете JavaScript (фронтенд, бэкенд, расширения для браузеров, игры, десктоп, мобильники)? Ведь он все больше разжирается, вокруг него все прыгают и т. д. Ниша php сильно сократится, зарплаты сильно упадут, конкуренция добьет начинающего?
>>681827ничего, открывается страничка с поздравлениями, но вот только в бд не добавляет, как я понял пхп похуй то есть ли ошибки в бд или нет и если он никакого ответы не ждет, то просто идет дальше.3. Читал, но все равно нихуя не понял, если ты читал и понял, то ответь, пожалуйста, конкретно на мои вопросы.5. Нет, я не про то, но я сам уже понял почему так не делают, ведь если сделать проверку на наличие бд, то выйдет, что при каждом запросе придется проверять есть ли бд, а это по идее замедлит скорость работы всего сайта.
>>681864>ничего, открывается страничка с поздравлениямиТы редирект убирал перед этим?По-моему у тебя там ошибка в передаче параметров. Посмотри документация на метод execute()>3. Читал, но все равно нихуя не понялОтвечаю на твой вопрос: да, можно. Видишь в пасте в конструктор класса NewsTableGateway передаётся PDO-объект? Это и есть твоя переменная. Также, это будет примером на четвёртый вопрос: в этом случае тебе не нужно в каждом методе писать Database::connect(), что сокращает код и делает его более устойчивым к ошибкам (например, ты просто не можешь забыть вызвать Database::connect()).>5.Да, плюс у тебя будут проблемы с типами данных.
Анон, где можно посмотреть годный мастер-класс по написаню сайта с нуля?
>>681863До этого еще очень долго, не бойся.В крайнем случае сможешь перекатиться
>>681936Хочу ОПа послушать, что он скажет. По-мне так не так и долго, пару лет назад еще про эти все нод.жсы никто всерьез не говорил.
>>681938Мне тоже самое про Руби говорили
>>679822Снова выхожу на связь. Это же не апач, да? А как выбрать в пхпшторме апач?
>>681941Не сравнивай. Руби, хаскель, дэ, лисп, перл, го, бу - это все очень хипстота, а вот жс сейчас ну прямо-таки везде. И, что важно - фуллстак разрабом можно идти, зная только жс и его подмножества и фреймворки. Чего не скажешь о тех же С++, ПХП, Питоне или Джаве.
Мне надо проверить частотность употребления определённых слов, на самых крупных информационных сайтах, хотя бы на 3-4, в течении нескольких дней, как это можно сделать? Найти их xml и просто спарсить и посчитать? Но у большинства сайтов которые я видел статьи rss xml написаны не полностью, а только несколько первых предложений.
>>682009Я понимаю, что можно брать только ссылки из РСС, и дальше просто парсить сами новости, переходя по ссылкам, но это будет занимать больше времени, да и не совсем удобно, хоть и разметка на всём сайте примерно одинаковая.
>>681927В ОП посте.
>>682036Не нашёл.
>>681952Изучи cgi. Тоже интересная штука. У тебя разве новые слова не вызывают любопытства?
>>6819061. Редирект у меня после записи в бд.Проверил в мануале, да, там в ключе нужно было добавить двоеточие типо ':name", а у меня было 'name'. Но все равно не записывает и в прошлом как-то записывало и без этого, но все же оставлю. А в остальном по идее все правильно.3. Да, похоже что в статик функциях такое не получится реализоваться, ну и ладно, я считаю, что удобней будет каждый раз в методе писать соединение, чем каждый раз когда хочешь обратиться к бд создавать обьект.По поводу четвертого, я кроме того, что шанс ошибок меньше я так и не понял зачем нужен обьект, нужен такой пример, где без обьекта не обойтись и нужно его использовать обязательно.
Сверстал ПСД из заданий по ксс (ещё месяца 3 назад) и сейчас решил его натянуть на вордпресс, вот что получилось:
>>682112Не могу отправить, есть какое-то слово из спам листа в том что я написал
http://workkk.com
>>682119Так шаблон не похож ни хера.
Спам лист блокирует адрес моего сайта, размещаю адрес на картинке. Из админки можно менять абсолютно всё, как через записи, так и через страницу настроек темы (ВНЕШНИЙ ВИД - НАСТРОЙКА ТЕМЫ)
>>682124Это не то, это я бился над тем чтобы найти слово из спам листа, вот то >>682125
http://workkk.17mb.com только вместо 17 поставить 16
Точнее даже так http://workkk.17mb.com/wordpress/ только вместо 17 поставить 16
>>682129Так-то нормик.Но лого съезжает при увеличении масштаба в Лисе. Не адаптивное главное меню.Шрифты какие-то не те, лучше засечки поменьше или вообще без них.
Почему во всех тредах нормальные ОПы, а у нас АНИМЕШНИК?
>>681938учи обязательно ангуляр и ноду, мне даже в вакансиях на пхп ангуляр и ноду присылают (смешанные с пхп).
>>682137А что такое засечки? Я на адаптивность не делал.
>>682137Там же всё на вордпресс, из админки если что можно менять всё.
>>682140У нас самый лучший ОП.>анимешникКак что-то плохое.
Я часто вижу тут анонов задающих вопросы по "парсингу"/"скрейпингу" данных с чужих сайтов. А знаете ли вы, аноны, о юридических последствиях данных деяний? В США веб-скрейпинг может быть признан нарушением закона о причинении вреда имуществу: https://en.wikipedia.org/wiki/Web_scraping#Legal_issuesТам есть ссылки на конкретные делав судах, где суд приравнивал скачивание данных ботами к причинению вреда компьютерным сетям и серверам (аналогично по поводу рассылки спама). Хотя с другой стороны, а как же Гугл скрейпит страницы без разрешения? Интересно конечно.Так что думайте, прежде чем заниматься такими делами. Особенно если вам предлагают "скрейпить" сайт крупной американской компании.
>>682084>1. Редирект у меня после записи в бд.Убери его. Если там warning или notice, PHP будет продолжать выполнение и дойдёт до него.>3.У тебя на каждый вызов функции создаётся соединение, например.> зачем нужен обьектЯ так понимаю, ты уже прочитал вот это http://archive-ipq-co.narod.ru/l1/pasta.html ?Погугли «зачем нужно ООП». Почитай про управление сложностью, разделение ответственности (сейчас у тебя этого нет), инкапсуляцию (очень важная тема), полиморфизм, наследование.Не нашёл у ОПа паст на эту тему, если у кого есть годные ссылки, вбросьтеИли жди ОПа, он тебе лучше объяснит.
Как в сфинксе сделать выборку всех элементов при совпадении? Вот есть у меня таблица в базе с файлами, в ней колонки id, name, uploader, upload_date, downloads. Искать мне нужно только в колонке name, конфиг сфинкса вот - http://pastebin.com/AU6m9nrw.Как я понял из документации http://sphinxsearch.com/docs/latest/index.html sql_field_string - это полное текстовое поле, по которому идет поиск с помощью MATCH() в SphinxQL. Но когда я с помощью SphinxQL делаю SELECT * FROM index_files WHERE MATCH('1'), то получаю только один файл который содержит цифру 1 в самом начале имени (хотя таких файлов там далеко не 1). Далее, если я делаю MATCH с частью имени какого-нибудь другого файла, то не получаю совсем ничего. Почему так происходит? Конфиг неправильный или запрос? Читал про extended query syntax тут http://sphinxsearch.com/docs/current/extended-syntax.html но так и не нашел того что мне нужно.Пик релейтед.
>>682292Нашел вот такую опцию http://sphinxsearch.com/docs/current/conf-expand-keywords.htmlЕсли с этой опцией задать min_word_len = 1 и min_prefix_len = 1 (думаю все же поставить 3 - 4 символа, чтобы удобнее было когда записей в базе будет больше), тогда все работает как нужно, но все равно хотелось бы услышать комментарии от кого-нибудь кто работал с сфинксом, правильно ли я делаю?
Аноны, кто изучает проектирование Бд и нормализацию? Попробуй-те ка решить интересную задачку: - есть некий сайт, на нем есть Пользователи, Фото, Комментарии- необходимо сделать возможность пользователям лайкать других пользователей, фото и комментарии- 1 пользователь не может поставить 2 лайка одной и той же сущности (например одному и тому же фото)- пользователь должен иметь возможность отозвать лайк- нужно иметь возможность посчитать число лайков для той или иной сущностиКак бы вы это реализовали и почему? Сразу предупрежу, тут есть как минимум несколько вариантов. Оптимизировать под производительность ничего не требуется, внешние ключи желательны, следование принципам нормализации тоже по очевидным причинам.
>>682052Я бы с радостью,но все таки когда из-за искусственных проблем не можешь начать делать файлообменник и изучать новый фреймворк - как-то не весело.
http://hqsale.com/Вот эти клоуны прислали мне приглашение на собеседование. Думаю пойти по фану и в конце сказать Я ВАМ ПЕРЕЗВОНЮ.
>>682354Извините, тредом ошибся.
>>682001Ну это очень условно, жс на беке отличается от жс на фронте.Я вообще не виду проблемы в том что бы изучать несколько языков.Хотя если жс захватит мир я не против, опять же перекат из языка в язык это не сложно и интересно
>>682310Сделал бы отдельную таблицу лайков, где один лайк = одна строка. В ней следующие поля: ид, ид юзера, ид сущности (комментарий, фото, юзер), дата. Была бы таблица для каждой сущности, где есть поле лайк. Может быть я еще бы и у таблицы юзер создал бы поле лайк. И при лайканьи менял/добавлял бы значение в трех местах базы. А вообще я наверное бы все это на монгодб сделал. И возможно бэкенд бы на сокетах реализовал.
>>682400А внешние ключи как сделать в твоей схеме? Не, тут есть несколько вариантов решения с нормальными внешними ключами. > А вообще я наверное бы все это на монгодб сделал. А чем она лучше, интересно? Там вроде много чего нет: SQL запросов, джойнов, транзакций. И блокировки говорят на всю коллекцию сразу при записи. Не очень понятно, в чем выгода от урезания возможностей.
>>682400И зачем ид для лайка?
>>682400>Сделал бы отдельную таблицу лайков, где один лайк = одна строка.Аня сфотала сиськи и получила 10000 лайков.У тебя в таблице 10 000 строк добавилось.Найс.
>>682409Чтобы быстрее найти нужный лайк.
>>682400Лайк - это одно числовое поле в таблице. Каждый лайк +1 к сумме в поле. Дизлайк -1 к сумме в поле.
>>682413Как проверять на повторный лайк? >>682412Там было про производительность написано. Незачем вводить искуственный первичный ключ, когда есть естественный.>>682411Для этого таблицы и существуют. Алсо на практике 10 000 лайков встречается не так и часто.
>>682408Скорость. Частое взаимодействие с базой. Я просто знаю, что всякие чатики, лайки делают на монгодб, тк там много запросов.
>>682419Это всё-равно экспонента. У тебя 2000 юзеров.У каждого по 200 фотографий, у каждой фотографии в среднем по 15 лайков. Итого 2000 200 15 =6000000.При этом с возрастом системы Старые пользователи увеличивают количество фотографий, а новые добавляют новые. В какой-то момент у тебя будет 6000000 записей в час.
>>682429Тогда надо уже даже не мускул, а что то свое и производительные писать, но я не знаю какой там порог у мускуля
>>682419>Как проверять на повторный лайк? dskfjk.jpg 1 лайкsddfasd.jpg 1 лайкasdasd.jpg 1 лайкДругими словами Записываешь каждому юзеру просмотренные фото. И отдельно ведёшь запись того что он лайкнул. Ну или Можно послушать кого-нибудь кроме меня.
>>682428Ничем не подтвержденные заявления вряд ли хороший аргумент. То что кто-то что-то использует - может он это делает от скуки или ради лишнего слова в своем резюме. >>682429Ну от 6 млн майскул не развалится. И когда у тебя будет много пользователей, скорее всего у тебя будет и много денег на масштабирование (оно тебе понадобится независимо от выбранного хранилища).>>682431Пишут, да, кто-то свои хранилища на Си, как вконтакте, кто-то что-то опенсурсное прикручивает. Но в качестве основного хранилища данных внизу часто остается та же Mysql.>>682432Усложенение. Алсо прочитай уже про нормализацию и связи в Бд и перестань изобретать велосипеды.
>>681397Бамп.
>>682446Ну ок, сейчас аргументы и факты погуглю за монгу.
>>682284>В США веб-скрейпинг может быть признанПотому американцы и идут с этими заказами на биржи к индусам, русским и прочим кодерам третьего мира.Вот какой-нибудь володька панкратов из мухосрани спарсил каталог товаров из одного пиндосского магазина. И что, к нему теперь нагрянет интерпол и цру?А так в штатах конечно авторские права бешено защищают, например тебе реально могут дать срок за скачивание пиратской музыки или программ. Но мы же не в штатах.У меня кстати идеологическое отвращение к парсингу и подобным заказам. Я учился программированию чтобы быть "не таким как все", чтобы делать что-то интересное и сложное, возвышенное. А тут один барыга предлагает спиздить контент у конкурента. Я программист, а не грязекраб.Хуже только работа с порносайтами.
>>682516Порносайты это же хайлоад, плееры, деревья, иерархии Интересно же было бы.
>>682310По отдельной таблице лайков на отдельную сущность, многие ко многим.likes_user_user (from_user, to_user)likes_user_photo (from_user, to_photo)likes_user_comment (from_user, to_comment)Первичный ключ на обе колонки, внешние на каждую по отдельности.>отозвать лайкНу видимо удаление, DELETE FROM likes_user_photo WHERE from_user = ? AND to_photo = ?>1 пользователь не может поставить 2 лайка одной и той же сущностиPRIMARY KEY (from_user, to_photo)>нужно иметь возможность посчитать число лайков для той или иной сущностиSELECT COUNT() FROM likes_user_photo WHERE from_user = ?Другие варианты не очень идут в голову, потому не могу сказать почему выбрал этот вариант.Ну допустим можно сложить все лайки в одну таблицу. Но тогда не будет возможности повесить внешние ключи. И придется делать доп.колонку 'тип сущности', чтобы можно было выбирать отдельно только лайки для фото или комментов.
>>682140Анимешник это как советский знак качества, только для программистов.
>>682541Вообще, это ведь задача на наследование. Если ты вспомнишь 3 паттерна наследования таблиц, то получишь как минимум 3 варианта (хотя я конечно не знаю, любой ли там паттерн подойдет).>>682528Я подозреваю там хайлоад уровня поставить кеш на редисе перед mysql + несколько серверов со нгинксом настроить для раздачи видео.
>>682143
>>682284>как же Гугл скрейпит страницы без разрешения?Там какое-то пользовательское соглашение есть при добавлении в аддурл. Может, это.Хотя Гугл индексирует сайт и без добавления через аддурилку, по ссылкам из Твиттера и прочих соцсетей. Хотя с Твиттером вроде разорвано соглашение, я запамятовал. Так-то есть соглашение или нет - без разницы, всё равно проиндексирует быстрее, если живая ссылка из соцсети с переходами на сайт.
>>682577И где в случае с лайками наследование?class или concrete ti подойдут если есть несколько классов, которые наследуются от общего. Приводят примеры со Спортсментами и их разновидностями, такими как Футболист, Крикетист и Боулер(?). http://design-pattern.ru/patterns/concrete-table-inheritance.htmlИли класс Транспорт, от которого наследуются Автомобиль, Мотоцикл или Грузовик.У них у всех есть что-то общее, и есть отдельные уникальные характеристики.Не понимаю как натянуть структуру лайков на cti, не вижу аналогии.А чем плоха эта схема? >>682541
Ящетаю, надо таблицу делать с конкретной шнягой, которую лайкают.Запись, картинка, видео.В талбице должны складываться все лайки юзеров и должны записываться их ID.Больше одного лайка всё равно нельзя ставить.Поэтому поставил лайк - твой ID записался, лайков стало на один больше.Ну и такая же ерунда с дислайками, только если стоит лайк от этого же ID - он списывается.Таблица для qwerty.jpg, like - 12345, ID - столько же айдишек лайкнувших, dislike - 54321, ID - столько же айдишек дислайкнувших.Почему я не прав?Только приступил к ООП, на БД даже не смотрел пока
>>682620>ID - столько же айдишек лайкнувшихТы хочешь хранить ID всех лайкнувших в одной строке? Представь какого размера будет эта строка когда количество лайкнувших людей перевалит за 5 - 10к. Соответственно любые операции поиска\удаления в такой строке будут занимать очень много памяти и времени.
>>682625А обязательно иметь какие-то завязки и в графах таблицы? Почему нельзя просто кучу строк, как значений в массиве, сделать?Например, вот такой массив:$likes = array(id123,id234,id345,id456 ...)Чтобы найти нужное значение и чтобы его удалить, потребуются какие-то милисекунды.Чому в таблице это не возможно?Одна графа с картинкой/записью/видосом, графа с лайками - строки являются айдишками, графа с дислайками - строки с айдишками.
>>682625>Представь какого размера будет эта строка когда количество лайкнувших людей перевалит за 5 - 10кЯ представляю, сколько вообще в базе будет всего, когда столько или намного больше будет просто зарегистрировано.
>>682400Я не понял, мой вариант не очень?
>>682400Нахера лайку дата, вот нахера? Зачем всё усложнять?
По поводу этого >>682009 >>682018 никто, ничего сказать не может?
>>682641Статистику проводить. В какой день больше лаков например или в какой час и так далее. Модульность.
>>682603Лайки разных видов можно унаследовать от общего предка. Или сущности которые лайкаются можно унаследовать. Смотри, сколько вариантов решения.>>682603Тем что ты даже не рассматривал другие варианты.>>682620Чтобы проектировать БД надо изучить теорию, например нормализацию (у меня тут есть список: https://gist.github.com/codedokode/10539213#Теория-по-проектированию-БД )Без теории ты можешь придумать неправильное решение, например нарушающее принцип атомарности, и даже не понять почему оно неправильно. >>682625Это не главная пролема. Хуже то что по такой строке нельзя джойнить и нельзя делать перекрестные выборки вроде найти всех лайкнувших пост. >>682632Надо изучать теорию>>682638С внешними ключами твой вариант работает? Если нет, то не очень. Ну и хотелось бы не тыкать пальцем в небо а например рассмотреть какие вообще варианты возможны.>>682641Менеджерам и аналитикам нужна.
>>682649>Лайки разных видов можно унаследовать от общего предка.Каких "разных видов"?Чем лайк фото отличается от лайка комментария? И у того и у другого одинаковые свойства (кто поставил, куда поставил).Расширь условие пожалуйста.Ну и вообще ты с колокольни своего опыта конечно можешь придумать множество вариантов и вспомнить сотни случаев практического применения. Но ты забываешь, что здесь большинство начинащих, кто и дня не работал.Поэтому давай полное условие, я например не могу придумать какие могут быть "лайки разных видов", и зачем тут уперлось их наследовать.Тупо подгонять под указанный тобой паттерн не буду без оснований.>сущности которые лайкаются можно унаследоватьПользователя от комментария? Фото от пользователя?
Купить себе хостинг и доменное имя для того чтобы тестить свои эксперименты - это нормальная тактика?
>>682674Зачем тебе свои эксперименты заливать в интернет? Я думаю что локального сервера хватит вполне.
>>682676Чтобы не ебаться с апачом и показывать друзьям как я могу.
>>682677Апач настроить не сложно, и лучше научится, потому что это полезный навык. А показывать друзьям ты можешь и с локального сервера, при условии что у тебя белый айпи.
>>682681>А показывать друзьям ты можешь и с локального сервераА вот с этого места поподробнее. Это как вообще?
>>682686Можно апач настроить так, чтобы он был доступен из интернета. Для этого тебе нужен будет белый айпи (который не за НАТом) и открытый 80 порт на роутере.
Реквестирую конструктивную критику.inb4:>глобалы, глобалы вездеМожно в любой момент засунуть массивы в сами функции или передать параметрами, но это будет не красиво.>уродливые вложенные тернарникиДаже я (ньюфаг) разбираю чужие тернарники, как карточные дома. Тем более, что мои логично сконструированы, а не в собраны в одну строчку.>PHP Notice: что-то там offset на произвольной строчкеЕбался много дней над этим, но, к сожалению, не пришел к какому-либо определенному ответу.https://ideone.com/vXGibE
Что-то я подзабыл, как считать взаимные лайки в таблице? Я помню писал что-то вроде SUM(IF(from_id=to_id, 1))
>>682718А зачем такая функция нужна в социалочке?
>>682723Не спрашивай зачем, спрашивай как это реализовать?
>>682724Окей. Как это реализовать?
>>682728Не скажу, это ведь задачка от ОПа, а мы тут готовых ответов не даем.
>>682729>не даем готовых ответов в задачках от ОПа>каждый день тучи петушков оставляют тут свои решения, а ОП их комментирует и доделывает решение за нихНу-ну, лол.
>>682723Попробуй включить фантазию.На сайтах знакомств например. На сайтах по интересам.Взаимный лайк значит, что люди нравятся друг другу, и можно приступать к общению/ебле и т.д.Так что одна из самых важных функций.>>682734Оп как раз дает очень мутные советы, куда копать, что гуглить, и никогда не отвечает прямо.В принципе это правильно, хотя иногда бесит. Особенно когда ничего не получается, а тебе вместо подсказки подсовывают очередную загадку.
>>682664> Чем лайк фото отличается от лайка комментария?Лайк комментария ссылается на комменатрий, а лайк фото на фото.> Ну и вообще ты с колокольни своего опыта конечно можешь придумать множество вариантов и вспомнить сотни случаев практического применения. Но ты забываешь, что здесь большинство начинащих, кто и дня не работал.Это же тред обучения. Я хочу чтобы вы тоже умели.> Расширь условие пожалуйста.Ты предложил один вариант. Подумай какие еще варианты возможны, чтобы можно было сравнить их и выбрать наиболее подходящий. Ну еще например в твоей модели, чтобы узнать все лайки пользователя, надо делать юнион по всем табицам лайков. Не факт что это плохо, но хотелось бы знать какие есть другие варианты, может они еще лучше.>>сущности которые лайкаются можно унаследовать> Пользователя от комментария? Фото от пользователя?Можно унаследовать их от абстрактной ЛайкаемойСущности и лайкать ее. Хотя как мне кажется, тут это будет неудобно, наледование выглядит абсолютно навязанным, и неудобно будет добавлять лайки к новым таблицам. Лучше все же наследовать сами лайки. >>682681Плохая идея, надо комп держать включенным круглосуточно + всякой заразе снаружи удобнее атаковать тебя.>>682674Нормальная, но знай что есть бесплатные хостинги и даже домены. Но можешь и купить. Тогда лучше посмотреть - может у тебя и на полноценный VPS хватит? Там правда надо знать линукс и все настраивать самому зато ограничений намного меньше и у тебя права администратора.
>>682736Если непонятно так и напиши и попроси вторую подсказку. Но лучше конечно писать что именно непонятно.
>>682743> Плохая идея, надо комп держать включенным круглосуточно + всякой заразе снаружи удобнее атаковать тебя.Не обязательно круглосуточно, он же для показывания друзьями. Включил, показал и выключил. Но для чего-нибудь посерьезнее лучше купить хостинг, конечно.
>>682736>Взаимный лайкВешаешь лайкоприемник на объект и делаешь условное сравнение с объектами пользователей, которым поставил лайки наш пользователь, если лайки есть, то выкидывай оповещение о обоюдном лайке.>Оп как раз дает очень мутные советы, куда копать, что гуглить, и никогда не отвечает прямо.В принципе это правильно, хотя иногда бесит. Особенно когда ничего не получается, а тебе вместо подсказки подсовывают очередную загадку.Лол, как по мне, так он совершенно прямо отвечает, что нужно доделать или переделать.Но я начинал не с задачек ОПа (по-моему, они сложноваты для нуба, хоть я и согласен, что нужно начинать с хардкора), а с задачек для новичка с киберфорума. Попробуй для начала зайти туда, или есть акк вбыдлятне, то там паблики поищи.
Напомню себе проверить https://github.com/greenTea242/Student-list из поста >>677912
>>682767А меня не проглядел >>679463 ?
>>682767И меня >>679142
>>682767И меня проверь, у меня там по сокетам, 5-6 ответов выше, может поменьше.
>>682789Если твой пост в старом треде, дай на него ссылку. Если в новом - то позже, я пока старый тред проверяю.Анон, который не мог настроить автозагрузчик >>678190 - разобрался?
В старом треде прошелся и ответил на все неотвеченные вопросы:>>682831 калькулятор>>682834 палиндром, калькулятор, верстка>>682836 круг, калькулятор, верстка>>682838 правописание, верстка>>682839 верстка>>682842 резюме, исключения, переводы строкЗайдите и найдите свой пост, если вы что-то там писали. Если я вас вдруг пропутсил - напомните о себе в этом треде.
>>682743Хорошо, попробуем подогнать систему лайков под какой-нибудь паттерн (чтобы проделав этот сизифов труд прийти к первоначальному решению)Class Table Inheritancehttp://design-pattern.ru/patterns/class-table-inheritance.htmlСудя по картинке (а по чему еще судить? не вижу нигде подробного и внятного объяснения), предлагается вынести все общие свойства в одну таблицу (в примере это Player),под каждый отдельный класс завести отдельную таблицу и хранить в ней уникальные для этого класса свойства, а также (наверное) внешний ключ на общую таблицу.С трудом представляю, как подогнать наши лайки к этой схеме.Допустим, создадим таблицыlikes_common (id PK, from_user FK)likes_photo (photo_id FK, like_id FK)likes_comment (comment_id FK, like_id FK)likes_user (user_id FK, like_id FK)Что дает эта странная схема?+ Выбрать все лайки без юнионов тоже можно, непонятно правда зачем это может понадобиться (вывести в профиле список ссылок на лайкнутые объекты?), и как обозначить тип лайка (отдельной колонкой ENUM в таблице likes_common?).- Довольно хитрый запрос на вставку, нужна транзакция.Single Table InheritanceОдна таблица, где создаются поля на все случаи жизни, под все возможные свойства.В нашем случае что-то вродеlikes (id PK, from_user FK, type ENUM, photo_id FK, comment_id FK, user_id FK).+ Одна таблица, никаких джойнов, юнионов, транзакций и т.п.- Много пустых полей у каждой записи (не совсем понимаю как это влияет на производительность, но поговаривают что это плохо).- Нужна миграция при появлении нового лайкабельного класса, поле под него нужно будет добавить. Впрочем под те две схемы тоже нужно будет создавать новые таблицы под каждый класс.Concrete Table InheritanceДля каждого класса информацию хранить в отдельной таблице, вместе с общими свойствами, в отличие от class table inheritance.Да по-моему как раз соответствует тому, что я написал в первом посте, когда еще не слышал про этот паттерн. >>682541+ В отличие от class ti не нужна транзакция при вставке, один инсерт в соотв. таблицу.+ В отличие от sti нет вынужденных пустых полей.- Нельзя выбрать все лайки для разных классов (одновременно для комментариев, фото, пользователей) без юнионов. Хотя не представляю, в какой ситуации это может понадобиться.Больше критериев для сравнения не могу придумать. Пока побеждает concrete TI (если я правильно ее тут воплотил).Хотя и sti тоже годится из-за простоты и отсутствия джойнов. Хотя я не знаю в цифрах, как влияют на производительность джойны, и как влияет большое кол-во пустых полей.
>>682674Гитхаб раздает бесплатное имя и вдс
Кто-нибудь решил задачу про банкомат? Пытался придумать, но на частных случаях глохнет. Матаппарата не хватает. Моя прога максимум что может, так это раскидать купюры произвольно. Но никак не оптимизировать их соотношение в пользу крупных. А задачами оптимизации занимается динамическое программирование. Задача максимизации при заданных ограничениях. Эта раздел дискретной математики, вроде.
>>682972Тоже не не могу осилить. Говорят в треде, что жадное - не годится.
>>682974Вот ведь несправедливость: быдлокодеры в своих конторках пилят код за реальные деньги, а мы тут с академическими задачами ебемся, которые вообще решаются рекурсивно на другом языке.
>>682996Я эту задачу когда-то давно делал с рекурсией. Вообще в двух вариациях. С рекурсией и без.
>>683013Можно ее пропустить и попробовать сделать следующие? Мне просто уже не терпится SQL учить для маня-проектика.
>>682697Громоздко и работает не корректноhttps://ideone.com/m4tng8мимо проходил. не ОП
>>683023Ты это я
>>683023Вообще ее можно на любом решить, сути там нет пхп это будет или яваскрипт, там именно математика нужна. Я гуглил решение, но сам я такое хуй напишу - математика для меня слишком абстрактна. Накупил книжек по терверу и статистике, но не осилил дальше 10-15 страниц, потому нахуй забыл все курсы математики и вышмата со школы и универаочередной пхп-нюфаг
>>683084самое тупое решение что мне щас пришло просто прописать под каждое значение вплоть до 100 тысяч с помощью ООП, а после 100 тысяч идите нахуй, через кассу плезтот-же-нюфаг
>>682974Без ограничений задача решается очень просто рекурентной формулой, как прикрутить к этому ограничения хуй знает.
>>683088Анон, ты лучше математику подтяни. Она многи вещи облегчает в разы.
Бляя, я пытаюсь сейчас строку json на пхп распарсить, это просто пиздец какой-то. Ну просто пиздец, если бы эти данные у меня в mysql лежали, то выборка бы делалась в одну строку, а так посмотрите на этот велосипед. Неужели в пхп нет библиотек для парсинга джейсона?https://ideone.com/jDmpcI
>>683116Нахуй учить пыху, чтобы использовать ее в связке в джейсоном? Учил бы лучше ноду.
>>683094Базару нет, братишка, но если бы пока я учил математику мне платили бы хотя бы 10-15.т.р в месяц я бы блядь целый год посвятил этой царице наук. Но надо еще кушать, одеваться (работаю веб-макакой, сайтики поднимаю/продвигаю)поэтому для меня полезнее сначала освоить пхп хотя бы на мидл+, достаточного для программиста, а не юниора. Тупо потому что это позволит мне работать с вордпрессами-юмлами на новом уровне. Поэтому как только удастся освоить я сразу освою, а пока буду буксовать. В конце концов жизнь это всегда if / else
>>683094Как подтянуть математику? Школьные учебники курить?
>>683147
>>683147Зачем школьные? Ты же не школьник.Посмотри программу какого-нибудь мехмата мгу и рекомендованные к ней учебники они как раз entry level и читай@делай задания.
>>683155Начинать по порядку или эти книжки самодостаточны? Просто я начал курить третью, а там такой поток высшего матана, что я просто охуел.
>>683157Я учился в гуманитарной гимназии, алгебра была раз в неделю. В аттестате три стоит. Ну ты представляешь уровень, да?
>>682972>>682974Не пойму, вы общий вариант решить не можете или hard mode у этой задачи, когда 6600 надо выдать?У ОПа же там общий вариант без ограничений, я решал так, а он вроде бы одобрил.Общий вариант там решается легко, вы о чём вообще?Там один цикл foreach, несколько условий.Дальше с этой задачей я даже не стал возиться, потому что там алгоритмы, пока мне не под силу это всё.
>>683166Пойдёт для первого курса мехмата.
>>683160Они самодостаточны. Алгоритмы без математики понять будет сложно.Вот к примеру алгоритм решения задачи о рюкзаке. Я к примеру со своими скудными знаниями обосрался на 1 строчке.
>>683204А я давненько находил решение на паскале, и переписывал его на пхп, но оно все равно было неверно.
>>683182общий вариант несложно решить "жадным алгоритмом".Я не могу решить вариант с 6600
>>683208А где твоё решение с этим алгоритмом?И в чём суть его "жадности"?
>>683204Ещё бы не обосрался, ведь там очень неудачно это записано.
>>682972Ну смотри, тут можно начать с самого неэффективного, но простого алгоритма: перебрать все допустимые сочетания купюр:- если это сочетание дает нужную сумму, вывести его.А дальше уже думать как оптимизировать. Например не перебирать заведомо невыигрышные сочетания и в каком порядке перебирать.>>682996Академические? Не смеши. >>683023Ты можешь SQL учить параллельно с PHP, они не зависят друг от друга никак.>>683088ООП тут вообще при чем? >>683116Ты гуглить умеешь? php jsonКод ужасный, копипаста на копипасте. >>683145Ты миддлом не станешь если не способен организовать перебор всех комбинаций купюр. Мне кажется.>>683157Он же программистом хочет стать, а не механиком или математиком. Плохой совет, computer science это отдельная наука, но наверно анон не захочет лишком много теории учить, изучать компиляторы и нейронные сети вместо CSS и MySQL.>>683204Вот теория, откуда взяты обозначения: https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2Перевернутая ∀ значит "для любого"Круглая ∈ значит "элемент принадлежит множеству"Например ∀(i) ∈ {1, 2,3 }читается как "для любого i, принадлежащего множеству из цифр 1, 2, 3", или "где i равно 1, 2 или 3"f = 0, ∀(i) ∈ {1, 2,3 }Читается как "есть массив f, i равно 1, 2 или 3, а значения массива по этим индексам равно нулю"В коде это можно записать так: $f = array_fill_keys([1, 2, 3,], 0);Далее там есть знак объединения: { N ∪ {0} }Это значит "множество, полученное объединением множества N и множества состоящего из нуля". То есть если в множестве N не было нуля, он добавляется. В программе это можно написать так: $result = array_intersect($N, [0]);Ну и далее мы видим еще интересную штуку: {....} ⨯ { ... }Это декартово произведение множеств, то есть набор всех возможных пар значений из обоих множеств. Ну например для множеств { a, b } и { c, d,e } декартово произведение будет множеством пар: acadaebcbdbeПроизведение исплоьзуется так: ∀(i, j) ∈ {....} ⨯ { ... }То есть пары i и j принадлежат множдеству пар получившемуся в результате декартового произведения.Это по сути значит "i принимает все возможные значения из первого множества, а j - из второго".Соответственно первая строка читается: Возьмем 2-мерный массив f с индексами i, j и значениями равными нулю. Причем i взят из объеинения множества значений Nn и множества из одного нуля, а j из объединения Nb и нуляВ коде это выглядит как вложенный цикл, заполняющий массив: foreach (... as $i) {foreach(... as $j ) {$f[$i][$j] = 0;}}Вторая часть первой строки определяет массив zОбрати внимание на такие вещи: - математическая запись очень лаконична и короче чем код- математическая запись не определяет алгоритм, которым ты будешь создавать массив: циклом или например руками его опишешь. Она определяет лишь как должен выглядеть результат.То есть первая строка просто создает массивы f и z .
>>683243Ошибки: > $result = array_intersect($N, [0]);Неверно, на самом деле я имел в виду if (!in_array(0, $N)) {$N[] = 0;}> $f = array_fill_keys([1, 2, 3,], 0);Это можно записать проще: $f = [1 => 0, 2 => 0, 3 => 0];
>>683211В том что ты из заданного числа вычитаешь максимальное число из имеющихся в наборе и так далее спускавшийся по убывающей.как-то такhttps://ideone.com/lPJ1of
>>683248Блин, смотрю на решение - и не могу ни черта понять...И из-за оформления тоже:>$key => $valueНе понятно же, зачем так называть всё непонятно?Вот моё простое решение, месяц как раз прошёл: http://ideone.com/3w70JBПро "жадность" алгоритма понял, спасибо, у меня как раз такой же.
>>683255>$key => $value> Не понятно же$bills = array(100 => 23,500 => 5,1000 => 0,5000 => 200);Что тут непонятного$key - это будет 100 500 1000 5000$value - это будет 23 5 0 200
>>683266Я не об этом, это всё я прекрасно понимаю.Просто у меня сейчас привитый ОПом бзик: код должен быть понятен практически в любой точке.ОП такого не прививал и я наговариваю?Ну, может быть.Просто $key и $value здесь (да как и везде) являются определёнными сущностями, почему бы их и не назвать в соответствии с той ролью, которую они играют?Купюры и количество их.
>>683243И что там только две функции encode и decode а дальше с многомерным массивом работать, это же пиздец.
>>681860>>681863ООООООП?
>>681952Бамп вопросу, хочу apache-handler 2.0.
Аноны, а как изменить файл из проекта на гитхабе? Можно просто жать кнопку edit на сайте или что-то другое надо делать? Алсо у меня GUI github на шиндоус на компе и я консолькой не пользуюсь поэтому.
И правда через ноду джейсон парсится легче легкого.
>>683338А что гугл говорит?
>>683243>Ты миддлом не станешь если не способен организовать перебор всех комбинаций купюр. Мне кажетсяНа самом деле если материал разжевано подавать с числами вместо всех этих а b c d e я его понимаю, на живом примере. Я как-то сеошничал в конторке, там пацаны пилили вполне себе ПО для работы с налоговыми. Продукт на рынке, вполне успешен, в основном вся сложность была в регулярках, так как сверка данных по полям и значениям. Налоговая же. Все формулы заранее известны, у парней опыта по 2-3 года пхп, знания фреймворков нет, на чистой пхп. Зп у старшего 90, у остальных по 65. Я к тому, что мне вот эти переборы и банкоматы в хуй не уперлись, мне гораздо важнее работать с цмс и модулями для них, маркетинг, интернет-магазины. Ну например - сбор почтовых ящиков (в бд или файл - похуй) и рассылка их , аякс фильтры для магазина (+правка контроллеров, добавление новых полей и др), модули похожих товаров (вот здесь кажись есть математика, хотя мне кажется все проще и на ассоциациях тупо по %word% работает внутри категорий). Возможно, года через 2-3 я наверстаю этот момент и подниму навыки математики до нормальных, ибо нисколь не отрицаю важности ее, но я думаю что ее незнание можно скомпенсировать знанием языка и гуглом для допила вот этих всех дел, в дебри программирования я и не лезу - middle- уровня мне хватит с лихвой на данном этапе. Хобби у меня в музыке и звукозаписи, тут же чисто деньги и работа. Я вообще из верстки и sео пришел. Подучу пхп и возьмусь за ангуляр, т.к. конкуренция на рыночке требует. Цмску по книжке Янка написал, особо сложностей не встретил.
>>683375Какая такая Янка?
>>683376в середине подача нудная, так как дохрена кода идет и нет разбора его, так как в первой части книги он весь написан уже, а во второй допиливается. Но азы скл и работы пхп с скл в ней поданы на ура. Дальше как раз регулярки дают ну и в конце какие-то совсем йоба-примеры из жизни пхп-макак. Я еще не дошел.
>>683347Ничего хорошего.
Как научиться верстать адаптивно, я как-то никак не въеду в это, по обычному верстать умею, с адаптивностью проблемы.
>>683186зимний семестрЗащита населенияРабота на ЭВМ и программированиеАнглийский языкФизическое воспитаниеИстория ОтечестваМатематический анализАлгебраАналитическая геометриялетний семестрФизическое воспитание Работа на ЭВМ и программирование Математический анализЭкономическая теорияЗащита населения Введение в математическую логикуАнглийский языкИстория Отечества Я так понимаю, чтобы стать хорошим быдлокодером, нужно учить вот эти дисциплины, правильно? Это факультет математиков. У механиков точно такое же, только физики больше на первом курсе.
>>683243>Он же программистом хочет стать, а не механиком или математиком. Плохой совет, computer science это отдельная наука, но наверно анон не захочет лишком много теории учить, изучать компиляторы и нейронные сети вместо CSS и MySQL.Ты не прав, я хочу иметь хорошую, твердую палубу, на которой можно крепко стоять и не падать с нее, обосравшись, при морской качке типа той задачки с банкоматом. Я понимаю, что нужно уметь больше и эффективнее других, а чтобы уметь больше, нужно быть образованнее других, все это нужно, чтобы выигрывать на рынке труда с возможностью осилить какой-нибудь менее макакерский язык, ту же яву или си для перекатывания в индустрию поинтереснее.
>>683431Там не то что бы очень сложная математика, но на собеседованиях могут спросить про графы, алгоритмы сортировки (какие существуют, какие знаешь), оценку сложности этих алгоритмов (то самое Big O), и деревья какие-нибудь. Все это можно осилить с знаниями уровня первого курса любого днищевуза. Это та теория которая которая поможет тебе решать проблемы, если они возникают. Остальная, более сложная математика используется только в специализированном софте, но в России таких вещей почти не делают, да и попасть туда гораздо сложнее чем джуниором на PHP.
>>683434>графыНе, не слышал.>алгоритмы сортировки Вставкой и слиянием. Первый метод работает лучше с меньшим количеством элементов, второй с большим.>оценку сложности этих алгоритмовНе слышал.>деревья какие-нибудьТолько о бинарном слышал.Хорошо, спасибо, буду курить учебники.
>>683435Опять же, для устройства на работу это не обязательно знать, как когда-то объяснял ОП. Ну и от себя добавлю, походив по собеседованиям я понял что в вебе (по крайней мере на PHP, как по другим языкам не знаю) спрашивают в основном про фреймворки и просят сделать небольшое тестовое на них же. Но если хочешь стать лучше, то желательно и теорию знать, конечно.Палю полезный сайт по Big-O http://bigocheatsheet.com/
>>683437А как тестовое задание проходить? Какие вообще бывают? Сколько времени на него дают? Ты находишься под наблюдением и без интернета или у тебя полная свобода действий?
>>683438Это уже от компании зависит. Некоторые по почте присылают и дают несколько дней, некоторые приглашают тебя в свой офис, дают компьютер и ты делаешь там (никто не наблюдает конечно же). Или на собеседовании могут дать теоретическу задачу и спросить какие паттерны ты использовал бы на практике, как бы ты спроектировал архитектуру приложения, как бы спроектировал базу данных и т.д.
>>683440Меня спросили, что я знаю. Я говорю хтмл, ксс и меня взяли.
>>683266Он правильно написал. Названия переменных должны отражать то, что в них хранится. key и value это не названия, а бессмысленные слова которые автоматически вписывает IDE при вставке foreach.Точно также обычно не годятся всякие названия вроде tmp, str, data, var и тд. >>683321Ты спрашивал про "парсинг" json - я тебе написал что есть в PHP. Насчет многомерных массивов - правильно эта задача решается так: создается объектная модель, и с помощью какой-нибудь библиотеки-маппера json преобразуется в дерево объектов. Все нормальные люди делают так: в Яве, в C# есть библиотеки для этого.При чем тут PHP? Библиотеку-маппер можно написать или не написать на любом языке. Разработчики PHP виноваты что ты не написал такую библиотеку или что ты не смог ее нагуглить? >>683344Название библиотеки напиши, а то пока это утверждение без пруфов. >>681952Это phpstorm? Я писал пару дней назад, открой документацию и прочти как у них реализован сервер. У меня нет пхпсторма и я не могу сам проверить. И я даже не знаю какой кнопкой ты его запускаешь и что там у тебя в настройках.Если ты не смог найти подробности в документации сам - напиши, я погуглю.
>>683343Либо на гитхабе лиюо отредактировать файл у себя и закоммитить.> и я консолькой не пользуюсь поэтому.Ну и зря. Это ведь значит что ты не знаешь гит. Потому что осваивать надо именно через консольку, ГУИ там предоставляет ограниченный набор функций и в случае любой проблемы ничем не поможет. Есть книга по гиту на русском, не вижу проблемы прочесть ее.>>681860Вот описано как Апач определяет хост: https://httpd.apache.org/docs/current/vhosts/name-based.html#algСначала по IP сопоставляет и выбирает наиболее подходящие, а только потом среди выбранных смотрит имена. > По mysite и test подключаешься все равно к главной - wtf?Потому что поиск по IP дает что для запросов пришедших на интерфейс 127.0.0.1 подходит только последний блок. И выбирать можно только из него.Что делать? Неужели все пропало? Нет не все. Может быть виртуал хост может соответсовать нескольким IP? Открываем мануал по VirtualHost и внимательно-внимательно изучаем синтаксис: https://httpd.apache.org/docs/current/mod/core.html#virtualhostПочитай этот мануал и попробуй сам придумать решение, если не придумаешь или не сработает - пиши.
>>683375Так на собеседовании на миддла тебя могут попросить решить задачу на перебор. > там пацаны пилили вполне себе ПО для работы с налоговымиА на собеседовании тебя попросят перевернуть бинарное дерево. > знания фреймворков нет, на чистой пхп. Тут нечем гордиться. Завтра у их конторы начнутся сложности и куда они пойдут? Что они покажут на собеседовании, свой велосипед? > мне гораздо важнее работать с цмс и модулями для них, маркетинг, интернет-магазины. Ты говоришь как будто это какие-то отдельные знания. Если ты хорошо знаешь пхп и веб-приложения то быстро в них разберешься, если нет то будешь лепить кривые костыли.Нет никакого смысла изучать конкретную CMS так как их десятки, они насквозь состоят из быдлокода и постоянно меняются. Есть смысл изучать более общие вещи, с которыми ты сможешь разобраться в любой CMS.Ну смотри, я ведь ничего не навязываю - хочешь, ковыряй CMS. Хочешь простую задачу на CMS - держи: - сделать на вордпрессе клон https://m.roem.ru/- редакторы добавляют новости, ставят теги, пользователи читают и комментируют- дизайн берем с мобильной версии роема (он проще)- код надо сделать в виде расширения или темы для вордпресс, он дложен быть отдельно чтобы можно было взять вордпресс, установить на него твой модуль и все работало.> . Подучу пхп и возьмусь за ангуляр, Ангулар это один из сложнейших JS фреймворков. Чтобы разобраться в нем, надо отлично знать JS, DOM, понимать что такое MVC, data binding, DI. Посмотри код ангулара и попробуй разобраться если думаешь что он простой.Я сомневаюсь что почитав/посмотрев несколько уроков ты продвинешься дальше хелло ворлда. Реальные приложения ты вряд ли сможешь научиться делать так быстро. Ну и если тебе интересная эта тема, в ОП посте есть задачка на SPA.
>>683413Адаптивная верстка = верстка, подстраивающаяся под разные устройства и отображающаяся на них наилучшим образом.По факту это сводится к использованию @media правил для изменеия раскладки при переходе ширины через определенную границу. Например, меньше 800px у нас одна структура страницы, а больше - другая.Можешь привести краткий пример что именно не получилось сделать в последний раз? >>683425> История ОтечестваСамая нужная программисту вещь. Лол, некоторые люди еще и платят за это. > Я так понимаю, чтобы стать хорошим быдлокодером, нужно учить вот эти дисциплины, правильно? Нет, из полезного тут только английский. Программисты изучают языки программирования, алгоритмы, структуры данных, паттерны, ООП, архитектуру.
>>683434Да не нужна вузовская математика чтобы посчитать сложность алгоритма. Там нет операций сложнее чем возведение в степень.Есть конечно области, где математики больше - например, машинное обучение и искуственный интеллект - там нужны основы теории вероятности, комбинаторики. >>683437> Палю полезный сайт Вот с одной стороны красиво сделано. Но я подумал, люди могут неправильно понять и попытаться заучивать все это. А ведь учить не надо - если ты понимаешь как устроен и работает массив или связанный список, ты эти сложности алгоритмов и так знаешь.
>>683435Изучай алгоритмы и структуры данных. Начать можно хоть с гугла: https://www.google.ru/search?q=%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D0%BC%D1%82%D1%8B+%D0%B8+%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&newwindow=1&gbv=1&sei=tYTiVp3RNIm56AS75rKoBwhttps://www.google.ru/search?q=%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&newwindow=1&gbv=1&sei=94TiVofKHcmY6ASjppioAghttp://aliev.me/runestone/>>683438Бывает еще штука как дают задачу и просят тут же решить, на листочке бумаги или на доске. Бывает то же самое удаленно - через сервис редактирования кода.
>>683425Алгебра и геометрияАрхитектура компьютеров и операционные системыБазы данныхВведение в алгебраическую топологиюВведение в математический анализВведение в программированиеМатематическая логика и теория алгоритмовМногомерный анализ, интегралы и рядыОбъектно-ориентированное программированиеОсновы комбинаторики и теории чиселМатематическая логикаМатематика и программирование на первом курсе.
>>683515подожди с задачками, я еще свою дописываю по книжке)я там студентов думал делать следующимиангуляр да, я пощупал, штука сложная. Но бояться сложностей - то можно и из дома не выходить
>>683413скачай шаблон на бутстраппе и посмотри за счет чего там адаптивность, поковыряй стили. Если средствами разработчика в хроме / мозилле пользоваться умеешь - поймешь через секунду
>>683413Use @media, Luke!
Ввожу этот код:<?php$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');if (!$link) { die('Ошибка соединения: ' . mysql_error());}echo 'Успешно соединились';mysql_close($link);?>Выводит ошибку:Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\Apache24\htdocs\database.php:3 Stack trace: #0 {main} thrown in C:\Apache24\htdocs\database.php on line 3
>>683568Если что, php7, apache 2.4, mysql 5/7
>>683568>>683572Еще добавлю - оче много гуглил, пишут что надо что-то менять в php.ini, я был раскомментировал строку с extends mysqli.dll, вырубил апач, но запускаться он не хотел(ошибка 1067 или как-то так).
>>683568>>683572>>683584Алсо, самое обидное то, что спросив у быдлогруппников, сказали мол поставь себе денвер или опенсервер, что ты как лох всё отдельно ставил.
Помогите решить задачку ;-;Мне нужно, чтобы выводилось минимальное значение по ключу ["score"], а min() сравнивает подэелементы многомерного массива по ключу "type" почему-то. https://ideone.com/S5i9mI
>>683562Я имею в виду что ангулар надо учить после других вещей, а не сразу. Изучи хорошо сам JS, разберись с концепцияим которые испльзуются в ангуларе, а не спеши делать хелло ворлды.>>683565Плохой совет. Если смотреть примеры, лучше гуглить статьи типа "N лучших адаптивных сайтов". >>683566Там не только медиа, там еще верстать надо уметь резиново.>>683572Расширение mysql выпилили. Используй PDO>>683586Они тебе плохие советы дают. Какая выгода от сборки? Устаревший пхп, и дополнительные проблемы с которыми тебе никто не поможет.
>>683597>Расширение mysql выпилили. Используй PDOPDO, ЧСХ, тоже не робит.Ввожу это:<?php$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'username', 'password');?>Выводит это:Fatal error: Uncaught PDOException: could not find driver in C:\Apache24\htdocs\database.php:2 Stack trace: #0 C:\Apache24\htdocs\database.php(2): PDO->__construct('mysql:host=loca...', 'username', 'password') #1 {main} thrown in C:\Apache24\htdocs\database.php on line 2
>>683598Нужно разрешить в php.ini или может скачать драйвер mysql для pdo.
>>683601А что в php.ini то делать?
>>683615Посмотри на официальном сайте в разделе установка pdo.
>>683597Я просто не мог понять почему у меня не работает медиа, ну а бутсрапп по мне так идеальный пример - там все задано в em, % и наследуется.
В общем, посмотрел в phpinfo, мои pdo drivers no value.Загуглил, раскомментировал все пдошки в php.ini, выключил апач, поставил запустится апач и вывело ошибку 1067 "процесс был неожиданно завершен".
>>683640В итоге получилось, что запускается только если закомментировать пдошки.;extension=php_pdo_firebird.dll;extension=php_pdo_mysql.dll;extension=php_pdo_oci.dll;extension=php_pdo_odbc.dll;extension=php_pdo_pgsql.dll;extension=php_pdo_sqlite.dll;extension=php_pgsql.dll;extension=php_shmop.dll
>>683641Ты уверен, что в папке расширений присутствуют все эти библиотеки?
>>683642Проверил, да, они есть.
>>683648Показывай тогда лог ошибок апача
>>683640Там нужно всего лишь добавить две строчкиextension=php_pdo.dllextension=php_pdo_mysql.dllи перезапустить php (не только апач).Об этом сказано в оф.мануале.http://php.net/manual/ru/pdo.installation.phpНе нужно копировать куски конфига из результатов выдачи гугла, нужно понимать что делаешь.>>683648Ты понимаешь, за что отвечает каждый файл?
>>683651Ошибка постоянно одна и та же - 1067.
>>683653Я про содержимое текстового документа error.txt в папке logs апача
>>683658Вот так как-то.Взял один небольшой кусок с конца, всё в принципе одинаково[Fri Mar 11 12:14:58.650106 2016] [mpm_winnt:notice] [pid 2600:tid 436] AH00354: Child: Starting 64 worker threads.[Fri Mar 11 12:26:28.069813 2016] [mpm_winnt:notice] [pid 5000:tid 476] AH00422: Parent: Received shutdown signal -- Shutting down the server.[Fri Mar 11 12:26:30.097817 2016] [mpm_winnt:notice] [pid 2600:tid 436] AH00364: Child: All worker threads have exited.[Fri Mar 11 12:26:30.113417 2016] [mpm_winnt:notice] [pid 5000:tid 476] AH00430: Parent: Child process 2600 exited successfully.AH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using fe80::319a:fba7:ebdf:9a22. Set the 'ServerName' directive globally to suppress this messageAH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using fe80::319a:fba7:ebdf:9a22. Set the 'ServerName' directive globally to suppress this message[Fri Mar 11 12:26:56.311471 2016] [core:warn] [pid 7880:tid 472] AH00098: pid file C:/Apache24/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?[Fri Mar 11 12:26:56.342671 2016] [mpm_winnt:notice] [pid 7880:tid 472] AH00455: Apache/2.4.18 (Win64) PHP/7.0.1 configured -- resuming normal operations[Fri Mar 11 12:26:56.342671 2016] [mpm_winnt:notice] [pid 7880:tid 472] AH00456: Apache Lounge VC14 Server built: Dec 9 2015 11:13:29[Fri Mar 11 12:26:56.342671 2016] [core:notice] [pid 7880:tid 472] AH00094: Command line: 'C:\\Apache24\\bin\\httpd.exe -d C:/Apache24'[Fri Mar 11 12:26:56.342671 2016] [mpm_winnt:notice] [pid 7880:tid 472] AH00418: Parent: Created child process 5372AH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using fe80::319a:fba7:ebdf:9a22. Set the 'ServerName' directive globally to suppress this messageAH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using fe80::319a:fba7:ebdf:9a22. Set the 'ServerName' directive globally to suppress this message[Fri Mar 11 12:26:56.654672 2016] [mpm_winnt:notice] [pid 5372:tid 436] AH00354: Child: Starting 64 worker threads.[Fri Mar 11 12:30:20.208926 2016] [mpm_winnt:notice] [pid 7880:tid 472] AH00422: Parent: Received shutdown signal -- Shutting down the server.[Fri Mar 11 12:30:22.236930 2016] [mpm_winnt:notice] [pid 5372:tid 436] AH00364: Child: All worker threads have exited.[Fri Mar 11 12:30:22.268130 2016] [mpm_winnt:notice] [pid 7880:tid 472] AH00430: Parent: Child process 5372 exited successfully.AH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using fe80::319a:fba7:ebdf:9a22. Set the 'ServerName' directive globally to suppress this messageAH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using fe80::319a:fba7:ebdf:9a22. Set the 'ServerName' directive globally to suppress this message[Fri Mar 11 12:34:51.121848 2016] [core:warn] [pid 8016:tid 476] AH00098: pid file C:/Apache24/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
>>683652А как перезапустить конкретно пхп?Просто я обычно если что перезапускаю апач, он у меня службой сделан, я просто в консоли пишу net stop и net start.
>>683637Из твоего описания проблемы я тоже понять не могу. Алсо, кроме медиа надо еще изучить тег meta viewportБутстрап далек от идеала. Например он ставит box-sizing: border-box и ломает всю стороннюю верстку, также использует имена классов без всяких нейспейсов - легко получить конфликт. Потому бутстрап годится только для простых проектов где он используется с самого начала.Я вообще от него не в восторге.>>683640Отлаживай ошибку, запустив PHP в консоли: c:\php\php.exe c:\tmp\1.phpПосмотри что выведет.Скорее всего баг или какой-то библиотеки dll не хватает. Ты можешь программой dependency walker если не боишься посмотреть dll от PDO и что им нужно.гугление показало что 1067 значит> Error 1067; The process terminated unexpectedly. То есть Апач падает. Надо бы проверить, какими компиляторами собраны Апач и PHP - совместимыми? Ну то есть когда ты скачиваешь, там ведь есть выбор VC9, VC11 - они должны быть одинаковыми для Апача и пхп>>683668php работает как модуль апача, то есть Апач подключает php как библиотеку в свой процесс.
>>678219 Я же написал выше. Тебе надо сделать файл bootstrap.php чтобы после его подключения автозагрузка люых классов работала. Если что-то непонятно, то задавай учтоняющие вопросы. Я этот файл за тебя не напишу.Примеры можешь погуглить в сети.>>678252Твой код в посте не выдаст никаких ошибок. Добавлять элементы в массив можно.>>678280 Нельзя обращаться к элементу если не уверен что он есть.>>678289Ответы в старом треде: >>682836 (1-е) >>682838 (2-е) >>682839 (4, 5, 6-е)>>678291Странная у тебя логика - не могу исправить ошибку, давайте просто их игнорировать. >>678298Посмотри, хуже от дополнительных источников не будет.
>>678415> Но уж если разработчики yii пошли таким путем, то и мне можно (жираф большой, ему видней).Да там не все сделано правильно, разработчики Юи любят проявлять "оригинальность" в этом плане. Уверен что они просто не подумали о нескольких вкладках. Вот и думай, стоит ли поддерживать изначально не всегда работающий код или сделать какое-то свое решение, в идеале повторно испльзуемое расширение для Юи.> Но "твой" способ (че-то я сомневаюсь, что вот прям сейчас это сам изобрел) действительно самый оптимальный. Если не учитывать замусоренность полученного урл.Много где так делают. Да и я его не изобретал, а просто сравнил возможные варианты (гет/куки) и выбрал тот что получше. > Как сказать. Теорию я неплохо знаю, все эти заголовки, методы. Помню пару месяцев назад мы вскрывали эту тему, ты мну даже заставлял формировать post запросы руками. С курлом знаком, с guzzle.Ну ок, видимо действительно знаешь. > Наверняка это какой-нибудь паттерн, которому даже дали глубокомысленное имя.Не знаю. Вообще, гет-параметры предназначены для передачи дополнительных параметров на сервер, так что это как раз естественное их использование.>>678789 1 сущность (студенты) = 1 таблица. Причин разбивать ее нет.>>678795 В студентах нужна одна таблица.>>678846> if(is_array($answers))Это лишний код.> $arrayKeyЭтой переменной не существует, ты не можешь ее использовать.Чтобы добавить элемент в массив, необязательно указывать ключ - перечитай урок про массивы например.> а) Массив создаётся в функции и не является глобальнымда> б) Всё можно реализовать более простым образом, но я всё испортил. можно убрать бессмысленный if is_array и $arrayKey> 3) Дальше я увидел, что вопросы прописываются уже в функции, но в примере вопрос №1 и вопрос №2 обозначаются одной переменной $q. Это же для простоты или я тупой?После того как мы положили объект из переменной в массив, переменная нам не нужна и можно поместить в нее новый объект> 4) Нужно ли указывать ключ при создании такого массива в рамках этой функции или всё можно отдать автоматическому назначению?Не нужно. Зачем? > 5) Но тогда какой толк от этой функции, если так собрать все вопросы в массив можно и без самого создания функции. вынести код создания списка вопросов отдельно от остального. Код надо разбивать на части, а не писать стеной.
ОП, ты сегодня ответишь про сокеты? Там высоко мои посты. И про мемкеш, я все равно не знаю с чего начать.
>>678851 Очень просто. При обращении браузера к веб-серверу на веб-сервере запускается скрипт, и все что он выведет, отправляется в браузер (по умолчанию как HTML код).>>678883Пости код и задавай вопросы если что-то непонятно>>678954Скорее всего после исключения твой скрипт завершится, а при завершении открытые соединения закрываются.>>678960 Нормально. Это специально так сделано.Но вообще, если ты хочешь знать, в других языках вроде явы делают по другому. Там ведь приложение не завершается после обработки запроса, а ждет следующего запроса. Там делают объект - менеджер соединений, просят у него соединение, обрабатывают запрос, отдают назад. То есть код выглядит примерно так: $connection = $connectionPool->getConnection();try { processrequest();} finally { $connectionPool->recycleConnection($connection);}То есть тут явно есть и выделение соединения и уничтожение. Конструкция finally позволяет сделать это даже при выбросе исключения (англ: https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html )>>678963 Не стоит им доверять. И деструкторы довольно непредсказуемая штука, лучше их не использовать лишний раз. >>678969 Тут помог бы объект который управляет соединениями, выделяя их и забирая обратно. И переподсоединясь при необходимости. Преимущество в том что мы можем менять логику работы с соединениями не трогая остальной код.
>>678983 Примечания к задаче читал? >>679013> Как сабмитить форму, Изучить какие хттп запросы отправляются> Как запускать парсер раз в суткикрон> но я никак не могу найти описания как с ним работать.гугли man cron и вообще, ты плохо гуглил, инфы полно: https://www.google.ru/search?q=%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+%D1%81+%D0%BA%D1%80%D0%BE%D0%BD%D0%BE%D0%BC&newwindow=1&gbv=1&sei=sqDiVsKRKeTt6AS587roCA> Он уже стоит на самом хостинге, как с ним можно взаимодействовать?Либо командная строка и команда crontab либо на хостинге есть панель для добавления задач, что хуже.
>>683668То для fpm.Погугли по тексту ошибки.http://serverfault.com/questions/77747/apache-unclean-shutdown-of-previous-apache-runЗакомментируй или поудаляй то что ты накопипастил в php.ini, нужны только 2 строчкиextension=php_pdo.dllextension=php_pdo_mysql.dllТы походу наподключал что-то лишнее, поэтому падает.
>>679186Соединяешься и читаешь данные из соединения через fread или socket_read, пишешь в файл через fwrite.> Я имел ввиду запуск сокет сервера (для его работы же нужен демон?) и запуск сокет клиента на ява скрипте.Я вроде писал выше: чтобы браться за вебсокеты, надо изучить обычные сокеты Беркли. И как устроен интернет, и что такое TCP/IP.Вот: устройство интернета, IP, DNS -> TCP/IP, сокеты, порты -> HTTP -> вебсокеты -> { протоколы поверх веб-сокетов вроде WAMP, также почитать про JSON-RPC, асинхронное программирование на PHP } > Про мемкеш тоже не понял, что за командыУ мемкеша есть текстовый протокол, по которому клиент соединяется с сервером и посылает команды. Ты бы мог реализовать свой сервер который поддерживает эти команды. Описание протокола нагуглишь? >>680134Он ошибается. Ты изучаешь сокеты и тебе лчше работать с ними напрямую а не через обертки. Обертки - это streams, их тоже конечно полезно изучить, это абстракция над любыми потоками в пхп.>>683697Не знаю. Напиши ссылку на пост с вопросом на всякий случай.
>>683705> Не знаю. Напиши ссылку на пост с вопросом на всякий случай.Ну ты вроде по порядку идешь. Думаю, наткнешься. Я сейчас не могу искать, я на работе, вдруг босс спалит, что я двачую.
>>683707>я на работе, вдруг босс спалит, что я двачую
Поставил убунту на виртуалбокс. Клёвая штука, жаль тормозит сильно.
>>683746Поставь дуал. У меня на ноуте летал, как поставил
>>683748Что за дуал? Если ты про ядра, то уже стоит.
>>683746В чем заключается клевость убунты? Разноцветные менюшечки?Через вагрант еще удобно, можно настроить так, что файлы проекта на хосте, с ними можно работать в уютной иде, а сервера и прочий служебный софт на виртуалке без графики.Пробросить порты так, чтобы можно было обращаться из адресной строки браузера к приложению которое обслуживает сервер на виртуалке.Я имею ввиду работать в phpstorm и просматривать свое приложение в браузере в основной операционной системе, а сервера ставить на виртуальную машину, к которой обращаться по ssh.>>683751Имеет ввиду две операционные системы рядом. Но это неудобно, каждый раз перезагружаться.
>>682049В ОП-пасте треда вёрстки в /wrk/ есть примеры.
>>683746А ты видеокарту ей пробросил? Надо чтобы у тебя была видеокарта с актуальными драйверами, в настройках виртуалки было включено 3д-ускорение и в гостевой Убунте стояли Virtual box guest additions: http://askubuntu.com/questions/139320/enable-graphics-card-in-virtual-box/139322#139322(правда ссылка старая)Я запускал не так давно убунту на реальном железе, вроде не особо томрозит, правда грузится долго, минуты две, я конечно к такому не привык. А дебиан грузится до экрана логина терпимо (почти как винда), но логинитсяч чуть ли не минуту - такое ощущение что они просто перенесли запуск всяких сервисов на попозже. И память там надо минимум мегабайт 700-800.>>683707Если по порядку то отвечу когда дойду - сейчас я на 7 марта остановился.>>683759Я использую дебиан без графики, а файлы внутрь закачиваю через rsync.
>>683505>для запросов пришедших на интерфейс 127.0.0.1 подходит только последний блок. И выбирать можно только из него.Так а ты глянул вторую ссылку? Я там и попробовал, стало еще хуже>Может быть виртуал хост может соответсовать нескольким IP? Чем это отличается от моего варианта? Мой только длиннее. Или это типа "разное"? На фоне фактической незначимости различий между СерверНэймом и СерверАлиасом как-то странно даже.Но я попробовал переделать:http://pastebin.com/ftNqPwTXВсе так же, как во втором варианте, осталось.
>>683817rsync именно синхронизирует, т.е. создает копию файлов?Можно же расшарить папку и сделать на нее ссылку в гостевой системе.Или тут есть подводные камни?Обычно делаю так:root /home/vagrant/www/example.comили DocumentRoot /home/vagrant/www/example.com для апачаГде /home/vagrant/www/example.com ссылка на /vagrant/example.com, который в свою очередь указывает на расшаренную папку на хосте, где содержится Vagrantfile.В самом Vagrantfile проброс порта config.vm.network "forwarded_port", guest: 80, host: 8080Выглядит запутанно, но есть возможность спокойно работать в основной операционной системе с файлами проекта, и тут же тестить его в браузере.Если нужно сменить версию php или еще что, переключаемся на другую машину с соответствующим окружением.
Киньте годные гайды для начинающего пердолика Opencart. Везде КАК КЛИКАТЬ МЫШКОЙ В АДМИНКЕ, а полезной инфы по разработке нет. Или это тайный заговор разработчиков платных модулей?
>>683860rsync копирует измененные файлы в виртуальную машину.Расшаренные папки, говорят, намного медленнее, хотя я не проверял. Вагрант для этого вообще не нужен - виртуалбокс умеет расшаривать папки.
>>683864Я зашел на секретный сайт google.com и ввел "opencart документация", выдало такие ссылки:http://docs.opencart.com/developer/module/http://docs.myopencart.com/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0http://forum.opencart-russia.ru/threads/rukovodstvo-razrabotchika.14/http://woo.zp.ua/opdoc/articles_admin/По ссылкам нужно перейти и прочитать что там написано. После прочтения осмыслить, применить полученные знания на практике.Отпишись потом на каком пункте возникли сложности.OpenCart кстати написан на php, если ты знаешь php, можно прочитать его исходный код и самостоятельно разобраться.
>>683842Сделай c:\apache\httpd.exe -t чтобы проверить синтаксис. Исправь возникшие замечания. Далее сделай ......httpd.exe -t -D DUMP_VHOSTSЧтобы просмотреть как Апач понял твой конфиг.
>>683872А ты неплох. >OpenCart кстати написан на php, если ты знаешь php, можно прочитать его исходный код и самостоятельно разобраться.Если бы не количество наследований, методов и мое недостаточное понимание ООП. Так, например, если с представлением особых проблем нет, понимать логику в контроллере для меня слишком сложно. Что говорить, если я даже не знаю, где описан метод класса, перебирая файлы по порядку.
>>683864Тебе нужно искать на офсайте раздел вроде developers, developer docs. Вот я зашел http://docs.opencart.com/ и вижу - слева раздел developer- снизу список книгВсе конечно на англйиском.>>683876> Если бы не количество наследований, методов и мое недостаточное понимание ООП.Значит у тебя пока недостаточно знаний чтобы писать расширения для опенкарта, если ты не можешь читать его код. А ты решал наши задачи на ООП? Вектор? Кошки-мышки? Студентов? > Что говорить, если я даже не знаю, где описан метод класса, перебирая файлы по порядку.Используй IDE которая умеет по клику переходить к определению или Sublime 3 который тоже это умет.
>>683876> если я даже не знаю, где описан метод класса, перебирая файлы по порядку.Ну и вообще тут можно было бы подумать логически: - определяем какого класса объект перед нами- по имени класса понимаем в каком он файле- переходим туда и ищем методПараллеьно можно на бумажке или где-то еще рисовать схему классов.
>>683487Мне неудобно тебя просить, но после безрезультативного долгого скролинга запросов how to switch fastcgi to apache2handler я отчаялся, погугли пожалуйста. Я не очень силен в техническом английском чтобы одолеть их документацию. Это проблема точно в пхпшторме, я запускал php скрипт с пхпифно из htdocs в папке апача и там server api был apache 2 handler.
>>683875Блядь. 127.0.0.1:80 перезаписан другим 127.0.0.1, возможно, вам следует поюзать вот эту шнягу http://httpd.apache.org/docs/2.2/mod/core.html#namevirtualhostНихуя не понял, зачем она нужна, видимо, моего инглиша не хватает, либо доки слишком техничны и рассчитывают, что смысл написанного мне станет ясен. Таких два предупреждения (одинаковых). Синтаксис - ок.
>>683886>>683887Лол, ровно два рузке ваньки-дауна с разницей 8 секунд.
>>683887Тем не менее ты получил ответ на вопрос почему. NameVirtualHost разрешает использовать для данных IP и порта поиск по имени. Если ип\порт там не прописаны - для них поиск по имени не делается.
Как сделать на css или js то что у меня на картинке? Предпочтительнее на css.
>>683940Это делается на png.
>>683942Но как?
Стоп, в убунте файлы можно создавать только в home директории?
>>683976Нужно сначала набрать sudo rm -rf / --no-preserve-root и ввести пароль, тогда сможешь создавать везде.
>>683984А ты остряк
>>683976Почитай про права на файлы в линукс.
Где скачать php.pdo.dll? Нету его в папке ext
ОП, стоит ли использовать что-то типа adminer?
>>683893>NameVirtualHost разрешает использовать для данных IP и порта поиск по имени. Если ип\порт там не прописаны - для них поиск по имени не делаетсяЯ ни черта не понял.Что и куда я должен дописать к >http://pastebin.com/ftNqPwTX?
>>684052Можно, если ты не на стадии изучения основ работы с mysql. Если начинающий - используй командную строку. Я сам ей пользуюсь - все равно для выборок которые мне нужны в админере придется писать запрос руками. >>684073Смотри: https://httpd.apache.org/docs/2.2/vhosts/name-based.html> To use name-based virtual hosting, you must designate the IP address (and possibly port) on the server that will be accepting requests for the hosts. This is configured using the NameVirtualHost directiveТы обязан указать IP на который приниамются запросы, чтобы использовать виртуальные хосты с разными именами. Это делается директивой NameVirtualHost.> The argument to the <VirtualHost> directive must match a defined NameVirtualHost directive.Аргумент для VirtualHost должен соответствовать аргументу директивы NameVirtualHost.далее: https://httpd.apache.org/docs/2.2/mod/core.html#namevirtualhost> The NameVirtualHost directive is a required directive if you want to configure name-based virtual hosts.Если ты не записал пару ИП/порт в namevirtualhost virtualhost с этой парой не будет рассматриваться при поиске каким хостом обработать запрос.
Что писать в httpd.conf?Смотрю видео, там 3 строки есть, но там для 5 пхп. Скиньте строки для 7 версии.
>>684171ААААА. Вообще нихрена не понятно, чувак!>Ты обязан указать IP на который приниамются запросыНу, указал звезду и локалхост>Это делается директивой NameVirtualHost.Но нет же, это делается аргументом VirtualHost!>Аргумент для VirtualHost должен соответствовать аргументу директивы NameVirtualHost.Гуда сам этот нэймвиортуалхост девать-то? И зачем вообще?>Если ты не записал пару ИП/порт в namevirtualhost virtualhost с этой парой не будет рассматриваться при поиске каким хостом обработать запрос.А это еще зачем? Мне же наоборот нужно, чтобы искал.
>>684234>php 7https://wiki.archlinux.org/index.php/Apache_HTTP_Server#ConfigurationПосмотри это, например.
Я тут уже постил свой парсер HTML, чинящий структуру документа.Меня обосрали, сказали использовать DOM. Покурил DOM, охуел с его многословности, охуел с засовывания всей DOM-структуры в память ради малейшего чиха.Проще говоря, DOM выглядит стрелянием пушкой по воробьям. Нет, серьезно, в веб-ориентированном языке PHP не завезли валидации и чистки html из коробки, одним методом. Извольте вывалить в память кучи объектов элементов и ходить по ним циклом.Теперь передо мной встала еще более амбициозная задача - удалять из тегов все атрибуты, кроме разрешенных.Под спойлером моя рваная жопа.СНАЧАЛА СОЗДАЙ ОБЪЕКТ ДОМ-ДОКУМЕНТ, СКОРМИ ЕМУ HTMLЧЕ, ДУМАЛ ЩА ВСЕ БУДЕТ? ХУЙ!СОЗДАЙ ОБЪЕКТ XPATH НА ОСНОВЕ DOM-ДОКУМЕНТАТЕПЕРЬ У ТЕБЯ DOM-ДЕРЕВО, В КОТОРОМ АТТРИБУТЫ ТОЖЕ ДЕТИ ЭЛЕМЕНТАЧЕ, ДУМАЛ ЩА ВСЕ БУДЕТ? ХУЙ!С ПОМОЩЬЮ ЯЗЫКА ЗАПРОСОВ XPATH ЗАМАТЧЬ ВСЕ АТТРИБУТЫ ЗАПРОСОМ ВИДА //@звездочка ПРОЙДИСЬ ЦИКЛОМ ПО ВСЕМ АТРИБУТАМУДАЛИ ВСЕ ОБЪЕКТЫ-АТРИБУТЫ С НЕНУЖНЫМИ NODENAMEСГЕНЕРИРУЙ НОВЫЙ HTML-КОД НА ОСНОВЕ ЭТОГО DOM-ДОКУМЕНТАТак, ладно. Регулярки использовать нельзя, на стековерфлоу засмеют. О, есть сторонние модули, написанные на PHP. Уж лучше DOM.Секунду, есть официальные инструменты от Zend! Ура, мое спасение!http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Filter/StripTags.phpОй, а что там внутри. Там - РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯКОТОРЫЕ НЕ СМАТЧАТ ВАЛИДНЫЙ АТРИБУТ ТИПА <span class=test>И ДАЖЕ В <input type="text" required> REQUIRED НЕ ЗАМАТЧИТСЯКороче, пацаны, это пиздец.Сейчас сяду писать свой чистильщик, который будет чистить-чистить-чистить за один цикл, без регэкспов.На машине состояний, как советовал мне анон, поэтому пятиэтажных if не будет.
>>684171Хм. Бред, но апач отказывается принимать для NameVirtualHost два аргумента, НО можно написать два раза с разными аргументами. Но тогда вскрывается интересный тупняк: ServerAlias localhost 127.0.0.1 все равно отправляют меня на дефолт сервер, хотя server - туда, куда я его просил в последнем файле. Попробовал указать server в качестве ServerName, а не первым ServerAlias, ничего не поменялось.
>>684263Мне от этой ссылки толку 0. Я смотрел как установить апач и пхп по этому видео https://www.youtube.com/watch?v=bnuAD3b5t9cи под конец установки вывело ошибку 1 в консоли, когда уже запускал через net start apache2.4
>>684282чёт сажа приклеилась
>>684251А ты документацию прочел? По всем упомянутым директивам? NameVirtualHost включает поддержку name-based virtual hosts (виртуальных хостов, определяющихся по имени) для данного IP (и при указании, порта). Если ты там не указал какой-то IP, который испльзуется в VirtualHost то эти VirtualHost не будут работать для данного IP. О чем тебе апач и пишет при проверке конфига.
Ну пиздос !В этом видео https://www.youtube.com/watch?v=Lr_WBVMvO4I говорят мол нужно найти в netstat -a -o 0.0.0.0.:80, а у меня его тупо нет! Ну что за день, целый день то базы данных не подключались, решил переустановить, так не запускается вообще. Что с этим ебаным апачем.
>>684279Пытаясь написать что это PHP плохой и виноват, ты лишь демонстрируешь свой низкий уровень знания PHP. Вот смотри, у тебя есть задача написать код делающий X. Вместо того чтобы исплоьзовать предназначенные для этого инструменты, ты пишешь велосипед, который иногда (с неизвестной вероятностью) работает. ПРичем проверить код тоже сложно так как он написан одной большой стеной с кучей вложенных ифов. Вот что ты получил: - неизвестного качества код вместо проверенного огромным числом пользователей- лишнее потраченное время на написание с нуля- код который никто не захочет потом поддерживатьЗря потратил деньги твоего работодателя проще говоря. > засовывания всей DOM-структуры в память ради малейшего чиха.Ты мерял или диванной оптимизацией решил заняться? И вообще если тебе нужна высокая производительность, почему ты не на Си++ или яве пишешь а на PHP? И кстати DOM написан на Си.> СОЗДАЙ ОБЪЕКТ XPATH НА ОСНОВЕ DOM-ДОКУМЕНТА> ТЕПЕРЬ У ТЕБЯ DOM-ДЕРЕВО, В КОТОРОМ АТТРИБУТЫ ТОЖЕ ДЕТИ ЭЛЕМЕНТАТы же просто не осилил дом. Для удаления запрещенных тегов вообще-то xpath не требуется (хотя это штука удобная и полезная), ну то что атрибуты дети это никак не мешает. Ну напиши еще пару постов какой дом плохой, это же полезнее чем читать документацию. Корректно обрабатывать HTML от пользователя можно толкьо одним способом: - распарсить в дерево- обработать дерево- собрать новый HTMLДругих способов я не знаю.> О, есть сторонние модули, написанные на PHPЕсть какой-то хороший модуль, парсящий HTMl в дерево но я забыл название. > Ой, а что там внутри> КОТОРЫЕ НЕ СМАТЧАТ ВАЛИДНЫЙ АТРИБУТ Так он и назвается StripTags а не StripAttributes же. Но подход конечно плохой.>>684280Там в документации что-то написано про то что дефолтный хост не ищется среди VirtualHost участвующих в name-based virtual host или как-то так. Он настраивается на верхнем уровне, не внутри VirtualHost. Согласен, переусложненная штука но ты ведь документацию не читаешь внимательно и сам себе усложняешь жизнь. ну и теперь ты станешь лучше в апаче разбираться, как мне кажется.
>>684299на винде надо запускать netstat -abn из-под администратора. Там не обязательно будет написано именно 0.0.0.0:80Чтобы пользоваться netstat надо понимать что такое TCP порты, как они выделяются и тд.
>>684310А как сделать чтобы у меня просто заработало и не выводило ошибку 1?
>>684307>Там в документации что-то написано про то что дефолтный хост не ищется среди VirtualHost участвующих в name-based virtual host или как-то так. Он настраивается на верхнем уровне, не внутри VirtualHost. Что? Погоди. Нихрена же не исправилось до конца. Я по 127.0.0.1 и localhost попадаю на дефолтное говно, а не куда его прошу. Где это настраивается, если не там? И как?>в документации что-то написано про то что дефолтный хост не ищется среди VirtualHost участвующих в name-based virtual host или как-то так.>но ты ведь документацию не читаешь внимательноА как этот тупняк можно нормально читать, если еще и с английским проблемы, особенно? Я вообще запутался уже, блеать.
>>684317Ура, заработало!Я дебил, в конфиге когда правил 5 на 7 пхп, кое-что не убрал. Уже больше часа сижу злой как собака, думаю что не так.Теперь буду решать основную проблему, над которой сижу весь день - подключение к mysql.
>>684307>ты пишешь велосипед, который иногда (с неизвестной вероятностью) работает>проверить код тоже сложно так как он написан одной большой стеной с кучей вложенных ифовКод еще не написан, в нем не будет кучи вложенных if.Тесты ты мне уже сбрасывал, так что стопроцентное их покрытие я обеспечу.>диванной оптимизациейthisПока что мне нечего мерить. Вот напишу свой мегагиперпорсир, тогда можно будет запустить DOM в 100к оборотов, и мой метод.Заодно использование памяти в сравнении увижу.>DOM написан на СиБыло бы странно, будь это не так.>Для удаления запрещенных тегов вообще-то xpathДа, для этого есть strip_tags, где под капотом нет DOM, судя по намекам в документации.Мне нужно удалять атрибуты.>Есть какой-то хороший модуль, парсящий HTMlHTMLPurifer?
>>684337Удачи.
А почему MySQL Community Server MSI installer есть только 32-битный? Где 64?
>>684352А, там написано Note: MySQL Installer is 32 bit, but will install both 32 bit and 64 bit binaries.
>>684341да, пьюрифайер, вроде он. Когда мне надо было чистить HTML, я может даже его использовал, не помню правда точно.> Вот напишу свой мегагиперпорсирТогда пиши его хотя бы по-человечески: раздели отдельно разбор HTML и фильтрацию, то есть принятие решения что делать с тегом или атрибутом. >>684328Я сейчас провел эксперимент: - apache2.2<VirtualHost 127.0.0.1:10000 x:10000> ServerName host1<VirtualHost x:10000> ServerName host2<VirtualHost 127.0.0.1:10000> ServerName host3- написал баш скрипт который получает на вход IP и имя - куда коннектиться и какой заголовок Host: послать- тестируем: for ip in {127.0.0.1,192.168.56.1}; do for host in {host1,host2,host3} ; do ./conn.sh $ip $host ; done ; doneIP 127.0.0.1 HOST host1Connection to 127.0.0.1 10000 port [tcp/] succeeded!VH1IP 127.0.0.1 HOST host2Connection to 127.0.0.1 10000 port [tcp/] succeeded!VH1IP 127.0.0.1 HOST host3Connection to 127.0.0.1 10000 port [tcp/] succeeded!VH3IP 192.168.56.1 HOST host1Connection to 192.168.56.1 10000 port [tcp/] succeeded!VH1IP 192.168.56.1 HOST host2Connection to 192.168.56.1 10000 port [tcp/] succeeded!VH2IP 192.168.56.1 HOST host3Connection to 192.168.56.1 10000 port [tcp/] succeeded!VH1то есть дефолтный хост все равно первый. Почему - надо смотреть документацию, а мне лень.
>>684402>Почему - надо смотреть документацию, а мне лень. Бля. И что мне делать-то?>>684402>IP 127.0.0.1 HOST host2>Connection to 127.0.0.1 10000 port [tcp/] succeeded!>VH1Вот это как-то вообще не правильно.>ServerAlias localhost 127.0.0.1Так это же не дефолтный, а тоже хосты.
>>684415> >IP 127.0.0.1 HOST host2> >Connection to 127.0.0.1 10000 port [tcp/] succeeded!> >VH1> Вот это как-то вообще не правильно.Это правильно так как host2 доступен только с адресов кроме 127.0.0.1, в мануале написано что при поиске по IP ищется наиболее специфичное соответсвие, раз есть хосты где указан 127.0.0.1 то хосты со звездочкой не трогаются.> И что мне делать-то?Можно подождать пока кто-нибудь прочитает ее за тебя. Или просто поставить дефолтный хост первым.
>>683700Если у меня нету php_pdo.dll то где его скачать?
Кто-нибудь расскажет про VisualPHP и для чего она нужна?
>>684425Ну наканецта, прогресс, таки подключило драйвера(хоть ошибку в коде и выводит, но радует что фиксятся потихоньку ошибки):
>>684422>Можно подождать пока кто-нибудь прочитает ее за тебяОбижаешь, я как будто не читал. Если бы я мог решить эту хуйню сам, я бы не пришел в тред. А, да, со вторым еще более-менее понятно. Но у меня поинтереснее случай.Два хоста <VirtualHost 127.0.0.1:80 х:80>и один хост чисто 127.0.0.1. И в нем локалхост и 127.0.0.1. Локалхост и адрес локалхоста не могут быть именами сервера или его алиасами? Тогда куда их девать?
В общем, таки вроде поставил pdo, отображает что драйвера стоят. Помогите как работать с БД в php через pdo и как проверить работает ли.
>>684444https://habrahabr.ru/post/137664/
Почему возвращает true?$a = 'хуй'; $b = 0;var_dump($a == true && $b == false && $a == $b);
>>684458http://php.net/manual/ru/language.operators.precedence.php
Подскажите годный сайт по SQL-инъекциям.
>>684483KhanAkademy, w3schools
>>684465$php = 0;var_dump($php == "хуита");Лел.
>>684491Вернет true, если что.
>>684438Если>чисто 127.0.0.1Стоит самым первым - куда надо коннектиться по server и 127.0.0.1, но по localhost все равно к первому среди х:80. Чому так?А если >чисто 127.0.0.1НЕ первым, то и по 127.0.0.1 тоже коннектится к первому среди х:80, но по server по-прежнему куда надо. Магия какая-то. Напрашивается вывод, что 127.0.0.1 не считается именем хоста вообще, а локалхост идет не прямым редиректом на 127.0.0.1. Или это просто все где-то в другом месте понахуеверчено, я даже не знаю.
>>684492>>684491Оператор == сначала приводит операнды к одному типу (в данном случае к числу), затем сравнивает полученные значения.Приведение строки к числу описано здесь http://php.net/manual/ru/language.types.string.php#language.types.string.conversion>Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль).Используй строгое сравнение ===.Смело посылай в тех эйчаров, которые морочат голову такими заданиями.
Как через pdo подключиться к существующей БД или создать новую БД ? Читаю мануалы, вообще ничего не понятно.
Есть PHP скрипт, запускаемый из браузера, время выполнения - несколько часов. Минут через 20 после запуска в браузере вылетает 500 Internal Server Error, сам скрипт при этом продолжает работать, успешно все доделывает и не выполняется только последняя строчка (запись в лог-файл). Что посоветуете?
>>684505>Как через pdo подключиться к существующей БДhttps://habrahabr.ru/post/137664/ здесь это написано в самом начале.>или создать новую БД ?Это еще зачем?
>>684510>здесь это написано в самом начале.Что-то я непонимат, перечитаю еще.
>>684507Из консоли такие вещи нужно запускать. Браузер предназначен для просмотра веб-страничек, а не запуска говнокода.Собственно скрипт в браузере по-умолчанию не может выполняться дольше 30 секунд http://php.net/manual/ru/function.set-time-limit.phpУ тебя видимо выставлено около 20 минут set_time_limit(1200);>Что посоветуете?Сменить профессию. Смотреть логи сервера.
Здравствуйте. Меня зовут Вячеслав, мне 22 года и я пхп программист. Я сижу на пхп с 18 лет. Первый раз я попробовал пхп с другом. Мы сидели, обсуждали веб-технологии и тут он сказал, что недавно пробовал пхп. Он предложил попробовать мне. Поначалу я не согласился, ведь это пхп, я слышал много плохих слухов про него, слышал, что он вызывает зависимость. Но друг настаивал, говорил, что в жизни нужно попробовать все и я сдался. Он предложил бесплатный скрипт, выводящий «Hello world!». Он казался совсем безобидным, но как потом оказалось, я уже не мог остановиться. Уже очень скоро благодаря пхп я попробовал свою первую cms. Это сейчас я понимаю, насколько опасным был этот шаг, но тогда я ничего не понимал, и мне это нравилось. Я не заметил, как после первой испробованной cms, мне уже захотелось написать свою. Дальше было только хуже. Я уже рискнул попробовать кое что потяжелее. Я решил попробовать свой первый фреймворк. Это было прекрасно. Но это была дорога в никуда. На тот момент родственники уже отчаялись мне помочь, а моя девушка узнав, что я использую пхп бросила меня. Я все больше отдалялся от своих друзей и родных, мое окружение составляли такие же пхп-программисты как и я. Мы собирались у одного в квартире, подключались к серверу и совместно программировали, используя пхп и фреймворки. Я попал в этот капкан пхп и теперь не могу самостоятельно избавиться от этого, моя жизнь сломана. Если бы мог вернуться в то время, я бы все исправил, и никогда не купился на эту уловку. Написано под воздействием тяжелой трудовой недели.
Есть ли тут работающие кодеры? Сколько получаете?
Правильно я понял, что все относящееся к ООП нужно оформлять вот так:function huita(){huita;}А не относящееся к ООП вот так:function atmta(){atmta;}
>>684599Нет. В PSR рекомендуют в боиз случаях писать скобку на новой строке.
>>684415>>684438>>684494>Магия какая-то. Напрашивается вывод, что 127.0.0.1 не считается именем хоста вообще, а локалхост идет не прямым редиректом на 127.0.0.1. Или это просто все где-то в другом месте понахуеверчено, я даже не знаю.ОП, если не трудно будет, помоги окончательно прояснить поебень.
>>684600Рекомендуется, но обязательно. Хорошо, я понял.
Есть выбор между ASP и PHP. Какие у них преимущества и недостатки?
>>684553Имя такое же и лет столько же, это не про меня часом?
>>684641Забаскрипт. Вообще без вариантов.
>>684646Про тебя. ДИВАНОН@ЛИГИВОН
Ну вот и готов парсер. Полностью рабочий.Алсо, тесты на XSS просто удивительны. Часть нерабочая сама по себе, часть работает на седьмом эксплорере и вообще в нетскейпе.В общем, вот - http://ideone.com/jyvubqПародия на машину состояний прилагается.На пике великий и могущественный DOM в работе.Алсо, $dom->saveHTML() добавляет к html-коду доктайп и head с body. I never asked for this, мне это руками отрезать?Ну и насчет сравнения.DOM в 15 раз быстрее моей поделки. Лол.
Ура! Я таки смог вывести данные с базы данных в php !С помощью лома, консоли mysql и какой-то матери я таки вывел! Правда, не ч-з pdo, а через mysqli. На w3schools нашел работающий код и вывел свою базу, которую создал не через простенькое приложение с интерфейсом, а ручками!!!Как же я рад, тут была целя эпопея с переустановкой пхп и апача, оно не работало, я психовал, апач не хотел перезагружаться когда раскомментировал, но таки РА БО ТА ЕТ! Можно изучать дальше и пробовать пилить авторизацию в свой блог и дипломку.
>>684841Для полного погружения в ООП конечно лучше через PDO делать? вот в этой статье описан процесс работы с PDO и его преимущества >>684455
>>684843Знак вопроса приклеился, там точка должна быть.
>>684843Ты у меня спрашиваешь? Если да, то я не знаю, я только вникаю в php, вот получилось вывести данные с таблицы через mysqli, с pdo тоже надо будет разобраться.
>>684844А, ну в таком случае надо будет с пдо разобраться. Я просто рад, что есть результат - вывод данных на странице.
ОП, мимо-перекатывающийся-сеошникнапиши план плз поэтапного развития навыков в пхп с максимальной эффективностью(минуя пока математику).Чтоб можно было претендовать на юниора по пхп.Моя бабка поехала умом и я в ускоренном режиме съехал. У меня теперь даже интернета нет, только книги и ноут с сумкой вещей, да и денег нет. Есть две недели пока я вписался к другу и затем еще месяц будет. Т.е. сроков у меня ровно 1.5 месяца чтобы стать юниором по пхп и найти работу. ~350 свободных часов. Базовые знания по пхп и мусклю имеюспасибо :*
Кто работает с notepad++, там можно открыть второй экран как в sublime text?
>>684852Вот в есть учебник ОП'а http://archive-ipq-co.narod.ru/, там как раз основы - теория и задачки минимальные.
>>684856И также более сложные задачки тоже есть.
>>684856Окей, отлично. Спасибо!
>>684859Почитай поподробнее шапку в ОП-посте. Там есть много полезной информации. Кто-то тут писал, что прошел учебники опа по пхп, хтмл, ксс и джс, сделал сложные задания и в итоге пошел на собес и получил работу. Еще его учебник можешь скачать, чтобы сайт был уже у тебя на компе(ты писал что интернета у тебя нет).
>>684856А какие-нибудь видосы есть годные? Лекции там, уроки, чтобы с планшета смотреть. Много времени в дороге провожу, порядка полутора часов в сутки, было бы полезно тратить его на обучение.другой ньюфаг
>>684862Глянь тут: https://www.youtube.com/channel/UCUzksGhlJU0rNF5KneUZkSAЯ тоже нюфаг, как-то надо было там ксс глянуть, там смотрел . Там пхп был точно.
А вообще, лучше книги читать.
>>684870Кстати, давно вопрос мучает: как лучше книги читать? Художку понятно, открыл и читай где угодно, но в литературе для программистов предполагается усваивание практических навыков.Так все-таки книги лучше читать за компом, тут же применяя знания и упражняясь, или же читать побольше где угодно, а уже потом пробуя применить прочитанное на практике?
>>684881Программисту главное программировать, а книги это второстепенное.
>>684883Ну надо же знать, что пейсать.
>>684861c хтмл и ксс проблем нет - я умею в жквери и дом шарю. Мне тут чисто пышку надо подтянуть на мидл, чтобы допиливать движочки или свои модули приписывать. Интернет есть пока, 4гб с телефона раздаю, но да, работать таки-лучше на локалхосте.Ознакомился, марафон начал, через 10 дней потных усилий распишу как итог.
Не понимаю суть полей в realtime-индексах в сфинксе.Когда я делаю переменную name полем - при запросе SELECT мне её не возвращает. Почитал документацию, понял что rt_field он только индексирует, но не возвращает, для возвращения нужно использовать атрибуты типа rt_attr_string (для других типов не string, соответственно). Но вот в конфигурации обычного индекса я мог задать поля (sql_field_string) и атрибуты (sql_attr_uint), и при запросе SELECT мне возвращало поля и атрибуты, когда в realtime поля не возвращаются. Зачем они так сделали? Я еще пробовал в realtime индексе сделать одну переменную атрибутом и полем одновременно, это работает, только запрос на вставку будет выглядеть вот так INSERT INTO realtime_index VALUES(1, 'Name', 'Name'); т.е. переменных все же две, но одна из них является полем, а вторая атрибутом. И если сделать так INSER INTO realtime_index(id, name) VALUES(1, 'Name'); то данные запишутся только в атрибут, а не в поле, что делает невозможным поиск с помощью MATCH. И вот тут ко мне приходит мысль что я с самого начала сделал неправильно, что поиск должен возвращать только id найденных элементов, а потом уже по этим id мне нужно выбирать полную информацию о файлах из базы данных. Но это уже порнография какая-то получается.
Умные все какие стали, аж печёт от вас...Где мои нюфажики с задачами на Айфон и Айпад, ну вот где?..
>>685031Зачем они тебе?
>>685036Ну чтоб умным себя чувствовать.
>>685031Двачую тебя. Сам на чем остановился?
>>685065Я последнее, что сделал - задача на вывод чисел словами. Теперь мне просто влом. Думаю, начать css и html без дополнительных задач про, например, размещение алфавита по кругу.
>>685074Забыл добавить, что я мимо проходил
>>684998Сфинкс это поисковый демон а не база данных. Ты не должен пытаться в нем что-то сохранять (так как он под это не заточен + ты получаешь проблему дублирования и устаревания данных).> суть полей в realtime-индексах в сфинксе.realtime индексы отличаются от обычных только тем что они оптимизированы под изменение (добавление и удаление) данных, но не очень подходят дял больших объемов. А обычные индексы нельзя быстро изменять (только переиндексацией или объединением индексов), зато они хорошо хранят огромные объекмы неизменяющихся данных.> и при запросе SELECT мне возвращало поля и атрибуты, когда в realtime поля не возвращаются. Зачем они так сделали? Скорее всего ты где-то ошибся. > И вот тут ко мне приходит мысль что я с самого начала сделал неправильно, что поиск должен возвращать только id найденных элементов, а потом уже по этим id мне нужно выбирать полную информацию о файлах из базы данных.Именно так. И если бы ты подумал, то понял что хранить одни и те же данные в нескольких местах плохая идея.
Внезапно образовалась проблема, сверстал макет, натянул его на вордпресс, в макете есть небольшой магазинчик, решил сделать это через плагин wooCommerce всё вроде-бы правильно, но как-то не понимаю как в моём случае вывести товары из этого плагина на сайте. Суть в том, что страниц я не создавал, сайт одностраничный, всё натянуто на index.php, все циклы прописаны в ручную. Судя по всему надо как-то прописать и цикл вывода из wooСommerce (так же будет правильно?), но я не знаю как это сделать так, чтобы и товары вывелись и категории работали.
>>685075>>685074Понятно. Я тот хуй, который пропустил бонусные задачи и перешел к ООП. Вертстку еще летом 2015 выучи. И движок JS осенью.
>>685080Неужели так интересно натягивать что-то на цмс? С нуля пилить же намного интересней.Мне с дивана видней.
>>685083Когда надо сделать по-быстрому нет ничего лучше чем ЦМС, к тому же, сможешь ли ты самостоятельно сделать настолько удобную и продуманную админку как например в вордпресс?
>>685082И как, не сильно сказалось то, что бонусные задачи пропустил? Я их могу потом дорешать, в принципе.
>>685087Да хуй его знает, я ведь только-только начать читать мануал по ООП. Причем, советую читать официальные мануал, у ОПа не понятно нихуя. Так всегда бывает, когда гик в какой-нибудь области пытается что-то рассказать новичку и удивляется, что тот нихуя не понимает.
>>685086Если возьмусь, то смогу. Ящитаю, что нужно сделать какие-нибудь свои шаблоны, которые уже впоследствии использовать для верстки, а не пиздить у каких-то даунов.
Анон, я все правильно делаю?http://ideone.com/RCNVrg
>>685138Good job!
>>685138Они смеются легко, у них живые глаза, они наверное не знают, что такое смерть.
В общем, я освоил с хуем пополам процедурную часть пыхи, буду браться за объектную. Если как материалы, которые помогут плавно перейти к студентам помимо мануала?
>>685184плавнее некуда Профессиональное программирование на PHP Джордж Шлосснейглесть еще yank_php_i_mysql_ot_novichka_k_professionalu.pdf сразу на примере работы с mySQL, минимум теории
Cейчас читаю книжку и понять не могу. Паскаль же СИ-подобный язык?
>>685110У тебя есть 15 дней, чтобы сделать КМС не хуже вордпресс, время пошло.
>>685262Сколько платишь?
>>685262Ничто не будет хуже вордпресс.
Кто-нибудь юзал DevelStudio? Или тут только с вебом ребята работают? Меня никогда не привлекал веб, а мозгов только на пыху хватает.
>>684870Книги по пхп? Ебанутый? Официальный мануал есть. Это более чем достаточно
>>685065Я доделываю макет из задач на HTML и CSS.Про ООП у ОПа прочитал - ничего не понял, надо вникать.Сейчас читаю книгу из серии О'Рейли, там пошагово описывается создание динамического сайта. Многое интересно, повторяю то, что узнал в мануале ОПа. Хотя ОП и не одобрил эту книгу: Роберт Никсон, "Создаём динамические веб-сайты на PHP...". >>685108ОП не вполне подготовил эти уроки, он пишет об этом, в этом ещё дело.Вообще стоит прочитать пару книг, чтобы с другой стороны взглянуть. Я вижу, например, что действительно не вполне хорошо разбивать строку при выводе кавычками, как у Никсона, гораздо лучше и внятнее делать так, как советует ОП. Сравнивать же можно, базу ОП хорошую закладывает.
>>685160Проорал на всю окрестность.А после со слезами на глазах налил крепкого чаю.
>>685484Да ладно, что ты, вечная весна уже наступила, нужно портвейн пить и блевать на почтенных похаперов.
Братки, помогите с задачей про генератор имён. Задачу я решил, но как ещё можно вписать $name ? Код тут: http://ideone.com/gKsE7UЯ там сделал так:> $name = "$name$randomText";как ещё можно сделать, чтоб отобранные в $randomText слоги суммировались в имя?
>>685805Их надо склеить, как в следующем уроке про строки?
Чем отличается> str_replace ("что", "на что", $где)от> strtr ($где, $чтоЗаменять, $наЧто)???
>>685819Отличается типами данных. Стр_реплейс работает с массивами, а стртр со строками.
>>679033> http://ideone.com/qb5GV3 переделал задачку на айфон с использованием min/maxОк, верно> http://ideone.com/NW7mgR тоже переделал по рекомендациям любимых анонов> $credit != 0Я бы ставил условие "пока долг больше нуля" - так при нечаянном уходе в минус цикл не зациклится навечно.А так, верно решено.> http://ideone.com/eGEybu палиндромВсе правильно> http://ideone.com/uWTryH изменение номера телефона в нужный формат> "$q"Кавычки тут лишние, название переменной не говорящее.> (\D)Скобки лишние> \ Пробел не спецсимвол, экранировать не требуется> (\ ?\+?7?)У тебя плюс и семерка необязательны - значит он вставит 8 перед любым номером вообще, например http://ideone.com/MomgaOТакже, приучайся ставить флаг u всегда> http://ideone.com/dD5gD8 поиск и авто замена разных вариаций слова дурак> (\-|\(|\))Это наверно проще в квадратных скобках писать как [\-()]> (р|p|r)Это тоже компактнее будет в квадратных скобках> \ ?(\-|\(|\))?(д|d)Непоняно зачем проверять наличие пробела перед "д"> http://ideone.com/sW56Qy вывод всех встречающихся емейлов в тексте> [a-z\ \.\-]+)В имени домена не может быть пробелов, зато могут быть цифры.> http://ideone.com/ze39mQ Grammar Nazi поиск ошибок в текстене видит пропущенного пробела после точки: http://ideone.com/jowGG3Ты зря там поставил условие что должно быть ровно 10 символов. вот еще пример где ошибку не видит: http://ideone.com/QBy0F5> (\w)Скобки не требуются> расказ"расказал"Ошибку о запятой перед "но" видит даже если все правильно: http://ideone.com/A5Mq6PВ общем тут что-то плохо, выражения написаны неправильно. Также, вместо 4 переменных надо сделать массив вида [ выражение => объяснение ]и обходить циклом.> http://ideone.com/mamPIM авто замена ошибок найденных в тексте> "!(\,)(\ )?!iu"Зачем заменять если после запятой идет пробел? Надо искать случаи где его нет.> "!(жы)!iu";> "!(шы)!iu";Это можно объединить в одну регулярку, как и правило с точкой и запятой, и правило с "а/но"> \b\ ?но\bНе сработает если там 2 пробела перед "но". Сработает ложно если перед "но" идет точка.не надо заводить 7 однотипных переменных, надо использловать массив. также, не надо класть текст каждый раз в новую переменную с бессмысленными именами - это тольок запутывает - лучше использовать ту же самую.> http://ideone.com/ap17y2 поиск "неумышленных" опечаток> ([а-яё]+)?Какой смысл ставить плюс, а за ним вопрос? Это то же самое что зведочка. Более того, твое выражение срабатывает не на слова со смешанными буквами, а тупо на все латинские буквы: http://ideone.com/umnWWyНадо искать именно слова с буквами из 2 алфавитов. В общем, надо тебе получше изучить регулярки - пока ты их не очень понимаешь.
>>679104 > Вот только в бд почему-то не сохраняет, а только переадресовывает. Почему так? Никаких ошибок не выдает, ничего не пишет, почему, понять не могу.Поставь там echo и die(); и смотри какие команды выполняются и чему равны переменные. Также, найди лог ошибок Апача (в папке апача logs) и посмотри там. При переадресации браузер не отображает остальную страницу потому ты и не видишь возожных ошибок.> 2. Когда использоваться include, а когда include_once, как работает я знаю, но не могу понять в каких ситуациях первая функция может вызвать проблемы? То же самое и c require и require_once. Да и зачем вообще нужна require, если везде можно юзать инклюдОткрой мануал по этим 4 функциям и составь список отличий. Сразу скажу что include вообще не нужен.> 3. Можно ли в свойствах класс модели создать переменную дб и уже юзать ее в функциях и не писать в каждой функции одну и ту же строчку кода?Принято передавать зависимости класса через конструктор, это называется dependency injection: https://gist.github.com/codedokode/e1d31a31b37d5f635057То что у тебя - это вообще не ООП а его имитация - кругом статические методы и массивы - надо переделывать. Статические методы спутывают код в одну кучу вместо разделения его на независимые слабо связанные классы.> 4. Я немного не понимаю суть ООП в плане, почему не сделать все функции статическими и выполнять их без создания обьектаЭто будет не ООП, а обычная процедурщина (то есть просто набор функций без объектов). но ты задал хороший вопрос. При использовании DI мы не прописываем в классе получение зависимостей, а передаем их снаружи. - код упрощается: классу теперь не надо самому создавать нужные ему объекты, а это становится задачей того кто его вызывает. Вообще, у каждого класса есть своя определенная задача (например сохранять студентов в базу), а искать другие объекты - это не его задача, а того кто хочет использовать объект этого класса. - мы сразу видим какие зависимости есть у класса по его конструктору. В твоем случае для этого надо изучить весь код класса- мы можем передавать разные объекты с разными настройками. Ну например вместо обычного объекта PDO мы можем передать объект, который выводит на экран все выполняемые запросы. Или мы можем одному классу дать один объект PDO, а другому - другой. В твоем случае все прописано намертво и поменять ничего нельзя. - классы перестают быть спутанными друг с другом намертвоЧем плохи статические методы? Ну например тем что нельзя создать 2 объекта с разными настройками. И что нельзя реализовать DI. И кстати, а ты делал наши задачи Вектор и Кошки-мышки на ООП? Если нет, надо бы сделать - как раз в ходе решения этих задач ты и узнаешь лучше на практике как писать ООП код. И почему статические методы не работают. > Можешь привести примеры где нужно будет обязательно создавать обьект Ну например модель студента - класс который хранит информацию об одном студенте. Если тебе нужно хранить информацию о 2 разных студентах, тебе очевидно надо 2 таких объекта. Или кошки-мышки - каждое животное имеет свои свойства и представлено своим объектом. Ну и в твоем случае у тебя все жестко связано. Вот я допустим хочу получить объект с заданными мной настройками базы данных (user=ivan, passowrd = 1234). А как я это сделаю если у тебя в коде намертво вписано что они читаются из файла? Ты фактически усложняешь код. Вместо того чтобы сделать класс который соединяется с БД с использованием переданного снаружи объекта, ты зачем-то в этот же класс жестко вписываешь что настройки читаются из такого-то файла. А зачем? задача класса работы с БД - сохранять и загружать студентов, а не определять где найти настройки базы данных. Ты заставил класс заниматься не своим делом и заодно сделал код менее универсальным. Также, если ты не читал, перечитай замечания к задаче про студентов - там очень много полезной информации.Также прочитай про паттерны работы с базой данных: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md> 5. Зачем нужно постоянно импортировать бд или создавать вручную если хочешь потестить чей-то сайт? Почему бы не написать просто код который проверяет наличие бд и таблиц и если они отсутствуют, то просто создает их.Бессмысленное усложнение кода - базу надо создать один раз, и значит этот функционал незачем вставлять в функцию вывода студентов на экран. Да и при установке все равно надо что-то сделать руками - создать пользователя в БД, создать пустую базу итд. Если ты хочешь автоматизировать задачу - попробуй напиши отдельный скрипт установки, запускаемый из командной строки.> 6. Также почему когда люди выкладывают свой сайт на тест, то выкладывают его без фреймворка и его тоже нужно устанавливать руками? руками обычно не устанавливают. Ты описываешь нужные тебе библиотеки в composer.json, а пользователь скачивает проект и устанавливает все зависимости одной командой composer install. Ну и в репозитории должен быть твой код. Какой смысл в том что тысяча человек скачают и положат в свой репозиторий одну и ту же библиотеку? Не проще ли вписать строчку в composer.json? Плюс, когда ты захочешь перейти на новую версию библиотеки тебе надо будет лишь поменять одну цифру в конфиге. А ты предлагаешь лезть куда-то на сайт, искать там нужную версию, скачивать, распаковывать - быссмысленная ручная работа.Плюс композер умеет устанавливать еще и зависимости библиотеки, и настраивать автозагрузку для нее. убирается куча рутинных действий.По твоему коду:.....
По твоему коду:> https://github.com/luptidu/students.com/blob/master/models/Student.phpИз названия можно подумать что это модель студента, то есть класс хранящий имя, фамилию, и тд. Почему-то в твоем случае название класса не соответствет тому чем он является.> static function createStudent($name, $surname, $class, $points) {А когда у студента будет 10 свойств (а их там как раз около 10), ты 10 аргументов сделаешь? Как минимум ты забыл про год рождения, пол, место проживания. > while($row = $result->fetch()){> $studentList[$i]['name'] = $row['name'];Изучи мануал по PDO - там есть метод fetchAll. Также не надо копипастить вот эти строки: Также, для добавления в массив не нужна переменная $i считающая индексы - php умеет их считать сам.> static function getStudentsList(){Почему ты возвращаешь массив массивов, а не массив объектов? Какие преимущества у массива? Я например вижу такой недостаток что в случае с классом ты можешь посмореть какие у него есть свойства, можешь добавлять в него методы, а в случае с массивом неизвестно какие свойства, методы для работы с ним добавлять нельзя. Почему выбран массив для хранения информации о студентах? > static function checkStudent($name, $surname){> $studentList = Student::getStudentsList();> foreach ($studentList as $student){Неэффективно выбирать всех студентов в память, надо искать в самой базе данных. https://github.com/luptidu/students.com/blob/master/components/Database.phpЗачем нужен этот класс? Какая от него польза? И почему ты каждый раз создаешь новое соединение, а не используешь существующее? Также, объясни, какой из режимов обработки ошибок в PDO (PDO::ATTR_ERRMODE) ты используешь и почему? Мануал если что http://php.net/manual/ru/pdo.error-handling.php (я советую прочитать весь мануал по PDO/mysql на оф сайте от начала и до конца).https://github.com/luptidu/students.com/blob/master/components/autoload.phpты используешь много лет назад устаревший способ, вот открой например мануал: http://php.net/manual/ru/language.oop5.autoload.phpНадо использовать spl_autoload_register, вот мой урок https://github.com/codedokode/pasta/blob/master/php/autoload.mdhttps://github.com/luptidu/students.com/blob/master/config/routes.php#L11> 'index.php' => 'main/index',> '' => 'main/index'Зачем путь с index.php если ты используешь настраиваемые URL? https://github.com/luptidu/students.com/blob/master/components/Router.phpПлохо что жестко прописано имя конфиг-файла. Почему роутер должен заниматься загрузкой конфигов? Также, если твой роутер подключает и запускает контроллер то это не роутер, а Фронт Контроллер. > foreach ($routes as $route => $needed) {> if (Router::getUri() == $route) {Для поиска в массиве по индексу не нужен цикл> https://github.com/luptidu/students.com/blob/master/controllers/MainController.php#L4> Description of MainControllerНе стоит вставлять не несущие смысла комментарии.https://github.com/luptidu/students.com/blob/master/controllers/MainController.php#L15Эту функцию регистрации надло разбить на части, напимер вынести отдельно валидацию, отдельно работу с куками. Ну и почему-то у тебя не вся информация, которая требуется, сохраняется.Также, не вижу в проекте дампа с SQL кодом для создания нужных таблиц. И readme.md где написано как развернуть проект.https://github.com/luptidu/students.com/blob/master/views/index.phpВ шаблонах не используется echo и используются версии операторов иф с двоеточием. не надо писать HTML код в кавычках внутри echo так как это неудобно и читать и писать.И если ты пропустил задачи на ООП - надо бы к ним вернуться и сделать. Многие важные вещи иначе не поймешь. > https://github.com/luptidu/students.com/blob/master/views/registration.php> if (isset($name))как писать надежный код когда неизвестно даже существует такая переменная или нет? Также не вижу у тебя экранирования выводимых в шаблоне данных, почитай про XSS https://github.com/codedokode/pasta/blob/master/security/xss.md
>>679142>>Тайп хинт бы сюда.> Какой тайпхинт? В эту функцию я передаю несколько контроллеров, чтобы удобнее было ловить исключение. Я могу конечно сделать для этих контроллеров интерфейс,Ну так и сделай. Чтобы показать что именно можно передавать в эту функцию, а что нет. И чтобы объединить классы контроллеров.> Чтобы не копипастить catch блоки с одинаковым содержимым я сделал для двух исключений один интерфейс FatalException и ловлю его. Других исключений, кроме PDOException там быть не может, но если вдруг они будут, можно будет добавить еще один блок catch. Если можно это как-нибудь по другому сделать, подскажи пожалуйстаНу сам посмотри: при появлении в коде нового исключеняи ты хочешь добавлять блок catch. А если ты подключишь стороннюю библиотеку которая содержит 20 разных исключений, ты еще 20 блоков добавишь? В глобальном обработчике ошибок очевидно надо ловить любые исключения.>>По идее ссылки надо экранировать через htmlspecialchars, в частности символ & в них> Вот это тоже не совсем понял, но все равно сделал. Это из-за того что символ & может сломать разметку?По правилам HTML & это спецсимвол и его надо записывать особым образом. перечитай например: https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%B5%D0%BC%D0%BE%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B2_HTMLЕсли у тебя в ссылке встретистя например < то оно будет интепретировано как знак < и ссылка исказится. Плохо что ты не знаешь правила HTML. Плюс что если в дальнейшем в ссылке будут параметры приходящие от пользователя? Он сможет реализовать XSS на твоем сайте, вставляя проивзольные данные на страницу. Уязвимость XSS вознимает именно из-за того что люди не знают или забывают правила кодирования символов в HTML.По коду: - надо добавить и настроить gitignore, напрмер для папки vendorПоиск по студентам работает с учетом регистра, а надо без.Стрелку вверх можно было нарисовать и проще - на будущее - & uarr ; без пробелов. После редактирования/добавления наверно логично редиректить на таблицу, а не назад на форму. Можно при добавлении еще подсвечивать цветом добавленную запись, если хочешь.Надпись "показать все записи" свалилась на таблицу. https://github.com/foobar1643/student-list/blob/master/app/Controller/ControllerForm.php#L23> $regHelper = new RegistrationHelper($dataGateway);Хелперы надо бы засунуть в контейнер, зачем копипастить код их создания? > if($_SERVER['REQUEST_METHOD'] == "POST" && $tokenHelper->checkCsrfToken($_POST['csrf_field'])) {Я думаю при несвпадении токена (например долго не отправляли форму) надо выводить ее и предлагать отправить ее еще раз. У тебя же данные теряются. Ну либо надо выдавать токены надолго, что куки точно не умрут. Впрочем, у тебя вроде так и есть.> checkCsrfToken($_POST['csrf_field'])Нет гарантий что в массиве ПОСТ будет это поле. > $student->token = $tokenHelper->setAuthToken();При обновлении студента наверно новый токен генерировать не надо? Вообще, функция run слишком большая. Вынеси часть кода хотя бы в приватные методы в контролере.> $oldStudent = $dataGateway->selectStudent($tokenHelper->getAuthToken());> foreach($regHelper->getAllowedFields() as $key) {ты по моему выше в коде уже выбирал студента из БД, а это второй раз будет.https://github.com/foobar1643/student-list/blob/master/app/Helper/TokenHelper.php#L18Нет гарантий что кука сущестсвует, значит будет ошибка доступа к полям массива. У тебя вообще включен вывод ошибок? Ты их видишь? Сделай-ка превращение всех ошибок в исключения как описано тут http://php.net/manual/ru/class.errorexception.phpНасчет авторизации. Я думаю, можно пойти дальше, спрятать логику авторизации внутри класса и сделать такие методы: - получить студента если он залогинен- залогиниться под именем студента- разлогинитьсяТы же выставляешь наружу лишь методы работы с куками, таким образом логика авторизации не спрятана в одном классе, а размазана.Также, не думаю что стоит CSRF и автоизацию класть в один класс - явно просится разделение на 2 класса.Насчет FatalException - странный интерфейс, в общем-то все непойманные исключения завершают скрипт.https://github.com/foobar1643/student-list/blob/master/app/init.php#L17Кодировку соединения указывать не надо? https://github.com/foobar1643/student-list/blob/fc341127e66968f3b1a099d0ac846bfe1101a11e/app/Database/StudentDataGateway.php#L73Подзапросы тут не требуются. А если бы требовались - подошел бы обычный джойн, но тут и он не нужен.Кстати проверка email тоже должен быть регистронезависимой.> catch(FileOperationException $e) {> die($e->__toString());Вообще в CLI режиме исключения по умолчанию выводятся в консоль, так что это не нужно.> по запросу & laquoточка с запятой пропущена> <?php if($linkBuilder->sortKey == 'sgroup' && $linkBuilder->sortType == 'asc'): ?>> <span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>Эту штуку наверно в функцию стоило вынести, в тот же Table Helper, нехоршо конечно HTML функцией генерировать, но копипаста еще хуже, а макросов в phtml нету.
>>679342https://ru.wordpress.org/plugins/woocommerce/faq/http://support.woothemes.com/hc/en-us - тут нету? Алсо странно делать магазин на вордпрессе.
>>679463https://github.com/MindiMakridi/filehosting/blob/master/files.sql#L35> ENGINE=MyISAM Нагугли отличия myisam от иннодб и напиши несколько самых важных. Почему в твоей базе нет внешних ключей? Почитай http://denis.in.ua/foreign-keys-in-mysql.htm> `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Аноним',Лучше хранить NULL а анонима подставлять при выводе. А так, как отличить настоящего анонима от того кто вписал имя Аноним? > `number` int(11) NOT NULL,Что в этом поле? нужен комментарий. Также, возможно стоит parent_id хранить на всякий пожарный.https://github.com/MindiMakridi/filehosting/blob/master/models/helpers/FilesHelper.php#L147> validateFileUpload($filePostData, $maxSize)Макс. размер неизменен и правильнее потому передавать его через конструктор.> $file->setId($this->filesMapper->addFile($file));Лучше наверно будет если addFile сам проставит id. Хотя можно и так оставить.Далее, ты не учел то регистр имен файлов имеет значение. Вот что получается на линуксе при попытке запустить твой код: > Fatal error: Class 'Filehosting\Helpers\FilesHelper' not found in /home/ubuntu/workspace/public/index.php on line 45Под виндой надо сначала переименовать папку в другое имя, а потом назад в правильном регистре.Если файлов нет, то хорошо бы выводить соотв. надпись вместо таблицы и предложить загрузить первый файл. В репозиторий надо добавить пустую папку files и папку превьюшек - как это сделать: http://m05quit0.ru/dev/kak-dobavit-pustuyu-direktoriyu-v-git/ - также надо будет повозиться чтобы загружаемые файлы в ней игнорировались.В комментариях теряются переводы строк.При раскрытии формы ответа надо ставить курсор в поле ввода текста. Имя должно сохраняться даже между перезагрузками страницы. Что насчет аякс-добавления и аякс-загрузки новых комментариев? > $depth = preg_split("/\\./", $this->path);Достаточно explode> $depth = (count($depth)-1)*25;Неправильно. Число 25 - это часть HTML шаблона и оно не должно прописываться в модели.https://github.com/MindiMakridi/filehosting/blob/master/models/CommentsMapper.php#L40> $sth->setFetchMode(\PDO::FETCH_CLASS, "Filehosting\Commentary");Тут дата из БД не преобразуется в таймстамп> SELECT MAX(number) FROM commentsМожно выбирать max(path)Насчет формирования путей: не надо это раскидывать по коду. Лучше сделать 2 функции. можно даже статических, одна раскладывает путь на числа, другая собирает из чисел путь.https://github.com/MindiMakridi/filehosting/blob/master/public/index.php#L109Вот этой простыни в контроллере не должно быть - должна быть простая функция в маппере которая сама и пути все проставит и в базу сохранит все.Также, хорошо бы для случаев когда нет Xsendfile сделать фоллбек на обычную отдачу через readfile например.И для картинок тоже можно бы применить xsendfile когда он есть.> $thumb = new Filehosting\ThumbnailЕго стоит тоже сделать синглтоном слимаИ еще: что за бардак в папке models? почему модели, мапперы, исключения, хелперы, лежат вперемешку? Логичнее бы их по папкам разнести.Для комментариев надо бы минимально оформление, например дату и имя сделать серым шрифтом поменьше, и оступов немного добавить.> dropZone[0].ondragoverУ тебя же джейквери, добавляй обработчик через него> dropZone.text ="....";> dropZone.addClass('error');Это надо вынести в отдельную функциюТакже, в коде перетаскивания надо сделать функцию проверяющую поддерживает ли браузер все нужные вещи (например FormData с добавлением файла). Если нет - не активировать загрузку перетаскиванием.Также, на случай перетаскивания нескольких файлов надо что-то делать. Хотя бы текст выводить.далее, метод append позволяет указать оригинальное имя файлаhttps://developer.mozilla.org/ru/docs/Web/API/FormData/appendПри ошибке загрузки из-за проблем связи или ответа не с кодом 200 надо давать возмодность повторить попытку.Надо запрещать перетаскивание нового файла в процессе загрузки либо проверить что все ок при этом.> xhr.upload.addEventListener('progress', uploadProgress, false);Если есть браузеры где нет этого события, но есть загрузка файлов, тут вылетит исключение. надо проверить есть ли такие браузеры и если есть то подстраховаться. В аякс-загрузке файла нет проверки ответа сервера. Что если сервер передал какое-то сообщение об ошибке? https://github.com/MindiMakridi/filehosting/blob/master/templates/filePage.html.twig#L82> function showForm(event){Стена текста - разбей на читабельные функции.Также, не надо создавать программно форму загрузки из узлов. Сделай шаблон и генерируй по шаблону как описано тут: http://javascript.ru/unsorted/templatinghttps://learn.javascript.ru/templatesШаблон должен быть в HTML коде, например в теге script с кастомным type. Я советую не делать полноценных шаблонов а просто HTML с вставками вроде [text]Посмотри можно ли использовать это, что со старыми браузерами? https://learn.javascript.ru/template-tag> token.setAttribute('value', '{{token|json_encode|raw}}');все значения из PHP надо ставить в начале скрипта, а не в середине, так как твой скрипт не вынести во внешний файл будет.Так вообще, у тебя неплохо получается.
>>685839>А так, как отличить настоящего анонима от того кто вписал имя Аноним? А так, как отличить настоящего NULL, от того, кто вписал имя NULL?
>>685805$name = "$name . $randomText";оператор конкатенации
>>685844php > var_dump(gettype(NULL));string(4) "NULL"php > var_dump(gettype("NULL"));string(6) "string"
>>685837>Поиск по студентам работает с учетом регистра, а надо без.Нет. Ты мне это в прошлый раз писал, и я исправил.https://github.com/foobar1643/student-list/blob/master/app/Database/StudentDataGateway.php#L56Вот тут вместо LIKE теперь используется ILIKE.Согласно мануалу постгреса http://www.postgresql.org/docs/current/static/functions-matching.html>The key word ILIKE can be used instead of LIKE to make the match case-insensitive according to the active locale. This is not in the SQL standard but is a PostgreSQL extension.Плюс прикреплю пару картинок где у меня этот поиск работает.>Кодировку соединения указывать не надо? Вроде бы она по дефолту UTF-8 у сервера и клиента в постгресе. Я еще проверю конечно.>Эту штуку наверно в функцию стоило вынести, в тот же Table Helper, нехоршо конечно HTML функцией генерировать, но копипаста еще хуже, а макросов в phtml нету.А если сделать массив, элементы которого будут соответствовать заголовкам колонок в таблице? Таким образом можно будет весь заголовок вывести одним циклом, не копипастить ifы и не делать функцию которая генерирует HTML. Конечно, редактировать такую вещь будет не очень удобно, но мне кажется что это лучше чем переносить куски шаблона в класс.
ОП, когда уже 8 марта будешь проверять, мне нечего больше делать.
>>685904Получилось как-то так: http://pastebin.com/b91Ke0w5Еще подумаю как убрать копипасту в ifах, там меняется только слово.
Странно, после того как я поставил xdebug, некоторые вещи перестали работать по прежнему. Хотя может проблема и не в нём. Вот у меня был метод который выполнял запрос к базе$sth->execute() и ничего не возвращалА его успешное выполнение проверялось примерно так: if(метод()),теперь же я вынужден писать в методе return $sth->execute() чтобы такая проверка работала.
>>686053Зачем ты велосипеды с ifами строишь? Можно сказать PDO чтобы он выбрасывал исключения при любых ошибках вот так>$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);Тогда если в запросе будет какая-то ошибка, твое приложение на этом моменте завершится, и ты сможешь обработать исключение, вывести ошибку в логи, на экран и т.д.
>>686060>Зачем ты велосипеды с ifами строишь?Чтобы сделать rollback транзакции в случае неудачи
Пиздец, ребята. Увидел, что тут для тех, кто ни разу не пробовал в программы и решил попробовать. Над W5.2 сидел где-то час, дохуя пробовал всего, в отчаянии загуглил задачу, посмотрел код, закрыл, начал переделывать. В итоге получилось, но получилось только после того, как подсмотрел, теперь чувствую себя тупым пиздец, ведь это ещё самый легкий уровень. Можете накидать ещё таких задачек? А то я к той с айфоном вообще боюсь переходить
>>686067При завершении скрипта соединение с БД закрывается. Незакомиченная транзкация отменится.даже если бы это было не так, ты бы мог откатить транзакцию поймав исключение.В общем, изучи теорию, например мой урок по исключениям ( https://gist.github.com/codedokode/65d43ca5ac95c762bc1a ) или любой другой.>>686070На задаче с афйоном спотыкаются все без исключения. Ты решение покажи - может окажется что там еще и переделывать надо.
>>686074https://ideone.com/o8Achq Вот решение
>>686074И всё-таки интересно, чем объясняется странное поведение скрипта, который внезапно перестал возвращать true/false?
Задача про стихи: http://ideone.com/m18LerНормуль?
Ахуенная функция array_rand. Я сейчас заново начал проходить учебник ОПА, в прошлый раз застрял на функциях, а потом долгий перерыв из-за смены работы ебучей. Теперь более вдумчиво всё делаю, в прошлый раз её в учебнике даже не увидел.
>>686077Интересно, что у тебя >$time = $age - 16;Ты мог бы сделать проще и понятнее, а именно - считать тайм отдельно:>$time ++Ответ получается 49 лет (у тебя 48). Это связано с тем, что в первый год выплат анону 16 лет. В случае, если прописывать>$time = $age - 16;, то первый год выплат (первое действие цикла) будет равняться нулю. Если же записывать $time++ , то первый год выплат будет равен единице (0 + 1).
>>686077>$age < 100Не совсем подходящий ориентир: а вдруг сумма нужная не наберётся до того момента, когда Анону исполнится сто лет? Здесь (и чаще всего) лучше в условие ставить итог, который нам нужен для завершения, то достижение, ради которого всё затевалось. А у нас это миллион рублей.>$time = $age - 16;А в первый год будет ноль пройденных лет, получается? Там должно быть 49 лет, если я не ошибаюсь.А так вроде всё нормально.Решения лучше не ищи, а задавай вопросы в треде.
>>683705> У мемкеша есть текстовый протокол, по которому клиент соединяется с сервером и посылает команды. Ты бы мог реализовать свой сервер который поддерживает эти команды.Да, я прочитал про текстовый протокол. Все равно что-то не понял, как я реализую свой сервер. Скорее всего я бы давно бы уже сделал, если бы ты мне написал более подробно, что да как.
>>682767А меня забыли? https://github.com/greenTea242/Student-list
что за атрибут <em data-ref="1"> из 10 задания по html/css в шапке? Гугли ничего не выдал(полезного) на htmlbook.ru тоже не нашел, я конечно мог бы сделать задание с помощю псевдоэлементов, но у меня такое чувство, что этот атрибут для того, что б его можна было редактировать и добалять без изменения css
https://github.com/foobar1643/student-list - исправления по студентам>>685837>У тебя вообще включен вывод ошибок? Ты их видишь? Как оказалось у меня все это время в php.ini были отключены E_NOTICE, из-за этого я их не видел. Уже не помню почему я его так настроил, но настраивал я его месяцев 6 - 7 назад, с тех пор не трогал. Сейчас вот с включенными E_NOTICE протестировал все приложение, вроде бы нормально работает.Ну и это>Эту штуку наверно в функцию стоило вынести, в тот же Table Helper, нехоршо конечно HTML функцией генерировать, но копипаста еще хуже, а макросов в phtml нету.Сделал по другому, как я писал тут >>685904
Можно ли зарегать mysql на каком-то другом порте, а не 3306?
>>686133Переменные кемелкейсом назови.
>>686158>>686152Спасибо за разъяснения, а то я как раз не понимал, почему 48 получается вместо 49. Про тайм++ и не подумал, хотя это даже очевиднее.
>>686230Да, и тут вот какая хуйня. Я когда решал эту задачу, писал >$time = $time ++Так не работает. Надо просто указать $time ++ без всяких равно. Подумал, вдруг тебе тоже пригодится.
>>686222Поправил
Привет, проверьте пожалуйстаhttp://ideone.com/BAiU1S // Yoda Speakhttp://ideone.com/zfi18q // Клавиша shifthttp://ideone.com/5PkSz6 // Опечаточникиhttp://ideone.com/iRS6qF // «Grammar Nazi»http://ideone.com/T7xLpR // Автозаменаhttp://ideone.com/tytESG // Номера телефоновhttp://ideone.com/Dpy8f8 // Ipad в кредит
>>686276>Ipad в кредит>Не выплачиваемыйШТОТы про Айфон задачу делал? Там столько же должно получиться, там те же значения, это контрольный банк для проверки решения.Остальные цифры тоже не верны в этой задаче.>АвтозаменаДостаточно флаг i поставить, чтобы избежать дублирования букв в верхнем и нижнем регистрах.>«Grammar Nazi»Что, простите? Ничего не понятно, что на выходе. Ты можешь сделать так, чтобы выводился кусок текст, а напротив него описание ошибки? Это было в условии задачи.В клавише и Йоде не определены переменные внутри функции, а так вроде всё в порядке.
>>686292>>Ты про Айфон задачу делал?http://ideone.com/T5xtpt>>там те же значенияВ айпаде ежемесячную выплату поставил 2100, т.к. обнаружил, что если ежемесячная выплата меньше определенной минимальной суммы, то цикл продолжается вечно, т.к. долг только растет. Поэтому добавил условие прерывания, специально для такого случая.
>>686222Ты не правильно учишь их, нужно им угрожать в стиле: ТЕБЯ МАККОНЕЛЛ ПОКАРАЕТ ЗА ТАКИЕ ПЕРЕМЕННЫЕ, и все сразу будут писать правильно.
>>686221Если свободный, то почему бы и нет?
>>686328>В айпаде ежемесячную выплату поставил 2100, т.к. обнаружил, что если ежемесячная выплата меньше определенной минимальной суммы, то цикл продолжается вечно, т.к. долг только растет. Лолшто? Всё неверно, всё надо переделывать.И 567 тысяч за Айпад в твоей задаче - это нечто, конечно.Неверно решена задача про Айпад, а про Айфон вроде бы всё в порядке. Только условие, когда баланс меньше нуля, не должно сработать, банк же не может быть должен чего-то анону.
>>686292сделал вывод ошибок в «Grammar Nazi»http://ideone.com/452fru>>В клавише и Йоде не определены переменные внутри функцииМожно ли использовать такую конструкцию для проверки переменной? if (!$text) { если переменная $text еще не определена, то присваиваем ей значение слово1} else { если в $text уже есть что-то, то сначала добавляем пробел, а затем прибавляем слово2}
>>686362Функция isset для проверки существования переменной.Иначе будет ошибка уровня notice.Но лучше переделать алгоритм так, чтобы не было сомнительных кусков кода типа "тут переменная может быть, а может не быть".Это неправильно. В крайнем случае можно инициализировать переменную, присвоив ей null.
Аноны, а будет лучше, если несколько вложенных друг в друга if заменить на функцию? Или без разницы?
>>686362Надо бы ещё захватить текста с обеих сторон от ошибки - иначе непонятно, где эта ошибка в тексте. И напротив ошибки надо бы вывести её описание.Для этого массив должен быть двумерным: array('регулярка с ошибкой' => 'описание ошибки'). А потом раскладываешь его через foreach.
>>686367А если switch?
>>686369Нет, менять if на switch не вариант, разницы вроде не будет.
>>686357HomoCredit: 56423.563121625 руб.SoftBankCredit: 61268.718210807 руб.StrawberryBankCredit: 53559.8738592 руб.Так правильно? http://ideone.com/lxEu1d >>И 567 тысяч за Айпад в твоей задаче - это нечто, конечно.Хм. Если каждый месяц выплачивать по 2100, под 4%+500 комиссии, при сумме кредита 39999, то срок погашения кредита 22 года и 6 месяцев.
>>686388Да, теперь всё хорошо.>срок погашения кредита 22 года и 6 месяцев.Представляю, каким раритетом будет Айпад после выплаты.
>>686199- открываешь слушающий сокет - принимаешь соединение- читаешь команду до конца- парсишь текст команды- исполняешь- посылаешь ответ- закрываешь соединение- переходишь к п2Напиши с каким шагом сложности. В общем демон работает по такому принципу, что принимает соединения и выполняет поступабщие запросы. Там есть варианты, если ты читал урок про архитектуру серверов, то бывают сервера обрабатывающие один запрос за раз, бывают асинхронные, которые как бы имитируют обработку в несколько потоков. Тебе подойдет самый простой однопоточный вариант. В плане кода желательно все это разбить на части: - модуль протокола, парсящий поступающие команды и кодирующий ответы на них в соотв. с протоколом мемкеша- модуль хранилища, хранящий данные и выполняющий дествия над нимиСами команды может быть можно описать классами в рамках ООП. Это конечно можно реализовать и вообще без ООП, но хорошо бы заодно попрактиковаься в умении разбивать задачи на подзадачи, и делать ООП дизайн. Уточни, что именно тут не понятно?
>>686211Это кастомный атрибут. Ты можешь добавлять в разметку свои dataатрибуты, ну например: <button data-confirm="Вы уверены что хотите удалить эту запись?">Удалить</button>Здесь мы добавили свой атрибут к кнопке и может быть мы напишем скрипт который будет при нажатии кнопки читать этот атрибут и выводить диалог подтверждения. Или: <div class="hotel" data-stars="3">Гостиница N</div>Здесь мы добавили в разметку информацию о числе звезд у гостиницы, которую может быть потом как-то используем (например будем выводить звездочки при наведении мыши или как-то еще). Гугли data-атрибуты. >>686078Скорее всего ты поменял что-то в коде и не помнишь. Поведение скрипта не должно меняться из-за xdebug.>>685904Идея с циклом вполне годная. >>686221Да, в конфиге меняется
Решил посмотреть немного матч в Го против компьютера, очень интересно, так как там комментатор - профессиональный игрок и много интересных вещей рассказывает, предсказывает ходы и тд. Ну и вообще сама игра очень сложная, так как с первого взгляда вообще непонятно что делать. Вчера решил немного посмотреть 3-й матч и завис на 3 часа, сегодня - 4-й.Ссылочка кому интересно: https://www.youtube.com/watch?v=yCALyQRN3hw
>>684617Впрочем, похуй.
>>686458Алсо не могу не позлорадствовать, что в напряженной ситуации все таки гугловская нейросеть сделала бессмысленный ход. Вообще, нейросети переоценены по моему, люди приписывают им магические свойства и чуть ли не способность думать или анализировать. Нет, они это не могут.Хотя я верю что IT имеет решающую роль в дальнейшем развитии, и везде будут роботы, но как-то нехорошо будет если человеческий мозг проиграет по всем параметрам и будет не нужен (в отличие от человеческого мозга, который не способен развиваться, компьютерные системы удваивают вычислительную мощность каждый год. Это заведомо проигрышная гонка).
>$date < time()>Notice: Object of class DateTime could not be converted to int>DateTime could not be converted to intЭто просто 10 из 10.Чтобы сравнить DateTime, мне нужно вызывать метод getTimestamp? Великолепно.
>>686458Кстати, а как нейронные сети реализуются програмно? Они ведь не переписывают свой собственный код? Как же тогда они обучаются?
>>684617>>686461Я думаю, это не имя. Вот мануал: https://httpd.apache.org/docs/2.2/mod/core.html#servernameтам написано: > ServerName [scheme://]fully-qualified-domain-name[:port]Там имя, а не адрес. Ниже: > If you are using name-based virtual hosts, the ServerName inside a <VirtualHost> section specifies what hostname must appear in the request's Host: header to match this virtual host.Там указывается имя, которое сравнивается с тем что в занголовке Host.Теперь про алиас: https://httpd.apache.org/docs/2.2/mod/core.html#serveralias> ServerAlias hostname [hostname] ...Я тоже тут не вижу ип адреса. то есть в апаче 2.2 нельзя (или нет смысла?) указывать там Ip адреса.Насчет того какой виртуал хост используется по умолчанию, и как на это повлиять - надо читать мануал. мне некогда, если ты можешь то почитай.
>>686458А каковы правила, в чем суть игры?Почему так долго комп не мог обыграть в неё человека?
>>686466>человеческий мозг проиграет по всем параметрам Лол. Человеческий мозг по всем параметрам превосходит компьютер.
Пацаны, я вообще ничего не понимаю. Дельфи - это язык или среда разработки?
>>686475Гугли персептрон.
>>686481Нихуя. Человеческий мозг способен обманывать, действовать непредсказуемо, а компьютер этого делать не может. Он как бог.
>>686488На самом деле человеческий мозг предсказуем, просто там очень сложные алгоритмы. Не бывает рандома.
>>686491А квантовая механика говорит, что бывает.
>>686472Смотря с чем.Если DateTime с DatetTime то для них работают (с помощью магии) операторы сравнения и есть метод diff http://php.net/manual/ru/datetime.diff.phpОбрати внимание что === в отличие от == сравнивает идентичность объектов а не их содержание. >>686475Обучение нейросети - это подбор коэффициентов связи (весов) у входов нейронов. Структура никак не меняется.Обычно это веса хранятся как числа в массиве так что спокойно меняются.Условно при обучении мы имеем пары "что на входе" - "что должно быть на выходе", например: - на входе A, на выходе X- на входе B на выходе Y Это называется обучающая выборка.Мы подаем на вход A, и затем разными методами корректируем веса входов нейронов так, чтобы сигнал на выходе имел минимальное отличие от X. затем берем следующую пару и тд. пока не обучим. например можно использовать метод обратного распространения: мы смотрим какие нейроны сработали правильно и поощраяем их, а неправильных наказываем (уменьшая у них коэффициенты).https://habrahabr.ru/post/198268/ (увы, много формул, хотя это можно проще объяснить, так что даже без математики будет видна логика)Ну и в реализации там перемудрили, классы там вообще не нужны.https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8Потом на тренировочной выборке (где у нас тоже есть известные пар вход-выход) мы проверяем: угадает нейросеть ответ или нет. Если разница с правильным ответом большая- значит мы где-то накосячили и плохо обучили или взяли плохую выборку. Нейросеть не создает новых знаний. При обучении в весах нейронов закладывается информация из обучающей выборке, и затем нейросеть при подаче сигнала на вход распознает в нем похожие паттерны на те что заложены при обучении.Я тебе советую почитать про примеры простых сетей - вроде перцептрона, который изучен вдоль и поперек.
>>686434Да все это понятно. Как написать такую вещь, попробую объяснить.Пишу memcache например, меня перекидывает на новую строку в терминале. Далее я могу уже вводить любые команды и передавать их скрипту. Как такое делается? Так же надо делать?
ОП, ты про 8е марта не забываешь? У меня там задача простаивает.
>>686480Захват территории. Почитай в википедии.Обыграть не может так как вариантов ходов очень много и перебрать ходы не получится. Также, партии не повторяются.И там есть такая штука, как стратегическое влияние, то есть захватывая пункт ты может быть только через 20 ходов используешь этот пункт для победы над группой противника. А компьютер так далеко просчитать не может. Одно дело когда такой пункт один, а когда сложная конфигурация, и там несколько таких пунктов то вообще не понять что может получиться.>>686481Но в шахматы проигрывает. >>686475Сеть описывается массивом чисел. Перцептрон можно хоть на пхп написать, можешь заняться, попробуй цифры пораспознавать.>>686493Там есть разные интепретации, в том числе исключающие этот самый рандом (многомировая теория). Сама квантовая физика лишь дает формулы для расчета вероятности той или иной конфигурации или перехода одной в другую, но от объяснения как это понимать, уклоняется. Ну например долгое время использовалась Копенгагенская интепретация, в рамках которой несчастная кошка Шредингера должна была быть в суперпозиции живого и мертвого состояния. Объяснять такие вещи сложно, это как если бы жители двухмерного мира пытались осознать что они на самом деле живут на плоскости в трехмерном мире.Если интересно, есть цикл статей на хабре https://geektimes.ru/post/171489/Формул там почти нету, скорее философия, можно читать и не физикам.
>>686510Тебе не надо писать клиент мемкеша - только сервер. Как делается? Открываешь стандартный вход и читаешь с него строки. Если хочешь редактирование и автодополнение, нужна библиотека readline (только линукс): http://php.net/manual/ru/features.commandline.io-streams.phphttp://php.net/manual/ru/function.readline.php
>>686525Чуть позже. Решай пока что-нибудь еще.
>>686530>Формул там почти нету, скорее философия, можно читать и не физикам.Квантовую физику без математики не объяснить.
>>686542Если ты собираешься рассчитать атом водорода или что-то еще - да, формулы нужны. А если просто понять принципы то может и не особо нужны.
>>686535Не понял. Я ввожу в терминале SET и демон сразу считывает? Или должен подключиться через telnet, или что?
>>686554Демон ничего не считывает из терминала. Он работает в фоне и принимает соединения через TCP порт или unix domain сокет. Ты должен подсоединиться и передавать команды через соединение.Чтобы сделать что-то с мемкешем, ты должен подключиться к нему (например через telnet, netcat или другю программу).
>>686554Кстати было бы здорово если все эти инструменты http://lzone.de/cheat-sheet/memcached работали с твоим псевдомемкешем. >>686554Выглядеть может так: в одном терминале ты запускаешь демон, он в нем сидит и в него же пишет логи для отладки.В другом терминале соединяешься с ним и щлещь команды.
>>686593Так это же все равно будет тот же мемкеш, я просто буду спаршивать команды и передавать ему?
>>686554И еще кстати, с помощью xinetd в линуксе можно превратить в сетевого демона обычную программу, работающую исключительно со стандартным входом и выходом. Ну например ты можешь взять команду date (выводит текущее время и дату) и получишь сервис который при соединении с ним выводит время/дату и закрывает соединение.
>>686602Нет. Ты будешь исполнять команды сам. Тебе надо написать реализацию сервера мемкеша. Сервер это тот кто принимает запросы и обрабатывает их. Это значит ты должен хранить в памяти ключи, изменять и искать их в ответ на запросы клиентов.
>>686609А с помощью чего я буду хранить в памяти данные? Просто присваивать перменным? Или как свойства класса?
>>686634Свойства класса это и есть просто переменные.
>>686502>с помощью магииЧто значит магия? Разве приведение типов это не нормальная практика?Ну, в общем, странно, что при вызове DateTime в контексте int не вызывается getTimestamp().>есть метод diffКоторый вернет DateInterval. Слишком много ООП для простого сравнения больше-меньше.
>>686634Подумай, какие данные хранятся в мемкеше. Подумай, какой способ хранения лучше подойдет. > Или как свойства класса?Объект это не массив чтобы в него свойства добавлять.>>686663> Что значит магия?Что для объектов работают операторы больше/меньше, ты не можешь сделать так же для своих классов и приведение тут не при чем.
>>686703>ты не можешь сделать так же для своих классовСерьезно, PHP это не может? Я недавно вкатился прост
Помню, в прошлый раз заёбывался с задачей на палиндром. Один ананас предложил такое решение: http://ideone.com/4w2ckXПоясните пожалуйста, как $text1. сравнивается с массивом?Когда я решал впервые, я думал, что нужно решать через массив, но я думал, что нужно сделать 2 массива и сравнить их элементы ($i будет ключом, в таком случае). Тут всё было бы понятно: i задала ключ для двух массивов, элементы сравнились:0 => "а" == 0 => "а" Как происходит сравнение в этом решении http://ideone.com/4w2ckX ? Что там с чем сравнивается? Почему переменная записана как $text1. (с точкой)? Короче, можете объяснить, как это работает?
>>686709А ещё я нихуя не пойму, какое значение было присвоено $text1.По идее, вот это действие $text1.=$textarray[$i] каждый ход цикла присваивает переменной $text1. новое значение (каждый цикл - одна буква). На выходе $text1. должен быть равен последней присвоенной букве. В таком случае, почему одна буква оказывается равна целому слову?
>>686715Разобрался.$text1. - это склейка букв.В $text1. записывается $text задом наперёд, потому что в условии цикла указано не привычное $++, а наоборот $i--. Таким образом, набранное задом наперёд слово сравнивается с исходным словом. Всё верно?
>>686709Точка - это конкатенация (склейка строк).$text1 .= $textarray[$i]; это то же, что $text1 = $text1 . $textarray[$i];Алсо, решение не оптимальное. Цикл может крутиться меньше, подумай как.
>>686720Верно.
>>686722Ебать вы учёные, я бы и до этого не додумался)
>>686722Может быть, в самом цикле сравнивать текст1 и текст?
>>686730Совершенно верно.
Уточню, тут два пути:Сравнивать в цикле (но не строки)Или сравнивать после цикла
>>686745Зачем заострять внимание на таких мелочах?
>>686764Вдруг он цельные строки будет в цикле сравнивать?
Такая проблема - PHP у меня под виндой упорно считает, что Europe/Moscow это +4 часа, а не +3.В винде все верно, часовой пояс +3.Все мануалы по обновлению таймзон в пхп сводятся к установке PECL-пакета. Как я его под виндой установлю? Хелп.
При этом у MySQL все хорошо - FROM_UNIXTIME правильно прибавляет 3 часа ко времени.
>>686769Версия пхп какая?
>>6867815.3А что, таймзоны собираются вместе с версией?Если подскажешь, как обновить PHP в моем Денвере, буду благодарен.
>>686787Очень старая версия. Можно отказаться от денвера.
Есть проблема. Есть несколько пхп скриптов. Суть их такова - регистрация и авторизация пользователя. Я ввожу логин и пароль, они забиваются в бд, еще там записывается айди, айпи. Через них можно авторизироваться и выведет сообщение о том, что всё произошло удачно.Если регистрируешь логин что уже был - пишет ошибку. Если вводишь неправильный логин или пароль - тоже выводит ошибку. Это я нашел в интернете. Работало чуть некорректно, поправил(не я, с одногруппниками сидели). Доделали до состояния, когда при авторизации оно проверяет и при определенном айди открывает через header страницу админа, во всех остальных случаях - страница юзера. Происходит перевод через специальный скрипт check.php . Если непосредственно написать в адресной строке страницу админа, то проверит ваш айди и перенаправит. Так вот, в чем суть. Суть в том, что этот скрипт не работал на моём MySQL. У меня стоит php7,apache2.4, mysql 5.7. У одногруппников работало, но на денвере. Поставил я себе денвер. Не работало, пока не удалил MySQL. Тогда заработало. Сначала я подумал, что проблема с портом(и там и там получается порт 3306). Но когда я вместо 3306(когда начал заново устанавливать MySQL Server) поставил 777 то начало выводить ошибки на странице. Когда был MySQL и работающий код, то он просто не работал, ошибок не показывало. Просто не добавляло данные пользователя в базу. В чем может быть проблема? Если кто-то готов чуть углубиться чтобы помочь, можете дать контакты, скину проект, он очень маленький, кода практически нет. Не могу понять почему не работает на новых инструментах, а на денвере(специально чтобы потестить проект, я его и поставил) работает. Пример для регистрации-авторизации брал тут http://htmlweb.ru/php/example/avtorizacija2.php , но у меня уже немного доработанный вариант.Буду очень рад, если поможете(работать в денвере нет желания, но похоже придется если не пофиксю).Очень долго над этим сидел и никак не хочет работать. Подключение шло ч-з ф-ции что работают в php7(ошибок не было). MySQL php apache, поставленные ручками, работали прекрасно, проверял до этого.
>>686834На гитхаб закинь. Давать контакты, ради потенциальной порции лапши, тут вряд ли будет много желающих.
>>686849Ок, вроде я регистрировался на гитхабе. Сейчас закину.
>>686834>>686849>>686852https://github.com/EvgheniiSytnyk/Clio-CaliopeВот скинул. Гитхабом пользоваться особо не умею и в php практически новичек, так что не придирайтесь.
>>686858Точнее придирайтесь и говорите что не так, но не насмехайтесь.
>>686703> Объект это не массив чтобы в него свойства добавлять.Я не об этом. Свойство $data, там информация хранится, свойство $expire там время жизни написано. Ну и уничтожать объект из памяти потом. Верно? Если так, то все слишком просто получается.
>>686858В register.php у тебя какой-то странный запрос, попробуй переписать инсерт под шаблон отсюда: http://www.w3schools.com/php/php_mysql_insert.asp
>>686882А что с запросом не так?
Посмотрите. Рабочий вариант?http://ideone.com/lE757J
>>686891Никогда не видел чтобы где-то использовался insert into с подобным синтаксисом, больше похоже на update, но сейчас проверил у себя в MariaDB (тот же MySQL с некоторыми отличиями) - твой вариант работает. Я и сам тут недавно, так что оставлю это на кого-нибудь более скиллованого
>>686906Тут-то проблема судя по всему не в этом. А в том, что новый Apache+PHP+MySQL не работает, поставленные ручками, а денвер с коробочки работает.
Ура, я обновил PHP в Денвере до 5.5.33!5.6.8 тоже запускается, и все работает, но Апач почему-то начинает ругаться на одну из библиотек.С 5.6.19 Апач вообще падает при любом запросе.
http://codepad.org/5vk2AMrpВоот Должен парсить гугл подсказки и сохранять результат в result.txt, но создаётся пустой файлПомогите пожалуйста
У кого стоят apache php mysql поставленные ручками, пожалуйста, проверьте работу вот этого - >>686858Запрос для создания базы там же.
>>686922Захожу я в admin.php, и у меня права юзера.>(($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0")))А если в базе остался IP с прошлого залогина?
>>686921Тебе три строчки не отладить?Все, что надо проверить - есть ли ответ, и не съедают ли регулярки весь текст.
>>686941Ну по идее с каждого логина же перезаписывается айпишник, каждый раз. Я этот код не сам писал, а нашел и чуть доработал. Вопрос в другом - почему на собственноручно поставленных инструментах не работает? Ты тестил на готовой сборке или сам ставил всё?
>>686953Хотя, в admin.php надо все же будет поменять местами вывод сообщения о правах админа и проверку на айди. Но это уже завтра, комп выключил уже(целый день сидел).
>>686953Помимо установки Apache, MySQL и PHP, какие-либо ещё настройки над ними производил? Может, в php.ini одна из строчек extension, отвечающая за работу mysqli, заблочена?
>>686973Нет, как раз mysqli прекрасно работает. Я создавал в консоли базу данных маленькую с двумя полями, и с помощью mysqli выводил в php-скрипте, работало. В настройках ничего не менял кроме того, что разблочил mysqli и pdo.
>>686941Я мимо проходил но это выглядит наркомански: > $userdata['user_ip'] !== "0"Как IP-адрес может быть равен нулю?
>>686978Включи отображение ошибок либо смотри логи. Не бывает так что ничего не работает на пустом месте.
>>686996Ладно, я завтра еще скрины ошибок скину в тред. Просто я сидел сегодня за компом весь день и устал. Рассчитывал что кто-то скачает себе мой проект и потестит у себя, будет ли у него корректно работать, а этого так никто и не сделал, что печально.
>>686998Долго. Да и ты сам можешь создать у себя второй виртуальный хост, скачать туда и проверить.
>>686998Соррян, бро, я бы потестил, но я тупой и сам буду сношаться полдня с тем, как запустить.
>>687028Скачиваешь архив с гитхаба, разархивируешь, скидываешь папку в С:\Apache24\htdocs, запускаешь localhost/названиеПапки/registr.php. Вбиваешь туда логин и пароль любые, потом их же вбиваешь в login.php, если пишет про твои права доступа значит работает.
>>686834Ну накатил на свою убунту. Вроде работает. За параметры подключения к БД в 3-х разных местах, конечно руки нужно отбивать.А зачем тебе эта лапша древняя?
>>686913Расскажи как это сделать. Тоже хочу, но я слишком ленив, чтобы искать самому мануал.
Зацените пацаны:Палиндром - http://ideone.com/08RssiКредит на айпад - http://codepad.org/vQZhYPVj
>>687264Палиндром - тихий ужас.При этом не работает правильно: http://ideone.com/ucgsR2Внутрь можно роман Льва Толстого "Война и мир" поместить.Копипаста - зло в программировании.Здесь можно использовать простой алгоритм после удаления пробелов и приведения букв к одному регистру:1. Сравниваем в цикле for первую букву в строке с последней. Если они не совпадают - выводим результат "Не палиндром". Если совпадают - перемещаемся по строке с обеих сторон: сравниваем вторые буквы с начала и конца строки.2. Изменять ориентиры для работы функции mb_substr можно с помощью переменной $i, которая будет изменяться при каждом прохождении цикла.3. Когда $i становится равной $halfLength (это означает, что цикл работал, буквы удачно сравнивались) - выводим результат "Это палиндром".
>>687264Аа, да: задача про Айпад решена верно.
>>686368Переделал вывод ошибок, и сделал двумерный массив, как советовал.http://ideone.com/BQSvJk //«Grammar Nazi»
Анон с мемкешем, у меня ощущение конечно что я тебя запутал, может тебе написать алгоритм работы мемкеш-сервера (который надо написать) и как код разбить на классы?
>>687364Давай, почему нет.
>>687379Открыть портПока (не поступила команда завершиться) {принять соединение;обработать соединение;}Обработка соеднения: Пока(соединение не закрыто) {Пока (в буфере не собралась полная команда) {- прочитать данные из сокета в буфер} - Распарсить команду из буфера, оставив в буфере следующую команду- выполнить команду- подготовить ответПока (ответ не отправлен целиком) {отправить следующую порцию ответа}}Тут есть несколько подвохов: - с сервером не могут одновременно работать 2 клиента- если клиент не читает ответ, сервер заблокируется на этапе его отправки- если клиент прекратил отправлять запрос, сервер заблокируется на его чтенииКостылики: - ввести таймаут на сессию работы с мемкешем, по истечении - выкидывать клиента- ограничить число запросов, например после первого же запроса закрывать соединение чтобы дать шанс другим выполнить запросПолноценное решение этих проблем требует освоить асинхронное программирование (напрмер socket_selet или мощный фреймворк ReactPHP - я думаю, мы это сделаем но для начала надо научиться более простым вещам).Не забывай проверять все операции ввода вывода на ошибки. Проще всего это сделать. обернув работу с сокетами в класс с исключениями.Не забывай следовать принципу разделения кода и единой ответственности. Я вижу такие классы: - класс работы с сокетами- класс парсинга команд протокола и кодирования ответа- классы представлющие команды мемкеша- класс реализующий хранилище данных и операции над нимиВообще, тут конечно вопрос, есть ли смысл использовать паттерн Команда и делать каждую команду отдельным классом. Я думаю, есть.
Посоветуйте хорошую книгу по php, чтоб не сильно устаревшая была и много полезного в ней было.
Поставил netbeans, непривычно то как. Какие преимущества есть у IDE перед простыми редакторами, а то я подумываю вернуться к родному sublime?
ОП в студентах предлагает использовать TableDataGateway и даёт ссылку http://design-pattern.ru/patterns/table-data-gateway.htmlНо там как бы нихуя нет, или я не прав? Где почитать-то что это и как использовать?
>>687413Ну тип создаешь класс студентов и класс шлюза студентов. Шлюз имеет методы вставки в бд(принимает объект студент), удаления из бд, выборки данных и т.п.
>>687413А тут https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md ? TDG это когда просто операции надо таблицей собирают в один класс.
>>687421>>687423Спасибо.
Ещё по студентам вопрос: я создаю отдельный файл со всеми классами, которые использую в задаче. Так вот, как сделать, чтоб эти классы распространялись на все файлы моего "проекта"? Т.е. иными словами, чтоб из любого .пхп - файла я мог их объявлять и они были соединены друг с другом?
>>687431Каждый класс должен быть в своем файле. Тебе нужна автозагрузка: https://github.com/codedokode/pasta/blob/master/php/autoload.md(кстати в гитхабе ОПа есть и другие не менее полезные уроки).
>>687446спасибо опять
Рейт задачки. https://ideone.com/gnBTvs
Посоветуйте годный учебник по матеше за все классы, включая первый, лол.
Нужен мудрый совет по верстке. Как по уму вертикально позиционировать элементы? Самый простой напрашивающийся вариант это margin-top, но я тут на всяких сайтах постоянно встречаю такое мнение что блок должен быть универсален и не зависеть от окружения, что если в шаблоне вырезать логотип или заголовок и вставить в другое место он должен вести себя независимо, а сохранив этот отступ сверху он может и сам уехать вниз и другие блоки что под ним вытолкнуть вниз. position: relative/absolute еще хуже так как выключает блок из потока вообще.inline-block + vertical align, table-cell - все те же проблемы.Можно ли запилить какие-то вспомогательные классы типа .margin-top-40 и вынести в них то что относится к позиционированию, а потом добавлять к основному классу? Ну например<div class="logo margin-top-40"> Насколько это костыльно?
>>687658В данном случае 2 указанных штуки можно спозиционировать абсолютно относительно огромного блока с картинкой. Почему АП? Потому что в данном случае если подумать то расположение надписей жестко задано относительно родителя (столько-то пикселей слева и сверху). Однако! Надо понимать что при изменении ширины экрана места для надписей может не хватить. Потому необходимо:- если сайт неадаптивный, задать для него миним. ширину например 800 пикс (точное число надо проверять опытным путем). Мин. ширина задается через min-width на body.- если сайт адаптивный, надо поменять правила позиционирования этих блоков (и размеры шапки) на маленькой ширине.То есть мы выбираем способ позиционирования исходя из логики расположения блоков. Подумай: от чего зависит расположение этого блока и его размеры? К чему он привязан? Ответ прост: расположение привязано к шапке, размер определяется содержимым.В моем способе если добавить контент перед шапкой или перенести шапку в другое место надписи останутся расположенными корректно. значит я правильно выбрал схему позиционирования.Минус АП в том что блоки не могут влиять друг на друга и на родителя. Например если в нижнюю надпись мы зафигачим 3 абзаца текста, она очень некрасиво вывалится из шапки. Если такая необходимость есть, придется отказаться от АП и сделать эти 2 блока через display block с маргинами или флоаты, а саму шапку растягивающейся (понятно что тут это не требуется, но может в другой ситуации подойдет.).
>>687658> Можно ли запилить какие-то вспомогательные классы типа .margin-top-40 и вынести в них то что относится к позиционированию, а потом добавлять к основному классу? Ну напримерС таким же успехом можно написать style="margin...". Стили должны быть в cSS, более того я не понимаю что тебе мешает их повесить на класс .logo? > Как по уму вертикально позиционировать элементы? Зависит от конкретной ситуации, есть варианты: АП, inline-block, display table. > но я тут на всяких сайтах постоянно встречаю такое мнение что блок должен быть универсален и не зависеть от окружения, что если в шаблоне вырезать логотип или заголовок и вставить в другое место он должен вести себя независимоВ данном случае если подумать, эти 2 блока действительно никак друг от друга не зависят. Маргин-топом выравнивать их действительно неправильно.> position: relative/absolute еще хуже так как выключает блок из потока вообще.В данном случае мы понимаем что в нем может быть только заданный нами текст и мы можем грубо прикинуть его размеры.
>>687658Кстати, если тебе интересно, для строки меню/поиска есть 2 варианта: - сделать поиск и блок меню флоатами в разные стороны, и внутри блока меню сделать 5 флоатов с 20% шириной- сделать единую строку из display table.
>>687710> Мин. ширина задается через min-width на body.Точнее на html
>>687658Алсо на картинке надпись industrial solution надо подвинуть вниз. Она должна быть на одном уровне с другими заголовками, а не привязана к форме поиска.
ОП, android же linux. Можно ли там установить апач, php, не ставя образы других линуксов? Я хотел бы в маршрутке, пока на работу еду, писать код и тут же запускать. Например студентов пилить.
>>687737Можно. Есть готовые решения типа BitWebServer или ksweb. Ну или если ты любитель игр с консолькой, можешь найти гайды в интернете и собрать апач и пхп под arm архитектуру сам.
>>687746А ты сможешь помочь, если будут вопросы? Хочу собрать. Рут у меня есть, консолька есть. Осталось погулить.
>>687737Рут не нуженНужны: - веб сервер, например Апач- интерпретатор PHP- при желании mysql- редактор для кода- браузер чтобы смотреть получившийся сайт (не уверен, можно ли на андроиде править hosts - так что возможно придется заходить по IP или localhost)Есть разные программы, платные и бесплатные, и это все можно ставить по частям или может быть вместе. Обычно там, где все вместе и уже настроено - платно.
>>687737Алсо насколько я знаю на андроиде очень неудобно переключаться между программами, потому если у тебя редактор и браузер отдельные то может быть не очень удобно. Ну и плюс стандартный браузер не позволяет смотреть исходный код страницы.
>>687764Исходный код мне не нужен. Я не верстать. Приложения сворачиваются, немного медленней, чем на компе. Буду пробовать.
>>687710>В моем способе если добавить контент перед шапкой или перенести шапку в другое место надписи останутся расположенными корректно. значит я правильно выбрал схему позиционирования.Парирую. Приходит чувак и говорит добавь в шапку какой-нибудь шняги между этими двумя блоками. Так как они спозиционированы новый блок их не видит и отображается поверх или под ними. В случае с маржинами такого не случилось бы.>К чему он привязан? Хороший вопрос. То что к шапке понятно, но с равным успехом можно сказать '50рх от верхнего края' или '40% от высоты'. Макет нам об этом ничего не скажет.>>687718>С таким же успехом можно написать style="margin...". Стили должны быть в cSSОни в css. Типа такой вспомогательный класс. И я уже собственно нагуглил, в бутстрапе такое применяется.>более того я не понимаю что тебе мешает их повесить на класс .logo? Переносим лого в другое место и там оно тоже отжимается книзу. А должно себя вести как обычный div.
>>687760А там нельзя подключить репозитории и скачивать с помощью apt-get install?
>>687775> Парирую. Приходит чувак и говорит добавь в шапку какой-нибудь шняги между этими двумя блоками. Так как они спозиционированы новый блок их не видит и отображается поверх или под ними. Придется переделать. Ведь этот чувак может заодно например попросить и логотип вправо передвинуть, чтобы место расчистить. Ну и в случае с маргинами маргины придется менять чтобы освободить место. То есть все равно что-то менять придется.Конечно если у тебя там надо будет вместо одной надписи отобразить например несколько друг над другом то надо спозиционировать абс. блок с надписями, а сами надписи сделать блочной версткой.К счастью, переделка затронет только блок шапки что я не считаю большой проблемой.Плохо это например если у тебя например расположение меню привязано к высоте шапки и при изменении высоты шапки она залезает под меню. > . То что к шапке понятно, но с равным успехом можно сказать '50рх от верхнего края' или '40% от высоты'. Макет нам об этом ничего не скажет.Надо включить интуицию. Я бы использовал пиксели относительно верха и лева на случай если какой-то маньяк захочет удлинить шапку. > Переносим лого в другое место и там оно тоже отжимается книзу. А должно себя вести как обычный divНет. Очевидно что при переносе в другое место придется менять правила позиционирования под новое окружение. Там суть в том что если у тебя лого - сложный составной объект то внутренние элементы при переносе не надо переверстывать. Ну проще наверно на меню пояснить: мы переносим меню с верха страницы в низ, и внутренние блоки в этом меню не требуется менять.
>>687777Там есть пакетный менеджер, и гугл плей (которым можно не пользоваться, а скачивать и устанавливать пакты руками).
Очередная задачкаhttps://ideone.com/AEI2HM
Привет, посоны.Есть две таблицы, в одной столбец с именем name, и в другой столбец с именем name.Вопрос в следующем: почему при вызове запроса типа>SELECT `table1`.`name`, `table2`.`name` FROM `table1` INNER JOIN `table2` ON `id`.`table1`=`id`.`table2`пхп в результате выводит значение только одного столбца, а другого как будто бы и нет?Вот то, что выдал пхп:Array( [0] => Array ( [name] => чекбокс ) [1] => Array ( [name] => чекбокс )...Ну и так далее.MySQL выдаёт то, что на пикче.Короче, что это всё значит, аноны? Надо перед названиями столбцов ставить префиксы?
>>688389Ты массивы изучал? В массиве не может быть 2 элементов с одним именем, очевидно второй столбец перезаписывает первый. задай для них синонимы (алиасы) в запросе.
>>688411Понял, анон, спасибо. :ЗА вообще, я думал, что MySQL учитывает, что возвращаться будут значения с одинаковыми ключами, и автоматически меняет значения ключей у одинаковых элементов. Примерно как на скрине, да.
>>688414Вот поэтому sql такая хуета. Рикаминдую Mongo и Redis.
Поясните за инкапсуляцию, полиморфизм и паттерны своими простыми словами.
>>679725Ты бы хоть как-то в комментарии написал что там за алгоритм. А то я открываю - стена кода и многомерные массивы в которых непонятно что хранится.> $INF = 1000000000;Есть константа INF с настоящей бесконечностьюПеременным надо давать осмысленные имена: $banknotes as $key => $value - что такое key? Здесь: > if ($minBanknotes[$i][$amount-$key]Не может получиться несуществующий отрицательный индекс? > foreach ($minBanknotes[$i] as $key => $value) {> if ($minBanknotes[$i][$amount-$key] == $minBanknotes[$i][$amount]-1){Это выглядит как-то переусложненно. Зачем нам перебирать все значения key когда мы можем перебирать только значения соответствующие номиналам купюр? Также, у тебя нет проверки что данная комбинация купюр имеется в наличии. Теоретически можно было бы проверять каждую комбинацию купюр, есть такой запас или нет. Однако, использованный алгоритм не гарантирует решения задачи. Он находит комбинации с минимальным числом купюр, а вполне возможно что для решения нужна "неоптимальная" комбинация. Получается надо использовать перебор всех возможных комбинаций.>>679536 При чем тут Апач? Ты ведь код запускаешь не через Апач а через веб-сервер настроенный в phpstorm. даже на скриншоте видно что там написано phpstorm, а не Апач. Я тебе написал что нужно сделать: нужно изучить документацию по phptorm которая есть в интернете (на англ.) и разобраться какой тип сервера с какими настройками там исплоьзуется. Ну либо не запускать код через phpstorm.Также теоретически этот веб-сервер может писать подробности ошибок куда-то в лог, но я не знаю куда. >>679533Там не Апач
>>679738Ты по моему переусложнил. Для проверки допустимости можно просто сравнивать получившиеся комбинации с запасом купюр. >>679773> Поскольку F определяется рекуррентно то уже при числах порядка 50000 уходит ОООЧЕНЬ много времени.Там же вроде сложность = сумма x число купюр, терпимо. Ну и можно поделить все суммы на наибольший общий делитель номиналов купюр.> Так что этот алгоритм для решения задачи про банкомат с ограничением банкнот не подходит.Похоже, что да ((>>680027 Там пока единственный сигнал который ты будешь подавать это Ctrl + C, не требуется писать средства демонизации, управления запуском и тд.>>680036Не знаю, я не знаю что ты с ним хочешь сделать.>>680177 Сделать таблицу кто как голосовал
>>680314 По ссылке пусто>>680368 Да, для начала такое решение подойдет>>680435 Ты скопипастил функцию 3 раза. Суть функций в том чтобы наоборот избегать копипасты и сделать одну функцию для всех случаев. Потому решение неправильное.Алсо у тебя там бесконечный цикл: for(;;) Ну и лучше начни с задачи на айфон, так как по сути тут надо просто взять код из той задачи и завернуть в функцию.>>680441 Похоже что ты прав>>680458 У тебя не код а сплошная копипаста. Функция скопирована 3 раза, суммы выплат скопипащены десять раз, так писать нельзя. Надо избавиться от всех повторов. Похоже что ты пока не разобрался зачем нужны функции.> for(;;){Сюда можно добавить условие проверяющее остаток долга. В оригинальной задаче там счетчик месяцев для защиты от зацикливания.
>>680471С помощью картинки или формы. img src=example.com?cookie=123same origin policy не запрещает отправлять запросы на другой сервер, она запрещает читать ответы на них.>>680480 Почему ты стили через file: подключаешь? Как их другие пользователи интернета увидят? >>680482Знак доллара пропустил?
>>680645> public function hireEmployee($occupation, $rank, $boss) {Эта функция странно смотрится в департаменте. Зачем это департамент создает работников? Вот смотри, завтра мы допустим захотим добавить работнику свойство "возраст". мы отредактируем класс Employee. Как теперь через твою функцию задать возраст работника? Надо переделывать еще и эту функцию.Вот подумай, где тут логика: мы добавили свойство в работника, а должны еще править код в других местах программы. ООП придумывался как раз чтобы такого бардака не было. Чтобы достаточно было только поменять код одного класса.Классы должны каждый отвечать за свою область. Департамент не должен определять процесс создания работника.> $name = $name . "(босс)";Это ведь не обновится при потере статуса босса. И ранг не поменяется в имени.> public function getStatistics() {Нет смысла делать гигантсткую функцию, лучше сделать 3 раздельных функции. > switch($employee->getOccupation()) {> case "аналтик":В ООП делается не так. Для расчет зарплаты достаточно информации о работнике и значит этот код должен быть в нем. В твоем коде например нельзя добавить новую профессию не трогая код департамента. Для обозначения разных профессий надо использовать константы, а не надписи на русском. Что если у тебя опечататься в названии профессии? Никакого сообщения об ошибке не будет.О, ты опечатался сам и не заметил этого. Потому что твой код не проверяет наличие ошибок в профессии.> public function createDepartment($name) {Это очень негибко. Вот смотри, есть 2 отдельных действия: - создать департамент- добавить в компанию департаментТы вместо того чтобы позволить их делать как угодно, сделал все в одной функции. Но например объект департамента может быть создан снаружи, может быть откуда-то передан и тд. какой смысл запрещать добавлять созданный снаружи департамент? Ну и опять же, если мы например добавить департаменту какие-то новые свойства, нам придется идти и переделывать код класса Компании- это значит что неудачно спроектированы эти классы.> public function hireEmployee($occupation, $rank, $boss, $department) {Ты эту функцию копируешь в оба объекта - это верный признак что у тебя неправильно спроектирвоаны классы. За найм работников должен отвечать кто-то один.Также неправильно идентифицировать департаменты по названию. Объект сам по себе уникален и идентифицирует сам себя, название не требуется, достаточно иметь ссылку на объект.
>>680749Ты посылаешь неправильный запрос> я там поставил функции memory_get_usage перед чтением и записыванием и после. Память возрастает почему-то все равно. Не могу понять.В PHP автоматическая сборка мусора. Нет гарантий что сборщик будет вызван в данный момент. Работа сборщика мусора описана в мануале.>>680755Было бы неплохо тогда показать код, а то я его не вижу.>>680902 Начать можно с наивного решения полным перебором.>>680904ты не обязан такие вещи делать именно через бутстрап. Алсо, я уже не раз говорил, бутстрап плохо подходит для обычных сайтов так как навязывает свою сетку, свои стили, и переопределять все это тяжело и проще его вообще не подключать. Заодно код намного легче станет.Он вообще то делался для случаев когда не хочется тратить время на дизайн.>>680908 Платина: ### переносы строк и brЧтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить header("Content-Type: text/plain; charset=utf-8");Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и уважать переносы строк в нем (так как в языке HTML перенос строки равносилен пробелу).Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
>>680918Названия переменных очень неудачные так как путаются. Надо было попроще вроде $index1, $word1. Чтобы не копипастить, первые 2 строки можно сделать циклом. Также, можно избавиться от промежуточной переменной и сразу брать слово с индексом array_randВ конце вместо запятых в эхо лучше использовать двойные кавычки и подстановку переменных.>>680934 написано: файла нужного нету>>680936названия переменных неудачные, можно было писать $w1 = $words1[array_rand...]>>680945Мне не нравится: нечитабельно. \n лучше читается.>>680971 Вряд ли ты найдешь ровно то, что тебе нужно. Надо самому писать. Либо взять монструозную CMS вроде друпала и попробовать настроить это в нем, но это сложно.
>>680972Это в линукс есть такая концепция, everything is a file. Это дает преимущества вроде простого управления доступом к ресурсу и наличия большого числа готовых инструментов для работы с файлами (например в линуксе обычной командой копирования файла можно сделать образ жесткого диска), но имеет и недостатки (как миниумум в том что эти псевдофайлы надо создавать, также иногда они не полноценно имитируют реальные файлы). В PHP пошли немного дальше и сделали потоки/streams - абстракцию над сокетами, файлами, архиваторами. Можешь почитать в мануале.> Но они и правда вроде такие же как и с файлами.Общее у них только то что в них можно писать/читать. Это позволяет например взять обычную программу, выводящую что-то на стандартный вывод и превратить ее в демона с помощью xinetd, который при подсоединении что-то полезное выводит в сокет.fsockopen - древний вызов, там есть какие-то недостатки - например нельзя указывть опции дял сокета. Зачем нужна Ява в PHP не знаю, ни разу не сталкивался.> на пхп можно и флеш генерить.Тут есть 2 подвоха: 1) флеш уже полумертвый 2) это библиотека не от адоби, значит гарантий полной совместимости и надежности нетНу и как я понимаю, там возможности очень ограничены, компилировать скрипты например она не умеет. >>681041 Она старая и на такое не рассчитана. Не умеет работать с utf-8 урок: https://gist.github.com/codedokode/ff99e357e9860ea169b8>>681070Сомневаюсь. Приходилсь работать с многомегабайтными XML с его помощью.>>681080 Надо изучить протокол HTTP. SQL запросы надо изучать отдельно, они тут вообще не при чем.>>681104 Нужно уметь пользоваться линуксом и иметь права администратора. > есть подробный манул, для таких, как я?Я не умею водить машину и не знаю ПДД, но у меня стоит во дворе Запорожец, как мне доехать до соседнего города?
>>681113Где htmlspecialchars? Почему даешь неправильные примеры кода с уязвимостями? >>681151Не нужно заваливать интернет поисковым спамом.>>681201 Надо лучше изучить яваскрипт и HTML очевидно, проблемы от того что ты пока не уверенно в них ориентируешься.
>>688456> По ссылке пусто>>680755> Было бы неплохо тогда показать код, а то я его не вижу.Ладно уж, залил на гитхаб. ОП, надеюсь мне не придется снова ждать неделю.https://github.com/fxsloker/SocketDownloader
UPDATE works SET cost=(SELECT SUM(cost) FROM works)Как обновить таблице самой себя основываясь на данных самой себя?
>>688594всё разобрался. кому надо линкану.http://ramzes.ws/blog/cant-specify-target-table-for-update-in-from-clause
Подождите ка, я что-то не понял, php это бэкэнд что-ли?
>>688631Да.
>>687648Могу посоветовать по матану годную книгу.Правда она на украинском, лел
>>688716ребят помогите с задачкой W5.1. Школьник решил купить айфон.http://ideone.com/m70whG
>>687648khanacademy правда на английском.
>>688561Может тебе еще и залупу вареньицем помазать?Ахуевший ты анон.Будь благодарен, что оп вообще проверяет.
>>688719>$paymentTotal + $paymentTotalА где переменная, которая будет содержать результат этого выражения?Ты вообще пробовал решить задачу? Вроде бы несильно отличается от кода ОПа.
>>688739Я благодарен. Я могу и неделю подождать. Я просто НАДЕЮСЬ, ничего такого.
>>688739Не надо тут ругаться. Все проверим, как будет время. Пока придется немного подождать. Ну и в случае с сокетами - можно писать пока простого демона мемкеша.Анон, давай, пиши уже мемкеш, хватит 3-4 команд, и давай переходит к асинхронщине, socket_select, а затем уже и reactPHP который очень даже понадобится для вебсокетов.
>>688742ну да уже 2й час как пробую
>>688742>if($creditBalance < 5000) проверяет >$creditBalance + $creditBalance выплачивает видимо не все так просто да?
>>688747Алгоритм такой:1. Прибавляем к $creditBalance проценты и $servicePayment.2. Если получившаяся переменная меньше $monthlyPayment, то выплачиваем именно её и прибавляем её к $paymentTotal. После этого завершаем цикл.3. Если получившаяся переменная больше или равна $monthlyPayment, то отнимаем от неё $monthlyPayment, продолжаем цикл.>>688752Какой-то сумбур, не вполне тебя понимаю, что ты несёшь?, к чему вообще $creditBalance + $creditBalance тут может быть?Ты точно сделал предыдущие задачки? Покажи-ка, а то такое ощущение, что ты не понял, что такое простые условия с if и else.
>>686208Забыли.
>>688747На этой задаче все спотыкаются, не беспокойся. Для начала ты можешь попрбовать решить ее поставив сумму кредита = 4000 (ответ должен быть 6123). А потом добиться чтобы работало с любой суммой
>>688757http://ideone.com/ETg680
>>688760Я не спотыкался. Не обобщай.
>>688767>Расшифровка - нас прздали. явка провалзна.Ну а так нормально вроде. Тогда продолжай по алгоритму выше.>>688770И где твоё решение? Я что-то не видел, чтобы кто-то не споткнулся. Был один, который сделал с уходом в минус и упорствовал в своём решении, но это мелочь.
>>688757http://ideone.com/m70whGя как-то неправильно выплачиваю остаток ?
>>688789Получается, что последний месяц у тебя пропадает, так как стоит break.Попробуй echo просто поставить в это условие.
>>688810всм что-то я догнать не могу,окей а с каким условием должно быть echo?
>>688810что-то не то мне как-то нужно последний месяц сохранить
>>688789То есть echo не успевает вывестись, так как обрывается цикл.А если поместить внутрь условия if($creditBalance< $monthlyPayment), то всё получается верно.Так-то можно оптимизировать несколькими способами, чтобы таких повторов избежать.>>688815То же самое, какое и в самом цикле, но только в условие.
>>688818если я добавляю echo в условия if($creditBalance< $monthlyPayment)то он просто выводит 1 раз >13 месяц спустя: долг = 1270.1867445207 руб, выплачено всего 61270.186744521 руб.
>>688820Так и должно быть.Сумма в итоге получается правильная.Но $creditBalance должен быть равен нулю. То есть от $creditBalance надо отнять $monthlyPayment, ставшую равной $creditBalance. Неясно как-то вышло, наверное.
>>688820Задача в итоге решена правильно, но всё это можно оптимизировать, чтобы не повторялось echo два раза.
>>688825чт не не понял нечего если честно >>688823буду пытаться оптимизировать
>>688827В последней строке у тебя всё правильно, кроме того, что долг = 1270.1867445207 руб. Ведь к этому моменту он должен быть равен 0, мы ведь всё выплатили.Поэтому $creditBalance в последнем условии надо сделать равной 0. Можно грубо написать: $creditBalance = 0 (не советую и не рекомендую), а можно $monthlyPayment сделать равной $creditBalance, затем посчитать $paymentTotal, а уже потом из $creditBalance вычесть $monthlyPayment, чтобы получился 0.Теперь яснее?
>>688831сложно но вроде начал понимать, сейчас попробую
>>688832Просто сделай это.Осталось ведь только добиться того, чтобы $creditBalance стал равен 0 в последнем условии.
https://github.com/yiisoft/yii/blob/master/framework/web/auth/schema-mysql.sql#L37В высшей степени необычно.Если там хранится идентификатор пользователя, о чем говорит имя колонки 'userid', то почему varchar, а не int, и где внешний ключ на таблицу пользователей?А там кстати в гайдах предлагают хранить даже не id, а почту или логин.>foreign key (`itemname`) references `AuthItem` (`name`)Тоже непривычно. Зачем такая избыточность, копировать одно и то же значение по двум таблицам, да еще и вешать по индексу на каждую текстовую колонку? Почему не завести колонку id в таблице AuthItem, и не ссылаться на нее?Может они так пытаются избежать лишнего джойна, когда нужно будет в какой-нибудь админ-панели вывести инфу по правам пользователей?Что-то у меня разрыв шаблона от этого юи, надо поскорее выучить все его косяки фичи и переходить к полноценному фреймворку.
>>688836ну вот http://ideone.com/m70whG
>>688778Я решение еще в том году ОПу сдавал. Тут проблемы, только если человек вообще никогда никакого кода в глаза не видел, могут быть.
>>688849Да, всё верно. Теперь осталось оптимизировать.Для этого попробуй другое условие поставить для работы цикла. Не 20 месяцев с потолка, а - пока сумма кредита больше нуля, например.Тогда будет достаточно одного общего echo и цикл сам прекратит работу, когда $creditBalance станет равен 0.
>>688866ладно щас будем пробовать
>>688840Я могу ошибаться, но возможно тут расширяемая схема, то есть она в теории должна работать с любой таблицей пользователей. А в разных проектах id не обязательно INT, у кого-то BIGINT, в openId вообще пользователи иеднифицируются по email подобному идентификатору - может в этом дело? > Почему не завести колонку id в таблице AuthItem, и не ссылаться на нее?Например потому что name является хорошим естественный первичным ключом и везде используется. Вообще, не знаю, это надо код смотреть
>>688870Ты прав, я не подумал про смену таблицы пользователей, про openId вообще первый раз слышу.То есть такой на первый взгляд неправильный код был сделан из определенных соображений, до которых я еще не дорос.Только вот реализовано как-то неудачно, и в документации о таких моментах ни слова.Вот оф.мануал по теме пользовательских правhttp://www.yiiframework.com/doc/guide/1.1/ru/topics.auth#sec-9Тупо набор ссылок на апи (ссылки кстати неудачные, например если попытаться перейти к CAuthManager::assign, то перекидывает на интерфейс, ну и сам CAuthManager абстрактный, оказывается нужно смотреть наследников типа CDbAuthManager).Еще какой-то вакуумный пример> $auth->assign('reader','readerA');Что еще за readerA? Это как раз userId, о котором мы говорим. А где он хранится? А черт его знает, я первоначально вообще подумал, что нужно создать enum-поле у модели (мне это кажется логичным, но может быть опять я недальновиден). Ан нет, нужно импортировать вот эти таблицы специально для системы ролей доступа, и сохранять через assign в таблицу AuthAssignement вида itemname/userid.То есть если у меня миллион пользователей с правами редактора, то я должен занести в эту таблицу миллион записей?Нет, там снова какой-то велосипед с дефолтными ролями. Нужно прописать в конфиге очередной многомерный массив, плюсъ занести в базу строкой кусок кода, который будет выполняться при проверке доступа.$bizRule='return Yii::app()->user->isGuest;';$auth->createRole('guest', 'гость', $bizRule);Это вообще нормальная практика, сохранять куски php-кода в базе? Я не знаю, опыта у меня чуть больше нуля, но все это кажется очень странным.Мне нужно всего-навсего, чтобы пользователь мог редактировать свои записи, но не мог чужие, и тут такие свистопляски.У симфони случайно нет модуля для системы ролей, или что-то подобное? Хотя наверное там может и лучше организация, но еще сложнее для понимания.Какая безысходность.
>>688894Надо понимать что они пытаются быть максимально абстрактными и разрешить любые виды пользователей и способы авторизации - не только через логин/пароль. Сами пользователи не обязаны хранится в БД, а могут например быть прописаны в коде или конфиге или в мемкеше (живут до первой перезагрузки). То есть кто-то может считать пользователем тех, кто загрегистрирован, а кто-то может считать каждый IP адрес уникальным пользователем. Потому определение что такое пользователь, где их хранить и как опознавать вынесено из фреймворка в пользовательский код с помощью абстракции.Ты это реализуешь через класс Identity и метод CUserIdentity::getId()Аналогично абстрагируется хранение информации о правах и ролях пользователей - фреймворк не навязывает способ хранения. Я не уверен что это все правильно сделано, ну например не очень понимаю почему так проверка логина/пароля сделана в классе Identity - я имею в виду, может это можно как-то делать снаружи, а класс Identity пусть просто представляет информацию о пользователе.Далее, по поводу названия вместо id: > http://www.yiiframework.com/doc/guide/1.1/ru/topics.auth#sec-7> Элемент авторизации однозначно идентифицируется его уникальным именем.Я думаю по этой причине id не используется.> $auth->assign('reader','readerA');Тут все просто: мануал говорит:> http://www.yiiframework.com/doc/api/1.1/IAuthManager#assign-detail> assign(string $itemName, mixed $userId, string $bizRule=NULL, mixed $data=NULL)> Assigns an authorization item to a user.дает пользователю элемент авторизации (роль, операцию или право сделать что-то)Из мануала видно что в начале идет идентификатор элемента авторизации (роли или права), а затем id юзера.> Что еще за readerA? Это как раз userId, о котором мы говорим. А где он хранится? А какая разница? Задача менеджера авторизации - проверить имеет ли право пользователь X сделать операцию Y. Какое имеет значение, где хранится эта информация? Там есть 2 встроенных менеджера: один хранит информацию о ролях в БД, другой - в памяти (то есть ее надо вбивать в него перед использованием).> Ан нет, нужно импортировать вот эти таблицы специально для системы ролей доступа, и сохранять через assign в таблицу AuthAssignement вида itemname/userid.Ну разумеется если ты хочешь использовать менеджер на основе БД, надо создать ему таблицы. > То есть если у меня миллион пользователей с правами редактора, то я должен занести в эту таблицу миллион записей?Да. Но ты не обязан использовать это менеджер. ты можешь написать свой менеджер который как-то по другому проверяет наличие роли. > Нет, там снова какой-то велосипед с дефолтными ролями. Нужно прописать в конфиге очередной многомерный массив, плюсъ занести в базу строкой кусок кода, который будет выполняться при проверке доступа.Хранить код в базе абсолютно глупая идея. Вэтомслучае лучше написать или унаследовать свой auth менеджер и написать код в нем. Учись разбираться в абстракциях. Я думаю, было бы полезно разобраться во всем этом. НУ и подумай, а как бы ты сам решал аналогичную задачу: сделать расширяемую систему авторизации и проверки прав? Разумеется тут надо все разбивать на классы и абстрагировать. > Это вообще нормальная практика, сохранять куски php-кода в базе? Абсолютно ненормальная.> Мне нужно всего-навсего, чтобы пользователь мог редактировать свои записи, но не мог чужие, и тут такие свистопляски.Тогда ты мог бы не использовать RBAC, а попробовать использовать дефолтную более простую систему. RBAC это скорее для соложных систем, где например можно через админку давать и отбирать у редакторов разные роли. Ну например СМИ где есть журналисты (который пишет, но не может опубликовать новость), выпускающий редактор (которй публикует), иллюстратор (добавляет картинки) и у них у всех ограниченные права. > У симфони случайно нет модуля для системы ролей, или что-то подобное?Есть - еще сложнее и нагроможденнее.
Стоит ли переучиваться на метод 10ти пальцевого набора? Я заметил, что я не все пальцы задействую, но при этом могу в слепую набирать, хотя если свет выключить я теряюсь и не могу вспомнить куда жать. Какая-то странная память.
>>688957Какой-то бредовый вопрос, причем тут программирование? Двух пальце вполне достаточно, если ты не собираешься соревноваться с кем-то на скорость.
>>688957Печатай так, как тебе удобно? Задействую все, кроме безымянных.Хотя не, нихуя, тоже их задействую.
>>688898Насчет абстракции понял, да. Цель с которой это было сделано. Реализация не очень понятная.> Элемент авторизации однозначно идентифицируется его уникальным именем.Так это я в своем коде должен определить это уникальное имя, поэтому и пытаюсь разобраться, что туда нужно записывать.Выше примерhttp://www.yiiframework.com/doc/guide/1.1/ru/topics.auth#sec-2>Перекрытие метода CUserIdentity::getId() для возврата _id. По умолчанию в качестве ID возвращается имя пользователя.Непонятно, что подразумевается под "именем пользователя". Может у меня в модели нет свойства name? Кажется, имеется ввиду свойство username класса CUserIdentityhttp://www.yiiframework.com/doc/api/1.1/CUserIdentity#name-detailТо есть это та штуковина, по которой производится вход в систему: логин (уникальное имя на сайте) или имейл.Так вот, они же его как раз "перекрывают" в примере, то есть записывают вместо name именно id записи (модели user).$this->_id=$record->id;>Что еще за readerA? Это как раз userId, о котором мы говорим. А где он хранится? >А какая разница?Разница в том, что вместо строк 'readerA', 'editorB', 'authorC' из примера я должен прописать что-то свое, вот я и пытаюсь выяснить что именно и откудова это взять.Если ОНО хранится в какой-то из таблиц базы, то нужно выяснить в какой, чтобы это оттудова извлечь.Но судя по всему мы (я) дошли до понимания, что это какой-то мутный идентификатор/имя пользователя (на самом деле не ползователя-модели, а его Identity), которое сохраняется куда-то в сессию/куки и доступно через компонент пользователя Yii::app()->user->id. И по-барабану что там лежит, почта, логин или настоящий id.>подумай, а как бы ты сам решал аналогичную задачуДля того чтобы что-то самому писать и решать такие задачи наверное лучше сначала изучить готовые решения (на этом этапе и нахожусь), и не одно.На данный момент я бы просто хранил в модели пользователя колонку enum(список ролей). Но конечно это не решение для фреймворка, который должен уметь подстроиться под приложения использующие разные способы хранения данных, разную систему авторизации и т.д.>попробовать использовать дефолтную более простую системуНе вижу такой. Там есть "фильтр доступа" accessControl, но он позволит максимум отличить гостя от авторизованного пользователя и (может быть) главного админа, и разрешает/запрещает им определенные экшены.А мне нужно именно чтобы пользователь мог редактировать только свои записи.Ну ладно, разберусь уже до конца. Хотя плохо понятна логика фреймворка, в документации нет объяснений. Это к сожалению подталкивает к быдлокоду, то есть тупо заучить что написано в мануале и копировать те строки.
>>688971Если ты пишешь в день не больше десяти строчек, то тебе достаточно конечно.Только вот зря ты себя программистом считаешь, зря.
>>688983Будто я не могу писать быстро без десятипальцевого метода. Заканчивай с проекциями.
>>688987Я думаю, что не так быстро.
>>688991Выигрыш в скорости от десятипальцевого метода будет не так существенен для кодинга, ибо ты будешь писать быстрее чем думаешь.
>>688978CUserIdentity::getId() должен вернуть уникальный идентификатор пользователя. Если у пользователей есть id - то его, если они как-то по другому идентифицируются - то этот идентификатор.> > Элемент авторизации однозначно идентифицируется его уникальным именем.> Так это я в своем коде должен определить это уникальное имя, поэтому и пытаюсь разобраться, что туда нужно записывать.Название роли или операции, например adminiatrator, guest, viewPost, editPost, deletePost, это описано в мануале выше.> То есть это та штуковина, по которой производится вход в систему: логин (уникальное имя на сайте) или имейл.Это другое, это как отображать информацию о пользователе. > то есть записывают вместо name именно id записи (модели user).Почему бы и нет. Если это на сайте нигде не выводится.> Разница в том, что вместо строк 'readerA', 'editorB', 'authorC' из примера я должен прописать что-то свое, вот я и пытаюсь выяснить что именно и откудова это взять.Идентификатор пользователя, то есть Identity->getId() как я понял. > Если ОНО хранится в какой-то из таблиц базы, то нужно выяснить в какой, чтобы это оттудова извлечь.У тебя должен быть обьъект Identity и определено что является id пользователя.> И по-барабану что там лежит, почта, логин или настоящий id.Если пользователи в базе то надо использовать первичный ключ таблицы пользователей - перечитай определение первичного ключа.> На данный момент я бы просто хранил в модели пользователя колонку enum(список ролей). Но конечно это не решение для фреймворка, который должен уметь подстроиться под приложения использующие разные способы хранения данных, разную систему авторизации и т.д.Это не решение так как нельзя дать больше одной роли и нельзя хранить пользователей не в базе. Ну представь например имиджборда где пользователь имеет право редактировать свой пост если его IP совпадает с постом, и имеет право модерировать посты если у него есть определенная кука с кодом. Там нет таблицы пользователей, а права и идентити есть. > Не вижу такой. Там есть "фильтр доступа" accessControl, но он позволит максимум отличить гостя от авторизованного пользователя и (может быть) главного админа, и разрешает/запрещает им определенные экшены.Ну и отлично. Добавь еще проверку в контроллере на авторство и все. Ну или ты можешь сделать на основе RBAC написав свой authManager который проверяет является ли пользователь автором поста. Но мне это кажется преусложнением. > Хотя плохо понятна логика фреймворка, в документации нет объяснений. Ну не знаю, попробуй сам придумать именно абстрактную систему. Не привязанную к наличии базы данных или логина/пароля. Ты придешь к тому что у тебя будут сущности: - идентити пользователя- права, возможно иерархические (админ имеет все остальные нижележащие права) - менеджер, проверяющий есть ли у пользователя данное право
>>688957Для меня весь смысл 10ти пальцевого, что бы больше на клавиатуру никогда не смотреть (шея то не казенная). Если ты и так этого не делаешь, то думаю нафиг нужно. Хотя я могу и под столом набирать. С другой стороны, я переучился где то за 2 месяца, по 15-20 минут в день на оба языка ушло.
>>689019Причем тут шея? Ты не на ноуте код пишешь?
Помогите сделать это задание на phpЯ вообще нуб в програмировании(
>>689019Всмысле ты 15-20 минут в день набирал 10ти пальцевым, а в остальное время как обычно?
>>689024Читаешь содержимое файла в строку.Разбиваешь строку на массив слов. Проходишь по массиву, проверяя каждый элемент на количество символов и, если символов меньше четырех приплюсовываешь переменную счетчик.
>>689031Я не понял
>>689032Очень жаль.
>>689024Помочь сделать или сделать за тебя? Если второе готовь 100$ (или туза).Если первое, гугли:1. php содержимое файла в строку (file_get_contents)2. php разбить строку на слова (preg_split)3. циклы в php (foreach, for)4. php длина строки (strlen, mb_strlen)Нужно знать синтаксис регулярных выражений и php.
>>689027Делал упражнения из СОЛО НА КЛАВИАТУРЕ (ЧТО Б ЭТА АРМЯНСКАЯ РОЖА СДОХЛА). И старался, как только что научился, давить на клавиши в остальное время.>>689023Ну у меня 2 монитора и клавиатура довольно близко ко мне стоит. Я не могу, не наклоняя голову хоть чуть-чуть, на клавиатуру глянуть.
>>689034Ну регулярные выражения знать не обязательно, можно использовать explode с пробелом.
>>689039Знаки препинания? Табуляции, переносы строк?
>>689031Вообще эта задача решается одной preg_match_all.
Ты прав как обычно. Теперь решение с циклом выглядит как говно.Значит задач в твоем учебнике недостаточно. Надо поискать еще.Что сука характерно, не ищутся.Вбил "задачи на регулярные выражения php", выдает только примеры, базовый синтаксис и рецепты уровня "скопируйте этот код".Нагуглил немножкоhttps://habrahabr.ru/post/167015/http://www.zcontest.ru/2008.02/zrex.php
>>689045Сразу и не сообразил. Так действительно проще.http://ideone.com/nJtOOC
>>689053> Значит задач в твоем учебнике недостаточноНо ведь в главе про регулярки изучается preg_match_all и есть задача на нее (граммар наци, сбор емайлов из текста).
>>689058preg_match_all возвращает число совпадений
>>689062Тогда так http://ideone.com/hpmZDy
Сейчас увидел в логе юзер-агент, можно подумать что это чудо-устройство: Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 635) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537Юзер-агенты - это пример маразма, который сделали криворукие верстальщики, писавшие частные случаи под определенный браузер или слово в юзер-агенте. В итоге новые браузеры стремятся вписать как можно больше слов.Разработчики Оперы в свое время даже вынуждены были патчить яваскриптом некоторые сайты.
Задали вот такое задание. Поскольку я в программировании 0, не могу его решить. Найдется-ли добрый человек, который поможет мне с ним?
Двачик, а как на PHP удобно проверять данные, пришедшие из формы? Может, есть какая-то готовая библиотека (или класс), которая позволяет вместо сотен isset(), is_array() и is_numeric() написать буквально пару строк, чтобы проверить хотя бы типы?
http://archive-ipq-co.narod.ru/l1/regexp.html> к сожалению в старых версиях PHP флаг i работает только с латинскими буквамиНасколько старых? Я так понимаю, речь о 5.2 и ниже (или даже четверка), так что можно не париться?Зачем первые уроки сделаны картинкой? Я же цитировать не могу. Защита от копирайтеров? От гугла? Зато гитхаб яростно форсится и написан в другом стиле. Писались разными людьми? Скандалы, интриги, расследования...
>>688458Спасибо, исправлю.
>>689096>один e-mail>разными людьмиНу хуй знает.
>>689096Смело исплоьзуй флаг i. Это все не работало несколько лет назад, сейчас работает. Также при наличии флага u символ \\w корректно находит в том числе и русские буквы.
$file = file_get_contents('./eni.txt', true); $regex = '/\S+ \d\d/'; if (preg_match_all ($regex, $file, $match)) foreach ($match[0] as $qqq) { echo $qqq; echo "<br>";}Это то, что вышло. Проблема в том, что выводит еще и в трехзначном числе двузначное.
>>689117Может семейный акаунт.>>689134Несколько лет это сколько?Вдруг мне подсунут легаси-код, написанный 10 лет? Или на собеседовании спросят о различии версий php? (В вакансиях такое часто вижу)Не могу понять фишку с огромным кол-вом слешей при экранировании.Для бекслеша нужно прописать его четыре раза. В чем логика? Как php разбирает эту конструкцию?С точкой почему-то достаточно одного слеша.http://ideone.com/Racvzp
>>689148>Может семейный акаунт.ОП потомственный учитель пхп? Его род передает учебник по пхп из поколения в поколение?
Проверьте мой говнокод, посоны: http://ideone.com/tcGmQk
>>689161Это задача про ООО Вектор.быстрофикс
Как же нам узнать, что в классе System есть что‐то с именем out? Eclipse помогала мне с этим. После того, как напечатаю слово System и поставлю точку, Eclipse показывала мне все, что есть в этом классе. А как быть с IJStudio?
>>689167Ой, бля, не туда.
>>689148Нет, а все-таки почему для обозначения \ нужно его продублировать четыре раза?Остальные символы типа \s вполне достаточно написать один разhttp://ideone.com/6QNQj7Почему так, пока неясно.Может это касается только двойных кавычек?"\n" в двойных кавычках действительно даст перевод строки, но '\n' в одинарных это два символа, \ и n.Хотя нет, выше я писал в одинарных '\\' и выдавало ошибку, типа заэкранировался ограничитель.Ерунда какая-то.Так и рождается говнокод, потому что нигде нет подробных объяснений, или они разбросаны в совершенно неупорядоченном виде.Я например не знаю, где искать ответ на этот вопрос. Поэтому придется бездумно "визде удваивать слеши".Безблагодатность.
>>689148Это зависит от:- используешь ли ты utf-8 и флаг u или нет. Если нет - я тебе вообще ничего не могу гарантировать, может и не работать. Как миниумм будет зависит от локали и ОС.- версии PCRE (не PHP). Увы, я не помню до какой версии это не работало. Возможно проблема была в том что я не использовал utf. Вот люди обсуждают проблему: http://stackoverflow.com/questions/5458396/php-case-insensitive-preg-replace-of-a-cyrillic-string-in-utf8
>>689173Попробуй сделать echo '\\n'; меняя число слешей и виды кавычек. echo показывает тебе какая строка получилась в итоге в памяти и как ее видит PHP. Соответственно ты увидишь что при вводе "\\\\"php (и движок регулярок) увидит просто \\Поэкспериментируй. Также почитай http://php.net/manual/ru/language.types.string.phpЕсли есть вопросы - уточняй.
>>689173Логика примерно такая: в регулярках бекслеш это спецсимвол: http://php.net/manual/ru/regexp.reference.escape.phpЗначит чтобы заматчить именно сам этот символ, его надо писать 2 раза (проверь на regex101 например)Но чтобы записть строку \\ в PHP каждый бекслеш надо писать по 2 раза. Либо использовать nowdoc который не интерпретирует спецсимволы.
Более адекватной шапки и ОПа я не видел, наверное, никогда на дваче за 5 лет. Моё уважение всему, что ты здесь делаешь, это очень и очень здорово.Не обоссывайте только, решил намазаться веб-кодингом, нашёл видеокурсы Евгения Попова по html и css, сейчас на завершающей главе html, делаю всё за ним, разумеется, пока получается, ибо тут только дурак не справится. Этот Попов вообще норм чел?И по какому пути следовать при обучении:1)HTML > CSS > JavaScript (+JQuery) > PHP+MySQL;2)HTML > CSS > PHP+MySQL > JavaScript (+JQuery);3)HTML > PHP+MySQL > CSS > JavaScript (+JQuery)?Сейчас объясню, что мне хочется. Я просто сам по себе пока не получу первый мало-мальски годный результат, не смогу углубиться полностью в изучение. В каком порядке мне лучше изучать всё это, чтобы я как можно быстрее смог заработать первые доллары? Это не значит, что я сразу полезу везде орать, что я у мамы программист, просто после этого я буду уверен, что время трачу не зря и заработать ТОЧНО смогу и буду углублённо изучать каждый элемент.В общем, в какой последовательности мне это учить для достижения быстрого результата? И в какой лучше с точки зрения рациональности и вашего опыта?И да, по времени, если можно, проконсультируйте меня, сколько дней уйдёт на обучение по двум моим веткам (быстрой и рекомендованной).Я просто учусь и подрабатываю немного, хотелось бы рассчитать, могу ли дропнуть работу, чтобы потратить всё время на обучение и уже начать зарабатывать на жрат.
>>689183Поповщина это самое дно.Порядок не имеет значения, все равно придется учить одновременно.В шапке все ссылки и мануалы.По времени уйдет от 180 до 720 дней (ты бы еще в минутах спросил).Но энтузиазм это хорошо, ты такой бодренький. Главное не настраивайся на "быстрый результат".Если срочно нужны небольшие деньги, лучше wordpress + html/css + базовые знания php и jquery.
>>689198Ты же ОП? Если у меня всё получится, что я запланировал, я тебе с первого приличного заказа подарочек какой оформлю, даже не знаю, как ещё выразить благодарность. За то, что ты делаешь тут, берут большие деньги.
>>689183Второй путь.Но на жрат сейчас сложно заработать и опытным, слишком конкуренция высока.
>>689220Я бы поспорил насчет опытных, толковых синьер-девелоперов у которых 5+ лет опыта сейчас везде не хватает, и наоборот компании тебе разные профиты будут предлагать чтобы ты к ним работать пошел.А вот джуниором и правда сложно, особенно сейчас, когда кризис. На одну джуниорскую вакансию может быть от 15 откликов. Чатик же! Все равно 1000 постов.
>>689232Что же вы дизморалите так? Я вот на апворк сегодня зашёл чисто для ознакомления, там был заказ на 200$, время на выполнение 3 недели. Что с ним не так? Я думал, взял заказ, посидел 2 недели над ним и всё готово, нет?
>>689180Вроде разобрался.В одинарных кавычках \ выводится как есть. Но два подряд идущих \\ будут интерптретированы как один и echo выведет один символ.Соответственно \\\n заменит два подряд идущих бекслеша на один, вместо 3 останется 2 (слава б-гу эта замена производится один раз, а не рекурсивно).'\\\\n' выведет \\n, потому что произошло 2 замены \\ => \.В двойных кавычках интерпретатор распознает больше спецсимволов, поэтому например \n будет заменен на перевод строки.Только вот нигде (или я опять не нашел) не сказано о приоритете/порядке выполнения этой автозамены.Например в выражении "\\n" я ожидал увидеть при выводе на печать как раз \ + перенос строки, то есть что сначала преобразуется перенос, на самом деле сначала заэкранируется бекслеш, и получится \n.Полигончик http://ideone.com/uFWAN1>>689181Ок, с экранированием самого бекслеша (когда мы хотим при помощи регулярного выражения найти этот символ в строке) вроде ясно.Но зачем это проделывать с другими символами? \s, \d и так далее? С одним слешом тоже работает.http://ideone.com/E9VTNvЯ бы еще понял, если бы \s или \d воспринимались интерпретатором php как управляющие последовательности, но это же не так (судя по табличке из мануала http://php.net/manual/ru/language.types.string.php#language.types.string.syntax.double)Вот перенос строки \n (или табуляция \t) в двойных кавычках нужно экранировать "\\n".Зачем это делать с точкой, с \s, \d, \w и прочими спецсимволами, которые имеют значение в регулярных выражениях, но не имеют с точки зрения интерпретатора, это непонятно.Скорее всего чисто ради одинакового стиля кода что ли. Чтобы не было, что в одном месте "\\n", во втором '\\\\', а в третьем '\s'.Ну ок, тогда буду писать '\\s' ради стиля. Но технически вроде бы в этом нет необходимости.p.s. Надеюсь фильтры вакабы в свою очередь не съедят все эти слеши, а то пост и так путаный.p.p.s. Пили новый тред, у меня дико замирает браузер, когда за тысячу постов, а если кто-то постит в тот момент когда я пишу, обновляется секунд 5. Видимо мало памяти на нетбуке, а браузер держит все это говно вместе с картинками.
>>689243Индусы, индусы еверивеар.Ты за 200 - а они за 150.Ты за 100 - а они за 50.Ты за отзыв - а они ещё доплатят.
>>689248
>>689293Ты смешной какой-то. Везде есть конкуренция, просто нужно быть если не лучше чем большинство, то хотя бы конкурентноспособным. А то некоторые личности рассказывают какие они скилловые программисты, а на собеседовании выясняется что он даже строку нормально перевернуть не может. Потом еще и ныть начинают что алгоритмы в реальной работе не пригодятся, или что его специально завалили.
>>689243И по личному опыту скажу что работа на апворке это мягко говоря так себе. 5 часов ты апплаишься на все под ряд, 1 час работаешь.
Меня так опечалило неоптимальное решение задачи на подсчет слов определенной длины в тексте, что решил еще раз пройти задачи на регулярные выражения (хотя кажется я их уже год назад).>Напиши программу, получающую на вход автомобильный номер, и проверяющую, правильно ли он введен. Автомобильный номер имеет вид «а123вг», то есть начинается с буквы, за которой идет 3 цифры, и еще 2 буквы. Никаких посторонних символов быть в нем не должно.Исхожу из того, что допускается только кириллица, и что буква е с умляутом допустимый символ в номере.http://ideone.com/fgllxR>>689305strrev + iconv (для юникода)Я принят?
>>689320А если без strrev?
>>689323Неплохо было бы основать, по какой причине возбраняется пользоваться тем или иным функционалом. Самодурство эйчара не рассматривается как веская причина.В какой ситуации функция strrev недопустима?Если без нее, то можно сплитить по пустой строке, делать реверс и склеивать.Это если функции implode, array_reverse и preg_split разрешены (кем?)
>>689245> Только вот нигде (или я опять не нашел) не сказано о приоритете/порядке выполнения этой автозамены.Логика такая: интерпретатор идет по строке слева направа. Обычные символы он воспринимает как есть, а если видит бекслеш, то берет его и следующий за ним символ и смотрит: - если это экранирующая последовательность, то она воспринимается как 1 символ: \\ -> \ , \n -> символ перевода строки- если такой последовательности нет, то в строку вставляются оба символа как есть: \y -> \yПоследовательность \\\n воспринимается как 2 пары: \\ кодирующий слеш и \n кодирующий симовл перевда строкиВсе эти сложности нужны чтобы в строку можно было вставлять любые символы включая кавычки. Приходится придумывать спецсимвол который скажет нам что эта кавычка не закрывает строку, а является ее частью.Это работает на уровне интерпретатора, один раз, когда он разбирает программу и преобразует ее в дерево AST, а затем в байт-код. То есть это все на уровне синтаксиса. Внутри строки хранятся как есть и \n хранится как байт с кодом 10, а не как 2 символа. > Ок, с экранированием самого бекслеша (когда мы хотим при помощи регулярного выражения найти этот символ в строке) вроде ясно.> Но зачем это проделывать с другими символами? \s, \d и так далее? С одним слешом тоже работает.Я подумал что проще всегда экранировать бекслеш чем думать когда можно, а когда нельзя. И мне ведь надо это как-то объяснить начинающим.Но сейчас я не уверен, правильно ли это. Ведь везде пишут один слеш, и по правлам регулярок там действительно один слеш идет. Идеальнее всего конечно если бы в PHP был синтаксис строк который не интерпретирует никакие символы, а передает как есть.
>>689245> Вот перенос строки \n (или табуляция \t) в двойных кавычках нужно экранировать "\\n".Это не требуется. \n вставит в строку байт с кодом 10, и регулярки его тоже понимают. То есть \n и \\n дадут один результат.> я ожидал увидеть при выводе на печать как раз \ + перенос строки, то есть что сначала преобразуется перенос, на самом деле сначала заэкранируется бекслеш, и получится \n.Строки парсятся слева направо, по этой причине. > Скорее всего чисто ради одинакового стиля кода что ли. Да но как я написал, я вижу что так никто не делает и почти все пишут один бекслеш. Придется наверно переходить на этот вариант, выписав отдельно исключения: 4 бекслеша (вроде только с ними сложность). > p.p.s. Пили новый тред, у меня дико замирает браузер, когда за тысячу постов, а если кто-то постит в тот момент когда я пишу, обновляется секунд 5. Там течет память - что-то копится и не очищается. Перезагружай страницу полностью и память освободится. У меня тоже притормаживает иногда.
>>689339> strrev + iconv (для юникода)тут есть проблема что в однобайтной колировке всего 255 символов и при конвертировании utf8 -> 1-байтная мы теряем символы. Нет, это потенциальная мина замедленного действия, долго потом придется искать почему функция дает неверные результаты. Ты должен стараться писать код без таких подвохов.Разбить на массив символов и сделать array_reverse - допустимо (хотя тут тоже есть подвохи. Например в юникоде есть составные символы, например отдельно буква и отдельно черточка дял нее - при перевороте они поменяются местами и черточка будет относиться к другому символу. По хорошему тут нужна умная библиотека которая будет разбивать строку на символы с учетом составных символов, но так уж и быть, можно обойтись preg). Подробности про составные символы: https://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#.D0.9C.D0.BE.D0.B4.D0.B8.D1.84.D0.B8.D1.86.D0.B8.D1.80.D1.83.D1.8E.D1.89.D0.B8.D0.B5_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D1.8BКак видишь для правильной работы с юникодом нужна библиотека, умеющая все это делать. Есть библиотека ICU, в PHP вроде есть расширение Intl использующее ее. >>689339Риск потери символов при конвертации. > В какой ситуации функция strrev недопустима?В любой так как работает только с 1-байтными кодировками> Если без нее, то можно сплитить по пустой строке, делать реверс и склеиватьМожно
>>689389Неа, не в однобайтную, наоборот из utf8 в utf16 (или 32) с другим направлением письма.А потом таки обратно.Взято отсюда, велосипед не мой (кто бы мог подумать).http://bolknote.ru/2012/04/02/~3625#56
>>688561> public function __construct($argv) {Это не относится к сокетам, но я бы передавал части отдельно а не массивом. Разбирать аргументы не задача этого класса. Ну и аргументы логичнее передавать в функцию скачивания а не в конструктор, чтобы можно было скачать несколько файлов.>print("Connect to ".$ip.":".$this->port."\n"); Отладочную инфомацию лучше писать не на стандартынй вывод, а на стандартный поток ошибок -чтобы она не шла в файл если программа выводит полезные данные, а ты решишь перенаправить вывод программы в файл через .... > file.txt> Gecko/20100101 Firefox/44.0Лучше подписывать названием и версией своей программы> socket_close($socket);Это логчинее писать внутри finally, при условии что соединение установилось. > print(sprintf(printfhttp://php.net/manual/ru/function.socket-write.php> Замечание:> Совершенно нормально для функции socket_write() возвращать ноль, что означает, что ни одного байта не было записано. Пожалуйста, используйте оператор === для проверки значения на FALSE в случае ошибки.Ты это учел? (нет, не учел). Прочитай мануал внимательно. Функция может вернуть 0 например если она ждала возможности отправить пакет, а в этот момент пришел сигнал, прервавший системный вызов. > while(($read = socket_read($socket, 1024)) && $read !== '0') {Какие-то костыли. Почему бы просто не проверять результат через строгое сравнение === ? Явное лучше неявного. Ну и давай уже сделай какой-нибудь сервер, надо увидеть что ты умеешь слушать порт и принимать соединения.
>>689397Тогда подойдет. Ну и видна проблема с тем что игнорируются комбинации символов - ウィ превратилась в бессмысленную キィ. Ну это уже конечно особенности языка.
Задача на номера телефонов.http://ideone.com/eDqj6hУважаемый абу со своим надоедливым фильтром заставляет меня вспоминать цитаты из классических фильмов ("Кровь и бетон").Вот какое из слов на скриншоте находится в "спам-листе", м?
>>689422Ага, у меня не пропускали слово "кстати" или что-то вроде того.
>>689417Как будто на русском языке от написания справа налево получится осмысленный текст.Так, а из функций iconv и mb_convert_encoding что предпочесть?В гугле говорят как всегда много и бестолково, из того что я понял, вроде iconv обращается к сторонней (сишной?) библиотеке, то есть работа этой функции зависит от операционной системы. mb_convert_encoding входит в расширение для php, так что от системы не зависит, но выбор кодировок меньше (какой?).Короче наверное лучше предпочитать mb_convert_encoding, типа большая портируемость, мы же в большинстве случаев не знаем где развернут наше приложение.А на iconv в гугле жалуются, говорят "иногда не работает".https://toster.ru/q/6285От чего зависит "иногда" не пишут, говорят "просто" пользоваться mb_convert_encoding.Экспертное мнение?
>>689468Не знаю. У меня iconv всегда работал.
Что тут, блять, пытаются сделать в этом коде? Я не понимат
Чего сидите тут как сычи? Перекатывайтесь.
>>689422Усовершенствовал проверку номеров телефонов.Теперь не допускает варианты типа8---)))123456789Все строго:1. Сначала либо цифра 8, либо +7 (допускается проебл между плюсом и семеркой).2. Затем пробел(может отсутствовать), дефис?, пробел?.3. Открывающая круглая скобка (может отсутствовать).4. Комбинация пробел+цифра, пробел необязателен. Комбинация повторяется либо 3 раза, либо 4.5. Еще один пробел, может быть, может не быть. Просто не знал с кем его сгруппировать, поэтому пусть будет отдельный пункт.6. Если в пункте 3 попалась открывающая круглая скобка, на этом месте обязана быть закрывающая. Иначе ничего.7. Если в пункте 4 описанная комбинация встретилась 3 раза, то повторить фрагмент регулярного выражения (пробел?дефис?пробел?цифра) семь раз. Иначе повторить вышеупомянутый фрагмент 6 раз.Регулярка получилась конечно длинная и нечитабельная, но таков уж синтаксис. Наверное все-таки удобнее было бы перенести часть логики в js или php.http://ideone.com/WcY3pY
>>689483Условие задачи я не понял, особенно что они подразумевают под "ставками", что в данном случае называют "хешем", и в чем состоит запрос (к чему? к базе данных?).Возможно ты просто вырвал из контекста.А код конечно неправильный, на пике изображен массив, у которого ключом первого элемента является массив. Такого не может быть, ключом может быть только строка или целое число.Скорее всего тебе предлагают найти ошибки в синтаксисе, в данном случае поменять местами стрелочки с запятыми.
Господа, только-только вкатился в ООП, раньше писал функционально.Вот код, описывающий объект "Объявление". В этом контексте объявление - это важная новость с прикрепленным файлом (опционально), а также со сроком ее показа на сайте.Укажите на ошибки, пожалуйста.http://ideone.com/ri11JH
>>689491Перепостил на пастбин, а то на идеоне читать код неудобно.http://pastebin.com/iidw2u7j
Котаны. Тред скоро смоет! Давайте перекат!
>>689491Я бегло пробежал, пока общие советы, потом оп доест.1. Переходи с mysqli на pdo. Как минимум не будет этих чудовищных веток условий на каждом шагу с выбросом исключений. PDO выбрасывает исключения автоматически (если передать ему опцию при создании http://php.net/manual/ru/pdo.setattribute.php ).О других преимуществах PDO https://habrahabr.ru/post/137664/2. Изучи паттерны для работы с базой данных. Например DataMapper и ActiveRecord.https://github.com/codedokode/pasta/blob/master/db/patterns-oop.mdПаттерн это общепринятый подход. Мне например лень читать весь код, что ты там изобрел. Если код написан по паттерну, то я точно знаю, какие у класса методы, свойства, что они возвращают и т.д. Стандартизация экономит время и спасает от лишних ошибок.3. В ООП непринято писать огромные полотна текста в методах, лучше много мелких функций (бывает даже одна строка, и в функции длиннее название чем ее тело, у тех же геттеров например).4. Каждый класс и тем более метод должен заниматься своим делом. Например у тебя в конструкторе какая-то валидация.if (trim(strip_tags($text)) === '') throw ...Это нужно вынести как минимум в отдельный метод. А может быть написать отдельный класс для валидации.Ну и так далее. Код не должен идти одной шизофазийной стеной.
>>689491>>689492Не функционально, а процедурно наверно. Вот что я вижу: Когда ты проектируешь класс то первое что ты должен понять - что представляет собой объект этого класса? Какие его функции? Каждый класс должен заниматься своим делом (принцип единой ответственности, single responsibility), и у тебя этот принцип явно нарушен. Вот что делает твой класс: - хранит информацию об одном объявлении- валидирует его- создает соединение с базой данных- сохраняет его в БД- форматирует датыЭто указывает что классы спроектированы неправильно. Ты просто написал процедурный код и дописал сверху слово class.Далее, один из главных принципов которые должен свято чтить любой программист - не копипасть - у тебя не соблюдается. Легко можно найти скопированные куски кода, например $mysqli = new mysqli(DATABASE_SERVER, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME); (3 раза)Да и не стоит хранить настройки в константах так как они доступны глобально, а нам это не нужно.Погугли про принцип DRY. Далее, ты каждый раз создаешь новое соединение к БД - это неэффективно, надо использовать одно и то же.Далее, ты делаешь валидацию в конструкторе, то есть предполагаешь что не может быть неправильно заполненного объявления. Но это не так. При редактировании пользователь может ввести неправильные данные и их надо где-то хранить. Так что неправильно заполненное объявление может существовать, просто нельзя разрешать сохранять его в базу. Да и при ошибке ты выкидываешь общее исключение, которое нельзя поймать (и вообще исопльзовать исключения для валидации не лучшая идея). Почитай про исключения: https://gist.github.com/codedokode/65d43ca5ac95c762bc1aРасширение mysqli ты тоже не освоил и не умеешь им пользоваться, так как подставляешь данные прямо в запрос: > ($result = $mysqli->query('SELECT ann_hidden FROM announcements WHERE ann_id = ' . $id)) || > $query = 'UPDATE announcements SET ann_text = "' . $mysqli->escape_string($this->text) . '", ann_file = "' . $mysqli->escape_string($this->attachedFile->getFilepath()) . '", ann_expdate = ' . $sqlExpdate . ' WHERE ann_id = ' . $this->id;Запросы у тебя иногда еще и разбиты на куски. Какой нечитаемый кошмар. Почитай про плейсхолдеры. Далее, каждый вызов query у тебя сопровождается ифом с проверкой результата. Не надоело копипастить? Надо как минимум вынести это в отдельный класс, который выполняет запросы и выкиыдвает исключение если надо. Ну или использовать PDO который умеет делать это автоматически.В общем ты написал стену кода (putToDatabase) хотя можно было записать это в 10 строчек.> public static functionиспользование статических функций указывает на ошибку проектирования. Ведь по идее должен быть обычный класс с нестатическими методами для этого. Работа с БД это сложный функционал и она никак не может быть в статическом методе.Также можешь почитать эти уроки, по которым у нас учатся аноны: - https://github.com/codedokode/pasta/blob/master/student-list.md- https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md- https://github.com/codedokode/pasta/blob/master/forms.md- https://gist.github.com/codedokode/e1d31a31b37d5f635057В общем код пока на двойку с минусом, надо все переписывать.
И хватит уже постить этого несчастного кота. >>681206Ой, как нехорошо - твой код перемешан с кодом фреймворка и трудно понять где что. Кодеигнайтер нельзя подключить через композер? Судя по наличию composer.json - можно. Значит, надо подключить через него.Да и обновлять фреймворк будет неудобно - вручную сравнивать папки и смотреть чтобы не затереть свои файлы.Также желательно выносить публичную папку отдельно, а не сваливать весь код и файлы на всеобщее обозрение. Нужно делать отдельную публичную папку и класть в нее то, что не представляет секрета.Сам фреймворк - то еще старье, достаточно посмотреть index.php: > if (version_compare(PHP_VERSION, '5.3', '>='))> {> error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);Включается игнорирование многих видов ошибок, так как он просто не работает нормально на новом PHP. Ну и вообще это один большой набор антипаттернов.В коде у тебя неправильные ссылки - на главной там прописан IP адрес. Получается я должен еще пройтись по всему коду и исправлять везде эти адреса? Это неправильно. В данном случае надо использовать относительные УРЛ: https://github.com/codedokode/pasta/blob/master/network/urls.mdДалее, в тесте у тебя клик по слову "Yes" или "No" не вызывает переключения. Это неправильно - надо делать эти надписи label который привязан к радиокнопке.Ну и конечно можно было вопросы чуть поинтереснее заложить.IP адреса выводятся неотформатированные, числом вроде IP address: 2135647064При переходе на вторую страницу пагинация пропадает.Странная структура базы данных - результаты тестов хранятся в табоице пользователей -получается пользователь может пройти тест только 1 раз в жизни? Или старые результаты теряются? Выглядит как ошибка в проектировании БД, мне кажется пользователь это одна сущность, резльтат теста - другая.Для энумов обычно указывают идентификаторы без пробелов.У таблиц почему-то кодировка latin1> $this->load->view('main');> $this->load->view('footer');наверно логичнее чтобы main сам подключал шапку и футер. https://github.com/toppestkek/CodelgniterTest/blob/master/application/controllers/Results.php#L20https://github.com/toppestkek/CodelgniterTest/blob/master/application/controllers/Results.php#L43тут 2 функции в контроллере Results скопированы друг с друга. Копипаста это зло. Подумай как это исправить.https://github.com/toppestkek/CodelgniterTest/blob/master/application/controllers/Test.phpТут странно сделана работа с формой, почитай урок про обработку форм https://github.com/codedokode/pasta/blob/master/forms.mdОбычно вывод и обработка формы делается в одном экшене, а после обработки делается редирект.> $results == "one type" ? $data['message'] = "You have one type." :В таких случаях надо писать иф. ?: для выражений, а не для замены ифа.https://github.com/toppestkek/CodelgniterTest/blob/master/application/models/Answers_model.php#L18МОдель не должна обращаться к ПОСТ данным и вообще что-то знать о параметрах HTTP запроса - явно ошибка в проектировании. Это делает контроллер. Ну например в твоем случае ты почему-то захардкодил работу с ПОСТ данными, хотя может мы захотим программно данные массивом или объектом передать. https://github.com/toppestkek/CodelgniterTest/blob/master/application/models/User_model.phpНе могу понять за что отвечает класс. Вроде за работу с БД, но зачем тогда поля вроде winner? Надо определиться за что отвечает класс и что хранит объект этого класса. А пока тут намешана работа с базой и какая-то логика.Также, модель не должна обращаться к SERVER.https://github.com/toppestkek/CodelgniterTest/blob/master/application/models/User_model.php#L28Тут ты подставляешь переменную в запрос, надо использовать плейсхолдеры.> if($ipRow["INET_NTOA(ip)"Надо использовать синонимы (алиасы) в запросе.> "INSERT INTO users (type, ip, winner) VALUES ('$this->result', INET_ATON('$this->ip'), "> . "$this->winner) надо использовать плейсхолдерыВ общем, я бы сказал, что тут многое надо переделывать. Мало того, что сам фреймворк неудачный, так ты еще не совсем правильно реализовал классы моделей. Ну и сама задача очень простая конечно.
>>682767 >>682769>>686208 >>688758В ридми не написано что надо еще отредактировать htaccess. Я бы советовал вынести настройки виртуалхоста из htaccess (они все равно там не работают) в конфиг Апача. https://github.com/greenTea242/Student-list/blob/master/studentlist.sql#L25Для таблицы не задан первичный ключ. Погугли что такое первичный ключ, естественный, искуственный, и задай.> `groupNumber` varchar(90) По условиям задачи должно быть меньше - перепроверь.> loco` tinyint(1) DEFAULT NULL,Тут лучше энум сделать> `abiturientID` varchar(50) NOT NULLТут стоит добавить комментарий что это такое (COMMENT "....")https://github.com/greenTea242/Student-list/blob/master/autoload.phpтут не совсем правильно сделано - надо проверять есть ли такой файл перед подключением - перечтай урок про автозагрузку: https://github.com/codedokode/pasta/blob/master/php/autoload.md> ViewHelper::fixView($_GET["notify"]) Объясни почему ты на входе делаешь htmlspecialchars? По моему ты не понимаешь что ты делаешь, а просто ставишь функции в надежде что одна из них тебя защитит. htmlspecialchars должна применяться только при выводе данных в HTML код так как она для этого предназначена.> //Защита от вызова страниц page=Ы, page=-10Проще сделать наверно через min/max. Или сделать функцию исправления числа страниц, которая проверит что она принимает разрешенные знаечния.> Это я писал в треде, что с 20 записями и выше начинаются волшебные баги,Нужно их повторить и выяснить причину. Ну например какое сообщение об ошибке выводится и тд> require_once "../autoload.php";> require_once "../src/config.php";> require_once "../src/ini.php";Мне кажется хватило бы одного реквайра.> $validator = new AbiturientValidator($abiturient, $gateway);Валидатор одноразовый? Может лучше сделать валидатор который можно вызывать много раз для разных студентов? Можно впрочем и так оставить.> Пробегаемся по массиву чтобы обезапасить внешние данные> $values = array_map(array('ViewHelper', 'fixView'), $values);это неправильно. htmlspecialchars это не функция делающая данные безопасными. > $gateway->updateAbiturient($values, $cookie);Почему ты ислоьзуешь глупые массивы когда у тебя есть модель студента? Логичнее использовать ее же.> $errorMessage[$key] = "Ошибка: {$error}";> $inputBackgrClr[$key] = "control-group has-error";Я думаю это лучше перенести в шаблон. Это явно часть представления.> $values = [> "name" => $_POST["name"],> "surname" => $_POST["surname"],Тут ты забыл сделать trim, также нет гарантий что в ПОСТ есть нужное значение и оно является строкой. Тут лучше сделать цикл по списку разрешенных полей, брать значение из ПОСТ, тримить и обновлять модель им.> if ($cookie) {> $values["abiturientID"] = $cookie;Я думfю вообще не надо перезаписывать этот id при редактировании. > if ($cookie) {Ты думаешь что если есть куки - студент залогинен, но не факт: может быть кука, которая не соответствует ни одной записи в БД. Файлы бутстрапа и свои файлы лучше не смешивать и хранить в разных папках. То есть проще всего распаковать бустрап в отдельную папку.> if (!empty($notify) == "registred")Кстати можно сделать нотификации константами> <?php exit(); ?>Это не должно быть в шаьлоне. Вдруг тебе после его вывода надо еще что-то сделать. Вообще, никакие функции не должны самовольно завршать скрипт (кроме может быть контроллера, и то не факт)> https://github.com/greenTea242/Student-list/blob/master/src/ViewHelper.class.php#L27> preg_replace("/$search/ui"Нельзя просто так подставлять текст в регулярку так как там могут быть точки, зведочки и тд. Надо использовать preg_quote> <span class='paintFound'>Есть тег mark для этогоТакже функция подсветки должна правильно делать htmlspecialchars, чтобы символы вроде & или < в HTML коде выводились корректно.> class.phpДавно уже принято не писать слово class, почитай урок https://github.com/codedokode/pasta/blob/master/php/autoload.md> public function addAbiturient(array $values)Почему не модель а массив? > $counter = $stmt->fetch();> return (int)$counter[0];Вроде есть функция которая сразу берет одно значение, fetchOne или fetchCol> public function getAbiturientsInPage($page, $recordsPerPageУниверсальнее использовать не номер страницы а offset/limithttps://github.com/greenTea242/Student-list/blob/master/src/config.phpТут лучше оставить только те настройки которые имеет смысл менять. Кодировку или тип БД нет смысла держать в конфиге.https://github.com/greenTea242/Student-list/blob/master/src/ini.php#L8> catch(PDOException $e) {> echo $e->getMessage();Ну вот, еще один человек не умеет ловить исключения. Паста: ---------Как надо обрабатывать исключения: - записать информацию в лог- показать пользователю заглушку - на заглушке выставить HTTP 503 код ответа для роботов- на компьютере разработчика (при display_errors = 1) показать подробности и стектрейсЧто будет если использовать catch + echo: - в лог ничего не фиксируется, ты не узнаешь об ошибках- пользователь видит непонятную белиберду на английском- отдается код 200Как будет если просто не ловить исключение: - информация пишется в лог (ок)- на компьютере разработчика выводятся подробности (ок)- пользователь видит белую страницу (не ок)- отдается код 200 (не ок)Почитай также урок https://gist.github.com/codedokode/65d43ca5ac95c762bc1a
>>681235 Нужно попытаться понять логику (что с чем выровнено) и сверстать правильно.> Да и вообще непонятно как правильно спозиционировать тот же логотип. Надо смотреть логически: от каких элементов зависит его расположение? Как он влияет на другие элементы? И исходя из этого выбирать: АП, флоат или что-то еще.Ну тут например можно закрепить логотип в шапке с помощью АП, а чтобы никто под него не залез, использовать паддинг слева на шапке. Либо просто зафлоатить влево.> margin-top:50 - $logo-font-size; в SASS?Выглядит как переусложнение по моему. Если ты не планируешь играть с высотой шрифта, то можно просто прописать маргин. >>681378Копипастить неправильно. Если у тебя есть похожие куски кода, надо выносить их в функции или может применять классы и наследование, если ты силен в ООП.Погугли принцип DRY.Надо писать новый код, а не переделывать по 10 раз старый.>>681229 Да совсем не чистенько.>>681397> в деструкторе объекта у меня иногда вылетает PHP Warning: mysqli::close(): Couldn't fetch mysqli in blabla.php on line 124> Собственно, причина ясна - иногда я закрываю соединение еще до уничтожения объекта.Возможно дело не в этом. Возможно ты не забрал рещультаты запроса, или пытаештся использовать закрытое соединение или что-то еще. Надо разбираться.Таймаут у mysql по умолчанию около полчаса так что вряд ли оно протухает.
>>681405Там много рассказывать, попробуй все же погуглить.>>681408надо не копипастить а писать новый код.>>681603Выражения для точки и запятой можно объединить в одно. Не стоит делать 4 переменных text1 .. 4, лучше использовать одну и ту же.Пробельный символ (пробел или перевод строки) можно обозначить как \\s> $text4 = str_replace($sentence, $firstLetterUpper, $text4);Странный код, зачем заменять все предложение на первую букву? > mb_substr($sentence, 1, mb_strlen($sentence)); Третий аргумент писать не требутся>>681612Прочитай в мануале по preg_replace про конструкции вроде $1 в строке для замены.>>681707 В каких фреймворках? В Симфони кемелкейс например. Древние типа кодеигнайтера лучше вообще не рассматривать - там полно антипаттернов.
>>681724Там вообще статья не про PHP. У нас есть PSR.>>681726Смешивать стили это еще хуже. Надо использовать один и тот же.>>681764не использовал>>682084 > 3. Да, похоже что в статик функциях такое не получится реализоваться, ну и ладно, я считаю, что удобней будет каждый раз в методе писать соединение, чем каждый раз когда хочешь обратиться к бд создавать обьект.Объект создается один раз в самом начале работы скрипта. То что ты предлагаешь это копипаста, и она недопустима. Плюс есть паста про DI - в твоем варианте код получается слишком спутанным: https://gist.github.com/codedokode/e1d31a31b37d5f635057> я так и не понял зачем нужен обьект, Объект позволяет что-то хранить или делать в пределах своей зоны ответсвенности.Статические функции не годятся так как с ними ты не можешь сделать 2 объекта с разными настрйками (например работающие с разными БД). Ну и вообще, объекты более надежно изолируют данные. Вот сравни: class A{ public $a; public static $b;}В случае обычного поля я могу создать объект и записать что-то в это поле никак не влияя на остальную программу. Я удалю объект и все, никаких следов не осталось. То есть я могу что-то делать изолированно. Со статическим полем любое его изменение влияет на всю остальную программу. Получается более плохой код с большим числом побочных эффектов.>>682119>>682125Что-то не открывается сайт
>>682142До ангулара надо много других вещей изучить.>>682292Сфинкс ищет не по частям строк, а по целым словам. Условно говоря у него есть индекс вида: ...абажур => id документов где оно встречаетсяавария => id документов где оно встречается...И он по нему ищет с большой скоростью (фактически надо найти все слова из запроса и сделать перечечение списка id, после чего остается только отсортровать их по релевантности).Если индекс сделан на основе двоичного дерева (то есть слова в нем отсортированы по алфавиту), это позволяет искать не по полному слову, а по префиксу, то есть по первым буквам, но не по середине или концу. Но это чуть-чуть медленнее так как в этом случае мы найдем не одно слово, а несколько, и соответствуенно будет больше результатов.Для поиска по середине или концу слова есть префиксные/суффиксные индексы. Они более тяжелые. Фактически при их испоьзовании сфинкс делает из слова нарезку и каждый кусок слова сохраняет как отдельное слово, например "машиностроение" добавляет в индекс слова: машиностроениеашиностроениешиностроениеиностроение...ниеОбычно задается минимальная длина слова для поиска так как поиск по 1-2 буквам дает огромное число результатов и раздувает индекс. Ну и тот факт что вместо одного слова вставились 10 слов тоже его раздувает.В общем, полезно представлять как устроены индексы.В случае с именами файлов можно еще поиграться с правилами разбиения на слова - например по символу подчеркивания, дефису и тд.> Если с этой опцией задать min_word_len = 1 и min_prefix_len = 1Ты бессмысленно забиваешь индекс. Одна буква встречается почти в каждом названии и это забивает индекс не давая никакой выгоды.Я не очень уверен, есть ли смысл в твоем случае делать поиск по бессмысленным именам. Ну как минимум поставь длину префикса не менее 3-4 символов.>>682674 Можно попроовать, но придется разбираться в настройках хостинга. Домен не обязателен, там дадут технический поддомен.
>>682697global использовать нельзя. Надо правильно проктировать функции.Длинные выражения из тернарников не годятся, их плохо читать. Логика вида "если так, то ... иначе " гораздо лучше читается. У нас нет цели соревноваться кто больше операций засунет в одну строку - нам важна читаьельност и поддерживаемость. Ну вот попробуй в свой тернарник в середину какой-нибудь еще действие вроде вызова функции или цикла добавить.Что касается массивов с написанием чисел, я не вижу смысла делать там кучу массивов, можно сделать один большой массив и функцию которая его возвращает.> if($thou==1)$valueArr = $thouArr;Нужно писать в 3 строки со скобками. > if($num==000)000 то же самое что 0 . Это же число.> function inclineNotNum($num, $mill, $thou, $ruble){Очень странная функция. Почему она принимает на вход 4 числа и выдает на выходе одно значение? Я не понимаю логики. Лучше сделать так: incline(45, '%d кот', '%d кота', '%d котов') -> 45 котов> // При помощи одноразового цикла декларируем функцию, которая возвращает> // склонения слов.Если тебе нужна функция то объяви ее нормально. Какой смысл в том что ты там нагородил условий для создания функици если можно просто объявить ее на верхнем уровне. Ты: - сделал функцию менее заметной- добавил лишний бесполезный код который не нужен если функцию объявить на верхнем уровнеКакой в этом смысл? Зачем нужен однразовый цикл? Ты по моему не понимаешь концепцию, цикл придуман для повторяющихся действий. Одноразовый цикл пишется так: if.> $extArr, $intArrЧто значат эти названия? > $oneNumArr = str_split($num);С числами надо работать математическими методами.В общем убери все эти странности, и тогда посмотрим дальше. Сразу скажу что у большинства переменных плохие названия, название должно говорить что хранится в переменной, а не то что это массив.>>PHP Notice: что-то там offset на произвольной строчке> Ебался много дней над этим, но, к сожалению, не пришел к какому-либо определенному ответу.Значит код плохой и нечитаемый раз в нем нельзя найти ошибку. Надо сделать рефакторинг и сделать его простым и понятным.
>>682856 О, хорошо, теперь я вижу что есть варианты из которых можно выбирать. > Class Table InheritanceПо моему выглядит переусложненно> Concrete Table Inheritance> Для каждого класса информацию хранить в отдельной таблице, вместе с общими свойствами, в отличие от class table inheritance.ну тут тоже не все так просто. Например неудобно выбирать все лайки которые поставил пользователь (надо делать юнионы). Давай заменим лайки на иерархические комментарии, которые можно ставить пользователям, постам и фото. Тогда получается в случае ConTI мы делаем 3 почти одинаковых таблицы. > Нельзя выбрать все лайки для разных классов (одновременно для комментариев, фото, пользователей) без юнионов. Хотя не представляю, в какой ситуации это может понадобиться.Страница "мои лайки" или "Васины лайки"> Хотя я не знаю в цифрах, как влияют на производительность джойны, и как влияет большое кол-во пустых полей.Так сказать трудно. Надо смотретьконкретную ситуацию. Думаю, что лишние маленькие поля не особо влияют. И джойны наверно тоже.>>682974 Жаднй алгооитм годится дял простой версии, но ты ведь не хочешь на ней остановиться? >>683051Да, ошибки это плохо.>>683088 Ты провалил психологический тест на программиста
>>683145Программируя CMS ты вряд ли многого добьешься - это низкоквалифицированная работа.>>683160Значит надо было начать с книги попроще.>>683211Суть в том что берешь по максимуму самых крупных купюр. потому и жадный.>>681863 Я не знаю. Смотри сайты с вакансиями.>>683338 Установи PHP на апач, настрой виртуалхосты и запускай код там. В ОП посте есть инструкции.>>683588Ну и ужасный код. массивы на массиве. Зачем ты делаешь 5 однотиных переменных когда можно сделать еще один массив? Если тебе надо найти минимальные значения, просто отсортируй записи. Это монго дб? А в SQL кстати минимальные значения находятся простым запросом. за это я люблю SQL и не люблю монгу. >>683886Ты неправильный запрос пишешь. Ты не можешь переключиться. Ты должен установить модуль который связывает апач и php, забыл как он называется, в ОП посте было что-то на эту тему, посомтри.> Это проблема точно в пхпшторме, я запускал php скрипт с пхпифно из htdocs в папке апача и там server api был apache 2 handler.Ну так и запускай из-под апача, зачем тебе пхпшторм. Ну или попробуй там с настройками похимичить.
>>683940Я вообще вижу на картинке 2 блока друг под другом. Элементарно.>>684026 У меня он называется php_pdo_mysql.dll и шел в комплекте с PHP5 (windows).>>684731> Алсо, тесты на XSS просто удивительны. Часть нерабочая сама по себе, часть работает на седьмом эксплорере и вообще в нетскейпе.Главное чтобы твой парсер на выходе давал аккуратный HTML > На пике великий и могущественный DOM в работе.Надо варнинги перехватыват и очищать, там есть функция.> Алсо, $dom->saveHTML() добавляет к html-коду доктаможно сохранять не весь документ, а одну ноду.> 0 - любой другой символЛучше было зведочку наверно использовать.АЛсо у тебя странная таблица переходов - например self::STATE_STARTING_TAG; дальше никуда не ведет.Ну и код стеной, надо бы разбить на части. Например можно сделать массив вида [состояние => функция-обработчик]. Не знаю правда что со скоростью.> if (substr($html, $i + 1, 8) Эффективнее substr_compare - не создает новую строку> через <?xml-* команды можно вставить инъекцию, но браузеры их не понимаютА вот кто их знает, может там что-то есть вроде вставки svg что позволяет выполнить скрипт.Ну и у тебя алгоритм неаккуратный - вот эти вот постоянные заглядываняи вперед: $html[$i + 1] указыают что тут явно что-то не так. Машина состояний позволяет и без них обойтись.> self::_deleteAttribute($html, $i, $currentTag, $currentAttribute, $currentAttrValue, $attrStartPosition, $allowedAttributes);Слишком много аргументов. Алсо вместо удаления лучше просто не добавлять этот атрибут.> (substr($currentAttrValue, 0, 11) === 'яваскрипт:')Вот ты и попался. В HTML символы могут быть закодированы HTML мнемониками. Твой парсер их игноиирует, но ты должен сначала раскодировать содержимое атрибута, а только потом проверять.Ну и как я вижу, там много случае где твой парсер не вырезает яваскрипт-ссылки. А ведь есть еще data-ссылки. Плоховато у тебя с теорией. Надо использовать белый список, то есть разрешить толкьо определенные протоколы в ссылках.
Не пишите здесь больше. Переходите в новый тред >>689537 (OP)На посты с 11 по 15 марта я отвечу тут чуть позже. Можете напомнить о себе ссылкой в новом треде.Если я кого-то пропустил - напомните о себе в новом треде.Не пишите здесь больше. Идите в новый тред. Здесь будут только ответы на посты 12-15 марта.
помогите товарищи как мне сделать так чтобы echo выводил 13й месяц не только в первом условии.Наверно не очень понятно объяснил http://ideone.com/dNpjm1
Подскажи, Двач, я уже охуел искать что не так! Нихуя не могу запустить! Помоги ебанату.
>>690617В новый тред >>689537 (OP)
>>684841mysqli имеет тот недостаток что после каждого действия надо писать иф с проверкой на ошибки (или надо написать класс-обертку, делающий это). А PDO умеет делать это сам.>>685080 Увы, я не знаю. Надо посмотреть сам плагин, есть ли там какая-то функция которая может вывести страницу или ее часть. Возможно что нет и придется написать свою.>>685138Да, правильно>>685248Нет, синтаксис другой>>685302Я даже не знаю что это такое>>685304 нет. Мануал не объясняет концепции, например ООП или исключения или принцип DRY.>>685904 Я развернул твой код на cloud 9 и поиск там идет без регистра. >The key word ILIKE can be used instead of LIKE to make the match case-insensitive according to the active locale. This is not in the SQL standard but is a PostgreSQL extension.> according to the active localeДело может быть в этом. Укажи в README что надо сделать чтобы указать эту локаль. Как я понимаю, она фиксируется в момент создания БД.У меня --list показывает такое: Name | Owner | Encoding | Collate | Ctype | Access privileges ------------+----------+-----------+---------+-------+----------------------- foobar1634 | app | UTF8 | C | C | SELECT * FROM pg_collation выдает: collname | collnamespace | collowner | collencoding | collcollate | collctype -----------+---------------+-----------+--------------+-------------+----------- default | 11 | 10 | -1 | | C | 11 | 10 | -1 | C | C POSIX | 11 | 10 | -1 | POSIX | POSIX C.UTF-8 | 11 | 10 | 6 | C.UTF-8 | C.UTF-8 ucs_basic | 11 | 10 | 6 | C | C(5 rows)А, у меня видимо не установлено нужной collation. Печально конечно.
>>685963 Хороший вариант>>686077 > Undefined variable: time in /home/fWkjp3/prog.php on line 10Ошибка ведь - ты пытаешься увеличить не существующую в тот момент переменную. >>686133все верно
>>686214 Насчет https://github.com/foobar1643/student-list/blob/master/.gitignore#L3 composer.lock в гитигноре - есть мнение что его надо наоборот добавлять в репозиторий, чтобы все участники проекта работали с одними и теми же версияим библиотек. https://github.com/foobar1643/student-list/blob/9f1db772dff0346ba006e25d12840aefe1c484cc/app/Helper/RegistrationHelper.php#L62 > public function getFormData(Student $student) {Я бы перенес этот метод в контроллер отдельным методом. Он намертво привязан к конкретной форме, не универсален и наверно потому не имеет смысла выносить его в хелпер.https://github.com/foobar1643/student-list/blob/9f1db772dff0346ba006e25d12840aefe1c484cc/app/Controller/ControllerForm.php#L36> $auth = $regHelper->getUpdatedFields($auth, $student);Это на мой взгляд можно было сделать лучше. Не создавать отдельный объект студента для передачи в update, а передавать туда $student. Алсо, название переменной auth плохое. > $student->token = $authHelper->authorizeStudent();Вот тут тоже вопрос: а правильнее ли сделать функцию, принимающую студента и авторизующую его? А то в твоем варианте например нельзя авторизовать уже сохраненного в БД студента. да и вообще, странно выглядит функция с названием "залогиниться под студентом" не принимающая на вход ничего.> die();Так как мы в функции то можем просто использовать return. Кто знает, может мы в фронт контроллере еще что то хотим сделать.Регулярка ввода фамилии не позволяет ввести Д`Артаньян или О'Генриhttps://github.com/foobar1643/student-list/blob/9f1db772dff0346ba006e25d12840aefe1c484cc/app/Database/StudentDataGateway.php#L73> WHERE email = lower(:email_bind) Это не позволит исплоьзовать индексы для поиска (тут это не очень важно, но в других приложениях может иметь значение). Погугли про collations в MySQL.https://github.com/foobar1643/student-list/blob/9f1db772dff0346ba006e25d12840aefe1c484cc/app/Helper/AuthHelper.php#L17> $student = $this->dataGateway->selectStudent($_COOKIE['auth']);> if($student->id != null) {Обычно если не удалось найти объект, возвращают null. Возвращать новый объект не принято, да и это не дает защиты от ошибок если попытаться такой объект случайно использовать.> public function isAuthorized() {> if(isset($_COOKIE['auth'])) {Наличие куки ведь недостаточное условие?> https://github.com/foobar1643/student-list/blob/9f1db772dff0346ba006e25d12840aefe1c484cc/app/Helper/TokenGenerator.php#L7Кстати это пример функции которую можно делать статической. А можно и не делать, а оставить как есть.> public function logOut() {> setcookie('auth', null, -1);Открой мануал http://php.net/manual/ru/function.setcookie.php и внимательно проверь соответствие типов параметров. Можно ли передавать null вторым парамтером? Алсо для удаления куки принято указыать дату в прошлом.https://github.com/foobar1643/student-list/blob/9f1db772dff0346ba006e25d12840aefe1c484cc/templates/form.html#L13Ты должен быть осторожен с передачей контейнера куда-либо так как он содержит много серисов внутри и ты передаешь намного больше чем тому или иному компоненту требуется. Вью наверно не заслужил право самостоятельно выбирать сервисы из контейнра. В данном случае надо передавать либо переменную $isAuthorised, либо сервис авторизации.https://github.com/foobar1643/student-list/blob/9f1db772dff0346ba006e25d12840aefe1c484cc/templates/form.html#L90> <option value="nonresident" "<?phpПочему имя атрибута selected в кавычках? Так, в общем, у тебя неплохо получается, код становится все лучше. Давай поскорее добьем задачу и пойдем дальше.
>>686276> http://ideone.com/BAiU1S // Yoda SpeakПосмотри, внизу страницы ошибки: > PHP Notice: Undefined variable: resultStr in /home/DlFGPF/prog.php on line 25> PHP Notice: Undefined variable: resultText in /home/DlFGPF/prog.php on line 43Ты обращаешься к еще не существующей переменной> foreach ($wordArroy as $word) {> // склеиваем $слова в $строкуВесь этот цикл можно заменить функцией implode.> function makeFirstletterUppercase($text) {> $text = preg_replace ('([.,?!;])', '', $text); // убираем пунктуациюНехорошо что функция занимается не своим делом и не тем что написано в названии. Думаю, надо это вынести из нее.> $wordArroyне надо писать слово "массив", просто пиши во множественном числе: $wordsКомментарии лучше писать над строкой, а не справа, так как они слишком длинные.> $strArroyлучше назвать предложения - $sentences.> http://ideone.com/zfi18q // Клавиша shift> \\s\\s+"2 или больше раз" можно записать с помощью {2,}> (\s)([,.!?;]тут лучше указать не один пробел, а любое их числоТакже, тут тоже можно использовать implode.> http://ideone.com/5PkSz6 // ОпечаточникиО, интересное у тебя решение - это самое короткое решение, которое я видел.Исправление сделано неправильно - ты заменяешь все латинские буквы на русские, но ведь может быть ситуация что у нас в тексте полностью латинское слово: http://ideone.com/3k8aCU> http://ideone.com/iRS6qF // «Grammar Nazi»> (,|;|!|[?]|:)тут удобнее использовать квадратные скобки> '/(зделал)/u','/(зделаю)/u','/(зделан)/u',Это можно объединить в одну регулярку> (\\s)(но|а)(\\s)не сработает если после союза стоит запятая. Почитай в уроке про \\bНу и по условиям требуется не только исправить, но и написать где были ошибки.> http://ideone.com/T7xLpR // Автозамена> [Dd|Дд]В квадратных скобках символ | обозначает просто вертикальную черту. Перечитай урок про квадратные скобки или погугли.> \\D{0,2}Ты не ошибся? \\D значит "не цифра"> http://ideone.com/tytESG // Номера телефонов> \\W[0-9]\\W[0-9]\\W[0-9]\\W[0-9]\\W*[0-9]От повторов надо избавиться. Например с помощью квантификатора {}. Также, \\W разрешает много символов вроде плюсов, звездочек, вопросительных знаков которых явно не должно быть в номере.> [7]Скобки тут лишниеНе вижу в программе проверки неправильных номеров. > http://ideone.com/Dpy8f8 // Ipad в кредитТут не удачно выбран способ возврата значения. Представь что например в случае не выплачиваемого кредита мы хотим что-то делать. Как это проверить программно? if ($result == 'невыплачиваемый')Это очень хрупкий код так как при любой правке надписи в исходной функции все сломается. Ты должен делать по-другому - функция должна возвращать 2 значения: выплаиваем ли кредит (true/false) и сумму выплат если он выплачиваемый. Вернуть 2 значения можно массивом. Возможно тебе понадобится вторая функция, которая преобразует результат в строку для вывода. А то сейчас у тебя программа пишет "Не выплачиваемый руб."
>>686362 > сделал вывод ошибок в «Grammar Nazi»Я думаю не стоит копипастить регулярку 2 раза - лучше использовать массив регулярок для поиска.Копипаста это зло так как раздражает что надо править код в 2 местах и делать одну и ту же работу 2 раза. И легко сделать ошибку. Потому дублирования регулярок быть не должно. В крайнем случае можно как-то программно генерировать составную регулярку. > Можно ли использовать такую конструкцию для проверки переменной? > if (!$text) {> если переменная $text еще не определенаНет, так как иф выдаст ошибку обращения к несуществующей переменной. Есть функция isset, но это все равно неаправильно. Не должно быть такого что неизвестно, есть переменная или нет - все нужные переменные должны быть созданы заранее.Ну и в твоем случае там можно использовать implode.>>686367 Да, сильная вложенность это плохо.>>686525Я ведь проверил тебя? Если нет - отпишись в новом треде.>>686869Это задача на сети в первую очередь. Хранить в массиве как раз самый нормальный вариант. То что ты описал - подойдет.
>>686901 Код плохо читается, надо тратить много усилий чтобы его понять. Надо переработать код чтобы он стал понятнее. Например, добавить комментарий-другой с объяснением алгоритма.> if(($amount-$nomination)>=0Это замаскированное $amount >= $nomination - так и пиши.> ($bills[$nomination] - 1)>=0То же самое> array_push($topsOut, $amount);> array_push($topsIncluded, $amount-$nomination);> array_push($weights, $nomination);мне кажется не очень удачная идея вести 3 стека - так труднее понять для чего каждый из них и легче допустить ситуацию когда забудешь что-то туда положить. Не лучше ли сделать один стек и класть в него массивы из 3 элементов? > function constructGraph($bills, $amount){> global $topsOut, $topsIncluded, $weights;Не очень хоошо использовать тут gloabl. Из-за этого непонятно какие данные для функции входные, а какие - выходные.Код в constructGraph очень напоминает код инициализации стеков - это явно копипаста, и наверно от нее можно избавиться? Названия переменных неудачные - что такое topsOut? Я не понимаю. Нужно краткое пояснение что хранится в этих стеках. Увы, из-за того что код запутанный и без комментариев, я не могу нормально его проверить. А ведь может там заложен умный алгоритм - но те кто читают код, не увидят его и не смогут оценить по достоинству.Однако, не разбирая алгоритм, я увидел подвох: у тебя в начале идет цикл по номиналам купюр, он вызывает функцию, которая делает второй цикл по номиналам купюр. А что если мы сделаем случай когда надо выбрать купюры 3 номиналов: http://ideone.com/7809o0 - твой алогритм не работает. >>687264> Палиндром - http://ideone.com/08RssiДля повторяющихся действий придуманы циклы. Копипаста не годится.> Кредит на айпад - http://codepad.org/vQZhYPVj> if ($creditBalance > 5000) {> } elseif ($creditBalance < 5000) { А что если ровно 5000 получилось?
>>687337 Это одномерный массив, двухмерный это когда массив в массив вложен.Плохо что исправления - в отдельном массиве, легче ощибиться, лучше делать так: [ ['regexp' => '..', 'exlpain' => '...', 'replace' => '..'], ['regexp' => '..', 'exlpain' => '...', 'replace' => '..'], ['regexp' => '..', 'exlpain' => '...', 'replace' => '..'], ]Так все, что относится к одному правилу, будет вместе. Выражения для зделал/зделаю можно собрать в одно.>>687410 Умное автодополнение, рефакторинги, проверка кода.>>687497> class BinarySearchAlgorithm {> private $array;> private $value;> public $firstInd;> private $lastInd;Поле не используется, более того нет причины делать их полями.Где комментарии? Непонятно что он ищет, равное данному число или ближайшее снизу? Я буду предполагать, что равное. Если дать на вход число, которого нет в массиве - что он вернет? https://ideone.com/B9K63Z - тут он возвращает какое-то значение. Почему так? Это явно ошибка.> while($firstInd <= $lastInd){> $middleInd = (int)floor($firstInd + $lastInd) / 2;Если индексы равны, нет смысла входить в цикл. > if($maxLong - $maxLocal < $item){> print_r("Sum is too large");Что за ограничения? Можно использовать флоаты если не нужна абсолютная точность, или библитеку работы с большими числами если нужна.> if($maxLocal > $maximum){> $maximum = $maxLocal;Можно использовать функцию maxЯ не очень понял что ищет второй алгоритм, потому не могу проверить правильный ли он. Вообще, твой код не содержит пояснений что он делает, что получает на вход, что возвращает на выходе и проверить его поэтому невозможно.
>>688177 > $splitText = mb_split("\n", $text);тут не нужны регулярки, хватит и explode. И кстати раз ты используешь эту функцию, ты в курсе чем регулярки в ней отличаются от регулярок в preg_split? там ведь другой синтаксис. > if ($maxLength < mb_strlen(trim($str))){> $maxLength = mb_strlen(trim($str));Макс. длину можно посчитать одной строчкой с использованием array_map. Хотя твое решение с вычислением длины на каждом шаге довольно оригинальное, но стоит как минимум добавить комментарий, иначе можно не заметить это. ну и в общем не очень хлрошо менять условие цикла по ходу его выполнгения, труднее предсказать как будет работать код.> trim($str)Это скопировано 3 раза, надо выносить в переменную. >>688417То что ты сравниваешь redis с SQL базой данных говорит что ты ничего в них не понимаешь. ну и видимо не понимаешь чем надо жертвовать ради использования NoSQL (надо отказаться от многих удобных вещей: языка запросов, транзакций, внешних ключей - это очень неудобно, я бы например не хотел с noSQL лишний раз работать).Ты наверно думаешь что SQl это что-то устаревшее, а NoSQL - новое и модное. Это не так. Люди используют NoSQL не от хорошей жизни, а потому что чистые SQL базы данных не справляются с их задачами. Там, где они справляются конечно проще исолпьзова классические решения и не мучаться с NoSQL. И даже там где есть NoSQL часто за ними за спиной стоит тот же MySQL.>>688422 гуглиАлсо можешь рещить наши задачи про вектор и кошки-мышки.>>689065Теперь верно.
>>689080Можно функцию написать, там немного наверно.>>689161А где вариант с антикризисными мерами? Я думаю, в задаче лучше сделать 1 объект = 1 работник, а не 1 объект = группа работников так как в твоем варианте мы не можем индивидуально например повысит ранг работнику.Далее, в твоем вариант, если у работника увеличить ранг, у него не увеличивается зарплата. Это значит, что-то сделано неправильно. Я бы советовал вообще не хранить зарплату, а сделать метод которй ее вычисляет.Ну и вообще, проверь что при изменении любых публичных свойств работника все выходные значения (зарплата, кофе) пересчитываются корректно.То же самое с департаментом. Вот у тебя есть публичное свойтсво personelAmount. Если я добавлю или удалю работника - оно обновится? Пока то, что у тебя есть - не работает. Все публичные свойства и методы должны хранить актуальные и точные значения.>>689217 Хорошо, только выучись сначала.>>689320 Решено верно.>>689422 Правильно.>>689487> Регулярка получилась конечно длинная и нечитабельная, но таков уж синтаксис. Наверное все-таки удобнее было бы перенести часть логики в js или php.Именно так и надо делать. Виноват не синтаксис, а тот кто написал слишком сложнео выражение.Я вот гляжу на выражение и не могу понять ни логики по которой оно построено, ни проверить его. Переделай код, чтобы он был понятен, вынеся часть проверок в PHP код. Например можно регуляркой разбить номер на группы, а их проверять в PHP.
Этот тред закрыт. Новый тред >>689537 (OP)