Этого треда уже нет.
Это копия, сохраненная 26 декабря 2014 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
33 Кб, 500x500
157 Кб, 1024x683
34 Кб, 650x384
3449 Кб, 1920x1080
Клуб изучения PHP #38 !xnn2uE3AU. # OP #408466 В конец треда | Веб
Что стоишь? Заходи. В этом ИТТ треде мы изучаем PHP (а также MySQL, JS, CSS, HTML), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то хочет делать сайты, кто-то хочет просто размять мозги и заняться чем-то полезным.

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

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

Предыдущий тред был тут: >>405044

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

Есть еще у нас задачки на HTML, JS, MySQL.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания.

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

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

Что почитать?

Мануал по PHP — http://www.php.net/manual/ru/langref.php
Сайт phptherightway
По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
JS: learn.javascript.ru
HTML/CSS: Путь верстальщика: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
MySQL: https://gist.github.com/codedokode/10539213

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

Сайт опять упал!!!!! Не паникуй, а открой http://rghost.net/45000175

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

Где архивы предыдущих тредов? Известно, где, на mediafire: http://www.mediafire.com/download/gza5360wdzqd743/threads-archive-pr-1..17.zip (189Мб, треды 1-17 из pr), http://www.mediafire.com/download/kgzl1f9366gc6ed/threads-archive-11..20.zip (72 Мб, треды 11-20 из b). Также один анон выложил все на дропбокс: https://www.dropbox.com/sh/4sb69jrx9qwrpcw/-nY5ia__VC (ок, он иногда не работает)

Как начать пользоваться командной строкой — gist.github.com/anonymous/9378956452c8e4a72ac8

ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.

Расскажи про поиск работы, фриланс etc Информация о фрилансе есть в /wrk . Также, походи по сайтам вроде hh.ru, hantim.ru, geekjob, fl.ru, посмотри, поизучай ситуацию. Имей в виду, кроме фриланса, где ты 2 дня ищешь заказ, полдня обсуждаешь за бесплатно суть работы, день делаешь и еще 2 дня слушаешь от заказчика что он о тебе думает, есть удаленная работа — продаешься в рабство, и занимаешься только программированием, задачи тебе будут подкидывать наготово. Ищется по слову «удаленно» на перечисленных сайтах. Зарплата на удаленной работе может быть меньше чем в офисе в столице, но больше чем в твоей деревне. На одеске зарабатывают больше, чем на русском фрилансе.

В общем, давайте начинать уже!
Стой !xnn2uE3AU. #2 #408468

Прочти сначала этот пост.

Как и чем отформатировать код

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

Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт http://phpformatter.com и нажать кнопку Format. Робот сам выровняет твой код в лучших традициях.

Если ты используешь для редактирования кода IDE, то все еще проще (а если не используешь, то почему бы не начать?):

- Eclipse PDT — жми Ctrl + Shift + F для автоматического форматирования кода.
- Netbeans for PHP — жми Alt+Shift+F
- Zend Studio — жми Ctrl + A (выделить все), затем Ctrl + Shift + F
- PhpStorm — жми Ctrl+Alt+L
- PHPDesigner — поищи нужную опцию в меню, она там есть. Или жми Ctrl + Shift + F1
- Komodo IDE — правая кнопка -> Format Using...

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

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

Подробнее: https://gist.github.com/codedokode/8759492
#3 #408486
Вопрос по исключениям возник.

в classe foo {
...
function foo1(){
...
else{
throw new Expection
}}}

Где мне в таком случае писать try{} catch{} каждый раз, когда я вызываю функцию foo1 что ли?
#4 #408573
>>408486

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

Тут вроде написано https://gist.github.com/codedokode/65d43ca5ac95c762bc1a
512 Кб, 1536x2048
54 Кб, 500x500
Воннаби #5 #408575
Кароч аноны, меня пригласили младшей макакой за еду работать. Я рад очень. Единственная проблема это полтора часа дороги в одну сторону. Но думаю это можно перетерпеть ради опыта. Ну и разнообразить поездки чтением книг + слушать какие-нибудь подкасты.
#6 #408578
>>408575

Ну молодец, что. Только не бросай ничего изучать.
#7 #408579
>>408578
В смысле не переставать учиться? А как иначе? Если с моими знаниями прост ходить на работу, ты через две недели выпнут, инфа 100
#8 #408580
>>408575
Расскажи хоть, какими знаниями обладаешь и сколько учился? Вдохнови анонов.
749 Кб, 1920x1080
Воннаби #9 #408593
>>408580
Год тут трусь примерно. Учу медленно очень, с перерывами до нескольких месяцев, как когда например работал эникеем. Сначала учился только по учебнику ОПа, потом добавил книжку Никсона. Знаниями никакими почти не обладаю, ну вот вчера скидывал решение задачи про числа http://ideone.com/sSOFaM - это мой пхпшный максимум пока. Месяц как поставил себе Убунту - неспеша изучаю её. Так же начал гуглить и читать про MySQL и HTML параллельно с этим неделю-две назад. Такие дела. Надеюсь что сейчас начну расти куда быстрее, ведь придется учиться 8 часов в день вместо 1-2х.
#10 #408595
>>408593
Ты блять шутишь? То есть задачи на ооп, банкоматы, расчет пути ты не делал?
Что у тебя контора спрашивала если это твой максимум епт?
#11 #408598
>>408595 Не шучу. Разместил резюме на сайте. Как-то вечером позвонил HR из неизвестной фирмы, и просто записал меня к ним на собеседование.
Пришел, сказал тоже что и тебе. Что нихуя не умею кроме самых основ. Чел который меня собеседова спросил только, смогу ли с MySQL базой работать напрямую или средствами php, я ответил что пока не могу. В итоге он попросил оставить ему контакты и сказал что перезвонит. Через несколько дней пришла смс, что мол им нужен кто поопытнее и мол извини. На что я перезвонил и сказал, что пусть хотя бы вышлет мне какое-нибудь задание для теста / прокачки скилла. В итоге вместо задания он сегодня утром мне позвонил и сказал что в понедельник я могу приходить на работу. Видимо не нашли вообще никого толкового и решили взять нубаса на вырост.
#12 #408599
>>408598
В каком городе ты живешь?
#13 #408602
>>408599
Нск. Ну и кстати первую задачу на ооп таки делал, просто у меня системы нет годной в обучении. Читаю теорию, как по тому же ООП, но не закрепляю практикой. Далее например html позадротил 2 дня, потом забросил на неделю, так что все забыл почти, и придется освежать. Но все равно я почти год читаю что-то и гуглю постоянно. Думаю я отличаюсь все же от твоего вот этого представления.

>Ты блять шутишь? То есть задачи на ооп, банкоматы, расчет пути ты не делал?


>Что у тебя контора спрашивала если это твой максимум епт?

#14 #408603
>>408602
Это не мой пост был, хотя я тоже крайне удивлен. У меня почти такой же опыт, кстати, только я с точностью до наоборот делал: начинал с Никсона, после него взялся за учебник Опа, сейчас на задаче про кошек с мышками.
#15 #408609
>>408603
Ну и значит время начать тоже ходить по собеседованиям? Вчера в веб-макако треде в /b был анон, который в ДС пол года назад утроился таким же днищем за 18к и проработал 2 месяца пока его не выгнали, в итоге работает уже за 45к в другой конторке и вроде справляется. Так это же вообще круто как по мне. Получаешь экспу да еще и платят, никакие универы не нужны и голова работает на всю катушку.
#16 #408611
>>408609
Я для себя решил что как минимум задачу на файлообменник запилю, дабы не стыдно было показать на собеседовании, так как остальные задачки это имхо дет сад.
#17 #408613
>>408611
Я тоже так считаю. Подучу фреймворки и попиздую на собеседования.
1531 Кб, 3840x2400
1050 Кб, 1843x1100
#18 #408623
>>408611
>>408613
Ну я тоже не хотел идти совсем раньше времени. Думал что если прити совсем нубом, то мало того что профейлишь стопроцентно, так еще и с тобой никто не будет повторно разговаривать раньше чем через пол года. "Поэтому уж лучше подучу еще два месяца" - думал я. Но в итоге прошел очередной месяц и я почти нихуя не сделал за него. А жизненная ситуация сильно поджимает, что нужны деньги и какое-то движение. Создал резюмешку и начал очень неспешно рассылать, буквально по 1 вакансии в неделю. И вот через месяц уже так подфартило. И вот кстати вы скилловее меня, но так как сидите дома как сычи, о вас никто и не знает. И вакансии в итоге занимаются такими как я. И вот если сейчас у меня все взлетит, в итоге через два месяца я с вероятностью в 95% обойду вас по скиллам + буду уже иметь два месяца реального рабочего опыта впридачу. Это не бахвальство, это просто так в жизни бывает. Надеюсь вас это смотивирует больше учиться или тоже пойти попробовать пройти пару собеседований. Учить сидя дома это кстати зона комфорта, а собеседования это стресс. Меня как минимум фейлы мотивируют к изучению, ну или банально пришел домой и загуглил что провалил - уже польза.
#19 #408624
>>408623
Ты резюме сам составлял? Ненавижу эту хуйню. Его ведь можно заказать у кого-нибудь.
#20 #408627
>>408624
Сам составлял. Это супер легко же. На современных "вебДваНольных" сайтах с работой тебе нужно только заполнить все поля и нажать одну кнопочку. Хотя одно дело просто составить резюме, а другое дело составить действительно хорошее. Ну я посмотрел на резюме других пхп-макак и старался не совсем мудацкое сделать. Что бы хоть видно было, что я вообще представление имею о том, чем собираюсь заниматься.
#21 #408638
>>408624

В чем проблема? Если у тебя нет опыта работы, то у тебя все должно на 1 страницу уместиться, информация о себе, образование, скиллы (курсы и то что ты сам изучал), желаемая должность. Алсо, не забудь файл назвать «Имя Фамилия — резюме.doc». Алсо, не выпендривайся и не делай никакого нестандартного оформления.
#22 #408659
>>408573
Я хочу поймать его, обработать и перезапустить скрипт
#23 #408661
>>408659

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

Тогда try/catch должен стоять в самом верху внутри цикла do ... while

try {
fn( );
} catch (..) {
echo "Error...";
}

Интуиция подсказывает мне также, что скорее всего ты что-то делаешь неприавльно. Исключения говорят обычно о серьезной ошибке в программе и надо исправлять эту программу, а не пытаться запустить ее еще раз.
#24 #408662
>>408661
Нет. Мне посоветовали выбить исключения, когда введен неправильное число. Не 1,2,3, а любое другое. До этого я просто убивал скрипт.

http://ideone.com/CzWUK3

Кстати, вот код. Может мне объяснить почему я не могу вызвать функцию getPaid()?
#25 #408668
>>408662

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

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

> почему я не могу вызвать функцию


Посмотри внизу под программой сообщения об ошибке, начиная с самого первого. Так указано в какой строке проблема, посмотри на нее и соседние очень-очень внимателньо. Там где-то лишний $ стоит
#26 #408669
>>408668
Хм, попробую. Спасибо.
#27 #408671
>>408623
запилю тоже кулстори. короче где-то пол года назад начал читать учебник опа. потом прочел никсона.
работаю уже второй месяц, я 4й курс, поэтому написал заявление на вольное посещение, на пары не хожу. работаю фул дей. зарплата норм. с недели на неделю съедусь со своей тяночкой в съемной квартирке, брат жив, зависимость есть. спасибо опу за мануал и ответы в тредах, я подозреваю, что он убийца, отмывающий тут свою карму. если бы он так охуенно и доступно не описал основы - я бы вряд ли этим занимался. так что спасибо, оп, ты отличный человек
#28 #408674
>>408671
начал учить jquery. отменная вещь. советую всем, ещё захотите
#29 #408675
>>408674
Это ж вроде библиотека для жабаскрипта.
#30 #408682
>>408675
да, это библиотека для js. которая очень упрощает взаимодействие с элементами веб-страниц. и не только.
#31 #408683
>>408682

Я думаю, анон намекает что неплохо бы сначала тщательно изучить сам JS и DOM, а потом уже библиотеку для работы с ними.
#32 #408685
>>408675
ведь основы js я изучил ещё когда учил никсона
#33 #408686
>>408685
У Никсона там совсем уж основы, как создавать переменные, массивы например, вообщем как самый первый урок опа. Ну и Аякс еще.
#34 #408687
>>408683
там больше ста страниц. там подают достаточно, чтобы его понимать, я потом ещё игру на js небольшую делал, арканоид))0.
в любом случае jquery дается мне легко и без проблем.
к слову, этой библиотекой можно начинать пользоваться с практически нулевыми знаниями js. С помощью неё все равно большинство действий выполняются иначе. Проще, быстрее.
#35 #408688
>>408686
>>408687
промахнулся
#36 #408689
>>408686
да и потом синтаксис php и js очень схож
#37 #408697
>>408689
Совсем не схож же!
#38 #408723
Как "вырезать пробелы" в задании про "Палиндром" ?
#39 #408724
>>408671
А подробнее не распишешь? Что было между тем как начал учить и когда уже нашел работу?
#40 #408725
>>408671
Что за тестовое задание было в плане ПХП когда устраивался? сравнимо по сложности с заданием ОПа про компанию Вектор или ещё с каким-нибудь?
#41 #408726
>>408723
Между букв типа? Ну разбей строку на массив, и если элемент равено пробелу то unset его например.
#42 #408729
У меня синдром какой-то начинается, я дня 3-4 назад взялся учить ООП и сейчас только о нём и думаю и каждый день всё по нему читаю и складывается такое впечатление то постепенно забываю то что раньше учил по процедурному и базам данных. Мне страшно, у кого-то подобное было?
#43 #408731
>>408723

str_replace или strtr, заменяющая пробел на пустую строку. Не надо ничего разбивать, надо использовать готовые функции.
#44 #408732
>>408729

надо код писать, а не только читать. Задачки решай.
#45 #408734
>>408732
Решаю, сейчас всё по ООП пробую, до этого много решал по процедурном, когда ещё не начинал учить ООП и даже боялся к нему прикасаться, даже написал гостевую книгу, примитивный блог с выводом из базы данных, и даже примитивную игру где надо покупать или продавать акции, и попытаться набрать необходимую сумму денег, ну и конечно многие задачи решил, как с учебника ОП так и других. Но сейчас такое ощущение что всё то немного забываться начинает из-за того что весь мозг заняло ООП, я наверное глуповат, часто за собой подобное замечал. Насколько я знаю что-то запоминается когда наращивается нейронная связь на синапсах, то есть когда трещины между нейронами становятся меньше и электроны свободно проходят, когда что то учишь она наращивается, но со временем может ослабевать, я подозреваю что у меня всё очень быстро ослабевает в этом плане.
#46 #408735
Переделал задачу про ООО "Вектор".

Объекты теперь клонируются.

Все условия разбиты нормально.

Проверяю на правильность $level на входе. (С исключениями почти разобрался, думаю пойму на практике.)

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

Вместо корявого str_pad использую str_repeat.

>>> $total += $this->workers[$key]->paid;


Вместо $this->workers[$key] можно и нужно писать $value

Не ясно вот с этим. При замене на $value или value ничего не работает.

Добавлена колонка итого.

http://ideone.com/efQJOW
#47 #408740
Такой вопрос, как можно перемножить ключ и значение массива типа http://ideone.com/1TmjIA и результат записать в новый массив?
#48 #408741
>>408740
Пробежаться по массиву foreachем?
#49 #408742
>>408740
array_flip
#50 #408743
>>408742
Думал над этим, но это работает только при условии, что я буду знать значения, а если значения ключей меняются? я же не могу обращаться к ним как здесь http://ideone.com/Edyg6P
, ведь если поменяется значение то и ключ второго массива окажется неверным
#51 #408744
>>408741
Покажи, пожалуйста, пример
#53 #408747
>>408745
Спасибо огромное
#54 #408749
>>408745
А можно как нибудь переименовывать ключи в новом массиве, чтобы стали как в самом первом? Чтобы не [0], [1], [2] а [10], [15]... ?
#55 #408750
>>408749
Ты знаешь, как foreach работает?
http://ideone.com/IoT2eS
#56 #408766
>>408724
>>408725
ну между тем, как начал и между тем как устроился - я обмазывался никсоном и задачками опа.
тестового задания не было, меня спрашивали, дохуя спрашивали. но поскольку я читал никсона - теорию я кое как знал. Спрашивали за разное, в принципе ничего сложного. Разные вопросы по sql,html,css ещё. Там были вопросы на бумажке, типа, правильно ли написан тот, или иной код. Или что выведет эта то там хуйня(задания с подъебами).
Интересно, что собеседование проводил программист, который оттуда уходил. И он писал начальнику на резюме потом, что может сказать про человека, в основном было написано "слабый, неприятный", "средний, адекватный" и т.д. Поэтому поведение и коммуникативные качества тоже явно важны. Я нашел просто резюме других людей у себя на столе. Жаль, моего не было.
#57 #408791
Версия sqlite 2.1. Какой синтаксис в php для такого выражения:

\t\t$dbh - > beginTrаnsaсtion ( );
//exеcute
\t\t$dbh - >cоmmit( );

Не могу найти в манулах ничего по этой версии. Только для sqlite3+
#58 #408798
Нихуя пасаны!

Я короче почитал в мануале за ссылки, ничего не понял. Проспался и тут пришел в голову эксперимент. Провел его и теперь все понял! Но вот вопрос, есть ли еще какие подводные грабли, которые здесь не учитываются?
http://ideone.com/sNOxgE
#59 #408799
>>408798
А я вот не понял почему у тебя ретернит функция $var = 3
#60 #408801
>>408799
Ретёрнит 4. А почему стала = 3, когда была 1? Потому что объявляя $a глобальной и изменяя ее значение, мы меняем значение аргумента $var, потому что он сам прилинкован. Пушка, да?
#61 #408802
Задачка про вектор:
http://ideone.com/fork/77Ug9q
Оп, проверь, плиз.
#62 #408803
>>408734
Ни ссы. Читай мануал и практикуйся. Потом будет такое что нихуя сам придумать не можешь и это правильно - ооп же. Потом качай книгу "Мэтт Зандстра - PHP. Объекты, шаблоны и методики программирования" и работай с ней. Только не почитывай, а повторяй выдумывая аналогичные примеры. Это кстати единственная книга по ооп на php.
#63 #408804
В чае и моче кто-нибудь разбирается?
17 Кб, 574x266
#64 #408805
#65 #408823
ОП, а хаскель тред не твой случайно? Просто оп-пикча та же, что и в твоем уроке.
#66 #408827
Часов 7 проебался с задачей на банкомат и родил вот это http://ideone.com/knP267 , и страница для ввода суммы: http://www.codesend.com/view/384707b918193bdec94d2cbbadd64efc/
12 Кб, 449x811
#67 #408835
Не пойму, почему он не слушается меня? В условии четко сказано уменьшать координату х только если она не равна нулю:

if($this->x <= $this->cats[0]->getCoordinateX() && $this->x != 0){
\t$this->x = $this->x - 1;
}
!ОП #68 #408849
test
!ОП #69 #408850
Ну что аноны, провайдер опять выдал мне плохой IP (видимо за ним среди прочих сидел какой-то школьник), который забанен за вайп, придется сидеть из-под прокси. Такие дела. Ну, у меня это уже не первый раз.

>>408687

> этой библиотекой можно начинать пользоваться с практически нулевыми знаниями js


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

>>408735

Хорошо, действительно, исправлены замечания. Вот тогда еще порция.

По оформлению: у классов и функций, методов скобка ставится на новой строке (а у if/for — на той же самой):

class X
{
...

if (...) {
...

Если ты зальешь свой код на phpformatter.com, он исправит это автоматически.

> if ($this->chief){


> return 0;


> } else {


> return $this->pages;


Тут напрашивается тернарный оператор:

return $this->chief ? 0 : $this->pages;

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

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

> else {


> echo "The object with $level =! (1,2,3) can't exists. Please create a new object with these levels.\n";


> return False;


Это бессмысленная конструкция. Даже если ты вернешь false из конструктора, объект все равно создастся (так как фактически он создается еще до вызова конструктора). Надо выкидывать исключение.

throw new Exception("The object with $level =! (1,2,3) can't exists. Please create a new object with these levels.");

Ловить его не требуется.

У тебя одинаковый конструктор скопипастен 4 раза. Не надо копипастить, просто перенеси его в класс Worker.

> $array_count


Переменные и функции принято называть камелкейсом, то есть разделяя слова заглавными буквами: $workerCount

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

> for ($i = $array_count; $i <= ($array_count + $count);


Тут не нужен array_count. Можно считать от 0 до count.

> foreach ($this->workers as $key => $value) {


> $total += $this->workers[$key]->getPaid( );


Не называй переменные бессмысленными именами типа value. Тут вместо $value лучше использовать $worker. также, не надо обращаться к массиву через key. Вот, как это лучше написать:

foreach ($this->workers as $worker) {
$worker->sayHello( );
}

Сравни, насколько короче получается и насколько там меньше скобок и стрелок и насколько это читабельнее. Перепиши все циклы на более короткие варианты.

Колонки в таблице можно было делать разной ширины, было бы красивее. Но можешь и так оставить, как есть.

> ?>


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

В остальном, задача почти решена, думаю, когда ты это исправишь, особо замечаний уже не останется.
!ОП #69 #408850
Ну что аноны, провайдер опять выдал мне плохой IP (видимо за ним среди прочих сидел какой-то школьник), который забанен за вайп, придется сидеть из-под прокси. Такие дела. Ну, у меня это уже не первый раз.

>>408687

> этой библиотекой можно начинать пользоваться с практически нулевыми знаниями js


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

>>408735

Хорошо, действительно, исправлены замечания. Вот тогда еще порция.

По оформлению: у классов и функций, методов скобка ставится на новой строке (а у if/for — на той же самой):

class X
{
...

if (...) {
...

Если ты зальешь свой код на phpformatter.com, он исправит это автоматически.

> if ($this->chief){


> return 0;


> } else {


> return $this->pages;


Тут напрашивается тернарный оператор:

return $this->chief ? 0 : $this->pages;

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

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

> else {


> echo "The object with $level =! (1,2,3) can't exists. Please create a new object with these levels.\n";


> return False;


Это бессмысленная конструкция. Даже если ты вернешь false из конструктора, объект все равно создастся (так как фактически он создается еще до вызова конструктора). Надо выкидывать исключение.

throw new Exception("The object with $level =! (1,2,3) can't exists. Please create a new object with these levels.");

Ловить его не требуется.

У тебя одинаковый конструктор скопипастен 4 раза. Не надо копипастить, просто перенеси его в класс Worker.

> $array_count


Переменные и функции принято называть камелкейсом, то есть разделяя слова заглавными буквами: $workerCount

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

> for ($i = $array_count; $i <= ($array_count + $count);


Тут не нужен array_count. Можно считать от 0 до count.

> foreach ($this->workers as $key => $value) {


> $total += $this->workers[$key]->getPaid( );


Не называй переменные бессмысленными именами типа value. Тут вместо $value лучше использовать $worker. также, не надо обращаться к массиву через key. Вот, как это лучше написать:

foreach ($this->workers as $worker) {
$worker->sayHello( );
}

Сравни, насколько короче получается и насколько там меньше скобок и стрелок и насколько это читабельнее. Перепиши все циклы на более короткие варианты.

Колонки в таблице можно было делать разной ширины, было бы красивее. Но можешь и так оставить, как есть.

> ?>


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

В остальном, задача почти решена, думаю, когда ты это исправишь, особо замечаний уже не останется.
#70 #408859
Закрыть код js никак нельзя?
Когда скрипт на js подключается из файла, понятно что клиент этот подключаемый файл видит и сможет открыть и прочитать, иначе как бы он... в общем я сам понимаю, что нельзя, но может как-то, лел, можно его скрыть от прямого доступа пользователем-человеком? Может какие-то разрешения на открытие/запуск напрямую? Какие-то варианты вообще моугт быть?
!ОП #71 #408862

>>408766

Я только прокомментирую, что часто дают задачки на знание всяких особенностей PHP, и чтобы их решить, стоит прочесть весь мануал по PHP (раздел «справочник языка»). Это потребует дня 2-3, но зато вы будете себя чувствовать с такими вопросами увереннее.

>>408791

А просто запросы BEGIN/COMMIT не работают? Вот доки: https://www.sqlite.org/lang_transaction.html

Также, не понимаю, какая выгода сидеть на старой sqlite.

>>408798

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

>>408802

Не сокращай так переменные: function postMe, 'tug' => 500. Это очень тяжело читать. Надо писать addManager, 'tugricks'. Если ты пишешь код на ideone, а там неудобно писать большие тексты, то переходи на IDE или редактор (Sublime Text, Notepad++, PhpStorm, Eclipse, NetBeans) — там есть автодополнение и тебе не придется руками печатать длинное имя второй раз.

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

$count = $this->count;

Мало того, что тебе тяжело писать этот код, его еще и читать тяжело. Более того, ты еще и скопипастил его 3 раза, а копипаста — зло. Это, разумеется, абсолютно не годится. Сделай нормально хранение данных.

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

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

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

— какие сущности можно выделить в задаче, для которых мы создадим классы? Очевидно, это Департамент и Сотрудник
— какие свойства есть у сущностей? У Сотрудника очевидно есть свойства вроде «ранг», «является ли боссом», и т.д.
— что мы хотим получить от сущностей, то есть какие у них должны быть методы? От Сотрудника напрмер, мы хотели бы узнать его зарплату с учетом всех надбавок, сколько он кофе выпивает, от Департамента — суммарную зарплату всех Сотрудников.
— как сущности связаны? Тут все просто: каждый Департамент содержит несколько Сотрудников

Дальше, если подумать, то логично сделать не один класс Сотрудник, а 4 класса: Менеджер, Инженер, ит.д. Конечно, у них будет много общего, потому, чтобы не копипастить код, стоит применить наследование. Наследовние позволяет нам создать класс не с нуля, а на основе существующего класса: http://php.net/manual/ru/language.oop5.inheritance.php Например, мы можем сделать базовый класс Сотруждник, а на его основе сделать Менеджер, Инженер, и т.д.

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

Ну и еще. Раз уж ты переделываешь код, то давай используем инкапсуляцию. Прочитай в мануале про public/protected/private и сделай все свойства всех классов не-публичными. Инкапсуляция, то есть когда ты не можешь залезть снаружи в свойства объекта, а только можешь вызывать методы, делает код гораздо более качественным и надежным.

Если что-то непонятно, или есть вопросы, задавай. Если все понятно, пиши код.
!ОП #71 #408862

>>408766

Я только прокомментирую, что часто дают задачки на знание всяких особенностей PHP, и чтобы их решить, стоит прочесть весь мануал по PHP (раздел «справочник языка»). Это потребует дня 2-3, но зато вы будете себя чувствовать с такими вопросами увереннее.

>>408791

А просто запросы BEGIN/COMMIT не работают? Вот доки: https://www.sqlite.org/lang_transaction.html

Также, не понимаю, какая выгода сидеть на старой sqlite.

>>408798

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

>>408802

Не сокращай так переменные: function postMe, 'tug' => 500. Это очень тяжело читать. Надо писать addManager, 'tugricks'. Если ты пишешь код на ideone, а там неудобно писать большие тексты, то переходи на IDE или редактор (Sublime Text, Notepad++, PhpStorm, Eclipse, NetBeans) — там есть автодополнение и тебе не придется руками печатать длинное имя второй раз.

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

$count = $this->count;

Мало того, что тебе тяжело писать этот код, его еще и читать тяжело. Более того, ты еще и скопипастил его 3 раза, а копипаста — зло. Это, разумеется, абсолютно не годится. Сделай нормально хранение данных.

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

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

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

— какие сущности можно выделить в задаче, для которых мы создадим классы? Очевидно, это Департамент и Сотрудник
— какие свойства есть у сущностей? У Сотрудника очевидно есть свойства вроде «ранг», «является ли боссом», и т.д.
— что мы хотим получить от сущностей, то есть какие у них должны быть методы? От Сотрудника напрмер, мы хотели бы узнать его зарплату с учетом всех надбавок, сколько он кофе выпивает, от Департамента — суммарную зарплату всех Сотрудников.
— как сущности связаны? Тут все просто: каждый Департамент содержит несколько Сотрудников

Дальше, если подумать, то логично сделать не один класс Сотрудник, а 4 класса: Менеджер, Инженер, ит.д. Конечно, у них будет много общего, потому, чтобы не копипастить код, стоит применить наследование. Наследовние позволяет нам создать класс не с нуля, а на основе существующего класса: http://php.net/manual/ru/language.oop5.inheritance.php Например, мы можем сделать базовый класс Сотруждник, а на его основе сделать Менеджер, Инженер, и т.д.

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

Ну и еще. Раз уж ты переделываешь код, то давай используем инкапсуляцию. Прочитай в мануале про public/protected/private и сделай все свойства всех классов не-публичными. Инкапсуляция, то есть когда ты не можешь залезть снаружи в свойства объекта, а только можешь вызывать методы, делает код гораздо более качественным и надежным.

Если что-то непонятно, или есть вопросы, задавай. Если все понятно, пиши код.
!ОП #72 #408872
>>408823

Ты имеешь в виду этот тред? >>374025 Ты не путаешь что-то? По моему персонаж из оп-поста у меня нигде не встречается.

>>408827

Сразу же совет: переходи на utf-8, 1251 использовать нет никакой выгоды, она старая и убогая (в ней всего 255 символов доступны, а в utf-8 десятки тысяч).

И зачем ты ставишь столько пустых строк? Не ставь больше 2 пустых строк подряд.

> if($_POST['submit1'])


> {


> function bankomat()


Функции не должны определяться внутри if.

Дальше, в самой функции у тебя слишком длинные строки. Я вижу там есть 7 уровней отступов — такого быть не должно. В такой простой задаче хватит максимум 3 уровней вложенности.

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

> if ($rem >= $bills[500])


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

> echo "<br>$rem купюр номиналом 5


Хорошая функция ничего не выводит, а только возвращает. Вынеси echo наружу из функции.

Имя функции должно начинаться с глагола, в стиле сделайЧтоТо, например рассчитайСдачу: calculateChange.

Код слишком длинный для такой простой задачи. Сократи его.
!ОП #72 #408872
>>408823

Ты имеешь в виду этот тред? >>374025 Ты не путаешь что-то? По моему персонаж из оп-поста у меня нигде не встречается.

>>408827

Сразу же совет: переходи на utf-8, 1251 использовать нет никакой выгоды, она старая и убогая (в ней всего 255 символов доступны, а в utf-8 десятки тысяч).

И зачем ты ставишь столько пустых строк? Не ставь больше 2 пустых строк подряд.

> if($_POST['submit1'])


> {


> function bankomat()


Функции не должны определяться внутри if.

Дальше, в самой функции у тебя слишком длинные строки. Я вижу там есть 7 уровней отступов — такого быть не должно. В такой простой задаче хватит максимум 3 уровней вложенности.

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

> if ($rem >= $bills[500])


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

> echo "<br>$rem купюр номиналом 5


Хорошая функция ничего не выводит, а только возвращает. Вынеси echo наружу из функции.

Имя функции должно начинаться с глагола, в стиле сделайЧтоТо, например рассчитайСдачу: calculateChange.

Код слишком длинный для такой простой задачи. Сократи его.
!ОП #73 #408874
>>408835

Может он в другом месте уменьшает? Попробуй перед if и внутрь if поставить echo чтобы проверить срабатывает ли он.

>>408859\t

Нет. Есть такие вещи как обфускация, но ей ты все равно не защитишься от умных и любопытных. Единственный способ защитить алгоритм — выполнять его на сервере.
#74 #408896
Логика мышек пока хреновая, они неэфективно двигаются, придется вводить очки за ход, как оп советовал. Ну хоть поиск кошек реализовал, и доделал кошку до конца.
http://ideone.com/GkIGX6
#75 #408898
>>408872
Да, я видел что на скрине задачи там решение в пару строчек, но решал в силу имеющихся знаний, видимо их недостаток и привел к такому огромному решению. У меня почему то с кодировкой проблемы на utf-8, уже и в хеддере кодировку указывал, и при сохранении документа, всё равно выводит кракозябры. Это мне после phpformatter'a такой код достался уже. Наверное начну теперь устранять пробелы в знаниях по работе с массивами и функциями и потом уже попытаюсь снова решить задачу более коротким путем.
#76 #408932
Вопрос по Sublime text, когда вставляешь в него любой текст не проверяеться на синтаксис, как исправить?
#77 #408958
>>408896

А что на маленьком поле все с него убегают? http://ideone.com/deqqKK

> public function setSleepIcon()


> {


> $this->previousIcon = $this->icon;


> $this->icon = "@";


> }


Гораздо удобнее не менять значение поля icon и мучаться с его сохранением, а написать в функции getIcon примерно так:

return $this->isSleeping ? '@' : $this->icon;
#78 #408959
>>408958
Хм, точно, нужно будет поменять в условиях цифры на длинну поля.
#79 #408961
>>408932

Не понял вопрос. Ты имеешь в виду, что если открыть новую вкладку и вставить текст, он не подсвечивается? Надо просто сохранить файл с правильным расширением, либо клинкуть на нижний правый угол и выбрать язык.
#80 #408963
>>408898

> уже и в хеддере кодировку указывал, и при сохранении документа


Ты наверно неприавльно что-то указал. У других-то работает.

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


Хорошо. Советую сюда постить решения для проверки.
#82 #408993
>>408731
Так и было задумано в задании, что я сам должен был гуглить функции в мануале или спрашивать здесь? или же я что-то упустил т.к в "теории" перед заданием не было упоминания strtr или str_replace, да и вообще не было упоминания этих функций.
#83 #408996
>>408993
Хм, вообещ в учебнике, про str_replace есть, хотя я не помню где.

Гуглить - да. Тебе в любом случае прийдется гуглить, начинай привыкать.
236 Кб, 744x1052
#84 #409000
Добрый вечер всем, вот сделал задачу на калькулятор, сначала легкую версию без порядка действий.
http://ideone.com/Xq2yIL
Прошу критики.
#85 #409004
Посоны, почему не работает контактная форма?
<?php

$to = "email@adress.com";
$subject = "Посылка с контактной формы";

if(isset($_POST["submit"]))
{
if(!preg_match("/^(?:[a-z0-9]+(?:[-_.]?[a-z0-9]+)?@[a-z0-9_.-]
+(?:.?[a-z0-9]+)?.[a-z]{2,5})$/i",trim($_POST["email"])))
{
$message = "<div id="message" class="error">
Указанный email не соответствует формату!</div>";
}
else
{
$message = "<div id="message" class="success">
Форма успешно отправленна!</div>";
}
}

?>

Вот html:
<form class="contact" method="post" action="">
<div>
<span class="label">Ваше имя:</span>
<input class="input" name="name" type="text" required>
</div>
<div>
<span class="label">Тема:</span>
<input class="input" name="theme" type="text" required>
</div>
<div>
<span class="label">Ваш email:</span>
<input class="input" name="email" type="text" required>
</div>
<div>
<span class="label">Сообщение:</span>
<textarea class="input" name="comment" required></textarea>
</div>
<div>
<span class="label"></span>
<input class="btn" name="submit" type="submit" value="Отправить">
<?=$message?>
</div>
</form>

И еще немного css, но это здесь не нужно.

Сначала он в любом случае выдавал ошибку, я изменил preg_match на /^([\w-]+(?:\.[\w-]+))@((?:[\w-]+\.)\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i, также там нужно поправить кавычки (везде используются двойные, нужно кое-где заменить одинарными, это максимум очевидно).

После этого он выдает сообщение об успешной отправке, но никакого письма на нужный адрес не приходит.
#85 #409004
Посоны, почему не работает контактная форма?
<?php

$to = "email@adress.com";
$subject = "Посылка с контактной формы";

if(isset($_POST["submit"]))
{
if(!preg_match("/^(?:[a-z0-9]+(?:[-_.]?[a-z0-9]+)?@[a-z0-9_.-]
+(?:.?[a-z0-9]+)?.[a-z]{2,5})$/i",trim($_POST["email"])))
{
$message = "<div id="message" class="error">
Указанный email не соответствует формату!</div>";
}
else
{
$message = "<div id="message" class="success">
Форма успешно отправленна!</div>";
}
}

?>

Вот html:
<form class="contact" method="post" action="">
<div>
<span class="label">Ваше имя:</span>
<input class="input" name="name" type="text" required>
</div>
<div>
<span class="label">Тема:</span>
<input class="input" name="theme" type="text" required>
</div>
<div>
<span class="label">Ваш email:</span>
<input class="input" name="email" type="text" required>
</div>
<div>
<span class="label">Сообщение:</span>
<textarea class="input" name="comment" required></textarea>
</div>
<div>
<span class="label"></span>
<input class="btn" name="submit" type="submit" value="Отправить">
<?=$message?>
</div>
</form>

И еще немного css, но это здесь не нужно.

Сначала он в любом случае выдавал ошибку, я изменил preg_match на /^([\w-]+(?:\.[\w-]+))@((?:[\w-]+\.)\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i, также там нужно поправить кавычки (везде используются двойные, нужно кое-где заменить одинарными, это максимум очевидно).

После этого он выдает сообщение об успешной отправке, но никакого письма на нужный адрес не приходит.
#86 #409005
>>408996
Мда, чем дальше я иду по учебнику тем будто бы тону в зыбучем песке и всё чаще и чаще просто впадаю в состояние ступора и не знаю что делать. Вот в чём здесь проблема? вот допустим я погуглил функцию strtr и я не могу банально понять, где здесь хотябы пример, как она пишеться
http://php.net/manual/ru/function.strtr.php
т.е нужно ли так
$anal = strtr($anal);
или так
strtr($anal);
У меня у одного такая проблема во время обучения по учебнику опа? т.к я реально чувствую себя дауном.
#87 #409006
>>409005
отклееный говнокод ссаный
http://ideone.com/pbG7Ja
#88 #409008
>>409005
В документации действительно некоторые вещи сухо написаны и трудны для понимания (по крайней мере для меня).
20 Кб, 702x341
#89 #409010
>>409005
>>409006
Вот например макака со своими летучими веб-обезьянами не смог сделать грамотную вакабу, и я даже не могу понять какое из слов в моем сообщении не пропускает его ссаный спам-лист. Я бы лучше и удобнее сделал если мог, а ответ тебе - пикрилейтед.
#90 #409011
>>409006

>mb_encoding('utf-8');


неправильно написано
#91 #409021
Как теститровать скрипты, которые используют БД? Можно взять конечно бесплатный хостинг, но это долго. Денвер что ли? На VB не смог поднять debian с апачем и бд.
#92 #409024
>>409010
narod.ru
#93 #409032
>>409021
У меня на винде стоит сборка с easyphp
А на VB Убунта + Apache + Php + MySQL

Если что могу подсказать.
#94 #409044
>>409021
Я апач ставил. На phpmyadmin.ru есть гайд для нубов.
#95 #409045
>>409005
Тоже было тяжко по мануалу, но потом помню перестал читать простыню а начал искать именно нужную инфу, и стало значительно проще и понятнее. Например порядок просмотра substr. Сверлишь взглядом какие типы данных принимаются как аргументы и что возвращается.

string substr ( string $string , int $start [, int $length ] )
Здесь 2 обязательных параметра: строковый $string и целочисленный $start. Еще есть необязательный, потому что в квадратных скобках - целочисленный $length. Возвращается строка.

Дальше скролишь в "Возвращаемым значениям" и смотришь что написано там. Теперь есть представление что нужно скормить и что получишь на выходе. Например результат/false (в нашем случае строка или логическое false), true/false.

Если и в этом плаваешь, то посмотри типы данных: string, int, double, boolean, array, null - это все типы данных, которые нужно различать.

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

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

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

Вот примерно так я и дрочил, пока не нарисовались закономерности в поведении, порядке аргументов и возвращаемых значениях. Ну удачи.
#96 #409054
>>409045
Вот ты пишешь ему гайды полотном, а он давно забил и ушел. Ибо я ему через 30 секунд после его поста ответил, а он даже самую нубскую банальщину не исправил.
#97 #409055
Поцоны, у меня к вам вопросец. Есть один бэкенд, и он на php, и есть один ботнет.
В общем, алгоритм такой: ботнет стучится на бэкенд, получает два айди, собирает информацию, следуя этим айди, и пушит её обратно на бэкенд. Информации немало, json с 1500 обджектами. Пока не знаю что там с нагрузкой будет при разборе json на сервере.
Но вопрос сейчас в другом. Как сделать так, чтобы полученные ботом айди ставились в очередь на сервере, и не отдавались другим ботам, а потом, если данные получены, помечались пропарсенными. Потому что бывают всякие обрывы, отключения, и часть информации может остаться не пропарсенной, если просто удалять айди, без проверки на парсинг. Ну и если информация не была пропарсена, отдавать эти айди другому боту.
#98 #409058
>>409054
Может спать человек пошел или решил отдохнуть и завтра с ясным мышлением все решить.
#99 #409065
>>408970

<?php надо ставить в начале, а так у тебя это не код а просто ничего не значащий текст который PHP не интерпретирует, а выведет как есть.

>>408993

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


Как хочешь, можешь справшивать, можешь гуглить. Вообще, если ты откроешь начало урока, то на первой картинке есть str_replace и strtr.

>>409005

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

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

>>409010

Там не проходит скобки + точка с запятой

( );

Чтобы написать их, ставь внутри скобок звездочка — пробел — звездочка или что-нибудь еще, например, слово.
#99 #409065
>>408970

<?php надо ставить в начале, а так у тебя это не код а просто ничего не значащий текст который PHP не интерпретирует, а выведет как есть.

>>408993

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


Как хочешь, можешь справшивать, можешь гуглить. Вообще, если ты откроешь начало урока, то на первой картинке есть str_replace и strtr.

>>409005

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

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

>>409010

Там не проходит скобки + точка с запятой

( );

Чтобы написать их, ставь внутри скобок звездочка — пробел — звездочка или что-нибудь еще, например, слово.
#100 #409067
У меня вопрос немного не по теме, вот если создаёшь что то на сайте, чем по идеи должнo пользоваться большое количество людей, например чат или форум, как организовать базу данных для того что бы иметь возможность отображать все данные вроде всех сообщений каждого пользователя и прочего. Надо как минимум две таблицы создавать в базе данных, одна со всеми сообщением (именем, эмейлом, и другими параметрами) а вторая с именем и ай-ди каждого пользователя? И как в этом случае передать по ссылке через GET id конкретного пользователя?
#101 #409068
>>409004

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

>>409005

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

Примеры в мануале есть: http://php.net/manual/ru/function.strtr.php#refsect1-function.strtr-examples

Хотя согласен, что они запутанные какие-то.

Пиши в тред тогда, здесь простыми словами обяъснят.

Функции strtr ты передаешь строку и массив с заменами (ключ хранит что заменить, а значение — на что). Она возвращает измененную строку, которую надо куда-то сохранить:

$s = strtr($string, $replace);
#102 #409069
>>409006

mb_encoding -> mb_internal_encoding

>>409021

Вообще, можно себе поставить Апач + БД под Windows если скрипт работает под этой ОС.

А почему не смог дебиан настроить? У меня все работает.

>>409045

> так как мануал опа, не в обиду будет сказано, этому почти не учит.


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

>>409055

> Ботнет (англ. botnet, МФА: [ˈbɒtnɛt]; произошло от слов robot и network) — это компьютерная сеть, состоящая из некоторого количества хостов, с запущенными ботами — автономным программным обеспечением. Чаще всего бот в составе ботнета является программой, скрытно устанавливаемой на устройство жертвы и позволяющей злоумышленнику выполнять некие действия с использованием ресурсов заражённого компьютера. Обычно используются для нелегальной или неодобряемой деятельности — рассылки спама, перебора паролей на удалённой системе, атак на отказ в обслуживании.



В этом треде не обсуждаются способы разработки вредоносных программ.
#103 #409074
>>409000
Пока никто не реагирует я начал заготовку калькулятора с действиями, завтра точно добавлю степень, и может быть смогу впилить скобки в это дело.

А пока у меня почему-то затуп с последним действием когда остается 2-3 элемента сложить \ вычесть.

http://ideone.com/ZH1SNk

Всем спокойной ночи.
#104 #409075
Бля, почитал я тут ваших охуительных историй трудоустройства за еду и охуел. Я месяц изучаю php и две недели симфони. Устроился макакой за 35 кусков. Я тут, видимо, самый успешный?
#105 #409076
>>409000

> if (!preg_match($tester, mb_substr($input, $i, 1))) {


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

Ну и твой калькулятор, по моему, не проверяет ошибки вроде случаев когда идет несколько знаков подряд: http://ideone.com/REK7a8

Хорошо бы обнаруживать такое.

То же самое, когда идет 2 числа подряд, разделенных пробелом вроде 2 2 + 2

А так, в остальном, хорошо.
#106 #409077
>>409075
Какой твой уровень знания ПХП? Какие задачи решал? Что спрашивали на собеседовании?
#107 #409078
>>409077
Уровень - средний, тестовое задание дали простенькое - написать сервис с аутентификацией через fb и постингом сообщений в общую ленту. На собеседовании в основном по тестовому заданию вопросы задавали, ну спросили еще про dependency injection.
#108 #409080
>>409067

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


Наверно. Для каждой сущности должна быть своя таблица.

> И как в этом случае передать по ссылке через GET id конкретного пользователя?


Не понял вопрос. Чем не годится вариант вроде index.php?id=123456 ?

>>409074

Почитай про правильные способы решения. Есть 2 варианта:

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

https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C

http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D0%B8

http://habrahabr.ru/post/100869/

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

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

https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7

http://habrahabr.ru/post/122397/

http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/24/24.htm
#108 #409080
>>409067

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


Наверно. Для каждой сущности должна быть своя таблица.

> И как в этом случае передать по ссылке через GET id конкретного пользователя?


Не понял вопрос. Чем не годится вариант вроде index.php?id=123456 ?

>>409074

Почитай про правильные способы решения. Есть 2 варианта:

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

https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C

http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D0%B8

http://habrahabr.ru/post/100869/

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

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

https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7

http://habrahabr.ru/post/122397/

http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/24/24.htm
#109 #409081
>>409080

>Не понял вопрос. Чем не годится вариант вроде index.php?id=123456


Да, спасибо, я уже вспомнил, пересмотрел код по блогу который пробовал писать, постоянно забываю сам механизм как это делать с выводом из базы данных потом.
#110 #409082
https://github.com/sqghub/uppu.ru
попробовал добавить поиск по sphinx (как работает который, видимо, еще читать и читать). +попробовал там же исключения.
#111 #409087
Посоны, кто что скажет за livestreet cms?
Я по коду посмотрел, вроде получше того же битрикса, но не симфони конечно
Хочу просто сайт себе заделать именно для дела, а не для пердоликов, поэтому решил может лучше cms взять, а не пердолить все с нуля на симфони
Сайт контентный в основном
#112 #409088
>>409082
Так, а чтобы работали rt индексы я должен помимо вставки информации о файле в базу данных вставлять их еще и в этот самый индекс?
#113 #409089
>>409082

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

https://github.com/sqghub/uppu.ru/tree/master/model/api

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

https://packagist.org/search/?q=sphinx%20api

есть вариант с установкой через composer (раз ты его используешь то это удобно).

Ну или второй вариант, сделать папку 3rdParty и положить туда.

Еще мне кажется, неправильно наследоваться от SphinxApi. Ты ведь делаешь не расширенную версию АПИ, а просто его используешь. Твой класс находится уровнем выше чем АПИ. Раз так, то надо применить делегирование, то есть передачу объекта API через конструктор (либо создание в конструкторе).

> if (file_exists("config.local.php")) {


> include ("config.local.php");


Это должно быть в index.php. Пройдись по всему коду и вынеси это из моделей.

> date_default_timezone_set('Europe/Moscow');


Это не должно быть в шаблоне. По идее, ты должен это в php.ini настроить.

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

> https://github.com/sqghub/uppu.ru/blob/master/model/FileMapper.php#L35


Тут слишком много ловишь. Сделай свой класс исключений (или используй return что наверно проще). Ну и пользователю незачем видеть технические подробности ошибки.

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

То есть это явно неправильный код.

Если что-то непонятно по сфинксу, можешь задвать вопросы.
#113 #409089
>>409082

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

https://github.com/sqghub/uppu.ru/tree/master/model/api

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

https://packagist.org/search/?q=sphinx%20api

есть вариант с установкой через composer (раз ты его используешь то это удобно).

Ну или второй вариант, сделать папку 3rdParty и положить туда.

Еще мне кажется, неправильно наследоваться от SphinxApi. Ты ведь делаешь не расширенную версию АПИ, а просто его используешь. Твой класс находится уровнем выше чем АПИ. Раз так, то надо применить делегирование, то есть передачу объекта API через конструктор (либо создание в конструкторе).

> if (file_exists("config.local.php")) {


> include ("config.local.php");


Это должно быть в index.php. Пройдись по всему коду и вынеси это из моделей.

> date_default_timezone_set('Europe/Moscow');


Это не должно быть в шаблоне. По идее, ты должен это в php.ini настроить.

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

> https://github.com/sqghub/uppu.ru/blob/master/model/FileMapper.php#L35


Тут слишком много ловишь. Сделай свой класс исключений (или используй return что наверно проще). Ну и пользователю незачем видеть технические подробности ошибки.

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

То есть это явно неправильный код.

Если что-то непонятно по сфинксу, можешь задвать вопросы.
#114 #409090
>>409087
Или вот нашел symfony cmf, годнота?
http://cmf.symfony.com/
#115 #409094
>>409089

>Тут слишком много ловишь.


Я там пытаюсь ловить ошибки и транзакции, и сохранения файла. Если правильно помню.

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


Рт индексы. Совсем непонятно.

>есть вариант с установкой через composer (раз ты его используешь то это удобно).


Я не думал, что на композере еще и api выкладывают. Так то да, конечно им поставлю.
#116 #409095
>>409088

Сфинкс не умеет с помощью магии автоматически видеть изменения в базе. Ему надо их передать.

У сфинкса есть 2 типа индексов: обычные и реалтаймовые.

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

Но зато они хорошо хранят огромные массивы информации.

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

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

Поиск ведется по обоим индексам сразу.
#117 #409096
>>409090

> Before you read further, you should at least have a basic knowledge of the Symfony Framework


Выучи симфони и не парься. Симфони это реально крутая вещь.
#118 #409097
>>409088

да. Причем по моему, обновлять данные в rt индексах можно только через SQL. А он в сфинксе с причудами.
#119 #409098
>>409094

rt индекс это что-то вроде обычной SQL таблицы, в котрую можно вставлять/обновлять/удалять данные SQL-запросами INSERT/UPDATE/DELETE

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

Вроде бы в моем уроке есть пример запроса для вставки в rt-индекс: https://gist.github.com/codedokode/10539366

Список колонок этой таблицы задается в конфиге. Вот пример:

index some_rt_index
{
type = rt # тип индекса = realtime
path = /usr/local/sphinx/data/rt # файл для хранения данных
rt_field = title # дополнительное строчное поле
rt_field = content # дополнительное строчное поле
rt_attr_uint = gid # дополнительное числовое поле
}

В данном индексе получается 4 колонки: id (он есть всегда), title, content, gid. При этом поиск идет очевидно только по текстовым полям.

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

INSERT INTO some_rt_index (id, title, content, gid) VALUES (....)
UPDATE some_rt_index SET ... WHERE ...
DELETE FROM some_rt_index WHERE ...

Поиск в rt индексе работает точно так же как и в обычном.

Мануал, увы, на английском: http://sphinxsearch.com/docs/current.html#rt-indexes
#119 #409098
>>409094

rt индекс это что-то вроде обычной SQL таблицы, в котрую можно вставлять/обновлять/удалять данные SQL-запросами INSERT/UPDATE/DELETE

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

Вроде бы в моем уроке есть пример запроса для вставки в rt-индекс: https://gist.github.com/codedokode/10539366

Список колонок этой таблицы задается в конфиге. Вот пример:

index some_rt_index
{
type = rt # тип индекса = realtime
path = /usr/local/sphinx/data/rt # файл для хранения данных
rt_field = title # дополнительное строчное поле
rt_field = content # дополнительное строчное поле
rt_attr_uint = gid # дополнительное числовое поле
}

В данном индексе получается 4 колонки: id (он есть всегда), title, content, gid. При этом поиск идет очевидно только по текстовым полям.

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

INSERT INTO some_rt_index (id, title, content, gid) VALUES (....)
UPDATE some_rt_index SET ... WHERE ...
DELETE FROM some_rt_index WHERE ...

Поиск в rt индексе работает точно так же как и в обычном.

Мануал, увы, на английском: http://sphinxsearch.com/docs/current.html#rt-indexes
#120 #409099
>>409094

Ну и естественно, лучше всего сделать для rt индекса такой же набор полей как и для основного. Тогда можно делать поиск сразу по 2 индексам и не мучаться с разобром результатов.
#121 #409102
>>409098

>Вроде бы в моем уроке есть пример запроса для вставки в rt-индекс


А апи такой возможности не предоставляет?
#122 #409103
>>409096

>Выучи симфони и не парься.


Зачем? Я и так его знаю
#123 #409104
>>409094

Можно сделать 2 блока catch для 2 разных классов. А зачем ловить оибки выполнения транзакции? Это же значит что код неправильный и пользователь ничего сделать не может.

>>409102

Обычный АПИ только для поиска. SphinxQL позволяет и искать, и обновлять данные, но может быть глючным при работе с PDO.
#124 #409109
>>409089

>Ну и думаю, надо настроить еще обновление индексов при загрузке нового файла.


Сделал. https://github.com/sqghub/uppu.ru
#125 #409112
>>409069
Наверное из за битых образов. Где-то на установке mysql у меня циклиться какая-то хрень.

Попробую еще. На win я попробовал на скорую руку wamp поставить. Не работает.
#126 #409113
>>409109

https://github.com/sqghub/uppu.ru/blob/master/model/Searcher.php#L37

> date('Y-m-d H:i:s')


Это нехорошо. В одну таблицу дата вставляется на сервере MySQL, в другую генерируется на стороне PHP. Мы получим расхождения. Я думаю, надо дату генерировать, записывать в File и брать оттуда. Внутри File конечно дату удобнее хранить числом иил объектом DateTime, а не строкой.
#127 #409114
>>409113

>В одну таблицу дата вставляется на сервере MySQL, в другую генерируется на стороне PHP.


Да, я заметил. Просто брать дату с последней вставленной записи так же как id не вышло и я сразу сделал это. Так-то да, я переделаю на генерирование даты на стороне php и filemapper тоже.
56 Кб, 1101x844
#128 #409124
https://stepic.org/course/Введение-в-Linux-73/syllabus

Охуительный курс. Мозги хорошо размял. Лампово поебался с консолечкой. Реальная история, не тролль.
#129 #409128
>>409124
Пацаны, вангую выкаживание бабла и вообще, что это спам итт.
#130 #409150
Даун с задачей на палиндром докладывает:

Пытаюсь её делать, как удалить пробелы вроде разобрался и теперь мой спасательный круг для пробела выглядит так
$text = str_replace(" ","", $text); - это верно?
+
Я пытаюсь сделать, чтобы "сравнивать по букве с двух-концов" я не додумался до этого, поэтом придумал сравнить сразу все буквы с конца и с начала. Но как обычно потерпел сокрушительное поражение в виде нихуя не происходящего. С какой-то непонятной ошибкой.
http://ideone.com/pbG7Ja
Ошибка появилась, когда дописал else, хотя до это всё равно нихуя ничего не работало.
#131 #409151
>>409069

> В этом треде не обсуждаются способы разработки вредоносных программ.


Ну представь, что это не ботнет. Я тут упомянул ботнет, чтобы было понятно зачем мне это нужно. Я же не спрашиваю тут как шеллы заливать.
Если абстрагироваться, то мне нужно что-то вроде менеджера задач на php, что-то вроде очереди задач. Подскажешь что-нибудь?
#132 #409154
>>409090
Бамп вопросу
Или посоветуйте позя CMS с +- нормальным кодом
#133 #409157
>>409128

>выкаживание бабла


Бисплатна. Вот пост на хабре: http://habrahabr.ru/company/spbau/blog/243473/

>спам итт


Я на радостях написал. Видел, сколько я сделал :-)
#134 #409158
>>409087
Чем тебя вордпресс не устраивает?
#135 #409159
>>409087

>Сайт контентный в основном


Я бы порекомендовал использовать: https://wordpress.org/plugins/staticpress/
#136 #409162
>>409158
тем что у него код пиздецовый и расширения/допиливания потребуют разбирательства как он работает, а мне это не надо
идеально было бы найти cms на основе mvc фреймворка
#137 #409166
>>409162

>mvc фреймворка


Ты это я, только пару лет назад. ОП помнит, как ему грил, что буду осиливать modx. Я осилил и разорвался.
#138 #409168
>>409075 >>409078

В ДС устроился за такую зп? В регионе джун просто не может столько получать. Ну и наверное ты не в таком темпе изучал как я например, что в сумме пол года прохожу учебник, а ебашил по хардкору?
#139 #409171
>>409078
Твой пример какой-то демотивирующий, лол.
С три месяца изучаю(не только пхп, конечно, всю петушиную веб-обойму), но что такое депенденси инжекшон узнал только сейчас, загуглив(((
Ты раньше кодил на других языках?
#140 #409172
>>409068
Ты прав. Но теперь я и разбираюсь что он делает. Из принципа.
Сейчас погуглю команду отправки письма.
#141 #409177
Хм, начал осиливать первую задачу по сайтам.
Есть чистая форма на html
и скрипт http://ideone.com/b4ahyi, который должен брать данные и херачить их в таблицу. Проблема одна, форма бросает к скрипту, а он же ничего не делает.
#142 #409178
>>409177
Форма отвалилась:
http://ideone.com/m14hKM
#143 #409182
Посоны, где ошибка? Выдаёт: Ошибка выполнения\ttime: 0.01 memory: 20592 signal:-1
<?php

error_reporting(-1);

$sum = 10000;
$percent = 10;
$year = 0

for ($sum; $sum <= 1000000; $sum = $sum (1 + $percent 0.01)) {
\t
\t$year++;
echo "Лет прошло:$year\n
Накоплено:$sum\n";

}

?>
#144 #409184
>>409182
Так точнее:
<?php

error_reporting(-1);

$sum = 10000;
$percent = 10;
$year = 0

for ($sum; $sum <= 1000000; $sum = $sum (1 + $percent 0.01)) {

$year++;
echo "Лет прошло:$year\n
Накоплено:$sum\n";

}

?>
#145 #409189
Теперь разобрался и починил.
>>409172
#146 #409193
>>409184
; после $year, выкладывать на ideone нужно.

for ($sum = 10000; ... лучше писать)

Что значит $sum = $sum (1 + $percent 0.01))?
#147 #409195
>>409184
[code]

<?php

error_reporting(-1);

$sum = 10000;
$percent = 10;
$year = 0;

for ($sum; $sum <= 1000000; $sum = $sum (1 + $percent 0.01)) {

$year++;
echo "Лет прошло:$year\n
Накоплено:$sum\n";

}

?>

[/code]
#148 #409197
>>409150

>PHP Parse error: syntax error, unexpected 'else'


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

Есть правильный способ описать условие

if (условия) {
действия если условие верно...
} else {
действия если неверно...
}

Если у тебя else раньше времени говорят залез, то чего может нехватать там?
#149 #409198
>>409195
Глупый парсер всё съел. Вот ссылка на ideone:
http://ideone.com/5tC3Tm

Ты проебался с ";" после "$year = 0"
И вот в этом выражении "$sum = $sum (1 + $percent 0.01))" нельзя опускать знаки умножения, пхп без них не понимает. Тут парсер звездочки режет, на ideone я исправил
#150 #409199
>>409195
$sum = $sum (1 + $percent 0.01)
#151 #409200
>>409199
Макаба съедает эти знаки#АБУВЕРНИВАКАБУ
#152 #409201
>>409198

>Ты проебался с ";" после "$year = 0"


Да. Исправил, заработало.

>И вот в этом выражении "$sum = $sum (1 + $percent 0.01))"


Порезало просто. Там всё верно.

>>409193

>for ($sum = 10000; ... лучше писать)


Ок, спасибо

>Что значит $sum = $sum (1 + $percent 0.01))?


Порезало немного
#153 #409203
>>409177
>>409178
P.S. Так может мне кто-нибудь объяснить что я делаю не так?
#154 #409205
>>409203

> $STH = $DHB->prepare("INSERT into students (firstName, lastName, sex, section, email, year, exams, isLocal) values (?, ?, ?, ?, ?, ?, ?, ?)");


> values (?, ?, ?, ?, ?, ?, ?, ?)


Сюда надо данные подставлять. Почитай про INSERT:
https://ru.wikipedia.org/wiki/Insert_%28SQL%29
#155 #409212
>>409157
Ну лана. Тогда смарите, а то вы же в перспективе vps-админы.
#156 #409213
>>409205
Я пытаюсь с безимянным placeholder-ами работать. Если подставлять $name и т.п., то это прямой путь к sql-inj
#157 #409215
>>409213
Не понял тебя. Как ты собираешься передавать данные, не передавая данные?
#158 #409216
>>409213
Просто валидируй данные, епта
#159 #409217
>>409216

Зачем изобретать велосипед?

>>409215
http://habrahabr.ru/post/137664/
#160 #409219
>>409217
Ты понимаешь что ничего не вставляешь в таблицу?
#161 #409220
>>409217
Пока единственная ошибка, которую я вижу, может быть связана с массивом $students
В него точно попадают данные?
#162 #409225
>>409220
Заполняются же. Проверил.
>>409219
Покажи мне работающий код с безимянным placeholder-ами, пожалуйста
#163 #409229
>>409225
А соединение с базой точно есть, лол?
#164 #409234
>>409229
Как проверить?
sage #165 #409235
>>409234
Распечатай $DHB
#166 #409239
>>409235
print_r($DHB)
Дало:
PDO Object ( ). Я так понимаю оно нихрена не установилось?
sage #167 #409242
>>409239
Установилось, с базой всё хорошо.
Попробуй такой код выполнить, занесется что-то в базу, или нет:
http://ideone.com/B40RGE
#168 #409243
>>409242
Хм, нет, ничего не сработало
#169 #409271
>>409243
http://ideone.com/KACX8l
Тоже не работает
#170 #409274
>>409271
Кинь дамп базы своей.
sage #171 #409277
рнр ищо не здох?
#173 #409280
>>409277
А что появилась адекватная замена ему?
sage #174 #409282
>>409277

> Самый популярный веб-язык в мире


> "Ещё не сдох?"

sage #175 #409283
>>409280
хоскелл + уесод

>>409282

> 2014


> "программирование" на динамико-дрисне-с-глистами

#176 #409284
>>409283
Уходи, зеленый. Математику выучи.
sage #177 #409285
>>409283

> хоскелл


Функциональная параша не нужна.
110 Кб, 480x720
sage #178 #409288
>>409284
мы сегодня проходили в школе умножение и я смог решить задачку про айпад
https://ideone.com/ElZv2N
#179 #409303
>>409109

Я еще думаю, пришла пора привести в порядок работу с медиаданными: https://github.com/sqghub/uppu.ru/blob/master/model/MediaDataMapper.php и их вывод на страничке download.

Мне кажется, один из вариантов — это сделать объект, который хранит информацию о файле и засунуть внутрь File, чтобы можно было например сделать

$file->getMediaData()->isImage()

Соответственно, этот объект можно создать как на основе сохраненных ранее данных, так и путем анализа файла.

Ну и конечно, можно это как-то по-другому реализовать, если у тебя есть идеи.
#180 #409306
>>409124

А что насчет установки, если ты например под Windows или Mac? Какие варианты там предлагаются?

Так, Линукс конечно стоит изучить.

>>409150

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


Верно

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

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

>>409151

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

Более, того, ты или твой заказчик занимается нищебродством, если вместо того, чтобы купить или арендовать нужное оборудование пытается выполнять свои задачи на зараженных компьютерах. Из этого все равно ничего не получится.
#181 #409313
>>409162

Код там не идеальный, но он простой. Разбираться придется в любом случае. Хотя конечно с фреймворками работать приятнее, это да.

>>409168

У него вполне возможно был уже опыт программирования на других языках.

>>409177

> catch (PDOExpenition $e) {


>


>}


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

Удали try/catch, и больше так не пиши, и прочитай мой урок про исключения (он может быть не очень понятно написан, если что вопросы задавай): https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

Далее, режим вывода ошибок может быть отключен в самом PDO. Добавь строчку

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

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

Чтобы проверить, что это работает, попробуй выполнить заведомо неправильный запрос вроде SELELELELECT 1; и посмотреть, выведется что-нибудь или нет.

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

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

- ошибки сохраняются в лог ошибок. Можно открыть его и почитать. Если ты запускаешь код на локалхосте, у себя, то лог хранится в папке Апача (обычно она называется logs) и имеет название вроде error.log (в линуксе в папку /var/log/apache2 ). Если на хостинге — там либо есть файл error.log либо раздел в панели управления, где лог можно посмотреть

- также, ты можешь включить отображение ошибок. Открой файл php.ini, поставь там display_errors = On и error_reporting = E_ALL и перезапусти сервер. Теперь ошибки должны выводиться на экран.

Проверить, работает ли вывод ошибок, можно запустив скрипт содержающий обращение к несуществующей переменной вроде echo $sdgasdad; и проверив, выведется ошибка или нет. Если все верно, то должна вывестись.
#181 #409313
>>409162

Код там не идеальный, но он простой. Разбираться придется в любом случае. Хотя конечно с фреймворками работать приятнее, это да.

>>409168

У него вполне возможно был уже опыт программирования на других языках.

>>409177

> catch (PDOExpenition $e) {


>


>}


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

Удали try/catch, и больше так не пиши, и прочитай мой урок про исключения (он может быть не очень понятно написан, если что вопросы задавай): https://gist.github.com/codedokode/65d43ca5ac95c762bc1a

Далее, режим вывода ошибок может быть отключен в самом PDO. Добавь строчку

$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

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

Чтобы проверить, что это работает, попробуй выполнить заведомо неправильный запрос вроде SELELELELECT 1; и посмотреть, выведется что-нибудь или нет.

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

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

- ошибки сохраняются в лог ошибок. Можно открыть его и почитать. Если ты запускаешь код на локалхосте, у себя, то лог хранится в папке Апача (обычно она называется logs) и имеет название вроде error.log (в линуксе в папку /var/log/apache2 ). Если на хостинге — там либо есть файл error.log либо раздел в панели управления, где лог можно посмотреть

- также, ты можешь включить отображение ошибок. Открой файл php.ini, поставь там display_errors = On и error_reporting = E_ALL и перезапусти сервер. Теперь ошибки должны выводиться на экран.

Проверить, работает ли вывод ошибок, можно запустив скрипт содержающий обращение к несуществующей переменной вроде echo $sdgasdad; и проверив, выведется ошибка или нет. Если все верно, то должна вывестись.
#182 #409316
>>409177

При исплоьзовании ERRMODE_EXCEPTION проверять, удался ли запрос, через if:

\tif ($STH->execute()) {...

не требуется. Надо просто писать

$STH->execute( );

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

Чтобы проверить что соединение с БД работает, можно сделать запрос типа

SELECT 2 + 2

или

SELECT CURTIME()

и посмотреть, вернет ли он данные.
sage #183 #409324
>>409306

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


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



Я не делаю ничего злостного, не спамлю, не распространяю вирусы. Единственное, что я делаю плохого - использую компьютеры пользователей без их ведома, но это я делаю от безысходности.
Мне просто нужны вычислительные мощности и разные ip для сбора данных, и у меня нет никакого заказчика. Купить/арендовать столько оборудования просто невозможно, и нецелесообразно для моих целей. Я ведь всего лишь аматер-статистик.
#184 #409325
>>409324
Сега прилипла
#185 #409336
>>409313
Нет, я просто еще не добавлял ничего в catch. Я хочу потом дописать и выводить юзеру информацию по поводу ошибки.

А по поводу почему совсем не работает запись в БД не знаешь?
#186 #409337
>>409316
По поводу этого. Это не совсем ошибка. Мне надо чекать email на уникалость и если $STH->execute() вовзращает True, то выдаем ошибку об неуникальности email-а. Тогда ведь нужны if ($STH->execute())
#187 #409339
http://ideone.com/jiFjVX

Такая команда должена вернуть 4, да?
#188 #409340
Задачки на php:
1) Переменные: http://ideone.com/l77Sqf
2) Бросок кубиков: http://ideone.com/Ztrzss
3) Айфон в кредит: http://ideone.com/DZiCBU
4) В каком возрасте будет миллион: http://ideone.com/qM2EnS
5) Задача про средний бал: http://ideone.com/sTFBQX
6) Задача на рост: http://ideone.com/Ag5TLJ
7) Задача про ответ на любой вопрос: не понял, где там задание?
8) Задача про имена кошек: опять не понял, ты же уже написал готовое решение?
9)Задания на шифровку/расшифровку: http://ideone.com/yXAEUn
10)Задание на набор слов: http://ideone.com/rOlpRL
#189 #409341
>>409324

Ты можешь сделать проект с добровольным участием. Если это можно сделать на веб-технологиях, чтобы достаточно было зайти браузером на страницу чтобы поучаствовать, и была бы полезная цель я думаю, желающие найдутся. Если нет то значит это не нужно.
#190 #409342
>>409341
Это нужно мне, и только мне. Ты бы перешел по какой-то ссылке, если бы тебе это было не нужно?
#191 #409343
>>409342
Если бы это кому-то помогло, почему нет. Мне несложно, а кому то приятно.
мимокрок
#192 #409345
>>409166

Вообще, особого смысла изучать CMS не на фреймворках, мне кажется, нет. Перспективнее изучать большие фреймворки типа Симфони 2. Так как если ты например захочешь потом перейти на Питон/Руби/Ява, там тоже фреймворки и ты увидишь много знакомых вещей. Ну и люди все же потихоньку перекатываются на использование ООП/паттернов и уходят от адского процедурного кода и странных велосипедов, на которых пишутся CMS.

>>409336

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

>>409184

Код лучше постить на ideone, а сюда только ссылку.

>>409198

У тебя при достижении миллиона цикл завершается и последнее сообщение не выводится. Нехорошо.

>>409205

Нет, лучше ты почитай про плейсхолдеры и PDO: http://habrahabr.ru/post/137664/

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

Про плейсхолдеры так же написано на phptherightway: http://getjump.github.io/ru-php-the-right-way/#Базы_данных

(всем рекомедую этот сайт)
#193 #409348
>>409215

Посмотри код, данные передаются через массив.

>>409216

Нет, ты пишешь ерунду. Так делали только на PHP лет 10 назад, и все нормальные фреймворки вроде Сифмони ии Зенд содержат поддержку плейсхолдеров.

>>409219

Все он вставляет.

>>409239

Если объект создался то установилось. Иначе бы вылетело исключение при попытке сделать new PDO.

>>409288

Молодец, теперь еще выучи английский и исправь слова типа

> vicheslit

#194 #409352
>>409337

Нет, не так. execute возвращает false (или выкинет исключение, что удобнее) если ты например написал неправильный запрос и база отказывается его выполнять. Если запрос правильный, он вернет true независимо есть email в базе или нет.

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

Также, execute предназначен для выполнения запросов, результаты которых тебе не нужны. Если тебе нужен результат, надо использовать query + fetch/fetchColumn/fetchAll.

Разберись с этими функциями.

Для проверки на уникальность используется запрос

SELECT COUNT() FROM t WHEre email = ?

или

SELECT id FROM t WHERE email = ? LIMIT 1

И проверяется что он вернет.

Изучи все эти упомянутые функции как следует. Также, советую сделать то, что я написал выше, убрать try\catch (ты прочел урок про исключения? зря).
#195 #409353
>>409352
Спасибо. Понятно теперь с этим, но вот в БД все равно не добавляется запись. Что делать?
#196 #409354
>>409303

>Я еще думаю, пришла пора привести в порядок работу с медиаданными:


Я подумывал создать пачку классов, один базовый и по одному на видео/аудио/изображения. Но тогда вся куча обращений к элементам массива в шаблоне заменится на вызов методов получения свойства.
Либо запилить интерфейс для медиадаты, в котором будет метод getData(), который будет генератором, раскручивающимся foreach, а возвращающим массив 'свойство' => 'значение' и просто выводить их в шаблоне. Тогда все эти isSomething() будут ненужны, а в шаблоне будет одно if (file->isMedia()) {вывод всей дряни в foreach}.
Но мне оба варианта кажутся какими-то... громоздкими и неверными. Хотя сейчас склоняюсь ко второму.
#197 #409355
>>409078

>dependency injection


Проходил. Что такое fb - не знаю. У меня есть шансы?
#198 #409356
>>409339

Не совсем.

Чтобы получить данные надо использовать execute + одну из функций fetch.

$statement = $pdo->prepare(....); // создаем объект PDOStatement, то есть объект-запрос
$statement->execute(...); // выполняем запрос
$result = $query->fetchAll( ); // получаем данные из базы массивом массивов
var_dump($result);

Альтернатива, по выполненному запросу можно делать foreach:

$statement = $pdo->prepare(....); // создаем объект PDOStatement, то есть объект-запрос
$statement->execute(...); // выполняем запрос
foreach ($statement as $row) {
var_dump($row);
}

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

Мануалы:

http://php.net/manual/ru/class.pdo.php
http://php.net/manual/ru/class.pdostatement.php
#198 #409356
>>409339

Не совсем.

Чтобы получить данные надо использовать execute + одну из функций fetch.

$statement = $pdo->prepare(....); // создаем объект PDOStatement, то есть объект-запрос
$statement->execute(...); // выполняем запрос
$result = $query->fetchAll( ); // получаем данные из базы массивом массивов
var_dump($result);

Альтернатива, по выполненному запросу можно делать foreach:

$statement = $pdo->prepare(....); // создаем объект PDOStatement, то есть объект-запрос
$statement->execute(...); // выполняем запрос
foreach ($statement as $row) {
var_dump($row);
}

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

Мануалы:

http://php.net/manual/ru/class.pdo.php
http://php.net/manual/ru/class.pdostatement.php
#199 #409357
>>409171
Да, я совсем недавно решил перейти в макаки с крестов. По сравнению с крестами php - это прям как глоток свежего воздуха.
>>409355
fb - Facebook
#200 #409358
>>409357

>fb - Facebook


Да, я уже понял. Мне гугл рассказал по запросу php fb.
Так там все просто, вроде. Сколько времени на такое тестовое задание дали?
#201 #409360
>>409354

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

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


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

Также, в этом классе можно хранить человеческие названия для полей, вроде width => Ширина.

> в котором будет метод getData(), который будет генератором,


Это излишне, мне кажется тут хватит массива который так же раскручивается. Генераторы используются чтобы не тратить память когда данных очень много, и массив получится огромный (а также чтобы не ждать когда он соберется). Ради 10-1000 значений задействовать генератор излишне.

>>409355

fb = facebook. Описание аутентификации: https://developers.facebook.com/docs/reference/dialogs/oauth/ + можно поискать готовую библиоеку для этого.

Насчет шансов, зависит от компании.
#202 #409361
>>409168
ДС2. Да, я ебашил 12/24, зато за недельку сделал 2 тестовых задания для двух компаний, в итоге обе же пригласили на собеседование. Сходил на первое, второй отписался с отказом.
#203 #409363
>>409357

Ну так это и надо было написать, а то путаешь анонов тут.
#204 #409364
>>409358
Неделю дали
#205 #409365
>>409353

Переделай проверку на уникальност email праивльно.
#206 #409367
>>409354

> который будет генератором, раскручивающимся foreach, а возвращающим массив 'свойство' => 'значение'


Генератор может вернуть пару ключ - значение сразу, массив не нужен.
#207 #409368
>>409353

Если не заработает, покажи код и натыкай туда echo чтобы было видно какие строки выполняются, а какие нет.
#208 #409370
>>409367

>Генератор может вернуть пару ключ - значение сразу, массив не нужен.


Всмысле?
Я предполагал yeld array('key' => 'value'), как иначе? не в этом случае, так как тут, видимо, генератор не нужен, а вообще?
#209 #409371
>>409340

Ну давай посмотрим.

> 1) Переменные:


Праивльно

> 2) Бросок кубиков


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

скобки вкоруг else/elseif пишутся на той же строке:

} elseif () {
....
} else {

Так, решено верно.

> 3) Айфон в кредит:



> выплачено всего 56124.145161972 руб.


Должно быть около 61270.

Попробуй подставить меньшую сумму долга и проверить ответ. Для долг = 1000 должно получаться всего выплачено 2030, для долг = 4000 всего выплачено 6123.

> 4) В каком возрасте будет миллион:


Ок, только число 1.1 надо было вынести в переменную и поставить в начало программы, чтобы его было легко поменять. Так, решено верно.
#209 #409371
>>409340

Ну давай посмотрим.

> 1) Переменные:


Праивльно

> 2) Бросок кубиков


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

скобки вкоруг else/elseif пишутся на той же строке:

} elseif () {
....
} else {

Так, решено верно.

> 3) Айфон в кредит:



> выплачено всего 56124.145161972 руб.


Должно быть около 61270.

Попробуй подставить меньшую сумму долга и проверить ответ. Для долг = 1000 должно получаться всего выплачено 2030, для долг = 4000 всего выплачено 6123.

> 4) В каком возрасте будет миллион:


Ок, только число 1.1 надо было вынести в переменную и поставить в начало программы, чтобы его было легко поменять. Так, решено верно.
#210 #409372
>>409005
Посмотри https://www.youtube.com/watch?v=hYvLsC_d1no&index=1&list=PL58DF3D2816E9CF16 мне помогло понять основы.
#211 #409374
>>409340

> 5) Задача про средний бал:


Верно

> 6) Задача на рост:


Правильно.

> 7) Задача про ответ на любой вопрос: не понял, где там задание?


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

> 8) Задача про имена кошек: опять не понял, ты же уже написал готовое решение?


Можно что-то поменять, если хочется.

> 9)Задания на шифровку/расшифровку:



> 'ж'\t=>\t'8',


> 'з'\t=>\t'9',


> 'и'\t=>\t'0',


> 'й'\t=>\t'#',


> 'ж'\t=>\t'48786',


> 'з'\t=>\t'#565656',


> 'и'\t=>\t'#апапа',


Тут у тебя ключи повторяются. В массиве не может быть 2 элемента с одинаковым ключом.

> 10)Задание на набор слов



> $rand2 = rand(0,6)


Это не очень удобно, так как если мы добавим/убавим слова в массиве, надо менять цифры. Сделай, чтобы цифры считались сами.
#211 #409374
>>409340

> 5) Задача про средний бал:


Верно

> 6) Задача на рост:


Правильно.

> 7) Задача про ответ на любой вопрос: не понял, где там задание?


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

> 8) Задача про имена кошек: опять не понял, ты же уже написал готовое решение?


Можно что-то поменять, если хочется.

> 9)Задания на шифровку/расшифровку:



> 'ж'\t=>\t'8',


> 'з'\t=>\t'9',


> 'и'\t=>\t'0',


> 'й'\t=>\t'#',


> 'ж'\t=>\t'48786',


> 'з'\t=>\t'#565656',


> 'и'\t=>\t'#апапа',


Тут у тебя ключи повторяются. В массиве не может быть 2 элемента с одинаковым ключом.

> 10)Задание на набор слов



> $rand2 = rand(0,6)


Это не очень удобно, так как если мы добавим/убавим слова в массиве, надо менять цифры. Сделай, чтобы цифры считались сами.
#212 #409376
>>409370

http://php.net/manual/ru/language.generators.syntax.php#control-structures.yield.associative

Если надо вернуть больше 2 значений, удобнее наверно использовать простой массив:

yield array(1, 2, 3, 4);

который легко раскладывается list:

foreach (list($x, $y, $z, $t) = generate( )) {
...
}
#213 #409377
>>409370

Ой, неверно написал пример

foreach (generate( ) as list($x, $y, $z, $t)) {
...
}

list внутри foreach использовать возможно начиная с php 5.5 вроде бы.

Мануал http://php.net/manual/ru/control-structures.foreach.php#control-structures.foreach.list
44 Кб, 604x483
#214 #409387
>>409371

>скобки вкоруг else/elseif пишутся на той же строке:


Изменил: http://ideone.com/Ztrzss

>exit там не нужен, выполниться может только один блок.


Почему тогда у тебя вот тут указан exit():

>http://archive-ipq-co.narod.ru/l1/conditions.html


?

>Попробуй подставить меньшую сумму долга и проверить ответ. Для долг = 1000 должно получаться всего выплачено 2030, для долг = 4000 всего выплачено 6123.


Поправлю, ок.

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


Вынес: http://ideone.com/qM2EnS

>>409374

>Тут у тебя ключи повторяются. В массиве не может быть 2 элемента с одинаковым ключом.


Поправил: http://ideone.com/yXAEUn

>Это не очень удобно, так как если мы добавим/убавим слова в массиве, надо менять цифры. Сделай, чтобы цифры считались сами.


Готово: http://ideone.com/rOlpRL

Спасибо, ОП.
sage #215 #409405
>>409387
сосательный круг axaax
#216 #409414
>>409387

> Почему тогда у тебя вот тут указан exit():


У меня там идет один блок if и дальше многоточие, то есть может быть еще какой-то код.

А у тебя один блок if|else|elseif за которым ничего нет, и в этом блоке может выполниться только один из вариантов.

> Изменил


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

> Вынес: http://ideone.com/qM2EnS


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

> Поправил: http://ideone.com/yXAEUn


> $unCipher = strtr($text, $unCode);


Ты расшифровываешь не закодированный текст, а исходный. Исправь и снова покажи код.

> Готово: http://ideone.com/rOlpRL


там ошибки идут: PHP Notice: Undefined offset: 7 in /home/8MGMmJ/prog.php on line 24 посмотри внизу страницы. Ты обращаешься к несуществующим элементам массива.
#217 #409428
http://ideone.com/uyqMvA

Вопрос и код на ideone. Меня макака не пускает.
#218 #409431
>>409109

У тебя там классическая XSS по моему: https://github.com/sqghub/uppu.ru/blob/febd2f075f910d0e5b1a0f8d8a71f064a8023627/templates/search.php#L6

Ну-ка прочитай урок про XSS https://gist.github.com/anonymous/52adda0113428b274c64
#219 #409433
>>409428

Можно но так как execute возвращает bool то ты не сможешь сохранить PDOStatement в переменную. Если ты делаешь INSERT/DELETE это ок, но если ты хочешь сделать fetch то ты обломишься.
#220 #409434
>>409428

Не пропускает конструкцию

( );

надо вставлять что-то между скобок.
#221 #409436
>>409431

>У тебя там классическая XSS по моему


И по-моему!

>Ну-ка прочитай урок про XSS


В сотый раз. Мне в армии говорил комбат, что человеку надо 500 раз повторить действие, чтобы укрепить его. Видимо, мне нужно пять сотен уязвимостей обернуть в функцию htmlspecialchars, чтобы запомнить это.
#222 #409438
>>409436

Ну, 500 раз не так и много, я думаю за месяц активного написания кода ты функцию html больше раз напишешь.
#223 #409439
>>409438
У тебя задачек не хватит!
#224 #409440
>>409439

Ха! Ну это мы посмотрим, хватит или не хватит.
#225 #409442
>>409440
Кстати.
TimeDate как в бд хранить? Просто как строку? Как привести TimeDate к виду Date в mySQL я нашел, а вот обратно - нет.
#226 #409443
>>409439

У меня есть 20 неплохих задачек, правда не на php, а на яваскрипт + есть путь HTML, так что найдем что тебе решать. В крайнем случае отправим симфони 2 изучать, а эта тема бездонная.
#227 #409444
>>409443

>В крайнем случае отправим симфони 2 изучать, а эта тема бездонная.


Мне тут птичка нашептала, что нормальные поцаны учат Yii2. Меня обманули?
#228 #409445
Хотя js все равно придется учить, я понял.
#229 #409446
>>409442

Есть типа DATETIME

Преобразровать обратно можно парсингом даты из стрки:

$str = '2014-10-02 12:00:00';
$date = new DateTime($str);

или с явным указанием формата, более надежно:

$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');

http://php.net/manual/ru/datetime.construct.php
http://php.net/manual/ru/datetime.createfromformat.php

Кстати, есть мой немного устаревший, увы, урок по датам/времени: https://gist.github.com/codedokode/10539805 — там описываются функции, так что если ты используешь DateTime, лучше наверно его использовать, он ООП-ориентированный и удобный.

Кстати, учти что в MySQL может иногда быть странная дата типа '0000-00-00', например если ты в поле DATeTIME вставиim пустую строку или 0.
#230 #409447
>>409444

Yii2 проще чем Симфони 2, я его не упомянул поэтому. Естественно, после Slim можно будет за него взяться.
#231 #409448
>>409447

>Yii2 проще чем Симфони 2


Я так понял, что все проще, чем Симфони 2
#232 #409449
>>409445

Ну это может быть интересно, там можно всякие штуки, работающие в браузере писать. У нас есть задачка написать игру-арканоид например, или если тебе нравятся более серьезные вещи, написат какой-нибудь мини-ексель.
#233 #409450
>>409448

Да. Но Сифмони 2 очень правльный с точки зрения ООП и паттернов, и очень мощный, там есть ORM доктрина, нормальный роутин, куча расширений, включая например генератор админки, потому его надо рано или поздно изучать.
#234 #409451
>>409446

>или с явным указанием формата, более надежно:


>$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');


Вот это я и искал. Только из бд берется другой формат, вроде бы. Там Y-m-j h:m:s или что-то около того.
#235 #409452
>>409451
Судя по моему же коду

>date('Y-m-d H:i:s')


Такой формат.
92 Кб, 823x842
#236 #409469
Антоши, я тут решил заполнить вечернее время изучением PHP, но тут я вообще не понимаю, почему, блять, программа отказывается выводить число? Я понимаю, что даунизм не лечится, но прошу помощи. Спасибо !
#237 #409471
>>409414

>Ты расшифровываешь не закодированный текст, а исходный. Исправь и снова покажи код.


Готово: http://ideone.com/yXAEUn

>там ошибки идут: PHP Notice: Undefined offset: 7 in /home/8MGMmJ/prog.php on line 24 посмотри внизу страницы. Ты обращаешься к несуществующим элементам массива.


Поправил: http://ideone.com/G39ZTt
#238 #409474
>>409469
Потому что mt_rand($a,$b) это выражение, оно вычислилось, но ты ничему не присвоил результат этого выражения. А то что ты выводишь - $mt_rand, эта переменная ничего не содержит, ведь ты ничего в нее не положил. $mt_rand и mt_rand($a,$b) никак не связаны. Присвой mt_rand($a,$b) переменной и выведи ее через echo.
#239 #409478
>>409469

Надо писать

$x = mt_rand($a, $b);

Эта команда вызовет функцию mt_rand, которая сгенерирует число, и положит его в переменную $x, c которой ты можешь делать что хочешь. А $mt_rand это вообще несуществующая переменная.

Когда ты пишеь просто

mt_rand(1, 2);

То число генерируется и после этого выбрасывается, так как ты его никуда не сохранил.
#240 #409480
>>409478
Ну вот, а ты говорил что не даешь готовых решений, лол.
#241 #409482
>>409480
Ну может этот случай клинический.
1368 Кб, 2592x1936
#242 #409484
>>409478
>>409474
Спасибо большое. А вы тоже конспектировали информацию или запоминали ? Я вот стараюсь очень
#243 #409487
>>409484
Не вижу смысла в подобной деятельности. Какой-то совковый стереотип, мол если пишешь, то запоминается лучше, хотя ты итак пишешь код в айдеоне, незачем дублировать его еще и в тетрадку. Ну дело твое.
#244 #409488
>>409487
Если пишешь, то запоминается лучше. Правда в контексте языков программирования это касается не конспектов, а кода. Вот и вся разница. А для описания функций есть документация.
#245 #409490
>>409484
Не, это дело бесполезное. Сколько учу кодинг, никогда ничего не конспектировал. Решаешь задачку, гуглишь,гуглишь, читаешь доки,гуглишь,читаешь книжки,гуглишь,
#246 #409512
http://ideone.com/A729O5

Я в печале. Даже такой простой код не работает. Соедениния с БД есть 2+2 выводит. Анон, подскажи путь истинный!
#247 #409515
>>409480

Так это не решение, тут еще надо додуматься как это в программу вписать.
#248 #409516
>>409484

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

Ну и правильно тебе советуют, пиши код (на компьютере) каждый день и ты постепенно все это запомнишь, руками сами будут нужные команды печатать.
#249 #409517
>>409512

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

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

Например, я не вижу строчки с ATTRMODE_EXCEPTION.
#250 #409529
>>409212
У тебя пассивная-агрессия.

>>409306

>А что насчет установки, если ты например под Windows или Mac?


Там всё показано во втором уроке.
#251 #409539
>>409484
Делал так когда серьезные курсы смотрел. Просто полистать тетрадку порой быстрее чем рыться в доках.
#252 #409541
>>409529

Я хотел узнать, что именно там используют. Там без регистрации просмотреть нельзя.
21 Кб, 612x370
#253 #409545
>>409529

>У тебя пассивная-агрессия.


Пффффффф...
Построить структуру БД #254 #409586
Привет, доброанон. У меня к тебе вопрос. Есть набор данных, надо бы загнать их в mysql или какую-нибудь такую БД (Основы SQL знаю, phpmyadmin пользовался, на сервере был именно mysql, поэтому хотелось бы все-таки на нем). Помоги определиться с максимально эффективной и удобной в использовании структурой базы. Итак, есть набор объектов, их МНОГО, около 10-20к на начальном этапе. У каждого есть что-то вроде id, тут с ключем проблем нет. Каждому объекту соответствует некоторое количество основных данных, которые установлены для ВСЕХ объектов, эти данные я хотел хранить в полях той же таблицы. И кроме этого, есть набор дополнительных параметров. Их не очень много, около 20-30, но постепенно будет больше. Для каждого объекта по каждому из доп.параметров может быть инфа, а может и не быть. Нужно реализовать удобное получение информации по объектам и составление сравнительных таблиц по основным и доп.параметрам и обеспечить простое и быстрое добавление как новых объектов, так и новых доп.параметров для них. Делать одну таблицу со 100500 полями как-то не очень хочется, не слишком красиво выглядит. Что скажешь?
#255 #409609
>>408963
Вот, за 2 выстрадал: http://ideone.com/qIkK6T
я молодец?
#256 #409611
>>409609

>2 дня


selffix
#257 #409622
>>409586

EAV, Entity Attribute Value может быть?
#258 #409641
>>409340

>Задание на набор слов


>(0,count($word1)-1)


>-1


В чем суть использования -1? Зачем это вставлять?
Только дошедший до этой задачки
#259 #409642
>>409641
Последний индекс в массиве всегда меньше колличества элементов в нем, потому что нумерация начинается с нуля. Допустим у нас есть массив с тремя элементами:
0 => "первый элемент"
1 => "Второй элемент"
2=> "третий элемент"

Как видишь в массиве их трех элементов, индекс последнего будет двойкой.
#261 #409650
>>409647

Может быть когда ты пишешь DSN, не надо ставить пробелы?

> "mysql:host = localhost;dbname = test",



Вот тут вот, рядом со знаком =?
#262 #409653
>>409647

Точно, дело в пробелах. Он воспринимает пробел как часть названия базы данных.
#263 #409702
Пацаны, что думаете за эту тему https://github.com/reactphp/react ? Хочу попробовать для около-многопоточной работы. У меня есть задача, которую очень хочется разделить на отдельные задачи:
есть массив например айдишников, по этому айдишнику делаю запрос в БД, получаю данные, агрегирую, группирую, хуе-мое, складываю во временную таблицу, затем по этому же айди обращаюсь во временную таблицу и получаю нужные данные. По сути действия выполняемые для разных айди никак между собой не связаны, разве только что использую одинаковые ресурсы. Временные таблицы сделаны для того чтобы на каждой итерации не смотреть в главную, ооочень большую таблицу. Агрегация и выборка из временных таблиц реально работает быстрее чем тупо запросы в большую БД.
Дак вот, хочется для всего этого хозяйства многопоточность все дела. Что вообще для этих целей использую валютные пхп-погромисты?
#264 #409785
Пытаюсь в пхп через учебник head first
и появилась проблема и я не понимаю в чём она заключается. Помогите.
http://ideone.com/NRpCet
На будущее, где можно посмотреть в чём ошибка в коде? т.е ideone (и страница в локалхосте) пишет мне, что ошибка в 15 строке, типо "НЕ ПРЕДПОЛОГАЛИ "" В 15-ОЙ строке". Есть ли какой-нибудь сервис, который укажит и выделит эту самую ошибку?
#265 #409787
>>409785
точка с запятой в 14 строке
#266 #409789
>>409787
Мда, а в чём смысл? ведь идёт же текст сплошной с переводом строки через \n нахуй там эти точка с запятой? при этом мне пришлось поставить их в 14-ую и 15-ую
#267 #409790
>>409789
Там не идет текст, там идет оператор echo который выводит текст после которого нужна точка с запятой. Пхп-интерпретатор воспринял 14 и 15 строку одной строкой и не знает, что делать с обилием операторов в одной строке.
#268 #409791
>>409790
А почему он не жалуется на остальные строки? которые дальше идут и выглядят также
#269 #409797
>>409791
А, я одним глазом только взглянул на 14 и 15 строчку тогда,
у тебя было вот так: echo "Xxxx $var" "yyyyy $var2 " . "zzzzz $var3". "jjjjjjjjjjj $var4";
То-есть у тебя между остальными частями стоит конкатинация с помощью точки, а между первой и второй частью не было, там вместо точки с запятой точку тоже поставь
http://www.mirsite.ru/strf/1/2.htm
54 Кб, 341x604
#270 #409800

ОПчик, взгляни пожалуйста. >>409609
#271 #409803
Оп, какого это знать, что ты можешь своими знаниями сидя дома зарабатывать просто бешеные далары, попивая махито на берегу сан-тропэ или же быть в любом другом тебе любимом месте. Или ты уже привык к этому?
#272 #409806
>>409803

>какого


Как бы тебе помягче сказать? ПХП не единственный язык, который тебе следует выучить.
#273 #409807
>>409609

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

> \tif ($arg > $value){


> $arg = $value;


Тут if можно заменить на функцию min или max

> $bills as $key => &$value


Это бессмысленные названия. Надо переименовать $key например в $value (номинал банкноты), а $value в $amount (запас).

> $cash = $cash - $sum;


Удобно ислоьзовать -=

> if ($arg != 0)\techo "


Действия внутри if надо заключать в блок из фигурных скобок.

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

Ну и еще совет: не надо мучаться с тегами br и pre. Есть способ проще.

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

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
#273 #409807
>>409609

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

> \tif ($arg > $value){


> $arg = $value;


Тут if можно заменить на функцию min или max

> $bills as $key => &$value


Это бессмысленные названия. Надо переименовать $key например в $value (номинал банкноты), а $value в $amount (запас).

> $cash = $cash - $sum;


Удобно ислоьзовать -=

> if ($arg != 0)\techo "


Действия внутри if надо заключать в блок из фигурных скобок.

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

Ну и еще совет: не надо мучаться с тегами br и pre. Есть способ проще.

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

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
#274 #409809
>>409702

PHP-программисты просто запусткают N копий скриптов, указывая каждому диапазон id для обработки. Так как скрипты могут падать, запускать их желательно не руками, а программой-супервизором вроде http://supervisord.org/introduction.html

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

Советую не изобретать велосипеды.

Много процессов имеет преимущетва перед многопоточностью в отстутсвии проблем с блокироваками внутренних данных и структур.

> что думаете за эту тему https://github.com/reactphp/react


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

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

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

Алсо, я когда-то давно писал свой велосипедный однопоточный сервер на php, чтобы проверить много ли можно выиграть за счет отказа от схемы «умирать после каждого запроса». Выигрыш был в 2 раза, 5 мс вместо 10. Правда, он был не такой продвинутый как этот react, и не совсем асинхронный, конечно.
#275 #409810
>>409702

Ну и чтобы реализовать многопоточную работу с MySQL в зеленых тредах, нужен неблокирующий асинхронный драйвер MySQL. Кто его напишет? Пока самый реалистичный вариант портировать с ноды/питона или попробовать использовать асинхронные возможности mysqli: http://php.net/manual/ru/mysqli.poll.php (я когда-то хотел с этим поиграться, но так и не поигрался).
#276 #409812
>>409303

>Я еще думаю, пришла пора привести в порядок работу с медиаданными


Что-то попробовал.
И с датами вроде бы разобрался.
#277 #409813
>>409807
http://ideone.com/iHcG9E , а сколь велика разница в функциональности и удобстве \n ? Я просто на локалхосте у себя запускаю и мне достаточно удобно сейчас через <br> и <pre>.
#278 #409818
>>409785

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

> $msg = " $name был похищен $when_it_happened и отсутствовал в течение $how_long. \n";


> "Количество космических пришельцев $how_many\n" ;


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

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

http://habrahabr.ru/post/26518/

Имей в виду, там идет отправка через аккаунт на сервере вроде mail.ru, я советую не использовать Гугл так как он скорее всего примет тебя за спамера и забанит аккаунт (если им пользуется скрипт, а не человек). Ну или использовать аккаунт, которым ты до этого сам пользовался.

Как альтернатива, можно вместо отправки почты установить программу, складывающую письма в папку в виде eml-файлов (просматриваются любым почтовым клиентом, например Цундеребердом): http://toster.ru/q/545 Денвер, написано, уже умеет это делать сам.
#279 #409821
>>409785

Я про такой сервис, который растолковывает ошибки. не знаю. Тут надо просто знать правила языка php и видеть где они нарущены.

>>409791

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

2 + 2;
3 + 3;
4 + 4;

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

ТО же самое со строкой. Ты можешь написать

"a" . "b" ;
"c";

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

echo "a" . "b";
$d = "c";

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

В твоем случае php посчитал значения выраженйи и выкинул их.
#279 #409821
>>409785

Я про такой сервис, который растолковывает ошибки. не знаю. Тут надо просто знать правила языка php и видеть где они нарущены.

>>409791

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

2 + 2;
3 + 3;
4 + 4;

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

ТО же самое со строкой. Ты можешь написать

"a" . "b" ;
"c";

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

echo "a" . "b";
$d = "c";

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

В твоем случае php посчитал значения выраженйи и выкинул их.
#280 #409826
Господа программисты-илитарии! Я сделал все задания по гайду в ОП посте. Вопрос:что дальше делать?
#281 #409827
>>409826
Устриваться на работу.
#282 #409828
>>409826
Все все все задачи? Даже с банкоматом и тд?
#283 #409829
>>409828
Почему постоянно вспоминают банкомат? Это такая сложная задача что ли?
#284 #409830
>>409828

>даже с банкоматом


Лол. Ты бы еще "даже с айфоном" сказал.
#285 #409832
>>409829
Ну она первая в том разделе идет, я помню этот раздел как раздел задачек с банкоматом и тд.
#286 #409833
>>409832
Она даже не в последнем уроке. Более того, даже не в предпоследнем.
#287 #409834
>>409785

Алсо, после head first почитай нормальную книгу и сайт phptherighway. По началу там еще терпимо, но в самом конце (скрипт соцсети) адский быдлокод с кучей ошибок и уязвимостей.

Я как-то давно разбирал эту книгу и нашел там кучу ошибок и неточностей.

>>409789

Точка с запятой завершает команду (и начинает новую).

>>409803

Да не такие уж и бешеные. Программист — обычный наемный работник, если ты хочешь получать «бешеные» доллары, надо делать свой бизнес или лезть в стартап за долю (напомню, 95% стартапов по моему даже год не живут, также напомню что есть способы «отжима» доли, смотри историю Дурова).

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

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

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

Так что аноны, учите php и веб-технологии в нашем уютном тредике и идите к успеху.
#288 #409844
>>409834

>Алсо, после head first почитай нормальную книгу и сайт phptherighway



Какую именно книгу? т.к с выбором обучающего материала у меня чудовищные проблемы, ибо даже head first читаю на русском.
#289 #409846
>>409844
Попробуй Б.Макфарлин "PHP и MySQL. Исчерпывающее руководство."
#290 #409847
>>409806

Может анон не из России. Не придирайся к мелочам.

>>409813

\n тупо писать короче. И работает везде одинаково. И код не выглядит как каша из смеси html и php.

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

if () {
100500 строк
} else {
100500 строк
}

Нехорошо. Это затрудняет понимание программы. Внутри if не должно быть много команд, тем более полпрограммы.

Засунь-ка расчtт сдачи в функцию и избавься от таких огромных блоков if с помощью return.

Сам алгоритм верный.

Ну и там еще есть усложненная версия, с 200 и 2000, интересует? Это разновидность хитрой задачи о ранце получается, и по-простому там не решить.
#291 #409850
>>409847
Да, я завтра уже начну голову ломать над второй частью и над оптимизацией первой, для меня и это решение было выстрадано 9ью часами размышлений над самим алгоритмом, я уже даже хотел саму вводимую сумму делить по длине но вовремя остановился.
#292 #409852
>>409471
ОП-чик, я тут поправил. Ты смотрел и все норм или пропустил?
#293 #409855
>>409826

Молодец! Это значит что ты освоил основы php (хотя если ты не показывал решения, то это плохо так как я обычно замечаю непонимание какой-то темы и помогаю это исправить).

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

Для тебя у нас есть дополнительные задачи на написание прилоежний и MVC:

чуть попроще: https://gist.github.com/codedokode/d7e7f11449fc3bcb24b4
чуть посложнее но интереснее и полезнее: https://gist.github.com/codedokode/9424217

Заметь, что для решения этих задач надо знать основы (не весь) HTML/CSS и для второй задачи. основы MySQL. Эти вещи все равно тебе придется изучить рано или позжно, так что не откладывай.

Вот большой набор задач и ссылок на мануалы по HTML/CSS: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
Вот то же по MySQL: https://gist.github.com/codedokode/10539213

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

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

А да, чтобы пользоваться гитхабом, придется освоить гит. Есть прекрасная официальная книга на русском (и других языках), почитай: http://git-scm.com/book/ru/v1

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

Насчет работы, если не горит, то я советую изучить веб технлогии чуть получше и найти работу получше, а не первую попавшуюся.
#294 #409857
>>409855

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


А чем же они отличаются?
#295 #409859
>>409833

У нее есть хардкорная версия с купюрами в 200 и 2000, может анон ее решал и надолго это запомнил. Ну не беда, зато чуть умнее стал.

>>409844

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

>>409471

Пропустил. Исправляюсь.

> шифровка


Не работает надежно расшифровка: http://ideone.com/2CV4fH

> стихи


Хорошо, все верно.
#296 #409864
>>409857

Уровнем задач, которые ты будешь выполнять.

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

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

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

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

Потому чем больше у тебя знаний, тем больше выбор мест работы.
#297 #409866
>>409859

>Не работает надежно расшифровка: http://ideone.com/2CV4fH


Не совсем понял в чем дело, длинные значения в массиве это видимо не самый удачный вариант. Вот так сработало как надо:
http://ideone.com/xF9Wo9
#298 #409867
>>409857

Ну и если ты хочешь продаться в рабоство на одеске, то со слабыми знаниями там делать нечего, индусы и пакистанцы так демпинугют на простых задачах что ты даже на доширак не заработаешь (кстати, никогда не пробовал этот продукт, он правда такой невкусный?).
#299 #409868
>>409855
Оп-кун, вот когда я закончу с чуть попроще задачей, что делать дальше? Делать задачу чуть по-сложнее?

И вопрос, а где в первой задаче использывать ООП? К примеру, я паттерны не хочу использывать из за того, что они работают во первых медленей, а во вторых у меня полного понимания, что это и зачем оно не понятно. Из за этого я обойдусь PDO.

По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл

Кстати, как эта книга? Ничего, что там код немного устарел?

А во вторых, как ты думаешь, после второй задачки можно идти искать работу Junuior-ом?

другой-анон
#300 #409869
>>409867
Мне нравится доширак, недавно вот довелось отведать. Лучше в стократ ролтоновских бич пакетов.
#301 #409870
>>409866

Проблема была в том, что цифры 098 могли обозначать как букву Н так и послеовательность ИЗЖ и догадаться что именно, было невозможно.

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

Теперь решено верно.
#302 #409871
>>409867
Доширак? Ролтон иногда кушаю(студент жи). Хм, просто однообразный и не очень полезный + приправленый всякими не няшными вещами.
#303 #409872
>>409868

> а где в первой задаче использывать ООП?


Ну, например, работа с таблицей в БД должна быть изолирована в отдельном классе. Если таблиц N — должно быть N классов, для каждой свой.

Дальше я тебе скажу когда ты покажешь код, если где-то можно сделать лучше.

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


Чушь.

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

Соответственно, паттерны удобны тем, что ты можешь например сказать коллеге: «я думаю тут использовать TableDataGateway», или «этот паттерн тут не подойдет, так как ....» и он сразу поймет о чем речь, без долгих объяснений. Паттерны позволяют думать на боле высоком уровне. Но начинающему они будут малопонятны, за них надо браться когда написано определенное число строк кода.

> По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл


> Кстати, как эта книга? Ничего, что там код немного устарел?


Вроде неплохая, хотя может чуть-чуть устарела. Но это не беда.

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


Можно и после первой, но вторая даст тебе больше знаний и шансов. А если ты после нее еще фреймворки поизучаешь, порешаешь задачи на JS и Путь HTML, то будет еще лучше.

И да. Не прячь код. Показывай сразу, как только что-то напишешь чем раньше мы увидим ошибку. тем меньше тебе придется переделывать.
#304 #409873
>>409871

Ну то есть что-то типа макарон, только попроще? Ну макароны я раньше ел, потом поднадоели.
#305 #409874
>>409873
Лапша она и есть лапша, как тебе объяснить? Ничего общего с обычными макаронами.
#306 #409877
>>409874

Ладно, может доведется еще попробовать.
#307 #409878
>>409870
Вот, примерно так я и думал. Спасибо.
#308 #409881
>>409864
Учитывая место проживания, у меня может быть нет такой уж большой выбор.
Бтв, повторюсь: https://github.com/sqghub/uppu.ru
Я чуть-чуть поработал с медиаданными.
#309 #409882
>>409872
Ну у меня только одна таблица. Соотвественно - зачем писать класс для одной таблицы? Ведь, скрипт просто подключается и пишет данные, а потом убивается.

Кстати, а в php нельзя делать, как в питоне import xa.py и использывать классы и функции определенные в xa.py?

Спасибо. Чуть более понятно, но обычные статьи слишком перегруженны терминами их сложно понять очень.

>>409872
У меня еще где-то месяц на все это, а первую задачу хочу закончить сегодня/завтра. Спасибо.

У меня только работающее подключения к БД есть.
>>409873
Да, такая дешевая-дешевая лапша.
#310 #409883
>>409882

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


Чтобы научиться писать классы, видимо. Задача же ставит цель научиться, а не запилить сайтик на продажу.
#311 #409885
>>409881

Я помню, ты справшивал, а что делать дальше. Там в задании есть такое:

> Алсо, если ты не умрешь в процессе изготовления uppu.ru, вот что планируется сделать:


....

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

А потом после этой задачи придумаем тебе что-нибудь на Yii2, ну или может ты захочешь отвлечься на прохождение 3 задач по SQL (хорошо бы), JS или HTML/CSS.

>>409881

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

>может ты захочешь отвлечься на прохождение 3 задач по SQL


Задачу про лайки только делал.

>JS или HTML/CSS.


Это, видимо, все равно придется учить.

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


Я, конечно, не эксперт с мировым именем вы вопросах выбора работы, но мне кажется, что начинать удаленно - плохая затея.
#313 #409890
>>409881

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

>>409882

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


У нас код будет состоять из классов и методов. Лапша, когда все свалено в перемешку в скрипт, не годится. Почему?

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

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

ООП, MVC и ООП-фреймвоки сейчас используются везде, потому надо знать их. Тестовое задание, написанное в стиле лапшекод, вряд ли произведет хорошее впечатление.

Учить лапшекод — это тоже самое, что учиться кататься на велосипеде с квадратными колесами вместо нормального. Зачем? Лапшекод всегда был неправильной идеей, просто раньше было много непрофессионалов и никто не оращал на это внимание.

> , а в php нельзя делать, как в питоне import xa.py и использывать классы и функции определенные в xa.py?


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

> Чуть более понятно, но обычные статьи слишком перегруженны терминами их сложно понять очень.


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

> а первую задачу хочу закончить сегодня/завтра


Боюсь слишком оптимичстично. Разве что написать первый вариант решения.

>>409883

Верно. Все большие приложения и фреймворки пишутся на MVC и классах. То есть в любой нормальной компании ты с ними столкнешься и это у тебя будут спрашивать, так что да, потому мы этому и учим. То, что где-то есть люди которые до сих пор пишут по устаревшим 10 лет назад учебникам, нас не волнует.
#313 #409890
>>409881

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

>>409882

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


У нас код будет состоять из классов и методов. Лапша, когда все свалено в перемешку в скрипт, не годится. Почему?

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

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

ООП, MVC и ООП-фреймвоки сейчас используются везде, потому надо знать их. Тестовое задание, написанное в стиле лапшекод, вряд ли произведет хорошее впечатление.

Учить лапшекод — это тоже самое, что учиться кататься на велосипеде с квадратными колесами вместо нормального. Зачем? Лапшекод всегда был неправильной идеей, просто раньше было много непрофессионалов и никто не оращал на это внимание.

> , а в php нельзя делать, как в питоне import xa.py и использывать классы и функции определенные в xa.py?


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

> Чуть более понятно, но обычные статьи слишком перегруженны терминами их сложно понять очень.


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

> а первую задачу хочу закончить сегодня/завтра


Боюсь слишком оптимичстично. Разве что написать первый вариант решения.

>>409883

Верно. Все большие приложения и фреймворки пишутся на MVC и классах. То есть в любой нормальной компании ты с ними столкнешься и это у тебя будут спрашивать, так что да, потому мы этому и учим. То, что где-то есть люди которые до сих пор пишут по устаревшим 10 лет назад учебникам, нас не волнует.
#314 #409891
>>409887

> Задачу про лайки только делал.


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

> Это, видимо, все равно придется учить.


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

> но мне кажется, что начинать удаленно - плохая затея.


Скорее всего, да. Но ты можешь начать неудаленно, а потом перейти. Ну и есть наверно места, где альтернатив нету.
#315 #409903
>>408466
здрастье, а вы не могли бы дать ссылку, где готовый пакет денвер скачать можно. на денвер ру не работает.
#316 #409904
ДА ЧТО ТАКОЕ НИГДЕ ДЕНВЕР-ТО НЕ НАЙТИ. Я НЕ МОГУ В РУЧНУЮ ЭТУ ХУЙНЮ НАСТРАИВАТЬ!
#317 #409905
>>409904
Скачай xampp, раз уж такой рукожоп.
#318 #409910
>>409809

>PHP-программисты просто запусткают N копий скриптов, указывая каждому диапазон id для обработки


Это очень печально.

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


У меня psql и монго, но не суть.
Спасибо за развернутый коммент. Если не взлетит, то напишу на пистоне проблема в том что его не знаю
#319 #409911
>>409904
OpenServer юзай. Денвер все, морально устарел.
#320 #409915
>>409885

>тебе стоит сделать все пункты.


Так там осталось только перетаскивание файла. А раз уж лезть в js, то с головой, а не на один скрипт.
#321 #409917
>>409903
Денвер не нужен
5 Кб, 151x411
#322 #409932
Снова у меня какие то проблемы с русским текстом и кодировкой. Файл сохранил в кодлобстере, выбрал encoding UTF-8, добавил в начало документа <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
добавлял в текст кода mb_internal_encoding('utf-8'); и всё равно либо знаки вопроса на черном фоне, либо вот эти каракули,
#323 #409938
>>409910

> Это очень печально.


Это не печально, а нормально. Ты не прочел то я написал. Например, использование нескольких процессов позволяет задействовать несколько ядер процессора, в то время как системы на зеленых тредах (Node.JS, nginx) исплоьзуют только одно ядро. Кстати, по этой причине однопоточнй nginx тоже запускает несколько процессов. И в случае с нодой то же самое, запускают несколько копий. И подозреваю, в случае с Питоном тоже.

Ты по моему не разбираешься в этих вещах, не знаешь преимущества и недостатки разных подходов, а просто судишь по принципу «php это плохо, нода это хорошо». Зря.

Если ты хочешь писать асинхронно, пиши на Node или каком-нибудь Twisted.

>>409904

Ставь руками, у меня кое-что на эту тему есть: https://gist.github.com/codedokode/10774100
#324 #409940
>>409915

У меня задачки есть на яваскрипт:

https://gist.github.com/codedokode/ce30e7a036f18f416ae0
https://gist.github.com/codedokode/9933897

Насчет задачек на DOM, я думаю, начиная с 6-й можно jQuery использовать.
#325 #409943
>>409932

В браузере ты кодировку явно не укзаывал? Если так то поставь «определять автоматически».

Также залей файл на файлообменник как есть и вкинь ссылку, я проверю кодировки.
#327 #409964
>>409881

https://github.com/sqghub/uppu.ru/blob/00a2fb1827d4c80da25f080001ccaa4f23c03f2e/model/File.php#L72

> $this->date = new \DateTime("$date");


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

Насчет MediaDataMapper.php, мне кажется слово Mapper тут не очень подходит, так как под Mapper обычно имеется в виду DataMapper , код которые сохраняет/загружает сущности из БД.

> if (!is_null($mediaData)) {


> foreach ($mediaData->getData() as $key => $value) :?>


Для if надо исплоьзовать тут тоже версию с двоеточием

> <img alt="Изображение" style="width:98%" src="/<?=$file->getFilePath()?>


Это плохо. Для превьюшки надо иметь картинку нужного разиера, а не выкачивать картинку 2000×2000 чтобы отобразить уменьшенной. Также, эти 98% надо убрать.

Картинку-превьюшку можно создавать в момет загрузки, можно в момент первого запроса к ней.

> $previewHeight = (int)(200 $previewHeight / $previewWidth);


Для округдения надо использовать ceil/floor/round

https://github.com/sqghub/uppu.ru/blob/master/templates/download.php#L38 — эту и другие длинные строчки, сделай более короткими, чтобы на гитхабе все отобрадалось без прокрутки. Обычно ограничивают строку 80-120 символами.

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

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

Вот полезная информация на эту тему:

https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats (англ)
https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_HTML5_audio_and_video (англ)
https://developer.mozilla.org/en-US/Apps/Build/Audio_and_video_delivery/Cross-browser_audio_basics (англ)

Ты используешь HTML5 audio/video, значит пользователи старых браузеров и старых ИЕ не смогут его увидеть. Ну да ладно, можно так и оставить, можно сделать фоллбек на использование флеша (старые браузеры проигнорируют теги audio и video и внутрь них можно поместить контент для них).

> https://github.com/sqghub/uppu.ru/blob/master/model/FileMapper.php#L40


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

https://github.com/sqghub/uppu.ru/blob/master/model/media/MediaDataMapper.php#L8
Вот так хранить данные не очень удобно. Представь, что тебе понадобится где-то иноформация о годе выхода, как ты будешь писать код?

$audioData->getData()['Год'] — так?

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

Луше хранить в массиве идентификаторы вида

'releaseYear' => 2014

А отдельно иметь массив заголовоков, вроде

'releaseYear' => 'Год выхода'

Соответственно, нетрудно будет написать функцию, объединяющую их.

> https://github.com/sqghub/uppu.ru/blob/master/model/media/MediaDataMapper.php#L79


Если у тебя mediaData может быть null то ты, разумеется, везде, перед тем как что-то вызвать, проверяешь, что она не пустая? Альтернативой было бы создавать пустой объект MediaData, без информации о файле.

Ну и насчет формата хранения в БД, я совeтовал json из-за того, что он человекочитаем и что с ним можно работать из разных языков, то есть он поуниверсальнее чем serialize, который теоретически может меняться даже между версиями php (вроде такого не было, но кто их знает). Также, если ты отрефакторишь классы AudioData или поменяешь неймспейс, старые данные перестанут распаковываться так как там записано имя класса и полей в нем. Мне кажется, JSON понадежнее и удобнее для целей долговременного хранения.
#327 #409964
>>409881

https://github.com/sqghub/uppu.ru/blob/00a2fb1827d4c80da25f080001ccaa4f23c03f2e/model/File.php#L72

> $this->date = new \DateTime("$date");


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

Насчет MediaDataMapper.php, мне кажется слово Mapper тут не очень подходит, так как под Mapper обычно имеется в виду DataMapper , код которые сохраняет/загружает сущности из БД.

> if (!is_null($mediaData)) {


> foreach ($mediaData->getData() as $key => $value) :?>


Для if надо исплоьзовать тут тоже версию с двоеточием

> <img alt="Изображение" style="width:98%" src="/<?=$file->getFilePath()?>


Это плохо. Для превьюшки надо иметь картинку нужного разиера, а не выкачивать картинку 2000×2000 чтобы отобразить уменьшенной. Также, эти 98% надо убрать.

Картинку-превьюшку можно создавать в момет загрузки, можно в момент первого запроса к ней.

> $previewHeight = (int)(200 $previewHeight / $previewWidth);


Для округдения надо использовать ceil/floor/round

https://github.com/sqghub/uppu.ru/blob/master/templates/download.php#L38 — эту и другие длинные строчки, сделай более короткими, чтобы на гитхабе все отобрадалось без прокрутки. Обычно ограничивают строку 80-120 символами.

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

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

Вот полезная информация на эту тему:

https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats (англ)
https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_HTML5_audio_and_video (англ)
https://developer.mozilla.org/en-US/Apps/Build/Audio_and_video_delivery/Cross-browser_audio_basics (англ)

Ты используешь HTML5 audio/video, значит пользователи старых браузеров и старых ИЕ не смогут его увидеть. Ну да ладно, можно так и оставить, можно сделать фоллбек на использование флеша (старые браузеры проигнорируют теги audio и video и внутрь них можно поместить контент для них).

> https://github.com/sqghub/uppu.ru/blob/master/model/FileMapper.php#L40


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

https://github.com/sqghub/uppu.ru/blob/master/model/media/MediaDataMapper.php#L8
Вот так хранить данные не очень удобно. Представь, что тебе понадобится где-то иноформация о годе выхода, как ты будешь писать код?

$audioData->getData()['Год'] — так?

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

Луше хранить в массиве идентификаторы вида

'releaseYear' => 2014

А отдельно иметь массив заголовоков, вроде

'releaseYear' => 'Год выхода'

Соответственно, нетрудно будет написать функцию, объединяющую их.

> https://github.com/sqghub/uppu.ru/blob/master/model/media/MediaDataMapper.php#L79


Если у тебя mediaData может быть null то ты, разумеется, везде, перед тем как что-то вызвать, проверяешь, что она не пустая? Альтернативой было бы создавать пустой объект MediaData, без информации о файле.

Ну и насчет формата хранения в БД, я совeтовал json из-за того, что он человекочитаем и что с ним можно работать из разных языков, то есть он поуниверсальнее чем serialize, который теоретически может меняться даже между версиями php (вроде такого не было, но кто их знает). Также, если ты отрефакторишь классы AudioData или поменяешь неймспейс, старые данные перестанут распаковываться так как там записано имя класса и полей в нем. Мне кажется, JSON понадежнее и удобнее для целей долговременного хранения.
#328 #409966
>>409957

Файл в utf-8, а где тег meta? Его нет.

> mb_internal_encoding('utf-8');


Это влияет только на работу mb_ функций. Браузер нужен либо meta либо заголовок Content-Type.

Я советую ставить в начало Content-Type, как ниже написано.

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

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
13 Кб, 365x522
#329 #409968
>>409966
поставил в начало <?php header('Content-type: text/plain; charset=utf-8'); ?>
в итоге первый массив построчный отображает нормально, а побуквенный со знаками вопросов
#330 #409969
>>409881

https://github.com/sqghub/uppu.ru/blob/master/create.sql#L13
Для Анонима лучше писать туда NULL, тогда например можно будет при переводе сайта писать на английской версии Anonymous.
#331 #409971
>>409968

Ок, понял. str_split не рабоатет с utf-8. Читай: https://gist.github.com/codedokode/ff99e357e9860ea169b8

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

$letters = preg_split("//u", $text, null, PREG_SPLIT_NO_EMPTY);

Это работает за счет того, что пустая регулярка соответствует промежуткам между буквами и разбивает по ним строку на буквы. Флаг в конце нужен чтобы удалить 2 пустых элемента в начале и конце массива.
#332 #409981
Циклы и айфон в кредит:

> перед тем, как платить, надо проверять, сколько осталось долга, и если он меньше 5000, то платить только остаток и завершать цикл через break


Т.е. без учета комисси и процента? Типа, льгота от банка?
#333 #409983
>>409981

Нет! Ты сначала добавляешь процент и комиссию к долгую а только потом смотришь сколько осталось.
#334 #409986
>>409983

> 10 месяц спустя: долг = 7901.137927882 руб, выплачено всего 50000 руб.


> 11 месяц спустя: долг = 4138.1720657184 руб, выплачено всего 55000 руб.


> 12 месяц спустя: долг = 262.31722768997 руб, выплачено всего 60000 руб.


Лучше тогда уж задавать на условие не 5 кусков, а итоговую сумму с учетом всех налогов.
122 Кб, 775x783
142 Кб, 1228x661
61 Кб, 1235x440
#335 #409997
Привет .Помогите очень джуну если не сложно. Не нашел тред про cms потому что это не программирование, да, поэтому хотел спросить совета здесь.
Перепиливаю для знакомых сайт на Joomla 2.5 .Что не могу понять.
Человек хочет страницу на своем сайте оформить как пикрелейтед 1
http://idealnajasvadba.ua/weddings .
То есть элементарно кликабельная картинка перенаправляющая на их свадьбу , но при наведении срабатывает hover анимация . Скопировав верстку и стили (пикрелейтед 2) и вставив их соответственно в модуль и css файл , я получаю нихуя.
Ткните меня носом в косяк пожалуйста.
Это какая то стандартная анимация джумлы?
Вообще как можно распознать что сайт работает на джумле или например, вордпрессе?
#336 #410000
git config --global core.editor "editor"

как мне там указать Sublime?
#337 #410003
>>409986

Ну попробуй

>>409997

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

>>410000

По идее можно указать

git config --global core.editor "d:/programs/sublime.exe"

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

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

Тема на userecho: http://sublimetext.userecho.com/topic/109164-add-new-instance-and-no-remembered-files-command-line-options/

Пока я могу посоветовать либо указать там notepad или лучше akelpad (его надо сначала установить, это сильно улучшенный Блокнот) либо указывать сообщение для коммита в командной строке:

git commit -m "Новый коммит"

Тогда редактор не запускается.

Почему в некоторых случаях мы пишем полный путь, а для notepad только название програмым? Потому что он ледит в PATH, прочитать про это можно в моем мини-гайде по командной строке: https://gist.github.com/codedokode/10539568
#337 #410003
>>409986

Ну попробуй

>>409997

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

>>410000

По идее можно указать

git config --global core.editor "d:/programs/sublime.exe"

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

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

Тема на userecho: http://sublimetext.userecho.com/topic/109164-add-new-instance-and-no-remembered-files-command-line-options/

Пока я могу посоветовать либо указать там notepad или лучше akelpad (его надо сначала установить, это сильно улучшенный Блокнот) либо указывать сообщение для коммита в командной строке:

git commit -m "Новый коммит"

Тогда редактор не запускается.

Почему в некоторых случаях мы пишем полный путь, а для notepad только название програмым? Потому что он ледит в PATH, прочитать про это можно в моем мини-гайде по командной строке: https://gist.github.com/codedokode/10539568
#338 #410004
>>409971
Попробую так в финальной версии уже сделать, счас пока на 1251 допилю. Мне плохо дается foreach со встроенным циклом/ами , есть где-либо подробное пояснение с примерами по многомерным массивам и множествам встроенных циклов? Я вот себе на листке схему рисую, вроде всё нормально, как начинаю это воплощать в код, сразу начинаю теряться.
#339 #410005
>>410000

Я кстати пишу сообщение коммита через -m. Это гораздо удобнее.
#340 #410014
>>410004

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

команда1;
команда2;
команда3;

Но когда у нас встречается ветвление (if/else) или цикл, этот порядок немного меняется, так как цикл может выполнять команды в своем теле по несклоько раз, или ни разу. То есть тут:

команда1;
for ($i = от одного до пяти) {
команда 2;
команда3;
}
команда4;

Команды 2 и 3 будут выполнены 5 раз.

Также надо понимать как работает цикл. Цикл foreach работает так:

....
foreach ($a as $i) { тело цикла; }
....

— сделать копию массива $a (на случай если ты попытаешься его менять в ходе выполнения цикла)
— взять из копии очередной элемент
— если элементов не осталось — цикл завершен, выходим из него и выполняем то, что идет после
— иначе, копируем значение этого элемента в переменную $i. Заметь что переменная $i содержит не элемент массива, а лишь копию значения. Меняя ее, ты в исходном массиве ничего не меняешь.
— выполняем тело цикла
— переходим к пункту «взять очередной элемент»

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

Могу мини-задачки дать на встроенные циклы:

1) (на for) дан массив чисел. Найди 2 самых близких друг к другу. Например, дан массив [10, 20, 100, 30, 40, 101] — самые близкие тут 100 и 101. Если таких пар несколько, то берем ту которая идет раньше. Для массива [100, 200, 101, 201] ответом будет 100, 101 так как 100 идет раньше чем 200.

Искать удобно как раз 2 циклами: берем все числа в массиве по очереди и сравниваем с каждым по очереди.

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

Иванов: физика 4, математика 5
Петрова: физика 2, матеаматика 2
Сидорова: физика 5, математика 5

день 1: Иванов, Петрова
день 2: Иванов, Сидорова
день 3: Сидорова

Если что-то непонятно, задавай вопросы.
#340 #410014
>>410004

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

команда1;
команда2;
команда3;

Но когда у нас встречается ветвление (if/else) или цикл, этот порядок немного меняется, так как цикл может выполнять команды в своем теле по несклоько раз, или ни разу. То есть тут:

команда1;
for ($i = от одного до пяти) {
команда 2;
команда3;
}
команда4;

Команды 2 и 3 будут выполнены 5 раз.

Также надо понимать как работает цикл. Цикл foreach работает так:

....
foreach ($a as $i) { тело цикла; }
....

— сделать копию массива $a (на случай если ты попытаешься его менять в ходе выполнения цикла)
— взять из копии очередной элемент
— если элементов не осталось — цикл завершен, выходим из него и выполняем то, что идет после
— иначе, копируем значение этого элемента в переменную $i. Заметь что переменная $i содержит не элемент массива, а лишь копию значения. Меняя ее, ты в исходном массиве ничего не меняешь.
— выполняем тело цикла
— переходим к пункту «взять очередной элемент»

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

Могу мини-задачки дать на встроенные циклы:

1) (на for) дан массив чисел. Найди 2 самых близких друг к другу. Например, дан массив [10, 20, 100, 30, 40, 101] — самые близкие тут 100 и 101. Если таких пар несколько, то берем ту которая идет раньше. Для массива [100, 200, 101, 201] ответом будет 100, 101 так как 100 идет раньше чем 200.

Искать удобно как раз 2 циклами: берем все числа в массиве по очереди и сравниваем с каждым по очереди.

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

Иванов: физика 4, математика 5
Петрова: физика 2, матеаматика 2
Сидорова: физика 5, математика 5

день 1: Иванов, Петрова
день 2: Иванов, Сидорова
день 3: Сидорова

Если что-то непонятно, задавай вопросы.
#341 #410016
>>410014

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

http://ideone.com/Jbd5NK (медскиллз)

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

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

Строить саму таблицу как массив не надо.
#342 #410034
>>409964

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


Да я как-то тоже об этом подумал уже.

>Насчет MediaDataMapper.php, мне кажется слово Mapper тут не очень подходит, так как под Mapper обычно имеется в виду DataMapper , код которые сохраняет/загружает сущности из БД.


Да, ты уже трижды это говорил. Но у меня нет идей как назвать.

>Картинку-превьюшку можно создавать в момет загрузки, можно в момент первого запроса к ней.


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

>У тебя все равно есть информация о кодеках, так что это наверно не должно быть проблемой?


Хм, нет информации о кодеках.

>Плюс, яваскриптом (когда ты в нем разберешься на нужном уровне) можно проверить, поддерживает браузер тот или иной формат или нет с помощью метода canPlayType которые есть у audio/video.


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

>можно сделать фоллбек на использование флеша


Флеш - грязь.

>Пользователю незачем знать технические подробности ошибки.


А пользователь ничего и не получает, только сообщение, что файл не сохранен. Должен же он хоть об этом узнать?

>Вот так хранить данные не очень удобно.


Да, об этом я тоже подумал и переделаю сегодня.

>А отдельно иметь массив заголовоков, вроде


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

>Альтернативой было бы создавать пустой объект MediaData, без информации о файле.


Я просто когда начинал делать это, сделал MediaData - абстрактным классом, и как-то подзабыл, что могу использовать его со всеми is-audio/video/image=false и пустым массивом $data. Ну, это не долго убрать.

>Ну и насчет формата хранения в БД, я совeтовал json из-за того, что он человекочитаем и что с ним можно работать из разных языков


Но json восстанавливает из строки объект базового класса. Нужно в MediaDataMapper'е (или как там мы его обзовем) пилить функцию, которая из ассоциативного массива делает мне MediaData. К тому же json_encode не принимает private свойства (http://ideone.com/QIOiq7). Хотя и есть интерфейс JsonSerializable, реализация которого может исправить, я посчитал на тот момент, что проще схватить serialize. Но переделать обратно на json можно будет, да.

p.s. У меня переодически подтормаживает апач, отдает страницу секунд по 15. Даже пустую, mysql/php не при чем. В чем может быть проблема?
#342 #410034
>>409964

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


Да я как-то тоже об этом подумал уже.

>Насчет MediaDataMapper.php, мне кажется слово Mapper тут не очень подходит, так как под Mapper обычно имеется в виду DataMapper , код которые сохраняет/загружает сущности из БД.


Да, ты уже трижды это говорил. Но у меня нет идей как назвать.

>Картинку-превьюшку можно создавать в момет загрузки, можно в момент первого запроса к ней.


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

>У тебя все равно есть информация о кодеках, так что это наверно не должно быть проблемой?


Хм, нет информации о кодеках.

>Плюс, яваскриптом (когда ты в нем разберешься на нужном уровне) можно проверить, поддерживает браузер тот или иной формат или нет с помощью метода canPlayType которые есть у audio/video.


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

>можно сделать фоллбек на использование флеша


Флеш - грязь.

>Пользователю незачем знать технические подробности ошибки.


А пользователь ничего и не получает, только сообщение, что файл не сохранен. Должен же он хоть об этом узнать?

>Вот так хранить данные не очень удобно.


Да, об этом я тоже подумал и переделаю сегодня.

>А отдельно иметь массив заголовоков, вроде


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

>Альтернативой было бы создавать пустой объект MediaData, без информации о файле.


Я просто когда начинал делать это, сделал MediaData - абстрактным классом, и как-то подзабыл, что могу использовать его со всеми is-audio/video/image=false и пустым массивом $data. Ну, это не долго убрать.

>Ну и насчет формата хранения в БД, я совeтовал json из-за того, что он человекочитаем и что с ним можно работать из разных языков


Но json восстанавливает из строки объект базового класса. Нужно в MediaDataMapper'е (или как там мы его обзовем) пилить функцию, которая из ассоциативного массива делает мне MediaData. К тому же json_encode не принимает private свойства (http://ideone.com/QIOiq7). Хотя и есть интерфейс JsonSerializable, реализация которого может исправить, я посчитал на тот момент, что проще схватить serialize. Но переделать обратно на json можно будет, да.

p.s. У меня переодически подтормаживает апач, отдает страницу секунд по 15. Даже пустую, mysql/php не при чем. В чем может быть проблема?
16 Кб, 670x173
#343 #410038
Ух, читаю книгу по Гиту и пытаюсь разобраться.

Неудается подключить ключ.

Гуглил - советуют запустить перед этим, но я запускаю.
#344 #410046
>>410014
Всё ясно было аж до задач, когда попытался сделать саму задачу, у меня не выходит даже алгоритм в голове до конца сложить, чтобы по нему сделать задачу, я понимаю, что 2 числа будут самыми близки если их разница будет минимальной по модулю, через foreach взять первый элемент и сравнить их с 0,1,2... ключами, создать перед этим переменную которой изначально присвоить ноль, потом после сравнения первого элемента со вторым записать в эту переменную значение, и когда сравнивается дальше первый элемент с третьим в случае если эта разница будет меньше чем предыдущая - перезаписать переменную и перезаписать номер ключей, но как это выразить через foreach и встренный цикл я не понимаю
#345 #410049
>>410046

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


Запиши сразу разницу между первым и вторым.

>но как это выразить через foreach и встренный цикл я не понимаю


Ну так и гоняй. Взять каждый элемент, сравнить в цикле со всеми элементами, которые идут после него.
#346 #410051
>>410049
http://ideone.com/uNHAYU
Похоже хоть немного?
#347 #410053
>>410051
Похоже, но давай разберем очевидные недостатки.
Ты не только сравниваешь каждый раз число само с собой

>if ($def == 0)


> \t{


>\t\tcontinue;


>\t}


ты еще и сравниваешь числа по два раза. Сначала первое с пятым, а затем пятое с первым.
Подумай как решить эту проблему. Ну и я, честно говоря, не трогал здесь foreach, но я не знаю, что там за задача.
#348 #410055
>>410053
1) (на for) дан массив чисел. Найди 2 самых близких друг к другу. Например, дан массив [10, 20, 100, 30, 40, 101] — самые близкие тут 100 и 101. Если таких пар несколько, то берем ту которая идет раньше. Для массива [100, 200, 101, 201] ответом будет 100, 101 так как 100 идет раньше чем 200.
#349 #410059
>>410055
Ну так foreach там не нужен. Думай, как не перебирать дважды индексы.
#350 #410060
public function __construct(PDO $db)

Вот такая строчка, если мы пишем

function foo (array Students) значит ли что функция foo принимает только массивы?

или это просто формальная запись примеров, и в настоящем коде так писать нельзя?
#351 #410062
>>410060

>function foo (array Students) значит ли что функция foo принимает только массивы?


Значит.

>или это просто формальная запись примеров, и в настоящем коде так писать нельзя?


http://php.net/manual/ru/language.oop5.typehinting.php
#352 #410063
>>410055
Что за задача, откуда ты взял её?
#353 #410064
>>410034

>>Насчет MediaDataMapper.php, мне кажется слово Mapper тут не очень подходит, так как под Mapper обычно имеется в виду DataMapper , код которые сохраняет/загружает сущности из БД.


> Да, ты уже трижды это говорил. Но у меня нет идей как назвать.



Гм. Действительно, непросто придумать варианты. MediaDataLoader, MediaDataParser, MediaDataReader, MediaDataDetector, MediaDataManager — вот что я смг придумать.

>>У тебя все равно есть информация о кодеках, так что это наверно не должно быть проблемой?


> Хм, нет информации о кодеках.


Есть, ее должна возвращать id3 для аудио- и видео-файлов. Можно заодно эту информацию на странице скачивания выводить.

> Флеш - грязь.


Флеш — инструмент.

>>Пользователю незачем знать технические подробности ошибки.


> А пользователь ничего и не получает, только сообщение, что файл не сохранен. Должен же он хоть об этом узнать?


Ладно, проверим потом.

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


Массив не может быть константой. Так что приватным статическим полем или функцией.

> Но json восстанавливает из строки объект базового класса.


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

>Хотя и есть интерфейс JsonSerializable, реализация которого может исправить


Не слышал про такой. Раз он есть, то логично его использовать.

> p.s. У меня переодически подтормаживает апач, отдает страницу секунд по 15. Даже пустую, mysql/php не при чем. В чем может быть проблема?


Это только для PHP или для html, css файлов тоже такое наблюдается? В логах есть что-то? Это не нормально, значит что-то не так настроено.
#353 #410064
>>410034

>>Насчет MediaDataMapper.php, мне кажется слово Mapper тут не очень подходит, так как под Mapper обычно имеется в виду DataMapper , код которые сохраняет/загружает сущности из БД.


> Да, ты уже трижды это говорил. Но у меня нет идей как назвать.



Гм. Действительно, непросто придумать варианты. MediaDataLoader, MediaDataParser, MediaDataReader, MediaDataDetector, MediaDataManager — вот что я смг придумать.

>>У тебя все равно есть информация о кодеках, так что это наверно не должно быть проблемой?


> Хм, нет информации о кодеках.


Есть, ее должна возвращать id3 для аудио- и видео-файлов. Можно заодно эту информацию на странице скачивания выводить.

> Флеш - грязь.


Флеш — инструмент.

>>Пользователю незачем знать технические подробности ошибки.


> А пользователь ничего и не получает, только сообщение, что файл не сохранен. Должен же он хоть об этом узнать?


Ладно, проверим потом.

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


Массив не может быть константой. Так что приватным статическим полем или функцией.

> Но json восстанавливает из строки объект базового класса.


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

>Хотя и есть интерфейс JsonSerializable, реализация которого может исправить


Не слышал про такой. Раз он есть, то логично его использовать.

> p.s. У меня переодически подтормаживает апач, отдает страницу секунд по 15. Даже пустую, mysql/php не при чем. В чем может быть проблема?


Это только для PHP или для html, css файлов тоже такое наблюдается? В логах есть что-то? Это не нормально, значит что-то не так настроено.
#354 #410068
посоны, посоветуйте адекватные курсы по пхп и JavaScript В ДС. Дома занимать по самуочителям лень. Или если кто готов меня сам протащить по этим дербям, велкам.
#355 #410070
#356 #410072
>>410038

Смотри, ты немного не так сделал. Что делает ssh-agent -s? Он запускает агента и выводит на экран команды установки переменных окружения. Зачем он их выводит? Какой смысл?

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

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

Естественно, руками вводить команды не надо. Надо просто набрать

eval `ssh-agent -s`

Если макаба съела символы, то там идет eval (косая кавычка) ssh-agent -s (косая кавычка)

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

Также, ssh-agent можно испльзовать по-другому.

Можно набрать

ssh-agent bash

Тогда ssh-agent запустится, создаст переменные и запустит командную оболочку bash в которой эти переменные выставлены и доступны всем программам.

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

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

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

http://stackoverflow.com/a/15870387 (это для msysgit)

https://help.github.com/articles/working-with-ssh-key-passphrases/#auto-launching-ssh-agent-on-msysgit (написано что это более правильный скрипт)

Имей в виду что тебе придется вводить пароль при запуске консоли. Если не хочешь, убери из скрипта команду ssh-add.
#356 #410072
>>410038

Смотри, ты немного не так сделал. Что делает ssh-agent -s? Он запускает агента и выводит на экран команды установки переменных окружения. Зачем он их выводит? Какой смысл?

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

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

Естественно, руками вводить команды не надо. Надо просто набрать

eval `ssh-agent -s`

Если макаба съела символы, то там идет eval (косая кавычка) ssh-agent -s (косая кавычка)

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

Также, ssh-agent можно испльзовать по-другому.

Можно набрать

ssh-agent bash

Тогда ssh-agent запустится, создаст переменные и запустит командную оболочку bash в которой эти переменные выставлены и доступны всем программам.

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

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

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

http://stackoverflow.com/a/15870387 (это для msysgit)

https://help.github.com/articles/working-with-ssh-key-passphrases/#auto-launching-ssh-agent-on-msysgit (написано что это более правильный скрипт)

Имей в виду что тебе придется вводить пароль при запуске консоли. Если не хочешь, убери из скрипта команду ssh-add.
#357 #410073
>>410064

>Есть, ее должна возвращать id3 для аудио- и видео-файлов. Можно заодно эту информацию на странице скачивания выводить.


Я думал ты об информации о кодеках пользователя.

>Массив не может быть константой. Так что приватным статическим полем или функцией.


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

>Это только для PHP или для html, css файлов тоже такое наблюдается?


Для всего.

>В логах есть что-то?


Я даже не знаю, что искать. Но покапаюсь позже.
#358 #410074
>>410034

Еще добавлю насчет «флеш - грязь».

Представь, что есть пользователь с не поддерживающим HTML 5 video браузером. Что он предпочтет - отобразить видео иногда глючным и тормозящим флешем, или вообще остаться без видео?

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

>>410046

Ты в правильном направлении думаешь.

цикл ($i по всему массиву) {
цикл ($j по всему массиву) {
получаем все возможные комбинации $i и $j здесь;
}
}

>>410051

Тут есть способ хитрее. Чтобы не перебирать каждую пару 2 раза (3-й + 7-й или 7-й + 3-й = одна и та же пара) и не перебирать пары элемента с самим собой (3-й + 3й) можно начинать внутренний цикл не с нуля, а с текущего индекса в первом цикле ($i из примеры выше).

> if ($def == 0)


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

>>410060

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

>>410063

Это из задач для понимания вложенных циклов и многомерных массивов, которые я дал анону. Если ты плохо понимаешь какую-то тему, я могу дать задачи на нее, только объясни чтобы было понятно что ты понимаешь, а что не очень.
#358 #410074
>>410034

Еще добавлю насчет «флеш - грязь».

Представь, что есть пользователь с не поддерживающим HTML 5 video браузером. Что он предпочтет - отобразить видео иногда глючным и тормозящим флешем, или вообще остаться без видео?

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

>>410046

Ты в правильном направлении думаешь.

цикл ($i по всему массиву) {
цикл ($j по всему массиву) {
получаем все возможные комбинации $i и $j здесь;
}
}

>>410051

Тут есть способ хитрее. Чтобы не перебирать каждую пару 2 раза (3-й + 7-й или 7-й + 3-й = одна и та же пара) и не перебирать пары элемента с самим собой (3-й + 3й) можно начинать внутренний цикл не с нуля, а с текущего индекса в первом цикле ($i из примеры выше).

> if ($def == 0)


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

>>410060

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

>>410063

Это из задач для понимания вложенных циклов и многомерных массивов, которые я дал анону. Если ты плохо понимаешь какую-то тему, я могу дать задачи на нее, только объясни чтобы было понятно что ты понимаешь, а что не очень.
#359 #410077
>>410074

>Так что пока наберись терпения, флеш уже умер и скоро исчезнет сам по себе.


Жду этого с того дня, как впервые увидел сайт, сделанный полностью на флеше.
#360 #410078
>>409997
Не вижу что бы ты скопировал стили, привязанные к :hover
#361 #410079
Какой же хуйней я занимаюсь, вместо того, чтобы закончить задачу на ООП
http://ideone.com/bHj13u
#362 #410080
>>410073

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


ой-ой, по моему это уже оверинжиниринг, отдельный файл.

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

— расширение gettext, котрое умеет эффективно загружать переводы из mo-файлов (для их создания и редактирования есть готовые программы, например poedit): http://php.net/manual/ru/book.gettext.php

gettext используется например, для локализации программ в линуксе и многих других свободных программ. Для редактирования mo/po файлов есть готовые программы. Не стоит изобретать свой велосипед с хранением текста в файлах своего формата.

— замечательное расширение Intl, которое умеет сравнивать строки по алфавиту (с учетом нац. особенностей), форматировать суммы денег, числа, работать с календарем, делать подстановки вроде «You have {count} {ruble|rubles}»: http://php.net/manual/ru/book.intl.php

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

Переключение должно делаться какой-нибудь кнопочкой в меню, страницы на разных языках должны иметь разные URL, запоминать предпочтения при выборе можно в куках. То есть неуправляемых автоматических редиректов быть не должно, но можно например при первом заходе из английского браузера на главную выводить подсказку «не хотите ли переключиться на английскую версию?» сверху.
#363 #410081
http://ideone.com/F8tXiH

Пока что я еще не разобрался Гитом, по этому код на ideone.

Правильно ли использован DataMapper? Меня смущает предпоследняя строка.

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

У меня цель с нового года найти работу, надеюсь - смогу.

Алсо, а ты случайно не знаешь, где можно почитать понятным языком про принципы SOLID?
#364 #410082
>>410073

погугли по словам apache slow, apache slow windows, есть такие советы:

http://serverfault.com/a/349618
http://stackoverflow.com/a/7553256

>>410077

Современные сайты ненамного лучше. Ты берешь Хром 2-3 летней давности (почему? а почему бы и нет), и в части из них разваливается верстка, в части вообще не отображется из-за яваскрипт или других ошибок. И это вполне современные сайты, сделанные современными разработчиками, перечитавшимися хабра или блогов. По моему, веб всегда таким и был, люди не хотят изучать технологии как следует.

>>410079

Да, понять обозначают переменные действительно трудно. Подймай как избежать проверки каждоый пары чисел по 2 раза.
#365 #410084
>>410082

>Подймай как избежать проверки каждоый пары чисел по 2 раза


Так ты уже заспойлерил выше. А насчет переменных, это да, фантазия у меня хромает, да и я не стал заморачиваться.
#366 #410087
>>410081

Не знаю. Попробуй погуглить, может на хабре что есть.

> $STH = $STH->execute($student);


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

> Как их реализовать идей нет вообще пока-что.


Ну как дойдешь, попроси подсказку, я подскажу.Пагинация делается за счет конструкции LIMIT в SQL-запросе, с поиском придется поднапрячься, но я думаю можно через OR/LIKE сделать.

Если ты слабо знаешь SQL, могу посоветовать задачки: https://gist.github.com/codedokode/10539213

> Правильно ли использован DataMapper?


Вроде да.

> public function __construct(Array $student) {


А вот это сомнительное место. У тебя надо передать массив со всеми полями. Но это не всегда удобно, иногда хочется написать напрмер

$student = new Student( );
$student->name = ...;
$student->....

Своим требованием обязательно передать все поля в конструктор ты делаешь исплоьзование класса менее удобным. Для загрузки данных их массива можно сделать отдельный метод вроде setAttributes(array $values)
#367 #410090
>>410084

Значит надо тренировать фантазию и slovari.yandex.ru использовать. Читать такое невозможно.
#369 #410092
>>410081

Не ставь ?> в конце, если ты после нее забудешь пробел, то сессии, отправка кук и заголовки могут перестать работать.
#370 #410097
>>410080

>ой-ой, по моему это уже оверинжиниринг, отдельный файл.


Да ладно, наоборот самое простое, что я смог придумать.

>Кстати, если тебе интересна тема локализации/интернационализации


Пока что совсем не интересна. Есть куча всего другого же. А интернациональные приложения мне пока что не светят.

Я там обновил гитхаб. Пока что думаю над превью.

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


Так может в этом и проблема?

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


Пока нет нужды и не будут.
#371 #410102
>>410091

> $k = 0;


> do {


....

> \t$k++;\t


> } while ($k < $i);



Это то же самое что for только написанное более запутанно. Удали это и напиши for вместо этого.

А так да, проверка на k < i вполне годится.

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

Вот нормальные имена:

$lastValue1, $lastValue2 -> можно сделать массив $pair или $bestPair или $closestPair
$lastDef -> $minDiff
$def -> $diff (difference = разница)
$mass -> $array, $input

«mass» не годится так как по английски это значит «масса» и именно так воспринимается.
#372 #410115
>>410087
Спасибо. Погуглю на счет преобразования в DataTime.

Про лимит я знаю, но спасибо.

Кстати, твой гит у меня в закладках.

То есть в конструкторе передавать отдельное поле по отдельности, а для заполнения из массива сделать отдельную функцию? А разве в данном случае есть смысл? Мне в любом случае надо, что бы юзер ввел все поля, иначе кердык.
#374 #410119
>>410097

> include


Лучше писать require так как он упадет с фатальной ошибкой при отсутсвии файла, а include нет.

> require 'vendor/autoload.php';


Тут лучше писать require_once. Вдруг тебе самому понадобится подключить index.php из другого скрипта где уже делалоь это require.

> $data = array('appName' => $app->getName());


Это можно не копипастить, а выставить один раз через view->set или как-то так, в документации этого нет, потому почитай исходники Слима: https://github.com/codeguy/Slim/blob/master/Slim/View.php

> https://github.com/sqghub/uppu.ru/blob/master/index.php#L82


Если GET-параметра нет, будет ошибка.

> https://github.com/sqghub/uppu.ru/blob/master/index.php#L88


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

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

https://github.com/sqghub/uppu.ru/blob/master/static/MediaLocalization.php

Я думал папка static для статики в смысле «css, js». Не надо сюда php класть. Клади тоже в Models. Ну и лучше просто сделать функцию в mediaData которая вернет этот массив, и вторую, которая объединит его с медиаданными и вернет результат. Тогда в шаблоне ты будешь писать

foreach ($file->getMediaData()->getSomething() as $title => $value)

> last.php


> search.php


Тут копипаста кода вывода таблицы по моему. Общий код надо выносить например в папочку partial и инклудить.

Не ставь ?> в конце файлов. За ним легко забыть пробел.

https://github.com/sqghub/uppu.ru/blob/master/model/config.php#L2
namespace тут не нужен

https://github.com/sqghub/uppu.ru/blob/master/model/Searcher.php#L14
порт надо в конфиг

> $this->pdo = new \PDO($dsn);


Лучше оформить это как синглтон sphinxQl в слиме.

https://github.com/sqghub/uppu.ru/blob/master/model/FileMapper.php#L59
Это непраивльно. Надо хранить число байт, а не его представление в виде строки.

> new \DateTime("now")


now можно не писать в этом случае, просто new \DateTime()

https://github.com/sqghub/uppu.ru/blob/master/model/CommentMapper.php#L18
Таки строчки надо писать вертикально, с отступом.

https://github.com/sqghub/uppu.ru/blob/master/model/CommentMapper.php#L35
Непраивльно что переменная может быть, а может не быть. Конструкций типа isset(переменная) не должно быть в коде. Просто присвой comments пустой массив в начале функции.

https://github.com/sqghub/uppu.ru/blob/master/model/CommentMapper.php#L42
Здесь не хватает return

> getCommentFromPost


лучше назвать функцию createCommentFromArray, или сделать у comment метод setAttributes(array $attrs) который позволяет любым элементам отстутвовамть:

$comment = new Comment( );
$comment->setAttributes($_POST);
if ($commentMapper->validate($comment)) {
$commentMapper->save($comment);
}

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

Именно такая ошибка была в очень многих Ruby on Rails приложениях, и некто Егор Хомяков через нее, по моему, смог взломать гитхаб пару лет назад: http://habrahabr.ru/post/139399/ (кстати хороший аргумент тем кто говорит что php плохой и дырявый, а руби хороший и надежный).
#374 #410119
>>410097

> include


Лучше писать require так как он упадет с фатальной ошибкой при отсутсвии файла, а include нет.

> require 'vendor/autoload.php';


Тут лучше писать require_once. Вдруг тебе самому понадобится подключить index.php из другого скрипта где уже делалоь это require.

> $data = array('appName' => $app->getName());


Это можно не копипастить, а выставить один раз через view->set или как-то так, в документации этого нет, потому почитай исходники Слима: https://github.com/codeguy/Slim/blob/master/Slim/View.php

> https://github.com/sqghub/uppu.ru/blob/master/index.php#L82


Если GET-параметра нет, будет ошибка.

> https://github.com/sqghub/uppu.ru/blob/master/index.php#L88


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

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

https://github.com/sqghub/uppu.ru/blob/master/static/MediaLocalization.php

Я думал папка static для статики в смысле «css, js». Не надо сюда php класть. Клади тоже в Models. Ну и лучше просто сделать функцию в mediaData которая вернет этот массив, и вторую, которая объединит его с медиаданными и вернет результат. Тогда в шаблоне ты будешь писать

foreach ($file->getMediaData()->getSomething() as $title => $value)

> last.php


> search.php


Тут копипаста кода вывода таблицы по моему. Общий код надо выносить например в папочку partial и инклудить.

Не ставь ?> в конце файлов. За ним легко забыть пробел.

https://github.com/sqghub/uppu.ru/blob/master/model/config.php#L2
namespace тут не нужен

https://github.com/sqghub/uppu.ru/blob/master/model/Searcher.php#L14
порт надо в конфиг

> $this->pdo = new \PDO($dsn);


Лучше оформить это как синглтон sphinxQl в слиме.

https://github.com/sqghub/uppu.ru/blob/master/model/FileMapper.php#L59
Это непраивльно. Надо хранить число байт, а не его представление в виде строки.

> new \DateTime("now")


now можно не писать в этом случае, просто new \DateTime()

https://github.com/sqghub/uppu.ru/blob/master/model/CommentMapper.php#L18
Таки строчки надо писать вертикально, с отступом.

https://github.com/sqghub/uppu.ru/blob/master/model/CommentMapper.php#L35
Непраивльно что переменная может быть, а может не быть. Конструкций типа isset(переменная) не должно быть в коде. Просто присвой comments пустой массив в начале функции.

https://github.com/sqghub/uppu.ru/blob/master/model/CommentMapper.php#L42
Здесь не хватает return

> getCommentFromPost


лучше назвать функцию createCommentFromArray, или сделать у comment метод setAttributes(array $attrs) который позволяет любым элементам отстутвовамть:

$comment = new Comment( );
$comment->setAttributes($_POST);
if ($commentMapper->validate($comment)) {
$commentMapper->save($comment);
}

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

Именно такая ошибка была в очень многих Ruby on Rails приложениях, и некто Егор Хомяков через нее, по моему, смог взломать гитхаб пару лет назад: http://habrahabr.ru/post/139399/ (кстати хороший аргумент тем кто говорит что php плохой и дырявый, а руби хороший и надежный).
#375 #410120
>>410115

> То есть в конструкторе передавать отдельное поле по отдельности, а для заполнения из массива сделать отдельную функцию?


Конструктор лучше вробще пустым сделать.

> Мне в любом случае надо, что бы юзер ввел все поля, иначе кердык.


Это пока. А завтра тебе понадобится добавлять данные из какого-нибудь другого источника или еще что-нибудь. Просто принято делать либо через неоьязательный массив в конструкторе либо через отдельный метод.

>>410116

Все верно.
#376 #410122
>>410115

> Кстати, твой гит у меня в закладках.


Молодец. Все правильно сделал.
#377 #410123
>>410119

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


А зачем она?
#378 #410133
>>410123

Чтобы было видно куда файлы будут складываться.

А где защита от загрузки php файлов?
65 Кб, 540x540
#379 #410135
Ребят, есть кто готов помочь с элементарным заданием, которое займет минут 30?
Задрачиваю html и php пока не успеваю по времени, а время поджимает.
Не хочу идти на фриланс, скину деньгу на телефон или кошелек, куда вам удобнее.

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

Разработайте функцию, возвращающую индекс элемента из массива многократной вложенности (если элемент находится на первом уровне - выводится один индекс, на втором уровне - два индекса (от верхнего и первого вложенного массива), на третьем - три, и так далее).
21 Кб, 598x215
#380 #410136
>>410072
Один хрен, не хочет работать.
#381 #410140
>>410136

Я специально написал косые кавычки. Не одинарные, а косые, над клавишей Tab. Тбея самого не удивляет, что код с переменными вывелся. а не выполнился?
#383 #410143
>>410097

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

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

Исправить желательно так, чтобы другие формы (если они будут) легко бы защищались.
#384 #410144
>>410142

> yield


Что за зверь такой? В офф. мануале не ищется.
Аноним #386 #410146
>>410142
Благодарю, скинь на фейкопочту anonas1@yandex.ru свой номер или кошелек, скину копейку.
Ну и было бы приятно сотрудничать дальше, т.к. это не последнее, что мне нужно.
И такой вопрос, что мне нужно выучить, чтобы самому решить это задание?
#387 #410147
>>410146
Пройди задания ОП-а и все сможешь сам сделать. Алсо, ты уже постил эти задания где-то, я тебе еще ответ на первый вопрос сделал.
#389 #410149
>>410146
Можно узнать, зачем тебе понадобились решения этих заданий, если не секрет?
#390 #410150
>>410148

>В офф. мануале не ищется.


>кинул ссылку


>отвечает


наркоман?
и с чего ты взял что это функция?
#391 #410152
>>410150
Наркоман, поиск в офф мануале и ищет функции. Или там есть какой-то другой поиск, который ищет не функции?
Аноним #392 #410153
>>410147
Завтра засяду тогда, благодарю. Первое я опять по ошибке кинул.
>>410149
Лабы же. Нету времени абсолютно, приходится совмещать с работой, и пока задрачиваю верстку через htmlacademy, и php собственно хотел учить следующим шагом, а время подходит.
#393 #410154
>>410152
А хотя действительно есть, я долбоёб.
#394 #410155
>>410153
Лабы по пхп? Так если у вас пхп учат, почему ты ничего не умеешь?
#395 #410156
>>410140
Спасибо. В домашней директории нет файлов .profile и .bashrc, что делать?
Их вообще нет.
#396 #410157
>>410119

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


Если я залью её, а потом добавлю в .gitignore, она же не будет обновляться?

>Ну и лучше просто сделать функцию в mediaData


Сделаю.

>порт надо в конфиг


У меня там какая-то беда с портами. Апи работает по одному (и берет его из конфига), а pdo не соединяется, но получается по другому.

>Лучше оформить это как синглтон sphinxQl в слиме.


QI - что значит?

>Здесь не хватает return


Не, здесь функция лишняя. Я не нашел, где вызываю её. Ну пусть пока живет.

>лучше назвать функцию createCommentFromArray, или сделать у comment метод setAttributes(array $attrs) который позволяет любым элементам отстутвовамть:


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

>Допустим у нас в комментарии есть поле isAdminComment, которое подсвечивает его красным цветом.


Тогда бы я этот флаг брал бы не из поста, очевидно.
#397 #410158
>>410146

>Благодарю, скинь на фейкопочту anonas1@yandex.ru свой номер или кошелек, скину копейку.


Забудь.

>И такой вопрос, что мне нужно выучить, чтобы самому решить это задание?


Да ничего. Это и без всяких понтов с генераторами можно было сделать, а тогда надо лишь понимать, что такое массив и что такое рекурсия.
Аноним #398 #410159
>>410155
Еблан потому что я, выше написал же, что времени не хватает.
пхп нас не учат, а на втором занятии дали эти задания и учите сами как хотите, я и подзабил на время, а сессия то подходит.
Да и зачет будет, лекций и пары лаб хватит, а пхп и так учить хочу.
Такие дела.
http://archive-ipq-co.narod.ru/ этого хватит, чтобы уметь писать такие задачки?
#399 #410160
>>410159

>http://archive-ipq-co.narod.ru/ этого хватит, чтобы уметь писать такие задачки?


Этого хватит и на большее.
Аноним #400 #410161
>>410160
В среднем по времени за сколько можно пройти этот курс?
#401 #410163
>>410161
Думаю ответ на этот вопрос дать невозможно.
#402 #410165
>>410157

>Если я залью её, а потом добавлю в .gitignore, она же не будет обновляться?


Разобрался. В в .gitignore прописал userFiles//
#403 #410176
>>410148

Надо в гугле писать php.net yield, гугл ищет лучше и умеет например исправлять ошибки.
#404 #410178
>>410156

Создать один из них. .bashrc например (проверить работает ли он можно написав в нем echo "Hello" и запустив новую консоль с bash)
#405 #410180
>>410156

Увидеть путь к домашней директории можно с помощью команды echo $HOME если что

>>410157

А зачем ей обновляться? Алсо, в gitignore можно добавлять исключения с помощью !

> порты


Да, там 2 порта. Как иначе сфинкс поймет по какому протоколу ты хочешь общаться? Один порт работает на сфинксовом протоколе, другой на MySQL-совместимом. Эти порты задаются в конфиге сфинкса.

> QI - что значит?


SphinxQl = Sphinx Query Language я думаю, отсылка к SQL. Так называется MySQL -совместимый протокол в документации по сфинксу: http://habrahabr.ru/company/sphinx/blog/61222/

> Ну пусть пока живет.


Почему не удалишь? В гите код останется все равно.

>>410161

от 2 до 12 недель.
#406 #410181
>>410157

Вместо sphinxQl можешь придумать любое другое название если хочешь.
Аноним #407 #410183
>>410176
чуствую препод про yield впервые услышит
#408 #410185
>>410178
не работает, фух.
#409 #410194
вопрос, есть массив, каждый элемент должен соотвествовать разному шаблону и мне нужно выводить сообщения взависимости от того, какой из элемнтов не соотвествует.

мне нужно проверять вроде:

if ($mass[0] == $reg0) {}
if ($mass[1] == $reg1) {}
...
if ($mass[n] == $regN) {}

или есть другой способ, проще?
#410 #410195
>>410194
Switch
#411 #410196
>>410195
Хотя нет, это я спизданул не подумав, у тебя же разные переменные.
#412 #410201
>>410194
[code]
$values = array(1, 2, 3);
$pattern = array(3, 3, 3);
$handler = array('func1', 'func2', 'func3');

foreach ($values as $key => $value) {
if ($value == $pattern[$key]) {
call_user_func($handler[$key]);
}
}
[/code]
#413 #410203
>>410201
уж проще будет через if
#414 #410204
Разжуйте дурачку, пожалуйста, зачем тут используется min. Я что-то никак не пойму каким образом определение наименьшего значения позволяет найти решение, а не усугубить положение.
http://ideone.com/YPWx7i
24 Кб, 480x360
#415 #410206
Пхп-макака в треде.
Пишу по большей части высоконагруженные серверные приложения разного рода, бекэнды со сложной бизнес-логикой. Из технологий плотно работаю с mysql, sphinx, rabbitmq, memcached, еще с огромной кучей знаком поверхностно.
Отвечу на вопросы новичков по php коду, БД, технологиям.
#416 #410207
>>410204
И что там непонятно то? Ты выплачиваешь меньшее из "сколько могу" и "сколько осталось платить".
#417 #410208
>>410204
Выбирает меньшее из того, что сможет заплатить анон и оставшейся суммой кредита. Если кредит все еще больше 5к, то функция выберет 5к, если меньше, то функция выберет оставшуюся сумму, дабы не переплачивать.
#418 #410209
>>410206
Ты живешь в рашке? Почему?
#419 #410211
>>410206
Опыт, лвл, образование(если есть), город? Трактор пробовал спиздить?
#420 #410217
>>410209
Мне норм, я не в ДС живу. У нас тут цивильно более-менее. Недавно вот ездил в ДС на конференцию по разработке, кстати, и думаю, что если бы жил там - то мечтал бы о тракторе.
А ты что, хочешь жить в Тайланде и верстать гостевухи за еду по удалёнке? Я не видел, чтобы во фрилансе бывали сложные и интересные задачи, одно говно, которым заниматься ну просто зашквар белому человеку.
>>410211
Деанон же, тут половина разрабов из моей конторы двачует. Трактор пока не пробовал, образование еще не закончено.
Вообще, я пришёл обсуждать код и технологии, а не себя или тракторы.
Так что пилите вопросы, если у кого есть, отвечу завтра.
#421 #410222
>>410217
Тут вряд-ли есть с кем обсудить, 90% треда еще полные нубы, может два-три человека файлообменник осилили.
#422 #410224
>>410217
Самоучка? Вышку пошел получать уже работая? Хотя бы количество лет опыта назови, лол.
Алсо, какие перспективы у пыхи? Какие технологии будут актуальны через 5 лет? Какая часть логики переедет на фронт?
#423 #410228
>>410217

>тут половина разрабов из моей конторы двачует


Это еще что, у меня здесь одноклассник сидит!
#424 #410248
>>410217
Как к успеху пришел? Какое образование?
#425 #410272
>>410206
Окей, накидай список актуальных тем/технологий по php которые стоит задрачивать/смотреть/изучать, можешь даже ссылки привести, а то книги - одно старое говно, а блогам всяких васей пупкиных я не доверяю. Сейчас учу английский и собираюсь перекатываться на ubuntu и учиться настраивать все ручками(пока в учебных целях использую open server).
#426 #410274
>>410272
и да, какую книжечку читать по sql/mysql?
#427 #410277
>>408593
А я думал, что я ленивый, лол.
20 Кб, 757x463
#428 #410288
>>408466
Короче, проходил по верхам несколько самоучителей, дошел и заинтересовался базами данных, но мускул на компе чета не работает. Регнулся на бесплатном хосте, у них майсокл прям на сайте - думаю, удобно прямо там бд создавать и отрабатывать, не навернется. Пока что прохожу (и повторяю) более подробный учебник по пхп. Установил денвер (хоспаде, как хорошо, что его кто-то сделал и мне не пришлось все самостоятельно настраивать - это просто ад). Такие дела.
#430 #410301
Анончики, что скажете про эту презентацию?
http://www.slideshare.net/jsmith92/unsung-heroes-of-php
#431 #410303
>>410288
Лучше бы http://www.wampserver.com/ru/ или любой другой современный wamp заместо денвера.

А вообще, в первый раз лучше самому настраивать, чтобы понимать как это вообще вместе работает, потратишь побольше времени, зато в будущем окупится. У ОПа даже гайдик простой где-то есть.
#432 #410310
Няши, объясните, почему главные пыхоняши не хотят сделать объектно-ориентированные версии всякого строчного, массивного и прочего функционала, только с нормальным наименованием методов и порядком аргументов.
А старое можно оставить для совместимости и потихоньку избавляться.
#433 #410343
>>410301
годно, хоронил.
мимоначинающийпхпняша
#434 #410344
>>410343
схоронил
#435 #410371
>>410290

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

>>410301

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

На 37 слайде ненадежный код, забыли htmlspecialchars ну и substr + strpos плохо читаемый и ненадежный код напоминает, я бы регуляркой сделал.

Так, начинабщим может быть полезно это изучить, главное не совать потом эти итераторы везде.
#436 #410372
>>410310

да это не так принципиально по моему. Ну есть mb_strlen($s) вместо $s->length() и что? Тебе это код писать мешает? Если тебе хочется писать как на Питоне/руби, может на них и писать?
#437 #410373
>>410288

У бесплатных хостингов обычно запрещен доступ к MySQL извне, то есть скрипт надо запускать там же. Удобнее поставить MySQL себе на комп. Информация по Апачу/MySQL: https://gist.github.com/codedokode/10774100
#438 #410376
Вторая задача из бонусных из мануала ОПа:
http://ideone.com/cZx3m8
Не знаю как отформатировать текст так же но без использования таблицы
#439 #410393
Что скажешь, ОП?
http://ideone.com/Ietb32
#440 #410395
>>410393
Я имею ввиду насчет класса мышек, весь остальной код я уже ранее скидывал.
#441 #410423
НЕМНОГО НЫТЬЯ В ЭТОТ ИТТ ТРЕДЖ.
PHP-синьер с 5 летним опытом репортинг ин.

Если коротко, я ненавижу симфони 2 и то, во что превратился похапе за последние пару лет.
Вот нахуя все так усложнять? Зачем пиздеть про охуенность юнит-тестов и функциональных, если блять все равно НИКТО ИХ НЕ ПИШЕТ, ПОКРЫТИЕ БЛЯТЬ 25%, ЧТО ЭТО ТАКОЕ НАХУЙ? КАКОЙ СМЫСЛ БЛЯТЬ В ЭТОМ?
Tdd дало бы 100% покрытие, ко-ко-ко - ага блять, только НИКТО ЕГО БЛЯТЬ НЕ ПРАКТИКУЕТ, ВСЕ ТОЛЬКО ЛЮБЯТ ПИЗДЕТЬ О НЕМ С УМНЫМ ВИДОМ В КУРИЛКЕ.
Симфони, ко-ко-композер, SOLID - да нахуй идите. Депенденси инжекшон, уменьшает связность, ко-ко-ко - да похуй на эту связность, вот чем она тебе мешает? Проще тестировать, ко-ко-ко - ТАК ТЫ ЖУЕБА ЖЕ НЕ ТЕСТИРУЕШЬ СУКА, 25% БЛЯТЬ ПОКРЫТИЕ! А все что не равно 100% фактически блять 0, так как все равно нужно прокликивать, перекликивать или гуи-тесты писать тестировщику.
На практике тесты на всех проектах где я работал не отловили ни одного бага, только при смене кода ломаются постоянно, чем вообще сводят на нет даже мизерную от них пользу. "Тесты ломаются, это ты знач дибил))) нада нормально тесты писать)))". Так хули ты (ты блять, ты) нормально их не пишешь? И никто блять не пишет их нормально, да и вообще никак, какая-то сплошная имитация блять, лишь бы было куда время зарепортить лишнее.
На больших проектах заебешься ко-ко-ко - а нахуй на php большие проекты? Нужен тебе тырпрайз - бери си-решетка/джава макак, они там напиздячат по всем канонам абстрактных заводов одиночных фасолин. Или кто-то и правда считает, что PHP-макака, нормально знающая симфони 2, практикующая TDD и такая вся пиздая будет стоить дешевле сравнимого по скиллу джава-раба?
Вот и нахуй тогда все это усложнять, композеры эти хуезеры. Если проект тебе надо на всякие гигантские подмодули блять дробить композером - пиши на джабе/c#. А для сайтов это нахуй не нужено. Всякие гандонки и виджеты а-ля "рецепт дня: суп из семи залуп" и так прикручиваются элементарно.

Я три года назад тоже радовался, вот заебок, сейчас будем уже как ПОГРОМИСТЫ писать, ОБРАЗОВАННО, ГРАМОТНО. Охуевал от этих всех плюшек, тестирования, энтерпрайзности. А сейчас вот блять объективно посмотреть, скорость разработки с этим говном пиздец упала, а качество-то не сильно улучшилось.

Я считаю, золотой век похапе - период Kohana 3.1-3.2, самый простой фреймоврк был, маленький, без магий там всяких и пизданутого кода (а-ля Yii), жаль мало дилд под него было на гитхабе, не зафорсили увы.

А сейчас похапе катится в говно, становится тулом для энтерпрайзо говна, но дорогим по факту и хуевым

Простите за маты, накипело просто, так-то я няшка
#441 #410423
НЕМНОГО НЫТЬЯ В ЭТОТ ИТТ ТРЕДЖ.
PHP-синьер с 5 летним опытом репортинг ин.

Если коротко, я ненавижу симфони 2 и то, во что превратился похапе за последние пару лет.
Вот нахуя все так усложнять? Зачем пиздеть про охуенность юнит-тестов и функциональных, если блять все равно НИКТО ИХ НЕ ПИШЕТ, ПОКРЫТИЕ БЛЯТЬ 25%, ЧТО ЭТО ТАКОЕ НАХУЙ? КАКОЙ СМЫСЛ БЛЯТЬ В ЭТОМ?
Tdd дало бы 100% покрытие, ко-ко-ко - ага блять, только НИКТО ЕГО БЛЯТЬ НЕ ПРАКТИКУЕТ, ВСЕ ТОЛЬКО ЛЮБЯТ ПИЗДЕТЬ О НЕМ С УМНЫМ ВИДОМ В КУРИЛКЕ.
Симфони, ко-ко-композер, SOLID - да нахуй идите. Депенденси инжекшон, уменьшает связность, ко-ко-ко - да похуй на эту связность, вот чем она тебе мешает? Проще тестировать, ко-ко-ко - ТАК ТЫ ЖУЕБА ЖЕ НЕ ТЕСТИРУЕШЬ СУКА, 25% БЛЯТЬ ПОКРЫТИЕ! А все что не равно 100% фактически блять 0, так как все равно нужно прокликивать, перекликивать или гуи-тесты писать тестировщику.
На практике тесты на всех проектах где я работал не отловили ни одного бага, только при смене кода ломаются постоянно, чем вообще сводят на нет даже мизерную от них пользу. "Тесты ломаются, это ты знач дибил))) нада нормально тесты писать)))". Так хули ты (ты блять, ты) нормально их не пишешь? И никто блять не пишет их нормально, да и вообще никак, какая-то сплошная имитация блять, лишь бы было куда время зарепортить лишнее.
На больших проектах заебешься ко-ко-ко - а нахуй на php большие проекты? Нужен тебе тырпрайз - бери си-решетка/джава макак, они там напиздячат по всем канонам абстрактных заводов одиночных фасолин. Или кто-то и правда считает, что PHP-макака, нормально знающая симфони 2, практикующая TDD и такая вся пиздая будет стоить дешевле сравнимого по скиллу джава-раба?
Вот и нахуй тогда все это усложнять, композеры эти хуезеры. Если проект тебе надо на всякие гигантские подмодули блять дробить композером - пиши на джабе/c#. А для сайтов это нахуй не нужено. Всякие гандонки и виджеты а-ля "рецепт дня: суп из семи залуп" и так прикручиваются элементарно.

Я три года назад тоже радовался, вот заебок, сейчас будем уже как ПОГРОМИСТЫ писать, ОБРАЗОВАННО, ГРАМОТНО. Охуевал от этих всех плюшек, тестирования, энтерпрайзности. А сейчас вот блять объективно посмотреть, скорость разработки с этим говном пиздец упала, а качество-то не сильно улучшилось.

Я считаю, золотой век похапе - период Kohana 3.1-3.2, самый простой фреймоврк был, маленький, без магий там всяких и пизданутого кода (а-ля Yii), жаль мало дилд под него было на гитхабе, не зафорсили увы.

А сейчас похапе катится в говно, становится тулом для энтерпрайзо говна, но дорогим по факту и хуевым

Простите за маты, накипело просто, так-то я няшка
#442 #410424
НЕМНОГО НЫТЬЯ В ЭТОТ ИТТ ТРЕДЖ.
PHP-синьер с 5 летним опытом репортинг ин.

Если коротко, я ненавижу симфони 2 и то, во что превратился похапе за последние пару лет.
Вот нахуя все так усложнять? Зачем пиздеть про охуенность юнит-тестов и функциональных, если блять все равно НИКТО ИХ НЕ ПИШЕТ, ПОКРЫТИЕ БЛЯТЬ 25%, ЧТО ЭТО ТАКОЕ НАХУЙ? КАКОЙ СМЫСЛ БЛЯТЬ В ЭТОМ?
Tdd дало бы 100% покрытие, ко-ко-ко - ага блять, только НИКТО ЕГО БЛЯТЬ НЕ ПРАКТИКУЕТ, ВСЕ ТОЛЬКО ЛЮБЯТ ПИЗДЕТЬ О НЕМ С УМНЫМ ВИДОМ В КУРИЛКЕ.
Симфони, ко-ко-композер, SOLID - да нахуй идите. Депенденси инжекшон, уменьшает связность, ко-ко-ко - да похуй на эту связность, вот чем она тебе мешает? Проще тестировать, ко-ко-ко - ТАК ТЫ ЖУЕБА ЖЕ НЕ ТЕСТИРУЕШЬ СУКА, 25% БЛЯТЬ ПОКРЫТИЕ! А все что не равно 100% фактически блять 0, так как все равно нужно прокликивать, перекликивать или гуи-тесты писать тестировщику.
На практике тесты на всех проектах где я работал не отловили ни одного бага, только при смене кода ломаются постоянно, чем вообще сводят на нет даже мизерную от них пользу. "Тесты ломаются, это ты знач дибил))) нада нормально тесты писать)))". Так хули ты (ты блять, ты) нормально их не пишешь? И никто блять не пишет их нормально, да и вообще никак, какая-то сплошная имитация блять, лишь бы было куда время зарепортить лишнее.
На больших проектах заебешься ко-ко-ко - а нахуй на php большие проекты? Нужен тебе тырпрайз - бери си-решетка/джава макак, они там напиздячат по всем канонам абстрактных заводов одиночных фасолин. Или кто-то и правда считает, что PHP-макака, нормально знающая симфони 2, практикующая TDD и такая вся пиздая будет стоить дешевле сравнимого по скиллу джава-раба?
Вот и нахуй тогда все это усложнять, композеры эти хуезеры. Если проект тебе надо на всякие гигантские подмодули блять дробить композером - пиши на джабе/c#. А для сайтов это нахуй не нужено. Всякие гандонки и виджеты а-ля "рецепт дня: суп из семи залуп" и так прикручиваются элементарно.

Я три года назад тоже радовался, вот заебок, сейчас будем уже как ПОГРОМИСТЫ писать, ОБРАЗОВАННО, ГРАМОТНО. Охуевал от этих всех плюшек, тестирования, энтерпрайзности. А сейчас вот блять объективно посмотреть, скорость разработки с этим говном пиздец упала, а качество-то не сильно улучшилось.

Я считаю, золотой век похапе - период Kohana 3.1-3.2, самый простой фреймоврк был, маленький, без магий там всяких и пизданутого кода (а-ля Yii), жаль мало дилд под него было на гитхабе, не зафорсили увы.

А сейчас похапе катится в говно, становится тулом для энтерпрайзо говна, но дорогим по факту и хуевым

Простите за маты, накипело просто, так-то я няшка
#442 #410424
НЕМНОГО НЫТЬЯ В ЭТОТ ИТТ ТРЕДЖ.
PHP-синьер с 5 летним опытом репортинг ин.

Если коротко, я ненавижу симфони 2 и то, во что превратился похапе за последние пару лет.
Вот нахуя все так усложнять? Зачем пиздеть про охуенность юнит-тестов и функциональных, если блять все равно НИКТО ИХ НЕ ПИШЕТ, ПОКРЫТИЕ БЛЯТЬ 25%, ЧТО ЭТО ТАКОЕ НАХУЙ? КАКОЙ СМЫСЛ БЛЯТЬ В ЭТОМ?
Tdd дало бы 100% покрытие, ко-ко-ко - ага блять, только НИКТО ЕГО БЛЯТЬ НЕ ПРАКТИКУЕТ, ВСЕ ТОЛЬКО ЛЮБЯТ ПИЗДЕТЬ О НЕМ С УМНЫМ ВИДОМ В КУРИЛКЕ.
Симфони, ко-ко-композер, SOLID - да нахуй идите. Депенденси инжекшон, уменьшает связность, ко-ко-ко - да похуй на эту связность, вот чем она тебе мешает? Проще тестировать, ко-ко-ко - ТАК ТЫ ЖУЕБА ЖЕ НЕ ТЕСТИРУЕШЬ СУКА, 25% БЛЯТЬ ПОКРЫТИЕ! А все что не равно 100% фактически блять 0, так как все равно нужно прокликивать, перекликивать или гуи-тесты писать тестировщику.
На практике тесты на всех проектах где я работал не отловили ни одного бага, только при смене кода ломаются постоянно, чем вообще сводят на нет даже мизерную от них пользу. "Тесты ломаются, это ты знач дибил))) нада нормально тесты писать)))". Так хули ты (ты блять, ты) нормально их не пишешь? И никто блять не пишет их нормально, да и вообще никак, какая-то сплошная имитация блять, лишь бы было куда время зарепортить лишнее.
На больших проектах заебешься ко-ко-ко - а нахуй на php большие проекты? Нужен тебе тырпрайз - бери си-решетка/джава макак, они там напиздячат по всем канонам абстрактных заводов одиночных фасолин. Или кто-то и правда считает, что PHP-макака, нормально знающая симфони 2, практикующая TDD и такая вся пиздая будет стоить дешевле сравнимого по скиллу джава-раба?
Вот и нахуй тогда все это усложнять, композеры эти хуезеры. Если проект тебе надо на всякие гигантские подмодули блять дробить композером - пиши на джабе/c#. А для сайтов это нахуй не нужено. Всякие гандонки и виджеты а-ля "рецепт дня: суп из семи залуп" и так прикручиваются элементарно.

Я три года назад тоже радовался, вот заебок, сейчас будем уже как ПОГРОМИСТЫ писать, ОБРАЗОВАННО, ГРАМОТНО. Охуевал от этих всех плюшек, тестирования, энтерпрайзности. А сейчас вот блять объективно посмотреть, скорость разработки с этим говном пиздец упала, а качество-то не сильно улучшилось.

Я считаю, золотой век похапе - период Kohana 3.1-3.2, самый простой фреймоврк был, маленький, без магий там всяких и пизданутого кода (а-ля Yii), жаль мало дилд под него было на гитхабе, не зафорсили увы.

А сейчас похапе катится в говно, становится тулом для энтерпрайзо говна, но дорогим по факту и хуевым

Простите за маты, накипело просто, так-то я няшка
9 Кб, 200x236
VK #443 #410425

Попробовал получить токен как указано здесь: http://habrahabr.ru/post/226585/
Далее попробовал его использовать в прилагающемся тамже примере и в ином классе с гитхаба для работы с api.
И там и там возникают проблемы с access token.
wtf?
___
и еще, при попытке запустить php скрипт на моем пк я вижу... просто пустую страницу, если загружаю на сайт и запускаю уже там - вижу ошибки.
#444 #410439
>>410424

>А все что не равно 100% фактически блять 0


расскажи-ка, что, по-твоему, гарантирует 100% покрытие
4 Кб, 482x74
#445 #410440
Я пока-что пилю сайтик с ЕГЭ, и времени особо копать нет. Как использовать https что бы залить на гит свои данные?
#446 #410442
>>410439

>расскажи-ка, что, по-твоему, гарантирует 100% покрытие


Когда каждая макака будет на 100% покрывать пишущейся им код, весь проект будет покрыт на 100% (без багов сторонних библиотек)
#447 #410446
>>410440

sat — это название remote, удаленного репозитория. Ты можешь добавлять, удалять и менять их адреса с помощью git remote: http://git-scm.com/book/ru/v1/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D1%83%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F%D0%BC%D0%B8

Собственно, поменяй адрес у sat на тот что гит тебе советует, с https.

>>410425

> и еще, при попытке запустить php скрипт на моем пк я вижу... просто пустую страницу,


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

- ошибки сохраняются в лог ошибок. Можно открыть его и почитать. Если ты запускаешь код на локалхосте, у себя, то лог хранится в папке Апача (обычно она называется logs) и имеет название вроде error.log (в линуксе в папку /var/log/apache2 ). Если на хостинге — там либо есть файл error.log либо раздел в панели управления, где лог можно посмотреть

- также, ты можешь включить отображение ошибок. Открой файл php.ini, поставь там display_errors = On и error_reporting = E_ALL и перезапусти сервер. Теперь ошибки должны выводиться на экран.

Проверить, работает ли вывод ошибок, можно запустив скрипт содержающий обращение к несуществующей переменной вроде echo $sdgasdad; и проверив, выведется ошибка или нет. Если все верно, то должна вывестись.

>>410442

Покрытие это лишь число для оценки. Оно не гарантирует что тесты покрывают все сценарии использования системы, потому не надо за ним слепо гнаться.
#448 #410448
>>410446

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


Ну так да, тем более нет смысла их писать
#449 #410451
>>408575 >>408593 >>408623 - Хуй репорт ин.
В общем что я хотел сказать вам после трех дней работы. В первую очередь - спасибо ОПу треда. Уже с первых часов на работе становится понятно, что никто с тобой не будет сидеть и разбирать твой говнокод. Все заняты своими делами, никто не возится с нубом. Так что всем местным скажу, что радуйтесь блджад, что с вами кто-то сидит и разбирает ваш говнокод, и пользуйтесь пока можете. Ну я типа не выпендриваюсь, сам скорее всего сюда вернусь как только времени будет чуть больше свободного.
#450 #410452
>>410440

Судя по

https://help.github.com/articles/which-remote-url-should-i-use/#cloning-with-ssh

Ты должен сгенерировать и привязать к аккаунту публичный ключ, чтобы использовать доступ по ssh (git:// это как раз и есть доступ через SSH).

Тут

https://help.github.com/articles/generating-ssh-keys/#step-4-test-everything-out

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

Ну или ты можешь просто пока исплоьзовать https и вводить пароль каждый раз.
#451 #410455
>>410448

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

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

>>410451

Не беда, я думаю, со временем освоишься.
#452 #410456
>>410425

Пробовал искать ответ в документации? http://vk.com/dev

Поищи там сначала.

Ну и если вконтакт пишет что access token неприальный, то он наверно действительно неприавльный или не соответствует аккаунту или еще что-нибудь.
#453 #410457
>>410455

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


такие места в первую очередь НЕ покрывают, потому что не так очевидно

>а то что тесты не нужны, это ты уже от себя придумал


Я не говорил, что они не нужны в теории.
Я говорил, что в таком виде, в каком НА ПРАКТИКЕ тесты пишутся в проектах на похапе, соотношение профит/геморой стремится к нулю.
#454 #410459
>>410376

> PHP Notice: Undefined offset: 14 in /home/1UaNeb/prog.php on line 38


> PHP Notice: Undefined offset: 15 in /home/1UaNeb/prog.php on line 38


> PHP Notice: Undefined offset: 16 in /home/1UaNeb/prog.php on line 38


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

Это ты пытаешься обратиться к несуществующему элементу в мссиве.

> как отформатировать текст


Пробелами и \n

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

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

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
#455 #410466
>>410423

По моему ты просто один фреймворк знаешь лучше, а другой хуже, отсюда и неприязнь. Я не работал с коханой, но видел codeigniter, к которому она имеет какое-то отнощение и он мне не нравится. Там глобальные функции есть и куча & везде. И этот стремный $this->load на каждом шаге. Ужас же.

Ну и одно из преимуществ фреймворков, что они предлагают готовые компоненты. Не надо придуиывать свой HttpRequest, Response, можно исплоьзовать ORM, не надо писать свой роутер, есть куча плагинов и расширений, не надо писать свой CRUD для админки, авторизацию и т.д. Если ты не используешь это, а велосипедишь то преимуществ может и не быть.

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

Ну и раз так, я тоже пожалуюсь.

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

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

Казалось бы какая мне разница? А разница есть, может мне потом сделанный на этих поделиях сайт открывать придется или что хуже, с этим кодом взаимодейстовать. То, что можно просто сверстать на HTML или сгенерировать php на сервере, усложняют без меры, и делают кривое поделие которое отправив 10 аякс запросов может что-то отобразить и которое тормозит даже при прокрутке (ок, тормозит оно не из-за скриптов, а из-за верстки и браузера но мой сайт или двач почему-то так не тормозит и плавно прокручивается, а их — тормозит значит это они виноваты).

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

Отдельно хочется вспомнить любителей руби, которые из фанатизма написали свой JS на отступах, CSS на отступах и даже HTML на отступах. Как их вообще всерьез воспринимать можно?

> Зачем пиздеть про охуенность юнит-тестов и функциональных, если блять все равно НИКТО ИХ НЕ ПИШЕТ


А как вы тестируете код? Людьми-тестировщиками? Сдаете заказчику неоттестированный? Людям-тестировщикам не надоедает рутина?

> Tdd дало бы 100% покрытие,


Не знаю, не работал с TDD, но оно мне со стороны напоминает фанатизм.

> да похуй на эту связность, вот чем она тебе мешает?


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

wget http://example.com/doSometing?a=1

Чем разобраться.

> ко-ко-композер


Нормально же. Я его изучил за счет анончиков, которые его использовали и по моему проще вписать строчку в composer.json чем возиться со скачиванием архивов, распаковкой, копированием, забиванием репозитория мусором, писать require нужный файл для автозагрузки. Композер полезная штука. Также, при работе с нодой все ставлю через npm, норм.

Ты может в командной строке не силен?

> Нужен тебе тырпрайз - бери си-решетка/джава макак,


Интуиция подсказывает что они напишут примерно то же, только объемнее и дороже.
#455 #410466
>>410423

По моему ты просто один фреймворк знаешь лучше, а другой хуже, отсюда и неприязнь. Я не работал с коханой, но видел codeigniter, к которому она имеет какое-то отнощение и он мне не нравится. Там глобальные функции есть и куча & везде. И этот стремный $this->load на каждом шаге. Ужас же.

Ну и одно из преимуществ фреймворков, что они предлагают готовые компоненты. Не надо придуиывать свой HttpRequest, Response, можно исплоьзовать ORM, не надо писать свой роутер, есть куча плагинов и расширений, не надо писать свой CRUD для админки, авторизацию и т.д. Если ты не используешь это, а велосипедишь то преимуществ может и не быть.

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

Ну и раз так, я тоже пожалуюсь.

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

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

Казалось бы какая мне разница? А разница есть, может мне потом сделанный на этих поделиях сайт открывать придется или что хуже, с этим кодом взаимодейстовать. То, что можно просто сверстать на HTML или сгенерировать php на сервере, усложняют без меры, и делают кривое поделие которое отправив 10 аякс запросов может что-то отобразить и которое тормозит даже при прокрутке (ок, тормозит оно не из-за скриптов, а из-за верстки и браузера но мой сайт или двач почему-то так не тормозит и плавно прокручивается, а их — тормозит значит это они виноваты).

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

Отдельно хочется вспомнить любителей руби, которые из фанатизма написали свой JS на отступах, CSS на отступах и даже HTML на отступах. Как их вообще всерьез воспринимать можно?

> Зачем пиздеть про охуенность юнит-тестов и функциональных, если блять все равно НИКТО ИХ НЕ ПИШЕТ


А как вы тестируете код? Людьми-тестировщиками? Сдаете заказчику неоттестированный? Людям-тестировщикам не надоедает рутина?

> Tdd дало бы 100% покрытие,


Не знаю, не работал с TDD, но оно мне со стороны напоминает фанатизм.

> да похуй на эту связность, вот чем она тебе мешает?


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

wget http://example.com/doSometing?a=1

Чем разобраться.

> ко-ко-композер


Нормально же. Я его изучил за счет анончиков, которые его использовали и по моему проще вписать строчку в composer.json чем возиться со скачиванием архивов, распаковкой, копированием, забиванием репозитория мусором, писать require нужный файл для автозагрузки. Композер полезная штука. Также, при работе с нодой все ставлю через npm, норм.

Ты может в командной строке не силен?

> Нужен тебе тырпрайз - бери си-решетка/джава макак,


Интуиция подсказывает что они напишут примерно то же, только объемнее и дороже.
#456 #410468
>>410457

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

Ты читал на хабре про Баду или Яндекс? У них там вообще тестовы тысячи.
#457 #410469
>>410423

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

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

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

Алсо, принципиально в браузерах ставлю ограничение для кеша в 20 мегабайт. Нечего мне диск засорять.
#458 #410471
>>410469
А ты хорош, продолжай.
#459 #410473
>>410469

справедливости ради, верстальщики/фронтендщики всегда были теми еще быдлокодерами, просто раньше все писалось на обычном HTML, клиентсайд приложений не было и им негде было развернуться.
13 Кб, 637x163
#460 #410477
>>410446
Команды я уже немного подучил, но это нормально что у меня ничего не работает с первого раза?
#461 #410478
>>410446

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



Действительно)) На днях php обновил, он еще ругнулся на файл конфигурации и заменил новым.

Спс тебе, няша)

>>Пробовал искать ответ в документации? http://vk.com/dev



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

>>то он наверно действительно неприавльный



Да не, вряд ли. Я старательно копировал.
#462 #410481
>>410455

>Не беда, я думаю, со временем освоишься.



Так я и не жалюсь, просто когда есть с чем сравнивать, то пересматриваешь отношение ко всяким вещам. Такие дела. Алсо на работе изучаю в день наверное больше чем за неделю дома самостоятельно. Было бы конечно лучше работать в таких же комфортных условиях как дома, но с такими же темпами как там.
#463 #410482
>>410481
Радуйся тому, что есть. В моем мухосранске одна вакансия на пхп джуниора, но вид сайта этих ребят прямо кричит о том, что им нифига не программист нужен, а дизайнер с верстальщиком.
#464 #410483
>>410477

Это потому что ты мало читал книгу, я думаю. Читай еще:

http://git-scm.com/book/ru/v1/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B-Git-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D1%83%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F%D0%BC%D0%B8

http://git-scm.com/book/ru/v1/%D0%92%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-Git-%D0%A3%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B2%D0%B5%D1%82%D0%BA%D0%B8

Если кратко, то это ошибка, когда ты склонировал репозиторий, сделал коммиты и хочешь запушить их назад в гитхаб, но кто-то уже успел туда что-то еще закоммитить и потому твои изменения не принимаются, чтобы не сломать историю. ты должен сделать pull (или fetch + merge ), то есть загрузить эти чужие изменения с удаленного репозитория и смерджить со своими и только после этого пушить.
#465 #410484
Может вы тут поможете.
>>410463
>>410467
На доли секунды я вижу результат работы, но потом страница обновляется.
#466 #410487
>>410466

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


Да ничего такого, кишки симфони я наверное даже более внимательно изучил, чем Кохану
Просто симфони слишком "заумная" для типичного проекта на php. Многие вещи оттуда на среднепроектах просто не нужны

>но видел codeigniter, к которому она имеет какое-то отнощение


Я говорил про кохану 3-ю, она к CI вообще никакого отношения не имеет

>Ну и одно из преимуществ фреймворков, что они предлагают готовые компоненты. Не надо придуиывать свой HttpRequest, Response, можно исплоьзовать ORM, не надо писать свой роутер


Я не против фреймворков как таковых, все вышеперечисленное и в Кохане есть

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


Дело в том, что оно, увы, не работает как plug-n-play, часто нужно все равно разбираться как оно внутри работает, и в итоге вся экономия на нет сводится
Ну можно конечно сделать "набор", разобраться и им пользоваться, так часто и делают, но если бы все (или почти все) эти компоненты сами писались, было бы не сильно больше времязатрат

>А как вы тестируете код? Людьми-тестировщиками? Сдаете заказчику неоттестированный? Людям-тестировщикам не надоедает рутина?


При чем люди-тестироващики к юнит-тестам?

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


Проблема в том, что это типичное "а если бы, да кабы, в носу росли грибы". А завтра вообще вдруг конец света, что тебе эта связность тогда даст?
Я могу тебе сказать, что по факту di экономит намного меньше времени и сил в итоге, чем нужно на регулярное его использование и предварительное вкуривание

>Ты может в командной строке не силен?


Думаю норм, деплой-скрипты например всякие писать умею, ну и в повседневности часто использую

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


Практика показывает, что нет
#467 #410488
>>410484

Надо либо использовать button type="button" onclick=... либо предоствращать дейтсиве по умолчанию (отправка формы) в событии onsubmit как тут описано: http://javascript.ru/tutorial/events/intro#deystvie-brauzera-po-umolchaniyu
#468 #410489
>>410484
Замени <input type="submit" value="Submit"> на <button type="button">, дело в том что выполняется твой код в атрибуте onsubmit, а потом форма отправляется, потому что <input type="submit"> и <button type="submit">/<button> по умолчанию отправляют форму.
#469 #410491
>>410487

> di экономит намного меньше времени и сил в итоге, чем нужно на регулярное его использование и предварительное вкуривание


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

По моему с DI писать как раз проще и разбираться в коде тоже проще.

Ну и описать сервис в services.yml (если мы о Сифмони) тоже несложно, займет от силы секунд 30.

Естественно если под использованием DI ты подразумеваешь использование какой-нибудь сложной системы с кучей Xml-конфигов, ну извини, тут ты сам виноват что выбираешь такой способ.
#470 #410493
Первый раз тут, подходящего треда не нашла :с
аноны помогите составить программу нахождения суммы цифр двузначного числа в ебаном бейсике
мимотяншкольница
#471 #410494
>>410493

>Первый раз тут, подходящего треда не нашла


Ты знаешь правила.
#472 #410495
>>410489

Но вообще, onsubmit удобнее чем кнопка так как срабатывает при нажатии Enter.
#473 #410496
>>410482
Что за мухосрань и как ты пытаешься преодолеть эту проблему?
#474 #410497
>>410494

Для тех, кто не слышал, что это за правила, поясню: испечь для Опа треда вкусные печеньки.
#475 #410498
>>410497

>испечь для Опа треда вкусные печеньки.


Какая-то лайт версия!
#476 #410500
>>410494
ну помогиите, это же для вас просто
\t
#477 #410501
>>410500
Это просто для всех, даже для тебя.
#478 #410502
>>410501
я ничего в бейсике не понимаю
#479 #410503
>>410500
Делишь число на десять без остатка, записываешь результат в переменную А. Потом вычисляешь остаток от деления числа на 10 и записываешь в переменную Б. Складываешь Б с А, профит.
#480 #410505
>>410503
А можно даже не плодить переменные.
#481 #410506
>>410503
а=4
б=0
4+0=40 и все?
#482 #410508
>>410506
Всё.
#483 #410510
>>410508
чет подозрительно легко. ну ладно
#484 #410512
>>410488
>>410489
Спасибо, начинает работать.
#485 #410516
>>410491

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


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

1. $yobaApu = new Koloboque_Api(YOBA::config->get('credentials'));
2. --services.yml
parameters:
koloboque_credentials: huipizda
services:
koloboque_service:
class: Koloboque_Api
parameters:
credentials: %koloboque_credentials%
--controller
$this->get('koloboque_service');

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

В общем, в первом случае есть DI, но только в рамках инициализации API (передаю креденшелы параметрами)
#486 #410519
На всякий случай, я не говорю что DI - это плохо
Все SOLID принципы хороши, ляляля, но суть в том, что на простых сайтах это нахуй не нужно, и выйгрыша от этого никакого.
А на php лучше всего делать именно простые сайты, говорю это как человек работавший на йоба-мега проектах с миллионами юников дейли
>>410516-кун
#487 #410523
>>410516

Идея services.yml в том, что тебе не надо копипастить в 5 мест

$yobaApu = new Koloboque_Api(YOBA::config->get('credentials'));
$yobaApu->setSomeMode( );
$yobaApu->setSomethingElse( );

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

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

Ну и мне конечно не нравятся статические методы. Мне кажется, написать

$this->container->getParam('credentials') или как-то аналогично не намного сложнее чем YOBA::config->get

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

Насчет автодополнения, да, есть такая проблема. Но саблайм текст все равно не умеет в него.
#488 #410524
>>410516

Я под использованием DI имел в виду именно то, что в классах не должны быть жестко вхардкодены зависимости. А использовать DI Container или создавать через new (а позже перенести в сервис) - это не так принципиально, конечно если каждый класс заставлять описывать как сервис то это уже нездоровый фанатизм.
#489 #410529
>>410459
Ну если я делаю через \n и | ячейки не выглядят как на картинке с заданием. Когда через <table> хотя бы кое-как выглядит
#490 #410539
>>410523

>что тебе не надо копипастить в 5 мест


>$yobaApu = new Koloboque_Api(YOBA::config->get('credentials'));


>$yobaApu->setSomeMode( );


>$yobaApu->setSomethingElse( );


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

Не нужно мне расписывать книжные приемущества DI и контейнера симфони, я это все "знал" еще 3 года назад. Дело в том, что "чистый" код улучшает возможности для расширения и увеличивает гибкость (в ущерб компактности и скорости разработки), но суть в том что среднепроекты не нуждаются в этом. А значит в этих преждевременных оптимизациях с мотивацией "а вот вдруг у бабушки вырастет хуй и она станет дедушкой" нет никакого смысла.
#491 #410544
>>410529

Покажи код

>>410539

Как по мне, разницы большой по времени написать одно или другое нет. Можно подумать написание кода на 90% состоит из описания сервисов.
52 Кб, 297x340
#492 #410550
>>410272

>Сейчас учу английский


С этого нужно было начинать.

>собираюсь перекатываться на ubuntu


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

>Окей, накидай список актуальных тем/технологий по php которые стоит задрачивать/смотреть/изучать


Mysql/postgres, memcached, mongodb, rabbitmq, sphinx, nginx - это однозначно стоит изучить. Читай доки на офф. сайтах, и хабр, этого вполне достаточно. По спорным моментам ответы на вопросы ищи на stack overflow.
Конкретно по php, глянь фреймворк phalcon, composer для зависимостей, phinx для миграций, phpunit/paratest для юнит тестов.
>>410274
Книжечки нахуй, всё, что нужно - есть в оффициальных доках.
http://dev.mysql.com/doc/refman/5.7/en/
То же самое могу и про пхп сказать, и вооще, про любую библиотеку или технологию.
Еще поищи доклады с highload++, там много годноты про БД, например, в этом году Пётр Зайцев (один из разработв mysql) читал про работу с индексами в mysql, очень полезно, таких тонкостей ни в одной книге не найдешь. Ну и хабр читай, там тоже много полезного. А на толстые книги не трать время, КПД низок.
#493 #410552
>>410550
Сразу видно теоретика, который ни в одном серьёзном проекте не участвовал и ни на одной серьёзной работе не работал.
#494 #410554
>>410550

А почему ты рекомендуешь phalcon а не к примеру гораздо более известные и распространенные symfony components или silex или что-то еще? Как я помню phalcon на Си++ написан и без бекграунда в этой области в принципе малополезен.
#495 #410555
>>410550

Ну и изучать rabbitmq если не представляешь для чего используются очереди, по моему трудно: анон просто толком ничего не поймет.
#496 #410579
Возник вопрос. А как лучше организовать редактирования?
Просто выдавать куки с email-ом не конает?
#497 #410580
>>410579
Это я о задаче с ЕГЭ.
#498 #410582
>>410579
Так с бд брать все, что он там насохронял. Или о чем ты?
#499 #410585
>>410582
Мне же нужно дать возможность редактировать посредством установки куки? Что в куки пхать? e-mail, как я полагаю не вариант потому, что зная e-mail можно редактировать информацию о человеке.

Хочется что бы просто и нового поля в БД не создавать. Есть идеии?
#500 #410586
>>410585
Зачем через куки? Через куки тебе предложено авторизацию делать или что-то такое.
#501 #410588
>>410586
После регистрации сайт должен запомнить пользователя и вместо формы регистрации показывать форму редактирования своих данных. Запомнить пользователя можно с помощью кук, ставить на 10 лет. Надо использовать какой-то код, чтобы нельзя было отредактировать чужие данные.
#502 #410590
>>410588
Так это запомнить пользователя нужно с помощью кук. А данные эти брать с базы, видимо.
#503 #410592
>>410590
А какие данные передавать пользователю-то?
e-mail - не знаю безопасно ли
#504 #410598
>>410592
Так тебе какая разница? Ты внутри программы получаешь сразу всю пачку, у тебя же там целый класс должен быть для этих данных. А что выводить - это уже другой вопрос.
#505 #410600
>>410592
возьми md5 от email
#506 #410603
>>410600
Так, а смысл? Если брать md5 от мыла, разве чувак не сможет взять мыло, и зашифровать его в md5, а потом в куки подставить?

Соль добавлять что-ли?
#507 #410606
>>410603
Ты вообще чего хочешь добиться?

> Если брать md5 от мыла, разве чувак не сможет взять мыло, и зашифровать его в md5, а потом в куки подставить?


Только если будет знать, какое мыло добавлять.

>Соль добавлять что-ли?


К примеру
#508 #410611
>>410606
Что бы использовать какую-то информацию мения доступную людям посторонним же.

Да любую соль к md5
#509 #410614
Тред жив? Ньюфажная ЖС-макака хочет приобщится к вебкодингу Ноду не предлагать, на нее заказов 1,5 штуки% по средством пыха.
#510 #410621

>>> setcookie() ...cookie должны передаваться до того как >>>будут выведены какие-либо другие данные скрипта >>>(это ограничение протокола). Это значит, что в >>>скрипте вызовы этой функции должны располагаться >>>прежде остального вывода, включая вывод тэгов >>><html> и <head>, а также пустые строки и пробелы.



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

$m = md5($_POST['email']);
setcookie('edit' $m);

Могу я так делать?
#511 #410628
>>410579

Когда пользователь вводит информацию, генерирует сложный токен (например, 40 букв и цифр) и кладешь его в базу и в куки. Также, кладешь в куки id. При редактировании сравниваешь, тот ли он за кого себя выдает.

То есть это что-то вроде невидимого для пользователя пароля.
#512 #410629
>>410582

Задача: https://gist.github.com/codedokode/d7e7f11449fc3bcb24b4

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

Использовать предлагается куки. Конечно они вряд ли проживут 10 лет.
#513 #410630
>>410614

Жив. ты хочешь изучать PHP? Как насчет сайта из ОП-поста? Если тебе не нравится мой учебник, там еще названия 2 серьезных книг приведены, но для них надо знать основы.

>>410621

Да.

После вывода нельзя ставить куки, так как куки ставятся через заголовок, а в HTTP ответе заголовки идут до содержимого страницы. Если ты вывел хоть один пробел, поезд ушел.
#514 #410632
>>410550
Ну я так и думал, кароче без английского и понимания как все работает(архитектура пк, ос, сервера, сети, протоколы и т.д.) хорошей пхп-макакой не стать, как и любой другой. Просто я хотел попробовать "быстрый старт", лол. Мне после окончания вузика в этом году(уже в следующем получается) пиздовать в армию. Задрачивать что-то умеренно, видимо, смысла нет. Подзадрачить что-то в ближайший месяц, два и рассылать резюме тоже смысла нет. Пойду впадать в апатию и плакать от отвращения к себе.
31 Кб, 600x338
#515 #410633
>>410632
ушел выпиливаться
#516 #410634
>>410632

Да, хороший разработчик должен в этих вещах разбираться. Но на джуниора/стажера иногда могут взять и без этого, зависит от компании. nginx, rabbitmq и сфинкс у джуниоров не спрашивают обычно. Да и знание сетей нужно на общем уровне, что такое Ip-адрес, порт, tcp, http, а настраивать маршрутизацию например тебя никто не будет просить.

Кстати, в задании на файлообменник мы изучаем как работать со sphinx. Ну и на MySQL у нас задачки имеются. И если захочешь с чем-то еще разобраться, придумаем задачу.
#517 #410636
>>410634
Я тут забыл, на чем мы остановились в моем файлобменнике.
https://github.com/sqghub/uppu.ru
И имеет ли смысл продолжать работать с ним. Может пора уже отправить изучать что-то еще?
#518 #410637
>>410630

Учебник вин, да. Не думал, что анон еще может делать качественные вещи. Значити сосач не деградировал.
#519 #410682
>>410636

Уменьшенные картинки. Плюс, загрузка файлов перетаскиванием не сделана.
#520 #410684
>>410636

А я пока попробую придумать какое-нибудь задание на Yii 2. Или ты может хочешь яваскрипт помучать? У нас есть задачки: https://gist.github.com/codedokode/ce30e7a036f18f416ae0

Ну и на HTML/CSS имеются: https://gist.github.com/codedokode/58ebc90bd006baf4b35c
#521 #410687
ОП, глянь пожалуйста, нужно твоё экспертное мнение >>410393
#522 #410692
>>410687

Ок, гляну.

> protected $previousX;


> protected $previousY;


Неиспользуемый код надо удалять.

> $this->cats[] = $animal;


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

> public function checkTile($x, $y)


Это должно быть в классе карта. можно например сделать функцию «получить животное по координатам».

> if ($this->x < $this->cats[0]->getCoordinateX() && $this->x != 0 && $this->checkTile($this->x - 1, $this->y)



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

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

> && $this->x != 0 && $this->x != 19)


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

Дальше, не надо напрямую менять this->x. Надо записывать координаты в переменные x, y и вызвать метод типа move(x, y)

> public function setSleepIcon()


> {


> $this->previousIcon = $this->icon;


> $this->icon = "@";


Это костыль, я уже писал выше, иконку менять не надо, достаточно подправить функцию getIcon

> public function move($x, $y)


> {


> if ($this->sleepCount == 0) {



Если у тебя есть код

if (условие) {
50 строк
} else {
2 строки
}

То его надо попробовать перевернуть, чтобы было

if (не выполняется условие) {
2 строки
} else {
50 строк
}

А еще лучше

if (не выполняется условие) {
2 строки;
return;
}

50 строк;

> if ($this->x == $target['x'] && $this->y == $target['y']) {


Опять же здесь удобно было бы использовать функцию «определить какое животное стоит на точке x, y» а не странный костыль с findClosestMouse, который будет работать некорректно в ситуации, когда рядом с кошкой 2 или больше мышей.

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

> public function findClosestMouse()


Удобнее наверно из этой функции возвращать саму мышку.

Ну и вывод надо допилить чтобы карта не искажалась.
#522 #410692
>>410687

Ок, гляну.

> protected $previousX;


> protected $previousY;


Неиспользуемый код надо удалять.

> $this->cats[] = $animal;


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

> public function checkTile($x, $y)


Это должно быть в классе карта. можно например сделать функцию «получить животное по координатам».

> if ($this->x < $this->cats[0]->getCoordinateX() && $this->x != 0 && $this->checkTile($this->x - 1, $this->y)



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

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

> && $this->x != 0 && $this->x != 19)


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

Дальше, не надо напрямую менять this->x. Надо записывать координаты в переменные x, y и вызвать метод типа move(x, y)

> public function setSleepIcon()


> {


> $this->previousIcon = $this->icon;


> $this->icon = "@";


Это костыль, я уже писал выше, иконку менять не надо, достаточно подправить функцию getIcon

> public function move($x, $y)


> {


> if ($this->sleepCount == 0) {



Если у тебя есть код

if (условие) {
50 строк
} else {
2 строки
}

То его надо попробовать перевернуть, чтобы было

if (не выполняется условие) {
2 строки
} else {
50 строк
}

А еще лучше

if (не выполняется условие) {
2 строки;
return;
}

50 строк;

> if ($this->x == $target['x'] && $this->y == $target['y']) {


Опять же здесь удобно было бы использовать функцию «определить какое животное стоит на точке x, y» а не странный костыль с findClosestMouse, который будет работать некорректно в ситуации, когда рядом с кошкой 2 или больше мышей.

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

> public function findClosestMouse()


Удобнее наверно из этой функции возвращать саму мышку.

Ну и вывод надо допилить чтобы карта не искажалась.
#523 #410737
>>410682

>Уменьшенные картинки.


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

>Плюс, загрузка файлов перетаскиванием не сделана.


А это уже будет в куче с остальным js, которым я пока и начну заниматься.
#524 #410756
>>410737

Ок, тогда делай пока JS, а я сегодня-завтра проверю файлообменник.
#525 #410768
>>410459
http://ideone.com/19LdFN
Так пойдет?
И вопрос по третьей бонусной задачке по считалке. Создал массив от 1 до N, написал формулу считалки
$k = $skip $i;
\t\tif ($k > $count)
\t\t{
\t\t\t$z = floor($k / $count);
\t\t\t$k -= $count
$z;
\t\t}
Дальше не знаю с чего начать, попытался применить unset(array[$k]), оно ожидаемо удаляет половину ключей с элементами из массива и дальше уже просто вхолостую ходит оставшееся количество циклов, вот либо формулу надо переделывать, либо уже нужно что-то делать с массивом и с нумерацией ключей после того как цикл обошел массив до конца.
#526 #410771
>>410737

Вот пока маленький список замечаний. У тебя там download.php не очень хоррошо все.

https://github.com/sqghub/uppu.ru/blob/master/create.sql#L13
Анонима до сих пор не исправил....

https://github.com/sqghub/uppu.ru/blob/master/templates/download.php#L17
У DateTime есть метод format

> <?endforeach;


> //для изображений


> if ($mediaData->isImage()) {



Это надо писать в 2 отдельных блока:

<?php endforeach; ?>
<?php if ($mediaData->isImage()): ?>

> src="/userFiles/<?= $file->getId() ?>/preview.png">


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

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

Для cover image тоже наверно надо делать превьюшку, вдруг она большая. Можно использовать ту же самую функцию что у тебя есть, и сделать в базовом классе MediaData функцию для добваления/получения/проверки наличия превьюшки.

То есть будет общий код для любых превьюшек вроде:

<? if ($mediaData->hasPreview()): ?>
....

> } elseif ($mediaData->isAudio()) {


Тут нужна версия с двоеточием и вынести if в отдельный блок

Теги video/audio лучше использовать в форме с source как тут:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source#Examples

(у тебя будет один source). type ты можешь получить от getId3. Тогда браузер если не поддеривает формат, даже не будет пытаться скачать и воспроизвести файл.

> 20 substr_count($comment->getPath(), '.')


Тут должно быть $comment->getDepth() или что-то такое, а не ручной подсчет числа точек

> case 'bmp':


> $img = imagecreatefromwbmp($sourcePath);


wbmp — это не bmp. GD не поддерживает bmp из коробки, его поддерживает вроде бы (не уверен) ImageMagick, но если неохота, можно не делать поддержку этого формата.

> if (!list($width, $height) = getimagesize($sourcePath)) return "Unsupported picture type!";


Лучше return false. Как ты это будешь через if проверять?

Ктстати, если тебе понадобится где-то рабоать с изображениями, это удобно делать с помощью библиотек вроде такой: https://github.com/Gregwar/Image — там создание превьюшки займет 3 строчки кода.

Еще есть такая библиотека, http://phpimagemagician.jarrodoberto.com/ она умеет в чтение BMP, но не поддерживает композер и довольно старая.

Ну это так, для информации, использовать их сейчас не требуется.
#526 #410771
>>410737

Вот пока маленький список замечаний. У тебя там download.php не очень хоррошо все.

https://github.com/sqghub/uppu.ru/blob/master/create.sql#L13
Анонима до сих пор не исправил....

https://github.com/sqghub/uppu.ru/blob/master/templates/download.php#L17
У DateTime есть метод format

> <?endforeach;


> //для изображений


> if ($mediaData->isImage()) {



Это надо писать в 2 отдельных блока:

<?php endforeach; ?>
<?php if ($mediaData->isImage()): ?>

> src="/userFiles/<?= $file->getId() ?>/preview.png">


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

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

Для cover image тоже наверно надо делать превьюшку, вдруг она большая. Можно использовать ту же самую функцию что у тебя есть, и сделать в базовом классе MediaData функцию для добваления/получения/проверки наличия превьюшки.

То есть будет общий код для любых превьюшек вроде:

<? if ($mediaData->hasPreview()): ?>
....

> } elseif ($mediaData->isAudio()) {


Тут нужна версия с двоеточием и вынести if в отдельный блок

Теги video/audio лучше использовать в форме с source как тут:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source#Examples

(у тебя будет один source). type ты можешь получить от getId3. Тогда браузер если не поддеривает формат, даже не будет пытаться скачать и воспроизвести файл.

> 20 substr_count($comment->getPath(), '.')


Тут должно быть $comment->getDepth() или что-то такое, а не ручной подсчет числа точек

> case 'bmp':


> $img = imagecreatefromwbmp($sourcePath);


wbmp — это не bmp. GD не поддерживает bmp из коробки, его поддерживает вроде бы (не уверен) ImageMagick, но если неохота, можно не делать поддержку этого формата.

> if (!list($width, $height) = getimagesize($sourcePath)) return "Unsupported picture type!";


Лучше return false. Как ты это будешь через if проверять?

Ктстати, если тебе понадобится где-то рабоать с изображениями, это удобно делать с помощью библиотек вроде такой: https://github.com/Gregwar/Image — там создание превьюшки займет 3 строчки кода.

Еще есть такая библиотека, http://phpimagemagician.jarrodoberto.com/ она умеет в чтение BMP, но не поддерживает композер и довольно старая.

Ну это так, для информации, использовать их сейчас не требуется.
#527 #410777
>>410768

> Дальше не знаю с чего начать, попытался применить unset(array[$k]), оно ожидаемо удаляет половину ключей с элементами из массива и дальше уже просто вхолостую ходит оставшееся количество циклов, вот либо формулу надо переделывать, либо уже нужно что-то делать с массивом и с нумерацией ключей после того как цикл обошел массив до конца.



Тут есть 2 варианта:

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

— обходить массив в цикле через foreach и удалять каждый N-й элемент (отсчитывать можно с помощью переменной). Тогда нам не принципиально есть ли дырки в нумерации или нет.

Ну и $skip × $i конечно не годится, тут нужна формула получше, надо прибавлять к числу величину шага, и если ты вышел за пределы массива то вычитать его размер. Ну и в первом варианте еще уменьшать при удалении элементов.
#528 #410780
>>410768

Насчет стихов, надо бы сделать нормально, без HTML тегов.

У тебя сейчас посмотри, код вообще ничего не выводит.

Это из-за того, что ты исплоьзуешь str_split который ломает буквы в utf-8, и ideone откаызвается их выводить. Я не вижу, в чем сложность заменить его на preg_split который я советовал выше, а также отказаться от каши из html-тегов и php. Давай сделаем нормально.

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

ну и посмотри сам, разве это нормально, смесь из php и html? Это же ужасно смотрится:

> border=\"1\" cellpadding=\"3\"

#529 #410787
>>408466
Здаров, пехапяч
Заказали говно: магазин с корзиной и товарами разных продавцов.
Все готово кроме отправки заказов на почту. По хорошему - надо бить заказ на куски по продавцу и каждому слать заказ только с его товарами.
Но меня беспокоит геморой с электронной почтой, раньше постоянно были проблемы, в том числе с приходом писем на яндекс-мейлру. А в этот раз сразу дохуя писем придется слать!
Так вот вопрос: если я mail()-м в цикле хуяну заказы, это нормально будет, или надо sleep там надо, или в базу загнать и кроном разослать. Как это лучше всего сделать?
48 Кб, 468x518
#530 #410789
>>408466
Как дебажить готовый проект?

Кратко: в гос. учреждении, которое я эникею по договору, пытаются запилить систему тестирования персонала. Состоит она из wamp-сервера на одном из локальных компьютеров, к которому должны обращаться остальные по внутреннему айпишнику (проброс в hosts сделаем позже). Но это всё хуйня. Проблема в том, что программисттян скидывает полностью свою папку вампа с работающим у неё проектом на нашу пеку с установленной точно такой же версией вампа, подключает базу через phpmyadmin и О БОГИ, ТРИ ОШИБКИ В index.html. Страница не грузится. Сейчас привести их не смогу, потому что какой-то уебан на том конце провода (работаю удалённо) прямо во время моей работы нажал Пуск-Завершение работы и продолжить смогу только завтра, а проект скопировать себе не подумал, ну да похуй.

Короче, соль ошибок в том, что сначала он не может найти какую-то константу, а потом не может найти какой-то файл в папке c:\php\pear\, НО БЛЯДЬ! У программиста сайта тоже такой папки нет и всё робит! Её доводы такие: "у меня стоит ХР х86, всё работает. У вас 7 х64, ставьте ХР х86". Да пошла она нахуй, тут оперативки 4 гига и вообще ебал я в рот!

Хочу разобраться с проблемой. До этого пытался учить пхп для себя, но не взлетело, поэтому почти нихуя не знаю. Завтра попробую поковыряться. Собственно, вопрос знатокам: как правильнее и, самое главное, по фасту отдебажить это говно, чтобы отвязаться уже от работы которую, по сути, я не должен вообще делать?

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

Буду рад хоть какой-то помощи.
#531 #410792
>>410789

>не правильно


Упс, слитно.
#532 #410800
>>410789

> (проброс в hosts сделаем позже).


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

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


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

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

Также, проверь одинаковые ли у вас настройки php.ini, одинаковые ли расширения установлены. Просмотреть список расширений можно в консольке, набрав

c:\php\php -m

Просмотреть информацию о конфигурации php можно либо в консольке через

c:\php\php -i

Либо выполнив файл с кодом <?php phpinfo( ); через сервер и браузер.

> а потом не может найти какой-то файл в папке c:\php\pear\


Возможно что в константе как раз описан путь к файлу. Также, возможно что у тебя на сервере не установлены нужные пакеты из PEAR. PEAR — это репозиторий библиотек на php. В этом случае ты должен на сервер установить PEAR и используемые пакеты, в ту же папку. Как устанавливать пакеты PEAR под винду, я думаю, можн нагуглить. Делается это через консольку.

http://pear.php.net/manual/en/installation.php
http://stackoverflow.com/a/13032983

(пункт Installation of a local PEAR copy on a shared host не для тебя, а вот пункт Checking if PEAR works как раз надо выполнить) .

По сути надо скачать установщик, go-pear.phar и запустить его.

Папка куда ставятся пакеты, задается при установке PEAR вроде бы. Можно набрать

c:\php\php go-pear.phar --help

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

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

Если ты плохо разбираешься в консольке, почитай мой мини-гайд: https://gist.github.com/codedokode/10539568

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

Если есть еще вопросы или что-то енпонятно, задавай.
#532 #410800
>>410789

> (проброс в hosts сделаем позже).


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

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


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

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

Также, проверь одинаковые ли у вас настройки php.ini, одинаковые ли расширения установлены. Просмотреть список расширений можно в консольке, набрав

c:\php\php -m

Просмотреть информацию о конфигурации php можно либо в консольке через

c:\php\php -i

Либо выполнив файл с кодом <?php phpinfo( ); через сервер и браузер.

> а потом не может найти какой-то файл в папке c:\php\pear\


Возможно что в константе как раз описан путь к файлу. Также, возможно что у тебя на сервере не установлены нужные пакеты из PEAR. PEAR — это репозиторий библиотек на php. В этом случае ты должен на сервер установить PEAR и используемые пакеты, в ту же папку. Как устанавливать пакеты PEAR под винду, я думаю, можн нагуглить. Делается это через консольку.

http://pear.php.net/manual/en/installation.php
http://stackoverflow.com/a/13032983

(пункт Installation of a local PEAR copy on a shared host не для тебя, а вот пункт Checking if PEAR works как раз надо выполнить) .

По сути надо скачать установщик, go-pear.phar и запустить его.

Папка куда ставятся пакеты, задается при установке PEAR вроде бы. Можно набрать

c:\php\php go-pear.phar --help

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

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

Если ты плохо разбираешься в консольке, почитай мой мини-гайд: https://gist.github.com/codedokode/10539568

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

Если есть еще вопросы или что-то енпонятно, задавай.
#533 #410801
>>410789

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

> У программиста сайта тоже такой папки нет и всё робит!


У нее она может быть в другом месте.
#534 #410803
>>410787

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

http://habrahabr.ru/post/114852/
http://toster.ru/q/12552

sleep тут вряд ли поможет
#535 #410804
>>410800

>Также, проверь одинаковые ли у вас настройки php.ini, одинаковые ли расширения установлены. Просмотреть список расширений можно в консольке, набрав


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

А так спасибо, я всё понял. Только днс-сервер не буду поднимать. Я им, пожалуй, даже адрес не буду фигачить. Добавлю в закладки айпишник и пусть жрут говно.

С пиром то же самое. Я же сказал, что всё как у неё по файлам. А может быть она пиздит, что у неё нет папки C:\php\pear.

С соснолью знаком, не совсем ньюфаг.

Спасибо.
#536 #410805
>>410801
Да какая организация работы, ты о чём? Она комментарии на русском языке пишет. Человек шёл явно по пути говнообучения через русскоязычные устаревшие статьи. И вообще, вангую, что не писала, а ебашила в конструкторе каком-нибудь. Когда я спросил, кто писал, а она неуверенно сказала, что сама, в чём я усомнился почти сразу после того, как сидел и объяснял ей суть выводимых ошибок.
#537 #410807
>>408466
Оп, давно я тебе не писал. Тут решил заняться фронтендом. Я хоть и не изучал специально хтмл и ксс, но в течение жизни сталкивался и могу ориентироваться. Я не хочу туториалов "Getting started". Мне бы какой нибудь мануал по адаптивному дизайну, чтобы сразу там написали что надо знать для этого и как делать. Хочу простенький сайт-визитку с нуля написать, чтобы на мобилках красиво выглядел.
#538 #410813
>>410780
http://ideone.com/K48YzI
перевел в utf-8, в первом цикле я K сравнил с длиной самой длинной строки но вручную, я не знаю как сделать проверку внутри циклов чтобы не обходило несуществующие ячейки
#539 #410814
>>410813
если на идеван ещё выглядит сносно, то в браузере выводит кашу которая внутри ещё и начинает съезжать.
#540 #410815
>>410805
А что плохого в русских комментариях?
#541 #410821
>>410815

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



Без знания русского языка их не прочитать.
В общем-то это их единственный недостаток.
#542 #410823
>>410821
Надо переключать раскладку, чтобы их написать, например.
#543 #410828
>>410823

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



До недостатка это немного не дотягивает.
#544 #410852
>>410803
урлы не смотрел но внезапно понял что у меня кроме магазина тут еще кмс целый, так что пускай в личку заказы идут
#545 #410875
>>410814

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

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.
#546 #410892
Анон, помоги!! Я два раза перечитывал главу про регулярные выражения, но как решить эти задачи вообще не понял:
Задачки (пока без картинок)

Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — праивльный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).
«Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
«жи» или «ши» написано с буквой ы
в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
в тексте есть слова «а» или «но» без запятой перед ними.
(можешь добавить еще несколько правил, если хорошо знаешь русский язык)
В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).
Вся надежда на тебя
16 Кб, 455x540
#547 #410980
>>410875
Так там это и так стоит!
Вот как у меня на локалхосте это выглядит
#548 #410999
>>410980

То что я вижу на картинке выглядит не как проблема с браузером или чем-то еще, а ошибка в программе. То есть ты что-то написал неправильно. Попробуй посмотреть, может ты где-то пробел забыл вывести или наоборот лишний вывел. Можешь для удобства поменять текст чтобы в нем было всего несколько строк и проверить.
#549 #411001
>>410980

А вообще, подожди, я у себя на локалхосте запущу и посмотрю.
#550 #411005
>>410980

У тебя какие-то невидимые символы в коде программы. Скорее всего ты в редакторе выбрал для перевода строк формат «Windows» который при сохранении в файл вставляет в конец строчки невидимые символы \r\n.

Так как ты разбиваешь текст по символу \n то \r остается в конце строки, и в браузере при выводе он разрывает строку, отсюда такая картинка.

Решение — либо поменяй в редакторе кода формат строк на «unix», который вставляет только \n в конец строки, либо в программе для каждой строчки сделать trim() которая удаляет в том числе символы \r c краев строки.

Вообще, форматов конца строки 3: windows при сохранении помечает перевод строки 2 символами \r\n, unix символом \n, mac символом \r (имеется в виду древние версии макинтошей: современный мак использует unix формат).

Я проверил, скачав код с ideone — все отображается нормально (так как ideone использует unix формат видимо). Попробуй скачать свою программу с ideone и запустить — должно отображаться нормально.

По программе: сделано неплохо, есть небольшие замечания.

> for ($k = 0; $k < 34; $k++) {


Лучше сделать чтобы максимальная длина вычислялась автоматически. Это можно сделать в одну строчку с помощью функций max и array_map.

Маркер ?> в конце программы ставить не требуется.
#551 #411010
>>410892

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

$s = '7123h666';

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

Это ты можешь сделать?

Надо сделать регулярку, которая соответствует цифре 7, за которой идет любые 10 любых цифр. И с помощью if (preg_match...) проверить соответствует ли строка регулярке или нет.

Если что-то непонятно, задавай вопросы. Я поясню или дам ссылку. Регулярки сложная для начинающего тема, но в них надо разбираться.
#552 #411012
>>410892

Вот тебе пример программы, которая проверяет, начинается ли строка с буквы или нет: http://ideone.com/HLi0E8

Изучи его, если что-то непонятно, тоже задавай вопросы.

И обязательно вкидывай решения в тред.
#553 #411015
>>410813

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



Надо найти длину каждой строки и взять максимальное значение. Это умеет например делать функциия max.
#554 #411018
>>410807

Адаптивный дизайн по большому счету сводится к правилу @media в CSS и пары метатегов в html.

http://alexdev.ru/1497/
http://frontender.com.ua/mobile-web/wtf-viewport/
http://frontender.com.ua/mobile-web/useful-mobile-head-elements/

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

У меня есть макет, который нужно сверстать адаптивно, можешь попробовать: http://rghost.ru/59302066 (ну или если у тебя есть свой дизайн, можешь верстать его).

Вот примеры других адаптивных сайтов: http://designmodo.com/responsive-design-examples/

Из твоего поста вроде как ясно, что сами HTML/CSS ты знаешь и простые туториалы тебе не нужны. А как насчет моих простых задачек из «Пути HTML»? Если ты так хорошо знаешь все, ты на каждую не больше пары минут потратишь. А если вдруг у тебя где-то пробелы, это сразу станет видно и ты сможешь это исправить. Не хочешь попробовать свои силы? Вот ссылка: https://gist.github.com/codedokode/58ebc90bd006baf4b35c

Мне кажется, эти задачки очень полезные. Если они тебе выглядят знакомыми, посмотри внимательно: у части я поменял условия, а часть добавил новых.
#555 #411048
>>411018
Спасибо, посмотрю.
#556 #411084
>>408466
Cкачал учебник по пхп, не помню источник. Столько ошибок в коде - ужс, лишние скобки, вот это все. Кто ж так пишет. Не первый раз замечаю, в мануалах на сайтах тоже такое встречается.
#557 #411085
>>410373
Ну я и хочу на сервере майсокл использовать, ибо я слишком туп, чтобы правильно его настроить на компе.
>>410303
Я как-то пытался настроить, но я глаза поломал искать вручную в огромном текстовом редакторе нужные слова для изменения.
#558 #411086
>>410771

>Лучше return false. Как ты это будешь через if проверять?


Конкретно это просто скопипастил из примера. Я потом поменял на return false, но забыл обновить гитхаб.

>Анонима до сих пор не исправил....


А что здесь исправлять, я не помню?

https://github.com/sqghub/uppu.ru
Я переделал генерацию превью и сохранение обложек, но у меня ощущение, что я перебрал там.
#559 #411090
Кстати, на тему .htaccess-эксплоита. Твой вариант совсем не работал из-за rewrite_base и еще чего-то. Вообще там рерайт и не нужен.
http://pastebin.com/Mq9EPiEy
Вот так работает. И мне от этого грустно. Хотя хранение всех файлов в формате id/id-name спасет отца российской демократии.
#560 #411120
>>411005
Сделал вот так http://ideone.com/zKp8G9
Пробовал сохранять и под UNIX и под Win с trim(), всё равно каша в браузере, а в ideone выглядит нормально, пробовал брать другой текст всё равно в строке где заканчивается несколько слов остальная часть строки переезжает на следующую
#561 #411122
>>411120

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

>>411090

Это версии Апача 2.2 и 2.4 так различаются. У меня видимо под 2.2 был.

Вообще, самый надежный способ — хранить файлы на сервере, где есть только какой-нибудь nginx и нет php. Вконтакте вроде так делает.

Ну или переименовывать их для хранения, типа

hello.php.txt

А при отдаче с помощью трбка с rewrite отдавать их по адресу /download/hello.php тем самым получая нормальное имя при сохранении. Мне кажется, стоит так сделать. Все же безопасность важная штука.

Один анон делал через php engine off, а потом оказалось что у него на хостинге эта опция отключена и защита фактически оказалась неработающей. Менять расширение все же надежнее.
#562 #411123
>>411120

> foreach ($newArray as $numStr => $str) {


> $lengthArray[$numStr] = mb_strlen($str, 'UTF-8');


> }


> $maxLength = max($lengthArray);


'utf-8' писать не надо если есть mb_internal-encoding. Также, этот цикл можно заменить на array_map, советую почитать мануал по этой функции.

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

>>411086

> А что здесь исправлять, я не помню?


Не надо для анонимов хранить в базе строку Аноним, а надо хранить NULL.

> - 'year' => $id3['tags']['id3v2']['year'][0],


> + 'artist' => $id3['tags']['id3v1']['artist'][0],



А это почему так? Как я понимаю, там в треке могут быть id3 теги второй версии, а могут быть первой, а могут быть обе.

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

http://www.getid3.org/demo/
http://www.getid3.org/demo/MPEG.mp3.html
http://www.getid3.org/demo/ASF.WMA.wma.html

id3v1, id3v2 — это теги только для mp3. В том же WMA их нет. А вот поле comments.artist есть в обоих примерах. мне кажется из него брать гораздо надежнее.

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


Да не, вроде нормально с виду.

А вот что мне не очень нравится, это изменения в файле static/bootstrap/css/bootstrap-theme.css

Это часть бустстрапа? ты не должен никогда править что-то в сторонних библиотеках. Если хочешь дописать свои стиил, пиши их в своем css файле вне папки бутстрапа. Нельзя править сторонние библиотеки.
#562 #411123
>>411120

> foreach ($newArray as $numStr => $str) {


> $lengthArray[$numStr] = mb_strlen($str, 'UTF-8');


> }


> $maxLength = max($lengthArray);


'utf-8' писать не надо если есть mb_internal-encoding. Также, этот цикл можно заменить на array_map, советую почитать мануал по этой функции.

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

>>411086

> А что здесь исправлять, я не помню?


Не надо для анонимов хранить в базе строку Аноним, а надо хранить NULL.

> - 'year' => $id3['tags']['id3v2']['year'][0],


> + 'artist' => $id3['tags']['id3v1']['artist'][0],



А это почему так? Как я понимаю, там в треке могут быть id3 теги второй версии, а могут быть первой, а могут быть обе.

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

http://www.getid3.org/demo/
http://www.getid3.org/demo/MPEG.mp3.html
http://www.getid3.org/demo/ASF.WMA.wma.html

id3v1, id3v2 — это теги только для mp3. В том же WMA их нет. А вот поле comments.artist есть в обоих примерах. мне кажется из него брать гораздо надежнее.

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


Да не, вроде нормально с виду.

А вот что мне не очень нравится, это изменения в файле static/bootstrap/css/bootstrap-theme.css

Это часть бустстрапа? ты не должен никогда править что-то в сторонних библиотеках. Если хочешь дописать свои стиил, пиши их в своем css файле вне папки бутстрапа. Нельзя править сторонние библиотеки.
#563 #411124
>>411085

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

> Если в процессе установки вылетает ошибка «произошло исключение DateFormat что-то там такое», то пошли лучи проклятия криворуким разработчикам из Oracle и попробуй в настройках Windows временно поменять формат даты на English (US). Или скачай zip-версию и установи руками как описано тут: http://malwselennaiaru.ru/182-ustanovka-mysql-na-windows.html (этот совет был написан в 2014, может он устарел).



Еще раз напомню что многие хостинги не разрешают подсоединяться к базе снаружи хостинга.

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


Ну надо привыкать. Инструменты для программистов, они такие.
#564 #411125
Пытаюсь написать простой парсер html странички. http://pastebin.com/qwgu37pe
Выдает ошибки

> PHP Notice: Undefined variable: html in parser.php on line 23


> PHP Fatal error: Call to a member function find() on a non-object in parser.php on line 23


хотя если убрать функции, то все работает нормально. На php ни разу ничего не писал.
Помоги, анон.
#565 #411126
Сколько там самый дешевый хостинг стоит?
#566 #411128
>>411125

> Undefined variable: html i


Обращение к несуществующей переменной.

>>411126

Самый дешевый — бесплатный. А так, я не в курсе, но думаю при желании можно рублей за 100 в месяц найти, может мождно дешевле. Был какой-то сайт, адрес правда не помню, где было сравнение хостингов.
#567 #411130
>>411128
Бесплатные это где всякие narod.ru? Нет, такие не надо. Еще вопрос, кстати, может показаться вам глупым:
Допустим я на локалхосте запускаю сайт под апачем, когда я апач выключаю, соответственно и сайт не работает. Так вот, такая же система будет и с хостингом, или существуют такие, где ты скидываешь файлы на их сервер и сайт работает независимо от твоего компьютера?
#568 #411132
>>411130

Любой хостинг работает независимо 24 часа в сутки. Насчет выбора, погугли, поищи обзоры хостнгов, где можно на одной странице сравнить параметры и цены.
#570 #411140
>>411130

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


Лолд. Хостинг из названия подразумевает содержание твоего сайта на удалёлённой машине. Если ты покупаешь не впс, то там будет свой апач или энжайникс определённой версии со всем остальным говном вроде mysql и php, тебе надо будет просто закинуть папку с сайтом через ftp. Если впс, то тебе даётся чистый виртуальный сервак на прыщах, можешь туда хоть вишмастер поставить. Всякие апачи и прочую лабуду, разумеется, устанавливаешь сам через ssh.
Не путай с арендой домена, там ты просто название арендуешь.
20 Кб, 663x535
#571 #411144
>>411122
О! спасибо, вставил в foreach где создавал новый массив с построчной длиной ещё и строку $newArray[$numStr] = trim($str, "\r");
теперь в браузере отображается идеально.
87 Кб, 933x431
102 Кб, 760x848
64 Кб, 537x863
#572 #411148
>>410003
Насчет "неправильно скопировал" маловероятно.
Я переписал код , вставив стили прямо в него.
У меня всё работает нормально , я создаю "новый материал" в джумле , всталяю туда этот же код. В template.css к которому он обращается прописал все стили. и ни черта .
Мало того что не работают стили (хотя и отображаются в файрбаге), там ссылка тоже не включается.
>>410078

вот все применяемые стили.

Возможно реально блокируется каким-то js , но я не понимаю как обойти.
#573 #411155
Можно ли решить задачку на считалку через next() и reset()?
#574 #411187
>>411123

>А это почему так? Как я понимаю, там в треке могут быть id3 теги второй версии, а могут быть первой, а могут быть обе.


У меня все работало с v2, а потом внезапно я начал получать массив с тегами v2, в которых было куча всего, но не artist/album/etc.

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


Кк, посмотрю.

>А вот что мне не очень нравится, это изменения в файле static/bootstrap/css/bootstrap-theme.css


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

>>411122

>Мне кажется, стоит так сделать. Все же безопасность важная штука.


Вообще я сразу думал, что стоит их хранить без имени совсем. Форматом id/id, а само имя хранить в бд и отдавать с ним. Но не захотел писать еще один скрипт, хотя понимал, что это правильно.
Бтв, я посмотрел, что делают с такими файлами различные файловые обменники. Одни отдают мне файл "htaccess", другие отдают "htaccess.какаятофигня", один попался, который отказался заливать .htaccess и попросил впихнуть его в архив.

И еще, у меня move_uploaded_file сохраняет имя файла в юникоде. Т.е. русские имена файлов в винде у меня отпадают. Я не знаю, стоит ли уделять этому внимание сейчас.
#575 #411211
>>411155

Не знаю, попробуй.

>>411187

> Т.е. русские имена файлов в винде у меня отпадают.


Если хочкшь чтобы под виндой работало надо в функции работы с файлами передавать имя в win-1251. То есть только под виндой перекодировать и только для передачи в функцию работы сфайлами. Я смотрел код PHP, он вместо юникода под виндой зачем-то использует 8-битную ansi колировку, то есть в России это будет Win 1251, где-нибудь в Европе какая нибудь европейская коировка. Не лучшее решение.

Я тоже не уверен, надо ли. Все равно не входящие в win1251 символы из других языков сохранить не удастся.

Может стоит хранить под id или под латинским именем, а просто отдавать по ссылке с нужным именем за счет rewrite

> что делают с такими файлами различные файловые обменники.


rghost вроде корректно работает тем не менее. Он правда на Руби написан и не использует Апач так что htacccess для него ничего не значит.
#576 #411213
может мне человечским языком объяснить как юзать include, у меня есть скрипт, который считает и возвращает данные и html где эти данные надо юзнуть.
неужели мне в html надо писать include 'script.php';?
#577 #411214
>>411213

Можно из php подключить html через include. Все переменные будут доступны в подключенном скрипте.

Вот что-то на тему http://www.phpinfo.su/articles/practice/shablony_v_php.html
#578 #411241
>>411010
Спасибо, анончик, твоя задача получилась
http://ideone.com/MOsqAu
А вот мое решение задачи из списка http://ideone.com/CEZF1v
Не могу найти ошибку
#579 #411245
>>411241
Скобки это спец-символ, его нужно экранировать обратными слешами
http://ideone.com/Rp8C1i
Плюс у тебя пробелы в номере, а твое регулярное выражение их не принимает, следовательно нужно доделать его немного.
#580 #411246
>>411211
Не понимаю почему делает 2 цикла нормально, потом ансетит 29 ячейку, указатель переходит на 30, потом переходит на несуществующую ячейку, дальше включает проверка isset и next() срабатывает лишний раз http://ideone.com/ZqpPM5
79 Кб, 1071x765
#581 #411254
>>409124
Наконец-от решил последнее задание. У меня от этого РЕФЕРЕНСНЫЙ ГЕНОМ!
#582 #411263
>>411254
Проверка
#583 #411264
Братишки, нужна помощь. Создал форму обратной связи, а теперь к ней нужно прикрутить php-обработчик. Я перепробовал кучу разного говна из интернета, но нихуя не пашет. Кто может помочь-отпишитесь, пожалуйста.
#584 #411266
>>411264
Подробней плиз.
#585 #411279
>>411266
Ну для начала, у меня проблема в том, что через денвер сайт отображается не корректно. Ну а во-вторых: на мыло не приходит сообщение с формы. В общем, если можешь помочь, напиши в скайп mirontsar
#586 #411287
>>411279
>>411266
А не, проблема только с отображением сайта.
#587 #411301
Так-с, как реализовать менюшку для выбора тысяч городов?
#588 #411353
Оп, а когда перекат?
#589 #411433
>>411353

Сегодня наверно.

>>411301

select2.js например или Jquery UI autocomplete

>>411264

Ты бы лучше php (или другой язык) изучал. Не зная php ты далеко не уедешь в этом плане.

>>411254

Ну молодец, что. Знание линукса и командной строки полезно для програмииста.
#590 #411434
>>411241

> твоя задача получилась



Нет, пока не получилась. Посмотри внимательно, внизу ошибки:

> PHP Warning: preg_match(): No ending delimiter '/' found in /home/CRxm4b/prog.php on line 8



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

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

/abc/
~abc~
!abc!
#abc#

Внимательно ли ты читал урок? Там в самом начале большими буквами нарисован пример регулярки.

Также, еще одна ошибка, у тебя там стоит лишний пробел:

"/^7[0-9] {11}"

Получается, твое выражение читается так:

— в начале должна идти цифра 7
— за ней 1 любая цифра
— за ней ровно 11 пробелов

Если бы пробела не было, конструкция {11} относилась бы в цифрам в квадратных скобках и было бы так:

— в начале должна идти цифра 7
— за ней 11 любых цифр

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

После этой задачи советую решить задачку на регулярки чуть посложнее:

Дан текст, надо проверить есть ли в нем дата, если есть то вывести ее. Дата выглядит как «3 марта», то есть день, за ним идет месяц. Между днем и месяцем может быть 1 или больше пробелов. При этом фраза вроде «3 маяка» не должна восприниматься как «3 мая».

Не забудь поставить в конце регулярки флаг u иначе русские буквы правильно работать не будут.
#590 #411434
>>411241

> твоя задача получилась



Нет, пока не получилась. Посмотри внимательно, внизу ошибки:

> PHP Warning: preg_match(): No ending delimiter '/' found in /home/CRxm4b/prog.php on line 8



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

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

/abc/
~abc~
!abc!
#abc#

Внимательно ли ты читал урок? Там в самом начале большими буквами нарисован пример регулярки.

Также, еще одна ошибка, у тебя там стоит лишний пробел:

"/^7[0-9] {11}"

Получается, твое выражение читается так:

— в начале должна идти цифра 7
— за ней 1 любая цифра
— за ней ровно 11 пробелов

Если бы пробела не было, конструкция {11} относилась бы в цифрам в квадратных скобках и было бы так:

— в начале должна идти цифра 7
— за ней 11 любых цифр

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

После этой задачи советую решить задачку на регулярки чуть посложнее:

Дан текст, надо проверить есть ли в нем дата, если есть то вывести ее. Дата выглядит как «3 марта», то есть день, за ним идет месяц. Между днем и месяцем может быть 1 или больше пробелов. При этом фраза вроде «3 маяка» не должна восприниматься как «3 мая».

Не забудь поставить в конце регулярки флаг u иначе русские буквы правильно работать не будут.
#591 #411435
>>411241

> Не могу найти ошибку


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

> [0-9] {7}


Та же ошибка. У тебя число повторений, {7}, относится к пробелу а не к цифре. То есть у тебя регулярка значит:

— должна идти цифра
— за ней ровно 7 пробелов
#592 #411437
>>411241

Этот >>411245\t анон правильно написал про скобки. Если ты хочешь сказать «в этом месте должна быть скобка», то надо писать

\\(

так как скобка является спецсимволом в регулярках. Вот полный список символов которые надо экранировать бекслешем: http://php.net/manual/ru/regexp.reference.meta.php
#593 #411439
>>411246

По моему тут ошибка:

> reset($newArray);



> for ($s = 1; $s < $z; $s++) {


> next($newArray);


> }


Зачем этот цикл? Если ты вышел за границу массива, надо просто поставить указатель на начало и продолжать внешний цикл по $i, а ты дополнительно сдвигаешь указатель и он куда-то не туда начинает указывать.

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

Вот варианты:

— Ты можешь перенумеровывать массив после удаления элемента через array_values
— ты можешь удалять элемент по его номеру (не по ключу а именно по номеру) функцией array_splice
— ты можешь использовать обход массива через foreach с уменьшением счетчика, если он дошел до нуля, удаляем текущий элемент
— ты можешь использовать двусвязный список, обходить его и удалять каждый N-й элемент. В PHP есть класс для организации такого списка, но увы, для его исплоьзования надо знать ООП: http://php.net/manual/ru/class.spldoublylinkedlist.php

Явное лучше неявного и переменная-счетчик гораздо удобнее возни с current и reset.
#594 #411479
>>411125
phpQuery используешь?
#595 #411481
>>411125
А бля, я >>411479 тупанул, ты пытаешься использовать его, но у тебя нихера не выходит.

>> PHP Fatal error: Call to a member function find() on a non-object in parser.php on line 23


В общем качаешь сначала саму библиотечку, например в этой статье есть прямая ссылка: http://habrahabr.ru/post/69149/
Ну далее скидываешь её в папку с пхп или в папку с твоим непосредственно сайтом и в своём быдлокоде её подключаешь
с помощью:

> require ('phpQuery/phpQuery.php');


Как проделаешь все это - отпишись.
#596 #411498
ОПчик накидай ещё задачек по-типу банкомата, перевернутого текста и тд
#597 #411516
>>411481
Опять хуйни насоветовал, ты просто передаешь в функцию неправильную переменную, что-то упущено в цепочке кароче. Загугли примеры лучше в интернетах, и посмотри как в них сделано.
#598 #411525
У меня есть объект DataTime, как мне его впихнуть в БД в поле с типом Data?
#599 #411526
>>411498

Держи, очень простая: http://codeforces.ru/problemset/problem/1/A
Еще одна очень простая: http://codeforces.ru/problemset/problem/4/A

Это для быстрой разминки. Если ты их решил то переходи к этой:

http://codeforces.ru/problemset/problem/71/A — там написано что буквы могут быть только латинскими, это слишком просто, сделай чтобы буквы были из любого алфавита. Также, пусть на вход даются не отдельные слова, а одна строка с текстом — твоя программа должна сама найти и заменить в ней длинные слова.

Тебе может помочь эта информация: http://php.net/manual/ru/regexp.reference.unicode.php

Если ты и эту решил, давай возьмем еще посложнее: http://codeforces.ru/problemset/problem/50/A

Не смотри что задачи с codeforces, их там решило больше 10 000 человек, так что они элементарные.

Ну и если ты решил задачи из учебника и не показывал решение, то советую показать. Может ты думаешь, что все верно. а там ошибки.
#600 #411528
>>411525

Есть метод format, для MySQL формат Y-m-d H:i:s

>>411516

я думаю, ему надо php изучить в первую очередь.
#601 #411529
>>411528
А если без привязки к конкретной БД?
uppu.ru #602 #411530
>>411187

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

> `date` DATETIME NOT NULL DEFAULT NOW()


Не работает. Пробовал загрузить свой же дамп? Надо писать DEFAULT CURRENT_TIMESTAMP, выражения в DEFAULT нельзя использовать.

> <?php include('/scripts/scripts.php'); ?>


Это не работает. Слеш в начале значит что это абсолютный путь, то есть путь от корня диска или файловой системы (в линукс к примеру). Естественно, у меня там этого скрипта нет, так как полный путь это что-то вроде /var/www/test.dev/scripts/scripts.php

Более того, ты должен подключать этот файл не в шаблоне а в index.php

Насчет формы поиска: в бутстрапе есть готовая форма для верхней панельки: http://getbootstrap.com/2.3.2/components.html#navbar

Не используй <?, используй <?php либо <?= так как короткий открывающий тег может быть выключен: http://php.net/manual/ru/ini.core.php#ini.short-open-tag

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

> Ошибка! Ошибка сохранения файла. exception 'ErrorException' with message 'mkdir(): Permission denied' in /var/www/test.dev/www/model/FileMapper.php:101 .....



> if (!mkdir("userFiles/" . ($file->getId()), 0, true)) {


Ты создаешь папку с разрешением = 0 то есть полный запрет доступа. Соответственно он не может файл туда переместить. Почитай про права под линуксом:

https://ru.wikipedia.org/wiki/Chmod
http://www.opennet.ru/base/sys/file_access.txt.html

При этом помни что в php чтобы написать 8-чное число, надо поставить ноль в начале, например: 0777

Нет никакой валидации комментариев. Я отправляю пустую форму и получаю пустой комментарий.

У тебя XSS при выводе email в комментарии. Попробуй вставить комментарий с email = hello<s>world (если браузер не позволяет, можно вставить в базу).

В комментарии не работают переводы строк и весь текст пишется без разрывов строк.

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

После постинга комментария надо редиректить чтобы страница прокручивалась к комментарию, добавив к ссылке для редиректа #comment-1234567 (и прописав это в аттрибуте id у комментария).

Чтобы картинки скачивались, а не открывались в браузере, надо добавить через htaccess заголовок Content-Disposition: attachment к файлам внутри userFiles

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

Для gif не создаются превьюшки.

Если загрузить маленькую картинку, то она ставится в качестве превьюшки. Но ссылка прописана неверно и вместо /userFiles/.... мы получаем /download/X/userFiles/... и картинка не отображается.

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

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

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

Если загрузить mp3 файл без ID3v1 тегов то вываливается исключение: Ошибка сохранения файла. exception 'ErrorException' with message 'Undefined index: id3v1' in /var/www/test.dev/www/model/media/MediaDataManager.php:36

Если загрузить wav файл то вываливается Ошибка! Ошибка сохранения файла. exception 'ErrorException' with message 'Undefined index: tags' in /var/www/test.dev/www/model/media/MediaDataManager.php:36

Для формы комментария надо сделать защиту от CSRF через передачу токена. Токен можно хранить например в куках.

Ты исплоьзуешь функцию Query в Sphinx API. У нее в описании написано: http://sphinxsearch.com/wiki/doku.php?id=php_api_docs#query_query_index

что она возвращает false при ошибке. Ты не проверяешь результат возврата функции на ошибку и соответственно не узнаешь о ней. Надо проверять. Получить текст ошибки можно через GetLastError( ).
uppu.ru #602 #411530
>>411187

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

> `date` DATETIME NOT NULL DEFAULT NOW()


Не работает. Пробовал загрузить свой же дамп? Надо писать DEFAULT CURRENT_TIMESTAMP, выражения в DEFAULT нельзя использовать.

> <?php include('/scripts/scripts.php'); ?>


Это не работает. Слеш в начале значит что это абсолютный путь, то есть путь от корня диска или файловой системы (в линукс к примеру). Естественно, у меня там этого скрипта нет, так как полный путь это что-то вроде /var/www/test.dev/scripts/scripts.php

Более того, ты должен подключать этот файл не в шаблоне а в index.php

Насчет формы поиска: в бутстрапе есть готовая форма для верхней панельки: http://getbootstrap.com/2.3.2/components.html#navbar

Не используй <?, используй <?php либо <?= так как короткий открывающий тег может быть выключен: http://php.net/manual/ru/ini.core.php#ini.short-open-tag

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

> Ошибка! Ошибка сохранения файла. exception 'ErrorException' with message 'mkdir(): Permission denied' in /var/www/test.dev/www/model/FileMapper.php:101 .....



> if (!mkdir("userFiles/" . ($file->getId()), 0, true)) {


Ты создаешь папку с разрешением = 0 то есть полный запрет доступа. Соответственно он не может файл туда переместить. Почитай про права под линуксом:

https://ru.wikipedia.org/wiki/Chmod
http://www.opennet.ru/base/sys/file_access.txt.html

При этом помни что в php чтобы написать 8-чное число, надо поставить ноль в начале, например: 0777

Нет никакой валидации комментариев. Я отправляю пустую форму и получаю пустой комментарий.

У тебя XSS при выводе email в комментарии. Попробуй вставить комментарий с email = hello<s>world (если браузер не позволяет, можно вставить в базу).

В комментарии не работают переводы строк и весь текст пишется без разрывов строк.

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

После постинга комментария надо редиректить чтобы страница прокручивалась к комментарию, добавив к ссылке для редиректа #comment-1234567 (и прописав это в аттрибуте id у комментария).

Чтобы картинки скачивались, а не открывались в браузере, надо добавить через htaccess заголовок Content-Disposition: attachment к файлам внутри userFiles

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

Для gif не создаются превьюшки.

Если загрузить маленькую картинку, то она ставится в качестве превьюшки. Но ссылка прописана неверно и вместо /userFiles/.... мы получаем /download/X/userFiles/... и картинка не отображается.

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

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

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

Если загрузить mp3 файл без ID3v1 тегов то вываливается исключение: Ошибка сохранения файла. exception 'ErrorException' with message 'Undefined index: id3v1' in /var/www/test.dev/www/model/media/MediaDataManager.php:36

Если загрузить wav файл то вываливается Ошибка! Ошибка сохранения файла. exception 'ErrorException' with message 'Undefined index: tags' in /var/www/test.dev/www/model/media/MediaDataManager.php:36

Для формы комментария надо сделать защиту от CSRF через передачу токена. Токен можно хранить например в куках.

Ты исплоьзуешь функцию Query в Sphinx API. У нее в описании написано: http://sphinxsearch.com/wiki/doku.php?id=php_api_docs#query_query_index

что она возвращает false при ошибке. Ты не проверяешь результат возврата функции на ошибку и соответственно не узнаешь о ней. Надо проверять. Получить текст ошибки можно через GetLastError( ).
#603 #411531
>>411434
Я исправил пробелы и поставил слеш в конце, но он все равно не хочет видеть эту сраную семерку. http://ideone.com/9K6pA9
#604 #411532
>>411529

В разных БД разный синтаксис. Но в любом случае ты дату вставляешь в запрос каким-то образом, и тут тебе понадобится метод format.
#605 #411533
>>411531

Он должен находить номера из 11 цифр. А посчитай внимательно, сколько цифр ожидает увидеть твоя регулярка.

Также, она пропускает длинннющие номера: http://ideone.com/IO9jAV
#606 #411538
>>411498

Вот еще неплохую задачу нашел: http://codeforces.ru/problemset/problem/219/A
#607 #411561
>>411526
Вот первые две http://ideone.com/4e3woa
71 Кб, 873x538
70 Кб, 1233x524
41 Кб, 1083x351
13 Кб, 1246x20
#608 #411584
>>411148
Решено! Может кому-то поможет.
В общем , встроенный в джумлу редактор менял код , зачем то выводя <p> вне ссылки <a> .
Помогло принудительное отключение редактора.
Сейчас решил нахуй удалить форму акции (pic1), в шаблоне закоментил (pic2) , она вместо того чтобы исчезнуть превратилась в пикрелейтед 3.
За этот кусок теперь отвечает что-то под название simpleform2 , его вообще не могу найти
1865 Кб, Webm
sage #609 #411596
#610 #411601
Ребята, подскажите простую книжку на ПХП (хотя можно и вместе с html/css). Короче нужны тупо основы, а потом буду читать "Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования" (как-раз должна выйти новая редакция). Спасибо.
#611 #411617
>>411601
Толку не выйдет
#612 #411620
Анончики, не проходите мимо. Тыкните, пожалуйста, где можно почитать про техники избавления от повторяющегося кода. Вот, например, тут http://jsfiddle.net/qs95acax/ мне пришлось наклепать целых 5 однотипных функций (при нажатии на определенный элемент <a> он становится красным а остальные серого цвета). Как всё уместить в одну функцию? Т.е. как создать ф-цию такого типа:

Функция (x) {
если нажимаем на элемент x, то делаем его красным;
остальные элементы делаем серым цветом;
}

В общем, я не один раз уже сталкивался с подобной хуйней, кто более опытный, помогите, пожалуйста.
sage #613 #411622
>>411620
ебать ты даун
работаешь, или что-то для себя пилишь?
#614 #411623
>>411622
Учусь. А че сразу даун?
sage #615 #411625
>>411623
прости
о передаче параметров в функции знаешь?
#616 #411626
>>411625
Про передачу параметров в аргумент функции знаю, но не знаю как реализовать в данном примере.
#617 #411627
>>411620
Функции и есть техника для избавления от повторяющего кода
sage #618 #411629
>>411626
заменяеш повторяющийся места на параметр

function ChangeColor_x(x) {
\tfor (i=0; i<items.length; i++) {
\t\titems.style.color = "grey";
\t\titems[x-1].style.color = "red";
\t\t}
\t}

параметр передаётся при вызове
#619 #411632
>>411629
Спасибо, анон! Только нужно было так:

items.style.color = "grey";\t
items[x].style.color = "red";

Пофиксил, добра!
#620 #411634
>>411632
Фикс
items.style.color = "grey";\t
items[x].style.color = "red";
#621 #411635
if (!preg_march(...)){
}
будет испольняться если строка не соотвествует заданому шаблону, верно?
#622 #411636
>>411635
Верно
#623 #411642
>>411617
Чому?
#624 #411646
>>411642
Личный опыт. Зандстра это не та книжка, которую стоит читать второй по php. Не много в голове останется. Но если ты конечно уже на чем-то пишешь, тогда не знаю. Но тогда тебе не нужна книжка по основам, тебе нужна документация.
#625 #411653
>>411646
Вообще странная книга. Я чуть-чуть пробовал её читать, но даже с моими малыми знаниями она выглядела как некое пособие "как перестать перестать быдлокодить для опытных быдлокодеров".
#626 #411655
>>411646
>>411653
Ну тогда, господа, посоветуйте чего для начала, пожалуйста.
#627 #411659
>>411655
Учебник в оп-посте, очевидно же.
#628 #411661
>>411655
Посмотри оп-пост
139 Кб, 688x512
#629 #411663
Няши, это снова я, и мне нужен краткий мануал по mysql, без воды и с упражнениями. Базовые команды знаю, юзаю консольку в винде(как труе программист, лол). Тот хайлоадо-анон, насоветовал мне каких то рецептов, а я для новичков просил. Котерова почти всего прочитал, окромя ооп, dom'ов, ajax'ов, mysql(устарел же, только mysqli или PDO, не?). Сейчас начну смотреть 3-ий левел от специалиста, к кончу хочу изучить БД и начать что-нибудь пилить.
16 Кб, 910x161
#630 #411665
Анон, а вот тут я охуел. Что с этим делать?
mb_iternal_encoding('utf-8'); в php
charset = 'utf-8' в форме.

>>411663
Хм, не знаю, что тебе посоветовать. Я имел понятия о sql(в 14 лет интересовался sql-inj) и начал писать сразу. Юзаю PDO, брат жив.
#631 #411677
>>411663
концу
Yii1 #632 #411683
Вопрос 1:
в views/layouts/main есть <div id="mainmenu"> для вывода менюшки наверху экрана. Я пытался добавить свои ссылки по подобию, но облажался.
Хотел: http://127.0.0.1/yii/music/index.php?r=gii
Написал: array('label'=>'Gii Module', 'url'=>array('gii'))
Получил: http://127.0.0.1/yii/music/index.php?r=<текущий модуль>/gii

Как писать нормально ссылки?

Вопрос 2:
В представлении захерачил отображении картинки таким образом: <img width="50" height="50" src="http://127.0.0.1/yii/music/images/cover/<?php echo CHtml::encode($data->cover); ?>">

Вопрос: как бы сделал Yii-программист?
#633 #411696
>>411526
>>411561
Сделал только что остальные, нужны задачки посложнее
http://ideone.com/f5vT2t
http://ideone.com/L13yxC
#634 #411702
>>411530

>Пробовал загрузить свой же дамп? Надо писать DEFAULT CURRENT_TIMESTAMP


Хм, у меня работает.

>Это не работает. Слеш в начале значит что это абсолютный путь


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

>Более того, ты должен подключать этот файл не в шаблоне а в index.php


Хорошо.

>Насчет формы поиска: в бутстрапе есть готовая форма для верхней панельки


А у меня нет таких классов. Наверное, это связано с этим

>Heads up! These docs are for v2.3.2, which is no longer officially supported. Check out the latest version of Bootstrap!



>Не используй <?, используй <?php либо <?= так как короткий открывающий тег может быть выключен


А при выключенных коротких тегах <?= работает?

>Ты создаешь папку с разрешением = 0 то есть полный запрет доступа. Соответственно он не может файл туда переместить. Почитай про права под линуксом:


Шиндоус же. Я вписал 0 и был доволен. В линуксе нужно 0777 и все?

>У тебя XSS при выводе email в комментарии.


500 раз, я же говорил.
Бтв, в тексте коммента тоже.

>Нет никакой валидации комментариев.


Это да. По хорошему и имейл стоит проверять, но можно же и не проверять?

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


Это я просто до этого хранил в формате "x кб" и забыл переделать это. Косяк.

>В комментарии не работают переводы строк и весь текст пишется без разрывов строк.


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

>что она возвращает false при ошибке. Ты не проверяешь результат возврата функции на ошибку и соответственно не узнаешь о ней.


В общем то у меня там стоит if (data == 0), что сработает, при возвращении false. Но, я так понимаю, надо выводить что-то в лог?

>Для формы комментария надо сделать защиту от CSRF через передачу токена. Токен можно хранить например в куках.


Это вообще жуть. Я ни слова не понял. Но разберусь.

А с картинками-аудиофайлами я потом посмотрю, что сделать.
#634 #411702
>>411530

>Пробовал загрузить свой же дамп? Надо писать DEFAULT CURRENT_TIMESTAMP


Хм, у меня работает.

>Это не работает. Слеш в начале значит что это абсолютный путь


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

>Более того, ты должен подключать этот файл не в шаблоне а в index.php


Хорошо.

>Насчет формы поиска: в бутстрапе есть готовая форма для верхней панельки


А у меня нет таких классов. Наверное, это связано с этим

>Heads up! These docs are for v2.3.2, which is no longer officially supported. Check out the latest version of Bootstrap!



>Не используй <?, используй <?php либо <?= так как короткий открывающий тег может быть выключен


А при выключенных коротких тегах <?= работает?

>Ты создаешь папку с разрешением = 0 то есть полный запрет доступа. Соответственно он не может файл туда переместить. Почитай про права под линуксом:


Шиндоус же. Я вписал 0 и был доволен. В линуксе нужно 0777 и все?

>У тебя XSS при выводе email в комментарии.


500 раз, я же говорил.
Бтв, в тексте коммента тоже.

>Нет никакой валидации комментариев.


Это да. По хорошему и имейл стоит проверять, но можно же и не проверять?

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


Это я просто до этого хранил в формате "x кб" и забыл переделать это. Косяк.

>В комментарии не работают переводы строк и весь текст пишется без разрывов строк.


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

>что она возвращает false при ошибке. Ты не проверяешь результат возврата функции на ошибку и соответственно не узнаешь о ней.


В общем то у меня там стоит if (data == 0), что сработает, при возвращении false. Но, я так понимаю, надо выводить что-то в лог?

>Для формы комментария надо сделать защиту от CSRF через передачу токена. Токен можно хранить например в куках.


Это вообще жуть. Я ни слова не понял. Но разберусь.

А с картинками-аудиофайлами я потом посмотрю, что сделать.
#635 #411708
>>411561

Надо было конечно не только функцию написать, а еще ее вызов и echo, а то неудобно как-то.

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

По задаче про площадь: возьмем площадь 9×9 и плитку 8×8. Твоя программа посчитает что надо 2 плитки. А теперь нарисуй это на листочке и попробуй покрыть 2 плитками площадь.

Увы, пока неверно. Старайся дальше.

И вот еще неприавльное место:

> \t$half = $w / 2;\t


>if (is_int($half))


Это неправильно. В PHP числа могут быть представлены в 2 видах: int или float. int может хранить только небольшие целые числа, а float любые, в том числе и целые:

$a = 3.0;
var_dump($a); // float

http://ideone.com/G0KgWJ

Потому проверка in_int не гарантирует ничего, так как целое число может быть и типа float. Проверять делится ли число на 2, надо взяв остаток от деления на 2. Проверять целое ли число надо сравнив его с окргуленной версией самого себя и найдя разницу (так как в компьютере неточная приближенная арифметика то надо проверить что разница меньше определенной величины. Просто сравнивать что числа равны не стоит).
#636 #411713
>>411584

> зачем то выводя <p> вне ссылки <a> .


Ты бы стандарт HTML почитал. В HTML4 внутри a нельзя класть блочные ээлементы (в HTML5 стало можно но другие ограничения остались). Ты не изучил даже основы HTML, а уже говоришь что редактор плохой.

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

>>411596

О, крутые «косимиси», интересно получилось. Хотя как-то у тебя все вырождается в движение по кругу. И проверки на коллизии нету, несколько мышек находятся в одной точке пространства. Ну и еще у мышки радиус зрения ограничен, так что они не должны в центре совершать колебания, а должны гулять не замечая кошек. Ну и непонятно, съели они хоть оду мышку когда окружили или нет. Надо было какой-нибудь эффект сделать при съедении.

Ну и кружочки наверно стоило сгладить, а то зубчатые края бросаются в глаза.
#637 #411714
>>411620

Я вижу ты не очень знаешь яваскрипт. Не хочешь ли порешать наши задачки, которые помогут тебе исправить пробелы в знаниях? Я проверю решения и подскажу если ты где-то запутался: https://gist.github.com/codedokode/ce30e7a036f18f416ae0

Ну и то, что ты делаешь, конечно надо делать не так. Удобнее работать не со стилями, а менять css классы на элементе. Ну а в новых браузерах такая штука вообще делается на CSS3 без яваскрипта. В моем «Пути HTML» как раз такая задача есть: https://gist.github.com/codedokode/58ebc90bd006baf4b35c

>>411622

Не ругайся в треде.

>>411653

Это может быть и так, но понимаешь, многие другие книги «для начинающих» это «как начать быдлокодить», а не «как начать программировать». Потому я ее и рекомендую, что она правильному учит. ну да, хотя может быть она не для начинающих.

>>411663

У меня есть самый краткий мануал (который правда тольком ничего не обхясняет, а только дает список слов), ссылки на теорию и задачки, которые я советую решить и выложить на sqlfiddle. Задачки на мой взгляд неплохие: https://gist.github.com/codedokode/10539213
#638 #411715
>>411708
Сперва и хотел дважды разделить пополам, но потом стал перечитывать условие задачи и удалил второе деление. Вот ещё по задаче на К-строку http://ideone.com/IozJXd
#639 #411716
>>411663

> окромя ооп, dom'ов, ajax'ов


Вообще зря. У меня в учебнике в последней главе есть объяснение ООП, которое даже полный идиот поймет перечитав несколько раз, и задачки на ООП. НУ и я готов подсказать и дать ссылочку. А то без ООП ты в наши дни никуда не уйдешь: фреймворки все на ООП.

> mysql(устарел же, только mysqli или PDO, не?


Верно, и я советовал бы PDO. У mysqli есть крутые фичи, но наичнающий в них только запутается.

Ну и насчет пилить что-то, у нас есть 2 годных задачи:

проще: https://gist.github.com/codedokode/d7e7f11449fc3bcb24b4
сложнее https://gist.github.com/codedokode/9424217
#640 #411725
>>411708
http://ideone.com/ulJYel
это по арбузам.
А по задачке покрытия площади я не согласен. Вот в условии: "Какое наименьшее количество плит понадобится для замощения площади? Разрешено покрыть плитами большую поверхность, чем театральная площадь, но она должна быть покрыта обязательно. Гранитные плиты нельзя ломать или дробить, а разрешено использовать только целиком. Границы плит должны быть параллельны границам площади." то-есть покрыть площадь надо обязательно и можно покрыть большую площадь, если взять твое условие: возьмем площадь 9×9 и плитку 8×8., одна плитка не покроет, а это уже противоречие условиям задачи (нельзя оставлять непокрытую площадь), а вторая покроет намного большую площадь чем нужно, но это не противоречит условиям задачи напрямую, там сказано, что можно замостить площадь больше чем нужно, и так как плитку ломать нельзя, тогда думаю что моё решение удовлетворяет условия задачи.
#641 #411728
>>411665

файл с исходником в utf-8 (без BOM) сохранен?

>>411683

Почитай доки: http://www.yiiframework.com/doc/guide/1.1/ru/topics.url — там нет ответа?

Особенно это:

> Подсказка: Адрес URL, генерируемый методом createUrl является относительным. Для того, чтобы получить абсолютный адрес, нужно добавить префикс, используя Yii::app()->request->hostInfo, или вызвать метод createAbsoluteUrl.



> захерачил отображении картинки таким образом:


ну вот теперь сам подумай, выложишь ты сайт на хостинг, откроет его кто-то и что он увидит по адресу 127.0.0.1 вместо картинки? Я думаю ничеого если у него Апач не установлен.

Во-первых, ты не обязан писать полный URL включая пртокол, хост и тд. Можно исплоьзовать короткий относительный URL: http://htmlbook.ru/samhtml/ssylki/absolyutnye-i-otnositelnye-ssylki

http://www.uamedwed.com/web/absolyutnyj-i-otnositelnyj-put-k-fajlam.htm

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

>>411696

Ну давай проверим.

> длинные слова


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

ну и echo и вызов функции допиши чтобы было видно что работает.

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

Вот новые задачки:

Попроще: http://codeforces.ru/problemset/problem/433/A (если что я не знаю, откуда персонажи в задаче)
Среднее: задачи 2 и 5 отсюда: http://archive-ipq-co.narod.ru/i-am-smart.html
Посложнее: http://codeforces.ru/problemset/problem/476/B

(там у меня на примете есть еще задачи)
#641 #411728
>>411665

файл с исходником в utf-8 (без BOM) сохранен?

>>411683

Почитай доки: http://www.yiiframework.com/doc/guide/1.1/ru/topics.url — там нет ответа?

Особенно это:

> Подсказка: Адрес URL, генерируемый методом createUrl является относительным. Для того, чтобы получить абсолютный адрес, нужно добавить префикс, используя Yii::app()->request->hostInfo, или вызвать метод createAbsoluteUrl.



> захерачил отображении картинки таким образом:


ну вот теперь сам подумай, выложишь ты сайт на хостинг, откроет его кто-то и что он увидит по адресу 127.0.0.1 вместо картинки? Я думаю ничеого если у него Апач не установлен.

Во-первых, ты не обязан писать полный URL включая пртокол, хост и тд. Можно исплоьзовать короткий относительный URL: http://htmlbook.ru/samhtml/ssylki/absolyutnye-i-otnositelnye-ssylki

http://www.uamedwed.com/web/absolyutnyj-i-otnositelnyj-put-k-fajlam.htm

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

>>411696

Ну давай проверим.

> длинные слова


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

ну и echo и вызов функции допиши чтобы было видно что работает.

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

Вот новые задачки:

Попроще: http://codeforces.ru/problemset/problem/433/A (если что я не знаю, откуда персонажи в задаче)
Среднее: задачи 2 и 5 отсюда: http://archive-ipq-co.narod.ru/i-am-smart.html
Посложнее: http://codeforces.ru/problemset/problem/476/B

(там у меня на примете есть еще задачи)
#642 #411729
>>411715

Я советую не возвращать из функций строки вроде "Sorry, your string is invalid\n" так как это невозможно проверть с помощью if. Лучше вернуть например false или -1.

Не принимает строку print_r(doKstring('аббаббаббабб', 4)); хотя она верная

Также, открой код по своей ссылке и посмотри внимательно внизу:

> PHP Notice: Use of undefined constant абвавбабв - assumed 'абвавбабв' in /home/Nq1VYY/prog.php on line 35


> PHP Notice: Undefined offset: 9 in /home/Nq1VYY/prog.php on line 25


> PHP Notice: Undefined variable: new_string in /home/Nq1VYY/prog.php on line 29


Это надо исправить. Ты по моему кавычки забыл вокруг строки.

Если ты запускал код на локалхосте и не видел ошибок то у тебя отключен их вывод.

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

- ошибки сохраняются в лог ошибок. Можно открыть его и почитать. Если ты запускаешь код на локалхосте, у себя, то лог хранится в папке Апача (обычно она называется logs) и имеет название вроде error.log (в линуксе в папку /var/log/apache2 ). Если на хостинге — там либо есть файл error.log либо раздел в панели управления, где лог можно посмотреть

- также, ты можешь включить отображение ошибок. Открой файл php.ini, поставь там display_errors = On и error_reporting = E_ALL и перезапусти сервер. Теперь ошибки должны выводиться на экран.

Проверить, работает ли вывод ошибок, можно запустив скрипт содержающий обращение к несуществующей переменной вроде echo $sdgasdad; и проверив, выведется ошибка или нет. Если все верно, то должна вывестись.
#643 #411731
>>411725

>а вторая покроет намного большую площадь чем нужно, но это не противоречит условиям задачи напрямую, там сказано, что можно замостить площадь больше чем нужно, и так как плитку ломать нельзя, тогда думаю что моё решение удовлетворяет условия задачи.
Правильно, ты можешь покрыть большую площадь чем надо, но непокрытого места не должно быть. Возьми листочек и нарисуй как ты 2 плитками 8×8 покроешь площадь 9×9. Это невозможно.

Требуется именно покрыть всю площадь или больше. Потому твое решение неверное, так как оно не покрывает. То что площадь 2 плиток больше чем требуется еще не значит что ими можно замостить площадь.
#644 #411732
>>411728

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


упс, что-то я просмотрел, завтра уже переделаю на поиск длинных слов в тексте, что-то я сегодня очень рассеянный.
#645 #411733
>>411732 >>411728
Ну а сам скрипт примененный к длинному слову верный? перед ним тогда выстрою поиск длинных слов
#646 #411734
>>411731
Тогда надо как минимум 4 плитки, видимо придется не от площади отталкиваться, а от длины сторон площади и плитки
#647 #411742
Аноны, что-то мы засиделись тут. Переходите в новый тред: >>411701

>>411733

Да

>>411734

Да
#648 #411827
>>411728

> Yii::app()->request->hostInfo


то, что надо

по поводу вопроса 1, надо было всего лишь добавить слеш перед названием модуля
#649 #412808
>>411714

>>>411620



>Я вижу ты не очень знаешь яваскрипт. Не хочешь ли порешать наши задачки, которые помогут тебе исправить пробелы в знаниях? Я проверю решения и подскажу если ты где-то запутался: https://gist.github.com/codedokode/ce30e7a036f18f416ae0



ОП, покажи, пожалуйста, пример, где выполняется та же самая задача только с заменой классов (речь идет о той, которая в этой ссылке http://jsfiddle.net/zybs794e/1/) Я не могу присвоить элементу "x" определенный стиль с цикле.
561 Кб, 643x873
#650 #414203
Тред утонул или удален.
Это копия, сохраненная 26 декабря 2014 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски