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

Клуб изучающих PHP #25

 !xnn2uE3AU. Пнд 09 Июн 2014 13:39:31  #1 №360376 
1402306771864.png

А давайте в этом ИТТ треде будем изучать PHP (и некоторые другие языки для веба), решать задачки и даже делать простые сайтики! Зачем? Кто-то хочет научиться программировать, кто-то хочет изучить этот язык, кто-то хочет просто размять мозги и заняться чем-то полезным.

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

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

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

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

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

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

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

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

Начинающим: Никсон Р. - Создаем динамические веб-сайты с помощью PHP
Сайт phptherightway
По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
Мануал по PHP — http://www.php.net/manual/ru/langref.php
JS: learn.javascript.ru
Позиционирование в CSS: http://softwaremaniacs.org/blog/category/primer/ (снизу вверх).
MySQL: https://gist.github.com/codedokode/10539213

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

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

Где архивы предыдущих тредов? Известно, где, на 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

Если я решу твой учебник, я смогу легко устроиться на работу и стать старшим программистом в мои 23? Нет. Учебник — лишь первый шаг в начале пути.

В общем, давайте начинать уже!

Пиши верно !xnn2uE3AU. Пнд 09 Июн 2014 13:42:02  #2 №360378 
1402306922654.png


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

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

Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт 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 жизнь может быть намного проще (еще в них есть автодополнение, автоматическая проверка кода и подсветка ошибок, навигация по файлам и функциям и много чего еще).

Основные правила

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


скобки в for и if/else ставятся так (египетские скобки):


if (...) {
// ...
} else {
// ...
}
for (...) {
// .....
}


у определений функций и классов так:


function bakeCookies(...)
{
// ...
}


Официальные ссылки

В PHP есть система стандартов с названием PSR. Вот стандарты, относящиеся к оформлению кода:

http://www.php-fig.org/psr/psr-1/
http://www.php-fig.org/psr/psr-2/
Аноним Пнд 09 Июн 2014 14:03:58  #3 №360381 

https://ideone.com/i0Qwdn

Ничего не понятно.

Аноним Пнд 09 Июн 2014 14:12:41  #4 №360385 

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

!xnn2uE3AU. Пнд 09 Июн 2014 14:23:41  #5 №360389 

>>360381

Непонятно потому, что ты поленился нормально вывод сделать. Вот если сделать так, например: https://ideone.com/vuKIgt — понятнее? Сразу видно какую комбинацию мы перебираем и сколько она нам дает в сумме, а за счет отступов видно, на каком мы уровне вложенности и когда входим/выходим из функции.

Я еще уменьшил сумму из-за ограничений ideone на объем выводимого текста.

!xnn2uE3AU. Пнд 09 Июн 2014 14:24:49  #6 №360392 

>>360385

Фейсбук/вконтакте, хабрахабр.

Аноним Пнд 09 Июн 2014 14:32:52  #7 №360397 

>>360392
А на какие работы можно устроиться с пхп? Только фронт-энд?

!xnn2uE3AU. Пнд 09 Июн 2014 14:46:13  #8 №360402 

>>360397

PHP это обычно бекенд. Фронтенд — это яваскрипт.

http://spb.hh.ru/search/vacancy?text=php&clusters=true
http://brainstorage.me/jobs?q=php

Посмотри сам.

!xnn2uE3AU. Пнд 09 Июн 2014 14:49:35  #9 №360403 
1402310975993.jpg

>>360402

Алсо,

http://brainstorage.me/jobs?q=haskell
http://spb.hh.ru/search/vacancy?text=haskell&clusters=true

> Найдено 10 вакансий

Аноним Пнд 09 Июн 2014 15:34:28  #10 №360412 

>>360402
Спасибо, няша.

Аноним Пнд 09 Июн 2014 15:37:30  #11 №360414 

>>360403
Ты просто не можешь в поэзию программирования.
отхлебнул борща

Аноним Пнд 09 Июн 2014 15:48:40  #12 №360418 

>>360414
Монахи Перла смотрят на тебя с недоумением.

Аноним Пнд 09 Июн 2014 16:11:59  #13 №360424 

>>360389
Оп, а как можно выйти из всех функций с помощью флага, вроде как дополнительной переменной? Нигде подробно не могу найти.

!xnn2uE3AU. Пнд 09 Июн 2014 16:27:26  #14 №360427 

>>360424

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

Аноним Пнд 09 Июн 2014 16:40:35  #15 №360429 

>>360427
https://ideone.com/lgUPwq

Сделал. 59 шагов. Если сравнивать с началом, где было 20 000 вроде, то это значительный прорыв.

!xnn2uE3AU. Пнд 09 Июн 2014 16:54:54  #16 №360430 

>>360429

> if (isset($x)) {
Это очень плохая конструкция,так как переменная то ли есть, то и ее нет. Как можно писать надежный код когда непонятно даже есть ли такая переменная?

Лучше в начале функции присвоить ей null, и проверять соовтственно с помощью if ($x)

Алсо, я не понимаю, зачем там 2 if-а когда $x может вернуться только из рекурсивного вызова функции и можно этот if поставить там.

Ну, насчет 59 шагов — это конечно здорово, но давай сделаем чтобы их было меньше 10 в данном примере.

ыыыы Пнд 09 Июн 2014 17:24:21  #17 №360440 
1402320261712.gif

>>360376
Лалка. Сосай со своим похапе.

Аноним Пнд 09 Июн 2014 18:03:41  #18 №360453 

>>360430
https://ideone.com/lgUPwq

Ну ладно, это я сделал. А как вот это реализовать:

>То есть если мы выбрали 1×500, а нам надо выдать 740, то логично брать за основу для расчета числа 100-х не 740, а 740 - 500 = 240.

Не совсем понял.

Аноним Пнд 09 Июн 2014 18:07:59  #19 №360454 

>>359870
Я вот так вот сделал без всяких сторонних парсеров и даже без регулярных выражений.

http://ideone.com/1Sq6hd

!xnn2uE3AU. Пнд 09 Июн 2014 18:17:26  #20 №360458 

>>360453

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

А в чем смысл if в строке 36? Когда, он по твоему, сработает?

>>360454

Костыли какие-то честно говоря.

Аноним Пнд 09 Июн 2014 18:23:54  #21 №360460 

>>360458
> Костыли какие-то честно говоря.
Ну я же и так чувствую, что что-то не так, но то твоё сообщение я уже прочитал после того, как сделал.

Аноним Пнд 09 Июн 2014 18:51:54  #22 №360464 
1402325514265.jpg

Прописываюсь в ИТТ треде.
U2FsdGVkX1+y9QpNicLIjFjBAHdE2Sivz/ffJwUaH1s=

Аноним Пнд 09 Июн 2014 19:45:43  #23 №360475 

http://ideone.com/e.js/4y8CxN

нихуя не понимаю в чем может быть ошибка, поясните

Аноним Пнд 09 Июн 2014 19:50:08  #24 №360477 

>>360475
Названия переменных не могут начинаться с цифр.

Аноним Пнд 09 Июн 2014 19:56:19  #25 №360478 

>>360477
http://ideone.com/e.js/4y8CxN

Переделал и дописал, но все равно ругается

Аноним Пнд 09 Июн 2014 20:04:47  #26 №360480 

>>360478
Ты ошибки-то хотя бы пытаешься читать? 24 строка.

Аноним Пнд 09 Июн 2014 20:11:26  #27 №360481 

>>360480
Поясни.

В той же 15 строке вроде написано все правильно, как и в примере.

А вот с 24 не уверен, но до нее еще дойти надо.

Аноним Пнд 09 Июн 2014 20:15:15  #28 №360483 

>>360481
Тебе интерпретатор английским по белому написал, что ошибка в 24 строке. У тебя else вместо elseif.

Аноним Пнд 09 Июн 2014 20:19:17  #29 №360485 

>>360483
Благодарю.

Аноним Пнд 09 Июн 2014 22:24:46  #30 №360504 

>>360458

Ну вот эта строка к примеру:

bills 10, 4, 2, 0, sum=500

Без 10 десяток, получается 5*50+2*100=400. А выдать то надо 240. В чем подвох?

Аноним Пнд 09 Июн 2014 23:36:16  #31 №360513 

Оп, смотри.

http://habrahabr.ru/post/143452/

Там описано про необязательные теги. И якобы их лучше опускать. Стоит ли это делать? Все-таки простота кода.

Также там написано, что type можно не использовать, т.к. он уже стоит по умолчанию.

!xnn2uE3AU. Втр 10 Июн 2014 02:04:11  #32 №360522 

>>360504

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

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

Твой алгоритм считает:

- надо взять для начала 3×1000 (а потом 2×1000,1×1000 или 0×1000)
- переходим к купюрам номиналом 500
- надо взять для начала 6×500 <- а это уже неправильно, так как если мы уже взяли 3×1000 то остается неразменянными только 400, а не 3400, и надо считать число 500-х исходя из суммы 400 (то есть сразу брать 0×500 не проверяя варианты 6×500, 5×500 и тд). А у тебя он берет 3×1000 + 6×500 что больше чем исходная сумма и получаются лишние варианты.

По моему я про это писал несколько дней назад. Давай-ка исправим.

!xnn2uE3AU. Втр 10 Июн 2014 02:15:24  #33 №360524 

>>360513

Советы в общем годные.

Да, спецификация HTML разрешает пропускать некоторые теги. Например, закрывающие теги <p> и <li>:

<div>
<p>абзац1
<p>абзац2
</div>
<ul>
<li>Пункт 1
<li>Пункт 2
</ul>

Но до фанатизма доходить не следует. Я не видел чтобы кто-нибудь пропускал html, head и body — так что думаю не стоит это делать пока. Также, ты не сможешь поставить css-классы или какие-то аттрибуты на body если пропустишь его. А например для подключения тегов ogp (которые исползуются фейсбуком) надо добавлять аттрибуты то ли на html, то ли на head.

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

Главное, не заыбвай проверять код валидатором. Для браузеров есть расширения, которые добавляют кнопку для отправки текущей страницы в валидатор.

Заметь, что там написано то же, что я писал ранее:

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


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

Аноним Втр 10 Июн 2014 08:54:55  #34 №360540 

>>360522
https://ideone.com/62Xo2X

Сделал. 4 шага всего.

Аноним Втр 10 Июн 2014 10:48:40  #35 №360547 

Оп, копирую из старого треда:
>>359684
>>359868

http://sqlfiddle.com/#!2/d8ba9/7

> То же относится и к GROUP BY — его можно вынести наружу. И COUNT() можно вынести

Я наверное плохо понимаю, как работает GROUP BY и COUNT (только не надо посылать в мануал, уже перечитал 5 раз),
но как их вынести наружу я хоть убей не пойму.

Как мне 2 раза в 1 запросе сгруппировать и посчитать COUNT разных групп для двух отдельных столбцов?

Аноним Втр 10 Июн 2014 12:50:17  #36 №360565 

>>360547

sqlfiddle сдох, чтоли? старая паста не отображается, новая не пастится.
Короче вот чуть упрощенный запрос:

SELECT user_id,user_name, likes_get, likes_given, likes_reciprocal
FROM users
LEFT JOIN
(
SELECT like_from_user_id, COUNT(like_from_user_id) AS likes_given
FROM likes
GROUP BY like_from_user_id
) AS sub1
ON user_id = sub1.like_from_user_id

LEFT JOIN
(
SELECT like_to_user_id, COUNT(like_to_user_id) AS likes_get
FROM likes
GROUP BY like_to_user_id
) AS sub2
ON user_id = sub2.like_to_user_id

LEFT JOIN
(
SELECT l1.like_from_user_id, l1.like_to_user_id, COUNT(l1.like_from_user_id) AS likes_reciprocal
FROM likes AS l1
JOIN likes AS l2
ON (
l1.like_from_user_id = l2.like_to_user_id AND
l1.like_to_user_id = l2.like_from_user_id
)
GROUP BY l1.like_from_user_id
) AS sub3
ON user_id = sub3.like_from_user_id

ORDER BY user_id

Таблицу Users вынес "за скобки" но как вынести GROUP BY и COUNT я не пойму

регулярки Аноним Втр 10 Июн 2014 13:28:27  #37 №360569 

Вот, выношу на суд общественности две первых задачки посвященных регуляркам.
http://ideone.com/zV2RFe
http://ideone.com/gTFDV4

Аноним Втр 10 Июн 2014 13:41:49  #38 №360570 

>>360569
+7-(919)-853-3756
891985337562

регулярки Аноним Втр 10 Июн 2014 13:45:59  #39 №360572 

>>360570
Второй номер определяет, ну а первый номер не попадает под условия задачи. Хотя добавить [+]?[\\d] вместо 8 не проблема.

Аноним Втр 10 Июн 2014 13:47:41  #40 №360574 

>>360572
Но второй - это не телефонный номер. Там слишком много цифр.

регулярки Аноним Втр 10 Июн 2014 13:50:29  #41 №360575 

>>360574
Ну блин, телефонные номера очень уж разные бывают и короче и длиннее.
Вот задача от опа - Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — праивльный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).

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

Аноним Втр 10 Июн 2014 13:53:07  #42 №360576 

>>360575
Ну так попробуй прогнать номер, который был в задании ОПа, 8-(911)-506 56 56. Он не подойдет. А вот такой номер подойдет: 8256283562834628356283562852865.

регулярки Аноним Втр 10 Июн 2014 13:54:41  #43 №360577 

>>360576
> 8-(911)-506 56 56
И вправду, спасибо, буду допиливать. Может подскажешь как лучше выйти из ситуации с слишком длинными номерами?

Аноним Втр 10 Июн 2014 13:57:51  #44 №360579 

>>360577
Выход один, убедиться, что у тебя в номере ровно 11 цифр. Тебе нужно [-\\s\\d]{7,} расписать более подробно, со всеми возможными разделителями внутри, чтобы в итоге избавиться от {7,} оставив ровно 7 цифр.

!xnn2uE3AU. Втр 10 Июн 2014 13:58:26  #45 №360580 

>>360540

4 шага — это хорошо.

Вот еще несколько мелочей, которые стоит исправить:

Для суммы 620 не находит ответ: https://ideone.com/6ORNmR — раскомментируй там echo и посмотри почему.

> elseif ($amount == 0) {
Какой смысл это условие держать внутри цикла? Его логичнее вынести перед циклом for.

> for($i = 0; $i < count($billsCopy); $i++) {
foreach ($billsCopy as $value => $count)

Массив $result можно тоже убрать и сразу суммировать в переменную.

> findChange($amount, $keysBills, $bills, 3)
Надо чтобы 3 была не прописана жестко, а вычислялась из массива bills, чтобы если добавить/убрать виды купюр, все работало.

Аноним Втр 10 Июн 2014 14:06:42  #46 №360582 

>>360580
Оп, сейчас доделаю.

Сейчас думал над считалкой. Гугл сказал есть формула по считалке Джозефуса. Не могу пока вникнуть. Может что подскажешь?

Есть еще решето Эратосфена, но это по-моему не то.

!xnn2uE3AU. Втр 10 Июн 2014 14:21:40  #47 №360586 

>>360565

Тыж программист, нажимаешь Ctrl + Shift + I в Хроме, там вкладку Network, ищешь аякс-запрос GET http://sqlfiddle.com/index.cfm/fiddles/loadContent?fragment=!2%2Fd8ba9%2F7 и видишь там:

{"sets":[{"SUCCEEDED":false,"ERRORMESSAGE":"datasource [sqlfiddle] doesn't exist"}]}

Временная ошибка какая-то.

GROUP BY всего лишь объединяет строки о указанному полю/полям (и сортирует по ним же если нет ORDER). Никаких особых секретов в нем нет.

> Как мне 2 раза в 1 запросе сгруппировать и посчитать COUNT разных групп для двух отдельных столбцов?
А, ты думаешь, получатся неправильные результаты? Давай посмотрим, какой вид имеет наша объединенная таблица если убрать COUNT/GROUP BY и оставить только джойн (юзеры × полученные × отданные лайки). Допустим юзер 1 поставил лайки юзерам 6, 7 и получил лайки от 3, 4, 5. Тогда первый джойн (на таблицу полученных лайков) дает нам 3 строки, а второй (на таблицу отданных) дает еще 2 строки, которые присоединяются к каждой из трех.



user_id likes_received likes_sent
1 3 6
1 4 6
1 5 6
1 3 7
1 4 7
1 5 7
100 NULL NULL
[code]

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

Так как тут группировка, тот очевидно, надо применять аггрегатные функции. Вот инфа по ним:

http://phpclub.ru/mysql/doc/group-by-functions.html
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
http://www.pyramidin.narod.ru/rusql/ch6.html

!xnn2uE3AU. Втр 10 Июн 2014 14:28:26  #48 №360587 

>>360582

В вики есть статья, можешь почитать: http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%98%D0%BE%D1%81%D0%B8%D1%84%D0%B0_%D0%A4%D0%BB%D0%B0%D0%B2%D0%B8%D1%8F

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

>>360575

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

Правильные: 84951234567, +74951234567, 8-495-1-234-567, 8 (8122) 56-56-56, 8-911-1234567, 8 (911) 12 345 67, 8-911 12 345 67

Неправильные: 02, 84951234567 позвать люсю, 849512345, 849512345678, 8 (409) 123-123-123, 7900123467, 5005005001, 8888-8888-88, 84951a234567, 8495123456a

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

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

!xnn2uE3AU. Втр 10 Июн 2014 14:34:43  #49 №360589 

>>360582

Решето используется для поиска простых чисел (которые ни на что не делятся, например, 1, 2, 3, 5, 7, 11, 13, 17, 19, 23 и так далее). И его придумали чуть ли не древние греки.

>>360569

Пишет что ошибка в слове «антракт»: http://ideone.com/nOf2BN , хотя ее нет.

> if (preg_match_all($error1, $text)) {
Можно использовать preg_match, которая ищет только первое совпадение, этого достаточно чтобы проверить есть там ошибки или нет.

От копипасты из 4-х одинаковых if надо избавиться. Например, с помощью цикла и массива.

Аноним Втр 10 Июн 2014 15:20:36  #50 №360601 

>>360580
https://ideone.com/KO3OZL

Думал, сейчас исправлю, а это оказалось и не такая уж и мелочь. Понаписал ерунды. Понял, что только нужно наверное новую переменную завести $leftAmount и каждый новый отсчет $leftAmount приравнивать к $amount. Но что-то не то.

Аноним Втр 10 Июн 2014 15:26:25  #51 №360603 

Начал 3 дня назад делать уроки из оп-поста, вроде интересно, но смущает математика.
Не то чтобы совсем она не получалась (одноклассница написала ЕГЭ на минимальный проходной балл, до такого я не опускался), я ей не занимался несколько лет, но мягко говоря я там не блистал. Вот у меня был одноклассник с техническим складом ума, он не учил, и решал все хорошо.
А я не учил и не решал, потому что было скучно тупые уравнения решать, я играл в гравити.
Я не верю, что тут все - студенты мехмата.
Как вы эту ситуацию решаете?

Аноним Втр 10 Июн 2014 15:32:07  #52 №360605 

>>360603
> Как вы эту ситуацию решаете?
Становимся студентами мехмата. Или уже являемся ими
Без математики все равно далеко не уедешь. Алсо, математика это далеко не только тупые уравнения решать.

!xnn2uE3AU. Втр 10 Июн 2014 15:50:46  #53 №360607 

>>360603

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

Аноним Втр 10 Июн 2014 16:44:24  #54 №360614 
1402404264067.png

Аноны, помогите!
Нужно решить с помощью вложенных циклов.
За 2 часа перепробовал кучу вариантов и остановился на этом нихуя не правильно


for ($i=1; $i<=4; $i++) {
for ($j=41; $j<=80; $j++) {
echo "$j ";
}
echo "<br/>";
}

Готов скинуть за помощь немного р. на ЯД
Аноним Втр 10 Июн 2014 16:55:06  #55 №360615 

>>360614
for ($i=4; $i<=7; $i++) {
for ($j=1; $j<=10; $j++) {
echo ($i + $j / 10).($j % 10)." ";
}
echo "<br/>";
}

Аноним Втр 10 Июн 2014 17:13:38  #56 №360619 

>>360615
Хуита с выводом получается.

Аноним Втр 10 Июн 2014 17:14:45  #57 №360620 

>>360615
Какой же ты долбоёб.


for ($i=4; $i<=7; $i++) {
for ($j=1; $j<=10; $j++) {
echo ($j * 10 + $i)." ";
}
echo "<br/>";
}
Аноним Втр 10 Июн 2014 17:16:04  #58 №360621 

>>360620
Бля, я тоже.


for ($i=4; $i<=7; $i++) {
for ($j=1; $j<=10; $j++) {
echo ($i * 10 + $j)." ";
}
echo "<br/>";
}
Аноним Втр 10 Июн 2014 17:17:58  #59 №360622 

>>360621
Спасибо анон!
Чому кошелек ЯД не написал?

Аноним Втр 10 Июн 2014 17:23:26  #60 №360624 

ОП, можешь клон посмотреть ?
https://github.com/Verpul/uppu.ru/

Аноним Втр 10 Июн 2014 17:32:32  #61 №360626 
1402407152018.png

Помогите тогда уж с этими.
1. Запилино на 90%. Пытался перевернуть, все по пизде поехало.


for ($i=2; $i<=6; $i++) {
for ($k=$i; $k>=2; $k--) {
echo "$k ";
}
echo "<br/>";
}

2. Перепробовал кучу вариантов и нихуя.
Опять же, за помощь отправлю деньжат на ЯД
!xnn2uE3AU. Втр 10 Июн 2014 17:51:33  #62 №360631 

>>360620

Цикл не обязательно должен увеличивать счетчик на 1. Можно писать for ($j=10; $j<=100; $j+=10)

А можно вообще сделать 1 цикл, просто на каждой 10-й цифре вставлять перевод строки.

Алсо, что за <br> да еще и со слешем в конце? Где такому учат? Слеш был в XHTML, в HTML4/5 его нет.

Ужас, сколько кругом плохих и неправильных учебников.

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

Аноним Втр 10 Июн 2014 17:55:35  #63 №360632 

>>360631
>Где такому учат?
Это мой любимый БРЯК
мимоборисов

Аноним Втр 10 Июн 2014 17:58:02  #64 №360634 

>>360631>
> Можно писать for ($j=10; $j<=100; $j+=10)
Спасибо, не знал что так можно.

> Алсо, что за <br> да еще и со слешем в конце? Где такому учат? Слеш был в XHTML, в HTML4/5 его нет.
Привык с xhtml. Все равно он никакой роли не играет.

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

Аноним Втр 10 Июн 2014 18:02:21  #65 №360635 

>>360601
Оп, ну помоги, нет идей.

Аноним Втр 10 Июн 2014 18:13:40  #66 №360638 

>>360626
Посоны, отбой 2 задачи. Спасибо еще раз ОПу за подсказку с >$j+=10
Помогите с 1.

!xnn2uE3AU. Втр 10 Июн 2014 18:15:45  #67 №360639 

>>360634

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

>>360601

Ну посмотри, что там пишется:

> leftAmount=-480
Как остаток вообще может быть меньше нуля?

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

> $currentMaxBills = min(floor($amount / $keysBills[$billNumber]), $bills[$currentBill]);

То есть если надо выдать 3400, и мы дошли до 10-рублевых купюр, ты пытаешься взять 340×10 — при этом не считая сколько уже взято более крупных купюр, может мы там уже кучу 500-х и 100-х взяли.

Также, это место выглядит неправильно:

for ($i = $currentMaxBills; $i >= 0; $i--) {
....
if ($leftAmount == 0) {

leftAmount не меняется внутри цикла. Оно одинаково на каждом шаге. Вопрос, зачем тогда в цикле несколько раз проверять что оно равно нулю, если результат проверки всегда будет одинаков: либо всегда равно, либо всегда не равно? Тут либо ошибка, либо ошибки нет и надо просто вынести if из цикла.

Аноним Втр 10 Июн 2014 18:32:21  #68 №360641 

>>360639

Сумма: 620
10 => 5,
50 => 0,
200 => 10,
500 => 10

Ну ладно, вот начинаем изменять этот массив:

1) 500x1, осталось 120
2) 200x0, потому что осталось 120 < 200
3) 50x0
4) 10x5, осталось 70

Все, остановились. И это ерунда.

Что не так?

!xnn2uE3AU. Втр 10 Июн 2014 18:42:45  #69 №360646 

>>360641

> Все, остановились. И это ерунда.
Не так. Так как нам не удалось найти соответствие, мы выходим из нескольких вложенных вызовов к первому (где мы перебирали 500-е и где в цикле i = 1) и теперь пробуем взять 0x500 (осталось соответственно 620), и снова рекурсивно вызываем себя — но в этот раз уже с целью набрать 620, и в итоге находим правильный вариант (3×200 + 2×10).

Этот алгоритм в отличие от жадного не сдается, а просто убавляет число купюр на одну и пробует снова. Для этого там и стоит цикл от N до 0 — чтобы перебрать все возможные варианты. Мы знаем, что купюр не больше чем N, но точное число мы не знаем и потому перебираем все варианты.

Аноним Втр 10 Июн 2014 18:43:09  #70 №360647 

>>360626
https://ideone.com/0vknT5 хотя наверняка я не так понял условие и написал наркоманию какую-то

!xnn2uE3AU. Втр 10 Июн 2014 18:44:29  #71 №360649 

>>360624

Ок. гляну позже

Аноним Втр 10 Июн 2014 18:49:40  #72 №360651 

>>360647
Все ты так понял. Спасибо няша :3

регулярки Аноним Втр 10 Июн 2014 18:53:26  #73 №360653 

>>360587
Пока что на ум приходит только такой вариант - вырезать все кроме цифр и потом уже сравнивать. Или по другому лучше?

!xnn2uE3AU. Втр 10 Июн 2014 18:56:37  #74 №360654 

>>360653

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

Аноним Втр 10 Июн 2014 19:00:35  #75 №360655 

>>360586

>Подумай, как из этого получить число полученных/отданных лайков. Есть идеи?

Ну тут кажется дошло.

SELECT user_id, user_name,
COUNT(DISTINCT l1.like_to_user_id) AS likes_given,
COUNT(DISTINCT l2.like_from_user_id) AS likes_get
FROM users

LEFT JOIN likes AS l1
ON user_id = l1.like_from_user_id

LEFT JOIN likes AS l2
ON user_id = l2.like_to_user_id

GROUP BY user_id

Теперь думаю над взаимными лайками

регулярки Аноним Втр 10 Июн 2014 19:06:44  #76 №360656 

>>360589
http://ideone.com/C7UL6M
Пофиксил.

Аноним Втр 10 Июн 2014 19:11:19  #77 №360657 

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

регулярки Аноним Втр 10 Июн 2014 19:11:45  #78 №360658 

>>360654
Я вот думаю над этим уже не один час, но как то много вариантов. Сначала у нас может быть плюс, а может и быть скобка(мало ли кому так нравится). Цифры могут быть сгруппированы как угодно и разделены пробелами знаком минуса(а вдруг кто то дефис а не минус заюзает?). Из этого вывод - что нужна регулярка которая ищет одиннадцать цифр в которой где угодно могут стоять символы ()- пробела. Ну плюс только спереди. Как это реализовать пока идей нету. Читаю книженцию Дж. Фридл - регулярные выражения. Надеюсь найти ответ там.

Аноним Втр 10 Июн 2014 19:14:13  #79 №360659 

>>360657
AJAX

Аноним Втр 10 Июн 2014 19:17:28  #80 №360660 
1402413448402.png

ОП, короче есть div, который выводит сообщение об ошибке. И есть поле ввода для текста. Свойство padding я задал одинаковым что для input[type="text"], так и для моего блока #message-div. padding: 3px 3px 3px 5px;
Через яваскрипт устанавливаю позицию блока ошибки top и left. Во-первых криво устанавливается. Немного выше, чем top input'a. А во-вторых высота блоков разная. Что можно сделать или дать информации подробней? Я думаю ты уловил, что я хочу сделать.

регулярки Аноним Втр 10 Июн 2014 19:19:17  #81 №360661 

>>360658
Еще вопрос. В книженции есть такая вещь как \< и \> Соответственно начало и конец последовательности символов. Когда я вставил в свой код(с удвоением бэкслэша естественно, ничего не работало). Заюзал вместо этого \\b для начала слова и \\s для конца. В разных языках некоторые вещи в регулярках могут различаться или вовсе отсутствовать или я чего то не понял с этими \< \>?

Аноним Втр 10 Июн 2014 19:33:11  #82 №360663 

>>360646
То есть, когда происходит возвращение к исходной функции ($billNumber = 3), то $amount заново должен быть равен 620?

Аноним Втр 10 Июн 2014 20:10:18  #83 №360669 

>>360660
Поправил padding у message-div и вроде ровно стало. Всё равно интересно, почему даже если у input и блока стоят одинаковые внутренние отступы, по высоте блоки не совпадают. Это от свойства box-sizing может зависит?

!xnn2uE3AU. Втр 10 Июн 2014 20:11:09  #84 №360670 

>>360661

Есть разные диалекты регулярных выражений. Php использует PCRE (Перл-совместимые [на самом деле не совсем] выражения). В книге видимо другой диалект, там должно быть где-то в начале это упомянуто.

Не бойся, базовые вещи вроде * + ? | работают везде одинаково, различия там в более сложных конструкциях.

Вот описание всех возможностей pcre: http://www.php.net/manual/ru/pcre.pattern.php

В PCRE есть такое:

\\A — начало текста
\\Z — конец текста
^ — начало текста или начало любой строки в многострочном тексте если стоит флаг m (multiline)
$ — конец текста или конец любой строки если стоит флаг m

\\b — это граница слова, то есть место где с одной стороны стоит \\w (буква, цифра, подчеркивание), а с другой \\W (не-буква, цифра, подчеркивание)

\\s — это пробельный символ (пробел, перевод строки \n)

!xnn2uE3AU. Втр 10 Июн 2014 20:16:11  #85 №360672 

>>360663

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

>>360660

div справа от инпута каким способом туда помещен? Выложи код на jsbin или jsfiddle или codepad.

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

> Через яваскрипт устанавливаю позицию блока ошибки top и left.
Ты делаешь большую глупость. Это можно решить через CSS и оно будет корректно работать при изменении размеров страницы, шрифта, и чего угодно еще. Надо изучать CSS, а не лепить костыли.

Аноним Втр 10 Июн 2014 20:18:44  #86 №360674 

http://phpliveregex.com/
Для тех, кто познает регулярки и для тех, кто уже познал. Есть еще один ресурс, удобнее, но он почему-то в спам листе (http://goo.gl/wMz7ZR гугл ссылка).

!xnn2uE3AU. Втр 10 Июн 2014 20:21:27  #87 №360676 

>>360669

Высота у них как раз совпадает, ты просто позиционируешь его неправильно.

>>360658

>нужна регулярка которая ищет одиннадцать цифр в которой где угодно могут стоять символы ()- пробела.

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

>>360656

[\\S] равносильно просто \\S
Не видит ошибки если после но есть запятая (перед — нету): http://ideone.com/wy3bke

!xnn2uE3AU. Втр 10 Июн 2014 20:27:36  #88 №360680 

>>360655

Молодец, думай теперь дальше.

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





Аноним Втр 10 Июн 2014 20:28:56  #89 №360682 

>>360672
Через css я никак не задам положение блока в зависимости от ситуации. Этот блок ошибки появляется рядом с ошибочным полем. Пример на пике.
Ну вот рабочий пример с высчитанным padding'ом для message-div. http://jsbin.com/diqohiso/2/
В принципе, оно работает и хорошо. Можешь направить на путь истинный, если что-то следует поменять.

регулярки Аноним Втр 10 Июн 2014 20:29:26  #90 №360683 

>>360676
http://ideone.com/jvlYHv
То есть символ \\b можно спокойно юзать обрамляя им с двух сторон слово. Этакий аналог \<\> ?

Аноним Втр 10 Июн 2014 20:29:50  #91 №360684 
1402417790346.png

>>360682
Забыл пик.

Аноним Втр 10 Июн 2014 20:30:52  #92 №360685 

>>360682
Тащемта, размеры не совпадали, потому что у input ещё граница задана была размером в 1px.

регулярки Аноним Втр 10 Июн 2014 21:04:31  #93 №360693 

>>360676
http://ideone.com/rkSUCC
Я чуть не кончил радугой когда увидел что оно определяет верные и неверные номера (по крайне мере те номера что ты мне дал), с утра о регулярки мозг ломаю.

Аноним Втр 10 Июн 2014 21:05:47  #94 №360695 

>>360639
https://ideone.com/FXlyPl

i=0, billNumber = 2, amount=620, bills 5, 0, 0, 0, sum=50

Вот здесь по сути должно быть:

bills 5, 0, 3, 0

Но нет, рисуется 0. Зачем тут 3 вообще нужна, 0 подавай.

Эта задача меня уже с ума сводит.

!xnn2uE3AU. Втр 10 Июн 2014 21:11:48  #95 №360700 

>>360674

Да, хороший сайт.

>>360682

Ты можешь сделать несколько блоков (1 на каждое поле) и скрывать/показывать нужные или перемещать блок с помощью:

$errorBlock.appendAfter($input); (если jquery)
parent.insertBefore(block, null); (если использовать методы DOM).

А позиционировать средствами CSS.

Достаточно обернуть input и блок в див и применить абсолютное позиционирование или, что лучше, флоат.

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

Определение положения элемента через JS

Вычисление, которое ты используешь через offsetTop, неправильное, вот почему:

- offsetLeft/Top дает нам смещение относительно ближайшего позиционированного элемента (или корневого элемента если такого нет). Ты вычисляешь сумму всех offsetLeft/Top вплоть до корня, но потом используешь ее для присваивания свойству left/top которое позиционирует как раз относительно ближайшего поз-нного предка, а не относительно корневого элемента.

Пример: http://jsbin.com/diqohiso/3

Логичнее брать только первый offsetLeft/Top.

- offsetTop/Left не учитывает случай, когда родитель содержит линейку прокрутки и элементы внутри него смещены путем прокрутки: http://jsbin.com/diqohiso/4

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

Есть другой способ определить позицию элемента — правда не относительно угла документа, а отсносительно края окна — но зато более простой и надежный — это getBoundingClientRect():

https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
http://learn.javascript.ru/coordinates#координаты-в-окне-elem-getboundingclientrect

Он возвращает объект со свойствами left, top, right, bottom, которые отмеряются от краев экрана. Чтобы из них получить позицию относительно начала документа, достаточно прибавить величину на которую прокручена страница (documentElement.scrollTop/Left или document.body.scrollTop/Left — единства тут нету).

Если ты например посмотришь как устроен в jquery метод offset() (который определяет позицию элемента относительно края документа) то увидишь что он использует clientRect: https://github.com/jquery/jquery/blob/master/src/offset.js#L74

Но я-то помню, что раньше он использовал метод вроде твоего, с циклом и offsetLeft. Вот старая версия кода той же функции: https://github.com/jquery/jquery/commit/77536f5cb2ab042ac8be40ba59f36d8f3bd7e4d1#diff-d38379d70ee2c5c5a0acb5b0f7acef8dL32

Обрати внимание, как там все хитро приходится учитывать — и scrollLeft/Top для прокручиваемых элементов, и ширину border, и дополнительные отступы на body. Очевидно, что это ужасно неудобный и ненадежный способ, но видимо в каких-то особо странных браузерах getBoundingClienRect не поддерживался. Я впрочем, с такими не сталкивался — этот метод прекрасно работает даже в ИЕ6.

Вот пост Резига на эту тему: http://ejohn.org/blog/getboundingclientrect-is-awesome/

Алсо, я погуглил — в фаерфоксе до 3-й версии этот метод не поддерживался, видимо потому не использовали. Ну что ж, позор мозилле за это.

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

!xnn2uE3AU. Втр 10 Июн 2014 21:22:31  #96 №360705 

>>360683

> То есть символ \\b можно спокойно юзать обрамляя им с двух сторон слово
Можно.

Но теперь другая проблема: видит ошибку там где есть запятая перед «а»: http://ideone.com/FzykPD

>>360693

С утра? Там мало? Может тебе еще надо задачек подкинуть?

> for ($i =0; $i < count($rightNumbers); $i++) {
Используй foreach для обхода массива. Зачем писать везде [$i] если можно не писать?

Я тебе добавил еще несколько тест-кейсов, где твоя регулярка не работает: http://ideone.com/4woUeC

[(] — имей в виду, спецсимволы можно еще экранировать бекслешами: \\(

!xnn2uE3AU. Втр 10 Июн 2014 21:25:26  #97 №360709 

>>360695


> if ($billNumber !=0) {
> $lastAmount = $lastAmount - $currentBill*$currentMaxBills;
> }
Ты же это делаешь перед циклом. А в цикле меняешь число банкнот номиналом currentBill. то есть leftAmount должен считаться заново на каждом шаге цикла, а не вычисляться один раз и быть неизменным.

!xnn2uE3AU. Втр 10 Июн 2014 21:26:53  #98 №360711 

>>360695

Сделай вывод leftAmouте вместо amount, может виднее будет. Ну и вообще, если что не так — добавляй вывод переменных.

Аноним Втр 10 Июн 2014 21:28:29  #99 №360715 
1402421309696.jpg

Вопрос - пикрелейтед.

!xnn2uE3AU. Втр 10 Июн 2014 21:35:50  #100 №360720 

**Аноны, если посты не проходят, постите их на http://www.notehub.org/ — там есть markdown-разметка и нет (по крайней мере пока) рекламы и отличный дизайн страницы**

>>360715

Ты не можешь получить доступ к $a так как статические методы вызваются на классе, а не на объекте. staticFunction() может быть вызвыан когда объекта нет или когда объектов несоклько — откуда брать эту переменную. В твоем случае, используй синглтон, но также я тебе рекомендую почитать что-нибудь по ООП, например книги

> По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
> По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования

А то ты по моему ООП толком не понял.

Аноним Втр 10 Июн 2014 21:40:50  #101 №360723 

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

Аноним Втр 10 Июн 2014 22:12:39  #102 №360730 

>>360711


if ($billNumber == 3) {
$lastAmount = $amount;
}


Ладно, такой вопрос: как вернуть $lastAmount в исходное значение для всех функций, после пересчета последней? Выше не сработало.
Аноним Втр 10 Июн 2014 22:38:51  #103 №360749 

>>360700
Развёрнутые ответы даёшь. Спасибо.

Аноним Втр 10 Июн 2014 23:06:36  #104 №360756 

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

Аноним Втр 10 Июн 2014 23:32:07  #105 №360760 

>>360756
<?php header('Content-Type text/html; charset=utf-8'); ?>

Аноним Втр 10 Июн 2014 23:52:45  #106 №360766 

Эээ, анон с файлообменником в z2 опять выходит на связь.
Почти всё поправил согласно рекомендациям, но немного не доходит, как реализовать "отдачу файла напрямую". Начитался всякого разного и решил, что надо делать вообще без php, залез в дебри всяких .htaccsess'ов, но в целом не представляю, как это должно работать, если файлы хранятся в виде abrakadabra.tmp ну так правильно, насколько я понял, или не? и всё равно нужно лезть в БД за нормальным именем и всё это обрабатывать. Можно пинка животворящего в нужном направлении?

Аноним Срд 11 Июн 2014 00:02:31  #107 №360768 

а я вам пасту принес

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

Важные моменты
веб-программирование на базе PHP - это стек технологий: PHP/SQL/CSS/HTML/JS + Linux хотя бы азы + знание важных инструментариев (FTP, Git/SVN, работа с БД)
чистый PHP плюс даже все перечисленное выше - не особо нужно и не интересно. Нужно знание конкретных платформ: фреймворков и/или CMS. (Почитайте вакансии на Хантиме по запросу PHP, обратите на это внимание). Навскидку самые востребованные (спорно конечно): Yii фреймворк, CMS Битрикс и Wordpress.

Как начать?
Смело на амбразуру!
1) Установите у себя рабочую среду LAMP/WAMP - Apache, PHP, MySQL. Для этого возьмите пакет Denwer или OpenServer, что больше понравится. Сделайте Hello World просто как HTML, потом на PHP, потом алертом на JS. Порадуйтесь.
Установите все редакторы кода. Кто там вам будет рекомендовать блокнот или notepad++ - не слушайте. Варианты: если машина мощная (4+ Гб памяти и пр.), берите редактор phpStorm (для php/html/css/js). Если не очень мощная - берите komodo edit. Для работы с БД инструмент встроен в Denwer/OpenServer, это phpMyAdmin
2) Идеально, если вы договоритесь сделать кому-нибудь сайт. Бесплатно или за небольшую плату. Если нет - сами себе поставьте задачу: сайт про котиков/про детей etc. Красивый сайт, с галереей, с эффектами, с материалами
Возьмите CMS Wordpress и попытайтесь сделать сайт у себя на компьтере. Настоящий сайт, во всей красе, как вы хотите. Правьте его, смотрите код, экспериментируйте. Сообщество огромное, вы найдете ответы на все свои вопросы
Потратьте чуть денег, купите себе домен и хостинг, залейте сайт на хостинг.
Порадуйтесь. Похвастайтесь.
3) Ищите в сети тестовые задачи и решайте их, изучайте материалы собеседований, вопросы - их много.
4) Зарегистрируйтесь на odesk.com под каким-то фейковым email, пройдите тесты по PHP, CSS, HTML, jQuery, Wordpress, а во время прохождения делайте скриншоты вопросов. Потом изучайте эти вопросы, ищите ответы, далеко не обязательно на все. Тесты вы, конечно, не пройдете, но вам нужны только вопросы.
5) Постоянно следите за вакансиями "PHP-программист", "веб-программист" на Хантиме, на hh.ru и подобных ресурсах.

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

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

Аноним Срд 11 Июн 2014 00:10:46  #108 №360770 

>>360766
Возвращай из php-кода URL файла, а не сам файл и делай на него редирект. А сервер пусть сам возвращает файл.

Аноним Срд 11 Июн 2014 01:57:46  #109 №360791 

ОП СПУСТЯ МЕСЯЦ Я СОЗРЕЛ ДЛЯ ВТОРОГО ЗАДАНИЯ
ПРОВЕРЯЙ ПОЧТУ

Аноним Срд 11 Июн 2014 02:20:07  #110 №360797 

Назрели такие вот вопросы по пыхе: Каким образом можно вывести результат sql запроса в html'ный <select>?
То бишь, есть вручную заполненное говно:

<select>
<option value="0">null</option>
<option value="1">one</option>
<option value="2">two</option>
</select>

Чтобы каждое из таких значений бралось из результатов sql запроса. Да, я аутист. Каким образом такое сделать?
comments powered by Disqus